Next: , Previous: nc_get_var1_ type, Up: Variables


4.12 Read an Entire Variable nc_get_var_ type

The members of the nc_get_var_ type family of functions read all the values from a netCDF variable of an open netCDF dataset. This is the simplest interface to use for reading the value of a scalar variable or when all the values of a multidimensional variable can be read at once. The values are read into consecutive locations with the last dimension varying fastest. The netCDF dataset must be in data mode.

Take care when using the simplest forms of this interface with record variables when you don't specify how many records are to be read. If you try to read all the values of a record variable into an array but there are more records in the file than you assume, more data will be read than you expect, which may cause a segmentation violation.

Usage

     int nc_get_var_text  (int ncid, int varid, char *tp);
     int nc_get_var_uchar (int ncid, int varid, unsigned char *up);
     int nc_get_var_schar (int ncid, int varid, signed char *cp);
     int nc_get_var_short (int ncid, int varid, short *sp);
     int nc_get_var_int   (int ncid, int varid, int *ip);
     int nc_get_var_long  (int ncid, int varid, long *lp);
     int nc_get_var_float (int ncid, int varid, float *fp);
     int nc_get_var_double(int ncid, int varid, double *dp);
ncid
NetCDF ID, from a previous call to nc_open or nc_create.
varid
Variable ID.
tp
up
cp
sp
ip
lp
fp
dp
Pointer to the location into which the data value is read. If the type of data value differs from the netCDF variable type, type conversion will occur. See Type Conversion.

Errors

nc_get_var_ type returns the value NC_NOERR if no errors occurred. Otherwise, the returned status indicates an error. Possible causes of errors include:

Example

Here is an example using nc_get_var_double to read all the values of the variable named rh from an existing netCDF dataset 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  status;                       /* error status */
     int ncid;                          /* netCDF ID */
     int rh_id;                         /* variable ID */
     double rh_vals[TIMES*LATS*LONS];   /* array to hold values */
        ...
     status = nc_open("foo.nc", NC_NOWRITE, &ncid);
     if (status != NC_NOERR) handle_error(status);
        ...
     status = nc_inq_varid (ncid, "rh", &rh_id);
     if (status != NC_NOERR) handle_error(status);
        ...
     /* read values from netCDF variable */
     status = nc_get_var_double(ncid, rh_id, rh_vals);
     if (status != NC_NOERR) handle_error(status);