The function NF)_OPEN opens an existing netCDF dataset for access, with a performance tuning parameter.
INTEGER FUNCTION NF__OPEN(CHARACTER*(*) PATH, INTEGER OMODE, INTEGER CHUNKSIZEHINT, INTEGER ncid)
PATH
OMODE
Otherwise, the creation mode is NF_WRITE, NF_SHARE, or
OR(NF_WRITE,NF_SHARE). Setting the NF_WRITE flag opens the dataset with
read-write access. ("Writing" means any kind of change to the dataset,
including appending or changing data, adding or renaming dimensions,
variables, and attributes, or deleting attributes.) The NF_SHARE flag
is appropriate when one process may be writing the dataset and one or
more other processes reading the dataset concurrently; it means that
dataset accesses are not buffered and caching is limited. Since the
buffering scheme is optimized for sequential access, programs that do
not access data sequentially may see some performance improvement by
setting the NF_SHARE flag.
CHUNKSIZEHINT
Because of internal requirements, the value may not be set to exactly the value requested. The actual value chosen is returned by reference.
Using the value NF_SIZEHINT_DEFAULT causes the library to choose a default. How the system chooses the default depends on the system. On many systems, the "preferred I/O block size" is available from the stat() system call, struct stat member st_blksize. If this is available it is used. Lacking that, twice the system pagesize is used.
Lacking a call to discover the system pagesize, we just set default chunksize to 8192.
The chunksize is a property of a given open netcdf descriptor
ncid, it is not a persistent property of the netcdf dataset.
ncid
NF__OPEN returns the value NF_NOERR if no errors occurred. Otherwise, the returned status indicates an error. Possible causes of errors include:
Here is an example using NF__OPEN to open an existing netCDF dataset named foo.nc for read-only, non-shared access:
INCLUDE 'netcdf.inc' ... INTEGER NCID, STATUS, CHUNKSIZEHINT ... CHUNKSIZEHINT = 1024 STATUS = NF_OPEN('foo.nc', 0, CHUNKSIZEHINT, NCID) IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)