Next: NF_COPY_ATT, Previous: NF_INQ_ATT Family, Up: Attributes
Members of the NF_GET_ATT_ type family of functions get the value(s) of a netCDF attribute, given its variable ID and name.
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(*))
NCIDVARIDNAMETEXTI1VALSI2VALSIVALSRVALSDVALSNF_GET_ATT_ type 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_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