NetCDF 2.4 Beta6 Release Notes A new beta release of netCDF 2.4 is now available in source form via anonymous FTP from the directory ftp://ftp.unidata.ucar.edu/pub/netcdf/. The compressed tar file is netcdf-beta.tar.Z While work continues on the netCDF 2.4 documentation and testing, this beta release is being made available to get feedback and to provide fixes and optimizations, so users who need them won't have to wait until the general release. This release provides a test version of the netCDF software that incorporates support for new platforms and updated versions of previously-supported platforms, provides new optimizations, incorporates fixes for reported bugs, and improves ease of installation. We're soliciting help and feedback from interested users to test this beta release and report problems or incompatibilities. Feedback and fixes from the beta release will be incorporated into a general release of netCDF version 2.4. The introduction of significant new features to netCDF will be delayed until version 3.0, planned for the 1996. Version 2.4 is intended to be a stable release incorporating bug fixes and improvements that don't involve significant additions to the netCDF data model or interfaces. ---------------------------------------------------------------------------- Platforms This release has been built and tested on the following platforms: * AIX-4.1 * HPUX-9.05 * IRIX-5.3 * IRIX64-6.1 * OSF1-3.0 a.k.a. Digital UNIX * SUNOS-4.1.4 * SUNOS-5.4 a.k.a. Solaris-2.4 * ULTRIX-4.4 * UNICOS-8 * Windows NT-3.51 In each case the C, Fortran, and C++ interfaces were tested with vendor-provided compilers. (No C++ compiler was available for testing on UNICOS.) We haven't yet ported the release to or tested it on OpenVMS, MSDOS, or OS/2, but we intend that it will work on those platforms by the time the general release is ready. We are hoping that interested users will help test the release on Linux, BSDI, NeXTOS, MacOS, and other platforms to which we currently have no access, and send us modifications in a form that we can incorporate into the general release. We're also still working on revising the NetCDF User's Guide, C++ interface documentation, and WWW documents, so new versions of these are not yet available in the 2.4 beta release. ---------------------------------------------------------------------------- What's New? The beta6 release contains fixes for * a bug in not recognizing the new names of variables and dimensions renamed in define mode; * a bug in ncdump that caused it to print the explicit fill value instead of "_" for floating-point variables that had a negative "_FillValue" attribute; * a bug in using the "-f" option of ncdump for annotating with full attributes, in which multidimensional character arrays were incorrectly annotated (the comma delimiter was missing); * memory leaks in ncdump for some option combinations. The beta5 release includes improvements to the ncgen utility program that eliminate limitations on the maximum number of variables, dimensions, or attributes. In addition, the ncgen executable is now significantly smaller. The beta4 release differs from the beta2 (and short-lived beta3) releases in including some Windows NT-specific files that had been inadvertantly omitted (libsrc/winnt_io.h, util/getopt.c, ncgen/msoft32.mak), minor changes necessary for porting to IRIX64-6.1, and changes to configure to use the c89 compiler in preference to cc on AIX platforms. The new release integrates the use of the `nclong' typedef into the netCDF implementation. This means that C/C++ programs on platforms with sizeof(long) > sizeof(int) (e.g. the DEC Alpha) will have to be recompiled and must use `nclong' as the variable type corresponding to NC_LONG data. All programs that use NC_LONG data should also use the `nclong' data type to declare such data for portability. The ncdump program now uses `_' to display fill-values (data that hasn't been written yet or missing values). The ncgen utility recognizes these, as well as the old `FloatInf' and `DoubleInf' symbols for backward compatibility. A value will be considered a fill-value if it is equal to the _FillValue attribute, where the equality test uses machine-epsilon for floating-point types. If no _FillValue attribute is defined, values are tested against the default _FillValue for the appropriate type, except that no default _FillValue is assumed for byte data. (Does anyone still need ncdump to display `FloatInf' or `DoubleInf' instead of `_' for default fill-values? If so, we might add an ncdump option flag.) We increased the sizes of MAX_NC_DIMS (from 32 to 100), MAX_NC_ATTRS (from 512 to 2000), and MAX_NC_VARS (from 512 to 2000) to accommodate users who are finding the old limits constraining. These limits are still advisory, to make applications easier to write when dynamic memory allocation would be awkward or impractical. New platforms supported * Fixes for 64-bit platforms: DEC Alpha/OSF-1, IRIX64. Programs that use netCDF 2.4 on 64-bit platforms will have to be recompiled. Data of type long should now be declared using the nclong typedef for program portability to 64-bit platforms. * Linux (this needs to be tested) * gcc and g++ * Windows NT (thanks to Tomas Johannesson, National Energy Authority, Iceland and Donald Denbo, Pacific Northwest Laboratory) Cray optimizations * Significant speedups on Crays * Uses Cray FFIO library * Buffering is user-configurable through an environment variable * Optimizations make netCDF competitive with Fortran binary I/O * Thanks to Jeff Kuehn of NCAR/SCD C++ interface additions and changes * Added sync() member functions for variables and dimensions, so two processes can communicate through a netCDF file, with a reader noticing when a writer has added a new variable or dimension * Added get_rec(), put_rec(), set_rec() member functions that make it easy to step through records, and access just one record's worth of variable data * Added get_index() member function that finds the record number of the first variable that matches a specified key * Changed the NcFile class hierarchy in a backward-compatible way, to make it easier for users to derive their own specialized netCDF file classes * Integrated C++/ subdirectory into configuration & build mechanism * Thanks to Dan Schmitt, Texas A&M University for many of these additions In the C++ interface, you can no longer use unadorned integer constants to put attribute values, because it's ambiguous whether you intend the attribute type to be byte, short, or long. You can get the right attribute type by casting or using a variable value of the appropriate type. Another similar problem led to the removal of as_int() member functions, because of ambiguity and portability problems. You now have to use the appropriate one of as_long(), as_short(), or as_nclong() to access a variable value as an integer. Similarly, we removed overloading on int and int* data types where it would encourage writing nonportable programs that behave differently on machines with different int sizes. We may be able to find a way to support as_int() portably, if enough people are inconvenienced by this change. ---------------------------------------------------------------------------- What's Fixed? C library fixes: * Fixed the `xdr_NC_fill' bug in ncrecput(), which misbehaved if invoked after reading a non-record variable. * Fixed ncredef() bug that caused a segmentation violation from dereferencing a null pointer if ncredef() was called immediately after nccreate(). * Fixed bug that occurred when reentering definition mode to add a new record variable to a file that had only one record variable of type NC_BYTE, NC_CHAR, or NC_SHORT. In these cases, a special-case optimization was used to avoid padding each record value out to four bytes, but the redefinition was not accounting for this optimization. * For VMS platforms, files opened with "ctx=stm" keyword to use stream mode. This will permit reading netCDF files from VMS system that have been FTPd in binary mode from a UNIX system without modifying RMS attributes after file transfer. * Fixed bugs so ncvarid() and ncdimid() will work on a variable or dimension that has been renamed to a shorter name while in data mode. * Makefile and configuration fixes for more robust adaptation to various platforms Fortran library fixes: * Improved error handling from the Fortran interface, where failures from C calls were occasionally not reflected in Fortran error returns. In particular, the library now catches attempts to retrieve information when no attributes, dimensions, or variables are defined yet. Attempts to rename components in files opened for read-only access now fail properly. * Improved error message from Fortran interface when user forgets to include netcdf.inc and then calls NCCRE or NCOPN. * Corrected a few bugs in the Fortran interface module (fortran/jackets.src) dealing with interconversion between Fortran INTEGERs and C longs. * Added SINGLE_PRECISION to `fortran/fortc' system and modified file fortran/ftest.src accordingly. C++ library fixes: * Several memory leaks were plugged * Tested that file was not in define mode when NcFile::sync() is called. * Changed return type of NcVar::edges() from const long* to long*, to make the result modifiable for immediate use in accessing array sections. * Fixed bug in NcVar::set_cur() to allow extending along record dimension. * Fixed off-by-one problem with strings. * Made changes necessary to work with g++. * Fixed a bug in NcVar::get_att(NcToken) member, to make it return 0 for attributes that don't exist. * NcAtt::is_valid() had been returning FALSE for global attributes, but this fix makes it return TRUE when appropriate. Utility program fixes: * Fixed a problem with ncgen -f that showed up on AIX, where double-precision constants like 1.5d+30 were being stored using single-precision representations, such as 1.5e+30. * Fixed ncgen to accept null-string attributes. * Fixed ncgen to print an error message when a duplicate attribute for a variable is declared in CDL input. * Fixed ncgen handling of hexadecimal notation for byte constants, so now '\x80' works as documented for specifying a byte value, for example. * Fixed ncgen to permit variable, dimension, and attribute names to contain the string "netcdf". * Incorporated Brian Lincoln's fix for the way ncgen handles multidimensional strings, providing padding in the most rapidly-varying dimension instead of just concatenating the strings. ---------------------------------------------------------------------------- What's Missing or Still Broken? Continuing to use the netCDF library after repeated memory allocation failures can cause problems, because after a memory allocation failure, the library may not release memory allocated before the failure. The C++ interface needs a more extensive test program and better documentation. The management of ncvalues memory blocks in the C++ interface needs work; it currently doesn't match the documentation. There are still no generalized hyperslab interfaces in the C++ interface corresponding to the ncvarputg() and ncvargetg() functions in the C interface. The C++ library should use the standard bool type, throw a bad_alloc exception on new failures, and make better use of templates. The C++ typedef for `ncbyte' as `unsigned char' is inconsistent with the default NC_BYTE fill-value of `-127'. Another problem with not specifying whether NC_BYTE data is signed or unsigned is ambiguities in the meaning of `valid_min' and `valid_max' attributes for NC_BYTE variables. NetCDF really needs separate types for signed and unsigned bytes, but that will have to wait for a later release. ---------------------------------------------------------------------------- Providing Feedback Feedback on this beta release may be sent to , mentioning the platform and version of the software. Later beta versions may be released in the interim before the 2.4 general release, so please note the beta version in the RELEASE_NOTES file when you report a problem. ----------------------------------------------------------------------------