diff --git a/ChangeLog b/ChangeLog index dea331372d1583ea58cca495b21d71ae9299e674..f3b134daa6330c7bf1fe5cefa3f35ec0960e8c83 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,49 @@ +2018-01-29 Uwe Schulzweida + + * Version 1.9.3 released + +2018-01-29 Uwe Schulzweida + + * Set GRIB center=252, subcenter=1 for MPI-M + +2018-01-16 Uwe Schulzweida + + * Skip unavailable coordinate variables (bug fix) + +2018-01-13 Uwe Schulzweida + + * streamFilesuffix(): refactoring (bug fix) + +2018-01-09 Uwe Schulzweida + + * GRIBAPI: Added support for variables with same name and different gridsize. + +2018-01-06 Uwe Schulzweida + + * Removed CDI function vlistDefVarTimaccu()/vlistInqVarTimaccu(). + +2018-01-05 Uwe Schulzweida + + * Replaced vlistDefVarEnsemble() by cdiDefKeyInt(). + * Consistent test for GRIB2 shortName [patch from: Florian Prill] + * Added support for GRIB2 keys shapeOfTheEarth and typeOfProcessedData + * Replaced vlistDefVarProductDefinitionTemplate() by cdiDefKeyInt(). + * Replaced vlistDefVarTypeOfGeneratingProcess() by cdiDefKeyInt(). + +2018-01-04 Uwe Schulzweida + + * GRIB2: use typeOfSecondFixedSurface if present + * Added support for GRIB2 key tablesVersion/localTablesVersion + * Added CDI function cdiDefKeyInt()/cdiInqKeyInt() + +2017-12-07 Uwe Schulzweida + + * Check positive attribute for scalar z coordinates (bug fix) + +2017-11-23 Uwe Schulzweida + + * netCDF: set coordinate attribute to "tlon tlat" for GRID_TRAJECTORY (bug fix) + 2017-11-21 Uwe Schulzweida * Version 1.9.2 released diff --git a/Makefile.in b/Makefile.in index 93e11e7bf8686a2773cbb0abf5a66f5bed45b5bd..20162260ad38679e83580e9e51e929cdc305176a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -322,6 +322,9 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OSSP_UUIDROOT = @OSSP_UUIDROOT@ +OSSP_UUID_C_INCLUDE = @OSSP_UUID_C_INCLUDE@ +OSSP_UUID_C_LIB = @OSSP_UUID_C_LIB@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -355,6 +358,9 @@ THREADS_INCLUDE = @THREADS_INCLUDE@ THREADS_LIBS = @THREADS_LIBS@ USER_NAME = @USER_NAME@ USE_MPI = @USE_MPI@ +UTIL_LINUX_UUIDROOT = @UTIL_LINUX_UUIDROOT@ +UTIL_LINUX_UUID_C_INCLUDE = @UTIL_LINUX_UUID_C_INCLUDE@ +UTIL_LINUX_UUID_C_LIB = @UTIL_LINUX_UUID_C_LIB@ UUID_C_LIB = @UUID_C_LIB@ VERSION = @VERSION@ YAXT_CFLAGS = @YAXT_CFLAGS@ diff --git a/app/Makefile.in b/app/Makefile.in index f3c05a51e4d93f38a4e432572eda6af6dfc7ffca..fe9723767cb995853257ec0c418cdfbc0413f48a 100644 --- a/app/Makefile.in +++ b/app/Makefile.in @@ -295,6 +295,9 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OSSP_UUIDROOT = @OSSP_UUIDROOT@ +OSSP_UUID_C_INCLUDE = @OSSP_UUID_C_INCLUDE@ +OSSP_UUID_C_LIB = @OSSP_UUID_C_LIB@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -328,6 +331,9 @@ THREADS_INCLUDE = @THREADS_INCLUDE@ THREADS_LIBS = @THREADS_LIBS@ USER_NAME = @USER_NAME@ USE_MPI = @USE_MPI@ +UTIL_LINUX_UUIDROOT = @UTIL_LINUX_UUIDROOT@ +UTIL_LINUX_UUID_C_INCLUDE = @UTIL_LINUX_UUID_C_INCLUDE@ +UTIL_LINUX_UUID_C_LIB = @UTIL_LINUX_UUID_C_LIB@ UUID_C_LIB = @UUID_C_LIB@ VERSION = @VERSION@ YAXT_CFLAGS = @YAXT_CFLAGS@ diff --git a/configure b/configure index 0398de5a9dd8cbd012627f80c7daa81c2876288f..c4a350f507b323bfada103e56858cb98722e3763 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for cdi 1.9.2. +# Generated by GNU Autoconf 2.68 for cdi 1.9.3. # # Report bugs to <http://mpimet.mpg.de/cdi>. # @@ -570,8 +570,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='cdi' PACKAGE_TARNAME='cdi' -PACKAGE_VERSION='1.9.2' -PACKAGE_STRING='cdi 1.9.2' +PACKAGE_VERSION='1.9.3' +PACKAGE_STRING='cdi 1.9.3' PACKAGE_BUGREPORT='http://mpimet.mpg.de/cdi' PACKAGE_URL='' @@ -712,6 +712,12 @@ SYSTEM_TYPE HOST_NAME USER_NAME UUID_C_LIB +OSSP_UUID_C_LIB +OSSP_UUID_C_INCLUDE +OSSP_UUIDROOT +UTIL_LINUX_UUID_C_LIB +UTIL_LINUX_UUID_C_INCLUDE +UTIL_LINUX_UUIDROOT CXXCPP CPP OTOOL64 @@ -859,6 +865,13 @@ with_gnu_ld with_sysroot enable_libtool_lock enable_largefile +enable_util_linux_uuid +with_util_linux_uuid_root +with_util_linux_uuid_include +with_util_linux_uuid_lib +with_ossp_uuid_root +with_ossp_uuid_include +with_ossp_uuid_lib with_threads with_szlib with_netcdf @@ -900,6 +913,10 @@ CXXFLAGS CCC CPP CXXCPP +UTIL_LINUX_UUID_C_INCLUDE +UTIL_LINUX_UUID_C_LIB +OSSP_UUID_C_INCLUDE +OSSP_UUID_C_LIB MPI_C_INCLUDE MPI_C_LIB MPI_FC_INCLUDE @@ -1466,7 +1483,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures cdi 1.9.2 to adapt to many kinds of systems. +\`configure' configures cdi 1.9.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1536,7 +1553,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of cdi 1.9.2:";; + short | recursive ) echo "Configuration of cdi 1.9.3:";; esac cat <<\_ACEOF @@ -1559,6 +1576,9 @@ Optional Features: optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-largefile omit support for large files + --disable-util-linux-uuid + Do not test for the util-linux UUID library, use + OSSP or DCE versions instead --enable-grib GRIB support [default=yes] --enable-cgribex Use the CGRIBEX library [default=yes] --enable-service Use the service library [default=yes] @@ -1586,6 +1606,24 @@ Optional Packages: --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). + --with-util-linux-uuid-root + set directory to search for util-linux-uuid headers + and library + --with-util-linux-uuid-include + specifically set directory to search for + util-linux-uuid headers, + [default=$with_util_linux_uuid_root/include] + --with-util-linux-uuid-lib + specifically set directory to search for + util-linux-uuid library, + [default=$with_util_linux_uuid_root/lib] + --with-ossp-uuid-root set directory to search for ossp-uuid headers and + library + --with-ossp-uuid-include + specifically set directory to search for ossp-uuid + headers, [default=$with_ossp_uuid_root/include] + --with-ossp-uuid-lib specifically set directory to search for ossp-uuid + library, [default=$with_ossp_uuid_root/lib] --with-threads=<yes/no/directory> Compile + link for multithreading [default=yes] --with-szlib=<yes|no|directory> (default=no) @@ -1625,6 +1663,16 @@ Some influential environment variables: CXXFLAGS C++ compiler flags CPP C preprocessor CXXCPP C++ preprocessor + UTIL_LINUX_UUID_C_INCLUDE + specifically set flags to use when compiling sources using + util-linux-uuid includes. + UTIL_LINUX_UUID_C_LIB + specifically set flags to use when linking util-linux-uuid. + OSSP_UUID_C_INCLUDE + specifically set flags to use when compiling sources using + ossp-uuid includes. + OSSP_UUID_C_LIB + specifically set flags to use when linking ossp-uuid. MPI_C_INCLUDE specifically set flags to use when compiling sources using MPI includes. @@ -1735,7 +1783,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -cdi configure 1.9.2 +cdi configure 1.9.3 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2580,7 +2628,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by cdi $as_me 1.9.2, which was +It was created by cdi $as_me 1.9.3, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3532,7 +3580,7 @@ fi # Define the identity of the package. PACKAGE='cdi' - VERSION='1.9.2' + VERSION='1.9.3' cat >>confdefs.h <<_ACEOF @@ -23449,7 +23497,7 @@ Usage: $0 [OPTIONS] Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ -cdi config.lt 1.9.2 +cdi config.lt 1.9.3 configured by $0, generated by GNU Autoconf 2.68. Copyright (C) 2011 Free Software Foundation, Inc. @@ -26019,7 +26067,502 @@ _ACEOF fi done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +# Check whether --enable-util-linux-uuid was given. +if test "${enable_util_linux_uuid+set}" = set; then : + enableval=$enable_util_linux_uuid; +else + enable_util_linux_uuid=auto +fi + +# Sed expression to map a string onto a valid argument string part. +asx_tr_arg="eval sed 'y%*+%pp%;s%[^-$as_cr_alnum]%-%g'" + +if test x"${enable_util_linux_uuid}" != xno; then : + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_link="./libtool --mode=link --tag=CC $ac_link" + + + + + + + + have_util_linux_uuid_c_bindings=yes + + +# Check whether --with-util-linux-uuid-root was given. +if test "${with_util_linux_uuid_root+set}" = set; then : + withval=$with_util_linux_uuid_root; UTIL_LINUX_UUIDROOT="$with_util_linux_uuid_root" +fi + + if ${UTIL_LINUX_UUIDROOT+:} false; then : + if ${UTIL_LINUX_UUID_C_LIB+:} false; then : + +else + acx_temp=$UTIL_LINUX_UUIDROOT + UTIL_LINUX_UUID_C_LIB="-L$acx_temp/lib" +fi + if ${UTIL_LINUX_UUID_C_INCLUDE+:} false; then : + +else + acx_temp=$UTIL_LINUX_UUIDROOT + UTIL_LINUX_UUID_C_INCLUDE="-I$acx_temp/include" +fi +fi + +# Check whether --with-util-linux-uuid-include was given. +if test "${with_util_linux_uuid_include+set}" = set; then : + withval=$with_util_linux_uuid_include; UTIL_LINUX_UUID_C_INCLUDE="-I$with_util_linux_uuid_include" +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid/uuid.h extra include path" >&5 +$as_echo_n "checking for uuid/uuid.h extra include path... " >&6; } + if ${acx_cv_c_include_uuid_uuid_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_include_search_uuid_uuid_h_SAVE="$CPPFLAGS" + while :; do + for ac_incdir in ''; do + if test -z "$ac_incdir"; then : + ac_res="none required" + CPPFLAGS="$UTIL_LINUX_UUID_C_INCLUDE $ac_include_search_uuid_uuid_h_SAVE" +else + ac_res="-I$ac_incdir" + CPPFLAGS="$UTIL_LINUX_UUID_C_INCLUDE $ac_res $ac_include_search_uuid_uuid_h_SAVE" +fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#include <uuid/uuid.h> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + acx_cv_c_include_uuid_uuid_h=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if ${acx_cv_c_include_uuid_uuid_h+:} false; then : + if test -z "$ac_incdir"; then : + acx_cv_c_include_uuid_uuid_h="$UTIL_LINUX_UUID_C_INCLUDE" +else + acx_cv_c_include_uuid_uuid_h="$UTIL_LINUX_UUID_C_INCLUDE -I$ac_incdir" +fi +fi + if ${acx_cv_c_include_uuid_uuid_h+:} false; then : + break +fi + done + if ${acx_cv_c_include_uuid_uuid_h+:} false; then : + break +fi + + break + done + CPPFLAGS=$ac_include_search_uuid_uuid_h_SAVE +fi + + if ${acx_cv_c_include_uuid_uuid_h+:} false; then : + acx_temp=$acx_cv_c_include_uuid_uuid_h + if test x"$acx_temp" = x; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none required)" >&5 +$as_echo "(none required)" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_temp" >&5 +$as_echo "$acx_temp" >&6; } +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +fi + if ${acx_cv_c_include_uuid_uuid_h+:} false; then : + acx_temp=$acx_cv_c_include_uuid_uuid_h + acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` + UTIL_LINUX_UUID_C_INCLUDE=$acx_temp +else + have_util_linux_uuid_c_bindings=no + +fi + + +# Check whether --with-util-linux-uuid-lib was given. +if test "${with_util_linux_uuid_lib+set}" = set; then : + withval=$with_util_linux_uuid_lib; UTIL_LINUX_UUID_C_LIB="-L$with_util_linux_uuid_lib" +fi + + + + if test "x$have_util_linux_uuid_c_bindings" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uuid_generate" >&5 +$as_echo_n "checking for library containing uuid_generate... " >&6; } + if ${acx_cv_option_search_uuid_generate_c+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + acx_option_func_search_save_LIBS="$LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF + for ac_lib in '' uuid; do + if test -z "$ac_lib"; then : + ac_res="none required" + LIBS="$UTIL_LINUX_UUID_C_LIB $acx_option_func_search_save_LIBS" +else + ac_res="-l$ac_lib" + LIBS="$UTIL_LINUX_UUID_C_LIB $ac_res $acx_option_func_search_save_LIBS" +fi + if ac_fn_c_try_link "$LINENO"; then : + if test x"$ac_res" = x"none required"; then : + acx_cv_option_search_uuid_generate_c="$UTIL_LINUX_UUID_C_LIB " +else + acx_cv_option_search_uuid_generate_c="$UTIL_LINUX_UUID_C_LIB -l$ac_lib " +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${acx_cv_option_search_uuid_generate_c+:} false; then : + break +fi + done + rm conftest.$ac_ext + LIBS="$acx_option_func_search_save_LIBS" + if ${acx_cv_option_search_uuid_generate_c+:} false; then : + break +fi + + break + done +fi + + if ${acx_cv_option_search_uuid_generate_c+:} false; then : + if test x"$acx_cv_option_search_uuid_generate_c" = x; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none required)" >&5 +$as_echo "(none required)" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_option_search_uuid_generate_c" >&5 +$as_echo "$acx_cv_option_search_uuid_generate_c" >&6; } +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +fi + if ${acx_cv_option_search_uuid_generate_c+:} false; then : + +else + have_util_linux_uuid_c_bindings=no + +fi + + acx_temp=$acx_cv_option_search_uuid_generate_c + acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` + UTIL_LINUX_UUID_C_LIB=$acx_temp + +fi + + + + + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_link="./libtool --mode=link --tag=CC $ac_link" + +fi +if test x"$have_util_linux_uuid_c_bindings" = xyes; then : + CPPFLAGS="${CPPFLAGS+$CPPFLAGS }$UTIL_LINUX_UUID_C_INCLUDE" + UUID_C_LIB=$UTIL_LINUX_UUID_C_LIB +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_link="./libtool --mode=link --tag=CC $ac_link" + + + + + + + + have_ossp_uuid_c_bindings=yes + + +# Check whether --with-ossp-uuid-root was given. +if test "${with_ossp_uuid_root+set}" = set; then : + withval=$with_ossp_uuid_root; OSSP_UUIDROOT="$with_ossp_uuid_root" +fi + + if ${OSSP_UUIDROOT+:} false; then : + if ${OSSP_UUID_C_LIB+:} false; then : + +else + acx_temp=$OSSP_UUIDROOT + OSSP_UUID_C_LIB="-L$acx_temp/lib" +fi + if ${OSSP_UUID_C_INCLUDE+:} false; then : + +else + acx_temp=$OSSP_UUIDROOT + OSSP_UUID_C_INCLUDE="-I$acx_temp/include" +fi +fi + +# Check whether --with-ossp-uuid-include was given. +if test "${with_ossp_uuid_include+set}" = set; then : + withval=$with_ossp_uuid_include; OSSP_UUID_C_INCLUDE="-I$with_ossp_uuid_include" +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid.h extra include path" >&5 +$as_echo_n "checking for uuid.h extra include path... " >&6; } + if ${acx_cv_c_include_uuid_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_include_search_uuid_h_SAVE="$CPPFLAGS" + while :; do + for ac_incdir in ''; do + if test -z "$ac_incdir"; then : + ac_res="none required" + CPPFLAGS="-I/usr/include/ossp $OSSP_UUID_C_INCLUDE $ac_include_search_uuid_h_SAVE" +else + ac_res="-I$ac_incdir" + CPPFLAGS="-I/usr/include/ossp $OSSP_UUID_C_INCLUDE $ac_res $ac_include_search_uuid_h_SAVE" +fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#include <uuid.h> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + acx_cv_c_include_uuid_h=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if ${acx_cv_c_include_uuid_h+:} false; then : + if test -z "$ac_incdir"; then : + acx_cv_c_include_uuid_h="-I/usr/include/ossp $OSSP_UUID_C_INCLUDE" +else + acx_cv_c_include_uuid_h="-I/usr/include/ossp $OSSP_UUID_C_INCLUDE -I$ac_incdir" +fi +fi + if ${acx_cv_c_include_uuid_h+:} false; then : + break +fi + done + if ${acx_cv_c_include_uuid_h+:} false; then : + break +fi + + break + done + CPPFLAGS=$ac_include_search_uuid_h_SAVE +fi + + if ${acx_cv_c_include_uuid_h+:} false; then : + acx_temp=$acx_cv_c_include_uuid_h + if test x"$acx_temp" = x; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none required)" >&5 +$as_echo "(none required)" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_temp" >&5 +$as_echo "$acx_temp" >&6; } +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +fi + if ${acx_cv_c_include_uuid_h+:} false; then : + acx_temp=$acx_cv_c_include_uuid_h + acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` + OSSP_UUID_C_INCLUDE=$acx_temp +else + have_ossp_uuid_c_bindings=no + +fi + + +# Check whether --with-ossp-uuid-lib was given. +if test "${with_ossp_uuid_lib+set}" = set; then : + withval=$with_ossp_uuid_lib; OSSP_UUID_C_LIB="-L$with_ossp_uuid_lib" +fi + + + + if test "x$have_ossp_uuid_c_bindings" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uuid_create" >&5 +$as_echo_n "checking for library containing uuid_create... " >&6; } + if ${acx_cv_option_search_uuid_create_c+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + acx_option_func_search_save_LIBS="$LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_create (); +int +main () +{ +return uuid_create (); + ; + return 0; +} +_ACEOF + for ac_lib in '' ossp-uuid; do + if test -z "$ac_lib"; then : + ac_res="none required" + LIBS="$OSSP_UUID_C_LIB $acx_option_func_search_save_LIBS" +else + ac_res="-l$ac_lib" + LIBS="$OSSP_UUID_C_LIB $ac_res $acx_option_func_search_save_LIBS" +fi + if ac_fn_c_try_link "$LINENO"; then : + if test x"$ac_res" = x"none required"; then : + acx_cv_option_search_uuid_create_c="$OSSP_UUID_C_LIB " +else + acx_cv_option_search_uuid_create_c="$OSSP_UUID_C_LIB -l$ac_lib " +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${acx_cv_option_search_uuid_create_c+:} false; then : + break +fi + done + rm conftest.$ac_ext + LIBS="$acx_option_func_search_save_LIBS" + if ${acx_cv_option_search_uuid_create_c+:} false; then : + break +fi + + break + done +fi + + if ${acx_cv_option_search_uuid_create_c+:} false; then : + if test x"$acx_cv_option_search_uuid_create_c" = x; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none required)" >&5 +$as_echo "(none required)" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_option_search_uuid_create_c" >&5 +$as_echo "$acx_cv_option_search_uuid_create_c" >&6; } +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +fi + if ${acx_cv_option_search_uuid_create_c+:} false; then : + +else + have_ossp_uuid_c_bindings=no + +fi + + acx_temp=$acx_cv_option_search_uuid_create_c + acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` + OSSP_UUID_C_LIB=$acx_temp + +fi + + + + + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_link="./libtool --mode=link --tag=CC $ac_link" + + if test x"$have_ossp_uuid_c_bindings" = xyes; then : + CPPFLAGS_save=$CPPFLAGS + CPPFLAGS="${CPPFLAGS+$CPPFLAGS }$OSSP_UUID_C_INCLUDE" + UUID_C_LIB=$OSSP_UUID_C_LIB + for ac_header in uuid.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "uuid.h" "ac_cv_header_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UUID_H 1 +_ACEOF + ac_fn_c_check_decl "$LINENO" "uuid_create" "ac_cv_have_decl_uuid_create" "$ac_includes_default +#include <uuid.h> +" +if test "x$ac_cv_have_decl_uuid_create" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_UUID_CREATE $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + ac_fn_c_check_decl "$LINENO" "UUID_MAKE_V5" "ac_cv_have_decl_UUID_MAKE_V5" "$ac_includes_default +#include <uuid.h> +" +if test "x$ac_cv_have_decl_UUID_MAKE_V5" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_UUID_MAKE_V5 $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + have_ossp_uuid_c_bindings=no +fi + +else + have_ossp_uuid_c_bindings=no +fi + +else + have_ossp_uuid_c_bindings=no +fi + +done + + if test x"$have_ossp_uuid_c_bindings" = xno; then : + UUID_C_LIB= + CPPFLAGS=$CPPFLAGS_save +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 $as_echo_n "checking for uuid_generate in -luuid... " >&6; } if ${ac_cv_lib_uuid_uuid_generate+:} false; then : $as_echo_n "(cached) " >&6 @@ -26101,6 +26644,8 @@ done fi +fi +fi # ---------------------------------------------------------------------- # Checks for the availability of ANSI-C99 functions @@ -28169,9 +28714,6 @@ done # ---------------------------------------------------------------------- # Compile with MPI support -# Sed expression to map a string onto a valid argument string part. -asx_tr_arg="eval sed 'y%*+%pp%;s%[^-$as_cr_alnum]%-%g'" - # Check whether --enable-mpi was given. if test "${enable_mpi+set}" = set; then : enableval=$enable_mpi; enable_mpi=yes @@ -30184,7 +30726,7 @@ cat >>confdefs.h <<_ACEOF _ACEOF -ac_config_files="$ac_config_files tests/test_cksum_grib tests/test_cksum_nc tests/test_cksum_nc2 tests/test_cksum_nc4 tests/test_cksum_extra tests/test_cksum_service tests/test_cksum_ieg tests/test_chunk_cksum tests/test_f2003 tests/pio_write_run tests/pio_write_deco2d_run tests/pio_cksum_mpinonb tests/pio_cksum_mpi_fw_ordered tests/pio_cksum_mpi_fw_at_all tests/pio_cksum_mpi_fw_at_reblock tests/pio_cksum_fpguard tests/pio_cksum_asynch tests/pio_cksum_writer tests/pio_cksum_cdf tests/test_resource_copy_mpi_run tests/test_cdf_transformation tests/test_cdf_const tables/gen_tableheaderfile util/serialrun" +ac_config_files="$ac_config_files tests/test_cksum_grib tests/test_cksum_nc tests/test_cksum_nc2 tests/test_cksum_nc4 tests/test_cksum_extra tests/test_cksum_service tests/test_cksum_ieg tests/test_chunk_cksum tests/test_f2003 tests/pio_write_run tests/pio_write_deco2d_run tests/pio_cksum_mpinonb tests/pio_cksum_mpi_fw_ordered tests/pio_cksum_mpi_fw_at_all tests/pio_cksum_mpi_fw_at_reblock tests/pio_cksum_fpguard tests/pio_cksum_asynch tests/pio_cksum_writer tests/pio_cksum_cdf tests/test_byteswap_run tests/test_resource_copy_run tests/test_resource_copy_mpi_run tests/test_cdf_transformation tests/test_cdf_const tests/test_table_run tables/gen_tableheaderfile util/serialrun" ac_config_files="$ac_config_files Makefile src/Makefile interfaces/Makefile app/Makefile tests/Makefile examples/Makefile cdi.settings examples/pio/Makefile src/pkgconfig/cdi.pc src/pkgconfig/cdipio.pc" @@ -30808,7 +31350,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by cdi $as_me 1.9.2, which was +This file was extended by cdi $as_me 1.9.3, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -30874,7 +31416,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -cdi config.status 1.9.2 +cdi config.status 1.9.3 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" @@ -31573,9 +32115,12 @@ do "tests/pio_cksum_asynch") CONFIG_FILES="$CONFIG_FILES tests/pio_cksum_asynch" ;; "tests/pio_cksum_writer") CONFIG_FILES="$CONFIG_FILES tests/pio_cksum_writer" ;; "tests/pio_cksum_cdf") CONFIG_FILES="$CONFIG_FILES tests/pio_cksum_cdf" ;; + "tests/test_byteswap_run") CONFIG_FILES="$CONFIG_FILES tests/test_byteswap_run" ;; + "tests/test_resource_copy_run") CONFIG_FILES="$CONFIG_FILES tests/test_resource_copy_run" ;; "tests/test_resource_copy_mpi_run") CONFIG_FILES="$CONFIG_FILES tests/test_resource_copy_mpi_run" ;; "tests/test_cdf_transformation") CONFIG_FILES="$CONFIG_FILES tests/test_cdf_transformation" ;; "tests/test_cdf_const") CONFIG_FILES="$CONFIG_FILES tests/test_cdf_const" ;; + "tests/test_table_run") CONFIG_FILES="$CONFIG_FILES tests/test_table_run" ;; "tables/gen_tableheaderfile") CONFIG_FILES="$CONFIG_FILES tables/gen_tableheaderfile" ;; "util/serialrun") CONFIG_FILES="$CONFIG_FILES util/serialrun" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; @@ -33398,9 +33943,12 @@ _LT_EOF "tests/pio_cksum_asynch":F) chmod a+x "$ac_file" ;; "tests/pio_cksum_writer":F) chmod a+x "$ac_file" ;; "tests/pio_cksum_cdf":F) chmod a+x "$ac_file" ;; + "tests/test_byteswap_run":F) chmod a+x "$ac_file" ;; + "tests/test_resource_copy_run":F) chmod a+x "$ac_file" ;; "tests/test_resource_copy_mpi_run":F) chmod a+x "$ac_file" ;; "tests/test_cdf_transformation":F) chmod a+x "$ac_file" ;; "tests/test_cdf_const":F) chmod a+x "$ac_file" ;; + "tests/test_table_run":F) chmod a+x "$ac_file" ;; "tables/gen_tableheaderfile":F) chmod a+x "$ac_file" ;; "util/serialrun":F) chmod a+x "$ac_file" ;; diff --git a/configure.ac b/configure.ac index 8aac01a9a2b04a8df94d71a37cb8578cd74bccde..115b40d8dfaec7be4920ac4a6e58dcf3156c0f20 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ # autoconf 2.68 # libtool 2.4.2 -AC_INIT([cdi], [1.9.2], [http://mpimet.mpg.de/cdi]) +AC_INIT([cdi], [1.9.3], [http://mpimet.mpg.de/cdi]) AC_DEFINE_UNQUOTED(CDI, ["$PACKAGE_VERSION"], [CDI version]) @@ -73,14 +73,40 @@ AX_EXECINFO # Checks for the availability of functions AC_CHECK_FUNCS([mallinfo]) AC_CHECK_FUNCS([getline]) -AC_CHECK_LIB([uuid],[uuid_generate], - [AC_CHECK_DECLS([uuid_generate], - [UUID_C_LIB=-luuid],,[AC_INCLUDES_DEFAULT +AC_ARG_ENABLE([util-linux-uuid], + [AS_HELP_STRING([--disable-util-linux-uuid], + [Do not test for the util-linux UUID library, use OSSP or DCE versions instead])],, + [enable_util_linux_uuid=auto]) +AS_IF([test x"${enable_util_linux_uuid}" != xno], + [ACX_C_PACKAGE([util-linux-uuid],[uuid/uuid.h],,,[], + [uuid_generate],[[uuid]],,,[])]) +AS_IF([test x"$have_util_linux_uuid_c_bindings" = xyes], + [CPPFLAGS="${CPPFLAGS+$CPPFLAGS }$UTIL_LINUX_UUID_C_INCLUDE" + UUID_C_LIB=$UTIL_LINUX_UUID_C_LIB], + [ACX_C_PACKAGE([ossp-uuid],[uuid.h],,[-I/usr/include/ossp],[], + [uuid_create],[[ossp-uuid]],,,[]) + AS_IF([test x"$have_ossp_uuid_c_bindings" = xyes], + [CPPFLAGS_save=$CPPFLAGS + CPPFLAGS="${CPPFLAGS+$CPPFLAGS }$OSSP_UUID_C_INCLUDE" + UUID_C_LIB=$OSSP_UUID_C_LIB + AC_CHECK_HEADERS([uuid.h], + [AC_CHECK_DECLS([uuid_create], + [AC_CHECK_DECLS([UUID_MAKE_V5],,[have_ossp_uuid_c_bindings=no], + [AC_INCLUDES_DEFAULT +@%:@include <uuid.h>])],[have_ossp_uuid_c_bindings=no], + [AC_INCLUDES_DEFAULT +@%:@include <uuid.h>])],[have_ossp_uuid_c_bindings=no]) + AS_IF([test x"$have_ossp_uuid_c_bindings" = xno], + [UUID_C_LIB= + CPPFLAGS=$CPPFLAGS_save])], + [AC_CHECK_LIB([uuid],[uuid_generate], + [AC_CHECK_DECLS([uuid_generate], + [UUID_C_LIB=-luuid],,[AC_INCLUDES_DEFAULT @%:@include <uuid/uuid.h>])], - [AC_CHECK_FUNCS([uuid_create], - [AC_CHECK_DECLS([uuid_create], - [UUID_C_LIB=""],,[AC_INCLUDES_DEFAULT -@%:@include <uuid.h>])])]) + [AC_CHECK_FUNCS([uuid_create], + [AC_CHECK_DECLS([uuid_create], + [UUID_C_LIB=""],,[AC_INCLUDES_DEFAULT +@%:@include <uuid.h>])])])])]) AC_SUBST([UUID_C_LIB]) # ---------------------------------------------------------------------- # Checks for the availability of ANSI-C99 functions @@ -410,9 +436,12 @@ AC_CONFIG_FILES([tests/test_cksum_grib \ tests/pio_cksum_asynch \ tests/pio_cksum_writer \ tests/pio_cksum_cdf \ + tests/test_byteswap_run \ + tests/test_resource_copy_run \ tests/test_resource_copy_mpi_run \ tests/test_cdf_transformation \ tests/test_cdf_const \ + tests/test_table_run \ tables/gen_tableheaderfile \ util/serialrun],[chmod a+x "$ac_file"]) diff --git a/doc/tex/c_vlist.tex b/doc/tex/c_vlist.tex index 7ba4a013c8b505c991e6d1d1500e9e6fedee4445..8a2382a9324d3f924140abae5f1b9c22309ccbf3 100644 --- a/doc/tex/c_vlist.tex +++ b/doc/tex/c_vlist.tex @@ -21,7 +21,7 @@ and add a variable with {\texttt{vlistDefVar}}. int vlistID, varID; ... vlistID = vlistCreate(); - varID = vlistDefVar(vlistID, gridID, zaxisID, TSTEP_INSTANT); + varID = vlistDefVar(vlistID, gridID, zaxisID, TIME_VARYING); ... streamDefVlist(streamID, vlistID); ... diff --git a/doc/tex/cdi_cman.tex b/doc/tex/cdi_cman.tex index 550329168ffd8128ef9a1afc26338510d4c2c574..218c696b11c5b997f89743d9d70c24c392def26e 100644 --- a/doc/tex/cdi_cman.tex +++ b/doc/tex/cdi_cman.tex @@ -135,7 +135,7 @@ \end{picture} \begin{flushright} -{\large\bfseries Climate Data Interface \\ Version 1.9.2 \\ November 2017} +{\large\bfseries Climate Data Interface \\ Version 1.9.3 \\ January 2018} \end{flushright} \vfill diff --git a/doc/tex/cdi_fman.tex b/doc/tex/cdi_fman.tex index 771191deda4f661bb27442e29d1470587f9e7233..00506038b506400954e985f8fd3b44b2d06c8325 100644 --- a/doc/tex/cdi_fman.tex +++ b/doc/tex/cdi_fman.tex @@ -132,7 +132,7 @@ \end{picture} \begin{flushright} -{\large\bfseries Climate Data Interface \\ Version 1.9.2 \\ November 2017} +{\large\bfseries Climate Data Interface \\ Version 1.9.3 \\ January 2018} \end{flushright} \vfill diff --git a/doc/tex/f_vlist.tex b/doc/tex/f_vlist.tex index 95599f6dc361d21e01dcacfeafa517c74cc9162c..9f56e60a3fe27fdcc78ff3ba3e014d41b20fba81 100644 --- a/doc/tex/f_vlist.tex +++ b/doc/tex/f_vlist.tex @@ -21,7 +21,7 @@ and add a variable with {\texttt{vlistDefVar}}. INTEGER vlistID, varID ... vlistID = vlistCreate() - varID = vlistDefVar(vlistID, gridID, zaxisID, TSTEP_INSTANT) + varID = vlistDefVar(vlistID, gridID, zaxisID, TIME_VARYING) ... streamDefVlist(streamID, vlistID) ... diff --git a/examples/Makefile.in b/examples/Makefile.in index efcfe5f02ef975788d5031279afff7633931c2e4..8f92766286d61ca6724204c16ff1a297ec793eb4 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -361,6 +361,9 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OSSP_UUIDROOT = @OSSP_UUIDROOT@ +OSSP_UUID_C_INCLUDE = @OSSP_UUID_C_INCLUDE@ +OSSP_UUID_C_LIB = @OSSP_UUID_C_LIB@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -394,6 +397,9 @@ THREADS_INCLUDE = @THREADS_INCLUDE@ THREADS_LIBS = @THREADS_LIBS@ USER_NAME = @USER_NAME@ USE_MPI = @USE_MPI@ +UTIL_LINUX_UUIDROOT = @UTIL_LINUX_UUIDROOT@ +UTIL_LINUX_UUID_C_INCLUDE = @UTIL_LINUX_UUID_C_INCLUDE@ +UTIL_LINUX_UUID_C_LIB = @UTIL_LINUX_UUID_C_LIB@ UUID_C_LIB = @UUID_C_LIB@ VERSION = @VERSION@ YAXT_CFLAGS = @YAXT_CFLAGS@ diff --git a/examples/cdi_write_ens.c b/examples/cdi_write_ens.c index 3e5a5f07fa08888645fdd2e5edca2882eaea8b62..5987ab887e57d5741df2566ce3cbeea2743d1c55 100644 --- a/examples/cdi_write_ens.c +++ b/examples/cdi_write_ens.c @@ -21,7 +21,6 @@ int main(void) size_t nmiss; int instID; - int i1,i2,i3; size_t datasize = (size_t)nlon * (size_t)nlat; data = (double *) malloc(datasize * sizeof (double)); @@ -37,11 +36,18 @@ int main(void) vlistID = vlistCreate(); varID = vlistDefVar(vlistID, gridID, zaxisID, TIME_VARYING); + + int perturbationNumber = 1; + int numberOfForecastsInEnsemble = 2; + int typeOfEnsembleForecast = 3; - vlistDefVarEnsemble( vlistID, varID, 1, 2, 3); - - vlistInqVarEnsemble( vlistID, varID, &i1,&i2,&i3); - + cdiDefKeyInt(vlistID, varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, typeOfEnsembleForecast); + cdiDefKeyInt(vlistID, varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, numberOfForecastsInEnsemble); + cdiDefKeyInt(vlistID, varID, CDI_KEY_PERTURBATIONNUMBER, perturbationNumber); + + cdiInqKeyInt(vlistID, varID, CDI_KEY_PERTURBATIONNUMBER, &perturbationNumber); + cdiInqKeyInt(vlistID, varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, &numberOfForecastsInEnsemble); + cdiInqKeyInt(vlistID, varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, &typeOfEnsembleForecast); vlistDefInstitut( vlistID,instID ); diff --git a/examples/pio/Makefile.in b/examples/pio/Makefile.in index ebd9c3fa67d85b31b03986a28eafcc5d32d6732a..24ee4749ed079c40090168b69e5899b1c9915b75 100644 --- a/examples/pio/Makefile.in +++ b/examples/pio/Makefile.in @@ -337,6 +337,9 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OSSP_UUIDROOT = @OSSP_UUIDROOT@ +OSSP_UUID_C_INCLUDE = @OSSP_UUID_C_INCLUDE@ +OSSP_UUID_C_LIB = @OSSP_UUID_C_LIB@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -370,6 +373,9 @@ THREADS_INCLUDE = @THREADS_INCLUDE@ THREADS_LIBS = @THREADS_LIBS@ USER_NAME = @USER_NAME@ USE_MPI = @USE_MPI@ +UTIL_LINUX_UUIDROOT = @UTIL_LINUX_UUIDROOT@ +UTIL_LINUX_UUID_C_INCLUDE = @UTIL_LINUX_UUID_C_INCLUDE@ +UTIL_LINUX_UUID_C_LIB = @UTIL_LINUX_UUID_C_LIB@ UUID_C_LIB = @UUID_C_LIB@ VERSION = @VERSION@ YAXT_CFLAGS = @YAXT_CFLAGS@ diff --git a/examples/pio/compareResourcesArray.c b/examples/pio/compareResourcesArray.c index 297d808eeb2bfbc5b8327599d551a0684bd087c0..8fc3064f2d958599015fcbdafca20c65d8d816ad 100644 --- a/examples/pio/compareResourcesArray.c +++ b/examples/pio/compareResourcesArray.c @@ -57,7 +57,7 @@ static int defineGrid() gridDefYname ( gridID, "myYname" ); gridDefYlongname ( gridID, "myYlongname" ); gridDefYunits ( gridID, "myYunits" ); - gridDefPrec ( gridID, DOUBLE_PRECISION ); + gridDefDatatype ( gridID, DOUBLE_PRECISION ); gridDefTrunc ( gridID, 1 ); gridDefNumber ( gridID, 6 ); gridDefPosition ( gridID, 7 ); @@ -89,7 +89,7 @@ static int defineZaxis () zaxisDefName ( zaxisID, "myName" ); zaxisDefLongname ( zaxisID, "myLongname" ); zaxisDefUnits ( zaxisID, "myUnits" ); - zaxisDefPrec ( zaxisID, DOUBLE_PRECISION ); + zaxisDefDatatype ( zaxisID, DOUBLE_PRECISION ); zaxisDefLtype ( zaxisID, 1 ); zaxisDefVct ( zaxisID, 3, vct ); zaxisDefLbounds ( zaxisID, &levs[0] ); diff --git a/interfaces/Makefile.in b/interfaces/Makefile.in index 38722a614299a7944d3f785e9f0d539d7fb2114b..f6ff65358ddd37b0c73be78cdef9d4614e5d5af8 100644 --- a/interfaces/Makefile.in +++ b/interfaces/Makefile.in @@ -321,6 +321,9 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OSSP_UUIDROOT = @OSSP_UUIDROOT@ +OSSP_UUID_C_INCLUDE = @OSSP_UUID_C_INCLUDE@ +OSSP_UUID_C_LIB = @OSSP_UUID_C_LIB@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -354,6 +357,9 @@ THREADS_INCLUDE = @THREADS_INCLUDE@ THREADS_LIBS = @THREADS_LIBS@ USER_NAME = @USER_NAME@ USE_MPI = @USE_MPI@ +UTIL_LINUX_UUIDROOT = @UTIL_LINUX_UUIDROOT@ +UTIL_LINUX_UUID_C_INCLUDE = @UTIL_LINUX_UUID_C_INCLUDE@ +UTIL_LINUX_UUID_C_LIB = @UTIL_LINUX_UUID_C_LIB@ UUID_C_LIB = @UUID_C_LIB@ VERSION = @VERSION@ YAXT_CFLAGS = @YAXT_CFLAGS@ diff --git a/interfaces/python/CdiLib.py b/interfaces/python/CdiLib.py index feaa96167377a04b81f62e51d646d307c2bfaae7..89f0f54d25e5ac2e2845fb47eff088b21f1cef3b 100644 --- a/interfaces/python/CdiLib.py +++ b/interfaces/python/CdiLib.py @@ -321,8 +321,8 @@ gridInqYname = _CdiLib.gridInqYname gridInqYlongname = _CdiLib.gridInqYlongname gridInqYstdname = _CdiLib.gridInqYstdname gridInqYunits = _CdiLib.gridInqYunits -gridDefPrec = _CdiLib.gridDefPrec -gridInqPrec = _CdiLib.gridInqPrec +gridDefDatatype = _CdiLib.gridDefDatatype +gridInqDatatype = _CdiLib.gridInqDatatype gridInqXval = _CdiLib.gridInqXval gridInqYval = _CdiLib.gridInqYval gridInqXinc = _CdiLib.gridInqXinc @@ -382,8 +382,8 @@ zaxisDefUnits = _CdiLib.zaxisDefUnits zaxisInqName = _CdiLib.zaxisInqName zaxisInqLongname = _CdiLib.zaxisInqLongname zaxisInqUnits = _CdiLib.zaxisInqUnits -zaxisDefPrec = _CdiLib.zaxisDefPrec -zaxisInqPrec = _CdiLib.zaxisInqPrec +zaxisDefDatatype = _CdiLib.zaxisDefDatatype +zaxisInqDatatype = _CdiLib.zaxisInqDatatype zaxisDefLtype = _CdiLib.zaxisDefLtype zaxisInqLtype = _CdiLib.zaxisInqLtype zaxisInqLevelsPtr = _CdiLib.zaxisInqLevelsPtr diff --git a/interfaces/python/cdilib_wrap.c b/interfaces/python/cdilib_wrap.c index 8e7fb8fbb944526c2fa2e6ad6537b23c749dd2e0..85a9cf697ce2a7c16c1850339a4d573f5df00931 100644 --- a/interfaces/python/cdilib_wrap.c +++ b/interfaces/python/cdilib_wrap.c @@ -8056,7 +8056,7 @@ fail: } -SWIGINTERN PyObject *_wrap_gridDefPrec(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_gridDefDatatype(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; int arg1 ; int arg2 ; @@ -8067,18 +8067,18 @@ SWIGINTERN PyObject *_wrap_gridDefPrec(PyObject *SWIGUNUSEDPARM(self), PyObject PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:gridDefPrec",&obj0,&obj1)) SWIG_fail; + if (!PyArg_ParseTuple(args,(char *)"OO:gridDefDatatype",&obj0,&obj1)) SWIG_fail; ecode1 = SWIG_AsVal_int(obj0, &val1); if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "gridDefPrec" "', argument " "1"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "gridDefDatatype" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "gridDefPrec" "', argument " "2"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "gridDefDatatype" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); - gridDefPrec(arg1,arg2); + gridDefDatatype(arg1,arg2); resultobj = SWIG_Py_Void(); return resultobj; fail: @@ -8086,7 +8086,7 @@ fail: } -SWIGINTERN PyObject *_wrap_gridInqPrec(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_gridInqDatatype(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; int arg1 ; int val1 ; @@ -8094,13 +8094,13 @@ SWIGINTERN PyObject *_wrap_gridInqPrec(PyObject *SWIGUNUSEDPARM(self), PyObject PyObject * obj0 = 0 ; int result; - if (!PyArg_ParseTuple(args,(char *)"O:gridInqPrec",&obj0)) SWIG_fail; + if (!PyArg_ParseTuple(args,(char *)"O:gridInqDatatype",&obj0)) SWIG_fail; ecode1 = SWIG_AsVal_int(obj0, &val1); if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "gridInqPrec" "', argument " "1"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "gridInqDatatype" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); - result = (int)gridInqPrec(arg1); + result = (int)gridInqDatatype(arg1); resultobj = SWIG_From_int((int)(result)); return resultobj; fail: @@ -10004,7 +10004,7 @@ fail: } -SWIGINTERN PyObject *_wrap_zaxisDefPrec(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_zaxisDefDatatype(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; int arg1 ; int arg2 ; @@ -10015,18 +10015,18 @@ SWIGINTERN PyObject *_wrap_zaxisDefPrec(PyObject *SWIGUNUSEDPARM(self), PyObject PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:zaxisDefPrec",&obj0,&obj1)) SWIG_fail; + if (!PyArg_ParseTuple(args,(char *)"OO:zaxisDefDatatype",&obj0,&obj1)) SWIG_fail; ecode1 = SWIG_AsVal_int(obj0, &val1); if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "zaxisDefPrec" "', argument " "1"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "zaxisDefDatatype" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "zaxisDefPrec" "', argument " "2"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "zaxisDefDatatype" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); - zaxisDefPrec(arg1,arg2); + zaxisDefDatatype(arg1,arg2); resultobj = SWIG_Py_Void(); return resultobj; fail: @@ -10034,7 +10034,7 @@ fail: } -SWIGINTERN PyObject *_wrap_zaxisInqPrec(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_zaxisInqDatatype(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; int arg1 ; int val1 ; @@ -10042,13 +10042,13 @@ SWIGINTERN PyObject *_wrap_zaxisInqPrec(PyObject *SWIGUNUSEDPARM(self), PyObject PyObject * obj0 = 0 ; int result; - if (!PyArg_ParseTuple(args,(char *)"O:zaxisInqPrec",&obj0)) SWIG_fail; + if (!PyArg_ParseTuple(args,(char *)"O:zaxisInqDatatype",&obj0)) SWIG_fail; ecode1 = SWIG_AsVal_int(obj0, &val1); if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "zaxisInqPrec" "', argument " "1"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "zaxisInqDatatype" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); - result = (int)zaxisInqPrec(arg1); + result = (int)zaxisInqDatatype(arg1); resultobj = SWIG_From_int((int)(result)); return resultobj; fail: @@ -12474,8 +12474,8 @@ static PyMethodDef SwigMethods[] = { { (char *)"gridInqYlongname", _wrap_gridInqYlongname, METH_VARARGS, NULL}, { (char *)"gridInqYstdname", _wrap_gridInqYstdname, METH_VARARGS, NULL}, { (char *)"gridInqYunits", _wrap_gridInqYunits, METH_VARARGS, NULL}, - { (char *)"gridDefPrec", _wrap_gridDefPrec, METH_VARARGS, NULL}, - { (char *)"gridInqPrec", _wrap_gridInqPrec, METH_VARARGS, NULL}, + { (char *)"gridDefDatatype", _wrap_gridDefDatatype, METH_VARARGS, NULL}, + { (char *)"gridInqDatatype", _wrap_gridInqDatatype, METH_VARARGS, NULL}, { (char *)"gridInqXval", _wrap_gridInqXval, METH_VARARGS, NULL}, { (char *)"gridInqYval", _wrap_gridInqYval, METH_VARARGS, NULL}, { (char *)"gridInqXinc", _wrap_gridInqXinc, METH_VARARGS, NULL}, @@ -12535,8 +12535,8 @@ static PyMethodDef SwigMethods[] = { { (char *)"zaxisInqName", _wrap_zaxisInqName, METH_VARARGS, NULL}, { (char *)"zaxisInqLongname", _wrap_zaxisInqLongname, METH_VARARGS, NULL}, { (char *)"zaxisInqUnits", _wrap_zaxisInqUnits, METH_VARARGS, NULL}, - { (char *)"zaxisDefPrec", _wrap_zaxisDefPrec, METH_VARARGS, NULL}, - { (char *)"zaxisInqPrec", _wrap_zaxisInqPrec, METH_VARARGS, NULL}, + { (char *)"zaxisDefDatatype", _wrap_zaxisDefDatatype, METH_VARARGS, NULL}, + { (char *)"zaxisInqDatatype", _wrap_zaxisInqDatatype, METH_VARARGS, NULL}, { (char *)"zaxisDefLtype", _wrap_zaxisDefLtype, METH_VARARGS, NULL}, { (char *)"zaxisInqLtype", _wrap_zaxisInqLtype, METH_VARARGS, NULL}, { (char *)"zaxisInqLevelsPtr", _wrap_zaxisInqLevelsPtr, METH_VARARGS, NULL}, diff --git a/interfaces/ruby/cdilib_wrap.c b/interfaces/ruby/cdilib_wrap.c index 6cf7fc531bfaac62bc46e2bcc272c6f2aff9b0bd..45e96a928c6929ecab467bd83d387c48fadbc1a7 100644 --- a/interfaces/ruby/cdilib_wrap.c +++ b/interfaces/ruby/cdilib_wrap.c @@ -7226,7 +7226,7 @@ fail: SWIGINTERN VALUE -_wrap_gridDefPrec(int argc, VALUE *argv, VALUE self) { +_wrap_gridDefDatatype(int argc, VALUE *argv, VALUE self) { int arg1 ; int arg2 ; int val1 ; @@ -7239,15 +7239,15 @@ _wrap_gridDefPrec(int argc, VALUE *argv, VALUE self) { } ecode1 = SWIG_AsVal_int(argv[0], &val1); if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","gridDefPrec", 1, argv[0] )); + SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","gridDefDatatype", 1, argv[0] )); } arg1 = (int)(val1); ecode2 = SWIG_AsVal_int(argv[1], &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","gridDefPrec", 2, argv[1] )); + SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","gridDefDatatype", 2, argv[1] )); } arg2 = (int)(val2); - gridDefPrec(arg1,arg2); + gridDefDatatype(arg1,arg2); return Qnil; fail: return Qnil; @@ -7255,7 +7255,7 @@ fail: SWIGINTERN VALUE -_wrap_gridInqPrec(int argc, VALUE *argv, VALUE self) { +_wrap_gridInqDatatype(int argc, VALUE *argv, VALUE self) { int arg1 ; int val1 ; int ecode1 = 0 ; @@ -7267,10 +7267,10 @@ _wrap_gridInqPrec(int argc, VALUE *argv, VALUE self) { } ecode1 = SWIG_AsVal_int(argv[0], &val1); if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","gridInqPrec", 1, argv[0] )); + SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","gridInqDatatype", 1, argv[0] )); } arg1 = (int)(val1); - result = (int)gridInqPrec(arg1); + result = (int)gridInqDatatype(arg1); vresult = SWIG_From_int((int)(result)); return vresult; fail: @@ -9155,7 +9155,7 @@ fail: SWIGINTERN VALUE -_wrap_zaxisDefPrec(int argc, VALUE *argv, VALUE self) { +_wrap_zaxisDefDatatype(int argc, VALUE *argv, VALUE self) { int arg1 ; int arg2 ; int val1 ; @@ -9168,15 +9168,15 @@ _wrap_zaxisDefPrec(int argc, VALUE *argv, VALUE self) { } ecode1 = SWIG_AsVal_int(argv[0], &val1); if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","zaxisDefPrec", 1, argv[0] )); + SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","zaxisDefDatatype", 1, argv[0] )); } arg1 = (int)(val1); ecode2 = SWIG_AsVal_int(argv[1], &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","zaxisDefPrec", 2, argv[1] )); + SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","zaxisDefDatatype", 2, argv[1] )); } arg2 = (int)(val2); - zaxisDefPrec(arg1,arg2); + zaxisDefDatatype(arg1,arg2); return Qnil; fail: return Qnil; @@ -9184,7 +9184,7 @@ fail: SWIGINTERN VALUE -_wrap_zaxisInqPrec(int argc, VALUE *argv, VALUE self) { +_wrap_zaxisInqDatatype(int argc, VALUE *argv, VALUE self) { int arg1 ; int val1 ; int ecode1 = 0 ; @@ -9196,10 +9196,10 @@ _wrap_zaxisInqPrec(int argc, VALUE *argv, VALUE self) { } ecode1 = SWIG_AsVal_int(argv[0], &val1); if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","zaxisInqPrec", 1, argv[0] )); + SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","zaxisInqDatatype", 1, argv[0] )); } arg1 = (int)(val1); - result = (int)zaxisInqPrec(arg1); + result = (int)zaxisInqDatatype(arg1); vresult = SWIG_From_int((int)(result)); return vresult; fail: @@ -12056,8 +12056,8 @@ SWIGEXPORT void Init_CdiLib(void) { rb_define_module_function(mCdiLib, "gridInqYlongname", _wrap_gridInqYlongname, -1); rb_define_module_function(mCdiLib, "gridInqYstdname", _wrap_gridInqYstdname, -1); rb_define_module_function(mCdiLib, "gridInqYunits", _wrap_gridInqYunits, -1); - rb_define_module_function(mCdiLib, "gridDefPrec", _wrap_gridDefPrec, -1); - rb_define_module_function(mCdiLib, "gridInqPrec", _wrap_gridInqPrec, -1); + rb_define_module_function(mCdiLib, "gridDefDatatype", _wrap_gridDefDatatype, -1); + rb_define_module_function(mCdiLib, "gridInqDatatype", _wrap_gridInqDatatype, -1); rb_define_module_function(mCdiLib, "gridInqXval", _wrap_gridInqXval, -1); rb_define_module_function(mCdiLib, "gridInqYval", _wrap_gridInqYval, -1); rb_define_module_function(mCdiLib, "gridInqXinc", _wrap_gridInqXinc, -1); @@ -12117,8 +12117,8 @@ SWIGEXPORT void Init_CdiLib(void) { rb_define_module_function(mCdiLib, "zaxisInqName", _wrap_zaxisInqName, -1); rb_define_module_function(mCdiLib, "zaxisInqLongname", _wrap_zaxisInqLongname, -1); rb_define_module_function(mCdiLib, "zaxisInqUnits", _wrap_zaxisInqUnits, -1); - rb_define_module_function(mCdiLib, "zaxisDefPrec", _wrap_zaxisDefPrec, -1); - rb_define_module_function(mCdiLib, "zaxisInqPrec", _wrap_zaxisInqPrec, -1); + rb_define_module_function(mCdiLib, "zaxisDefDatatype", _wrap_zaxisDefDatatype, -1); + rb_define_module_function(mCdiLib, "zaxisInqDatatype", _wrap_zaxisInqDatatype, -1); rb_define_module_function(mCdiLib, "zaxisDefLtype", _wrap_zaxisDefLtype, -1); rb_define_module_function(mCdiLib, "zaxisInqLtype", _wrap_zaxisInqLtype, -1); rb_define_module_function(mCdiLib, "zaxisInqLevelsPtr", _wrap_zaxisInqLevelsPtr, -1); diff --git a/src/Makefile.am b/src/Makefile.am index 7c5cdcf32b114a5d90b088cf73ce0e1d895cf2dd..d09b58e3c8fd8ec708341fde7ae70325240c0926 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -117,6 +117,8 @@ libcdi_la_SOURCES = \ version.c \ vlist.c \ vlist.h \ + cdi_key.c \ + cdi_key.h \ cdi_att.c \ cdi_att.h \ vlist_var.c \ diff --git a/src/Makefile.in b/src/Makefile.in index 176506f3700aff2ce4c3c0a1612f3468b153e6c2..b292d7b7b2349fca36dd73c1f547095c44af8ff1 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -188,11 +188,12 @@ am__libcdi_la_SOURCES_DIST = basetime.c basetime.h binary.c binary.h \ cdf_read.c cdf_lazy_grid.c cdf_lazy_grid.h subtype.c subtype.h \ swap.h table.c table.h tablepar.h taxis.c taxis.h timebase.c \ timebase.h tsteps.c util.c varscan.c varscan.h version.c \ - vlist.c vlist.h cdi_att.c cdi_att.h vlist_var.c vlist_var.h \ - zaxis.c zaxis.h stream.c stream_write.c stream_read.c swap.c \ - iterator.c iterator.h iterator_fallback.c iterator_fallback.h \ - iterator_grib.c iterator_grib.h cfortran.h cdiFortran.c \ - gribapi_utilities.c stream_gribapi.c + vlist.c vlist.h cdi_key.c cdi_key.h cdi_att.c cdi_att.h \ + vlist_var.c vlist_var.h zaxis.c zaxis.h stream.c \ + stream_write.c stream_read.c swap.c iterator.c iterator.h \ + iterator_fallback.c iterator_fallback.h iterator_grib.c \ + iterator_grib.h cfortran.h cdiFortran.c gribapi_utilities.c \ + stream_gribapi.c am__objects_1 = cdiFortran.lo @USE_FC_TRUE@am__objects_2 = $(am__objects_1) am__objects_3 = gribapi_utilities.lo stream_gribapi.lo @@ -209,7 +210,7 @@ am_libcdi_la_OBJECTS = basetime.lo binary.lo calendar.lo cdf.lo \ stream_srv.lo stream_var.lo grb_write.lo grb_read.lo \ cdf_write.lo cdf_read.lo cdf_lazy_grid.lo subtype.lo table.lo \ taxis.lo timebase.lo tsteps.lo util.lo varscan.lo version.lo \ - vlist.lo cdi_att.lo vlist_var.lo zaxis.lo stream.lo \ + vlist.lo cdi_key.lo cdi_att.lo vlist_var.lo zaxis.lo stream.lo \ stream_write.lo stream_read.lo swap.lo iterator.lo \ iterator_fallback.lo iterator_grib.lo $(am__objects_2) \ $(am__objects_4) @@ -408,6 +409,9 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OSSP_UUIDROOT = @OSSP_UUIDROOT@ +OSSP_UUID_C_INCLUDE = @OSSP_UUID_C_INCLUDE@ +OSSP_UUID_C_LIB = @OSSP_UUID_C_LIB@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -441,6 +445,9 @@ THREADS_INCLUDE = @THREADS_INCLUDE@ THREADS_LIBS = @THREADS_LIBS@ USER_NAME = @USER_NAME@ USE_MPI = @USE_MPI@ +UTIL_LINUX_UUIDROOT = @UTIL_LINUX_UUIDROOT@ +UTIL_LINUX_UUID_C_INCLUDE = @UTIL_LINUX_UUID_C_INCLUDE@ +UTIL_LINUX_UUID_C_LIB = @UTIL_LINUX_UUID_C_LIB@ UUID_C_LIB = @UUID_C_LIB@ VERSION = @VERSION@ YAXT_CFLAGS = @YAXT_CFLAGS@ @@ -531,11 +538,11 @@ libcdi_la_SOURCES = basetime.c basetime.h binary.c binary.h calendar.c \ cdf_read.c cdf_lazy_grid.c cdf_lazy_grid.h subtype.c subtype.h \ swap.h table.c table.h tablepar.h taxis.c taxis.h timebase.c \ timebase.h tsteps.c util.c varscan.c varscan.h version.c \ - vlist.c vlist.h cdi_att.c cdi_att.h vlist_var.c vlist_var.h \ - zaxis.c zaxis.h stream.c stream_write.c stream_read.c swap.c \ - iterator.c iterator.h iterator_fallback.c iterator_fallback.h \ - iterator_grib.c iterator_grib.h $(am__append_2) \ - $(am__append_3) + vlist.c vlist.h cdi_key.c cdi_key.h cdi_att.c cdi_att.h \ + vlist_var.c vlist_var.h zaxis.c zaxis.h stream.c \ + stream_write.c stream_read.c swap.c iterator.c iterator.h \ + iterator_fallback.c iterator_fallback.h iterator_grib.c \ + iterator_grib.h $(am__append_2) $(am__append_3) # cfortran.h is an optional part of libcdi libcdi_la_USE_FC_extra_sources = \ @@ -703,6 +710,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_cksum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_int.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_key.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdipioFortran.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgribexlib.Plo@am__quote@ diff --git a/src/basetime.c b/src/basetime.c index 2efc45d3a1782f66d47ddaaae5b824f494c2b399..44e1787bf7f3601e46d60d7f5f5d9a0cd421aebf 100644 --- a/src/basetime.c +++ b/src/basetime.c @@ -2,12 +2,10 @@ # include "config.h" #endif -#include <stdio.h> -#include <stdbool.h> -#include "error.h" #include "cdi.h" #include "basetime.h" +#include "error.h" void basetimeInit(basetime_t *basetime) diff --git a/src/binary.c b/src/binary.c index dac4086fad6142fa8a8283ecd83d2554aacbdf1e..fef49520ddfe93fa28b392ee17521f84538bf7c6 100644 --- a/src/binary.c +++ b/src/binary.c @@ -2,7 +2,6 @@ # include "config.h" #endif -#include <inttypes.h> #include "cdi.h" #include "error.h" diff --git a/src/binary.h b/src/binary.h index f76f721d1227125e9343e984fdf2f139271f1a4c..b3b65938580b7999e6f4779d9fe1a8932d18bbff 100644 --- a/src/binary.h +++ b/src/binary.h @@ -6,7 +6,6 @@ #endif #include <inttypes.h> -#include <stdio.h> #include "dtypes.h" diff --git a/src/calendar.c b/src/calendar.c index 8c74bf323585435f2ab5d14aead53ff3cb3292dc..95f91ee36ea3915f38b5852ad47e127cea3cfd51 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -1,5 +1,4 @@ #include <limits.h> -#include <stdio.h> #include "cdi.h" /* CALENDAR_ */ #include "calendar.h" diff --git a/src/cdf.c b/src/cdf.c index 47866d1b563eef5befabf5017367abf0627c1796..4b516aaa1faccdfce1c02d6d0a15968f56bd702e 100644 --- a/src/cdf.c +++ b/src/cdf.c @@ -2,10 +2,6 @@ #include "config.h" #endif -#include <stdio.h> -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> #include <ctype.h> #include "cdf.h" diff --git a/src/cdf_int.c b/src/cdf_int.c index 04c146c4b0394d0119f6ff0b4d3dc1324c797c4e..4bdfea77cf7145495809ad4527c65adbdfe0040d 100644 --- a/src/cdf_int.c +++ b/src/cdf_int.c @@ -2,10 +2,7 @@ # include "config.h" #endif -#include <stdio.h> -#include <sys/types.h> #include <sys/stat.h> -#include <string.h> #include "cdi.h" #include "cdi_int.h" diff --git a/src/cdf_int.h b/src/cdf_int.h index 72bb51022a80d2a5846d52aa414d9f0594b7edea..5545dc9936c37b0b60fa7b9172144d57ce5aa1df 100644 --- a/src/cdf_int.h +++ b/src/cdf_int.h @@ -3,7 +3,6 @@ #if defined (HAVE_LIBNETCDF) -#include <stdlib.h> #include <netcdf.h> void cdf_create (const char *path, int cmode, int *idp); diff --git a/src/cdf_util.h b/src/cdf_util.h index 57564230f3b45747ea2a078f917cd90d4a4e75bf..96ca0123f5d6065325fad4b268b506ddb4338744 100644 --- a/src/cdf_util.h +++ b/src/cdf_util.h @@ -3,9 +3,6 @@ #include <stdbool.h> -void str_tolower(char *str); -bool str_is_equal(const char *vstr, const char *cstr); - int get_timeunit(size_t len, const char *ptu); bool is_time_units(const char *timeunits); diff --git a/src/cdf_write.c b/src/cdf_write.c index 4c7cf4a98c6fb9bea30bf48d0283055a41e2315f..d487658ef5a5e349dd56872c0b0359e43aaa7056 100644 --- a/src/cdf_write.c +++ b/src/cdf_write.c @@ -332,7 +332,6 @@ int cdfDefVar(stream_t *streamptr, int varID) int dimorder[3]; size_t iax = 0; char axis[5]; - int ensID, ensCount, forecast_type; int fileID = streamptr->fileID; @@ -594,7 +593,7 @@ int cdfDefVar(stream_t *streamptr, int varID) if ( gridtype == GRID_TRAJECTORY ) { - cdf_put_att_text(fileID, ncvarid, "coordinates", 9, "lon lat" ); + cdf_put_att_text(fileID, ncvarid, "coordinates", 9, "tlon tlat" ); } else if ( gridtype == GRID_LONLAT && xid == CDI_UNDEFID && yid == CDI_UNDEFID && gridsize == 1 ) { @@ -750,15 +749,13 @@ int cdfDefVar(stream_t *streamptr, int varID) } } - if ( vlistInqVarEnsemble( vlistID, varID, &ensID, &ensCount, &forecast_type ) ) - { - /* void cdf_put_att_int( int ncid, int varid, const char *name, nc_type xtype, - size_t len, const int *ip ) - */ - cdf_put_att_int(fileID, ncvarid, "realization", NC_INT, 1, &ensID); - cdf_put_att_int(fileID, ncvarid, "ensemble_members", NC_INT, 1, &ensCount); - cdf_put_att_int(fileID, ncvarid, "forecast_init_type", NC_INT, 1, &forecast_type); - } + int perturbationNumber, numberOfForecastsInEnsemble, typeOfEnsembleForecast; + if ( cdiInqKeyInt(vlistID, varID, CDI_KEY_PERTURBATIONNUMBER, &perturbationNumber) == 0 ) + cdf_put_att_int(fileID, ncvarid, "realization", NC_INT, 1, &perturbationNumber); + if ( cdiInqKeyInt(vlistID, varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, &numberOfForecastsInEnsemble) == 0 ) + cdf_put_att_int(fileID, ncvarid, "ensemble_members", NC_INT, 1, &numberOfForecastsInEnsemble); + if ( cdiInqKeyInt(vlistID, varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, &typeOfEnsembleForecast) == 0 ) + cdf_put_att_int(fileID, ncvarid, "forecast_init_type", NC_INT, 1, &typeOfEnsembleForecast); /* Attributes */ cdfDefineAttributes(vlistID, varID, fileID, ncvarid); diff --git a/src/cdi.h b/src/cdi.h index 559b73fdc3b788e83f43cd3e6fb35330661e8bfe..d09c9a242370fc3273379ef9a08e0bd4f7ccc680 100644 --- a/src/cdi.h +++ b/src/cdi.h @@ -137,6 +137,7 @@ extern "C" { #define CDI_DATATYPE_CPX 254 #define CDI_DATATYPE_UCHAR 255 #define CDI_DATATYPE_LONG 256 +#define CDI_DATATYPE_UINT 257 #define DATATYPE_INT 251 #define DATATYPE_FLT 252 @@ -662,14 +663,6 @@ double vlistInqVarAddoffset(int vlistID, int varID); void vlistDefVarTimave(int vlistID, int varID, int timave); int vlistInqVarTimave(int vlistID, int varID); -void vlistDefVarTimaccu(int vlistID, int varID, int timaccu); -int vlistInqVarTimaccu(int vlistID, int varID); - -void vlistDefVarTypeOfGeneratingProcess(int vlistID, int varID, int typeOfGeneratingProcess); -int vlistInqVarTypeOfGeneratingProcess(int vlistID, int varID); - -void vlistDefVarProductDefinitionTemplate(int vlistID, int varID, int productDefinitionTemplate); -int vlistInqVarProductDefinitionTemplate(int vlistID, int varID); size_t vlistInqVarSize(int vlistID, int varID); @@ -682,10 +675,6 @@ int vlistFindLevel(int vlistID, int fvarID, int flevelID); int vlistMergedVar(int vlistID, int varID); int vlistMergedLevel(int vlistID, int varID, int levelID); -/* Ensemble info routines */ -void vlistDefVarEnsemble(int vlistID, int varID, int ensID, int ensCount, int forecast_type); -int vlistInqVarEnsemble(int vlistID, int varID, int *ensID, int *ensCount, int *forecast_type); - /* cdiClearAdditionalKeys: Clear the list of additional GRIB keys. */ void cdiClearAdditionalKeys(void); /* cdiDefAdditionalKey: Register an additional GRIB key which is read when file is opened. */ @@ -809,7 +798,25 @@ int gridInqYIsc(int gridID); /* gridInqYCvals: Get strings from Y-axis in case grid is of type GRID_CHARXY */ size_t gridInqYCvals(int gridID, char *ycvals[]); -/* CDI grid string key values */ +// CDI var keys +#define CDI_KEY_TABLESVERSION 801 // GRIB2 tablesVersion +#define CDI_KEY_LOCALTABLESVERSION 802 // GRIB2 localTablesVersion +#define CDI_KEY_TYPEOFGENERATINGPROCESS 803 // GRIB2 typeOfGeneratingProcess +#define CDI_KEY_PRODUCTDEFINITIONTEMPLATE 804 // GRIB2 productDefinitionTemplate +#define CDI_KEY_TYPEOFPROCESSEDDATA 805 // GRIB2 typeOfProcessedData +#define CDI_KEY_SHAPEOFTHEEARTH 806 // GRIB2 shapeOfTheEarth +#define CDI_KEY_BACKGROUNDPROCESS 807 // GRIB2 backgroundProcess +#define CDI_KEY_TYPEOFENSEMBLEFORECAST 808 // GRIB2 typeOfEnsembleForecast +#define CDI_KEY_NUMBEROFFORECASTSINENSEMBLE 809 // GRIB2 numberOfForecastsInEnsemble +#define CDI_KEY_PERTURBATIONNUMBER 810 // GRIB2 perturbationNumber + +// cdiDefKeyInt: Define a CDI varianble integer value from a key +int cdiDefKeyInt(int cdiID, int varID, int key, int value); + +// cdiInqKeyInt: Get a CDI variable integer value from a key +int cdiInqKeyInt(int cdiID, int varID, int key, int *value); + +// CDI grid keys #define CDI_KEY_XNAME 901 // X-axis name #define CDI_KEY_XDIMNAME 902 // X-axis dimension name #define CDI_KEY_XLONGNAME 903 // X-axis longname @@ -822,7 +829,7 @@ size_t gridInqYCvals(int gridID, char *ycvals[]); #define CDI_KEY_MAPPING 921 // Grid mapping var name #define CDI_KEY_MAPNAME 922 // Grid mapping name -/* CDI zaxis string key values */ +// CDI zaxis keys #define CDI_KEY_NAME 941 // Z-axis name #define CDI_KEY_DIMNAME 942 // Z-axis dimension name #define CDI_KEY_LONGNAME 943 // Z-axis longname @@ -837,6 +844,12 @@ int cdiGridDefKeyStr(int gridID, int key, int size, const char *mesg); // cdiGridInqKeyStr: Get a CDI grid string value from a key int cdiGridInqKeyStr(int gridID, int key, int size, char *mesg); +// cdiZaxisDefKeyStr: Define a CDI Z-axis string value from a key +int cdiZaxisDefKeyStr(int zaxisID, int key, int size, const char *mesg); + +// cdiZaxisInqKeyStr: Get a CDI Z-axis string value from a key +int cdiZaxisInqKeyStr(int zaxisID, int key, int size, char *mesg); + // cdiZaxisDefKeyFlt: Define a CDI Z-axis floating point value from a key int cdiZaxisDefKeyFlt(int zaxisID, int key, double value); @@ -1047,12 +1060,6 @@ void zaxisDefUUID(int zaxisID, const unsigned char uuid[CDI_UUID_SIZE]); /* zaxisInqUUID: Get the UUID of a generalized Z-axis */ void zaxisInqUUID(int zaxisID, unsigned char uuid[CDI_UUID_SIZE]); -// cdiZaxisDefKeyStr: Define a CDI Z-axis string value from a key -int cdiZaxisDefKeyStr(int zaxisID, int key, int size, const char *mesg); - -// cdiZaxisInqKeyStr: Get a CDI Z-axis string value from a key -int cdiZaxisInqKeyStr(int zaxisID, int key, int size, char *mesg); - /* zaxisDefName: Define the name of a Z-axis */ void zaxisDefName(int zaxisID, const char *name_optional); diff --git a/src/cdi.inc b/src/cdi.inc index aaa6302f36cf331630337c2400a7481356c7149d..18c4a258b4c156165f4ce7b2f4efc243fd4419c8 100644 --- a/src/cdi.inc +++ b/src/cdi.inc @@ -1,10 +1,10 @@ ! This file was automatically generated, don't edit! ! -! Fortran interface for CDI library version 1.9.2 +! Fortran interface for CDI library version 1.9.3 ! ! Author: ! ------- -! Uwe Schulzweida, MPI-MET, Hamburg, November 2017 +! Uwe Schulzweida, MPI-MET, Hamburg, January 2018 ! INTEGER CDI_MAX_NAME @@ -227,6 +227,8 @@ PARAMETER (CDI_DATATYPE_UCHAR = 255) INTEGER CDI_DATATYPE_LONG PARAMETER (CDI_DATATYPE_LONG = 256) + INTEGER CDI_DATATYPE_UINT + PARAMETER (CDI_DATATYPE_UINT = 257) INTEGER DATATYPE_INT PARAMETER (DATATYPE_INT = 251) INTEGER DATATYPE_FLT @@ -1248,39 +1250,6 @@ ! INTEGER varID) EXTERNAL vlistInqVarTimave -! vlistDefVarTimaccu -! (INTEGER vlistID, -! INTEGER varID, -! INTEGER timaccu) - EXTERNAL vlistDefVarTimaccu - - INTEGER vlistInqVarTimaccu -! (INTEGER vlistID, -! INTEGER varID) - EXTERNAL vlistInqVarTimaccu - -! vlistDefVarTypeOfGeneratingProcess -! (INTEGER vlistID, -! INTEGER varID, -! INTEGER typeOfGeneratingProcess) - EXTERNAL vlistDefVarTypeOfGeneratingProcess - - INTEGER vlistInqVarTypeOfGeneratingProcess -! (INTEGER vlistID, -! INTEGER varID) - EXTERNAL vlistInqVarTypeOfGeneratingProcess - -! vlistDefVarProductDefinitionTemplate -! (INTEGER vlistID, -! INTEGER varID, -! INTEGER productDefinitionTemplate) - EXTERNAL vlistDefVarProductDefinitionTemplate - - INTEGER vlistInqVarProductDefinitionTemplate -! (INTEGER vlistID, -! INTEGER varID) - EXTERNAL vlistInqVarProductDefinitionTemplate - INTEGER vlistInqVarSize ! (INTEGER vlistID, ! INTEGER varID) @@ -1334,25 +1303,6 @@ ! INTEGER levelID) EXTERNAL vlistMergedLevel -! -! Ensemble info routines -! -! vlistDefVarEnsemble -! (INTEGER vlistID, -! INTEGER varID, -! INTEGER ensID, -! INTEGER ensCount, -! INTEGER forecast_type) - EXTERNAL vlistDefVarEnsemble - - INTEGER vlistInqVarEnsemble -! (INTEGER vlistID, -! INTEGER varID, -! INTEGER ensID, -! INTEGER ensCount, -! INTEGER forecast_type) - EXTERNAL vlistInqVarEnsemble - ! cdiClearAdditionalKeys EXTERNAL cdiClearAdditionalKeys @@ -1603,9 +1553,40 @@ ! (INTEGER gridID) EXTERNAL gridInqYIsc -! -! CDI grid string key values -! + INTEGER CDI_KEY_TABLESVERSION + PARAMETER (CDI_KEY_TABLESVERSION = 801) + INTEGER CDI_KEY_LOCALTABLESVERSION + PARAMETER (CDI_KEY_LOCALTABLESVERSION = 802) + INTEGER CDI_KEY_TYPEOFGENERATINGPROCESS + PARAMETER (CDI_KEY_TYPEOFGENERATINGPROCESS = 803) + INTEGER CDI_KEY_PRODUCTDEFINITIONTEMPLATE + PARAMETER (CDI_KEY_PRODUCTDEFINITIONTEMPLATE = 804) + INTEGER CDI_KEY_TYPEOFPROCESSEDDATA + PARAMETER (CDI_KEY_TYPEOFPROCESSEDDATA = 805) + INTEGER CDI_KEY_SHAPEOFTHEEARTH + PARAMETER (CDI_KEY_SHAPEOFTHEEARTH = 806) + INTEGER CDI_KEY_BACKGROUNDPROCESS + PARAMETER (CDI_KEY_BACKGROUNDPROCESS = 807) + INTEGER CDI_KEY_TYPEOFENSEMBLEFORECAST + PARAMETER (CDI_KEY_TYPEOFENSEMBLEFORECAST = 808) + INTEGER CDI_KEY_NUMBEROFFORECASTSINENSEMBLE + PARAMETER (CDI_KEY_NUMBEROFFORECASTSINENSEMBLE = 809) + INTEGER CDI_KEY_PERTURBATIONNUMBER + PARAMETER (CDI_KEY_PERTURBATIONNUMBER = 810) + INTEGER cdiDefKeyInt +! (INTEGER cdiID, +! INTEGER varID, +! INTEGER key, +! INTEGER value) + EXTERNAL cdiDefKeyInt + + INTEGER cdiInqKeyInt +! (INTEGER cdiID, +! INTEGER varID, +! INTEGER key, +! INTEGER value) + EXTERNAL cdiInqKeyInt + INTEGER CDI_KEY_XNAME PARAMETER (CDI_KEY_XNAME = 901) INTEGER CDI_KEY_XDIMNAME @@ -1628,9 +1609,6 @@ PARAMETER (CDI_KEY_MAPPING = 921) INTEGER CDI_KEY_MAPNAME PARAMETER (CDI_KEY_MAPNAME = 922) -! -! CDI zaxis string key values -! INTEGER CDI_KEY_NAME PARAMETER (CDI_KEY_NAME = 941) INTEGER CDI_KEY_DIMNAME @@ -1659,6 +1637,20 @@ ! CHARACTER*(*) mesg) EXTERNAL cdiGridInqKeyStr + INTEGER cdiZaxisDefKeyStr +! (INTEGER zaxisID, +! INTEGER key, +! INTEGER size, +! CHARACTER*(*) mesg) + EXTERNAL cdiZaxisDefKeyStr + + INTEGER cdiZaxisInqKeyStr +! (INTEGER zaxisID, +! INTEGER key, +! INTEGER size, +! CHARACTER*(*) mesg) + EXTERNAL cdiZaxisInqKeyStr + INTEGER cdiZaxisDefKeyFlt ! (INTEGER zaxisID, ! INTEGER key, @@ -2067,20 +2059,6 @@ ! INTEGER*1(16) uuid) EXTERNAL zaxisInqUUID - INTEGER cdiZaxisDefKeyStr -! (INTEGER zaxisID, -! INTEGER key, -! INTEGER size, -! CHARACTER*(*) mesg) - EXTERNAL cdiZaxisDefKeyStr - - INTEGER cdiZaxisInqKeyStr -! (INTEGER zaxisID, -! INTEGER key, -! INTEGER size, -! CHARACTER*(*) mesg) - EXTERNAL cdiZaxisInqKeyStr - ! zaxisDefName ! (INTEGER zaxisID, ! CHARACTER*(*) name_optional) diff --git a/src/cdiFortran.c b/src/cdiFortran.c index 8de51ed93f4d4da8eead5aa65c161f3ac4010286..872d0638365f5aa9d7e0211aa0c51aee2cdbfbf4 100644 --- a/src/cdiFortran.c +++ b/src/cdiFortran.c @@ -29,7 +29,7 @@ # pragma GCC diagnostic ignored "-Wmissing-prototypes" #endif -static +static inline int size_t_c2f(size_t value_size_t) { assert(value_size_t < INT_MAX); @@ -360,12 +360,6 @@ FCALLSCSUB3 (vlistDefVarAddoffset, VLISTDEFVARADDOFFSET, vlistdefvaraddoffset, I FCALLSCFUN2 (DOUBLE, vlistInqVarAddoffset, VLISTINQVARADDOFFSET, vlistinqvaraddoffset, INT, INT) FCALLSCSUB3 (vlistDefVarTimave, VLISTDEFVARTIMAVE, vlistdefvartimave, INT, INT, INT) FCALLSCFUN2 (INT, vlistInqVarTimave, VLISTINQVARTIMAVE, vlistinqvartimave, INT, INT) -FCALLSCSUB3 (vlistDefVarTimaccu, VLISTDEFVARTIMACCU, vlistdefvartimaccu, INT, INT, INT) -FCALLSCFUN2 (INT, vlistInqVarTimaccu, VLISTINQVARTIMACCU, vlistinqvartimaccu, INT, INT) -FCALLSCSUB3 (vlistDefVarTypeOfGeneratingProcess, VLISTDEFVARTYPEOFGENERATINGPROCESS, vlistdefvartypeofgeneratingprocess, INT, INT, INT) -FCALLSCFUN2 (INT, vlistInqVarTypeOfGeneratingProcess, VLISTINQVARTYPEOFGENERATINGPROCESS, vlistinqvartypeofgeneratingprocess, INT, INT) -FCALLSCSUB3 (vlistDefVarProductDefinitionTemplate, VLISTDEFVARPRODUCTDEFINITIONTEMPLATE, vlistdefvarproductdefinitiontemplate, INT, INT, INT) -FCALLSCFUN2 (INT, vlistInqVarProductDefinitionTemplate, VLISTINQVARPRODUCTDEFINITIONTEMPLATE, vlistinqvarproductdefinitiontemplate, INT, INT) static int vlistInqVarSize_fwrap(int vlistID, int varID) { size_t v; @@ -381,11 +375,6 @@ FCALLSCFUN2 (INT, vlistFindVar, VLISTFINDVAR, vlistfindvar, INT, INT) FCALLSCFUN3 (INT, vlistFindLevel, VLISTFINDLEVEL, vlistfindlevel, INT, INT, INT) FCALLSCFUN2 (INT, vlistMergedVar, VLISTMERGEDVAR, vlistmergedvar, INT, INT) FCALLSCFUN3 (INT, vlistMergedLevel, VLISTMERGEDLEVEL, vlistmergedlevel, INT, INT, INT) - -/* Ensemble info routines */ - -FCALLSCSUB5 (vlistDefVarEnsemble, VLISTDEFVARENSEMBLE, vlistdefvarensemble, INT, INT, INT, INT, INT) -FCALLSCFUN5 (INT, vlistInqVarEnsemble, VLISTINQVARENSEMBLE, vlistinqvarensemble, INT, INT, PINT, PINT, PINT) FCALLSCSUB0 (cdiClearAdditionalKeys, CDICLEARADDITIONALKEYS, cdiclearadditionalkeys) FCALLSCSUB1 (cdiDefAdditionalKey, CDIDEFADDITIONALKEY, cdidefadditionalkey, STRING) FCALLSCSUB4 (vlistDefVarIntKey, VLISTDEFVARINTKEY, vlistdefvarintkey, INT, INT, STRING, INT) @@ -481,14 +470,12 @@ static int gridInqYvals_fwrap(int gridID, double yvals[]) } FCALLSCFUN2 (INT, gridInqYvals_fwrap, GRIDINQYVALS, gridinqyvals, INT, DOUBLEV) FCALLSCFUN1 (INT, gridInqYIsc, GRIDINQYISC, gridinqyisc, INT) - -/* CDI grid string key values */ - - -/* CDI zaxis string key values */ - +FCALLSCFUN4 (INT, cdiDefKeyInt, CDIDEFKEYINT, cdidefkeyint, INT, INT, INT, INT) +FCALLSCFUN4 (INT, cdiInqKeyInt, CDIINQKEYINT, cdiinqkeyint, INT, INT, INT, PINT) FCALLSCFUN4 (INT, cdiGridDefKeyStr, CDIGRIDDEFKEYSTR, cdigriddefkeystr, INT, INT, INT, STRING) FCALLSCFUN4 (INT, cdiGridInqKeyStr, CDIGRIDINQKEYSTR, cdigridinqkeystr, INT, INT, INT, PSTRING) +FCALLSCFUN4 (INT, cdiZaxisDefKeyStr, CDIZAXISDEFKEYSTR, cdizaxisdefkeystr, INT, INT, INT, STRING) +FCALLSCFUN4 (INT, cdiZaxisInqKeyStr, CDIZAXISINQKEYSTR, cdizaxisinqkeystr, INT, INT, INT, PSTRING) FCALLSCFUN3 (INT, cdiZaxisDefKeyFlt, CDIZAXISDEFKEYFLT, cdizaxisdefkeyflt, INT, INT, DOUBLE) FCALLSCFUN3 (INT, cdiZaxisInqKeyFlt, CDIZAXISINQKEYFLT, cdizaxisinqkeyflt, INT, INT, PDOUBLE) FCALLSCSUB2 (gridDefXname, GRIDDEFXNAME, griddefxname, INT, STRING) @@ -604,8 +591,6 @@ FCALLSCSUB2 (zaxisDefNumber, ZAXISDEFNUMBER, zaxisdefnumber, INT, INT) FCALLSCFUN1 (INT, zaxisInqNumber, ZAXISINQNUMBER, zaxisinqnumber, INT) FCALLSCSUB2 (zaxisDefUUID, ZAXISDEFUUID, zaxisdefuuid, INT, PVOID) FCALLSCSUB2 (zaxisInqUUID, ZAXISINQUUID, zaxisinquuid, INT, PVOID) -FCALLSCFUN4 (INT, cdiZaxisDefKeyStr, CDIZAXISDEFKEYSTR, cdizaxisdefkeystr, INT, INT, INT, STRING) -FCALLSCFUN4 (INT, cdiZaxisInqKeyStr, CDIZAXISINQKEYSTR, cdizaxisinqkeystr, INT, INT, INT, PSTRING) FCALLSCSUB2 (zaxisDefName, ZAXISDEFNAME, zaxisdefname, INT, STRING) FCALLSCSUB2 (zaxisInqName, ZAXISINQNAME, zaxisinqname, INT, PSTRING) FCALLSCSUB2 (zaxisDefLongname, ZAXISDEFLONGNAME, zaxisdeflongname, INT, STRING) diff --git a/src/cdi_att.c b/src/cdi_att.c index 2f1450d6b7f1f62d24b8373acf284b4ca6dff698..8af378651a2f5f995bf220fa19968c8ac9e99019 100644 --- a/src/cdi_att.c +++ b/src/cdi_att.c @@ -53,7 +53,7 @@ cdi_att_t *find_att(cdi_atts_t *attsp, const char *name) { cdi_att_t *attp = atts + attid; if ( attp->namesz == slen && memcmp(attp->name, name, slen) == 0 ) - return attp; /* Normal return */ + return attp; // Normal return } return NULL; @@ -264,7 +264,7 @@ int cdi_inq_att(int indtype, int cdiID, int varID, const char *name, size_t mxsz xassert(attsp != NULL); cdi_att_t *attp = find_att(attsp, name); - if ( attp != NULL ) /* name in use */ + if ( attp != NULL ) // name in use { if ( attp->indtype == indtype ) { diff --git a/src/cdi_att.h b/src/cdi_att.h index 8c8799bbf516f310887b5d52e8cb6b86bffa2f79..f3b444f058aee4b2320e29e17e101273d1546e60 100644 --- a/src/cdi_att.h +++ b/src/cdi_att.h @@ -1,11 +1,11 @@ -#ifndef CDI_ATT_H -#define CDI_ATT_H +#ifndef CDI_ATT_H +#define CDI_ATT_H -#ifdef HAVE_CONFIG_H +#ifdef HAVE_CONFIG_H #include "config.h" #endif -#ifndef _CDI_LIMITS_H +#ifndef CDI_LIMITS_H #include "cdi_limits.h" #endif @@ -13,23 +13,23 @@ * CDI attribute */ typedef struct { - size_t xsz; /* amount of space at xvalue */ - size_t namesz; /* size of name */ - char *name; /* attribute name */ - int indtype; /* internal data type of xvalue (INT, FLT or TXT) */ - int exdtype; /* external data type */ - /* indtype exdtype */ - /* TXT TXT */ - /* INT INT16, INT32 */ - /* FLT FLT32, FLT64 */ - size_t nelems; /* number of elements */ - void *xvalue; /* the actual data */ + size_t xsz; // amount of space at xvalue + size_t namesz; // size of name + char *name; // attribute name + int indtype; // internal data type of xvalue (INT, FLT or TXT) + int exdtype; // external data type + // indtype exdtype + // TXT TXT + // INT INT16, INT32 + // FLT FLT32, FLT64 + size_t nelems; // number of elements + void *xvalue; // the actual data } cdi_att_t; typedef struct { - size_t nalloc; /* number allocated >= nelems */ - size_t nelems; /* length of the array */ + size_t nalloc; // number allocated >= nelems + size_t nelems; // length of the array cdi_att_t value[MAX_ATTRIBUTES]; } cdi_atts_t; diff --git a/src/cdi_int.c b/src/cdi_int.c index d36b2cba877b1a3e31791bc528ee46cf7af840ae..c222798a79b9dc21b2326dcc9cc602c53ddb3a65 100644 --- a/src/cdi_int.c +++ b/src/cdi_int.c @@ -136,6 +136,10 @@ void cdiPrintVersion(void) #ifdef HAVE_NC4HDF5 fprintf(stderr, " HDF5 library version : %s\n", hdfLibraryVersion()); #endif +#ifdef HAVE_LIBSERVICE + fprintf(stderr, " EXSE library version : %s\n", srvLibraryVersion()); +#endif + /* #ifdef HAVE_LIBSERVICE fprintf(stderr, " SERVICE library version : %s\n", srvLibraryVersion()); #endif @@ -145,6 +149,7 @@ void cdiPrintVersion(void) #ifdef HAVE_LIBIEG fprintf(stderr, " IEG library version : %s\n", iegLibraryVersion()); #endif + */ fprintf(stderr, " FILE library version : %s\n", fileLibraryVersion()); } diff --git a/src/cdi_int.h b/src/cdi_int.h index 76fe7f50047b12bbe0df6df7c5d982c8d98ccc00..8be3363a6ca7488ef9c804b05e429db0a3042db6 100644 --- a/src/cdi_int.h +++ b/src/cdi_int.h @@ -18,7 +18,7 @@ #include "cdf_config.h" /* dummy use of unused parameters to silence compiler warnings */ -#ifndef UNUSED +#ifndef UNUSED #define UNUSED(x) (void)x #endif @@ -38,6 +38,9 @@ char *strdup(const char *s); */ #endif +void str_tolower(char *str); +bool str_is_equal(const char *vstr, const char *cstr); + #ifndef M_PI #define M_PI 3.14159265358979323846 /* pi */ #endif @@ -55,7 +58,7 @@ char *strdup(const char *s); #ifndef _TAXIS_H # include "taxis.h" #endif -#ifndef _CDI_LIMITS_H +#ifndef CDI_LIMITS_H # include "cdi_limits.h" #endif #ifndef _SERVICE_H @@ -148,6 +151,7 @@ typedef struct { off_t position; size_t size; + size_t gridsize; int zip; int param; int ilevel; diff --git a/src/cdi_key.c b/src/cdi_key.c new file mode 100644 index 0000000000000000000000000000000000000000..ecf64f97e3c199d8953bf2e4b45a173c07eb5f1a --- /dev/null +++ b/src/cdi_key.c @@ -0,0 +1,176 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "cdi.h" +#include "cdi_int.h" +#include "vlist.h" +#include "grid.h" +#include "zaxis.h" + + +static +cdi_keys_t *get_keysp(vlist_t *vlistptr, int varID) +{ + cdi_keys_t *keysp = NULL; + /* + if ( varID == CDI_GLOBAL ) + { + keysp = &vlistptr->keys; + } + else + */ + { + if ( varID >= 0 && varID < vlistptr->nvars ) + keysp = &(vlistptr->vars[varID].keys); + } + + return keysp; +} + +static +cdi_key_t *new_key(cdi_keys_t *keysp, int key) +{ + xassert(keysp != NULL); + + if ( keysp->nelems == keysp->nalloc ) return NULL; + + cdi_key_t *keyp = &(keysp->value[keysp->nelems]); + keysp->nelems++; + + keyp->key = key; + // keyp->v = 0; + + return keyp; +} + +static +cdi_key_t *find_key(cdi_keys_t *keysp, int key) +{ + xassert(keysp != NULL); + + if ( keysp->nelems == 0 ) return NULL; + + cdi_key_t *keys = keysp->value; + for ( size_t keyid = 0; keyid < keysp->nelems; keyid++ ) + { + cdi_key_t *keyp = keys + keyid; + if ( keyp->key == key ) + return keyp; // Normal return + } + + return NULL; +} + +static +cdi_keys_t *cdi_get_keysp(int objID, int varID) +{ + cdi_keys_t *keysp = NULL; + + /* + if ( varID == CDI_GLOBAL && reshGetTxCode(objID) == GRID ) + { + grid_t *gridptr = grid_to_pointer(objID); + keysp = &gridptr->keys; + } + else if ( varID == CDI_GLOBAL && reshGetTxCode(objID) == ZAXIS ) + { + zaxis_t *zaxisptr = zaxis_to_pointer(objID); + keysp = &zaxisptr->keys; + } + else + */ + { + vlist_t *vlistptr = vlist_to_pointer(objID); + keysp = get_keysp(vlistptr, varID); + } + + return keysp; +} + + +int vlist_key_compare(vlist_t *a, int varIDA, vlist_t *b, int varIDB, int keynum) +{ + cdi_keys_t *keyspa = get_keysp(a, varIDA), + *keyspb = get_keysp(b, varIDB); + if (keyspa == NULL && keyspb == NULL) + return 0; + xassert(keynum >= 0 && keynum < (int)keyspa->nelems + && keynum < (int)keyspb->nelems); + cdi_key_t *keypa = keyspa->value + keynum, + *keypb = keyspb->value + keynum; + + if ( keypa->key != keypb->key ) + return 1; + + if ( keypa->v.i != keypb->v.i ) + return 1; + + return 0; +} + +// cqdiDefKeyInt: Define a CDI varianble integer value from a key +int cdiDefKeyInt(int cdiID, int varID, int key, int value) +{ + int status = CDI_NOERR; + + cdi_keys_t *keysp = cdi_get_keysp(cdiID, varID); + xassert(keysp != NULL); + + cdi_key_t *keyp = find_key(keysp, key); + if ( keyp == NULL ) keyp = new_key(keysp, key); + + if ( keyp != NULL ) + { + if ( keyp->v.i != value ) + { + keyp->v.i = value; + //reshSetStatus(cdiID, &vlistOps, RESH_DESYNC_IN_USE); + } + } + + return status; +} + +// cdiInqKeyInt: Get a CDI variable integer value from a key +int cdiInqKeyInt(int cdiID, int varID, int key, int *value) +{ + int status = CDI_NOERR; + + cdi_keys_t *keysp = cdi_get_keysp(cdiID, varID); + xassert(keysp != NULL); + + cdi_key_t *keyp = find_key(keysp, key); + if ( keyp != NULL ) // key in use + { + // if ( keyp->indtype == indtype ) + { + *value = keyp->v.i; + } + /* + else + { + Warning("Key %d has wrong data type!", key); + status = -2; + } + */ + } + else + { + //Warning("Internal problem, key %d not found!", key); + status = -1; + } + + return status; +} + + +/* + * Local Variables: + * c-file-style: "Java" + * c-basic-offset: 2 + * indent-tabs-mode: nil + * show-trailing-whitespace: t + * require-trailing-newline: t + * End: + */ diff --git a/src/cdi_key.h b/src/cdi_key.h new file mode 100644 index 0000000000000000000000000000000000000000..dd25c010a384a344f697bcbcc6e2c4f0cc9cccfc --- /dev/null +++ b/src/cdi_key.h @@ -0,0 +1,33 @@ +#ifndef CDI_KEY_H +#define CDI_KEY_H + +/* + * CDI key + */ +typedef struct { + int key; // CDI key + union { + int i; + double d; + char *s; + } v; +} cdi_key_t; + + +typedef struct { + size_t nalloc; // number allocated >= nelems + size_t nelems; // length of the array + cdi_key_t value[MAX_KEYS]; +} cdi_keys_t; + +#endif + +/* + * Local Variables: + * c-file-style: "Java" + * c-basic-offset: 2 + * indent-tabs-mode: nil + * show-trailing-whitespace: t + * require-trailing-newline: t + * End: + */ diff --git a/src/cdi_limits.h b/src/cdi_limits.h index 8c797ad5a4d1efdf5d0fd647c6568614d98b77a8..222d9659d842a45d2adf81c3eaee0aa3f73f7037 100644 --- a/src/cdi_limits.h +++ b/src/cdi_limits.h @@ -1,12 +1,13 @@ -#ifndef _CDI_LIMITS_H -#define _CDI_LIMITS_H +#ifndef CDI_LIMITS_H +#define CDI_LIMITS_H -#define MAX_GRIDS_PS 128 /* maximum number of different grids per stream */ -#define MAX_ZAXES_PS 128 /* maximum number of different zaxes per stream */ -#define MAX_ATTRIBUTES 256 /* maximum number of attributes per variable */ -#define MAX_SUBTYPES_PS 128 /* maximum number of different subtypes per stream */ +#define MAX_GRIDS_PS 128 // maximum number of different grids per stream +#define MAX_ZAXES_PS 128 // maximum number of different zaxes per stream +#define MAX_ATTRIBUTES 256 // maximum number of attributes per variable +#define MAX_KEYS 64 // maximum number of keys per variable +#define MAX_SUBTYPES_PS 128 // maximum number of different subtypes per stream -#endif /* _CDI_LIMITS_H */ +#endif /* CDI_LIMITS_H */ /* * Local Variables: * c-file-style: "Java" diff --git a/src/cdipio.inc b/src/cdipio.inc index 75005982bdb3832771d7df9156c424716b65739d..4a71d9afcb9d5e942106f24a494180a0609014cc 100644 --- a/src/cdipio.inc +++ b/src/cdipio.inc @@ -1,10 +1,10 @@ ! This file was automatically generated, don't edit! ! -! Fortran interface for CDI library version 1.8.1 +! Fortran interface for CDI library version 1.9.3 ! ! Author: ! ------- -! Uwe Schulzweida, MPI-MET, Hamburg, April 2017 +! Uwe Schulzweida, MPI-MET, Hamburg, January 2018 ! ! diff --git a/src/cdipioFortran.c b/src/cdipioFortran.c index e51c477ee007049c309c35c8366f2f6f119543a2..e76eb455506ee9d97f47a23ec577a39b3d8f3367 100644 --- a/src/cdipioFortran.c +++ b/src/cdipioFortran.c @@ -10,6 +10,9 @@ #if defined (HAVE_CF_INTERFACE) +#include <limits.h> +#include <assert.h> + #if ! defined (__CFORTRAN_LOADED) # if defined __clang__ # pragma GCC diagnostic push @@ -26,6 +29,13 @@ # pragma GCC diagnostic ignored "-Wmissing-prototypes" #endif +static inline +int size_t_c2f(size_t value_size_t) +{ + assert(value_size_t < INT_MAX); + return (int) value_size_t; +} + /* parallel IO IOMode */ @@ -55,14 +65,14 @@ static int cdiPioInit_fwrap(int commSuper, int confResH, int *pioNamespace) FCALLSCFUN3 (INT, cdiPioInit_fwrap, CDIPIOINIT, cdipioinit, INT, INT, PINT) FCALLSCSUB0 (pioWriteTimestep, PIOWRITETIMESTEP, piowritetimestep) FCALLSCSUB0 (cdiPioRDMAProgress, CDIPIORDMAPROGRESS, cdipiordmaprogress) -static void streamWriteVarPart_fwrap(int streamID, int varID, const void *data, size_t nmiss, void *partDesc) +static void streamWriteVarPart_fwrap(int streamID, int varID, const void *data, int nmiss, void *partDesc) { - streamWriteVarPart(streamID, varID, data, nmiss, (*(Xt_idxlist *)partDesc)); + streamWriteVarPart(streamID, varID, data, (size_t)nmiss, (*(Xt_idxlist *)partDesc)); } FCALLSCSUB5 (streamWriteVarPart_fwrap, STREAMWRITEVARPART, streamwritevarpart, INT, INT, PVOID, INT, PVOID) -static void streamWriteScatteredVarPart_fwrap(int streamID, int varID, const void *data, int numBlocks, const int blocklengths[], const int displacements[], size_t nmiss, void *partDesc) +static void streamWriteScatteredVarPart_fwrap(int streamID, int varID, const void *data, int numBlocks, const int blocklengths[], const int displacements[], int nmiss, void *partDesc) { - streamWriteScatteredVarPart(streamID, varID, data, numBlocks, blocklengths, displacements, nmiss, (*(Xt_idxlist *)partDesc)); + streamWriteScatteredVarPart(streamID, varID, data, numBlocks, blocklengths, displacements, (size_t)nmiss, (*(Xt_idxlist *)partDesc)); } FCALLSCSUB8 (streamWriteScatteredVarPart_fwrap, STREAMWRITESCATTEREDVARPART, streamwritescatteredvarpart, INT, INT, PVOID, INT, INTV, INTV, INT, PVOID) static int cdiPioCSRLastN_fwrap(int commSuper, int IOMode, int nProcsIO) diff --git a/src/cgribex.h b/src/cgribex.h index 013e91faa943875cb169cc41aa8ac791724ca6cb..bd9910c2dc52073b7d30a2c115445616921158d8 100644 --- a/src/cgribex.h +++ b/src/cgribex.h @@ -1,5 +1,5 @@ -#ifndef CGRIBEX_H -#define CGRIBEX_H +#ifndef CGRIBEX_H +#define CGRIBEX_H #include <stdio.h> #include <stdbool.h> @@ -251,7 +251,7 @@ double calculate_pfactor_float(const float* spectralField, long fieldTruncation, double calculate_pfactor_double(const double* spectralField, long fieldTruncation, long subsetTruncation); -#if defined (__cplusplus) +#ifdef __cplusplus } #endif diff --git a/src/cgribexlib.c b/src/cgribexlib.c index 351fd45ee73dcddd2ac974873c1997925f4c7575..5f32a37163e8485bd379f7480540a07156adf27e 100644 --- a/src/cgribexlib.c +++ b/src/cgribexlib.c @@ -1,5 +1,5 @@ -/* Automatically generated by m214003 at 2017-09-29, do not edit */ +/* Automatically generated by m214003 at 2018-01-22, do not edit */ /* CGRIBEXLIB_VERSION="1.9.0" */ @@ -12,10 +12,11 @@ #ifdef _ARCH_PWR6 #pragma options nostrict +#include <ppu_intrinsics.h> #endif -#if defined (HAVE_CONFIG_H) -# include "config.h" +#ifdef HAVE_CONFIG_H +#include "config.h" #endif #include <string.h> @@ -75,7 +76,7 @@ #if defined (VECTORCODE) -#if defined (INT32) +#ifdef INT32 # define GRIBPACK unsigned INT32 # define PACK_GRIB packInt32 # define UNPACK_GRIB unpackInt32 @@ -184,11 +185,11 @@ int qu2reg3_double(double *pfield, int *kpoint, int klat, int klon, int qu2reg3_float(float *pfield, int *kpoint, int klat, int klon, float msval, int *kret, int omisng, int operio, int oveggy); -#if defined (INT32) +#ifdef INT32 long packInt32(unsigned INT32 *up, unsigned char *cp, long bc, long tc); #endif long packInt64(unsigned INT64 *up, unsigned char *cp, long bc, long tc); -#if defined (INT32) +#ifdef INT32 long unpackInt32(const unsigned char *cp, unsigned INT32 *up, long bc, long tc); #endif long unpackInt64(const unsigned char *cp, unsigned INT64 *up, long bc, long tc); @@ -214,7 +215,7 @@ int grib2Sections(unsigned char *gribbuffer, long gribbufsize, unsigned char **i unsigned char **lusp, unsigned char **gdsp, unsigned char **pdsp, unsigned char **drsp, unsigned char **bmsp, unsigned char **bdsp); -#if defined (__cplusplus) +#ifdef __cplusplus } #endif @@ -4471,7 +4472,7 @@ long unpackInt64(const unsigned char *cp, unsigned INT64 *up, long bc, long tc) /* pack 8-bit bytes from 32-bit words to a packed buffer */ /* same as : for ( int i = 0; i < bc; ++i ) cp[i] = (char) up[i]; */ -#if defined (INT32) +#ifdef INT32 long packInt32(unsigned INT32 *up, unsigned char *cp, long bc, long tc) { U_BYTEORDER; @@ -4567,7 +4568,7 @@ long packInt32(unsigned INT32 *up, unsigned char *cp, long bc, long tc) /* unpack 8-bit bytes from a packed buffer with 32-bit words */ /* same as : for ( int i = 0; i < bc; ++i ) up[i] = (INT32) cp[i]; */ -#if defined (INT32) +#ifdef INT32 long unpackInt32(const unsigned char *cp, unsigned INT32 *up, long bc, long tc) { U_BYTEORDER; @@ -5235,7 +5236,7 @@ double get_cr(unsigned char *w1, unsigned char *w2) void grib1PrintALL(int nrec, long offset, long recpos, long recsize, unsigned char *gribbuffer) { - static int header = 1; + static bool header = true; unsigned char *is = NULL, *pds = NULL, *gds = NULL, *bms = NULL, *bds = NULL; if ( header ) @@ -5243,7 +5244,7 @@ void grib1PrintALL(int nrec, long offset, long recpos, long recsize, unsigned ch fprintf(stdout, " Rec : Off Position Size : V PDS GDS BMS BDS : Code Level : LType GType: CR LL\n"); /* ----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+ */ - header = 0; + header = false; } is = gribbuffer; @@ -5282,21 +5283,18 @@ void grib1PrintALL(int nrec, long offset, long recpos, long recsize, unsigned ch void grib2PrintALL(int nrec, long offset, long recpos, long recsize, unsigned char *gribbuffer) { - static int header = 1; + static bool header = true; unsigned char *is = NULL, *pds = NULL, *gds = NULL, *bms = NULL, *bds = NULL; unsigned char *ids = NULL, *lus = NULL, *drs = NULL; long ids_len = 0, lus_len = 0, gds_len = 0, pds_len = 0, drs_len = 0, bms_len = 0, bds_len = 0; - int gridtype, paramnum, level1type /*, level2type*/; - int level1 /*, level1sf*/; - /* int level2, level2sf; */ double cr = 1; if ( header ) { fprintf(stdout, - " Rec : Off Position Size : V IDS LUS GDS PDS DRS BMS BDS : Code Level : LType GType: CR\n"); + " Rec : Off Position Size : V IDS LUS GDS PDS DRS BMS BDS : Parameter Level : LType GType: CR\n"); /* ----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+ */ - header = 0; + header = false; } is = gribbuffer; @@ -5318,21 +5316,25 @@ void grib2PrintALL(int nrec, long offset, long recpos, long recsize, unsigned ch // double cr = (((BDS_Flag >> 4)&1) && (BDS_Z == 128 || BDS_Z == 130)) ? get_cr(&bds[14], &gribbuffer[4]) : 1; - gridtype = GET_UINT2(gds[12],gds[13]); - paramnum = GET_UINT1(pds[10]); - level1type = GET_UINT1(pds[22]); + int dis = GET_UINT1(is[6]); + int gridtype = GET_UINT2(gds[12],gds[13]); + int paramcat = GET_UINT1(pds[9]); + int paramnum = GET_UINT1(pds[10]); + int level1type = GET_UINT1(pds[22]); /* level1sf = GET_UINT1(pds[23]); */ - level1 = GET_UINT4(pds[24],pds[25],pds[26],pds[27]); + int level1 = GET_UINT4(pds[24],pds[25],pds[26],pds[27]); /* level2type = GET_UINT1(pds[28]); */ /* level2sf = GET_UINT1(pds[29]); */ /* level2 = GET_UINT4(pds[30],pds[31],pds[32],pds[33]); */ /* printf("level %d %d %d %d %d %d %d\n", level1type, level1sf, level1, level1*level1sf, level2sf, level2, level2*level2sf); */ - fprintf(stdout, "%5d :%4ld %8ld %6ld :%2d %3ld %3ld %3ld %3ld %4ld %6ld %6ld : %3d%7d : %5d %5d %6.4g\n", + char paramstr[16]; + sprintf(paramstr, "%d.%d.%d", paramnum, paramcat, dis); + fprintf(stdout, "%5d :%4ld %8ld %6ld :%2d %3ld %3ld %3ld %3ld %4ld %6ld %6ld : %-9s %7d : %5d %5d %6.4g\n", nrec, offset, recpos, recsize, GRIB_EDITION(is), ids_len, lus_len, gds_len, pds_len, drs_len, bms_len, bds_len, - paramnum, level1, level1type, gridtype, cr); + paramstr, level1, level1type, gridtype, cr); } @@ -5771,7 +5773,7 @@ void gribRepair1(int nrec, long recsize, unsigned char *gribbuffer) extern "C" { #endif #include <szlib.h> -#if defined (__cplusplus) +#ifdef __cplusplus } #endif @@ -13159,7 +13161,7 @@ void encode_dummy(void) (void) encode_array_unrolled_double(0, 0, 0, NULL, NULL, 0, 0, NULL); (void) encode_array_unrolled_float(0, 0, 0, NULL, NULL, 0, 0, NULL); } -static const char grb_libvers[] = "1.9.0" " of ""Sep 29 2017"" ""10:16:02"; +static const char grb_libvers[] = "1.9.0" " of ""Jan 22 2018"" ""09:24:03"; const char * cgribexLibraryVersion(void) { diff --git a/src/config.h.in b/src/config.h.in index 3110e95096dbb9f50a375e72c17c7eaa5a11cdc8..79f4e726df08db4128f908f299499e70d34c826a 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -42,6 +42,10 @@ don't. */ #undef HAVE_DECL_UUID_GENERATE +/* Define to 1 if you have the declaration of `UUID_MAKE_V5', and to 0 if you + don't. */ +#undef HAVE_DECL_UUID_MAKE_V5 + /* Define to 1 if you have the declaration of `_PC_REC_XFER_ALIGN', and to 0 if you don't. */ #undef HAVE_DECL__PC_REC_XFER_ALIGN diff --git a/src/dmemory.h b/src/dmemory.h index 90ec1f0e86f1d3b4245a2e789aee223ca2fc49f0..55537408e64301c604c349a1acc16093bb1837dc 100644 --- a/src/dmemory.h +++ b/src/dmemory.h @@ -1,5 +1,5 @@ -#ifndef _DMEMORY_H -#define _DMEMORY_H +#ifndef _DMEMORY_H +#define _DMEMORY_H #include <stdio.h> @@ -25,11 +25,11 @@ extern void *memCalloc (size_t nmemb, size_t size, const char *file, const cha extern void *memMalloc (size_t size, const char *file, const char *functionname, int line); extern void memFree (void *ptr, const char *file, const char *functionname, int line); -#if defined (__cplusplus) +#ifdef __cplusplus } #endif -#if defined WITH_FUNCTION_NAME +#ifdef WITH_FUNCTION_NAME # define Realloc(p, s) memRealloc((p), (s), __FILE__, __func__, __LINE__) # define Calloc(n, s) memCalloc((n), (s), __FILE__, __func__, __LINE__) # define Malloc(s) memMalloc((s), __FILE__, __func__, __LINE__) diff --git a/src/dtypes.h b/src/dtypes.h index ca849ce18f52741098ae033c8fa85482934e3f0c..309943caef254dc595d85817e5205a18b4cf7f9c 100644 --- a/src/dtypes.h +++ b/src/dtypes.h @@ -1,13 +1,13 @@ -#ifndef DTYPES_H -#define DTYPES_H +#ifndef DTYPES_H +#define DTYPES_H #include <stdio.h> #include <limits.h> /* INT32 */ -#if ! defined (INT_MAX) -# error INT_MAX undefined +#ifndef INT_MAX +#error INT_MAX undefined #endif #undef INT32 @@ -19,7 +19,7 @@ /* INT64 */ -#if ! defined (LONG_MAX) +#ifndef LONG_MAX # error LONG_MAX undefined #endif diff --git a/src/error.c b/src/error.c index 5d1c345510e0c7c975e70bd270089d59635e368e..3fb78982b2f2570151196a57d8d7b1eb78dd25f5 100644 --- a/src/error.c +++ b/src/error.c @@ -1,5 +1,5 @@ -#if defined (HAVE_CONFIG_H) -# include "config.h" +#ifdef HAVE_CONFIG_H +#include "config.h" #endif #include <stdio.h> @@ -32,7 +32,7 @@ void SysError_(const char *caller, const char *fmt, ...) va_start(args, fmt); printf("\n"); - fprintf(stderr, "Error (%s) : ", caller); + fprintf(stderr, "Error (%s): ", caller); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); @@ -55,7 +55,7 @@ void Error_(const char *caller, const char *fmt, ...) va_start(args, fmt); printf("\n"); - fprintf(stderr, "Error (%s) : ", caller); + fprintf(stderr, "Error (%s): ", caller); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); @@ -118,7 +118,7 @@ void Warning_(const char *caller, const char *fmt, ...) void cdiWarning(const char *caller, const char *fmt, va_list ap) { - fprintf(stderr, "Warning (%s) : ", caller); + fprintf(stderr, "Warning (%s): ", caller); vfprintf(stderr, fmt, ap); fputc('\n', stderr); } @@ -130,7 +130,7 @@ void Message_(const char *caller, const char *fmt, ...) va_start(args, fmt); - fprintf(stdout, "%-18s : ", caller); + fprintf(stdout, "%-18s: ", caller); vfprintf(stdout, fmt, args); fprintf(stdout, "\n"); diff --git a/src/gaussgrid.c b/src/gaussgrid.c index a26e1d7a44b4ec7b8fcaaf38c7944b31a0efa46d..769cefc3b9cf2074bf7f2fd554d1797fa0e85597 100644 --- a/src/gaussgrid.c +++ b/src/gaussgrid.c @@ -1,12 +1,15 @@ -#ifdef HAVE_CONFIG_H +#ifdef HAVE_CONFIG_H #include "config.h" #endif -#include <math.h> -#include <float.h> #include <stdio.h> #include <stdlib.h> +#include <float.h> +#include <math.h> +#ifndef M_SQRT2 +#define M_SQRT2 1.41421356237309504880168872420969808 +#endif #include "dmemory.h" #include "gaussgrid.h" diff --git a/src/gribapi_utilities.c b/src/gribapi_utilities.c index dd583c25f864506a1fc8d5fe14c3fcff5246d3ce..483fbe85e4f86cd28817710b375160720240d371 100644 --- a/src/gribapi_utilities.c +++ b/src/gribapi_utilities.c @@ -503,6 +503,15 @@ int gribapiGetIsRotated(grib_handle *gh) return gribGetLongDefault(gh, "gridDefinitionTemplateNumber", -1) == GRIB2_GTYPE_LATLON_ROT; } + +size_t gribapiGetGridsize(grib_handle *gh) +{ + size_t gridsize; + FAIL_ON_GRIB_ERROR(grib_get_size, gh, "values", &gridsize); + return gridsize; +} + + //TODO: Simplify by use of the convenience functions (gribGetLong(), gribGetLongDefault(), etc.). void gribapiGetGrid(grib_handle *gh, grid_t *grid) { @@ -563,7 +572,7 @@ void gribapiGetGrid(grib_handle *gh, grid_t *grid) if ( gridtype == GRID_LONLAT && nlat > 1 ) FAIL_ON_GRIB_ERROR(grib_get_double, gh, "jDirectionIncrementInDegrees", &grid->y.inc); - long iscan, jscan; + long iscan = 0, jscan = 0; FAIL_ON_GRIB_ERROR(grib_get_long, gh, "iScansNegatively", &iscan); FAIL_ON_GRIB_ERROR(grib_get_long, gh, "jScansPositively", &jscan); if ( iscan ) grid->x.inc = - grid->x.inc; diff --git a/src/gribapi_utilities.h b/src/gribapi_utilities.h index 82021f5cc2ed6bbe05297800255ef1a2cd16c72c..7127c1588fc6586e7549872a0579654cd0b8bae1 100644 --- a/src/gribapi_utilities.h +++ b/src/gribapi_utilities.h @@ -32,6 +32,8 @@ int gribGetDatatype(grib_handle* gribHandle); int gribapiGetParam(grib_handle *gh); int gribapiGetGridType(grib_handle *gh); void gribapiGetGrid(grib_handle *gh, grid_t *grid); +size_t gribapiGetGridsize(grib_handle *gh); + #ifdef HIRLAM_EXTENSIONS void gribapiSetDataTimeRangeIndicator(grib_handle *gh, int timeRangeIndicator); diff --git a/src/grid.c b/src/grid.c index fe5d11893266cb5230a63e0c5c6f7923bc958f86..2c583acab9deac8d86699c2d8e9233869e42a0cd 100644 --- a/src/grid.c +++ b/src/grid.c @@ -28,7 +28,7 @@ static const char Grids[][17] = { /* 0 */ "undefined", /* 1 */ "generic", /* 2 */ "gaussian", - /* 3 */ "gaussian reduced", + /* 3 */ "gaussian_reduced", /* 4 */ "lonlat", /* 5 */ "spectral", /* 6 */ "fourier", diff --git a/src/grid.h b/src/grid.h index 770cd5e9359dd468b3f9d704551fdc3f7a4ddd8c..deb5a654e4b8e656054babb1cd51ec886091454d 100644 --- a/src/grid.h +++ b/src/grid.h @@ -1,5 +1,5 @@ -#ifndef _GRID_H -#define _GRID_H +#ifndef GRID_H +#define GRID_H #include "cdi.h" #include <stdbool.h> diff --git a/src/institution.c b/src/institution.c index eb1ef6bb7b732f2a80e2e65f95eb2ccc1f2c5498..3eedb0ec1401b6a8871ff44f3274fd4c5e6d09b7 100644 --- a/src/institution.c +++ b/src/institution.c @@ -9,7 +9,6 @@ #include "cdi.h" #include "cdi_int.h" #include "resource_handle.h" -#include "resource_handle.h" #include "resource_unpack.h" #include "namespace.h" #include "serialize.h" @@ -17,8 +16,9 @@ static int ECMWF = CDI_UNDEFID, - MPIMET = CDI_UNDEFID, - MCH = CDI_UNDEFID; + DWD = CDI_UNDEFID, + MPIMET = CDI_UNDEFID, + MCH = CDI_UNDEFID; typedef struct { @@ -63,18 +63,18 @@ void instituteDefaultEntries ( void ) { cdiResH resH[] = { ECMWF = institutDef( 98, 0, "ECMWF", "European Centre for Medium-Range Weather Forecasts"), - MPIMET = institutDef( 98, 232, "MPIMET", "Max-Planck-Institute for Meteorology"), - institutDef( 98, 255, "MPIMET", "Max-Planck-Institute for Meteorology"), - institutDef( 98, 232, "MPIMET", "Max Planck Institute for Meteorology"), - institutDef( 78, 0, "DWD", "Deutscher Wetterdienst"), - institutDef( 78, 255, "DWD", "Deutscher Wetterdienst"), + MPIMET = institutDef(252, 1, "MPIMET", "Max-Planck-Institute for Meteorology"), + institutDef( 98, 255, "MPIMET", "Max-Planck-Institute for Meteorology"), + institutDef( 98, 232, "MPIMET", "Max Planck Institute for Meteorology"), + DWD = institutDef( 78, 255, "DWD", "Deutscher Wetterdienst"), + institutDef( 78, 0, "DWD", "Deutscher Wetterdienst"), MCH = institutDef(215, 255, "MCH", "MeteoSwiss"), - institutDef( 7, 0, "NCEP", "National Centers for Environmental Prediction"), - institutDef( 7, 1, "NCEP", "National Centers for Environmental Prediction"), - institutDef( 60, 0, "NCAR", "National Center for Atmospheric Research"), - institutDef( 74, 0, "METOFFICE", "U.K. Met Office"), - institutDef( 97, 0, "ESA", "European Space Agency"), - institutDef( 99, 0, "KNMI", "Royal Netherlands Meteorological Institute"), + institutDef( 7, 0, "NCEP", "National Centers for Environmental Prediction"), + institutDef( 7, 1, "NCEP", "National Centers for Environmental Prediction"), + institutDef( 60, 0, "NCAR", "National Center for Atmospheric Research"), + institutDef( 74, 0, "METOFFICE", "U.K. Met Office"), + institutDef( 97, 0, "ESA", "European Space Agency"), + institutDef( 99, 0, "KNMI", "Royal Netherlands Meteorological Institute"), }; /* (void) institutDef( 0, 0, "IPSL", "IPSL (Institut Pierre Simon Laplace, Paris, France)"); */ diff --git a/src/make_cdilib b/src/make_cdilib index 1a9deae7608a321a4fbb112d1de047f3bbe9df84..7a750601b9fe6597efc507ad3a4198bdede6edc8 100755 --- a/src/make_cdilib +++ b/src/make_cdilib @@ -150,6 +150,7 @@ files="basetime.c \ util.c \ varscan.c \ vlist.c \ + cdi_key.c \ cdi_att.c \ vlist_var.c \ zaxis.c" diff --git a/src/make_fint.c b/src/make_fint.c index 6d3e3c71594fecb3976572270bb2ec49749ec013..05e1a72b81a11f3e515ec4bdce3b782e86a34f61 100644 --- a/src/make_fint.c +++ b/src/make_fint.c @@ -15,7 +15,7 @@ #endif //#include "config.h" -#define VERSION "1.9.2" +#define VERSION "1.9.3" typedef struct { size_t naline; @@ -438,7 +438,7 @@ static void fortran_interface(char *fname, char *fnameinc, char *fnameint, "#endif\n" "\n", fpint); - fputs("static\n" + fputs("static inline\n" "int size_t_c2f(size_t value_size_t)\n" "{\n" " assert(value_size_t < INT_MAX);\n" diff --git a/src/mo_cdi.f90 b/src/mo_cdi.f90 index ec93d16a71e4da7b8ffe3123b00004d459dc0b2f..0347ae515ee9401e196055ace2651a9ea4df94fa 100644 --- a/src/mo_cdi.f90 +++ b/src/mo_cdi.f90 @@ -1,6 +1,6 @@ ! >>> Warning: This is a generated file. If you modify it, you get what you deserve. <<< ! -! Generated by "../interfaces/f2003/bindGen.rb" from input file "../src/cdi.h". +! Generated by "../../../interfaces/f2003/bindGen.rb" from input file "../../../src/cdi.h". module mo_cdi use iso_c_binding @@ -123,6 +123,7 @@ module mo_cdi integer(c_int), public, parameter :: CDI_DATATYPE_CPX = 254 integer(c_int), public, parameter :: CDI_DATATYPE_UCHAR = 255 integer(c_int), public, parameter :: CDI_DATATYPE_LONG = 256 + integer(c_int), public, parameter :: CDI_DATATYPE_UINT = 257 integer(c_int), public, parameter :: DATATYPE_INT = 251 integer(c_int), public, parameter :: DATATYPE_FLT = 252 integer(c_int), public, parameter :: DATATYPE_TXT = 253 @@ -416,12 +417,6 @@ module mo_cdi public :: vlistInqVarAddoffset public :: vlistDefVarTimave public :: vlistInqVarTimave - public :: vlistDefVarTimaccu - public :: vlistInqVarTimaccu - public :: vlistDefVarTypeOfGeneratingProcess - public :: vlistInqVarTypeOfGeneratingProcess - public :: vlistDefVarProductDefinitionTemplate - public :: vlistInqVarProductDefinitionTemplate public :: vlistInqVarSize public :: vlistDefIndex public :: vlistInqIndex @@ -431,8 +426,6 @@ module mo_cdi public :: vlistFindLevel public :: vlistMergedVar public :: vlistMergedLevel - public :: vlistDefVarEnsemble - public :: vlistInqVarEnsemble public :: cdiClearAdditionalKeys public :: cdiDefAdditionalKey public :: vlistDefVarIntKey @@ -478,6 +471,19 @@ module mo_cdi public :: gridDefYvals public :: gridInqYvals public :: gridInqYIsc + integer(c_int), public, parameter :: CDI_KEY_TABLESVERSION = 801 + integer(c_int), public, parameter :: CDI_KEY_LOCALTABLESVERSION = 802 + integer(c_int), public, parameter :: CDI_KEY_TYPEOFGENERATINGPROCESS = 803 + integer(c_int), public, parameter :: CDI_KEY_PRODUCTDEFINITIONTEMPLATE = 804 + integer(c_int), public, parameter :: CDI_KEY_TYPEOFPROCESSEDDATA = 805 + integer(c_int), public, parameter :: CDI_KEY_SHAPEOFTHEEARTH = 806 + integer(c_int), public, parameter :: CDI_KEY_BACKGROUNDPROCESS = 807 + integer(c_int), public, parameter :: CDI_KEY_TYPEOFENSEMBLEFORECAST = 808 + integer(c_int), public, parameter :: CDI_KEY_NUMBEROFFORECASTSINENSEMBLE =& + & 809 + integer(c_int), public, parameter :: CDI_KEY_PERTURBATIONNUMBER = 810 + public :: cdiDefKeyInt + public :: cdiInqKeyInt integer(c_int), public, parameter :: CDI_KEY_XNAME = 901 integer(c_int), public, parameter :: CDI_KEY_XDIMNAME = 902 integer(c_int), public, parameter :: CDI_KEY_XLONGNAME = 903 @@ -498,6 +504,8 @@ module mo_cdi integer(c_int), public, parameter :: CDI_KEY_P0VALUE = 952 public :: cdiGridDefKeyStr public :: cdiGridInqKeyStr + public :: cdiZaxisDefKeyStr + public :: cdiZaxisInqKeyStr public :: cdiZaxisDefKeyFlt public :: cdiZaxisInqKeyFlt public :: gridDefXname @@ -574,8 +582,6 @@ module mo_cdi public :: zaxisInqNumber public :: zaxisDefUUID public :: zaxisInqUUID - public :: cdiZaxisDefKeyStr - public :: cdiZaxisInqKeyStr public :: zaxisDefName public :: zaxisInqName public :: zaxisDefLongname @@ -1622,56 +1628,6 @@ module mo_cdi integer(c_int) :: f_result end function vlistInqVarTimave - subroutine vlistDefVarTimaccu(vlistID_dummy, varID_dummy, timaccu_dummy)& - & bind(c, name = 'vlistDefVarTimaccu') - import c_int - integer(c_int), value :: vlistID_dummy - integer(c_int), value :: varID_dummy - integer(c_int), value :: timaccu_dummy - end subroutine vlistDefVarTimaccu - - function vlistInqVarTimaccu(vlistID_dummy, varID_dummy) bind(c, name =& - & 'vlistInqVarTimaccu') result(f_result) - import c_int - integer(c_int), value :: vlistID_dummy - integer(c_int), value :: varID_dummy - integer(c_int) :: f_result - end function vlistInqVarTimaccu - - subroutine vlistDefVarTypeOfGeneratingProcess(vlistID_dummy, varID_dummy,& - & typeOfGeneratingProcess_dummy) bind(c, name =& - & 'vlistDefVarTypeOfGeneratingProcess') - import c_int - integer(c_int), value :: vlistID_dummy - integer(c_int), value :: varID_dummy - integer(c_int), value :: typeOfGeneratingProcess_dummy - end subroutine vlistDefVarTypeOfGeneratingProcess - - function vlistInqVarTypeOfGeneratingProcess(vlistID_dummy, varID_dummy)& - & bind(c, name = 'vlistInqVarTypeOfGeneratingProcess') result(f_result) - import c_int - integer(c_int), value :: vlistID_dummy - integer(c_int), value :: varID_dummy - integer(c_int) :: f_result - end function vlistInqVarTypeOfGeneratingProcess - - subroutine vlistDefVarProductDefinitionTemplate(vlistID_dummy, varID_dummy,& - & productDefinitionTemplate_dummy) bind(c, name =& - & 'vlistDefVarProductDefinitionTemplate') - import c_int - integer(c_int), value :: vlistID_dummy - integer(c_int), value :: varID_dummy - integer(c_int), value :: productDefinitionTemplate_dummy - end subroutine vlistDefVarProductDefinitionTemplate - - function vlistInqVarProductDefinitionTemplate(vlistID_dummy, varID_dummy)& - & bind(c, name = 'vlistInqVarProductDefinitionTemplate') result(f_result) - import c_int - integer(c_int), value :: vlistID_dummy - integer(c_int), value :: varID_dummy - integer(c_int) :: f_result - end function vlistInqVarProductDefinitionTemplate - function vlistInqVarSize(vlistID_dummy, varID_dummy) bind(c, name =& & 'vlistInqVarSize') result(f_result) import c_int, c_size_t @@ -1750,29 +1706,6 @@ module mo_cdi integer(c_int) :: f_result end function vlistMergedLevel - subroutine vlistDefVarEnsemble(vlistID_dummy, varID_dummy, ensID_dummy,& - & ensCount_dummy, forecast_type_dummy) bind(c, name =& - & 'vlistDefVarEnsemble') - import c_int - integer(c_int), value :: vlistID_dummy - integer(c_int), value :: varID_dummy - integer(c_int), value :: ensID_dummy - integer(c_int), value :: ensCount_dummy - integer(c_int), value :: forecast_type_dummy - end subroutine vlistDefVarEnsemble - - function vlistInqVarEnsemble(vlistID_dummy, varID_dummy, ensID_dummy,& - & ensCount_dummy, forecast_type_dummy) bind(c, name =& - & 'vlistInqVarEnsemble') result(f_result) - import c_int - integer(c_int), value :: vlistID_dummy - integer(c_int), value :: varID_dummy - integer(c_int), intent(inout) :: ensID_dummy - integer(c_int), intent(inout) :: ensCount_dummy - integer(c_int), intent(inout) :: forecast_type_dummy - integer(c_int) :: f_result - end function vlistInqVarEnsemble - subroutine cdiClearAdditionalKeys() bind(c, name =& & 'cdiClearAdditionalKeys') end subroutine cdiClearAdditionalKeys @@ -1977,6 +1910,26 @@ module mo_cdi integer(c_int) :: f_result end function gridInqYIsc + function cdiDefKeyInt(cdiID_dummy, varID_dummy, key_dummy, value_dummy)& + & bind(c, name = 'cdiDefKeyInt') result(f_result) + import c_int + integer(c_int), value :: cdiID_dummy + integer(c_int), value :: varID_dummy + integer(c_int), value :: key_dummy + integer(c_int), value :: value_dummy + integer(c_int) :: f_result + end function cdiDefKeyInt + + function cdiInqKeyInt(cdiID_dummy, varID_dummy, key_dummy, value_dummy)& + & bind(c, name = 'cdiInqKeyInt') result(f_result) + import c_int + integer(c_int), value :: cdiID_dummy + integer(c_int), value :: varID_dummy + integer(c_int), value :: key_dummy + integer(c_int), intent(inout) :: value_dummy + integer(c_int) :: f_result + end function cdiInqKeyInt + function cdiZaxisDefKeyFlt(zaxisID_dummy, key_dummy, value_dummy) bind(c,& & name = 'cdiZaxisDefKeyFlt') result(f_result) import c_double, c_int @@ -4944,6 +4897,73 @@ contains end do end function cdiGridInqKeyStr + function cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy, mesg_dummy)& + & result(f_result) + integer(c_int) :: f_result + integer(c_int), value :: zaxisID_dummy + integer(c_int), value :: key_dummy + integer(c_int), value :: size_dummy + character(kind = c_char, len = *), intent(in) :: mesg_dummy + character(kind = c_char) :: mesg_temp(len(mesg_dummy) + 1) + integer :: mesg_i + interface + function lib_cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy,& + & mesg_dummy) bind(c, name = 'cdiZaxisDefKeyStr') result(c_result) + import c_char, c_int + integer(c_int) :: c_result + integer(c_int), value :: zaxisID_dummy + integer(c_int), value :: key_dummy + integer(c_int), value :: size_dummy + character(kind = c_char) :: mesg_dummy(*) + end function lib_cdiZaxisDefKeyStr + end interface + do mesg_i = 1, len(mesg_dummy) + mesg_temp(mesg_i) = mesg_dummy(mesg_i:mesg_i) + end do + mesg_temp(len(mesg_dummy) + 1) = c_null_char + f_result = lib_cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy,& + & mesg_temp) + end function cdiZaxisDefKeyStr + + function cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy, mesg_dummy)& + & result(f_result) + integer(c_int) :: f_result + integer(c_int), value :: zaxisID_dummy + integer(c_int), value :: key_dummy + integer(c_int), value :: size_dummy + character(kind = c_char, len = *), intent(inout) :: mesg_dummy + character(kind = c_char) :: mesg_temp(len(mesg_dummy) + 1) + integer :: mesg_i + interface + function lib_cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy,& + & mesg_dummy) bind(c, name = 'cdiZaxisInqKeyStr') result(c_result) + import c_char, c_int + integer(c_int) :: c_result + integer(c_int), value :: zaxisID_dummy + integer(c_int), value :: key_dummy + integer(c_int), value :: size_dummy + character(kind = c_char) :: mesg_dummy(*) + end function lib_cdiZaxisInqKeyStr + end interface + mesg_temp(len(mesg_dummy) + 1) = c_null_char + do mesg_i = len(mesg_dummy), 1, -1 + if(mesg_dummy(mesg_i:mesg_i) /= ' ') exit + mesg_temp(mesg_i) = c_null_char + end do + do mesg_i = mesg_i, 1, -1 + mesg_temp(mesg_i) = mesg_dummy(mesg_i:mesg_i) + end do + f_result = lib_cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy,& + & mesg_temp) + do mesg_i = 1, len(mesg_dummy) + if(mesg_temp(mesg_i) == c_null_char) exit + mesg_dummy(mesg_i:mesg_i) = mesg_temp(mesg_i) + end do + do mesg_i = mesg_i, len(mesg_dummy) + mesg_dummy(mesg_i:mesg_i) = ' ' + end do + end function cdiZaxisInqKeyStr + subroutine gridDefXname(gridID_dummy, xname_dummy) integer(c_int), value :: gridID_dummy character(kind = c_char, len = *), intent(in) :: xname_dummy @@ -5417,73 +5437,6 @@ contains end if end function zaxisNamePtr - function cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy, mesg_dummy)& - & result(f_result) - integer(c_int) :: f_result - integer(c_int), value :: zaxisID_dummy - integer(c_int), value :: key_dummy - integer(c_int), value :: size_dummy - character(kind = c_char, len = *), intent(in) :: mesg_dummy - character(kind = c_char) :: mesg_temp(len(mesg_dummy) + 1) - integer :: mesg_i - interface - function lib_cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy,& - & mesg_dummy) bind(c, name = 'cdiZaxisDefKeyStr') result(c_result) - import c_char, c_int - integer(c_int) :: c_result - integer(c_int), value :: zaxisID_dummy - integer(c_int), value :: key_dummy - integer(c_int), value :: size_dummy - character(kind = c_char) :: mesg_dummy(*) - end function lib_cdiZaxisDefKeyStr - end interface - do mesg_i = 1, len(mesg_dummy) - mesg_temp(mesg_i) = mesg_dummy(mesg_i:mesg_i) - end do - mesg_temp(len(mesg_dummy) + 1) = c_null_char - f_result = lib_cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy,& - & mesg_temp) - end function cdiZaxisDefKeyStr - - function cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy, mesg_dummy)& - & result(f_result) - integer(c_int) :: f_result - integer(c_int), value :: zaxisID_dummy - integer(c_int), value :: key_dummy - integer(c_int), value :: size_dummy - character(kind = c_char, len = *), intent(inout) :: mesg_dummy - character(kind = c_char) :: mesg_temp(len(mesg_dummy) + 1) - integer :: mesg_i - interface - function lib_cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy,& - & mesg_dummy) bind(c, name = 'cdiZaxisInqKeyStr') result(c_result) - import c_char, c_int - integer(c_int) :: c_result - integer(c_int), value :: zaxisID_dummy - integer(c_int), value :: key_dummy - integer(c_int), value :: size_dummy - character(kind = c_char) :: mesg_dummy(*) - end function lib_cdiZaxisInqKeyStr - end interface - mesg_temp(len(mesg_dummy) + 1) = c_null_char - do mesg_i = len(mesg_dummy), 1, -1 - if(mesg_dummy(mesg_i:mesg_i) /= ' ') exit - mesg_temp(mesg_i) = c_null_char - end do - do mesg_i = mesg_i, 1, -1 - mesg_temp(mesg_i) = mesg_dummy(mesg_i:mesg_i) - end do - f_result = lib_cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy,& - & mesg_temp) - do mesg_i = 1, len(mesg_dummy) - if(mesg_temp(mesg_i) == c_null_char) exit - mesg_dummy(mesg_i:mesg_i) = mesg_temp(mesg_i) - end do - do mesg_i = mesg_i, len(mesg_dummy) - mesg_dummy(mesg_i:mesg_i) = ' ' - end do - end function cdiZaxisInqKeyStr - subroutine zaxisDefName(zaxisID_dummy, name) integer(c_int), value :: zaxisID_dummy character(kind = c_char, len = *), optional, intent(in) :: name diff --git a/src/pio_serialize.c b/src/pio_serialize.c index a3139be2352923b9b2a6da8f92e524fb51c1021a..a2c87d320a91d00dfd667571e629009b61378190 100644 --- a/src/pio_serialize.c +++ b/src/pio_serialize.c @@ -28,6 +28,7 @@ static struct { CDI_DATATYPE_UINT32, MPI_UINT32_T }, #endif { CDI_DATATYPE_INT, MPI_INT }, + { CDI_DATATYPE_UINT, MPI_UNSIGNED }, { CDI_DATATYPE_FLT64, MPI_DOUBLE }, { CDI_DATATYPE_TXT, MPI_CHAR }, { CDI_DATATYPE_UCHAR, MPI_UNSIGNED_CHAR }, diff --git a/src/serialize.c b/src/serialize.c index 8c81acad8fa8ecdf968d9f5a5210d0cd31a9fe98..0e0b047b74d98b0393cc87076304f6c4429e6f87 100644 --- a/src/serialize.c +++ b/src/serialize.c @@ -57,6 +57,9 @@ serializeGetSizeInCore(int count, int datatype, void *context) case CDI_DATATYPE_INT: elemSize = sizeof (int); break; + case CDI_DATATYPE_UINT: + elemSize = sizeof (unsigned); + break; case CDI_DATATYPE_FLT: case CDI_DATATYPE_FLT64: elemSize = sizeof (double); diff --git a/src/stream.c b/src/stream.c index bb6b3821936e1dfc3496d16882f1548661aa3bcc..d0bd6ca5b046efce597fbedc115ae81e0ace3c56 100644 --- a/src/stream.c +++ b/src/stream.c @@ -303,17 +303,27 @@ int streamInqByteorder(int streamID) const char *streamFilesuffix(int filetype) { - // static char *fileSuffix[] = {"", ".grb", ".g2", ".nc", ".nc", ".nc4", ".nc4", ".srv", ".ext", ".ieg"}; - /* note: the 2nd dimenstion of the fileSuffix array must be equal to or - * larger than the length of the longest suffix (dot and \0 terminator - * included) */ - static const char fileSuffix[][5] = {"", ".grb", ".grb", ".nc", ".nc", ".nc", ".nc", ".srv", ".ext", ".ieg"}; - int size = (int)(sizeof(fileSuffix)/sizeof(fileSuffix[0])); - - if ( filetype > 0 && filetype < size ) - return fileSuffix[filetype]; - else - return fileSuffix[0]; + static const char *noSuffix = ""; + static const char *ncSuffix = ".nc"; + static const char *grbSuffix = ".grb"; + static const char *srvSuffix = ".srv"; + static const char *extSuffix = ".ext"; + static const char *iegSuffix = ".ieg"; + + switch (filetype) + { + case CDI_FILETYPE_NC: + case CDI_FILETYPE_NC2: + case CDI_FILETYPE_NC4: + case CDI_FILETYPE_NC4C: + case CDI_FILETYPE_NC5: return ncSuffix; + case CDI_FILETYPE_GRB: + case CDI_FILETYPE_GRB2: return grbSuffix; + case CDI_FILETYPE_SRV: return srvSuffix; + case CDI_FILETYPE_EXT: return extSuffix; + case CDI_FILETYPE_IEG: return iegSuffix; + default: return noSuffix; + } } diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index 3e7758cbe110d7cafdd207390b15568d9b09c624..e26f016d3002ed664f804b582e084d371a009508 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -109,7 +109,9 @@ typedef struct { char stdname[CDI_MAX_NAME]; char units[CDI_MAX_NAME]; char extra[CDI_MAX_NAME]; - ensinfo_t *ensdata; /* Ensemble information */ + int typeOfEnsembleForecast; + int numberOfForecastsInEnsemble; + int perturbationNumber; } ncvar_t; @@ -692,7 +694,9 @@ void init_ncvars(long nvars, ncvar_t *ncvars) ncvars[ncvarid].lvalidrange = false; ncvars[ncvarid].validrange[0] = VALIDMISS; ncvars[ncvarid].validrange[1] = VALIDMISS; - ncvars[ncvarid].ensdata = NULL; + ncvars[ncvarid].typeOfEnsembleForecast = -1; + ncvars[ncvarid].numberOfForecastsInEnsemble = -1; + ncvars[ncvarid].perturbationNumber = -1; memset(ncvars[ncvarid].name, 0, CDI_MAX_NAME); memset(ncvars[ncvarid].longname, 0, CDI_MAX_NAME); memset(ncvars[ncvarid].stdname, 0, CDI_MAX_NAME); @@ -1339,6 +1343,8 @@ void cdf_scan_var_attr(int nvars, ncvar_t *ncvars, ncdim_t *ncdims, int timedimi } else { + if ( !cdiIgnoreAttCoordinates ) ncvars[ncvarid].ncoordvars++; + int k; for ( k = 0; k < nchecked_vars; ++k ) if ( strcmp(checked_vars[k], varname) == 0 ) break; @@ -1415,6 +1421,11 @@ void cdf_scan_var_attr(int nvars, ncvar_t *ncvars, ncdim_t *ncdims, int timedimi cdf_set_dim(ncvars, ncvarid, 0, Z_AXIS); ncdims[ncvars[ncvarid].dimids[0]].dimtype = Z_AXIS; } + if ( ncvars[ncvarid].ndims == 0 ) + { + cdf_set_var(ncvars, ncvarid, FALSE); + ncvars[ncvarid].islev = true; + } } else if ( isNumber && strcmp(attname, "_FillValue") == 0 ) { @@ -1532,18 +1543,11 @@ void cdf_scan_var_attr(int nvars, ncvar_t *ncvars, ncdim_t *ncdims, int timedimi strcmp(attname, "forecast_init_type") == 0) ) { int temp; - - if( ncvars[ncvarid].ensdata == NULL ) - ncvars[ncvarid].ensdata = (ensinfo_t *) Malloc( sizeof( ensinfo_t ) ); - cdfGetAttInt(ncid, ncvarid, attname, 1, &temp); - if( strcmp(attname, "realization") == 0 ) - ncvars[ncvarid].ensdata->ens_index = temp; - else if( strcmp(attname, "ensemble_members") == 0 ) - ncvars[ncvarid].ensdata->ens_count = temp; - else if( strcmp(attname, "forecast_init_type") == 0 ) - ncvars[ncvarid].ensdata->forecast_init_type = temp; + if ( strcmp(attname, "realization") == 0 ) ncvars[ncvarid].perturbationNumber = temp; + else if ( strcmp(attname, "ensemble_members") == 0 ) ncvars[ncvarid].numberOfForecastsInEnsemble = temp; + else if ( strcmp(attname, "forecast_init_type") == 0 ) ncvars[ncvarid].typeOfEnsembleForecast = temp; cdf_set_var(ncvars, ncvarid, TRUE); } @@ -3175,13 +3179,11 @@ void cdf_define_all_vars(stream_t *streamptr, int vlistID, int instID, int model printf("dimids: %d %d\n", i, dimids[i]); printf("xdimid, ydimid %d %d\n", xdimid, ydimid); */ - if ( ncvars[ncvarid].ensdata != NULL ) + if ( ncvars[ncvarid].numberOfForecastsInEnsemble != -1 ) { - vlistDefVarEnsemble( vlistID, varID, ncvars[ncvarid].ensdata->ens_index, - ncvars[ncvarid].ensdata->ens_count, - ncvars[ncvarid].ensdata->forecast_init_type ); - Free(ncvars[ncvarid].ensdata); - ncvars[ncvarid].ensdata = NULL; + cdiDefKeyInt(vlistID, varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, ncvars[ncvarid].typeOfEnsembleForecast); + cdiDefKeyInt(vlistID, varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, ncvars[ncvarid].numberOfForecastsInEnsemble); + cdiDefKeyInt(vlistID, varID, CDI_KEY_PERTURBATIONNUMBER, ncvars[ncvarid].perturbationNumber); } if ( ncvars[ncvarid].extra[0] != 0 ) @@ -3874,13 +3876,16 @@ int cdfInqContents(stream_t *streamptr) int ncoordvars = ncvar->ncoordvars; for ( int i = 0; i < ncoordvars; i++ ) { - if ( ncvars[ncvar->coordvarids[i]].islon || - ncvars[ncvar->coordvarids[i]].isx ) ncvar->xvarid = ncvar->coordvarids[i]; - else if ( ncvars[ncvar->coordvarids[i]].islat || - ncvars[ncvar->coordvarids[i]].isy ) ncvar->yvarid = ncvar->coordvarids[i]; - else if ( ncvars[ncvar->coordvarids[i]].islev ) ncvar->zvarid = ncvar->coordvarids[i]; - else if ( ncvars[ncvar->coordvarids[i]].isc ) ncvar->cvarids[i] = ncvar->coordvarids[i]; - } + if ( ncvar->coordvarids[i] != CDI_UNDEFID ) + { + if ( ncvars[ncvar->coordvarids[i]].islon || + ncvars[ncvar->coordvarids[i]].isx ) ncvar->xvarid = ncvar->coordvarids[i]; + else if ( ncvars[ncvar->coordvarids[i]].islat || + ncvars[ncvar->coordvarids[i]].isy ) ncvar->yvarid = ncvar->coordvarids[i]; + else if ( ncvars[ncvar->coordvarids[i]].islev ) ncvar->zvarid = ncvar->coordvarids[i]; + else if ( ncvars[ncvar->coordvarids[i]].isc ) ncvar->cvarids[i] = ncvar->coordvarids[i]; + } + } } } diff --git a/src/stream_cgribex.c b/src/stream_cgribex.c index 42fefdd979050f7457f38ff7d866d5724ecc44e2..d73bd6e98a7f560ebd57b718164fe95329e08272 100644 --- a/src/stream_cgribex.c +++ b/src/stream_cgribex.c @@ -187,11 +187,11 @@ void cgribexGetGrid(stream_t *streamptr, int *isec2, int *isec4, grid_t *grid, i { bool recompinc = true; - if ( ISEC2_LastLon < ISEC2_FirstLon && ISEC2_LastLon < 0 ) ISEC2_LastLon += 360000; + if ( ISEC2_LastLon < ISEC2_FirstLon ) ISEC2_LastLon += 360000; if ( ijDirectionIncrementGiven && ISEC2_LonIncr > 0 ) { - if ( abs(ISEC2_LastLon - (ISEC2_FirstLon+ISEC2_LonIncr*(grid->x.size-1))) <= 2 ) + if ( labs(ISEC2_LastLon - (ISEC2_FirstLon+ISEC2_LonIncr*((long)grid->x.size-1))) <= 2 ) { recompinc = false; grid->x.inc = ISEC2_LonIncr * 0.001; @@ -224,7 +224,7 @@ void cgribexGetGrid(stream_t *streamptr, int *isec2, int *isec4, grid_t *grid, i bool recompinc = true; if ( ijDirectionIncrementGiven && ISEC2_LatIncr > 0 ) { - if ( abs(ISEC2_LastLat - (ISEC2_FirstLat+ISEC2_LatIncr*(grid->y.size-1))) <= 2 ) + if ( labs(ISEC2_LastLat - (ISEC2_FirstLat+ISEC2_LatIncr*((long)grid->y.size-1))) <= 2 ) { recompinc = false; grid->y.inc = ISEC2_LatIncr * 0.001; @@ -451,9 +451,17 @@ void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, d if ( ISEC1_LocalFLag ) { if ( ISEC1_CenterID == 78 && isec1[36] == 253 ) // DWD local extension - varDefEnsembleInfo(varID, isec1[54], isec1[53], isec1[52]); + { + varDefKeyInt(varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, isec1[52]); + varDefKeyInt(varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, isec1[53]); + varDefKeyInt(varID, CDI_KEY_PERTURBATIONNUMBER, isec1[54]); + } else if ( ISEC1_CenterID == 252 && isec1[36] == 1 ) // MPIM local extension - varDefEnsembleInfo(varID, isec1[38], isec1[39], isec1[37]); + { + varDefKeyInt(varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, isec1[37]); + varDefKeyInt(varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, isec1[39]); + varDefKeyInt(varID, CDI_KEY_PERTURBATIONNUMBER, isec1[38]); + } } if ( lmv ) varDefMissval(varID, FSEC3_MissVal); @@ -2054,8 +2062,6 @@ void cgribexDefaultSec4(int *isec4) static void cgribexDefEnsembleVar(int *isec1, int vlistID, int varID) { - int ensID, ensCount, forecast_type; - /* For Ensemble info */ //Put1Byte(isec1[36]); /* MPIM local GRIB use definition identifier */ @@ -2064,16 +2070,21 @@ void cgribexDefEnsembleVar(int *isec1, int vlistID, int varID) //Put2Byte(isec1[38]); /* individual ensemble member */ //Put2Byte(isec1[39]); /* number of forecasts in ensemble */ - if ( vlistInqVarEnsemble(vlistID, varID, &ensID, &ensCount, &forecast_type) ) + int perturbationNumber, numberOfForecastsInEnsemble, typeOfEnsembleForecast; + int r1 = cdiInqKeyInt(vlistID, varID, CDI_KEY_PERTURBATIONNUMBER, &perturbationNumber); + int r2 = cdiInqKeyInt(vlistID, varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, &numberOfForecastsInEnsemble); + int r3 = cdiInqKeyInt(vlistID, varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, &typeOfEnsembleForecast); + + if ( r1 == 0 && r2 == 0 && r3 == 0 ) { if ( ISEC1_CenterID == 252 ) { ISEC1_LocalFLag = 1; isec1[36] = 1; - isec1[37] = forecast_type; - isec1[38] = ensID; - isec1[39] = ensCount; + isec1[37] = typeOfEnsembleForecast; + isec1[38] = perturbationNumber; + isec1[39] = numberOfForecastsInEnsemble; } } } diff --git a/src/stream_gribapi.c b/src/stream_gribapi.c index 0b15f5b30f84bc14c27bb581fc1dfdbf3197f8bb..dbf8860b10f8dffc8a1920aa8544e3c775abbac0 100644 --- a/src/stream_gribapi.c +++ b/src/stream_gribapi.c @@ -2,7 +2,7 @@ #include "config.h" #endif -#ifdef HAVE_LIBGRIB_API +#ifdef HAVE_LIBGRIB_API #include "dmemory.h" #include "cdi.h" #include "cdi_int.h" @@ -33,6 +33,7 @@ typedef struct { int level2; int ltype; int tsteptype; + size_t gridsize; #ifdef HIRLAM_EXTENSIONS // NOTE: tsteptype MUST be part of attributes used to compare variables! // Modern NWP models (HARMONIE, HIRLAM) use timeRangeIndicator to specify @@ -401,14 +402,62 @@ void gribapiGetString(grib_handle *gh, const char *key, char *string, size_t len } static -void gribapiAddRecord(stream_t * streamptr, int param, grib_handle *gh, +void gribapiGetKeys(grib_handle *gh, int varID) +{ + long tablesVersion = 0; + if ( grib_get_long(gh, "tablesVersion", &tablesVersion) == 0 ) + varDefKeyInt(varID, CDI_KEY_TABLESVERSION, (int) tablesVersion); + + long localTablesVersion = 0; + if ( grib_get_long(gh, "localTablesVersion", &localTablesVersion) == 0 ) + varDefKeyInt(varID, CDI_KEY_LOCALTABLESVERSION, (int) localTablesVersion); + + long typeOfGeneratingProcess = 0; + if ( grib_get_long(gh, "typeOfGeneratingProcess", &typeOfGeneratingProcess) == 0 ) + varDefKeyInt(varID, CDI_KEY_TYPEOFGENERATINGPROCESS, (int) typeOfGeneratingProcess); + + long productDefinitionTemplate = 0; + if ( grib_get_long(gh, "productDefinitionTemplateNumber", &productDefinitionTemplate) == 0 ) + varDefKeyInt(varID, CDI_KEY_PRODUCTDEFINITIONTEMPLATE, (int) productDefinitionTemplate); + + long typeOfProcessedData = 0; + if ( grib_get_long(gh, "typeOfProcessedData", &typeOfProcessedData) == 0 ) + varDefKeyInt(varID, CDI_KEY_TYPEOFPROCESSEDDATA, (int) typeOfProcessedData); + + long shapeOfTheEarth = 0; + if ( grib_get_long(gh, "shapeOfTheEarth", &shapeOfTheEarth) == 0 ) + varDefKeyInt(varID, CDI_KEY_SHAPEOFTHEEARTH, (int) shapeOfTheEarth); + + long backgroundProcess = 0; + if ( grib_get_long(gh, "backgroundProcess", &backgroundProcess) == 0 ) + varDefKeyInt(varID, CDI_KEY_BACKGROUNDPROCESS, (int) backgroundProcess); + + /* + Get the ensemble Info from the grib-2 Tables and update the intermediate datastructure. + Further update to the "vlist" is handled in the same way as for GRIB-1 by "cdi_generate_vars" + */ + long typeOfEnsembleForecast = 0; + if ( grib_get_long(gh, "typeOfEnsembleForecast", &typeOfEnsembleForecast) == 0 ) + { + long perturbationNumber = 0, numberOfForecastsInEnsemble = 0; + GRIB_CHECK(grib_get_long(gh, "numberOfForecastsInEnsemble", &numberOfForecastsInEnsemble), 0); + GRIB_CHECK(grib_get_long(gh, "perturbationNumber", &perturbationNumber), 0); + if ( perturbationNumber > 0 ) + { + varDefKeyInt(varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, (int) typeOfEnsembleForecast); + varDefKeyInt(varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, (int) numberOfForecastsInEnsemble); + varDefKeyInt(varID, CDI_KEY_PERTURBATIONNUMBER, (int) perturbationNumber); + } + } +} + +static +void gribapiAddRecord(stream_t *streamptr, int param, grib_handle *gh, size_t recsize, off_t position, int datatype, int comptype, const char *varname, int leveltype1, int leveltype2, int lbounds, int level1, int level2, int level_sf, int level_unit, const var_tile_t *tiles, int lread_additional_keys) { - int levelID = 0; char stdname[CDI_MAX_NAME], longname[CDI_MAX_NAME], units[CDI_MAX_NAME]; - long ens_index = 0, ens_count = 0, ens_forecast_type = 0; int vlistID = streamptr->vlistID; int tsID = streamptr->curTsID; @@ -428,6 +477,7 @@ void gribapiAddRecord(stream_t * streamptr, int param, grib_handle *gh, record->ilevel2 = level2; record->ltype = leveltype1; record->tsteptype = (short)tsteptype; + record->gridsize = gribapiGetGridsize(gh); record->tiles = tiles ? *tiles : dummy_tiles; //FIXME: This may leave the variable name unterminated (which is the behavior that I found in the code). @@ -551,6 +601,7 @@ void gribapiAddRecord(stream_t * streamptr, int param, grib_handle *gh, // fprintf(stderr, "param %d name %s %s %s\n", param, name, longname, units); /* add the previously read record data to the (intermediate) list of records */ + int levelID = 0; int tile_index = 0, varID; varAddRecord(recID, param, gridID, zaxistype, lbounds, level1, level2, level_sf, level_unit, datatype, &varID, &levelID, tsteptype, numavg, leveltype1, leveltype2, @@ -561,39 +612,21 @@ void gribapiAddRecord(stream_t * streamptr, int param, grib_handle *gh, varDefCompType(varID, comptype); - /* - Get the ensemble Info from the grib-2 Tables and update the intermediate datastructure. - Further update to the "vlist" is handled in the same way as for GRIB-1 by "cdi_generate_vars" - */ - if ( grib_get_long(gh, "typeOfEnsembleForecast", &ens_forecast_type) == 0 ) - { - GRIB_CHECK(grib_get_long(gh, "numberOfForecastsInEnsemble", &ens_count ), 0); - GRIB_CHECK(grib_get_long(gh, "perturbationNumber", &ens_index ), 0); - } - - if ( ens_index > 0 ) - varDefEnsembleInfo(varID, (int)ens_index, (int)ens_count, (int)ens_forecast_type); - - long typeOfGeneratingProcess = 0; - if ( grib_get_long(gh, "typeOfGeneratingProcess", &typeOfGeneratingProcess) == 0 ) - varDefTypeOfGeneratingProcess(varID, (int) typeOfGeneratingProcess); - - long productDefinitionTemplate = 0; - if ( grib_get_long(gh, "productDefinitionTemplateNumber", &productDefinitionTemplate) == 0 ) - varDefProductDefinitionTemplate(varID, (int) productDefinitionTemplate); - - long lval; - double dval; + gribapiGetKeys(gh, varID); if (lread_additional_keys) - for ( int i = 0; i < cdiNAdditionalGRIBKeys; i++ ) - { - /* note: if the key is not defined, we do not throw an error! */ - if ( grib_get_long(gh, cdiAdditionalGRIBKeys[i], &lval) == 0 ) - varDefOptGribInt(varID, tile_index, lval, cdiAdditionalGRIBKeys[i]); - if ( grib_get_double(gh, cdiAdditionalGRIBKeys[i], &dval) == 0 ) - varDefOptGribDbl(varID, tile_index, dval, cdiAdditionalGRIBKeys[i]); - } + { + long lval; + double dval; + for ( int i = 0; i < cdiNAdditionalGRIBKeys; i++ ) + { + /* note: if the key is not defined, we do not throw an error! */ + if ( grib_get_long(gh, cdiAdditionalGRIBKeys[i], &lval) == 0 ) + varDefOptGribInt(varID, tile_index, lval, cdiAdditionalGRIBKeys[i]); + if ( grib_get_double(gh, cdiAdditionalGRIBKeys[i], &dval) == 0 ) + varDefOptGribDbl(varID, tile_index, dval, cdiAdditionalGRIBKeys[i]); + } + } if ( varInqInst(varID) == CDI_UNDEFID ) { @@ -642,10 +675,12 @@ void gribapiAddRecord(stream_t * streamptr, int param, grib_handle *gh, varID, param, zaxistype, gridID, levelID); } -static compvar2_t gribapiVarSet(int param, int level1, int level2, int leveltype, - int tsteptype, char *name, var_tile_t tiles_data) +static +compvar2_t gribapiVarSet(int param, int level1, int level2, int leveltype, int tsteptype, + size_t gridsize, char *name, var_tile_t tiles_data) { compvar2_t compVar; + memset(&compVar, 0, sizeof(compvar2_t)); size_t maxlen = sizeof(compVar.name); size_t len = strlen(name); if ( len > maxlen ) len = maxlen; @@ -655,7 +690,8 @@ static compvar2_t gribapiVarSet(int param, int level1, int level2, int leveltype compVar.level2 = level2; compVar.ltype = leveltype; compVar.tsteptype = tsteptype; - memset(compVar.name, 0, maxlen); + compVar.gridsize = gridsize; + //memset(compVar.name, 0, maxlen); memcpy(compVar.name, name, len); compVar.tiles = tiles_data; @@ -666,11 +702,13 @@ static int gribapiVarCompare(compvar2_t compVar, record_t record, int flag) { compvar2_t compVar0; + memset(&compVar0, 0, sizeof(compvar2_t)); compVar0.param = record.param; compVar0.level1 = record.ilevel; compVar0.level2 = record.ilevel2; compVar0.ltype = record.ltype; compVar0.tsteptype = record.tsteptype; + compVar0.gridsize = record.gridsize; memcpy(compVar0.name, record.varname, sizeof(compVar.name)); if ( flag == 0 ) @@ -847,13 +885,10 @@ int gribapiScanTimestep1(stream_t * streamptr) int vdate = 0, vtime = 0; gribapiGetValidityDateTime(gh, &vdate, &vtime); DateTime datetime = { .date = vdate, .time = vtime }; - /* - printf("%d %d %d\n", vdate, vtime, leveltype1); - */ if ( datetime0.date == 10101 && datetime0.time == 0 ) { - if( datetimeCmp(datetime, datetime0) || !nrecs ) //Do we really need this condition? I have included it in order not to change the number of times gribapiGetDataDateTime() etc. get called. But if those are sideeffect-free, this condition should be removed. + if ( datetimeCmp(datetime, datetime0) || !nrecs ) //Do we really need this condition? I have included it in order not to change the number of times gribapiGetDataDateTime() etc. get called. But if those are sideeffect-free, this condition should be removed. { datetime0 = datetime; @@ -866,7 +901,9 @@ int gribapiScanTimestep1(stream_t * streamptr) if ( nrecs ) { - checkTimeResult result = checkTime(streamptr, gribapiVarSet(param, level1, level2, leveltype1, tsteptype, varname, tiles), &datetime, &datetime0); + size_t gridsize = gribapiGetGridsize(gh); + checkTimeResult result = checkTime(streamptr, gribapiVarSet(param, level1, level2, leveltype1, tsteptype, gridsize, varname, tiles), + &datetime, &datetime0); if ( result == CHECKTIME_STOP ) { break; @@ -1107,7 +1144,8 @@ int gribapiScanTimestep2(stream_t * streamptr) .time = vtime }; - compvar2_t compVar = gribapiVarSet(param, level1, level2, leveltype1, tsteptype, varname, tiles); + size_t gridsize = gribapiGetGridsize(gh); + compvar2_t compVar = gribapiVarSet(param, level1, level2, leveltype1, tsteptype, gridsize, varname, tiles); for ( recID = 0; recID < nrecords; recID++ ) if ( gribapiVarCompare(compVar, streamptr->tsteps[tsID].records[recID], 0) == 0 ) break; @@ -1337,7 +1375,8 @@ int gribapiScanTimestep(stream_t * streamptr) int tsteptype = gribapiGetTsteptype(gh); - compvar2_t compVar = gribapiVarSet(param, level1, level2, leveltype1, tsteptype, varname, tiles); + size_t gridsize = gribapiGetGridsize(gh); + compvar2_t compVar = gribapiVarSet(param, level1, level2, leveltype1, tsteptype, gridsize, varname, tiles); for ( vrecID = 0; vrecID < nrecs; vrecID++ ) { @@ -1685,7 +1724,7 @@ int gribapiDefSteptype(int editionNumber, grib_handle *gh, int productDefinition long proDefTempNum = 0; const char *stepType; - if (tsteptype >= TSTEP_INSTANT && tsteptype <= TSTEP_RATIO) + if ( tsteptype >= TSTEP_INSTANT && tsteptype <= TSTEP_RATIO ) { stepType = cdiGribAPI_ts_str_map[tsteptype].sname; proDefTempNum = cdiGribAPI_ts_str_map[tsteptype].productionTemplate; @@ -1852,9 +1891,8 @@ getGribApiCompTypeMsg(int comptype, size_t gridsize) return (struct gribApiMsg){ .msgLen = len, .msg = mesg }; } - static -void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype, bool lieee, int datatype, size_t nmiss, int gcinit) +void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype, bool lieee, int datatype, size_t nmiss, int gcinit, int shapeOfTheEarth) { UNUSED(nmiss); bool lrotated = false; @@ -1863,10 +1901,6 @@ void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype int gridtype = gridInqType(gridID); size_t gridsize = gridInqSize(gridID); - if ( editionNumber <= 1 ) - if ( gridtype == GRID_GME || gridtype == GRID_UNSTRUCTURED ) - gridtype = -1; - if ( gridtype == GRID_GENERIC ) { int xsize = (int) gridInqXsize(gridID); @@ -1941,7 +1975,11 @@ void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype if ( gcinit ) return; - if ( editionNumber == 2 ) GRIB_CHECK(my_grib_set_long(gh, "numberOfValues", (long)gridsize), 0); + if ( editionNumber == 2 ) + { + GRIB_CHECK(my_grib_set_long(gh, "numberOfValues", (long)gridsize), 0); + GRIB_CHECK(my_grib_set_long(gh, "shapeOfTheEarth", (long)shapeOfTheEarth), 0); + } switch (gridtype) { @@ -2021,9 +2059,14 @@ void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype yinc = fabs(gridInqYinc(gridID)); } + double xfirsto = xfirst; + double xlasto = xlast; + while ( xfirsto > 360 ) xfirsto -= 360; + while ( xlasto > 360 ) xlasto -= 360; + if ( gridtype != GRID_GAUSSIAN_REDUCED ) GRIB_CHECK(my_grib_set_long(gh, "Ni", nlon), 0); - GRIB_CHECK(my_grib_set_double(gh, "longitudeOfFirstGridPointInDegrees", xfirst), 0); - GRIB_CHECK(my_grib_set_double(gh, "longitudeOfLastGridPointInDegrees", xlast), 0); + GRIB_CHECK(my_grib_set_double(gh, "longitudeOfFirstGridPointInDegrees", xfirsto), 0); + GRIB_CHECK(my_grib_set_double(gh, "longitudeOfLastGridPointInDegrees", xlasto), 0); GRIB_CHECK(my_grib_set_double(gh, "iDirectionIncrementInDegrees", xinc), 0); GRIB_CHECK(my_grib_set_long(gh, "Nj", (long)nlat), 0); @@ -2175,6 +2218,8 @@ void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype } case GRID_GME: { + if ( editionNumber <= 1 ) Error("GME grid can't be stored in GRIB edition %d!", editionNumber); + GRIB_CHECK(my_grib_set_long(gh, "gridDefinitionTemplateNumber", GRIB2_GTYPE_GME), 0); int nd = 0, ni = 0, ni2 = 0, ni3 = 0; @@ -2200,6 +2245,8 @@ void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype } case GRID_UNSTRUCTURED: { + if ( editionNumber <= 1 ) Error("Unstructured grid can't be stored in GRIB edition %d!", editionNumber); + static bool warning = true; int status = my_grib_set_long(gh, "gridDefinitionTemplateNumber", GRIB2_GTYPE_UNSTRUCTURED); @@ -2320,18 +2367,13 @@ void gribapiDefLevel(int editionNumber, grib_handle *gh, int zaxisID, int levelI long ltype2 = zaxisInqLtype2(zaxisID); double level = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1; - double dlevel1 = 0, dlevel2 = 0; + double dlevel1 = level, dlevel2 = 0; if ( zaxisInqLbounds(zaxisID, NULL) && zaxisInqUbounds(zaxisID, NULL) ) { lbounds = true; dlevel1 = zaxisInqLbound(zaxisID, levelID); dlevel2 = zaxisInqUbound(zaxisID, levelID); } - else - { - dlevel1 = level; - dlevel2 = 0; - } if ( zaxistype == ZAXIS_GENERIC && ltype == 0 ) { @@ -2342,6 +2384,7 @@ void gribapiDefLevel(int editionNumber, grib_handle *gh, int zaxisID, int levelI } long grib_ltype = (editionNumber <= 1) ? zaxisTypeToGrib1ltype(zaxistype) : zaxisTypeToGrib2ltype(zaxistype); + long grib_ltype2 = (ltype != ltype2) ? ltype2 : grib_ltype; switch (zaxistype) { @@ -2405,7 +2448,7 @@ void gribapiDefLevel(int editionNumber, grib_handle *gh, int zaxisID, int levelI if ( editionNumber <= 1 ) grib1DefLevel(gh, gcinit, grib_ltype, lbounds, level, dlevel1, dlevel2); else - grib2DefLevel(gh, gcinit, grib_ltype, grib_ltype, lbounds, level, dlevel1, dlevel2); + grib2DefLevel(gh, gcinit, grib_ltype, grib_ltype2, lbounds, level, dlevel1, dlevel2); break; } @@ -2989,8 +3032,10 @@ size_t gribapiEncode(int varID, int levelID, int vlistID, int gridID, int zaxisI int param = vlistInqVarParam(vlistID, varID); int datatype = vlistInqVarDatatype(vlistID, varID); - int typeOfGeneratingProcess = vlistInqVarTypeOfGeneratingProcess(vlistID, varID); - int productDefinitionTemplate = vlistInqVarProductDefinitionTemplate(vlistID, varID); + int typeOfGeneratingProcess = 0; + cdiInqKeyInt(vlistID, varID, CDI_KEY_TYPEOFGENERATINGPROCESS, &typeOfGeneratingProcess); + int productDefinitionTemplate = 0; + cdiInqKeyInt(vlistID, varID, CDI_KEY_PRODUCTDEFINITIONTEMPLATE, &productDefinitionTemplate); char name[256]; char stdname[256]; @@ -3009,22 +3054,36 @@ size_t gribapiEncode(int varID, int levelID, int vlistID, int gridID, int zaxisI if ( editionNumber == 2 ) { - if ( typeOfGeneratingProcess == -1 ) typeOfGeneratingProcess = 0; - if ( ! gc->init ) GRIB_CHECK(my_grib_set_long(gh, "typeOfGeneratingProcess", typeOfGeneratingProcess), 0); - } - - /* - if( vlistInqVarEnsemble( vlistID, varID, &ensID, &ensCount, &forecast_type ) ) - { - GRIB_CHECK(my_grib_set_long(gh, "typeOfEnsembleForecast", forecast_type ), 0); - GRIB_CHECK(my_grib_set_long(gh, "numberOfForecastsInEnsemble", ensCount ), 0); - GRIB_CHECK(my_grib_set_long(gh, "perturbationNumber", ensID ), 0); + if ( ! gc->init ) + { + int backgroundProcess = 0; + cdiInqKeyInt(vlistID, varID, CDI_KEY_BACKGROUNDPROCESS, &backgroundProcess); + GRIB_CHECK(my_grib_set_long(gh, "typeOfGeneratingProcess", typeOfGeneratingProcess), 0); + GRIB_CHECK(my_grib_set_long(gh, "backgroundProcess", backgroundProcess), 0); + int status, tablesVersion, localTablesVersion; + status = cdiInqKeyInt(vlistID, varID, CDI_KEY_TABLESVERSION, &tablesVersion); + if ( status == 0 ) GRIB_CHECK(my_grib_set_long(gh, "tablesVersion", (long)tablesVersion), 0); + status = cdiInqKeyInt(vlistID, varID, CDI_KEY_LOCALTABLESVERSION, &localTablesVersion); + if ( status == 0 ) GRIB_CHECK(my_grib_set_long(gh, "localTablesVersion", (long)localTablesVersion), 0); + int typeOfProcessedData = 0; + status = cdiInqKeyInt(vlistID, varID, CDI_KEY_TYPEOFPROCESSEDDATA, &typeOfProcessedData); + if ( status == 0 ) GRIB_CHECK(my_grib_set_long(gh, "typeOfProcessedData", (long)typeOfProcessedData), 0); + } } - */ gribapiDefTime((int)editionNumber, productDefinitionTemplate, typeOfGeneratingProcess, gh, vdate, vtime, tsteptype, numavg, vlistInqTaxis(vlistID), gc->init); + { + int status, perturbationNumber, numberOfForecastsInEnsemble, typeOfEnsembleForecast; + status = cdiInqKeyInt(vlistID, varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, &typeOfEnsembleForecast); + if ( status == 0 ) grib_set_long(gh, "typeOfEnsembleForecast", typeOfEnsembleForecast); + status = cdiInqKeyInt(vlistID, varID, CDI_KEY_NUMBEROFFORECASTSINENSEMBLE, &numberOfForecastsInEnsemble); + if ( status == 0 ) grib_set_long(gh, "numberOfForecastsInEnsemble", numberOfForecastsInEnsemble); + status = cdiInqKeyInt(vlistID, varID, CDI_KEY_PERTURBATIONNUMBER, &perturbationNumber); + if ( status == 0 ) grib_set_long(gh, "perturbationNumber", perturbationNumber); + } + if ( ! gc->init ) gribapiDefInstitut(gh, vlistID, varID); if ( ! gc->init ) gribapiDefModel(gh, vlistID, varID); @@ -3039,7 +3098,9 @@ size_t gribapiEncode(int varID, int levelID, int vlistID, int gridID, int zaxisI GRIB_CHECK(my_grib_set_long(gh, "bitsPerValue", bitsPerValue), 0); } - gribapiDefGrid((int)editionNumber, gh, gridID, comptype, lieee, datatype, nmiss, gc->init); + int shapeOfTheEarth = 0; + cdiInqKeyInt(vlistID, varID, CDI_KEY_SHAPEOFTHEEARTH, &shapeOfTheEarth); + gribapiDefGrid((int)editionNumber, gh, gridID, comptype, lieee, datatype, nmiss, gc->init, shapeOfTheEarth); gribapiDefLevel((int)editionNumber, gh, zaxisID, levelID, gc->init, productDefinitionTemplate); @@ -3100,6 +3161,19 @@ size_t gribapiEncode(int varID, int levelID, int vlistID, int gridID, int zaxisI *gribbuffersize = recsize; *gribbuffer = Malloc(*gribbuffersize); + if ( ! gc->init ) + { + char cdi_name[CDI_MAX_NAME]; cdi_name[0] = 0; + char grb_name[256]; grb_name[0] = 0; + vlistInqVarName(vlistID, varID, cdi_name); + gribapiGetString(gh, "shortName", grb_name, sizeof(grb_name)); + str_tolower(cdi_name); + str_tolower(grb_name); + if ( (strlen(cdi_name) != strlen(grb_name)) || !str_is_equal(cdi_name, grb_name) ) + Message("*** GRIB2 shortName does not correspond to chosen variable name: \"%s\" (\"%s\").", + grb_name[0]?grb_name:"unknown", cdi_name); + } + /* get a copy of the coded message */ GRIB_CHECK(grib_get_message_copy(gh, *gribbuffer, &recsize), 0); diff --git a/src/stream_record.c b/src/stream_record.c index cccd20cfff6bf9de7d130c64ff1dad84e8133c61..33ea8ee417e6cc18bb3f95cfa0f2c7b688aecc19 100644 --- a/src/stream_record.c +++ b/src/stream_record.c @@ -20,13 +20,15 @@ void recordInitEntry(record_t *record) { - record->position = CDI_UNDEFID; - record->size = 0; - record->param = 0; - record->ilevel = CDI_UNDEFID; - record->used = false; - record->varID = CDI_UNDEFID; - record->levelID = CDI_UNDEFID; + record->position = CDI_UNDEFID; + record->size = 0; + record->gridsize = 0; + record->param = 0; + record->ilevel = CDI_UNDEFID; + record->used = false; + record->tsteptype = CDI_UNDEFID; + record->varID = CDI_UNDEFID; + record->levelID = CDI_UNDEFID; memset(record->varname, 0, sizeof(record->varname)); memset(&record->tiles, 0, sizeof(record->tiles)); } diff --git a/src/subtype.c b/src/subtype.c index 9c149018b23f86dde44454ea912118781fdfdce3..b8af7ce4328b17e9ffb2dd742d852f86d45bdc81 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -571,6 +571,7 @@ subtype_query_t matchAND(subtype_query_t q1, subtype_query_t q2) { if ((q1.nAND + q2.nAND) > MAX_KV_PAIRS_MATCH) Error("Internal error"); subtype_query_t result; + memset(&result, 0, sizeof(subtype_query_t)); result.nAND = q1.nAND; for (int i=0; i<q1.nAND; i++) { diff --git a/src/util.c b/src/util.c index 52fb248cfd20a7d47627117ac4db35428809541b..8e7fb2a796b949d95305ae8f046f7497c9cf5dc6 100644 --- a/src/util.c +++ b/src/util.c @@ -137,10 +137,51 @@ void cdiCreateUUID(unsigned char *uuid) setstate(caller_rand_state); } #elif defined (HAVE_DECL_UUID_CREATE) && defined (HAVE_UUID_H) +# ifdef HAVE_DECL_UUID_MAKE_V5 +# include <uuid.h> +void cdiCreateUUID(unsigned char *uuid) +{ + static const char error_stage[][16] + = { "uuid_create", "uuid_create", "uuid_load", "uuid_make", "uuid_export", + "uuid_destroy1", "uuid_destroy2" }; + uuid_t *objuuid, *nsuuid; + int stage = 0; + uuid_rc_t status; + if ((status = uuid_create(&objuuid)) == UUID_RC_OK) + { + ++stage; + if ((status = uuid_create(&nsuuid)) == UUID_RC_OK) + { + ++stage; + if ((status = uuid_load(nsuuid, "ns:OID")) == UUID_RC_OK) + { + ++stage; + if ((status = uuid_make(objuuid, UUID_MAKE_V5, + nsuuid, cdiLibraryVersion())) + == UUID_RC_OK) + { + ++stage; + size_t datalen = CDI_UUID_SIZE; + status = uuid_export(objuuid, UUID_FMT_BIN, &uuid, + &datalen); + } + } + } + } + if (status != UUID_RC_OK) + Error("failed to generate UUID at stage %s\n", error_stage[stage]); + stage = 5; + if ((status = uuid_destroy(nsuuid)) != UUID_RC_OK) + Error("failed to generate UUID at stage %s\n", error_stage[stage]); + ++stage; + if ((status = uuid_destroy(objuuid)) != UUID_RC_OK) + Error("failed to generate UUID at stage %s\n", error_stage[stage]); +} +# else typedef uint8_t u_int8_t; typedef uint16_t u_int16_t; typedef uint32_t u_int32_t; -#include <uuid.h> +# include <uuid.h> void cdiCreateUUID(unsigned char *uuid) { uint32_t status; @@ -151,6 +192,7 @@ void cdiCreateUUID(unsigned char *uuid) exit(1); } } +# endif #else #include <sys/time.h> void cdiCreateUUID(unsigned char *uuid) diff --git a/src/varscan.c b/src/varscan.c index 130cde263f9fc97c176507f7eddd686b6599e9ac..2a3752512103e93092c3c5af078b69d380e5a984 100644 --- a/src/varscan.c +++ b/src/varscan.c @@ -49,7 +49,6 @@ typedef struct int param; int prec; int tsteptype; - int timaccu; int gridID; int zaxistype; int ltype1; /* GRIB first level type */ @@ -75,13 +74,18 @@ typedef struct char *stdname; char *longname; char *units; - ensinfo_t *ensdata; - int typeOfGeneratingProcess; - int productDefinitionTemplate; /* meta-data for specification of tiles (currently only GRIB-API: */ subtype_t *tiles; + size_t nikeys; + struct ikeyvalue_t + { + int key; + int value; + } ikeyvalue_t; + struct ikeyvalue_t ikeyvalues[MAX_KEYS]; + int opt_grib_nentries; /* current no. key-value pairs */ int opt_grib_kvpair_size; /* current allocated size */ opt_key_val_pair_t *opt_grib_kvpair; /* (optional) list of keyword/value pairs */ @@ -101,7 +105,6 @@ void paramInitEntry(unsigned varID, int param) vartable[varID].prec = 0; vartable[varID].tsteptype = TSTEP_INSTANT; vartable[varID].timave = 0; - vartable[varID].timaccu = 0; vartable[varID].gridID = CDI_UNDEFID; vartable[varID].zaxistype = 0; vartable[varID].ltype1 = 0; @@ -115,8 +118,8 @@ void paramInitEntry(unsigned varID, int param) vartable[varID].instID = CDI_UNDEFID; vartable[varID].modelID = CDI_UNDEFID; vartable[varID].tableID = CDI_UNDEFID; - vartable[varID].typeOfGeneratingProcess = CDI_UNDEFID; - vartable[varID].productDefinitionTemplate = CDI_UNDEFID; + vartable[varID].nikeys = 0; + for ( int i = 0; i < MAX_KEYS; ++i ) vartable[varID].ikeyvalues[i].value = 0; vartable[varID].comptype = CDI_COMPRESS_NONE; vartable[varID].complevel = 1; vartable[varID].lmissval = false; @@ -125,14 +128,13 @@ void paramInitEntry(unsigned varID, int param) vartable[varID].stdname = NULL; vartable[varID].longname = NULL; vartable[varID].units = NULL; - vartable[varID].ensdata = NULL; vartable[varID].tiles = NULL; } /* Test if a variable specified by the given meta-data has already * been registered in "vartable". */ static unsigned -varGetEntry(int param, int zaxistype, int ltype1, int tsteptype, const char *name, const var_tile_t *tiles) +varGetEntry(int param, int gridID, int zaxistype, int ltype1, int tsteptype, const char *name, const var_tile_t *tiles) { for ( unsigned varID = 0; varID < varTablesize; varID++ ) { @@ -149,6 +151,7 @@ varGetEntry(int param, int zaxistype, int ltype1, int tsteptype, const char *nam if ( (vartable[varID].zaxistype == zaxistype) && (vartable[varID].ltype1 == ltype1 ) && (vartable[varID].tsteptype == tsteptype) && + (vartable[varID].gridID == gridID ) && (vt_no_of_tiles == no_of_tiles) ) { if ( name && name[0] && vartable[varID].name && vartable[varID].name[0] ) @@ -184,7 +187,6 @@ void varFree(void) if ( vartable[varID].stdname ) Free(vartable[varID].stdname); if ( vartable[varID].longname ) Free(vartable[varID].longname); if ( vartable[varID].units ) Free(vartable[varID].units); - if ( vartable[varID].ensdata ) Free(vartable[varID].ensdata); if ( vartable[varID].tiles ) subtypeDestroyPtr(vartable[varID].tiles); if ( vartable[varID].opt_grib_kvpair ) @@ -429,7 +431,7 @@ void varAddRecord(int recID, int param, int gridID, int zaxistype, int lbounds, const var_tile_t *tiles, int *tile_index) { unsigned varID = (cdiSplitLtype105 != 1 || zaxistype != ZAXIS_HEIGHT) ? - varGetEntry(param, zaxistype, ltype1, tsteptype, name, tiles) : (unsigned) CDI_UNDEFID; + varGetEntry(param, gridID, zaxistype, ltype1, tsteptype, name, tiles) : (unsigned) CDI_UNDEFID; if ( varID == (unsigned) CDI_UNDEFID ) { @@ -576,6 +578,13 @@ int cmp_varname(const void *s1, const void *s2) } +void varCopyKeys(int vlistID, int varID) +{ + for ( int i = 0; i < vartable[varID].nikeys; ++i ) + cdiDefKeyInt(vlistID, varID, vartable[varID].ikeyvalues[i].key, vartable[varID].ikeyvalues[i].value); +} + + void cdi_generate_vars(stream_t *streamptr) { int vlistID = streamptr->vlistID; @@ -624,7 +633,6 @@ void cdi_generate_vars(stream_t *streamptr) int tableID = vartable[varid].tableID; int tsteptype = vartable[varid].tsteptype; int timave = vartable[varid].timave; - int timaccu = vartable[varid].timaccu; int comptype = vartable[varid].comptype; double level_sf = 1; @@ -763,14 +771,9 @@ void cdi_generate_vars(stream_t *streamptr) vlistDefVarParam(vlistID, varID, param); vlistDefVarDatatype(vlistID, varID, prec); vlistDefVarTimave(vlistID, varID, timave); - vlistDefVarTimaccu(vlistID, varID, timaccu); vlistDefVarCompType(vlistID, varID, comptype); - if ( vartable[varid].typeOfGeneratingProcess != CDI_UNDEFID ) - vlistDefVarTypeOfGeneratingProcess(vlistID, varID, vartable[varid].typeOfGeneratingProcess); - - if ( vartable[varid].productDefinitionTemplate != CDI_UNDEFID ) - vlistDefVarProductDefinitionTemplate(vlistID, varID, vartable[varid].productDefinitionTemplate); + varCopyKeys(vlistID, varID); if ( vartable[varid].lmissval ) vlistDefVarMissval(vlistID, varID, vartable[varid].missval); if ( vartable[varid].name ) vlistDefVarName(vlistID, varID, vartable[varid].name); @@ -778,10 +781,6 @@ void cdi_generate_vars(stream_t *streamptr) if ( vartable[varid].longname ) vlistDefVarLongname(vlistID, varID, vartable[varid].longname); if ( vartable[varid].units ) vlistDefVarUnits(vlistID, varID, vartable[varid].units); - if ( vartable[varid].ensdata ) vlistDefVarEnsemble(vlistID, varID, vartable[varid].ensdata->ens_index, - vartable[varid].ensdata->ens_count, - vartable[varid].ensdata->forecast_init_type); - vlist_t *vlistptr = vlist_to_pointer(vlistID); for ( int i = 0; i < vartable[varid].opt_grib_nentries; i++ ) { @@ -1091,28 +1090,17 @@ void varDefTable(int varID, int tableID) } -void varDefEnsembleInfo(int varID, int ens_idx, int ens_count, int forecast_type) +void varDefKeyInt(int varID, int key, int value) { - if ( vartable[varID].ensdata == NULL ) - vartable[varID].ensdata = (ensinfo_t *) Malloc( sizeof( ensinfo_t ) ); - - vartable[varID].ensdata->ens_index = ens_idx; - vartable[varID].ensdata->ens_count = ens_count; - vartable[varID].ensdata->forecast_init_type = forecast_type; -} - - -void varDefTypeOfGeneratingProcess(int varID, int typeOfGeneratingProcess) -{ - vartable[varID].typeOfGeneratingProcess = typeOfGeneratingProcess; + if ( vartable[varID].nikeys < MAX_KEYS ) + { + vartable[varID].ikeyvalues[vartable[varID].nikeys].key = key; + vartable[varID].ikeyvalues[vartable[varID].nikeys].value = value; + vartable[varID].nikeys++; + } } -void varDefProductDefinitionTemplate(int varID, int productDefinitionTemplate) -{ - vartable[varID].productDefinitionTemplate = productDefinitionTemplate; -} - #if defined (HAVE_LIBGRIB_API) /* Resizes and initializes opt_grib_kvpair data structure. */ static diff --git a/src/varscan.h b/src/varscan.h index 68cfbdabf4a90b27e2dd7ad557f0f331579e3add..88c678e49f4687085994db52ac5480e79b22043b 100644 --- a/src/varscan.h +++ b/src/varscan.h @@ -1,8 +1,8 @@ -#ifndef _VARSCAN_H -#define _VARSCAN_H +#ifndef VARSCAN_H +#define VARSCAN_H -#ifndef _GRID_H -# include "grid.h" +#ifndef GRID_H +#include "grid.h" #endif @@ -28,11 +28,8 @@ void varDefModel(int varID, int modelID); int varInqModel(int varID); void varDefTable(int varID, int tableID); int varInqTable(int varID); -void varDefEnsembleInfo(int varID, int ens_idx, int ens_count, int forecast_type); - -void varDefTypeOfGeneratingProcess(int varID, int typeOfGeneratingProcess); -void varDefProductDefinitionTemplate(int varID, int productDefinitionTemplate); +void varDefKeyInt(int varID, int key, int value); void varDefOptGribInt(int varID, int tile_index, long lval, const char *keyword); void varDefOptGribDbl(int varID, int tile_index, double dval, const char *keyword); diff --git a/src/vlist.c b/src/vlist.c index 5dc859db508217e8ef2bd73d3b4f83a3e74457fe..d2f80c04e4e70886c717c498aa67af01bcf524cd 100644 --- a/src/vlist.c +++ b/src/vlist.c @@ -1,5 +1,5 @@ -#if defined (HAVE_CONFIG_H) -# include "config.h" +#ifdef HAVE_CONFIG_H +#include "config.h" #endif #include "dmemory.h" @@ -17,7 +17,7 @@ #include "resource_unpack.h" #include "serialize.h" -#if defined (HAVE_LIBGRIB_API) +#ifdef HAVE_LIBGRIB_API /* list of additional GRIB2 keywords which are read by the open process */ int cdiNAdditionalGRIBKeys = 0; char* cdiAdditionalGRIBKeys[MAX_OPT_GRIB_ENTRIES]; @@ -27,19 +27,19 @@ static int VLIST_Debug = 0; static void vlist_initialize(void); -#if defined (HAVE_LIBPTHREAD) -# include <pthread.h> +#ifdef HAVE_LIBPTHREAD +#include <pthread.h> static pthread_once_t _vlist_init_thread = PTHREAD_ONCE_INIT; -# define VLIST_INIT() \ +#define VLIST_INIT() \ pthread_once(&_vlist_init_thread, vlist_initialize) #else static bool vlistIsInitialized = false; -# define VLIST_INIT() \ +#define VLIST_INIT() \ if ( !vlistIsInitialized ) vlist_initialize() #endif @@ -188,7 +188,7 @@ and add a variable with @func{vlistDefVar}. int vlistID, varID; ... vlistID = vlistCreate(); -varID = vlistDefVar(vlistID, gridID, zaxisID, TSTEP_INSTANT); +varID = vlistDefVar(vlistID, gridID, zaxisID, TIME_VARYING); ... streamDefVlist(streamID, vlistID); ... @@ -208,8 +208,8 @@ int vlistCreate(void) return vlistptr->self; } -static void -vlist_delete(vlist_t *vlistptr) +static +void vlist_delete(vlist_t *vlistptr) { int vlistID = vlistptr->self; if ( CDI_Debug ) Message("call to vlist_delete, vlistID = %d", vlistID); @@ -226,7 +226,6 @@ vlist_delete(vlist_t *vlistptr) if ( vars[varID].longname ) Free(vars[varID].longname); if ( vars[varID].stdname ) Free(vars[varID].stdname); if ( vars[varID].units ) Free(vars[varID].units); - if ( vars[varID].ensdata ) Free(vars[varID].ensdata); if ( vlistptr->vars[varID].opt_grib_kvpair ) { @@ -290,10 +289,12 @@ void var_copy_entries(var_t *var2, var_t *var1) if ( var1->longname ) var2->longname = strdupx(var1->longname); if ( var1->stdname ) var2->stdname = strdupx(var1->stdname); if ( var1->units ) var2->units = strdupx(var1->units); - if ( var1->ensdata ) + + size_t nkeys = var1->keys.nelems; + for ( size_t i = 0; i < nkeys; ++i ) { - var2->ensdata = (ensinfo_t *) Malloc(sizeof(ensinfo_t)); - memcpy(var2->ensdata, var1->ensdata, sizeof(ensinfo_t)); + var2->keys.value[i].v.i = var1->keys.value[i].v.i; + var2->keys.nelems++; } var2->opt_grib_kvpair_size = 0; diff --git a/src/vlist.h b/src/vlist.h index b55e806abe7cb282ac5ad73e1e2798fb42c32e4f..59c41236ad91244f3bec3460b1ad428dba165b5f 100644 --- a/src/vlist.h +++ b/src/vlist.h @@ -1,7 +1,7 @@ -#ifndef _VLIST_H -#define _VLIST_H +#ifndef VLIST_H +#define VLIST_H -#ifdef HAVE_CONFIG_H +#ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -11,12 +11,13 @@ #include <stddef.h> /* size_t */ -#ifndef _CDI_LIMITS_H +#ifndef CDI_LIMITS_H #include "cdi_limits.h" #endif #define VALIDMISS 1.e+303 +#include "cdi_key.h" #include "cdi_att.h" #include "grid.h" @@ -54,19 +55,16 @@ typedef struct int param; int gridID; int zaxisID; - int timetype; /* TIME_* */ - int tsteptype; /* TSTEP_* */ - int datatype; /* CDI_DATATYPE_PACKX for GRIB data, else CDI_DATATYPE_FLT32 or CDI_DATATYPE_FLT64 */ + int timetype; // TIME_* + int tsteptype; // TSTEP_* + int datatype; // CDI_DATATYPE_PACKX for GRIB data, else CDI_DATATYPE_FLT32 or CDI_DATATYPE_FLT64 int instID; int modelID; int tableID; int timave; - int timaccu; - int typeOfGeneratingProcess; - int productDefinitionTemplate; int chunktype; int xyz; - bool missvalused; /* true if missval is defined */ + bool missvalused; // true if missval is defined bool lvalidrange; char *name; char *longname; @@ -80,15 +78,15 @@ typedef struct levinfo_t *levinfo; int comptype; // compression type int complevel; // compression level - ensinfo_t *ensdata; /* Ensemble information */ + cdi_keys_t keys; cdi_atts_t atts; int iorank; - int subtypeID; /* subtype ID for tile-related meta-data, currently for GRIB-API only. */ + int subtypeID; // subtype ID for tile-related meta-data, currently for GRIB-API only. - int opt_grib_nentries; /* current no. key-value pairs */ - int opt_grib_kvpair_size; /* current allocated size */ - opt_key_val_pair_t *opt_grib_kvpair; /* (optional) list of keyword/value pairs */ + int opt_grib_nentries; // current no. key-value pairs + int opt_grib_kvpair_size; // current allocated size + opt_key_val_pair_t *opt_grib_kvpair; // (optional) list of keyword/value pairs } var_t; @@ -119,6 +117,8 @@ typedef struct vlist_t; +int vlist_key_compare(vlist_t *a, int varIDA, vlist_t *b, int varIDB, int keynum); + vlist_t *vlist_to_pointer(int vlistID); void cdiVlistMakeInternal(int vlistID); void cdiVlistMakeImmutable(int vlistID); @@ -216,7 +216,7 @@ const #endif resOps vlistOps; -#endif /* _VLIST_H */ +#endif /* VLIST_H */ /* * Local Variables: * c-file-style: "Java" diff --git a/src/vlist_var.c b/src/vlist_var.c index 92e1efc0ea5e354ee1ab8cb1259af3c02a197e58..bd1e935ca562fab389858b8957c4c39892e1731e 100644 --- a/src/vlist_var.c +++ b/src/vlist_var.c @@ -8,7 +8,6 @@ #include "vlist.h" #include "vlist_var.h" #include "resource_handle.h" -#include "cdi_att.h" #include "tablepar.h" #include "namespace.h" #include "serialize.h" @@ -33,9 +32,6 @@ void vlistvarInitEntry(int vlistID, int varID) vlistptr->vars[varID].timetype = CDI_UNDEFID; vlistptr->vars[varID].tsteptype = TSTEP_INSTANT; vlistptr->vars[varID].timave = 0; - vlistptr->vars[varID].timaccu = 0; - vlistptr->vars[varID].typeOfGeneratingProcess = 0; - vlistptr->vars[varID].productDefinitionTemplate = -1; vlistptr->vars[varID].chunktype = cdiChunkType; vlistptr->vars[varID].xyz = 321; vlistptr->vars[varID].gridID = CDI_UNDEFID; @@ -56,12 +52,13 @@ void vlistvarInitEntry(int vlistID, int varID) vlistptr->vars[varID].levinfo = NULL; vlistptr->vars[varID].comptype = CDI_COMPRESS_NONE; vlistptr->vars[varID].complevel = 1; + vlistptr->vars[varID].keys.nalloc = MAX_KEYS; + vlistptr->vars[varID].keys.nelems = 0; vlistptr->vars[varID].atts.nalloc = MAX_ATTRIBUTES; vlistptr->vars[varID].atts.nelems = 0; vlistptr->vars[varID].lvalidrange = false; vlistptr->vars[varID].validrange[0] = VALIDMISS; vlistptr->vars[varID].validrange[1] = VALIDMISS; - vlistptr->vars[varID].ensdata = NULL; vlistptr->vars[varID].iorank = CDI_UNDEFID; vlistptr->vars[varID].opt_grib_kvpair_size = 0; vlistptr->vars[varID].opt_grib_kvpair = NULL; @@ -1263,61 +1260,6 @@ int vlistInqVarTimave(int vlistID, int varID) } -void vlistDefVarTimaccu(int vlistID, int varID, int timaccu) -{ - vlist_t *vlistptr = vlist_to_pointer(vlistID); - if (vlistptr->vars[varID].timaccu != timaccu) - { - vlistptr->vars[varID].timaccu = timaccu; - reshSetStatus(vlistID, &vlistOps, RESH_DESYNC_IN_USE); - } -} - - -int vlistInqVarTimaccu(int vlistID, int varID) -{ - vlist_t *vlistptr = vlist_to_pointer(vlistID); - return vlistptr->vars[varID].timaccu; -} - - -void vlistDefVarTypeOfGeneratingProcess(int vlistID, int varID, int typeOfGeneratingProcess) -{ - vlist_t *vlistptr = vlist_to_pointer(vlistID); - if (vlistptr->vars[varID].typeOfGeneratingProcess != typeOfGeneratingProcess) - { - vlistptr->vars[varID].typeOfGeneratingProcess = typeOfGeneratingProcess; - reshSetStatus(vlistID, &vlistOps, RESH_DESYNC_IN_USE); - } -} - - -int vlistInqVarTypeOfGeneratingProcess(int vlistID, int varID) -{ - vlist_t *vlistptr = vlist_to_pointer(vlistID); - return vlistptr->vars[varID].typeOfGeneratingProcess; -} - - -void vlistDefVarProductDefinitionTemplate(int vlistID, int varID, int productDefinitionTemplate) -{ - vlist_t *vlistptr = vlist_to_pointer(vlistID); - - if (vlistptr->vars[varID].productDefinitionTemplate != productDefinitionTemplate) - { - vlistptr->vars[varID].productDefinitionTemplate = productDefinitionTemplate; - reshSetStatus(vlistID, &vlistOps, RESH_DESYNC_IN_USE); - } -} - - -int vlistInqVarProductDefinitionTemplate(int vlistID, int varID) -{ - vlist_t *vlistptr = vlist_to_pointer(vlistID); - return vlistptr->vars[varID].productDefinitionTemplate; -} - - void vlistDestroyVarName(int vlistID, int varID) { vlist_t *vlistptr = vlist_to_pointer(vlistID); @@ -1724,45 +1666,6 @@ int vlistInqVarXYZ(int vlistID, int varID) return vlistptr->vars[varID].xyz; } -/* Ensemble Info Routines */ -void vlistDefVarEnsemble(int vlistID, int varID, int ensID, int ensCount, int forecast_type ) -{ - vlist_t *vlistptr = vlist_to_pointer(vlistID); - - vlistCheckVarID(__func__, vlistID, varID); - - if ( vlistptr->vars[varID].ensdata == NULL ) - vlistptr->vars[varID].ensdata - = (ensinfo_t *) Malloc( sizeof( ensinfo_t ) ); - - vlistptr->vars[varID].ensdata->ens_index = ensID; - vlistptr->vars[varID].ensdata->ens_count = ensCount; - vlistptr->vars[varID].ensdata->forecast_init_type = forecast_type; - reshSetStatus(vlistID, &vlistOps, RESH_DESYNC_IN_USE); -} - - -int vlistInqVarEnsemble( int vlistID, int varID, int *ensID, int *ensCount, int *forecast_type ) -{ - int status = 0; - vlist_t *vlistptr = vlist_to_pointer(vlistID); - - vlistCheckVarID(__func__, vlistID, varID); - - if ( vlistptr->vars[varID].ensdata ) - { - *ensID = vlistptr->vars[varID].ensdata->ens_index; - *ensCount = vlistptr->vars[varID].ensdata->ens_count; - *forecast_type = vlistptr->vars[varID].ensdata->forecast_init_type; - - status = 1; - } - - return status; -} - - - /* vlistDefVarIntKey: Set an arbitrary keyword/integer value pair for GRIB API */ void vlistDefVarIntKey(int vlistID, int varID, const char *name, int value) { @@ -1963,7 +1866,7 @@ double vlistInqVarDblKey(int vlistID, int varID, const char* name) /* vlistInqVarIntKey: raw access to GRIB meta-data */ int vlistInqVarIntKey(int vlistID, int varID, const char* name) { - long int value = 0; + long value = 0; #if defined (HAVE_LIBGRIB_API) /* check if the GRIB key was previously read and is stored in "opt_grib_int_val" */ vlist_t *vlistptr = vlist_to_pointer(vlistID); @@ -2022,7 +1925,7 @@ int vlistVarCompare(vlist_t *a, int varIDA, vlist_t *b, int varIDB) #define FCMP2(f) (namespaceResHDecode(pva->f).idx \ != namespaceResHDecode(pvb->f).idx) int diff = FCMP(fvarID) | FCMP(mvarID) | FCMP(flag) | FCMP(param) - | FCMP(datatype) | FCMP(timetype) | FCMP(tsteptype) | FCMP(timave) | FCMP(timaccu) + | FCMP(datatype) | FCMP(timetype) | FCMP(tsteptype) | FCMP(timave) | FCMP(chunktype) | FCMP(xyz) | FCMP2(gridID) | FCMP2(zaxisID) | FCMP2(instID) | FCMP2(modelID) | FCMP2(tableID) | FCMP(missvalused) | FCMPFLT(missval) | FCMPFLT(addoffset) | FCMPFLT(scalefactor) | FCMPSTR(name) @@ -2044,29 +1947,55 @@ int vlistVarCompare(vlist_t *a, int varIDA, vlist_t *b, int varIDB) if (diff) return 1; } + size_t natts = a->vars[varIDA].atts.nelems; if (natts != b->vars[varIDB].atts.nelems) return 1; for (size_t attID = 0; attID < natts; ++attID) diff |= cdi_att_compare(a, varIDA, b, varIDB, (int)attID); - if ((diff |= ((pva->ensdata == NULL) ^ (pvb->ensdata == NULL)))) + + size_t nkeys = a->vars[varIDA].keys.nelems; + if (nkeys != b->vars[varIDB].keys.nelems) return 1; - if (pva->ensdata) - diff = (memcmp(pva->ensdata, pvb->ensdata, sizeof (*(pva->ensdata)))) != 0; + for (size_t keyID = 0; keyID < nkeys; ++keyID) + diff |= vlist_key_compare(a, varIDA, b, varIDB, (int)keyID); + return diff; } +enum { + VLISTVAR_PACK_INT_IDX_FLAG, + VLISTVAR_PACK_INT_IDX_GRIDID, + VLISTVAR_PACK_INT_IDX_ZAXISID, + VLISTVAR_PACK_INT_IDX_TIMETYPE, + VLISTVAR_PACK_INT_IDX_NAMESZ, + VLISTVAR_PACK_INT_IDX_LONGNAMESZ, + VLISTVAR_PACK_INT_IDX_STDNAMESZ, + VLISTVAR_PACK_INT_IDX_UNITSSZ, + VLISTVAR_PACK_INT_IDX_DATATYPE, + VLISTVAR_PACK_INT_IDX_PARAM, + VLISTVAR_PACK_INT_IDX_INSTID, + VLISTVAR_PACK_INT_IDX_MODELID, + VLISTVAR_PACK_INT_IDX_TABLEID, + VLISTVAR_PACK_INT_IDX_TIMAVE, + VLISTVAR_PACK_INT_IDX_MISSVALUSED, + VLISTVAR_PACK_INT_IDX_COMPTYPE, + VLISTVAR_PACK_INT_IDX_COMPLEVEL, + VLISTVAR_PACK_INT_IDX_NLEVS, + VLISTVAR_PACK_INT_IDX_IORANK, + VLISTVAR_PACK_INT_IDX_EXTRALEN, + vlistvarNint +}; enum { - vlistvar_nints = 21, vlistvar_ndbls = 3, }; int vlistVarGetPackSize(vlist_t *p, int varID, void *context) { var_t *var = p->vars + varID; - int varsize = serializeGetSize(vlistvar_nints, CDI_DATATYPE_INT, context) + int varsize = serializeGetSize(vlistvarNint, CDI_DATATYPE_INT, context) + serializeGetSize(vlistvar_ndbls, CDI_DATATYPE_FLT64, context); if (var->name) varsize += serializeGetSize((int)strlen(var->name), CDI_DATATYPE_TXT, context); @@ -2089,35 +2018,33 @@ void vlistVarPack(vlist_t *p, int varID, char * buf, int size, int *position, { double dtempbuf[vlistvar_ndbls]; var_t *var = p->vars + varID; - int tempbuf[vlistvar_nints], namesz, longnamesz, stdnamesz, unitssz, - extralen; - - tempbuf[0] = var->flag; - tempbuf[1] = var->gridID; - tempbuf[2] = var->zaxisID; - tempbuf[3] = var->timetype; - tempbuf[4] = namesz = var->name?(int)strlen(var->name):0; - tempbuf[5] = longnamesz = var->longname?(int)strlen(var->longname):0; - tempbuf[6] = stdnamesz = var->stdname?(int)strlen(var->stdname):0; - tempbuf[7] = unitssz = var->units?(int)strlen(var->units):0; - tempbuf[8] = var->datatype; - tempbuf[9] = var->param; - tempbuf[10] = var->instID; - tempbuf[11] = var->modelID; - tempbuf[12] = var->tableID; - tempbuf[13] = var->timave; - tempbuf[14] = var->timaccu; - tempbuf[15] = (int)var->missvalused; - tempbuf[16] = var->comptype; - tempbuf[17] = var->complevel; + int tempbuf[vlistvarNint], namesz, longnamesz, stdnamesz, unitssz, extralen; + + tempbuf[VLISTVAR_PACK_INT_IDX_FLAG] = var->flag; + tempbuf[VLISTVAR_PACK_INT_IDX_GRIDID] = var->gridID; + tempbuf[VLISTVAR_PACK_INT_IDX_ZAXISID] = var->zaxisID; + tempbuf[VLISTVAR_PACK_INT_IDX_TIMETYPE] = var->timetype; + tempbuf[VLISTVAR_PACK_INT_IDX_NAMESZ] = namesz = var->name?(int)strlen(var->name):0; + tempbuf[VLISTVAR_PACK_INT_IDX_LONGNAMESZ] = longnamesz = var->longname?(int)strlen(var->longname):0; + tempbuf[VLISTVAR_PACK_INT_IDX_STDNAMESZ] = stdnamesz = var->stdname?(int)strlen(var->stdname):0; + tempbuf[VLISTVAR_PACK_INT_IDX_UNITSSZ] = unitssz = var->units?(int)strlen(var->units):0; + tempbuf[VLISTVAR_PACK_INT_IDX_DATATYPE] = var->datatype; + tempbuf[VLISTVAR_PACK_INT_IDX_PARAM] = var->param; + tempbuf[VLISTVAR_PACK_INT_IDX_INSTID] = var->instID; + tempbuf[VLISTVAR_PACK_INT_IDX_MODELID] = var->modelID; + tempbuf[VLISTVAR_PACK_INT_IDX_TABLEID] = var->tableID; + tempbuf[VLISTVAR_PACK_INT_IDX_TIMAVE] = var->timave; + tempbuf[VLISTVAR_PACK_INT_IDX_MISSVALUSED] = (int)var->missvalused; + tempbuf[VLISTVAR_PACK_INT_IDX_COMPTYPE] = var->comptype; + tempbuf[VLISTVAR_PACK_INT_IDX_COMPLEVEL] = var->complevel; int nlevs = var->levinfo ? zaxisInqSize(var->zaxisID) : 0; - tempbuf[18] = nlevs; - tempbuf[19] = var->iorank; - tempbuf[20] = extralen = var->extra?(int)strlen(var->extra):0; + tempbuf[VLISTVAR_PACK_INT_IDX_NLEVS] = nlevs; + tempbuf[VLISTVAR_PACK_INT_IDX_IORANK] = var->iorank; + tempbuf[VLISTVAR_PACK_INT_IDX_EXTRALEN] = extralen = var->extra?(int)strlen(var->extra):0; dtempbuf[0] = var->missval; dtempbuf[1] = var->scalefactor; dtempbuf[2] = var->addoffset; - serializePack(tempbuf, vlistvar_nints, CDI_DATATYPE_INT, + serializePack(tempbuf, vlistvarNint, CDI_DATATYPE_INT, buf, size, position, context); serializePack(dtempbuf, vlistvar_ndbls, CDI_DATATYPE_FLT64, buf, size, position, context); @@ -2162,11 +2089,11 @@ void vlistVarUnpack(int vlistID, char * buf, int size, int *position, int originNamespace, void *context) { double dtempbuf[vlistvar_ndbls]; - int tempbuf[vlistvar_nints]; + int tempbuf[vlistvarNint]; char *varname = NULL; vlist_t *vlistptr = vlist_to_pointer(vlistID); serializeUnpack(buf, size, position, - tempbuf, vlistvar_nints, CDI_DATATYPE_INT, context); + tempbuf, vlistvarNint, CDI_DATATYPE_INT, context); serializeUnpack(buf, size, position, dtempbuf, vlistvar_ndbls, CDI_DATATYPE_FLT64, context); @@ -2175,67 +2102,68 @@ void vlistVarUnpack(int vlistID, char * buf, int size, int *position, /* ------------------------------------------- */ int newvar = vlistDefVar ( vlistID, - namespaceAdaptKey ( tempbuf[1], originNamespace ), - namespaceAdaptKey ( tempbuf[2], originNamespace ), - tempbuf[3]); - if (tempbuf[4] || tempbuf[5] || tempbuf[6] || tempbuf[7] || tempbuf[20]) - varname = (char *)Malloc((size_t)imax(imax(imax(imax(tempbuf[4], - tempbuf[5]), - tempbuf[6]), - tempbuf[7]), tempbuf[20]) + 1); - if (tempbuf[4]) + namespaceAdaptKey ( tempbuf[VLISTVAR_PACK_INT_IDX_GRIDID], originNamespace ), + namespaceAdaptKey ( tempbuf[VLISTVAR_PACK_INT_IDX_ZAXISID], originNamespace ), + tempbuf[VLISTVAR_PACK_INT_IDX_TIMETYPE]); + if (tempbuf[VLISTVAR_PACK_INT_IDX_NAMESZ] || tempbuf[VLISTVAR_PACK_INT_IDX_LONGNAMESZ] || + tempbuf[VLISTVAR_PACK_INT_IDX_STDNAMESZ] || tempbuf[VLISTVAR_PACK_INT_IDX_UNITSSZ] || + tempbuf[VLISTVAR_PACK_INT_IDX_EXTRALEN]) + varname = (char *)Malloc((size_t)imax(imax(imax(imax(tempbuf[VLISTVAR_PACK_INT_IDX_NAMESZ], + tempbuf[VLISTVAR_PACK_INT_IDX_LONGNAMESZ]), + tempbuf[VLISTVAR_PACK_INT_IDX_STDNAMESZ]), + tempbuf[VLISTVAR_PACK_INT_IDX_UNITSSZ]), tempbuf[VLISTVAR_PACK_INT_IDX_EXTRALEN]) + 1); + if (tempbuf[VLISTVAR_PACK_INT_IDX_NAMESZ]) { serializeUnpack(buf, size, position, - varname, tempbuf[4], CDI_DATATYPE_TXT, context); - varname[tempbuf[4]] = '\0'; + varname, tempbuf[VLISTVAR_PACK_INT_IDX_NAMESZ], CDI_DATATYPE_TXT, context); + varname[tempbuf[VLISTVAR_PACK_INT_IDX_NAMESZ]] = '\0'; vlistDefVarName(vlistID, newvar, varname); } - if (tempbuf[5]) + if (tempbuf[VLISTVAR_PACK_INT_IDX_LONGNAMESZ]) { serializeUnpack(buf, size, position, - varname, tempbuf[5], CDI_DATATYPE_TXT, context); - varname[tempbuf[5]] = '\0'; + varname, tempbuf[VLISTVAR_PACK_INT_IDX_LONGNAMESZ], CDI_DATATYPE_TXT, context); + varname[tempbuf[VLISTVAR_PACK_INT_IDX_LONGNAMESZ]] = '\0'; vlistDefVarLongname(vlistID, newvar, varname); } - if (tempbuf[6]) + if (tempbuf[VLISTVAR_PACK_INT_IDX_STDNAMESZ]) { serializeUnpack(buf, size, position, - varname, tempbuf[6], CDI_DATATYPE_TXT, context); - varname[tempbuf[6]] = '\0'; + varname, tempbuf[VLISTVAR_PACK_INT_IDX_STDNAMESZ], CDI_DATATYPE_TXT, context); + varname[tempbuf[VLISTVAR_PACK_INT_IDX_STDNAMESZ]] = '\0'; vlistDefVarStdname(vlistID, newvar, varname); } - if (tempbuf[7]) + if (tempbuf[VLISTVAR_PACK_INT_IDX_UNITSSZ]) { serializeUnpack(buf, size, position, - varname, tempbuf[7], CDI_DATATYPE_TXT, context); - varname[tempbuf[7]] = '\0'; + varname, tempbuf[VLISTVAR_PACK_INT_IDX_UNITSSZ], CDI_DATATYPE_TXT, context); + varname[tempbuf[VLISTVAR_PACK_INT_IDX_UNITSSZ]] = '\0'; vlistDefVarUnits(vlistID, newvar, varname); } - if (tempbuf[20]) + if (tempbuf[VLISTVAR_PACK_INT_IDX_EXTRALEN]) { serializeUnpack(buf, size, position, - varname, tempbuf[20], CDI_DATATYPE_TXT, context); - varname[tempbuf[20]] = '\0'; + varname, tempbuf[VLISTVAR_PACK_INT_IDX_EXTRALEN], CDI_DATATYPE_TXT, context); + varname[tempbuf[VLISTVAR_PACK_INT_IDX_EXTRALEN]] = '\0'; vlistDefVarExtra(vlistID, newvar, varname); } Free(varname); - vlistDefVarDatatype(vlistID, newvar, tempbuf[8]); + vlistDefVarDatatype(vlistID, newvar, tempbuf[VLISTVAR_PACK_INT_IDX_DATATYPE]); vlistDefVarInstitut ( vlistID, newvar, - namespaceAdaptKey ( tempbuf[10], originNamespace )); + namespaceAdaptKey ( tempbuf[VLISTVAR_PACK_INT_IDX_INSTID], originNamespace )); vlistDefVarModel ( vlistID, newvar, - namespaceAdaptKey ( tempbuf[11], originNamespace )); - vlistDefVarTable(vlistID, newvar, tempbuf[12]); + namespaceAdaptKey ( tempbuf[VLISTVAR_PACK_INT_IDX_MODELID], originNamespace )); + vlistDefVarTable(vlistID, newvar, tempbuf[VLISTVAR_PACK_INT_IDX_TABLEID]); /* FIXME: changing the table might change the param code */ - vlistDefVarParam(vlistID, newvar, tempbuf[9]); - vlistDefVarTimave(vlistID, newvar, tempbuf[13]); - vlistDefVarTimaccu(vlistID, newvar, tempbuf[14]); - if (tempbuf[15]) + vlistDefVarParam(vlistID, newvar, tempbuf[VLISTVAR_PACK_INT_IDX_PARAM]); + vlistDefVarTimave(vlistID, newvar, tempbuf[VLISTVAR_PACK_INT_IDX_TIMAVE]); + if (tempbuf[VLISTVAR_PACK_INT_IDX_MISSVALUSED]) vlistDefVarMissval(vlistID, newvar, dtempbuf[0]); vlistDefVarScalefactor(vlistID, newvar, dtempbuf[1]); vlistDefVarAddoffset(vlistID, newvar, dtempbuf[2]); - vlistDefVarCompType(vlistID, newvar, tempbuf[16]); - vlistDefVarCompLevel(vlistID, newvar, tempbuf[17]); - int nlevs = tempbuf[18]; + vlistDefVarCompType(vlistID, newvar, tempbuf[VLISTVAR_PACK_INT_IDX_COMPTYPE]); + vlistDefVarCompLevel(vlistID, newvar, tempbuf[VLISTVAR_PACK_INT_IDX_COMPLEVEL]); + int nlevs = tempbuf[VLISTVAR_PACK_INT_IDX_NLEVS]; if (nlevs) { int levbuf[nlevs][4]; @@ -2256,7 +2184,7 @@ void vlistVarUnpack(int vlistID, char * buf, int size, int *position, } vlistDefFlag(vlistID, newvar, flagSetLev, levbuf[flagSetLev][0]); } - vlistDefVarIOrank(vlistID, newvar, tempbuf[19]); + vlistDefVarIOrank(vlistID, newvar, tempbuf[VLISTVAR_PACK_INT_IDX_IORANK]); cdiAttsUnpack(vlistID, newvar, buf, size, position, context); } diff --git a/src/vlist_var.h b/src/vlist_var.h index 0c2493efc9a1b6cdb47a2a35718fe109b5395301..0ab4c0f8d4618efce932299c35feea5a72b568b5 100644 --- a/src/vlist_var.h +++ b/src/vlist_var.h @@ -1,11 +1,11 @@ -#ifndef VLIST_VAR_H -#define VLIST_VAR_H +#ifndef VLIST_VAR_H +#define VLIST_VAR_H -#ifdef HAVE_CONFIG_H +#ifdef HAVE_CONFIG_H #include "config.h" #endif -#ifndef _VLIST_H +#ifndef VLIST_H #include "vlist.h" #endif diff --git a/src/zaxis.c b/src/zaxis.c index 59600ca2e17dd67d331fe7f28567118fd6b49426..0da8bc4f723b749358451b0143ed63ada636bb65 100644 --- a/src/zaxis.c +++ b/src/zaxis.c @@ -1820,7 +1820,7 @@ zaxisUnpack(char * unpackBuffer, int unpackBufferSize, } serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos, - &zaxisP->positive, 1, CDI_DATATYPE_UCHAR, context); + &zaxisP->positive, 1, CDI_DATATYPE_UINT, context); if (memberMask & zaxisHasUUIDFlag) serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos, @@ -1915,7 +1915,7 @@ zaxisPack(void * voidP, void * packBuffer, int packBufferSize, packBuffer, packBufferSize, packBufferPos, context); } - serializePack(&zaxisP->positive, 1, CDI_DATATYPE_UCHAR, + serializePack(&zaxisP->positive, 1, CDI_DATATYPE_UINT, packBuffer, packBufferSize, packBufferPos, context); if (memberMask & zaxisHasUUIDFlag) diff --git a/tests/Makefile.am b/tests/Makefile.am index 42ffb51ecbb8ebf8524d21c20d89dd70dfc9d9bb..407202592632cd2bc682150dff132f27e6c5edaf 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -10,9 +10,9 @@ TESTS = cksum_verify \ pio_cksum_mpi_fw_ordered \ pio_cksum_mpi_fw_at_all \ pio_cksum_mpi_fw_at_reblock \ - test_resource_copy pio_write_deco2d_run \ + test_resource_copy_run pio_write_deco2d_run \ test_f2003 test_cdf_transformation test_cdf_const \ - test_table test_byteswap + test_table_run test_byteswap_run check_PROGRAMS = cksum_verify test_grib cksum_write cksum_read pio_write \ test_resource_copy cksum_write_chunk pio_write_deco2d test_table \ @@ -61,7 +61,7 @@ endif LDADD = ../src/libcdi.la -lm AM_CPPFLAGS = -I$(top_srcdir)/src # -EXTRA_DIST = test_cdf_write.c test_cdf_read.c +EXTRA_DIST = test_cdf_write.c test_cdf_read.c test_cksum_base # CLEANFILES = `ls *~ *.grb *.nc *.srv *.ext example_*.cksum` # diff --git a/tests/Makefile.in b/tests/Makefile.in index 4f0df77b7f2ca635333469a76e9f9a899864aad6..96421be57d18ce8ed4f37926f57973b34ed5b0d7 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -83,9 +83,9 @@ TESTS = cksum_verify$(EXEEXT) test_cksum_grib test_cksum_nc \ pio_cksum_mpinonb pio_cksum_fpguard pio_cksum_asynch \ pio_cksum_writer pio_cksum_cdf pio_cksum_mpi_fw_ordered \ pio_cksum_mpi_fw_at_all pio_cksum_mpi_fw_at_reblock \ - test_resource_copy$(EXEEXT) pio_write_deco2d_run test_f2003 \ - test_cdf_transformation test_cdf_const test_table$(EXEEXT) \ - test_byteswap$(EXEEXT) $(am__append_2) + test_resource_copy_run pio_write_deco2d_run test_f2003 \ + test_cdf_transformation test_cdf_const test_table_run \ + test_byteswap_run $(am__append_2) check_PROGRAMS = cksum_verify$(EXEEXT) test_grib$(EXEEXT) \ cksum_write$(EXEEXT) cksum_read$(EXEEXT) pio_write$(EXEEXT) \ test_resource_copy$(EXEEXT) cksum_write_chunk$(EXEEXT) \ @@ -109,9 +109,12 @@ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/pio_cksum_mpi_fw_at_reblock.in \ $(srcdir)/pio_cksum_fpguard.in $(srcdir)/pio_cksum_asynch.in \ $(srcdir)/pio_cksum_writer.in $(srcdir)/pio_cksum_cdf.in \ + $(srcdir)/test_byteswap_run.in \ + $(srcdir)/test_resource_copy_run.in \ $(srcdir)/test_resource_copy_mpi_run.in \ $(srcdir)/test_cdf_transformation.in \ - $(srcdir)/test_cdf_const.in $(top_srcdir)/config/depcomp + $(srcdir)/test_cdf_const.in $(srcdir)/test_table_run.in \ + $(top_srcdir)/config/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = \ $(top_srcdir)/m4/acx_assert_lang_is_fortran_variant.m4 \ @@ -151,8 +154,9 @@ CONFIG_CLEAN_FILES = test_cksum_grib test_cksum_nc test_cksum_nc2 \ pio_write_deco2d_run pio_cksum_mpinonb \ pio_cksum_mpi_fw_ordered pio_cksum_mpi_fw_at_all \ pio_cksum_mpi_fw_at_reblock pio_cksum_fpguard pio_cksum_asynch \ - pio_cksum_writer pio_cksum_cdf test_resource_copy_mpi_run \ - test_cdf_transformation test_cdf_const + pio_cksum_writer pio_cksum_cdf test_byteswap_run \ + test_resource_copy_run test_resource_copy_mpi_run \ + test_cdf_transformation test_cdf_const test_table_run CONFIG_CLEAN_VPATH_FILES = @ENABLE_NETCDF_TRUE@am__EXEEXT_1 = test_cdf_write$(EXEEXT) \ @ENABLE_NETCDF_TRUE@ test_cdf_read$(EXEEXT) @@ -419,6 +423,9 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OSSP_UUIDROOT = @OSSP_UUIDROOT@ +OSSP_UUID_C_INCLUDE = @OSSP_UUID_C_INCLUDE@ +OSSP_UUID_C_LIB = @OSSP_UUID_C_LIB@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -452,6 +459,9 @@ THREADS_INCLUDE = @THREADS_INCLUDE@ THREADS_LIBS = @THREADS_LIBS@ USER_NAME = @USER_NAME@ USE_MPI = @USE_MPI@ +UTIL_LINUX_UUIDROOT = @UTIL_LINUX_UUIDROOT@ +UTIL_LINUX_UUID_C_INCLUDE = @UTIL_LINUX_UUID_C_INCLUDE@ +UTIL_LINUX_UUID_C_LIB = @UTIL_LINUX_UUID_C_LIB@ UUID_C_LIB = @UUID_C_LIB@ VERSION = @VERSION@ YAXT_CFLAGS = @YAXT_CFLAGS@ @@ -550,7 +560,7 @@ AM_CFLAGS = $(PPM_CORE_CFLAGS) $(YAXT_CFLAGS) $(MPI_C_INCLUDE) LDADD = ../src/libcdi.la -lm AM_CPPFLAGS = -I$(top_srcdir)/src # -EXTRA_DIST = test_cdf_write.c test_cdf_read.c +EXTRA_DIST = test_cdf_write.c test_cdf_read.c test_cksum_base # CLEANFILES = `ls *~ *.grb *.nc *.srv *.ext example_*.cksum` # @@ -627,12 +637,18 @@ pio_cksum_writer: $(top_builddir)/config.status $(srcdir)/pio_cksum_writer.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ pio_cksum_cdf: $(top_builddir)/config.status $(srcdir)/pio_cksum_cdf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +test_byteswap_run: $(top_builddir)/config.status $(srcdir)/test_byteswap_run.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +test_resource_copy_run: $(top_builddir)/config.status $(srcdir)/test_resource_copy_run.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ test_resource_copy_mpi_run: $(top_builddir)/config.status $(srcdir)/test_resource_copy_mpi_run.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ test_cdf_transformation: $(top_builddir)/config.status $(srcdir)/test_cdf_transformation.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ test_cdf_const: $(top_builddir)/config.status $(srcdir)/test_cdf_const.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +test_table_run: $(top_builddir)/config.status $(srcdir)/test_table_run.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ diff --git a/tests/pio_write_deco2d_run.in b/tests/pio_write_deco2d_run.in index 4f84c2a04f01dc667055e57f2c649bf82afb6c76..bb45949b156b0ff3ecd11ca0d9ec44324c2a4afd 100644 --- a/tests/pio_write_deco2d_run.in +++ b/tests/pio_write_deco2d_run.in @@ -6,7 +6,7 @@ if [ @ENABLE_GRIB@ = yes ]; then suffix="${suffix-grb}" exec 5>&1 6>&2 >"$LOG" 2>&1 ../libtool --mode=execute @MPI_LAUNCH@ -n ${mpi_task_num} \ - ${tool_wrap} ./pio_write_deco2d ${pio_write_args} + ${tool_wrap_mpi} ./pio_write_deco2d ${pio_write_args} exec 2>&6 1>&5 5>&- 6>&- ../libtool --mode=execute \ ${tool_wrap} ./cksum_read example_0.${suffix} example_0.cksum diff --git a/tests/pio_write_run.in b/tests/pio_write_run.in index fba1426a65d7a72f62886cdeb3e58f58e12303ec..247e75649fdc56a3167ded93dae3dcba4f278761 100644 --- a/tests/pio_write_run.in +++ b/tests/pio_write_run.in @@ -16,7 +16,8 @@ for variation in "" $variations ; do exec 5>&1 6>&2 >"$LOG" 2>&1 ../libtool --mode=execute \ @MPI_LAUNCH@ \ - -n ${mpi_task_num} ${tool_wrap} ./pio_write ${pio_write_args} ${variation} + -n ${mpi_task_num} ${tool_wrap_mpi} \ + ./pio_write ${pio_write_args} ${variation} exec 2>&6 1>&5 5>&- 6>&- ../libtool --mode=execute \ ${tool_wrap} ./cksum_read example_0.${suffix} example_0.cksum diff --git a/tests/test_byteswap_run.in b/tests/test_byteswap_run.in new file mode 100644 index 0000000000000000000000000000000000000000..03c9798ba7d0a1670ec104814df1ddb3b304dd4a --- /dev/null +++ b/tests/test_byteswap_run.in @@ -0,0 +1,8 @@ +#! @SHELL@ + +../libtool --mode=execute ${tool_wrap} ./test_byteswap +# +# Local Variables: +# mode: sh +# End: +# diff --git a/tests/test_cdf_const.in b/tests/test_cdf_const.in index 9b9546d4903882789edb514f9112e0b62a4189c9..13afb0dc7f5ea89bd452d3e674e64c20f3e33468 100644 --- a/tests/test_cdf_const.in +++ b/tests/test_cdf_const.in @@ -6,9 +6,13 @@ if [ @ENABLE_NETCDF@ = yes ]; then mkdir -p test_cdf_const.d cd test_cdf_const.d \rm -f * - @abs_top_builddir@/examples/cdi_write_const - ( @abs_top_builddir@/app/cdi -s example_const.nc \ - && @abs_top_builddir@/app/cdi example_const.nc) >cdi.$$.stdout 2>cdi.$$.stderr + ../../libtool --mode=execute ${tool_wrap} \ + @abs_top_builddir@/examples/cdi_write_const + ( ../../libtool --mode=execute ${tool_wrap} \ + @abs_top_builddir@/app/cdi -s example_const.nc \ + && ../../libtool --mode=execute ${tool_wrap} \ + @abs_top_builddir@/app/cdi example_const.nc) \ + >cdi.$$.stdout 2>cdi.$$.stderr echo "$0" exec 6<cdi.$$.stdout 7<../"$0" while read pattern <&7 ; do diff --git a/tests/test_cdf_transformation.in b/tests/test_cdf_transformation.in index 3a3e36aa07836a927c488d457d86fd6c4668c2c0..32e03330c002a4e53f10844405f5944081bcddae 100644 --- a/tests/test_cdf_transformation.in +++ b/tests/test_cdf_transformation.in @@ -7,8 +7,8 @@ fi ncdatafile="test$$.nc" tempfiles="${ncdatafile}" trap "EC=\$? ; \rm -f ${tempfiles}; exit \$EC" EXIT -./test_cdf_write "${ncdatafile}" -digest=$(./test_cdf_read "${ncdatafile}") +../libtool --mode=execute ${tool_wrap} ./test_cdf_write "${ncdatafile}" +digest=$(../libtool --mode=execute ${tool_wrap} ./test_cdf_read "${ncdatafile}") missValueCount=$(echo "$digest" | @SED@ -n '/^missing values count =/{ s/^missing values count *= *// p diff --git a/tests/test_chunk_cksum.in b/tests/test_chunk_cksum.in index 8142e3e522f80322f519462f52706fcaa85a8f47..859a6ff56aac21765bdc8570892681563db78b70 100644 --- a/tests/test_chunk_cksum.in +++ b/tests/test_chunk_cksum.in @@ -4,8 +4,8 @@ set -e format=nc if [ @ENABLE_NETCDF@ = yes ]; then exec >test_chunk_cksum_$format.log 2>&1 - ./cksum_write_chunk -m 17 - ./cksum_read example.$format + ../libtool --mode=execute ${tool_wrap} ./cksum_write_chunk -m 17 + ../libtool --mode=execute ${tool_wrap} ./cksum_read example.$format \rm example.cksum example.$format \rm test_chunk_cksum_$format.log else diff --git a/tests/test_cksum_base b/tests/test_cksum_base new file mode 100644 index 0000000000000000000000000000000000000000..775779ec0d37d45b7bc5300b923f067b2eb0755b --- /dev/null +++ b/tests/test_cksum_base @@ -0,0 +1,14 @@ +#! /bin/sh +# this file is meant to be included for the supported file formats + +exec >test_cksum_$format.log 2>&1 +../libtool --mode=execute ${tool_wrap} ./cksum_write -f $format +../libtool --mode=execute ${tool_wrap} ./cksum_read example.$format +\rm example.cksum example.$format +\rm test_cksum_$format.log + +# +# Local Variables: +# mode: sh +# End: +# diff --git a/tests/test_cksum_extra.in b/tests/test_cksum_extra.in index 2dc92b91c0ce222d0efd4d5f0ad454e63555c0e2..c6cb9b29eb06e94d9fe0dbb688b74b4c2498f2f9 100644 --- a/tests/test_cksum_extra.in +++ b/tests/test_cksum_extra.in @@ -3,11 +3,7 @@ set -e format=ext if [ @ENABLE_EXTRA@ = yes ]; then - exec >test_cksum_$format.log 2>&1 - ./cksum_write -f $format - ./cksum_read example.$format - \rm example.cksum example.$format - \rm test_cksum_$format.log + . ${srcdir}/test_cksum_base else # skip tests for unsupported formats exit 77 diff --git a/tests/test_cksum_grib.in b/tests/test_cksum_grib.in index 2b9d605a67f851310448eed330244cf0f6cd339e..e50a579d0a3384de49a2e8dcded93a0946eb920b 100644 --- a/tests/test_cksum_grib.in +++ b/tests/test_cksum_grib.in @@ -1,14 +1,16 @@ -#! /bin/sh +#! @SHELL@ set -e format=grb if [ @ENABLE_GRIB@ = yes ]; then - exec >test_cksum_$format.log 2>&1 - ./cksum_write -f $format - ./cksum_read example.$format - \rm example.cksum example.$format - \rm test_cksum_$format.log + . ${srcdir}/test_cksum_base else # skip tests for unsupported formats exit 77 fi + +# +# Local Variables: +# mode: sh +# End: +# diff --git a/tests/test_cksum_ieg.in b/tests/test_cksum_ieg.in index 9b9ceacde8e8510d3b2a469476bb764e6ef5c332..b373f238d9b65b122a3bf32cc57300210e851dc6 100644 --- a/tests/test_cksum_ieg.in +++ b/tests/test_cksum_ieg.in @@ -3,11 +3,7 @@ set -e format=ieg if [ @ENABLE_IEG@ = yes ]; then - exec >test_cksum_$format.log 2>&1 - ./cksum_write -f $format - ./cksum_read example.$format - \rm example.cksum example.$format - \rm test_cksum_$format.log + . ${srcdir}/test_cksum_base else # skip tests for unsupported formats exit 77 diff --git a/tests/test_cksum_nc.in b/tests/test_cksum_nc.in index e9adf2c7a8f88c2eaf14bc8038c786938d3e31d3..ef9fc7abc3ba4b6269f71068babbf2c3ba8187f3 100644 --- a/tests/test_cksum_nc.in +++ b/tests/test_cksum_nc.in @@ -3,11 +3,7 @@ set -e format=nc if [ @ENABLE_NETCDF@ = yes ]; then - exec >test_cksum_$format.log 2>&1 - ./cksum_write -f $format - ./cksum_read example.$format - \rm example.cksum example.$format - \rm test_cksum_$format.log + . ${srcdir}/test_cksum_base else # skip tests for unsupported formats exit 77 diff --git a/tests/test_cksum_nc2.in b/tests/test_cksum_nc2.in index 1e622e841f11b8f8671481bb98364fe70c0c2049..c3f76d6903a2220a7b0bbf85abae1e3016d16182 100644 --- a/tests/test_cksum_nc2.in +++ b/tests/test_cksum_nc2.in @@ -3,11 +3,7 @@ set -e format=nc2 if [ @ENABLE_NC2@ = yes ]; then - exec >test_cksum_$format.log 2>&1 - ./cksum_write -f $format - ./cksum_read example.$format - \rm example.cksum example.$format - \rm test_cksum_$format.log + . ${srcdir}/test_cksum_base else # skip tests for unsupported formats exit 77 diff --git a/tests/test_cksum_nc4.in b/tests/test_cksum_nc4.in index 3ddad3ad7f81845ef2a7f6140f5f5bacd9114965..8816bfff905be4c4629f14724dadeb3c154acb8a 100644 --- a/tests/test_cksum_nc4.in +++ b/tests/test_cksum_nc4.in @@ -3,11 +3,7 @@ set -e format=nc4 if [ @ENABLE_NC4@ = yes ]; then - exec >test_cksum_$format.log 2>&1 - ./cksum_write -f $format - ./cksum_read example.$format - \rm example.cksum example.$format - \rm test_cksum_$format.log + . ${srcdir}/test_cksum_base else # skip tests for unsupported formats exit 77 diff --git a/tests/test_cksum_service.in b/tests/test_cksum_service.in index 84e15ef1ef5255f7433c398b5442ec699f4a8b90..4ad0ab4983c7de29f0069273fe44e7b923330f91 100644 --- a/tests/test_cksum_service.in +++ b/tests/test_cksum_service.in @@ -3,11 +3,7 @@ set -e format=svc if [ @ENABLE_SERVICE@ = yes ]; then - exec >test_cksum_$format.log 2>&1 - ./cksum_write -f $format - ./cksum_read example.$format - \rm example.cksum example.$format - \rm test_cksum_$format.log + . ${srcdir}/test_cksum_base else # skip tests for unsupported formats exit 77 diff --git a/tests/test_f2003.in b/tests/test_f2003.in index cbca2d739514c28faef577154e80d1fa3d5ba5b9..4fb1207121af08fd2df4a08c5208481f3df6892a 100644 --- a/tests/test_f2003.in +++ b/tests/test_f2003.in @@ -4,8 +4,10 @@ set -e format=nc if [ @ENABLE_NETCDF@ = yes -a @ENABLE_F2003_ISOC@ = yes ]; then exec >test_f2003_$format.log 2>&1 - @abs_top_builddir@/examples/cdi_write_f2003 - @abs_top_builddir@/examples/cdi_read_f2003 \ + ../libtool --mode=execute ${tool_wrap} \ + @abs_top_builddir@/examples/cdi_write_f2003 + ../libtool --mode=execute ${tool_wrap} \ + @abs_top_builddir@/examples/cdi_read_f2003 \ >cdi_read_f2003.$$.stdout \ 2>cdi_read_f2003.$$.stderr echo "$0" diff --git a/tests/test_resource_copy_run.in b/tests/test_resource_copy_run.in new file mode 100644 index 0000000000000000000000000000000000000000..a12b85fe2d1719b0cf030c9ca99e73b0a743253e --- /dev/null +++ b/tests/test_resource_copy_run.in @@ -0,0 +1,10 @@ +#! @SHELL@ +set -e +../libtool --mode=execute ${tool_wrap} \ + ./test_resource_copy + +# +# Local Variables: +# mode: sh +# End: +# diff --git a/tests/test_table_run.in b/tests/test_table_run.in new file mode 100644 index 0000000000000000000000000000000000000000..ceedd2ec7a47da01256e517a715097f032b6af42 --- /dev/null +++ b/tests/test_table_run.in @@ -0,0 +1,8 @@ +#! @SHELL@ + +../libtool --mode=execute ${tool_wrap} ./test_table +# +# Local Variables: +# mode: sh +# End: +#