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.