Next: , Previous: NF_INQ_ATT Family, Up: Attributes


5.5 NF_GET_ATT_ type

Members of the NF_GET_ATT_ type family of functions get the value(s) of a netCDF attribute, given its variable ID and name.

Usage

     INTEGER FUNCTION NF_GET_ATT_TEXT   (INTEGER NCID, INTEGER VARID,
                                         CHARACTER*(*) NAME,
                                         CHARACTER*(*) text)
     INTEGER FUNCTION NF_GET_ATT_INT1   (INTEGER NCID, INTEGER VARID,
                                         CHARACTER*(*) NAME,
                                         INTEGER*1 i1vals(*))
     INTEGER FUNCTION NF_GET_ATT_INT2   (INTEGER NCID, INTEGER VARID,
                                         CHARACTER*(*) NAME,
                                         INTEGER*2 i2vals(*))
     INTEGER FUNCTION NF_GET_ATT_INT    (INTEGER NCID, INTEGER VARID,
                                         CHARACTER*(*) NAME,
                                         INTEGER ivals(*))
     INTEGER FUNCTION NF_GET_ATT_REAL   (INTEGER NCID, INTEGER VARID,
                                         CHARACTER*(*) NAME,
                                         REAL rvals(*))
     INTEGER FUNCTION NF_GET_ATT_DOUBLE (INTEGER NCID, INTEGER VARID,
                                         CHARACTER*(*) NAME,
                                         DOUBLE dvals(*))
NCID
NetCDF ID, from a previous call to NF_OPEN or NF_CREATE.
VARID
Variable ID of the attribute's variable, or NF_GLOBAL for a global attribute.
NAME
Attribute name.
TEXT
I1VALS
I2VALS
IVALS
RVALS
DVALS
Returned attribute values. All elements of the vector of attribute values are returned, so you must provide enough space to hold them. If you don't know how much space to reserve, call NF_INQ_ATTLEN first to find out the length of the attribute. You cannot read character data from a numeric variable or numeric data from a text variable. For numeric data, if the type of data differs from the netCDF variable type, type conversion will occur. See Type Conversion.

Errors

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

Example

Here is an example using NF_GET_ATT_DOUBLE to determine the values of a variable attribute named valid_range for a netCDF variable named rh and a global attribute named title in an existing netCDF dataset named foo.nc. In this example, it is assumed that we don't know how many values will be returned, but that we do know the types of the attributes. Hence, to allocate enough space to store them, we must first inquire about the length of the attributes.

     INCLUDE 'netcdf.inc'
        ...
     PARAMETER (MVRLEN=3)           ! max number of "valid_range" values
     PARAMETER (MTLEN=80)           ! max length of "title" attribute
     INTEGER STATUS, NCID
     INTEGER RHID                   ! variable ID
     INTEGER VRLEN, TLEN            ! attribute lengths
     DOUBLE PRECISION VRVAL(MVRLEN) ! vr attribute values
     CHARACTER*80 TITLE             ! title attribute values
        ...
     STATUS = NF_OPEN ('foo.nc', NF_WRITE, NCID)
     IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
        ...
     STATUS = NF_INQ_VARID (NCID, 'rh', RHID)
     IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
        ...
     ! find out attribute lengths, to make sure we have enough space
     STATUS = NF_INQ_ATTLEN (NCID, RHID, 'valid_range', VRLEN)
     IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
     STATUS = NF_INQ_ATTLEN (NCID, NF_GLOBAL, 'title', TLEN)
     IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
     ! get attribute values, if not too big
     IF (VRLEN .GT. MVRLEN) THEN
         WRITE (*,*) 'valid_range attribute too big!'
         CALL EXIT
     ELSE
         STATUS = NF_GET_ATT_DOUBLE (NCID, RHID, 'valid_range', VRVAL)
         IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
     ENDIF
     IF (TLEN .GT. MTLEN) THEN
         WRITE (*,*) 'title attribute too big!'
         CALL EXIT
     ELSE
         STATUS = NF_GET_ATT_TEXT (NCID, NF_GLOBAL, 'title', TITLE)
         IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
     ENDIF