Hi,
We're pleased to announce that version 2.4 of netCDF is now available.
You can read the Release Notes with a WWW browser from the URL
http://www.unidata.ucar.edu/packages/netcdf/release-notes.html
or read the rest of this message for a text version of the Release Notes.
Russ Rew
Steve Emmerson
Glenn Davis
Harvey Davies
UCAR Unidata Program
http://www.unidata.ucar.edu
____________________________________________________________________________
NetCDF 2.4 Release Notes
Version 2.4 of Unidata's netCDF software is now available via anonymous FTP
from
ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf.tar.Z
Instructions for installation are contained in the INSTALL file that
accompanies the software.
This release provides a new version of the netCDF software that incorporates
support for new platforms and updated versions of previously-supported
platforms, provides new optimizations, improves the documentation,
incorporates fixes for reported bugs, and includes other miscellaneous
improvements. Version 2.4 is intended to be a stable release incorporating
bug fixes and improvements that do not 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 (IBM Powerstation)
* HPUX-9.05 (HP PA-RISC)
* IRIX-5.3 (SGI Indigo2)
* IRIX64-6.1 (SGI Power Indigo2)
* MSDOS using gcc, f2c, and GNU make (IBM PS/2, 386)
* OpenVMS-6.2 (Digital MicroVAX)
* OSF1-3.2 (Digital Alpha)
* OS/2 2.1 (Gateway, 486)
* SunOS-4.1.4 (Sun SPARCstation)
* SunOS-5.4, SunOS-5.5 (Sun SPARCstation)
* ULTRIX-4.3 (Digital VAXstation)
* ULTRIX-4.5 (Digital DECstation)
* UNICOS-8 (Cray Y-MP, T3D)
* Windows NT-3.51 (Pentium)
In all cases tests of the C and Fortran interfaces were successful. The C++
interface test worked on all platforms except OpenVMS and UNICOS, for which
we had no access to a suitable C++ compiler.
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.
____________________________________________________________________________
Optimizations
Significant optimizations are included for Cray UNICOS platforms. The Cray
optimizations use the Cray FFIO library with buffering user-configurable
through an environment variable. These optimizations make netCDF on the Cray
competitive with Fortran binary I/O. Thanks to Jeff Kuehn and Steve Luzmoor
for contributing these optimizations.
____________________________________________________________________________
Documentation Improvements
The NetCDF User's Guide has been significantly revised, including some
important additions. Changes include the following:
* a new appendix that formally specifies the netCDF format, independent
of its implementation;
* a new section on limitations of the netCDF data model and
implementation;
* a new section on compiling and linking with the netCDF library;
* a new section on UNICOS optimization;
* a new section discussing the correspondence between CDL, netCDF,
Fortran, and C data types;
* clarification of, and some changes to, recommended standard attribute
conventions;
* clarification of cross-section access, strided access, and mapped
access to arrays;
* better embedding of URLs, so the derived HTML form of the User's Guide
has working links to external documents and references; and
* a more useful Index.
The new NetCDF User's Guide is included in the netCDF 2.4 source
distribution, but is also available independently in three forms:
HTML
as a set of HTML documents for viewing with a web browser.
PostScript
as a compressed PostScript file. When uncompressed, this is suitable
for printing or viewing with a PostScript viewer. (In the PostScript
file, the Table of Contents is printed last, so please reorder before
duplicating.)
Info files
as a compressed tar file of Info files, suitable for viewing with an
Info documentation browsing system such as xinfo or GNU info.
The supplementary class documentation for the C++ interface has also been
revised and expanded.
____________________________________________________________________________
Other Improvements
Limitations in the ncgen utility program on the maximum number of variables,
dimensions, or attributes have been eliminated. The size of the ncgen
executable is now significantly smaller.
The ncdump program now uses the underscore character (_) 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.
This release increases advisory limits for the maximum number of dimensions,
variables, and attributes in a netCDF file, to accommodate users who found
the old limits constraining. These limits are still advisory, to make
applications easier to write when dynamic memory allocation would be awkward
or impractical (e.g. in Fortran applications). The maximum number of
dimensions per netCDF file has been increased from 32 to 100. The maximum
number of variables per netCDF file has been increased from 512 to 2000. The
maximum number of attributes per variable has been increased from 512 to
2000.
The experimental C++ interface has been integrated into the netCDF
distribution and is now built by default as part of the installation, if a
suitable C++ compiler is available. C++ interface changes include:
* New get_rec(), put_rec(), and set_rec() member functions were added to
the NcVar class to make it easier to step through records and access
just one record of variable data.
* A new get_index() member function was added to the NcVar class that
finds the record number of the first variable that matches a specified
key.
* The NcFile class hierarchy was simplified in a backward-compatible way,
to make it easier for users to derive their own specialized netCDF file
classes.
Thanks to Dan Schmitt of Texas A&M University for contributing 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 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.
____________________________________________________________________________
Bug Fixes
The 2.4 release contains fixes for bugs in the previous 2.3.2 release. Below
we list the most significant fixes. A more complete list is in the CHANGES
file in the distribution.
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.
* 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
* The ncsync() function was changed to re-read the header on files opened
for writing in addition to re-reading the header on files opened for
read-only access, as in the previous version.
* New names of variables and dimensions renamed in define mode will now
be immediately recognized.
* 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.
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.
* NcAtt::remove() member function now checks to make sure in define_mode
first, before deleting attribute.
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.
* Made ncgen generate an error message when the type of the _FillValue
attribute doesn't match the type of the associated variable. The
library is supposed to catch all these, but doesn't for record
variables.
* Fixed bug with ncgen generating C or Fortran programs that didn't use
".nc" file extensions on created netCDF files.
* Use of the "-f" option of ncdump for annotating with full attributes
caused multidimensional character arrays to be incorrectly annotated
(the comma delimiter was missing).
* Some ncdump option combinations caused memory leaks.
* Fixed ncdump bug that appeared on some platforms when dumping a
0-length attribute. Now ncdump will represent a 0-length attribute of
any type as the empty string, since CDL has no syntax for 0-length
attributes.
____________________________________________________________________________
Providing Feedback
Questions or suggestions about this release may be sent to
<support@xxxxxxxxxxxxxxxx>, mentioning the platform and version of the
software.
____________________________________________________________________________