Beta release of netCDF Version 2.3 available


Version 2.3-beta of the netCDF software is now available, via anonymous FTP

        file:   pub/netcdf/netcdf-2.3-beta.tar.Z

We have so far verified that building and testing version 2.3-beta works
`out of the box' on the following platforms:

    SPARCstation 2              SunOS 4.1.3     cc or acc       f77
    SPARCstation 10             Solaris 2.1     cc              f77
    DECstation 3000             ULTRIX V4.3     cc              f77
    IBM RS-6000                 AIX 3.2         cc              f77
    CRAY Y-MP                   UNICOS 6.1.6    cc              cf77
    HP-7000                     HPUX 9.0        cc or c89       fort77
    SGI Iris Indigo Elan        IRIX 4.0.5F     cc              f77

We know that there are still some (relatively small) problems building the
new version under MSDOS, OS/2, NeXT, and probably VMS.  These will likely be
fixed before the general netcdf-2.3 release.  There are also likely to be
some bugs that will be uncovered by users of the beta release.  Please send
all reports of problems with the new release, bug fixes, or patches for
other platforms to support@xxxxxxxxxxxxxxxxx

                          What's New in netCDF 2.3

Subsampling along specified dimensions (using `strides') is one of the
commonly-asked-for features supported by new interfaces for generalized
hyperslab access.  In addition, these interfaces permit accessing data that
is not contiguous in memory.  In a generalized hyperslab, an index mapping
vector is used to define the mapping between points in the generalized
hyperslab and the memory locations of the corresponding values.

There are also some new interfaces that can be used to write, read, and
inquire about records, where a record may contain multiple variables of
different types and shapes.  Where before you had to access a record's
worth of data using multiple calls, now you may instead use a single

New optimizations for the library have resulted in significant speedups for
accessing cross-sections involving non-contiguous data.  In some cases,
speedups by a factor of 40 are achieved with the new implementation of I/O,
and the new design isolates the I/O layer to facilitate other
platform-specific optimizations.

The ncdump utility now supports several new command-line options
including the ability to specify for which variables data values will be
output, to provide brief annotations in the form of CDL comments to
identify data values for large multidimensional variables, or to provide
full annotations in the form of trailing CDL comments for every data

The way in which all the default fill values are defined in the FORTRAN
interface was changed, so that now the FORTRAN default fill values will
always be the same as the C default values.  This eliminates the need for
some platform-specific files where these constants were previously defined.

The new release is intended to be backward-compatible with previous
releases, adding a few new interfaces but not changing existing interfaces.
The file format for netCDF files remains the same.  The one change that
might be a problem for some users is a new definition for the default
floating-point fill values (FILL_FLOAT and FILL_DOUBLE in the C interface,
FILFLOAT and FILDOUB in FORTRAN interface).  Previously these had been
defined to be values that on writing would map into the XDR representation
for IEEE infinity.  The idea was that although the values that had this
property might vary from platform to platform, the on-disk representation
for missing floating-point data would at least be the same for all
platforms.  But such fill values turn out to be an obstacle to writing
portable generic netCDF applications, since there is still no portable way
to determine if a floating-point value is an IEEE NaN (Not-a-Number), and
using ordinary comparisons with such numbers can produce surprising results.
Other problems included an undesirable dependence not only on the platform
but also on the compilation environment.  This led to the definition of new,
default floating-point fill values that are very large constants, but still
within the floating-point range.  These are intended to be portable across
all platforms and compilation environments.  If you wish, however, to obtain
the old, non-portable floating-point fill values, then this is possible by
following the instructions in the INSTALL file.

Many bugs have been fixed, portability has been improved, and the
installation has been greatly simplified for most systems.  The installation
procedure on UNIX platforms was changed to use the GNU configure approach to
constructing makefiles with a configure shell script.

The suggested extension for netCDF files has been changed from `.cdf' to
`.nc', in order to avoid a clash with the NASA CDF file extension.  Although
the old extension is still supported in a backward compatible way (ncgen -n
still produces `.cdf' files), new netCDF files should use the new filename
extension, where practical.  A new `-b' flag to ncgen generates files with
the new extension.

An draft prototype C++ interface has been added.  See the c++ subdirectory
for the implementation, an example of the use, and some preliminary minimal

The code has been ANSI-ized, although it can still be built with non
ANSI-compliant C compilers such as the SunOS /bin/cc.  Many `const'
declarations were added to the interfaces and documentation, to specify
where functions do not change values through pointers.

Many changes were made to the User's Guide and man pages to improve the
documentation and describe the new interfaces.  A new Appendix includes some
answers to frequently asked questions.  Among the changes, it is now made
clearer in the User's Guide that a NULL pointer can be provided for any
return parameter from an inquire function to indicate where a value should
not be returned, and that inquire functions do not incur any I/O.

Russ Rew                                        Unidata Program Center
russ@xxxxxxxxxxxxxxxx                           UCAR, PO Box 3000
                                                Boulder, CO 80307-3000