Go to the previous, next section.
The function ncvarget (or NCVGT or NCVGTC for
FORTRAN) reads a hyperslab of values from a netCDF variable of an open
netCDF file. The hyperslab is specified by giving a corner and a vector
of edge lengths. The values are read into consecutive locations with
the last (or first for FORTRAN) dimension of the hyperslab varying
fastest. The netCDF file must be in data mode.
In case of an error, ncvarget returns -1; NCVGT returns a
nonzero value in rcode. Possible causes of errors include:
int ncvarget(int ncid, int varid, const long start[], const long count[],
void *values);
ncid
ncopen or
nccreate.
varid
ncvardef or
ncvarid.
start
(0, 0, ..., 0). The
size of start must be the same as the number of dimensions of the
specified variable. The elements of start must correspond to the
variable's dimensions in order. Hence, if the variable is a record
variable, the first index would correspond to the starting record number
for reading the data values.
count
count as
(1, 1, ..., 1). The size of count is the number of
dimensions of the specified variable. The elements of count
correspond to the variable's dimensions. Hence, if the variable is a
record variable, the first element of count corresponds to a
count of the number of records to read.
value
void * because it can
point to data of any of the basic netCDF types. The data should be of
the appropriate type for the netCDF variable. Warning: neither
the compiler nor the netCDF software can detect whether the wrong type
of data is used.
Here is an example using ncvarget to read all the values of the
variable named rh from an existing netCDF file named
`foo.nc'. For simplicity in this example, we assume that we know
that rh is dimensioned with time, lat, and
lon, and that there are three time values, five lat
values, and ten lon values.
#include "netcdf.h"
... #define TIMES 3 #define LATS 5 #define LONS 10 int ncid; /*
netCDF ID */ int rh_id; /* variable ID */ static long start[] = {0, 0,
0}; /* start at first value */ static long count[] = {TIMES, LATS,
LONS}; double rh_vals[TIMES*LATS*LONS]; /* array to hold values */
... ncid = ncopen("foo.nc", NC_NOWRITE);
... rh_id = ncvarid (ncid, "rh");
... /* read hyperslab of values from netCDF variable */
ncvarget(ncid, rh_id, start, count, (void *) rh_vals);
SUBROUTINE NCVGT (INTEGER NCID, INTEGER VARID,
+ INTEGER START(*), INTEGER COUNT(*),
+ type VALUES, INTEGER RCODE)
SUBROUTINE NCVGTC(INTEGER NCID, INTEGER VARID,
+ INTEGER START(*), INTEGER COUNTS(*),
+ CHARACTER*(*) STRING, INTEGER LENSTR,
+ INTEGER RCODE)
There are two FORTRAN subroutines, NCVGT and NCVGTC, for
reading a hyperslab of values from a netCDF variable. The first reads
numeric values from a variable of numeric type, and the second reads
character values from a variable of character type.
NCID
NCOPN or
NCCRE.
VARID
NCVDEF or
NCVID.
START
(1, 1, ..., 1). The size of
START must be the same as the number of dimensions of the
specified variable. The elements of START must correspond to the
variable's dimensions in order. Hence, if the variable is a record
variable, the last index would correspond to the starting record number
for reading the data values.
COUNT
COUNT as
(1, 1, ..., 1). The size of COUNT is the number of
dimensions of the specified variable. The elements of COUNT
correspond to the variable's dimensions. Hence, if the variable is a
record variable, the last element of COUNT corresponds to a count
of the number of records to read.
VALUES
NCVGT, the locations into which the data values will be read.
The order in which the data will be read from the netCDF variable is
with the first dimension of the specified hyperslab varying fastest
(like the ordinary FORTRAN convention). The data may be of a type
corresponding to any of the netCDF types NCSHORT, NCLONG,
NCFLOAT, or NCDOUBLE, but must be appropriate for the type
of the netCDF variable. Warning: neither the compiler nor the
netCDF software can detect whether the wrong type of data is used.
STRING
NCVGTC, the character string into which the character data
will be read. The order in which the characters will be read from the
netCDF variable is with the first dimension of the specified hyperslab
varying fastest (like the FORTRAN convention). The data may be of a
type corresponding to the netCDF types NCCHAR or NCBYTE.
LENSTR
NCVGTC, the total declared length (in characters) of the
STRING argument. This should be at least as large as the product
of the elements of the COUNT vector. Note that this is not
necessarily the same as the value returned by the FORTRAN LEN
function, because an array argument may be provided. NCVGTC will
check to make sure the requested data will fit in LENSTR
characters.
RCODE
Here is an example using NCVGT to read all the values of the
variable named rh from an existing netCDF file named
`foo.nc'. For simplicity in this example, we assume that we know
that rh is dimensioned with lon, lat, and
time, and that there are ten lon values, five lat
values, and three time values.
INCLUDE 'netcdf.inc'
...
PARAMETER (NDIMS=3) ! number of dimensions
PARAMETER (TIMES=3, LATS=5, LONS=10) ! dimension sizes
INTEGER NCID, RCODE
INTEGER RHID ! variable ID
INTEGER START(NDIMS), COUNT(NDIMS) ! hyperslab
DOUBLE RHVALS(LONS, LATS, TIMES)
DATA START /1, 1, 1/ ! start at first value
DATA COUNT /LONS, LATS, TIMES/
...
NCID = NCOPN ('foo.nc', NCNOWRIT, RCODE)
...
RHID = NCVID (NCID, 'rh', RCODE)! get ID
CALL NCVGT (NCID, RHID, START, COUNT, RHVALS, RCODE)
Go to the previous, next section.