NetCDF Version 3.4
An update to netCDF version 3.3.1 is now available.
The major improvements are large file support, performance enhancements, and improved
Cray platform support. Version 3.4 also includes some bug fixes.
The netCDF 3.4 release is available in source form as a compressed tar file
from <ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf.tar.Z>.
Binary versions are available for many platforms from <ftp://ftp.unidata.ucar.edu/pub/binary/>.
On systems that support very large files (exceeding 2 Gbytes), such as IRIX
6.x or SunOS 5.6 with the large file compilation environment, it is possible
to create and access very large netCDF files with version 3.4. The remaining
size constraints are that the file offset to the beginning of the record variables
(if any) must be less than 2 Gbytes, and the relative offset to the start of
each fixed length variable or each record variable within a record must be less
than 2 Gbytes. Hence, a very large netCDF file might have
- no record variables, some ordinary fixed-length variables, and a very large
(exceeding 2 Gbytes) fixed-length variable; or
- some ordinary fixed-length and record variables, and a very large record
variable; or
- some ordinary fixed-length and record variables and a huge number of records.
If you create very large netCDF files, remember that they will only be usable
on other systems that support very large files. The netCDF file format has not
changed, so files less than 2 Gbytes in size are still writable and readable on
all systems on which netCDF is supported.
Significant performance improvements in version 3.4 may be seen when calling
nc_endef or nf_endef on NFS-mounted file systems. Another performance-related
enhancement is the addition of three new tuning interfaces for C and Fortran
that permit specifying file layout and buffer size parameters when creating,
opening, or changing the header of a file. In particular, it is possible to
reserve some extra space in the file header and fixed-length sections of a netCDF
file so that later additions of new variables, dimensions, or attributes may
avoid copying the data. See the reference documentation for details on these
new interfaces.
Full support for netCDF-2 interfaces is still included.
Bug Fixes
- Fixed a problem using netCDF on IRIX 6.x with NFS-mounted directories.
- The error message associated with NC_EBADTYPE now explains that it applies
to a "_FillValue type mismatch".
- The values of the version 2 Fortran error codes have been modified to make
the version 2 Fortran interface more backward compatible at the source level.
- Fixed a version 2 Fortran compatibility bug: NCVGTG, NCVGGC, NCVPTG, and
NCVPGC didn't work according to the version 2 documentation if the innermost
mapping value (IMAP[1]) was zero (indicating that the netCDF structure of
the variable should be used).
- Memory leaks in the C++ interface NcVar::as_*() member functions and NcFile::add_var()
member function are fixed. The documentation no longer indicates incorrectly
that the library manages value blocks that the user is actually responsible
for deleting.
- In ncgen, multidimensional character variables are now padded to the length
of the last dimension, instead of just concatenating them. This restores an
undocumented but convenient feature of ncgen under netCDF-2. Also, a syntax
error is now reliably reported if the netCDF name is omitted in CDL input.
- Fortran and C code generated by ncgen for netCDF components whose names
contain "-" characters will now compile and run correctly instead
of causing syntax errors.
- Fixed a bug in ncgen handling a global _FillValue attribute.
Portability Improvements
- Fixed ncx_cray.c to work on all CRAY systems, not just CRAY1. Reworked USE_IEG,
which was incorrect. Reworked short support. Now USE_IEG and otherwise both
pass the t_ncx test.
- Added support for NEC SUPER-UX 7.2.
- Added support for systems whose Fortran INTEGER*1 and INTEGER*2 types are
equivalent to the C "long" type but whose C "int" and
"long" types differ. An example of such a system is the NEC SX-4
with the "-ew" option to the f90 compiler.
- To better support parallel systems, static and malloc'ed scratch areas
which were shared in the library were eliminated. These were made private
and on the stack where possible. To support this, the macros ALLOC_ONSTACK
and FREE_ONSTACK are defined in onstack.h.
- Included a workaround for a problem using gcc under SunOS 4 systems to use
fixed prototypes when building netCDF.
Performance Enhancements
- Added performance tuning "underbar underbar" interfaces nc__open(),
nc__create(), and nc__enddef() for C and similar interfaces for Fortran. The
new functions have extra parameters which allow control of the netCDF internals
with respect to I/O buffering and file layout, and permit reserving space
in the header and fixed-size variable sections for later additions that avoid
copying.
- The buffered I/O system implementation in posixio.c was reimplemented to
limit the number and size of read() or write() system calls and use greater
reliance on memory to memory copy. This saves a great deal of wall clock time
on slow (NFS) file systems, especially during nc_endef().
Miscellaneous Changes
- The ncdump utility now displays byte values as signed, even on platforms
where the type corresponding to a C char is unsigned (SGI, for example). Also
the ncdump and ncgen utilities have been updated to display and accept byte
attributes as signed numeric values (with a "b" suffix) instead
of using character constants.
- Corrected some casts in the library so that all phases of the arithmetic
computing file offsets occurs with "off_t" type. This allows certain
larger netCDF files to be created and read on systems with larger (64bit)
off_t.
- The library now allows "." characters in names for variables,
dimensions, and attributes, as well as "_" and "-" characters.
A zero length name "" is explicitly not allowed. The ncgen utility
will now permit "." characters in CDL names as well.
- The C++ interface has been updated so that the deprecated "nclong"
typedef should no longer be required, and casts to "nclong" no longer
necessary. Just use "int" or "long" as appropriate. "nclong"
is still supported for backwards compatibility.
Platforms Tested
The netCDF 3.4 release has been built and tested on the following platforms. See
the INSTALL file accompanying the release for details.
- AIX-4.2
- BSD/OS 3.0
- HPUX-10.20
- IRIX-5.3, IRIX-6.2, IRIX64-6.2, IRIX64-6.4
- Linux 2.0.31
- OSF1-4.0
- SunOS-4.1.4, SunOS-5.6 (Sparc and i386)
- SUPER-UX 7.2 (NEC SX-4)
- ULTRIX-4.4
- UNICOS-9.0 (C90, T3D), 9.1 (T90), 10.0 (J90), UNICOS/mk 2.0 (T3E)