Beta release of netCDF 2.4 now available

Hi,

A 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-2.4-beta.tar.Z (a link to the most recent
beta release).  The remainder of this message is a text version of the
release notes document that can be viewed with a web browser at

    http://www.unidata.ucar.edu/packages/netcdf/release-notes.html

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 next year.  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.0
   * 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

In each case the C, Fortran, and C++ interfaces were tested with
vendor-provided compilers.  (No C++ compiler was available for testing on
UNICOS.  The netCDF C++ interface doesn't work yet on IRIX64.)

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 have incorporated some changes that were
necessary for porting to Windows NT.

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 new release integrates the use of the `nclong' typedef into the netCDF
implementation.  This means that 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.  All programs that use NC_LONG
data should 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)

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
<support@xxxxxxxxxxxxxxxx>.  Please mention 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.

______________________________________________________________________________

Russ Rew                                           UCAR Unidata Program
russ@xxxxxxxxxxxxxxxx                              http://www.unidata.ucar.edu



  • 1995 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: