diff --git a/ChangeLog b/ChangeLog index 21650847092b9cf1ce7e9e262038b100d438ca79..87698934265622e82f58d55d31e80af0d6aa485c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,10 @@ * using CGRIBEX library version 1.7.6 * Version 1.8.0 released +2016-12-20 Uwe Schulzweida + + * Added support for GRIB level type 210 + 2016-11-24 Uwe Schulzweida * Version 1.8.0rc5 released diff --git a/app/cdi.c b/app/cdi.c index a9c6599764b8af667df5509837bfb68064b6a2c0..b392bb6c5fb56f71dea2f8d2fe3fd000baf93024 100644 --- a/app/cdi.c +++ b/app/cdi.c @@ -252,9 +252,7 @@ void printInfo(int vdate, int vtime, char *varname, double level, else { int nvals_r = 0, nvals_i = 0; - double arrsum_r, arrsum_i, arrmean_r = 0, arrmean_i = 0; - arrsum_r = 0; - arrsum_i = 0; + double arrsum_r = 0, arrsum_i = 0, arrmean_r = 0, arrmean_i = 0; for ( i = 0; i < datasize; i++ ) { @@ -331,16 +329,8 @@ static void printShortinfo(int streamID, int vlistID, int vardis) { int varID; - int gridsize = 0; - int gridID, zaxisID, param; - int vdate, vtime; - int ntsteps; - int levelsize; - int tsteptype, taxisID; char tmpname[CDI_MAX_NAME]; char varname[CDI_MAX_NAME]; - const char *modelptr, *instptr; - int datatype; int year, month, day, hour, minute, second; char pstr[4]; char paramstr[32]; @@ -365,28 +355,28 @@ void printShortinfo(int streamID, int vlistID, int vardis) for ( varID = 0; varID < nvars; varID++ ) { - param = vlistInqVarParam(vlistID, varID); - gridID = vlistInqVarGrid(vlistID, varID); - zaxisID = vlistInqVarZaxis(vlistID, varID); + int param = vlistInqVarParam(vlistID, varID); + int gridID = vlistInqVarGrid(vlistID, varID); + int zaxisID = vlistInqVarZaxis(vlistID, varID); fprintf(stdout, "%6d : ", varID + 1); /* institute info */ - instptr = institutInqNamePtr(vlistInqVarInstitut(vlistID, varID)); + const char *instptr = institutInqNamePtr(vlistInqVarInstitut(vlistID, varID)); strcpy(tmpname, "unknown"); if ( instptr ) strncpy(tmpname, instptr, CDI_MAX_NAME); limit_string_length(tmpname, CDI_MAX_NAME); fprintf(stdout, "%-8s ", tmpname); /* source info */ - modelptr = modelInqNamePtr(vlistInqVarModel(vlistID, varID)); + const char *modelptr = modelInqNamePtr(vlistInqVarModel(vlistID, varID)); strcpy(tmpname, "unknown"); if ( modelptr ) strncpy(tmpname, modelptr, CDI_MAX_NAME); limit_string_length(tmpname, CDI_MAX_NAME); fprintf(stdout, "%-8s ", tmpname); /* tsteptype */ - tsteptype = vlistInqVarTsteptype(vlistID, varID); + int tsteptype = vlistInqVarTsteptype(vlistID, varID); if ( tsteptype == TSTEP_CONSTANT ) fprintf(stdout, "%-8s ", "constant"); else if ( tsteptype == TSTEP_INSTANT ) fprintf(stdout, "%-8s ", "instant"); else if ( tsteptype == TSTEP_INSTANT2 ) fprintf(stdout, "%-8s ", "instant"); @@ -408,17 +398,17 @@ void printShortinfo(int streamID, int vlistID, int vardis) } /* layer info */ - levelsize = zaxisInqSize(zaxisID); + int levelsize = zaxisInqSize(zaxisID); fprintf(stdout, "%6d ", levelsize); fprintf(stdout, "%3d ", vlistZaxisIndex(vlistID, zaxisID) + 1); /* grid info */ - gridsize = gridInqSize(gridID); + int gridsize = gridInqSize(gridID); fprintf(stdout, "%9d ", gridsize); fprintf(stdout, "%3d ", vlistGridIndex(vlistID, gridID) + 1); /* datatype */ - datatype = vlistInqVarDatatype(vlistID, varID); + int datatype = vlistInqVarDatatype(vlistID, varID); if ( datatype == CDI_DATATYPE_PACK ) strcpy(pstr, "P0"); else if ( datatype > 0 && datatype <= 32 ) sprintf(pstr, "P%d", datatype); else if ( datatype == CDI_DATATYPE_CPX32 ) strcpy(pstr, "C32"); @@ -445,7 +435,7 @@ void printShortinfo(int streamID, int vlistID, int vardis) cdiParamToString(param, paramstr, sizeof(paramstr)); - if (vardis) + if ( vardis ) { vlistInqVarName(vlistID, varID, varname); fprintf(stdout, "%-14s", varname); @@ -474,8 +464,8 @@ void printShortinfo(int streamID, int vlistID, int vardis) printSubtypeInfo(vlistID); } - taxisID = vlistInqTaxis(vlistID); - ntsteps = vlistNtsteps(vlistID); + int taxisID = vlistInqTaxis(vlistID); + int ntsteps = vlistNtsteps(vlistID); if ( ntsteps != 0 ) { @@ -488,10 +478,8 @@ void printShortinfo(int streamID, int vlistID, int vardis) { if ( taxisInqType(taxisID) == TAXIS_RELATIVE ) { - int calendar, tunits; - - vdate = taxisInqRdate(taxisID); - vtime = taxisInqRtime(taxisID); + int vdate = taxisInqRdate(taxisID); + int vtime = taxisInqRtime(taxisID); cdiDecodeDate(vdate, &year, &month, &day); cdiDecodeTime(vtime, &hour, &minute, &second); @@ -499,10 +487,10 @@ void printShortinfo(int streamID, int vlistID, int vardis) fprintf(stdout, " RefTime = %4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d", year, month, day, hour, minute, second); - tunits = taxisInqTunit(taxisID); + int tunits = taxisInqTunit(taxisID); if ( tunits != CDI_UNDEFID ) fprintf(stdout, " Units = %s", tunit2str(tunits)); - calendar = taxisInqCalendar(taxisID); + int calendar = taxisInqCalendar(taxisID); if ( calendar != CDI_UNDEFID ) fprintf(stdout, " Calendar = %s", calendar2str(calendar)); if ( taxisHasBounds(taxisID) ) @@ -703,7 +691,7 @@ int handle_error(int cdiErrno, const char *fmt, ...) fprintf(stderr, "%s\n", cdiStringError(cdiErrno)); - return (cdiErrno); + return cdiErrno; } static @@ -844,51 +832,34 @@ int main(int argc, char *argv[]) if ( fname1 ) { - double *data = NULL; - double missval; - double level; int nmiss; int number; int datasize = 0; - int streamID1 = CDI_UNDEFID; int streamID2 = CDI_UNDEFID; int filetype; int gridID, zaxisID; int param; - int vdate, vtime; - int nrecs, nvars; + int nrecs; int levelID, levelsize; int nts = 0; int gridsize = 0; int recID; - int tsID; - int ntsteps = 0; - int taxisID1, taxisID2 = CDI_UNDEFID; - int vlistID1, vlistID2 = CDI_UNDEFID; + int taxisID2 = CDI_UNDEFID; + int vlistID2 = CDI_UNDEFID; - streamID1 = streamOpenRead(fname1); - if ( streamID1 < 0 ) - return (handle_error(streamID1, "Open failed on %s", fname1)); + int streamID1 = streamOpenRead(fname1); + if ( streamID1 < 0 ) return handle_error(streamID1, "Open failed on %s", fname1); - vlistID1 = streamInqVlist(streamID1); + int vlistID1 = streamInqVlist(streamID1); - if ( Longinfo ) - { - int ngrids, nzaxis; - vlistPrint(vlistID1); - ngrids = vlistNgrids(vlistID1); - nzaxis = vlistNzaxis(vlistID1); - for ( gridID = 0; gridID < ngrids; gridID++ ) gridPrint(gridID, gridID, 1); - for ( zaxisID = 0; zaxisID < nzaxis; zaxisID++ ) zaxisPrint(zaxisID, zaxisID); - } + if ( Longinfo ) vlistPrint(vlistID1); - nvars = vlistNvars(vlistID1); - taxisID1 = vlistInqTaxis(vlistID1); - ntsteps = vlistNtsteps(vlistID1); + int nvars = vlistNvars(vlistID1); + int taxisID1 = vlistInqTaxis(vlistID1); + int ntsteps = vlistNtsteps(vlistID1); - if (Debug) - fprintf(stderr, "nvars = %d\n" - "ntsteps = %d\n", nvars, ntsteps); + if ( Debug ) + fprintf(stderr, "nvars = %d\nntsteps = %d\n", nvars, ntsteps); if ( fname2 ) { @@ -919,7 +890,7 @@ int main(int argc, char *argv[]) streamID2 = streamOpenWrite(fname2, filetype); if ( streamID2 < 0 ) - return (handle_error(streamID2, "Open failed on %s", fname2)); + return handle_error(streamID2, "Open failed on %s", fname2); if ( DefaultByteorder != CDI_UNDEFID ) streamDefByteorder(streamID2, DefaultByteorder); @@ -936,14 +907,13 @@ int main(int argc, char *argv[]) } if ( vlistNumber(vlistID1) != CDI_REAL ) datasize *= 2; - data = (double *) malloc((size_t)datasize * sizeof (double)); + double *data = (double *) malloc((size_t)datasize * sizeof (double)); /* nts = cdiInqTimeSize(streamID1); */ - if (Debug) - printf("nts = %d streamID1 = %d, streamID2 = %d\n", - nts, streamID1, streamID2); + if ( Debug ) + printf("nts = %d streamID1 = %d, streamID2 = %d\n", nts, streamID1, streamID2); if ( Shortinfo ) { @@ -951,7 +921,7 @@ int main(int argc, char *argv[]) printShortinfo(streamID1, vlistID1, Vardis); } - tsID = 0; + int tsID = 0; if ( Info || fname2 ) while ( (nrecs = streamInqTimestep(streamID1, tsID)) > 0 ) { @@ -960,8 +930,8 @@ int main(int argc, char *argv[]) taxisCopyTimestep(taxisID2, taxisID1); streamDefTimestep(streamID2, tsID); } - vdate = taxisInqVdate(taxisID1); - vtime = taxisInqVtime(taxisID1); + int vdate = taxisInqVdate(taxisID1); + int vtime = taxisInqVtime(taxisID1); if ( Debug ) fprintf(stdout, "tsID = %d nrecs = %d date = %d time = %d\n", tsID, nrecs, vdate, vtime); @@ -987,8 +957,8 @@ int main(int argc, char *argv[]) varID, param, gridID, zaxisID, levelID); */ gridsize = gridInqSize(gridID); - level = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1; - missval = vlistInqVarMissval(vlistID1, varID); + double level = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1; + double missval = vlistInqVarMissval(vlistID1, varID); if ( Info ) printInfo(vdate, vtime, varname, level, gridsize, number, nmiss, missval, data, Vardis); @@ -1024,12 +994,12 @@ int main(int argc, char *argv[]) varID, param, gridID, zaxisID); gridsize = gridInqSize(gridID); - missval = vlistInqVarMissval(vlistID1, varID); + double missval = vlistInqVarMissval(vlistID1, varID); levelsize = zaxisInqSize(zaxisID); for ( levelID = 0; levelID < levelsize; levelID++ ) { - level = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1; + double level = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1; streamReadVarSlice(streamID1, varID, levelID, data, &nmiss); if ( Info ) @@ -1040,6 +1010,7 @@ int main(int argc, char *argv[]) } } } + tsID++; } @@ -1059,7 +1030,7 @@ int main(int argc, char *argv[]) if ( wTable ) tableWrite(wTable, itableID); - return (0); + return 0; } /* * Local Variables: diff --git a/app/printinfo.h b/app/printinfo.h index 992f25f933bcd139d3d8a181962cda1f2de4684a..f019c8ef12a8d9e2766f96d1ae7ee7f3f3d10169 100644 --- a/app/printinfo.h +++ b/app/printinfo.h @@ -316,7 +316,7 @@ void printGridInfoKernel(int gridID, int index, bool lproj) } char name[CDI_MAX_NAME]; name[0] = 0; - cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, name); + cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, name); if ( gridtype == GRID_PROJECTION || name[0] ) { if ( name[0] == 0 ) strcpy(name, "undefined"); @@ -506,7 +506,7 @@ void printZaxisInfo(int vlistID) set_text_color(stdout, RESET, BLUE); #endif if ( zaxistype == ZAXIS_GENERIC && ltype != 0 ) - fprintf(stdout, "%-12s (ltype=%3d) :", zaxisname, ltype); + fprintf(stdout, "%-12s (ltype=%3d)", zaxisname, ltype); else fprintf(stdout, "%-24s", zaxisname); my_reset_text_color(stdout); diff --git a/configure b/configure index b73e50e8b98457676afdfcf62c304bf0897e85cd..0b8a769ba3d2c1231ed029a4a84b7cb710983f17 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.8.0rc5. +# Generated by GNU Autoconf 2.68 for cdi 1.8.0rc6. # # 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.8.0rc5' -PACKAGE_STRING='cdi 1.8.0rc5' +PACKAGE_VERSION='1.8.0rc6' +PACKAGE_STRING='cdi 1.8.0rc6' PACKAGE_BUGREPORT='http://mpimet.mpg.de/cdi' PACKAGE_URL='' @@ -1460,7 +1460,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.8.0rc5 to adapt to many kinds of systems. +\`configure' configures cdi 1.8.0rc6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1530,7 +1530,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of cdi 1.8.0rc5:";; + short | recursive ) echo "Configuration of cdi 1.8.0rc6:";; esac cat <<\_ACEOF @@ -1723,7 +1723,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -cdi configure 1.8.0rc5 +cdi configure 1.8.0rc6 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2568,7 +2568,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.8.0rc5, which was +It was created by cdi $as_me 1.8.0rc6, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3520,7 +3520,7 @@ fi # Define the identity of the package. PACKAGE='cdi' - VERSION='1.8.0rc5' + VERSION='1.8.0rc6' cat >>confdefs.h <<_ACEOF @@ -23389,7 +23389,7 @@ Usage: $0 [OPTIONS] Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ -cdi config.lt 1.8.0rc5 +cdi config.lt 1.8.0rc6 configured by $0, generated by GNU Autoconf 2.68. Copyright (C) 2011 Free Software Foundation, Inc. @@ -27150,7 +27150,19 @@ fi if test "x$NC_CONFIG" != "x"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking netcdf's nc2 support" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking netcdf's OpenDAP support" >&5 +$as_echo_n "checking netcdf's OpenDAP support... " >&6; } + if test "x$($NC_CONFIG --has-dap)" = "xyes"; then : + +$as_echo "#define HAVE_LIBNC_DAP 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking netcdf's nc2 support" >&5 $as_echo_n "checking netcdf's nc2 support... " >&6; } if test "x$($NC_CONFIG --has-nc2)" = "xyes"; then : @@ -27412,7 +27424,7 @@ for ac_lib in '' netcdf; do ac_res="none required" else ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" + LIBS="-l$ac_lib -lhdf5 $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_H5TS_mutex_lock=$ac_res @@ -27473,7 +27485,7 @@ for ac_lib in '' netcdf; do ac_res="none required" else ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" + LIBS="-l$ac_lib -lhdf5 $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_H5get_libversion=$ac_res @@ -30522,7 +30534,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.8.0rc5, which was +This file was extended by cdi $as_me 1.8.0rc6, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -30588,7 +30600,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.8.0rc5 +cdi config.status 1.8.0rc6 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 6e9951662482c9f527fdb613954ab5630fdf82f5..b20816481758044b7431a22476cc8a488016636d 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ # autoconf 2.68 # libtool 2.4.2 -AC_INIT([cdi], [1.8.0rc5], [http://mpimet.mpg.de/cdi]) +AC_INIT([cdi], [1.8.0rc6], [http://mpimet.mpg.de/cdi]) AC_DEFINE_UNQUOTED(CDI, ["$PACKAGE_VERSION"], [CDI version]) diff --git a/doc/tex/formats.tex b/doc/tex/formats.tex index 7992f2864fbd9286703214c69a226d5548758d96..4a3b371a10c7c4b811ad9714cf34356cc6388751 100644 --- a/doc/tex/formats.tex +++ b/doc/tex/formats.tex @@ -57,7 +57,6 @@ GRIB1 & GRIB2 & & \\ 8 & 8 & nominalTop & Norminal top of atmosphere \\ 9 & 9 & seaBottom & Sea bottom \\ 10 & 10 & entireAtmosphere & Entire atmosphere \\ - 99 & -- & -- & Isobaric level in Pa \\ 100 & 100 & isobaricInhPa & Isobaric level in hPa \\ 102 & 101 & meanSea & Mean sea level \\ 103 & 102 & heightAboveSea & Altitude above mean sea level \\ @@ -76,6 +75,7 @@ GRIB1 & GRIB2 & & \\ 165 & 165 & -- & Bottom Of Sediment Layer Penetrated By \\ & & & Thermal Wave \\ 166 & 166 & -- & Mixing Layer \\ + 210 & -- & isobaricInPa & Isobaric level in Pa \\ \hline \end{tabular} diff --git a/m4/acx_options.m4 b/m4/acx_options.m4 index ed3ebb4548ecac6acbc9e6fd9f9da85891bd1938..58ca0f42b6ba492c8dfb42f22b51007403e78eb1 100644 --- a/m4/acx_options.m4 +++ b/m4/acx_options.m4 @@ -80,6 +80,10 @@ AC_ARG_WITH([netcdf], NETCDF_LIBS=" -lnetcdf" AC_CHECK_PROG(NC_CONFIG,nc-config,nc-config) AS_IF([test "x$NC_CONFIG" != "x"], + [AC_MSG_CHECKING([netcdf's OpenDAP support]) + AS_IF([test "x$($NC_CONFIG --has-dap)" = "xyes"], + [AC_DEFINE([HAVE_LIBNC_DAP],[1],[Define to 1 for NetCDF OpenDAP]) + AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no])])] [AC_MSG_CHECKING([netcdf's nc2 support]) AS_IF([test "x$($NC_CONFIG --has-nc2)" = "xyes"], [AC_DEFINE([HAVE_NETCDF2],[1],[Define to 1 for NetCDF2 support]) @@ -137,11 +141,11 @@ AC_ARG_WITH([netcdf], AS_IF([test "x$ENABLE_NC4HDF5" = "xyes"], [AC_SEARCH_LIBS([H5TS_mutex_lock], [netcdf], - [AC_DEFINE([HAVE_NC4HDF5_THREADSAFE],[1],[Define to 1 for NetCDF4/HDF5 threadsafe support])],,)]) + [AC_DEFINE([HAVE_NC4HDF5_THREADSAFE],[1],[Define to 1 for NetCDF4/HDF5 threadsafe support])],,[-lhdf5])]) AS_IF([test "x$ENABLE_NC4HDF5" = "xyes"], [AC_SEARCH_LIBS([H5get_libversion], [netcdf], - [AC_DEFINE([HAVE_H5GET_LIBVERSION],[1],[Define to 1 for H5get_libversion support])],,)]) + [AC_DEFINE([HAVE_H5GET_LIBVERSION],[1],[Define to 1 for H5get_libversion support])],,[-lhdf5])]) AC_SUBST([ENABLE_NETCDF]) AC_SUBST([ENABLE_NC2]) diff --git a/src/Makefile.in b/src/Makefile.in index be115a80ebafb926b136c7920686d5963e4ee8e5..234a5d46f45d3ac46d56f25594a163057b0e4ff5 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -941,8 +941,8 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -@ENABLE_CDI_LIB_FALSE@uninstall-local: @ENABLE_CDI_LIB_FALSE@install-exec-local: +@ENABLE_CDI_LIB_FALSE@uninstall-local: clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ diff --git a/src/cdf_write.c b/src/cdf_write.c index 8e0d3b8db8fceb6d8e36f702d94e92d72e95718b..8d94bffbe36d49cdbfc0e23f455d09358176c85a 100644 --- a/src/cdf_write.c +++ b/src/cdf_write.c @@ -282,7 +282,7 @@ void cdf_get_gmapvarname(int gridID, char *gmapvarname) { int pgridID = gridID; char mapping[CDI_MAX_NAME]; mapping[0] = 0; - cdiGridInqKeyStr(pgridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping); + cdiGridInqKeyStr(pgridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping); if ( !mapping[0] ) { @@ -290,12 +290,12 @@ void cdf_get_gmapvarname(int gridID, char *gmapvarname) if ( projID != CDI_UNDEFID ) { pgridID = projID; - cdiGridInqKeyStr(pgridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping); + cdiGridInqKeyStr(pgridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping); } } if ( mapping[0] ) - cdiGridInqKeyStr(pgridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, gmapvarname); + cdiGridInqKeyStr(pgridID, CDI_KEY_MAPPING, CDI_MAX_NAME, gmapvarname); } static @@ -534,32 +534,6 @@ int cdfDefVar(stream_t *streamptr, int varID) } } - if ( streamptr->comptype == CDI_COMPRESS_SZIP ) - { - if ( lchunk && (streamptr->filetype == CDI_FILETYPE_NC4 || streamptr->filetype == CDI_FILETYPE_NC4C) ) - { -#if defined (NC_SZIP_NN_OPTION_MASK) - cdfDefVarSzip(fileID, ncvarid); -#else - static bool lwarn = true; - if ( lwarn ) - { - lwarn = false; - Warning("NetCDF4/SZIP compression not available!"); - } -#endif - } - else - { - static bool lwarn = true; - if ( lwarn ) - { - lwarn = false; - Warning("SZIP compression is only available for NetCDF4!"); - } - } - } - if ( stdname && *stdname ) cdf_put_att_text(fileID, ncvarid, "standard_name", strlen(stdname), stdname); diff --git a/src/cdi.h b/src/cdi.h index 8b97d62f4a9b7e523443ea9fd5fa1134258bd736..b736662f67699e7472e3c02c0176b4c036329717 100644 --- a/src/cdi.h +++ b/src/cdi.h @@ -735,7 +735,7 @@ int gridInqMaskGME(int gridID, int mask[]); void gridDefMask(int gridID, const int mask[]); int gridInqMask(int gridID, int mask[]); -void gridPrint(int gridID, int index, int opt); +void gridPrint(int gridID, int opt); /* gridCreate: Create a horizontal Grid */ int gridCreate(int gridtype, int size); @@ -801,8 +801,8 @@ int gridInqYvals(int gridID, double yvals[]); #define CDI_KEY_YLONGNAME 913 // Y-axis longname #define CDI_KEY_YUNITS 914 // Y-axis units #define CDI_KEY_VDIMNAME 920 // Vertex dimension name -#define CDI_KEY_MAPNAME 921 // Grid mapping var name -#define CDI_KEY_MAPPING 922 // Grid mapping name +#define CDI_KEY_MAPPING 921 // Grid mapping var name +#define CDI_KEY_MAPNAME 922 // Grid mapping name /* CDI zaxis string key values */ #define CDI_KEY_NAME 941 // Z-axis name @@ -981,7 +981,7 @@ int zaxisInqSize(int zaxisID); /* zaxisDuplicate: Duplicate a Z-axis */ int zaxisDuplicate(int zaxisID); -void zaxisPrint(int zaxisID, int index); +void zaxisPrint(int zaxisID); /* zaxisDefLevels: Define the levels of a Z-axis */ void zaxisDefLevels(int zaxisID, const double levels[]); diff --git a/src/cdi.inc b/src/cdi.inc index 8bb57c03bdf77df1589015942f99fd9edc7c1f9d..5c469f15ee2a9296163c5c46cc6afff6f8a69808 100644 --- a/src/cdi.inc +++ b/src/cdi.inc @@ -4,7 +4,7 @@ ! ! Author: ! ------- -! Uwe Schulzweida, MPI-MET, Hamburg, November 2016 +! Uwe Schulzweida, MPI-MET, Hamburg, January 2017 ! INTEGER CDI_MAX_NAME @@ -1495,7 +1495,6 @@ ! gridPrint ! (INTEGER gridID, -! INTEGER index, ! INTEGER opt) EXTERNAL gridPrint @@ -1962,8 +1961,7 @@ EXTERNAL zaxisDuplicate ! zaxisPrint -! (INTEGER zaxisID, -! INTEGER index) +! (INTEGER zaxisID) EXTERNAL zaxisPrint ! zaxisDefLevels diff --git a/src/cdiFortran.c b/src/cdiFortran.c index a983d1598383af4d65470299f66b0c820cd0d310..840dbd4bd8d245824d85c2e24f41121c80d8f746 100644 --- a/src/cdiFortran.c +++ b/src/cdiFortran.c @@ -308,7 +308,7 @@ FCALLSCSUB2 (gridDefMaskGME, GRIDDEFMASKGME, griddefmaskgme, INT, INTV) FCALLSCFUN2 (INT, gridInqMaskGME, GRIDINQMASKGME, gridinqmaskgme, INT, INTV) FCALLSCSUB2 (gridDefMask, GRIDDEFMASK, griddefmask, INT, INTV) FCALLSCFUN2 (INT, gridInqMask, GRIDINQMASK, gridinqmask, INT, INTV) -FCALLSCSUB3 (gridPrint, GRIDPRINT, gridprint, INT, INT, INT) +FCALLSCSUB2 (gridPrint, GRIDPRINT, gridprint, INT, INT) FCALLSCFUN2 (INT, gridCreate, GRIDCREATE, gridcreate, INT, INT) FCALLSCSUB1 (gridDestroy, GRIDDESTROY, griddestroy, INT) FCALLSCFUN1 (INT, gridDuplicate, GRIDDUPLICATE, gridduplicate, INT) @@ -409,7 +409,7 @@ FCALLSCSUB1 (zaxisDestroy, ZAXISDESTROY, zaxisdestroy, INT) FCALLSCFUN1 (INT, zaxisInqType, ZAXISINQTYPE, zaxisinqtype, INT) FCALLSCFUN1 (INT, zaxisInqSize, ZAXISINQSIZE, zaxisinqsize, INT) FCALLSCFUN1 (INT, zaxisDuplicate, ZAXISDUPLICATE, zaxisduplicate, INT) -FCALLSCSUB2 (zaxisPrint, ZAXISPRINT, zaxisprint, INT, INT) +FCALLSCSUB1 (zaxisPrint, ZAXISPRINT, zaxisprint, INT) FCALLSCSUB2 (zaxisDefLevels, ZAXISDEFLEVELS, zaxisdeflevels, INT, DOUBLEV) FCALLSCFUN2 (INT, zaxisInqLevels, ZAXISINQLEVELS, zaxisinqlevels, INT, DOUBLEV) FCALLSCSUB3 (zaxisDefLevel, ZAXISDEFLEVEL, zaxisdeflevel, INT, INT, DOUBLE) diff --git a/src/cdi_int.h b/src/cdi_int.h index d2f9c36253026fa6ffc4e556447e575dcc7553e3..8e02463b320f9c18729ef94fd0363230766a82a2 100644 --- a/src/cdi_int.h +++ b/src/cdi_int.h @@ -351,7 +351,6 @@ int streamInqFileID(int streamID); void gridDefHasDims(int gridID, int hasdims); int gridInqHasDims(int gridID); -const char *gridNamePtr(int gridtype); const char *zaxisNamePtr(int leveltype); int zaxisInqLevelID(int zaxisID, double level); diff --git a/src/cgribex.h b/src/cgribex.h index 4b40906d40475589a664c9ff4da07072b55a70f2..7b4d589a1aff6624ff49934beecf690eada2abe2 100644 --- a/src/cgribex.h +++ b/src/cgribex.h @@ -16,6 +16,7 @@ #define GRIB1_LTYPE_ATMOSPHERE 10 #define GRIB1_LTYPE_99 99 #define GRIB1_LTYPE_ISOBARIC 100 +#define GRIB1_LTYPE_ISOBARIC_PA 210 #define GRIB1_LTYPE_MEANSEA 102 #define GRIB1_LTYPE_ALTITUDE 103 #define GRIB1_LTYPE_HEIGHT 105 @@ -32,7 +33,6 @@ #define GRIB1_LTYPE_SEDIMENT_BOTTOM_TA 164 /* Bottom Of Thermally Active Sediment Layer */ #define GRIB1_LTYPE_SEDIMENT_BOTTOM_TW 165 /* Bottom Of Sediment Layer Penetrated By Thermal Wave */ #define GRIB1_LTYPE_MIX_LAYER 166 /* Mixing Layer */ -#define GRIB1_LTYPE_99_MARGIN 1000 /* GRIB1 Data representation type (Grid Type) [Table 6] */ #define GRIB1_GTYPE_LATLON 0 /* latitude/longitude */ diff --git a/src/cgribexlib.c b/src/cgribexlib.c index fba6850c0105f17fe8ceb0ddcff6064abfc99483..d7a0ad3e428cd754d13d0916162f5c20ba6c000b 100644 --- a/src/cgribexlib.c +++ b/src/cgribexlib.c @@ -1,5 +1,5 @@ -/* Automatically generated by m214003 at 2016-11-05, do not edit */ +/* Automatically generated by m214003 at 2016-12-20, do not edit */ /* CGRIBEXLIB_VERSION="1.7.6" */ @@ -8623,19 +8623,20 @@ int decodePDS(unsigned char *pds, int *isec0, int *isec1) ISEC1_LevelType = PDS_LevelType; if ( (ISEC1_LevelType != 20) && - (ISEC1_LevelType != GRIB1_LTYPE_99) && - (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC) && - (ISEC1_LevelType != GRIB1_LTYPE_ALTITUDE) && - (ISEC1_LevelType != GRIB1_LTYPE_HEIGHT) && - (ISEC1_LevelType != GRIB1_LTYPE_SIGMA) && - (ISEC1_LevelType != GRIB1_LTYPE_HYBRID) && - (ISEC1_LevelType != GRIB1_LTYPE_LANDDEPTH) && - (ISEC1_LevelType != GRIB1_LTYPE_ISENTROPIC) && + (ISEC1_LevelType != GRIB1_LTYPE_99) && + (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC) && + (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC_PA) && + (ISEC1_LevelType != GRIB1_LTYPE_ALTITUDE) && + (ISEC1_LevelType != GRIB1_LTYPE_HEIGHT) && + (ISEC1_LevelType != GRIB1_LTYPE_SIGMA) && + (ISEC1_LevelType != GRIB1_LTYPE_HYBRID) && + (ISEC1_LevelType != GRIB1_LTYPE_LANDDEPTH) && + (ISEC1_LevelType != GRIB1_LTYPE_ISENTROPIC) && (ISEC1_LevelType != 115) && (ISEC1_LevelType != 117) && (ISEC1_LevelType != 125) && (ISEC1_LevelType != 127) && - (ISEC1_LevelType != GRIB1_LTYPE_SEADEPTH) && + (ISEC1_LevelType != GRIB1_LTYPE_SEADEPTH) && (ISEC1_LevelType != 210) ) { ISEC1_Level1 = PDS_Level1; @@ -11304,14 +11305,15 @@ void encodePDS(GRIBPACK *lpds, long pdsLen, int *isec1) Put1Byte(ISEC1_Parameter); /* 8 Parameter Code */ Put1Byte(ISEC1_LevelType); /* 9 Type of level */ if ( (ISEC1_LevelType != 20) && - (ISEC1_LevelType != GRIB1_LTYPE_99) && - (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC) && - (ISEC1_LevelType != GRIB1_LTYPE_ALTITUDE) && - (ISEC1_LevelType != GRIB1_LTYPE_HEIGHT) && - (ISEC1_LevelType != GRIB1_LTYPE_SIGMA) && - (ISEC1_LevelType != GRIB1_LTYPE_HYBRID) && - (ISEC1_LevelType != GRIB1_LTYPE_LANDDEPTH) && - (ISEC1_LevelType != GRIB1_LTYPE_ISENTROPIC) && + (ISEC1_LevelType != GRIB1_LTYPE_99) && + (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC) && + (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC_PA) && + (ISEC1_LevelType != GRIB1_LTYPE_ALTITUDE) && + (ISEC1_LevelType != GRIB1_LTYPE_HEIGHT) && + (ISEC1_LevelType != GRIB1_LTYPE_SIGMA) && + (ISEC1_LevelType != GRIB1_LTYPE_HYBRID) && + (ISEC1_LevelType != GRIB1_LTYPE_LANDDEPTH) && + (ISEC1_LevelType != GRIB1_LTYPE_ISENTROPIC) && (ISEC1_LevelType != 115) && (ISEC1_LevelType != 117) && (ISEC1_LevelType != 125) && @@ -13709,7 +13711,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.7.6" " of ""Nov 5 2016"" ""11:59:02"; +static const char grb_libvers[] = "1.7.6" " of ""Dec 20 2016"" ""19:55:24"; const char * cgribexLibraryVersion(void) { diff --git a/src/grid.c b/src/grid.c index 63bb9355810267e763f482fb90b3b3f062f8f254..fb64c102000192f9f5d6dedc64095aa1997e7aec 100644 --- a/src/grid.c +++ b/src/grid.c @@ -574,8 +574,8 @@ void *grid_key_to_ptr(grid_t *gridptr, int key) case CDI_KEY_XDIMNAME: keyptr = (void*)gridptr->x.dimname; break; case CDI_KEY_YDIMNAME: keyptr = (void*)gridptr->y.dimname; break; case CDI_KEY_VDIMNAME: keyptr = (void*)gridptr->vdimname; break; - case CDI_KEY_MAPNAME: keyptr = (void*)gridptr->mapname; break; - case CDI_KEY_MAPPING: keyptr = (void*)gridptr->mapping; break; + case CDI_KEY_MAPPING: keyptr = (void*)gridptr->mapname; break; + case CDI_KEY_MAPNAME: keyptr = (void*)gridptr->mapping; break; } return keyptr; @@ -969,7 +969,7 @@ int gridInqProjType(int gridID) if ( projtype == -1 ) { char mapping[CDI_MAX_NAME]; mapping[0] = 0; - cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping); + cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping); if ( mapping[0] ) { if ( strcmp(mapping, "rotated_latitude_longitude") == 0 ) projtype = CDI_PROJ_RLL; @@ -1782,7 +1782,7 @@ void gridInqParamRLL(int gridID, double *xpole, double *ypole, double *angle) const char *projection = "rotated_latitude_longitude"; char mapping[CDI_MAX_NAME]; mapping[0] = 0; - cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping); + cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping); if ( mapping[0] && strcmp(mapping, projection) == 0 ) { int atttype, attlen; @@ -1823,10 +1823,10 @@ void gridInqParamRLL(int gridID, double *xpole, double *ypole, double *angle) */ void gridDefParamRLL(int gridID, double xpole, double ypole, double angle) { - cdiGridDefKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, "rotated_pole"); + cdiGridDefKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, "rotated_pole"); const char *mapping = "rotated_latitude_longitude"; - cdiGridDefKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping); + cdiGridDefKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping); cdiDefAttTxt(gridID, CDI_GLOBAL, "grid_mapping_name", strlen(mapping), mapping); cdiDefAttFlt(gridID, CDI_GLOBAL, "grid_north_pole_longitude", CDI_DATATYPE_FLT64, 1, &xpole); cdiDefAttFlt(gridID, CDI_GLOBAL, "grid_north_pole_latitude", CDI_DATATYPE_FLT64, 1, &ypole); @@ -3150,7 +3150,7 @@ printBounds(FILE *fp, int dig, const char prefix[], size_t nbyte0, static void printMask(FILE *fp, const char prefix[], size_t nbyte0, - size_t n, const mask_t mask[]) + size_t n, const int mask[]) { fputs(prefix, fp); size_t nbyte = nbyte0; @@ -3161,7 +3161,7 @@ printMask(FILE *fp, const char prefix[], size_t nbyte0, fprintf(fp, "\n%*s", (int)nbyte0, ""); nbyte = nbyte0; } - nbyte += (size_t)fprintf(fp, "%d ", (int)mask[i]); + nbyte += (size_t)fprintf(fp, "%d ", mask[i]); } fputs("\n", fp); } @@ -3237,19 +3237,18 @@ void gridPrintAttributes(FILE *fp, int gridID) } static -void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) +void gridPrintKernel(int gridID, int opt, FILE *fp) { int xdim, ydim; + char attstr[CDI_MAX_NAME]; + char attstr2[CDI_MAX_NAME]; unsigned char uuidOfHGrid[CDI_UUID_SIZE]; - int gridID = gridptr->self; - const double *area = gridInqAreaPtr(gridID); - const double *xvals = gridInqXvalsPtr(gridID); - const double *yvals = gridInqYvalsPtr(gridID); - const double *xbounds = gridInqXboundsPtr(gridID); - const double *ybounds = gridInqYboundsPtr(gridID); + size_t nxvals = (size_t) gridInqXvals(gridID, NULL); + size_t nyvals = (size_t) gridInqYvals(gridID, NULL); + size_t nxbounds = (size_t) gridInqXbounds(gridID, NULL); + size_t nybounds = (size_t) gridInqYbounds(gridID, NULL); int type = gridInqType(gridID); - int trunc = gridInqTrunc(gridID); int gridsize = gridInqSize(gridID); int xsize = gridInqXsize(gridID); int ysize = gridInqYsize(gridID); @@ -3258,14 +3257,7 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) int dig = (prec == CDI_DATATYPE_FLT64) ? 15 : 7; - struct gridaxis_t *xaxis = &gridptr->x; - struct gridaxis_t *yaxis = &gridptr->y; - - fprintf(fp, "#\n" - "# gridID %d\n" - "#\n" - "gridtype = %s\n" - "gridsize = %d\n", index, gridNamePtr(type), gridsize); + fprintf(fp, "gridtype = %s\n" "gridsize = %d\n", gridNamePtr(type), gridsize); if ( type != GRID_GME ) { @@ -3275,25 +3267,35 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) if ( ysize > 0 ) fprintf(fp, "ysize = %d\n", ysize); } - if ( xvals ) + if ( nxvals > 0 ) { - if ( xaxis->name[0] ) fprintf(fp, "xname = %s\n", xaxis->name); - if ( xaxis->longname[0] ) fprintf(fp, "xlongname = %s\n", xaxis->longname); - if ( xaxis->units[0] ) fprintf(fp, "xunits = %s\n", xaxis->units); - if ( xaxis->dimname[0] && strcmp(xaxis->name, xaxis->dimname) ) - fprintf(fp, "xdimname = %s\n", xaxis->dimname); + attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XNAME, CDI_MAX_NAME, attstr); + if ( attstr[0] ) fprintf(fp, "xname = %s\n", attstr); + attstr2[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XDIMNAME, CDI_MAX_NAME, attstr2); + if ( attstr2[0] && strcmp(attstr, attstr2) ) fprintf(fp, "xdimname = %s\n", attstr2); + attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XLONGNAME, CDI_MAX_NAME, attstr); + if ( attstr[0] ) fprintf(fp, "xlongname = %s\n", attstr); + attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XUNITS, CDI_MAX_NAME, attstr); + if ( attstr[0] ) fprintf(fp, "xunits = %s\n", attstr); } - if ( yvals ) + + if ( nyvals > 0 ) { - if ( yaxis->name[0] ) fprintf(fp, "yname = %s\n", yaxis->name); - if ( yaxis->longname[0] ) fprintf(fp, "ylongname = %s\n", yaxis->longname); - if ( yaxis->units[0] ) fprintf(fp, "yunits = %s\n", yaxis->units); - if ( yaxis->dimname[0] && strcmp(yaxis->name, yaxis->dimname) ) - fprintf(fp, "ydimname = %s\n", yaxis->dimname); + attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YNAME, CDI_MAX_NAME, attstr); + if ( attstr[0] ) fprintf(fp, "yname = %s\n", attstr); + attstr2[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YDIMNAME, CDI_MAX_NAME, attstr2); + if ( attstr2[0] && strcmp(attstr, attstr2) ) fprintf(fp, "ydimname = %s\n", attstr2); + attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YLONGNAME, CDI_MAX_NAME, attstr); + if ( attstr[0] ) fprintf(fp, "ylongname = %s\n", attstr); + attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YUNITS, CDI_MAX_NAME, attstr); + if ( attstr[0] ) fprintf(fp, "yunits = %s\n", attstr); } if ( type == GRID_UNSTRUCTURED || type == GRID_CURVILINEAR ) - if ( gridptr->vdimname[0] ) fprintf(fp, "vdimname = %s\n", gridptr->vdimname); + { + attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_VDIMNAME, CDI_MAX_NAME, attstr); + if ( attstr[0] ) fprintf(fp, "vdimname = %s\n", attstr); + } if ( type == GRID_UNSTRUCTURED && nvertex > 0 ) fprintf(fp, "nvertex = %d\n", nvertex); } @@ -3307,7 +3309,7 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) case GRID_CURVILINEAR: case GRID_UNSTRUCTURED: { - if ( type == GRID_GAUSSIAN || type == GRID_GAUSSIAN_REDUCED ) fprintf(fp, "np = %d\n", gridptr->np); + if ( type == GRID_GAUSSIAN || type == GRID_GAUSSIAN_REDUCED ) fprintf(fp, "np = %d\n", gridInqNP(gridID)); if ( type == GRID_CURVILINEAR || type == GRID_UNSTRUCTURED ) { @@ -3350,7 +3352,7 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) } } - if ( xvals ) + if ( nxvals > 0 ) { double xfirst = 0.0, xinc = 0.0; @@ -3368,21 +3370,24 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) } else { + double *xvals = (double*) Malloc(nxvals*sizeof(double)); + gridInqXvals(gridID, xvals); static const char prefix[] = "xvals = "; - printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, - (size_t)(xdim > 0 ? xdim : 0), xvals); + printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, nxvals, xvals); + Free(xvals); } } - if ( xbounds ) + if ( nxbounds ) { + double *xbounds = (double*) Malloc(nxbounds*sizeof(double)); + gridInqXbounds(gridID, xbounds); static const char prefix[] = "xbounds = "; - printBounds(fp, dig, prefix, sizeof(prefix)-1, - (size_t)(xdim > 0 ? xdim : 0), - (size_t)(nvertex > 0 ? nvertex : 0), xbounds); + printBounds(fp, dig, prefix, sizeof(prefix)-1, xdim, nvertex, xbounds); + Free(xbounds); } - if ( yvals ) + if ( nyvals > 0 ) { double yfirst = 0.0, yinc = 0.0; @@ -3400,25 +3405,30 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) } else { + double *yvals = (double*) Malloc(nyvals*sizeof(double)); + gridInqYvals(gridID, yvals); static const char prefix[] = "yvals = "; - printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, - (size_t)(ydim > 0 ? ydim : 0), yvals); + printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, nyvals, yvals); + Free(yvals); } } - if ( ybounds ) + if ( nybounds ) { + double *ybounds = (double*) Malloc(nybounds*sizeof(double)); + gridInqYbounds(gridID, ybounds); static const char prefix[] = "ybounds = "; - printBounds(fp, dig, prefix, sizeof(prefix)-1, - (size_t)(ydim > 0 ? ydim : 0), - (size_t)(nvertex > 0 ? nvertex : 0), ybounds); + printBounds(fp, dig, prefix, sizeof(prefix)-1, ydim, nvertex, ybounds); + Free(ybounds); } - if ( area ) + if ( gridHasArea(gridID) ) { + double *area = (double*) Malloc(gridsize*sizeof(double)); + gridInqArea(gridID, area); static const char prefix[] = "area = "; - printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, - (size_t)(gridsize > 0 ? gridsize : 0), area); + printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, gridsize, area); + Free(area); } if ( type == GRID_GAUSSIAN_REDUCED ) @@ -3440,7 +3450,7 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) double originLon = 0, originLat = 0, lonParY = 0, lat1 = 0, lat2 = 0, xincm = 0, yincm = 0; int projflag = 0, scanflag = 0; gridInqParamLCC(gridID, &originLon, &originLat, &lonParY, &lat1, &lat2, &xincm, &yincm, - &projflag, &scanflag); + &projflag, &scanflag); fprintf(fp, "originLon = %.*g\n" @@ -3459,17 +3469,19 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) case GRID_SPECTRAL: { fprintf(fp, "truncation = %d\n" - "complexpacking = %d\n", trunc, gridptr->lcomplex ); + "complexpacking = %d\n", gridInqTrunc(gridID), gridInqComplexPacking(gridID) ); break; } case GRID_FOURIER: { - fprintf(fp, "truncation = %d\n", trunc); + fprintf(fp, "truncation = %d\n", gridInqTrunc(gridID)); break; } case GRID_GME: { - fprintf(fp, "ni = %d\n", gridptr->gme.ni ); + int nd, ni, ni2, ni3; + gridInqParamGME(gridID, &nd, &ni, &ni2, &ni3); + fprintf(fp, "ni = %d\n", ni ); break; } default: @@ -3488,30 +3500,32 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp) fprintf(fp, "uuid = %s\n", uuidOfHGridStr); } - if ( gridptr->mask ) + if ( gridInqMask(gridID, NULL) ) { + int *mask = (gridsize>0) ? (int*) Malloc((size_t)gridsize*sizeof(int)) : NULL; + gridInqMask(gridID, mask); static const char prefix[] = "mask = "; printMask(fp, prefix, sizeof(prefix)-1, - (size_t)(gridsize > 0 ? gridsize : 0), gridptr->mask); + (size_t)(gridsize > 0 ? gridsize : 0), mask); + if ( mask ) Free(mask); } } -void gridPrint ( int gridID, int index, int opt ) -{ - grid_t *gridptr = grid_to_pointer(gridID); - gridPrintKernel ( gridptr, index, opt, stdout ); +void gridPrint(int gridID, int opt) +{ + gridPrintKernel(gridID, opt, stdout); } - -void gridPrintP ( void * voidptr, FILE * fp ) +void gridPrintP(void *voidptr, FILE *fp) { - grid_t * gridptr = ( grid_t * ) voidptr; + grid_t *gridptr = (grid_t *) voidptr; + int gridID = gridptr->self; - xassert ( gridptr ); + xassert( gridptr ); - gridPrintKernel ( gridptr , gridptr->self, 0, fp ); + gridPrintKernel(gridID, 0, fp); fprintf(fp, "precision = %d\n" @@ -3536,12 +3550,15 @@ void gridPrintP ( void * voidptr, FILE * fp ) ? gridptr->nrowlon : 0), gridptr->rowlon); } - if ( gridptr->mask_gme ) + if ( gridInqMaskGME(gridID, NULL) ) { + int gridsize = gridptr->size; + int *mask = (gridsize>0) ? (int*) Malloc((size_t)gridsize*sizeof(int)) : NULL; + gridInqMaskGME(gridID, mask); static const char prefix[] = "mask_gme = "; printMask(fp, prefix, sizeof(prefix)-1, - (size_t)(gridptr->size > 0 ? gridptr->size : 0), - gridptr->mask_gme); + (size_t)(gridptr->size > 0 ? gridptr->size : 0), mask); + if ( mask ) Free(mask); } } diff --git a/src/ieg.h b/src/ieg.h index 7b72d88cad2e85db23bffb0127fd792da9ba7274..c92aaf9f6a71d0241877409826a07e4afc2c298b 100644 --- a/src/ieg.h +++ b/src/ieg.h @@ -14,7 +14,6 @@ #define IEG_LTYPE_LANDDEPTH 111 #define IEG_LTYPE_LANDDEPTH_LAYER 112 #define IEG_LTYPE_SEADEPTH 160 -#define IEG_LTYPE_99_MARGIN 1000 /* * Data representation type (Grid Type) [Table 6] diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index f838e2d2015ee27cc2648f36d16ce1ad3ea3e7ff..bfb44cdf0889f059ccc4e28f67fccb9a719eabc3 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -2456,7 +2456,7 @@ void cdf_read_mapping_atts(int ncid, int gmapvarid, int projID, const char *varn { char attstring[CDI_MAX_NAME]; cdfGetAttText(ncid, gmapvarid, "grid_mapping_name", CDI_MAX_NAME, attstring); - cdiGridDefKeyStr(projID, CDI_KEY_MAPPING, (int)(strlen(attstring)+1), attstring); + cdiGridDefKeyStr(projID, CDI_KEY_MAPNAME, (int)(strlen(attstring)+1), attstring); } else { @@ -2643,7 +2643,7 @@ void cdf_define_all_grids(ncgrid_t *ncgrid, int vlistID, ncdim_t *ncdims, int nv int ncid = ncvars[gmapvarid].ncid; const char *gmapname = ncvars[gmapvarid].name; cdf_read_mapping_atts(ncid, gmapvarid, projID, gmapname); - cdiGridDefKeyStr(projID, CDI_KEY_MAPNAME, (int)(strlen(gmapname)+1), gmapname); + cdiGridDefKeyStr(projID, CDI_KEY_MAPPING, (int)(strlen(gmapname)+1), gmapname); gridVerifyProj(projID); } diff --git a/src/stream_cdf_o.c b/src/stream_cdf_o.c index cf2f6ba35304862129e4cf2e08e56caa3803fd50..2b8a0908bb1b189991d40d02840695f005f410ff 100644 --- a/src/stream_cdf_o.c +++ b/src/stream_cdf_o.c @@ -1924,11 +1924,11 @@ static void cdf_def_mapping(stream_t *streamptr, int gridID) { char mapping[CDI_MAX_NAME]; mapping[0] = 0; - cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping); + cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping); if ( mapping[0] ) { char gmapvarname[CDI_MAX_NAME]; gmapvarname[0] = 0; - cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, gmapvarname); + cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, gmapvarname); int fileID = streamptr->fileID; cdf_redef(fileID); diff --git a/src/stream_cgribex.c b/src/stream_cgribex.c index 1433ed583a81b57374961315dc53a4cbb4c04e69..9263609d1a3178f16586c93795d0032555b4698d 100644 --- a/src/stream_cgribex.c +++ b/src/stream_cgribex.c @@ -305,10 +305,10 @@ void cgribexGetGrid(stream_t *streamptr, int *isec2, int *isec4, grid_t *grid, i else if ( gridtype == GRID_GME ) { grid->size = ISEC4_NumValues; - grid->gme.nd = ISEC2_GME_ND; - grid->gme.ni = ISEC2_GME_NI; - grid->gme.ni2 = ISEC2_GME_NI2; - grid->gme.ni3 = ISEC2_GME_NI3; + grid->gme.nd = ISEC2_GME_ND; + grid->gme.ni = ISEC2_GME_NI; + grid->gme.ni2 = ISEC2_GME_NI2; + grid->gme.ni3 = ISEC2_GME_NI3; } else if ( gridtype == GRID_GENERIC ) { @@ -325,6 +325,16 @@ void cgribexGetGrid(stream_t *streamptr, int *isec2, int *isec4, grid_t *grid, i grid->projtype = projtype; } +static +void cgribexGetLevel(int *isec1, int *leveltype, int *level1, int *level2) +{ + *leveltype = ISEC1_LevelType; + *level1 = ISEC1_Level1; + *level2 = ISEC1_Level2; + if ( *leveltype == GRIB1_LTYPE_ISOBARIC ) *level1 *= 100; + else if ( *leveltype == GRIB1_LTYPE_99 || *leveltype == GRIB1_LTYPE_ISOBARIC_PA ) *leveltype = GRIB1_LTYPE_ISOBARIC; +} + static void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, double *fsec2, double *fsec3, int *isec4, size_t recsize, off_t position, int datatype, int comptype, int lmv, int iret) @@ -340,17 +350,17 @@ void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, d int tsteptype = cgribexGetTsteptype(ISEC1_TimeRange); int numavg = ISEC1_AvgNum; - int level1 = ISEC1_Level1; - int level2 = ISEC1_Level2; + int leveltype, level1, level2; + cgribexGetLevel(isec1, &leveltype, &level1, &level2); - /* fprintf(stderr, "param %d %d %d %d\n", param, level1, level2, ISEC1_LevelType); */ + /* fprintf(stderr, "param %d %d %d %d\n", param, level1, level2, leveltype); */ record->size = recsize; record->position = position; record->param = param; record->ilevel = level1; record->ilevel2 = level2; - record->ltype = ISEC1_LevelType; + record->ltype = leveltype; record->tsteptype = (short)tsteptype; grid_t *gridptr = (grid_t*) Malloc(sizeof(*gridptr)); @@ -378,7 +388,7 @@ void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, d else Free(gridptr); - int zaxistype = grib1ltypeToZaxisType(ISEC1_LevelType); + int zaxistype = grib1ltypeToZaxisType(leveltype); if ( zaxistype == ZAXIS_HYBRID || zaxistype == ZAXIS_HYBRID_HALF ) { @@ -388,13 +398,13 @@ void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, d varDefVCT(vctsize, vctptr); } - int lbounds = cgribexGetZaxisHasBounds(ISEC1_LevelType); + int lbounds = cgribexGetZaxisHasBounds(leveltype); if ( datatype > 32 ) datatype = CDI_DATATYPE_PACK32; if ( datatype < 0 ) datatype = CDI_DATATYPE_PACK; varAddRecord(recID, param, gridID, zaxistype, lbounds, level1, level2, 0, 0, - datatype, &varID, &levelID, tsteptype, numavg, ISEC1_LevelType, -1, + datatype, &varID, &levelID, tsteptype, numavg, leveltype, -1, NULL, NULL, NULL, NULL, NULL, NULL); record->varID = (short)varID; @@ -555,16 +565,14 @@ cgribexScanTsConstAdjust(stream_t *streamptr, taxis_t *taxis) if ( taxis->vdate == 0 && taxis->vtime == 0 ) { streamptr->ntsteps = 0; - for (int varID = 0; varID < streamptr->nvars; varID++ ) - { - vlistDefVarTsteptype(vlistID, varID, TSTEP_CONSTANT); - } + for ( int varID = 0; varID < streamptr->nvars; varID++ ) + vlistDefVarTsteptype(vlistID, varID, TSTEP_CONSTANT); } } } -int cgribexScanTimestep1(stream_t * streamptr) +int cgribexScanTimestep1(stream_t *streamptr) { double fsec2[512], fsec3[2], *fsec4 = NULL; int lmv = 0, iret = 0; @@ -573,7 +581,7 @@ int cgribexScanTimestep1(stream_t * streamptr) size_t buffersize = 0; int rstatus; int param = 0; - int level1 = 0, level2 = 0, vdate = 0, vtime = 0; + int leveltype = 0, level1 = 0, level2 = 0, vdate = 0, vtime = 0; DateTime datetime, datetime0 = { LONG_MIN, LONG_MIN }; size_t readsize; unsigned nrecords, recID; @@ -660,10 +668,7 @@ int cgribexScanTimestep1(stream_t * streamptr) param = cdiEncodeParam(ISEC1_Parameter, ISEC1_CodeTable, 255); cdiParamToString(param, paramstr, sizeof(paramstr)); - if ( ISEC1_LevelType == 100 ) ISEC1_Level1 *= 100; - if ( ISEC1_LevelType == 99 ) ISEC1_LevelType = 100; - level1 = ISEC1_Level1; - level2 = ISEC1_Level2; + cgribexGetLevel(isec1, &leveltype, &level1, &level2); gribDateTime(isec1, &vdate, &vtime); @@ -685,7 +690,7 @@ int cgribexScanTimestep1(stream_t * streamptr) { datetime.date = vdate; datetime.time = vtime; - compvar_t compVar = cgribexVarSet(param, level1, level2, ISEC1_LevelType, ISEC1_TimeRange); + compvar_t compVar = cgribexVarSet(param, level1, level2, leveltype, ISEC1_TimeRange); for ( recID = 0; recID < nrecs; recID++ ) { if ( cgribexVarCompare(compVar, streamptr->tsteps[0].records[recID], 0) == 0 ) break; @@ -792,7 +797,7 @@ int cgribexScanTimestep2(stream_t * streamptr) int lmv = 0, iret = 0; off_t recpos = 0; int param = 0; - int level1 = 0, level2 = 0, vdate = 0, vtime = 0; + int leveltype = 0, level1 = 0, level2 = 0, vdate = 0, vtime = 0; DateTime datetime, datetime0 = { LONG_MIN, LONG_MIN }; int varID, gridID; size_t readsize; @@ -882,10 +887,7 @@ int cgribexScanTimestep2(stream_t * streamptr) param = cdiEncodeParam(ISEC1_Parameter, ISEC1_CodeTable, 255); cdiParamToString(param, paramstr, sizeof(paramstr)); - if ( ISEC1_LevelType == 100 ) ISEC1_Level1 *= 100; - if ( ISEC1_LevelType == 99 ) ISEC1_LevelType = 100; - level1 = ISEC1_Level1; - level2 = ISEC1_Level2; + cgribexGetLevel(isec1, &leveltype, &level1, &level2); gribDateTime(isec1, &vdate, &vtime); @@ -930,7 +932,7 @@ int cgribexScanTimestep2(stream_t * streamptr) datetime.date = vdate; datetime.time = vtime; - compvar_t compVar = cgribexVarSet(param, level1, level2, ISEC1_LevelType, ISEC1_TimeRange); + compvar_t compVar = cgribexVarSet(param, level1, level2, leveltype, ISEC1_TimeRange); for ( recID = 0; recID < nrecords; recID++ ) { @@ -1040,7 +1042,7 @@ int cgribexScanTimestep(stream_t * streamptr) size_t buffersize = 0; int fileID; int param = 0; - int level1 = 0, level2 = 0, vdate = 0, vtime = 0; + int leveltype = 0, level1 = 0, level2 = 0, vdate = 0, vtime = 0; DateTime datetime, datetime0 = { LONG_MIN, LONG_MIN }; int vrecID, recID; bool warn_numavg = true; @@ -1135,10 +1137,7 @@ int cgribexScanTimestep(stream_t * streamptr) param = cdiEncodeParam(ISEC1_Parameter, ISEC1_CodeTable, 255); cdiParamToString(param, paramstr, sizeof(paramstr)); - if ( ISEC1_LevelType == 100 ) ISEC1_Level1 *= 100; - if ( ISEC1_LevelType == 99 ) ISEC1_LevelType = 100; - level1 = ISEC1_Level1; - level2 = ISEC1_Level2; + cgribexGetLevel(isec1, &leveltype, &level1, &level2); gribDateTime(isec1, &vdate, &vtime); @@ -1185,7 +1184,7 @@ int cgribexScanTimestep(stream_t * streamptr) datetime.date = vdate; datetime.time = vtime; - compvar_t compVar = cgribexVarSet(param, level1, level2, ISEC1_LevelType, ISEC1_TimeRange); + compvar_t compVar = cgribexVarSet(param, level1, level2, leveltype, ISEC1_TimeRange); for ( vrecID = 0; vrecID < nrecs; vrecID++ ) { @@ -1923,7 +1922,7 @@ void cgribexDefLevel(int *isec1, int *isec2, double *fsec2, int zaxisID, int lev double dum; if ( level < 32768 && (level < 100 || modf(level/100, &dum) > 0) ) - grib_ltype = GRIB1_LTYPE_99; + grib_ltype = GRIB1_LTYPE_ISOBARIC_PA; else level = level/100; diff --git a/src/stream_grb.c b/src/stream_grb.c index ba711efbc95fceca94ad6c8ec86183a579ad0552..5d1593412d42d1073d3eaf54db7fc8d40a46969a 100644 --- a/src/stream_grb.c +++ b/src/stream_grb.c @@ -27,6 +27,7 @@ int grib1ltypeToZaxisType(int grib_ltype) case GRIB1_LTYPE_ATMOSPHERE: zaxistype = ZAXIS_ATMOSPHERE; break; case GRIB1_LTYPE_MEANSEA: zaxistype = ZAXIS_MEANSEA; break; case GRIB1_LTYPE_99: + case GRIB1_LTYPE_ISOBARIC_PA: case GRIB1_LTYPE_ISOBARIC: zaxistype = ZAXIS_PRESSURE; break; case GRIB1_LTYPE_HEIGHT: zaxistype = ZAXIS_HEIGHT; break; case GRIB1_LTYPE_ALTITUDE: zaxistype = ZAXIS_ALTITUDE; break; diff --git a/src/stream_gribapi.c b/src/stream_gribapi.c index c5e69b5f271d3943f0ba8560092f8b0048f770ff..759b854522cb8764b21bcf6fea1f99d9a8b3afc7 100644 --- a/src/stream_gribapi.c +++ b/src/stream_gribapi.c @@ -276,9 +276,9 @@ void grib1GetLevel(grib_handle *gh, int *leveltype, int *lbounds, int *level1, i { double dlevel; GRIB_CHECK(grib_get_double(gh, "level", &dlevel), 0); //2 byte - if ( *leveltype == 100 ) dlevel *= 100; + if ( *leveltype == GRIB1_LTYPE_ISOBARIC ) dlevel *= 100; if ( dlevel < -2.e9 || dlevel > 2.e9 ) dlevel = 0; - if ( *leveltype == GRIB1_LTYPE_99 ) *leveltype = 100; + if ( *leveltype == GRIB1_LTYPE_99 || *leveltype == GRIB1_LTYPE_ISOBARIC_PA ) *leveltype = GRIB1_LTYPE_ISOBARIC; *level1 = (int) dlevel; *level2 = 0; @@ -2449,7 +2449,7 @@ void gribapiDefLevel(int editionNumber, grib_handle *gh, int zaxisID, int levelI { double dum; if ( level < 32768 && (level < 100 || modf(level/100, &dum) > 0) ) - grib_ltype = GRIB1_LTYPE_99; + grib_ltype = GRIB1_LTYPE_ISOBARIC_PA; else level /= 100; diff --git a/src/util.c b/src/util.c index 42c62a9c28747cc9ffb1a465517efd7b1e12dd70..8125f8e024eb4b48357c21dccb1d462ba6c7325a 100644 --- a/src/util.c +++ b/src/util.c @@ -151,7 +151,7 @@ char* cdiUnescapeSpaces(const char* string, const char** outStringEnd) return result; } -#ifdef HAVE_DECL_UUID_GENERATE +#if defined (HAVE_DECL_UUID_GENERATE) && defined (HAVE_UUID_UUID_H) #include <sys/time.h> #include <uuid/uuid.h> void cdiCreateUUID(unsigned char *uuid) @@ -178,7 +178,7 @@ void cdiCreateUUID(unsigned char *uuid) uuid_generate(uuid); setstate(caller_rand_state); } -#elif defined (HAVE_DECL_UUID_CREATE) +#elif defined (HAVE_DECL_UUID_CREATE) && defined (HAVE_UUID_H) typedef uint8_t u_int8_t; typedef uint16_t u_int16_t; typedef uint32_t u_int32_t; diff --git a/src/zaxis.c b/src/zaxis.c index 9ea9c50846a67d36be7ee792e0f00571c9bf37fd..f116c0967d3a9c89454136732dc75804242f4fd2 100644 --- a/src/zaxis.c +++ b/src/zaxis.c @@ -1331,7 +1331,7 @@ int zaxisDuplicate(int zaxisID) } static -void zaxisPrintKernel(zaxis_t *zaxisptr, int index, FILE *fp) +void zaxisPrintKernel(zaxis_t *zaxisptr, FILE *fp) { xassert(zaxisptr); @@ -1344,9 +1344,6 @@ void zaxisPrintKernel(zaxis_t *zaxisptr, int index, FILE *fp) int nbyte; int nbyte0 = 0; - fprintf(fp, "#\n"); - fprintf(fp, "# zaxisID %d\n", index); - fprintf(fp, "#\n"); fprintf(fp, "zaxistype = %s\n", zaxisNamePtr(type)); fprintf(fp, "size = %d\n", nlevels); if ( nlevels == 1 ) @@ -1457,21 +1454,21 @@ void zaxisPrintKernel(zaxis_t *zaxisptr, int index, FILE *fp) } -void zaxisPrint(int zaxisID, int index) +void zaxisPrint(int zaxisID) { zaxis_t *zaxisptr = zaxis_to_pointer(zaxisID); - zaxisPrintKernel(zaxisptr, index, stdout); + zaxisPrintKernel(zaxisptr, stdout); } static -void zaxisPrintP ( void * voidptr, FILE * fp ) +void zaxisPrintP(void * voidptr, FILE * fp) { zaxis_t *zaxisptr = ( zaxis_t * ) voidptr; xassert ( zaxisptr ); - zaxisPrintKernel(zaxisptr, zaxisptr->self, fp); + zaxisPrintKernel(zaxisptr, fp); }