This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Hi Takeshi, > > I was pleased to see your email in a www archive about fortran90 > modules for netCDF 3.3 yesterday. This is exactly what I wanted. > > There are minor problems in the module, however, so I tried to > fix them (attached below). > > Bug: > Interfaces for *_PUT_VAR_*, *_GET_VAR_* treat arrays as scalars. > > Not a bug but may cause troubles: > Many (all, as far as I know) fortran90 compilers distinguish > a scalar and an array of length 1. Thus, it causes a compiler > error to give a scalar to ivals etc. of NF_GET|PUT_ATT_type. > This is the case for 0 dimensional variables for _PUT|GET_VAR_ > > To settle the latter problem, I wrote interfacing functions in > which a scalar is substituted in an array of length 1. Then, they > are interfaced to the original name. > > I checked the revised module by a Fortran90 compiler on a DEC > alpha machine, but I have not checked it in a executable > program yet. Thus, there might be some problems induced by me. I > appreciate it if you or someone else use the revised version and > find possible bugs. Thanks for sending this. Earlier, Robert Pincus also sent me mail recommending that I change the "dimension(:)" declarations to "dimension(*)" instead, since our functions were really written for Fortran77 rather than Fortran90, and thus don't know what to do with the shape information passed in when "dimension(:)" is used. There are apparently still problems if we try to use the result to specify interfaces in which the user may pass multidimensional arrays instead of just vectors. Currently, we have no expertise or resources to finish adapting netCDF to Fortran 90. We're trying to recruit someone from NCAR's Scientific Computing Division to help with that. I'll archive your message, in case we find someone who is able to adapt netCDF-3 to Fortran 90. Thanks again for your fixes. --Russ _____________________________________________________________________ Russ Rew UCAR Unidata Program address@hidden http://www.unidata.ucar.edu !------------------------------------------------------------------------ ! Forran90 Interface definition for netCDF 3.3 ! History: ! Original -- See below ! Revision -- T. Horinouchi 1997/11/05 ! Debug (put_var/get_var family) ! Scalar - one-element array compatibility problem ! Encapsulation of netCDF-3 API parameters and interface blocks. module netcdf ! ! External netCDF data types: ! integer, parameter :: & NF_BYTE = 1, NF_INT1 = NF_BYTE, NF_CHAR = 2, NF_SHORT = 3, & NF_INT2 = NF_SHORT, NF_INT = 4, NF_FLOAT = 5, & NF_REAL = NF_FLOAT, NF_DOUBLE = 6 ! ! Default fill values: ! integer, parameter :: & NF_FILL_BYTE = -127, NF_FILL_INT1 = NF_FILL_BYTE, & NF_FILL_CHAR = 0, NF_FILL_SHORT = -32767, & NF_FILL_INT2 = NF_FILL_SHORT, NF_FILL_INT = -2147483647 real, parameter :: & NF_FILL_FLOAT = 9.9692099683868690e+36, & NF_FILL_REAL = NF_FILL_FLOAT doubleprecision, parameter :: & NF_FILL_DOUBLE = 9.9692099683868690e+36 ! ! Mode flags for opening and creating a netCDF dataset: ! integer, parameter :: & NF_NOWRITE = 0, NF_WRITE = 1, NF_CLOBBER = 0, NF_NOCLOBBER = 4, & NF_FILL = 0, NF_NOFILL = 256, NF_LOCK = 1024, NF_SHARE = 2048 ! ! Size argument for defining an unlimited dimension: ! integer, parameter :: & NF_UNLIMITED = 0 ! ! Global Attribute ID: ! integer, parameter :: & NF_GLOBAL = 0 ! ! Implementation limits: ! integer, parameter :: & NF_MAX_DIMS = 100, NF_MAX_ATTRS = 2000, NF_MAX_VARS = 2000, & NF_MAX_NAME = 128, NF_MAX_VAR_DIMS = NF_MAX_DIMS ! ! Error codes: ! integer, parameter :: & NF_NOERR = 0, NF_EBADID = -33, NF_EEXIST = -35, NF_EINVAL = -36, & NF_EPERM = -37, NF_ENOTINDEFINE = -38, NF_EINDEFINE = -39, & NF_EINVALCOORDS = -40, NF_EMAXDIMS = -41, NF_ENAMEINUSE = -42, & NF_ENOTATT = -43, NF_EMAXATTS = -44, NF_EBADTYPE = -45, & NF_EBADDIM = -46, NF_EUNLIMPOS = -47, NF_EMAXVARS = -48, & NF_ENOTVAR = -49, NF_EGLOBAL = -50, NF_ENOTNC = -51, & NF_ESTS = -52, NF_EMAXNAME = -53, NF_EUNLIMIT = -54, & NF_ENORECVARS = -55, NF_ECHAR = -56, NF_EEDGE = -57, & NF_ESTRIDE = -58, NF_EBADNAME = -59, NF_ERANGE = -60 integer, parameter :: & NF_FATAL = 1, NF_VERBOSE = 2 interface CHARACTER*80 FUNCTION NF_INQ_LIBVERS() end function NF_INQ_LIBVERS CHARACTER*80 FUNCTION NF_STRERROR (NCERR) integer, intent ( in) :: NCERR end function NF_STRERROR INTEGER FUNCTION NF_CREATE (PATH, CMODE, ncid) character (len = *), intent ( in) :: PATH integer, intent ( in) :: CMODE integer, intent (out) :: ncid end function NF_CREATE INTEGER FUNCTION NF_OPEN (PATH, MODE, ncid) character (len = *), intent ( in) :: PATH integer, intent ( in) :: MODE integer, intent (out) :: ncid end function NF_OPEN INTEGER FUNCTION NF_SET_FILL (NCID, FILLMODE, old_mode) integer, intent ( in) :: NCID integer, intent ( in) :: FILLMODE integer, intent (out) :: old_mode end function NF_SET_FILL INTEGER FUNCTION NF_REDEF (NCID) integer, intent ( in) :: NCID end function NF_REDEF INTEGER FUNCTION NF_ENDDEF (NCID) integer, intent ( in) :: NCID end function NF_ENDDEF INTEGER FUNCTION NF_SYNC (NCID) integer, intent ( in) :: NCID end function NF_SYNC INTEGER FUNCTION NF_ABORT (NCID) integer, intent ( in) :: NCID end function NF_ABORT INTEGER FUNCTION NF_CLOSE (NCID) integer, intent ( in) :: NCID end function NF_CLOSE INTEGER FUNCTION NF_INQ (NCID, ndims, nvars, ngatts,& unlimdimid) integer, intent ( in) :: NCID integer, intent (out) :: ndims integer, intent (out) :: nvars integer, intent (out) :: ngatts integer, intent (out) :: unlimdimid end function NF_INQ INTEGER FUNCTION NF_INQ_NDIMS (NCID, ndims) integer, intent ( in) :: NCID integer, intent (out) :: ndims end function NF_INQ_NDIMS INTEGER FUNCTION NF_INQ_NVARS (NCID, nvars) integer, intent ( in) :: NCID integer, intent (out) :: nvars end function NF_INQ_NVARS INTEGER FUNCTION NF_INQ_NATTS (NCID, ngatts) integer, intent ( in) :: NCID integer, intent (out) :: ngatts end function NF_INQ_NATTS INTEGER FUNCTION NF_INQ_UNLIMDIM (NCID, unlimdimid) integer, intent ( in) :: NCID integer, intent (out) :: unlimdimid end function NF_INQ_UNLIMDIM INTEGER FUNCTION NF_DEF_DIM (NCID, NAME, LEN, dimid) integer, intent ( in) :: NCID character (len = *), intent ( in) :: NAME integer, intent ( in) :: LEN integer, intent (out) :: dimid end function NF_DEF_DIM INTEGER FUNCTION NF_INQ_DIMID (NCID, NAME, dimid) integer, intent ( in) :: NCID character (len = *), intent ( in) :: NAME integer, intent (out) :: dimid end function NF_INQ_DIMID INTEGER FUNCTION NF_INQ_DIM (NCID, DIMID, name, len) integer, intent ( in) :: NCID integer, intent ( in) :: DIMID character (len = *), intent (out) :: name integer, intent (out) :: len end function NF_INQ_DIM INTEGER FUNCTION NF_INQ_DIMNAME (NCID, DIMID, name) integer, intent ( in) :: NCID integer, intent ( in) :: DIMID character (len = *), intent (out) :: name end function NF_INQ_DIMNAME INTEGER FUNCTION NF_INQ_DIMLEN (NCID, DIMID, len) integer, intent ( in) :: NCID integer, intent ( in) :: DIMID integer, intent (out) :: len end function NF_INQ_DIMLEN INTEGER FUNCTION NF_RENAME_DIM (NCID, DIMID, NAME) integer, intent ( in) :: NCID integer, intent ( in) :: DIMID character (len = *), intent ( in) :: NAME end function NF_RENAME_DIM INTEGER FUNCTION NF_DEF_VAR (NCID, NAME, XTYPE, NDIMS, & DIMIDS, varid) integer, intent ( in) :: NCID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: NDIMS integer, dimension(:), intent ( in) :: DIMIDS integer, intent (out) :: varid end function NF_DEF_VAR INTEGER FUNCTION NF_INQ_VAR (NCID, VARID, name, xtype, & ndims, dimids, natts) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent (out) :: name integer, intent (out) :: xtype integer, intent (out) :: ndims integer, dimension(:), intent (out) :: dimids integer, intent (out) :: natts end function NF_INQ_VAR INTEGER FUNCTION NF_INQ_VARID (NCID, NAME, varid) integer, intent ( in) :: NCID character (len = *), intent ( in) :: NAME integer, intent (out) :: varid end function NF_INQ_VARID INTEGER FUNCTION NF_INQ_VARNAME (NCID, VARID, name) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent (out) :: name end function NF_INQ_VARNAME INTEGER FUNCTION NF_INQ_VARTYPE (NCID, VARID, xtype) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, intent (out) :: xtype end function NF_INQ_VARTYPE INTEGER FUNCTION NF_INQ_VARNDIMS (NCID, VARID, ndims) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, intent (out) :: ndims end function NF_INQ_VARNDIMS INTEGER FUNCTION NF_INQ_VARDIMID (NCID, VARID, dimids) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent (out) :: dimids end function NF_INQ_VARDIMID INTEGER FUNCTION NF_INQ_VARNATTS (NCID, VARID, natts) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, intent (out) :: natts end function NF_INQ_VARNATTS INTEGER FUNCTION NF_RENAME_VAR (NCID, VARID, NAME) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME end function NF_RENAME_VAR INTEGER FUNCTION NF_PUT_VAR_TEXT (NCID, VARID, TEXT) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: TEXT end function NF_PUT_VAR_TEXT INTEGER FUNCTION NF_GET_VAR_TEXT (NCID, VARID, text) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent (out) :: text end function NF_GET_VAR_TEXT end interface interface NF_PUT_VAR_INT1 INTEGER FUNCTION NF_PUT_VAR_INT1 (NCID, VARID, I1VAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer*1, dimension(:), intent ( in) :: I1VAL end function NF_PUT_VAR_INT1 end interface interface NF_GET_VAR_INT1 INTEGER FUNCTION NF_GET_VAR_INT1 (NCID, VARID, i1val) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer*1, dimension(:), intent (out) :: i1val end function NF_GET_VAR_INT1 end interface interface NF_PUT_VAR_INT2 INTEGER FUNCTION NF_PUT_VAR_INT2 (NCID, VARID, I2VAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer*2, dimension(:), intent ( in) :: I2VAL end function NF_PUT_VAR_INT2 end interface interface NF_GET_VAR_INT2 INTEGER FUNCTION NF_GET_VAR_INT2 (NCID, VARID, i2val) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer*2, dimension(:), intent (out) :: i2val end function NF_GET_VAR_INT2 end interface interface NF_PUT_VAR_INT INTEGER FUNCTION NF_PUT_VAR_INT (NCID, VARID, IVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: IVAL end function NF_PUT_VAR_INT end interface interface NF_GET_VAR_INT INTEGER FUNCTION NF_GET_VAR_INT (NCID, VARID, ival) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent (out) :: ival end function NF_GET_VAR_INT end interface interface NF_PUT_VAR_REAL INTEGER FUNCTION NF_PUT_VAR_REAL (NCID, VARID, RVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID real, dimension(:), intent ( in) :: RVAL end function NF_PUT_VAR_REAL end interface interface NF_GET_VAR_REAL INTEGER FUNCTION NF_GET_VAR_REAL (NCID, VARID, rval) integer, intent ( in) :: NCID integer, intent ( in) :: VARID real, dimension(:), intent (out) :: rval end function NF_GET_VAR_REAL end interface interface NF_PUT_VAR_DOUBLE INTEGER FUNCTION NF_PUT_VAR_DOUBLE (NCID, VARID, DVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID doubleprecision, dimension(:), intent ( in) :: DVAL end function NF_PUT_VAR_DOUBLE end interface interface NF_GET_VAR_DOUBLE INTEGER FUNCTION NF_GET_VAR_DOUBLE (NCID, VARID, dval) integer, intent ( in) :: NCID integer, intent ( in) :: VARID doubleprecision, dimension(:), intent (out) :: dval end function NF_GET_VAR_DOUBLE end interface interface NF_PUT_VAR_INT1 MODULE PROCEDURE NF_PUT_VAR_INT1_SC end interface interface NF_GET_VAR_INT1 MODULE PROCEDURE NF_GET_VAR_INT1_SC end interface interface NF_PUT_VAR_INT2 MODULE PROCEDURE NF_PUT_VAR_INT2_SC end interface interface NF_GET_VAR_INT2 MODULE PROCEDURE NF_GET_VAR_INT2_SC end interface interface NF_PUT_VAR_INT MODULE PROCEDURE NF_PUT_VAR_INT_SC end interface interface NF_GET_VAR_INT MODULE PROCEDURE NF_GET_VAR_INT_SC end interface interface NF_PUT_VAR_REAL MODULE PROCEDURE NF_PUT_VAR_REAL_SC end interface interface NF_GET_VAR_REAL MODULE PROCEDURE NF_GET_VAR_REAL_SC end interface interface NF_PUT_VAR_DOUBLE MODULE PROCEDURE NF_PUT_VAR_DOUBLE_SC end interface interface NF_GET_VAR_DOUBLE MODULE PROCEDURE NF_GET_VAR_DOUBLE_SC end interface interface INTEGER FUNCTION NF_PUT_VAR1_TEXT (NCID, VARID, INDEX, TEXT) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX character (len = *), intent ( in) :: TEXT end function NF_PUT_VAR1_TEXT INTEGER FUNCTION NF_GET_VAR1_TEXT (NCID, VARID, INDEX, text) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX character (len = *), intent (out) :: text end function NF_GET_VAR1_TEXT INTEGER FUNCTION NF_PUT_VAR1_INT1 (NCID, VARID, INDEX, I1VAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX integer*1, intent ( in) :: I1VAL end function NF_PUT_VAR1_INT1 INTEGER FUNCTION NF_GET_VAR1_INT1 (NCID, VARID, INDEX, i1val) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX integer*1, intent (out) :: i1val end function NF_GET_VAR1_INT1 INTEGER FUNCTION NF_PUT_VAR1_INT2 (NCID, VARID, INDEX, I2VAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX integer*2, intent ( in) :: I2VAL end function NF_PUT_VAR1_INT2 INTEGER FUNCTION NF_GET_VAR1_INT2 (NCID, VARID, INDEX, i2val) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX integer*2, intent (out) :: i2val end function NF_GET_VAR1_INT2 INTEGER FUNCTION NF_PUT_VAR1_INT (NCID, VARID, INDEX, IVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX integer, intent ( in) :: IVAL end function NF_PUT_VAR1_INT INTEGER FUNCTION NF_GET_VAR1_INT (NCID, VARID, INDEX, ival) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX integer, intent (out) :: ival end function NF_GET_VAR1_INT INTEGER FUNCTION NF_PUT_VAR1_REAL (NCID, VARID, INDEX, RVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX real, intent ( in) :: RVAL end function NF_PUT_VAR1_REAL INTEGER FUNCTION NF_GET_VAR1_REAL (NCID, VARID, INDEX, rval) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX real, intent (out) :: rval end function NF_GET_VAR1_REAL INTEGER FUNCTION NF_PUT_VAR1_DOUBLE(NCID, VARID, INDEX, DVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX doubleprecision, intent ( in) :: DVAL end function NF_PUT_VAR1_DOUBLE INTEGER FUNCTION NF_GET_VAR1_DOUBLE(NCID, VARID, INDEX, dval) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: INDEX doubleprecision, intent (out) :: dval end function NF_GET_VAR1_DOUBLE INTEGER FUNCTION NF_PUT_VARA_TEXT (NCID, VARID, START, COUNT, & TEXT) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT character (len = *), intent ( in) :: TEXT end function NF_PUT_VARA_TEXT INTEGER FUNCTION NF_GET_VARA_TEXT (NCID, VARID, START, COUNT, & text) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT character (len = *), intent (out) :: text end function NF_GET_VARA_TEXT INTEGER FUNCTION NF_PUT_VARA_INT1 (NCID, VARID, START, COUNT, & I1VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer*1, dimension(:), intent ( in) :: I1VALS end function NF_PUT_VARA_INT1 INTEGER FUNCTION NF_GET_VARA_INT1 (NCID, VARID, START, COUNT, & i1vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer*1, dimension(:), intent (out) :: i1vals end function NF_GET_VARA_INT1 INTEGER FUNCTION NF_PUT_VARA_INT2 (NCID, VARID, START, COUNT, & I2VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer*2, dimension(:), intent ( in) :: I2VALS end function NF_PUT_VARA_INT2 INTEGER FUNCTION NF_GET_VARA_INT2 (NCID, VARID, START, COUNT, & i2vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer*2, dimension(:), intent (out) :: i2vals end function NF_GET_VARA_INT2 INTEGER FUNCTION NF_PUT_VARA_INT (NCID, VARID, START, COUNT, & IVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: IVALS end function NF_PUT_VARA_INT INTEGER FUNCTION NF_GET_VARA_INT (NCID, VARID, START, COUNT, & ivals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent (out) :: ivals end function NF_GET_VARA_INT INTEGER FUNCTION NF_PUT_VARA_REAL (NCID, VARID, START, COUNT, & RVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT real, dimension(:), intent ( in) :: RVALS end function NF_PUT_VARA_REAL INTEGER FUNCTION NF_GET_VARA_REAL (NCID, VARID, START, COUNT, & rvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT real, dimension(:), intent (out):: rvals end function NF_GET_VARA_REAL INTEGER FUNCTION NF_PUT_VARA_DOUBLE(NCID, VARID, START, COUNT, & DVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT doubleprecision, dimension(:), intent ( in) :: DVALS end function NF_PUT_VARA_DOUBLE INTEGER FUNCTION NF_GET_VARA_DOUBLE(NCID, VARID, START, COUNT, & dvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT doubleprecision, dimension(:), intent (out) :: dvals end function NF_GET_VARA_DOUBLE INTEGER FUNCTION NF_PUT_VARS_TEXT (NCID, VARID, START, COUNT, & STRIDE, TEXT) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE character (len = *), intent ( in) :: TEXT end function NF_PUT_VARS_TEXT INTEGER FUNCTION NF_GET_VARS_TEXT (NCID, VARID, START, COUNT, & STRIDE, text) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE character (len = *), intent (out) :: text end function NF_GET_VARS_TEXT INTEGER FUNCTION NF_PUT_VARS_INT1 (NCID, VARID, START, COUNT, & STRIDE, I1VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer*1, dimension(:), intent ( in) :: I1VALS end function NF_PUT_VARS_INT1 INTEGER FUNCTION NF_GET_VARS_INT1 (NCID, VARID, START, COUNT, & STRIDE, i1vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer*1, dimension(:), intent (out) :: i1vals end function NF_GET_VARS_INT1 INTEGER FUNCTION NF_PUT_VARS_INT2 (NCID, VARID, START, COUNT, & STRIDE, I2VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer*2, dimension(:), intent ( in) :: I2VALS end function NF_PUT_VARS_INT2 INTEGER FUNCTION NF_GET_VARS_INT2 (NCID, VARID, START, COUNT, & STRIDE, i2vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer*2, dimension(:), intent (out) :: i2vals end function NF_GET_VARS_INT2 INTEGER FUNCTION NF_PUT_VARS_INT (NCID, VARID, START, COUNT, & STRIDE, IVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IVALS end function NF_PUT_VARS_INT INTEGER FUNCTION NF_GET_VARS_INT (NCID, VARID, START, COUNT, & STRIDE, ivals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent (out) :: ivals end function NF_GET_VARS_INT INTEGER FUNCTION NF_PUT_VARS_REAL (NCID, VARID, START, COUNT, & STRIDE, RVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE real, dimension(:), intent ( in) :: RVALS end function NF_PUT_VARS_REAL INTEGER FUNCTION NF_GET_VARS_REAL (NCID, VARID, START, COUNT, & STRIDE, rvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE real, dimension(:), intent (out) :: rvals end function NF_GET_VARS_REAL INTEGER FUNCTION NF_PUT_VARS_DOUBLE(NCID, VARID, START, COUNT, & STRIDE, DVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE doubleprecision, dimension(:), intent ( in) :: DVALS end function NF_PUT_VARS_DOUBLE INTEGER FUNCTION NF_GET_VARS_DOUBLE(NCID, VARID, START, COUNT, & STRIDE, dvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE doubleprecision, dimension(:), intent (out) :: dvals end function NF_GET_VARS_DOUBLE INTEGER FUNCTION NF_PUT_VARM_TEXT (NCID, VARID, START, COUNT, & STRIDE, IMAP, TEXT) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP character (len = *), intent ( in) :: TEXT end function NF_PUT_VARM_TEXT INTEGER FUNCTION NF_GET_VARM_TEXT (NCID, VARID, START, COUNT, & STRIDE, IMAP, text) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP character (len = *), intent (out) :: text end function NF_GET_VARM_TEXT INTEGER FUNCTION NF_PUT_VARM_INT1 (NCID, VARID, START, COUNT, & STRIDE, IMAP, I1VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP integer*1, dimension(:), intent ( in) :: I1VALS end function NF_PUT_VARM_INT1 INTEGER FUNCTION NF_GET_VARM_INT1 (NCID, VARID, START, COUNT, & STRIDE, IMAP, i1vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP integer*1, dimension(:), intent (out) :: i1vals end function NF_GET_VARM_INT1 INTEGER FUNCTION NF_PUT_VARM_INT2 (NCID, VARID, START, COUNT, & STRIDE, IMAP, I2VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP integer*2, dimension(:), intent ( in) :: I2VALS end function NF_PUT_VARM_INT2 INTEGER FUNCTION NF_GET_VARM_INT2 (NCID, VARID, START, COUNT, & STRIDE, IMAP, i2vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP integer*2, dimension(:), intent (out) :: i2vals end function NF_GET_VARM_INT2 INTEGER FUNCTION NF_PUT_VARM_INT (NCID, VARID, START, COUNT, & STRIDE, IMAP, IVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP integer, dimension(:), intent ( in) :: IVALS end function NF_PUT_VARM_INT INTEGER FUNCTION NF_GET_VARM_INT (NCID, VARID, START, COUNT, & STRIDE, IMAP, ivals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP integer, dimension(:), intent (out) :: ivals end function NF_GET_VARM_INT INTEGER FUNCTION NF_PUT_VARM_REAL (NCID, VARID, START, COUNT, & STRIDE, IMAP, RVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP real, dimension(:), intent ( in) :: RVALS end function NF_PUT_VARM_REAL INTEGER FUNCTION NF_GET_VARM_REAL (NCID, VARID, START, COUNT, & STRIDE, IMAP, rvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP real, dimension(:), intent (out) :: rvals end function NF_GET_VARM_REAL INTEGER FUNCTION NF_PUT_VARM_DOUBLE(NCID, VARID, START, COUNT, & STRIDE, IMAP, DVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP doubleprecision, dimension(:), intent ( in) :: DVALS end function NF_PUT_VARM_DOUBLE INTEGER FUNCTION NF_GET_VARM_DOUBLE(NCID, VARID, START, COUNT, & STRIDE, IMAP, dvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, dimension(:), intent ( in) :: START integer, dimension(:), intent ( in) :: COUNT integer, dimension(:), intent ( in) :: STRIDE integer, dimension(:), intent ( in) :: IMAP doubleprecision, dimension(:), intent (out) :: dvals end function NF_GET_VARM_DOUBLE INTEGER FUNCTION NF_INQ_ATT (NCID, VARID, NAME, xtype, & len) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent (out) :: xtype integer, intent (out) :: len end function NF_INQ_ATT INTEGER FUNCTION NF_INQ_ATTID (NCID, VARID, NAME, attnum) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent (out) :: attnum end function NF_INQ_ATTID INTEGER FUNCTION NF_INQ_ATTTYPE (NCID, VARID, NAME, xtype) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent (out) :: xtype end function NF_INQ_ATTTYPE INTEGER FUNCTION NF_INQ_ATTLEN (NCID, VARID, NAME, len) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent (out) :: len end function NF_INQ_ATTLEN INTEGER FUNCTION NF_INQ_ATTNAME (NCID, VARID, ATTNUM, name) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, intent (out) :: ATTNUM character (len = *), intent (out) :: name end function NF_INQ_ATTNAME INTEGER FUNCTION NF_COPY_ATT (NCID_IN, VARID_IN, NAME, & NCID_OUT, VARID_OUT) integer, intent ( in) :: NCID_IN integer, intent ( in) :: VARID_IN character (len = *), intent ( in) :: NAME integer, intent ( in) :: NCID_OUT integer, intent ( in) :: VARID_OUT end function NF_COPY_ATT INTEGER FUNCTION NF_RENAME_ATT (NCID, VARID, CURNAME, & NEWNAME) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: CURNAME character (len = *), intent ( in) :: NEWNAME end function NF_RENAME_ATT INTEGER FUNCTION NF_DEL_ATT (NCID, VARID, NAME) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME end function NF_DEL_ATT INTEGER FUNCTION NF_PUT_ATT_TEXT (NCID, VARID, NAME, LEN, TEXT) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: LEN character (len = *), intent ( in) :: TEXT end function NF_PUT_ATT_TEXT INTEGER FUNCTION NF_GET_ATT_TEXT (NCID, VARID, NAME, text) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME character (len = *), intent (out) :: text end function NF_GET_ATT_TEXT end interface interface NF_PUT_ATT_INT1 INTEGER FUNCTION NF_PUT_ATT_INT1 (NCID, VARID, NAME, XTYPE, & LEN, I1VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN integer*1, dimension(:), intent ( in) :: I1VALS end function NF_PUT_ATT_INT1 end interface interface NF_GET_ATT_INT1 INTEGER FUNCTION NF_GET_ATT_INT1 (NCID, VARID, NAME, i1vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer*1, dimension(:), intent (out) :: i1vals end function NF_GET_ATT_INT1 end interface interface NF_PUT_ATT_INT2 INTEGER FUNCTION NF_PUT_ATT_INT2 (NCID, VARID, NAME, XTYPE, & LEN, I2VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN integer*2, dimension(:), intent ( in) :: I2VALS end function NF_PUT_ATT_INT2 end interface interface NF_GET_ATT_INT2 INTEGER FUNCTION NF_GET_ATT_INT2 (NCID, VARID, NAME, i2vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer*2, dimension(:), intent (out) :: i2vals end function NF_GET_ATT_INT2 end interface interface NF_PUT_ATT_INT INTEGER FUNCTION NF_PUT_ATT_INT (NCID, VARID, NAME, XTYPE, & LEN, IVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN integer, dimension(:), intent ( in) :: IVALS end function NF_PUT_ATT_INT end interface interface NF_GET_ATT_INT INTEGER FUNCTION NF_GET_ATT_INT (NCID, VARID, NAME, ivals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, dimension(:), intent (out) :: ivals end function NF_GET_ATT_INT end interface interface NF_PUT_ATT_REAL INTEGER FUNCTION NF_PUT_ATT_REAL (NCID, VARID, NAME, XTYPE, & LEN, RVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN real, dimension(:), intent ( in) :: RVALS end function NF_PUT_ATT_REAL end interface interface NF_GET_ATT_REAL INTEGER FUNCTION NF_GET_ATT_REAL (NCID, VARID, NAME, rvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME real, dimension(:), intent (out) :: rvals end function NF_GET_ATT_REAL end interface interface NF_PUT_ATT_DOUBLE INTEGER FUNCTION NF_PUT_ATT_DOUBLE (NCID, VARID, NAME, XTYPE, & LEN, DVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN doubleprecision, dimension(:), intent ( in) :: DVALS end function NF_PUT_ATT_DOUBLE end interface interface NF_GET_ATT_DOUBLE INTEGER FUNCTION NF_GET_ATT_DOUBLE (NCID, VARID, NAME, dvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME doubleprecision, dimension(:), intent (out) :: dvals end function NF_GET_ATT_DOUBLE end interface interface NF_PUT_ATT_INT1 module procedure NF_PUT_ATT_INT1_SC end interface interface NF_GET_ATT_INT1 module procedure NF_GET_ATT_INT1_SC end interface interface NF_PUT_ATT_INT2 module procedure NF_PUT_ATT_INT2_SC end interface interface NF_GET_ATT_INT2 module procedure NF_GET_ATT_INT2_SC end interface interface NF_PUT_ATT_INT module procedure NF_PUT_ATT_INT_SC end interface interface NF_GET_ATT_INT module procedure NF_GET_ATT_INT_SC end interface interface NF_PUT_ATT_REAL module procedure NF_PUT_ATT_REAL_SC end interface interface NF_GET_ATT_REAL module procedure NF_GET_ATT_REAL_SC end interface interface NF_PUT_ATT_DOUBLE module procedure NF_PUT_ATT_DOUBLE_SC end interface interface NF_GET_ATT_DOUBLE module procedure NF_GET_ATT_DOUBLE_SC end interface contains ! interfaces to eqivalence a scalar and an array of size 1 ! PUT_VAR/GET_VAR INTEGER FUNCTION NF_PUT_VAR_INT1_SC (NCID, VARID, I1VAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer*1, intent ( in) :: I1VAL integer*1, dimension(1) :: I1VAL_A I1VAL_A=I1VAL NF_PUT_VAR_INT1_SC=NF_PUT_VAR_INT1 (NCID, VARID, I1VAL_A) end function NF_PUT_VAR_INT1_SC INTEGER FUNCTION NF_GET_VAR_INT1_SC (NCID, VARID, i1val) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer*1, intent (out) :: i1val integer*1, dimension(1) :: i1val_A NF_GET_VAR_INT1_SC=NF_GET_VAR_INT1 (NCID, VARID, i1val_A) i1val=i1val_A(1) end function NF_GET_VAR_INT1_SC INTEGER FUNCTION NF_PUT_VAR_INT2_SC (NCID, VARID, I2VAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer*2, intent ( in) :: I2VAL integer*2, dimension(1) :: I2VAL_A I2VAL_A=I2VAL NF_PUT_VAR_INT2_SC=NF_PUT_VAR_INT2 (NCID, VARID, I2VAL_A) end function NF_PUT_VAR_INT2_SC INTEGER FUNCTION NF_GET_VAR_INT2_SC (NCID, VARID, i2val) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer*2, intent (out) :: i2val integer*2, dimension(1) :: i2val_A NF_GET_VAR_INT2_SC=NF_GET_VAR_INT2 (NCID, VARID, i2val_A) i2val=i2val_A(1) end function NF_GET_VAR_INT2_SC INTEGER FUNCTION NF_PUT_VAR_INT_SC (NCID, VARID, IVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, intent ( in) :: IVAL integer, dimension(1) :: IVAL_A IVAL_A=IVAL NF_PUT_VAR_INT_SC=NF_PUT_VAR_INT (NCID, VARID, IVAL_A) end function NF_PUT_VAR_INT_SC INTEGER FUNCTION NF_GET_VAR_INT_SC (NCID, VARID, ival) integer, intent ( in) :: NCID integer, intent ( in) :: VARID integer, intent (out) :: ival integer, dimension(1) :: ival_A NF_GET_VAR_INT_SC=NF_GET_VAR_INT (NCID, VARID, ival_A) ival=ival_A(1) end function NF_GET_VAR_INT_SC INTEGER FUNCTION NF_PUT_VAR_REAL_SC (NCID, VARID, RVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID real, intent ( in) :: RVAL real, dimension(1) :: RVAL_A RVAL_A=RVAL NF_PUT_VAR_REAL_SC=NF_PUT_VAR_REAL (NCID, VARID, RVAL_A) end function NF_PUT_VAR_REAL_SC INTEGER FUNCTION NF_GET_VAR_REAL_SC (NCID, VARID, rval) integer, intent ( in) :: NCID integer, intent ( in) :: VARID real, intent (out) :: rval real, dimension(1) :: rval_A NF_GET_VAR_REAL_SC=NF_GET_VAR_REAL (NCID, VARID, rval_A) rval=rval_A(1) end function NF_GET_VAR_REAL_SC INTEGER FUNCTION NF_PUT_VAR_DOUBLE_SC (NCID, VARID, DVAL) integer, intent ( in) :: NCID integer, intent ( in) :: VARID doubleprecision, intent ( in) :: DVAL doubleprecision, dimension(1) :: DVAL_A DVAL_A=DVAL NF_PUT_VAR_DOUBLE_SC=NF_PUT_VAR_DOUBLE (NCID, VARID, DVAL_A) end function NF_PUT_VAR_DOUBLE_SC INTEGER FUNCTION NF_GET_VAR_DOUBLE_SC (NCID, VARID, dval) integer, intent ( in) :: NCID integer, intent ( in) :: VARID doubleprecision, intent (out) :: dval doubleprecision, dimension(1) :: dval_A NF_GET_VAR_DOUBLE_SC=NF_GET_VAR_DOUBLE (NCID, VARID, dval_A) dval=dval_A(1) end function NF_GET_VAR_DOUBLE_SC ! PUT_ATT/GET_ATT INTEGER FUNCTION NF_PUT_ATT_INT1_SC (NCID, VARID, NAME, XTYPE, & LEN, I1VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN integer*1, intent ( in) :: I1VALS integer*1, dimension(1) :: I1VALS_A I1VALS_A=I1VALS NF_PUT_ATT_INT1_SC=NF_PUT_ATT_INT1 (NCID, VARID, NAME, XTYPE, & LEN, I1VALS_A) end function NF_PUT_ATT_INT1_SC INTEGER FUNCTION NF_GET_ATT_INT1_SC (NCID, VARID, NAME, i1vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer*1, intent (out) :: i1vals integer*1, dimension(1) :: i1vals_A NF_GET_ATT_INT1_SC=NF_GET_ATT_INT1 (NCID, VARID, NAME, i1vals_A) i1vals=i1vals_A(1) end function NF_GET_ATT_INT1_SC INTEGER FUNCTION NF_PUT_ATT_INT2_SC (NCID, VARID, NAME, XTYPE, & LEN, I2VALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN integer*2, intent ( in) :: I2VALS integer*2, dimension(1) :: I2VALS_A I2VALS_A=I2VALS NF_PUT_ATT_INT2_SC=NF_PUT_ATT_INT2 (NCID, VARID, NAME, XTYPE, & LEN, I2VALS_A) end function NF_PUT_ATT_INT2_SC INTEGER FUNCTION NF_GET_ATT_INT2_SC (NCID, VARID, NAME, i2vals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer*2, intent (out) :: i2vals integer*2, dimension(1) :: i2vals_A NF_GET_ATT_INT2_SC=NF_GET_ATT_INT2 (NCID, VARID, NAME, i2vals_A) i2vals=i2vals_A(1) end function NF_GET_ATT_INT2_SC INTEGER FUNCTION NF_PUT_ATT_INT_SC (NCID, VARID, NAME, XTYPE, & LEN, IVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN integer, intent ( in) :: IVALS integer, dimension(1) :: IVALS_A IVALS_A=IVALS NF_PUT_ATT_INT_SC=NF_PUT_ATT_INT (NCID, VARID, NAME, XTYPE, & LEN, IVALS_A) end function NF_PUT_ATT_INT_SC INTEGER FUNCTION NF_GET_ATT_INT_SC (NCID, VARID, NAME, ivals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent (out) :: ivals integer, dimension(1) :: ivals_A NF_GET_ATT_INT_SC=NF_GET_ATT_INT (NCID, VARID, NAME, ivals_A) ivals=ivals_A(1) end function NF_GET_ATT_INT_SC INTEGER FUNCTION NF_PUT_ATT_REAL_SC (NCID, VARID, NAME, XTYPE, & LEN, RVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN real, intent ( in) :: RVALS real, dimension(1) :: RVALS_A RVALS_A=RVALS NF_PUT_ATT_REAL_SC=NF_PUT_ATT_REAL (NCID, VARID, NAME, XTYPE, & LEN, RVALS_A) end function NF_PUT_ATT_REAL_SC INTEGER FUNCTION NF_GET_ATT_REAL_SC (NCID, VARID, NAME, rvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME real, intent (out) :: rvals real, dimension(1) :: rvals_A NF_GET_ATT_REAL_SC=NF_GET_ATT_REAL (NCID, VARID, NAME, rvals_A) rvals=rvals_A(1) end function NF_GET_ATT_REAL_SC INTEGER FUNCTION NF_PUT_ATT_DOUBLE_SC (NCID, VARID, NAME, XTYPE, & LEN, DVALS) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME integer, intent ( in) :: XTYPE integer, intent ( in) :: LEN doubleprecision, intent ( in) :: DVALS doubleprecision, dimension(1) :: DVALS_A DVALS_A=DVALS NF_PUT_ATT_DOUBLE_SC=NF_PUT_ATT_DOUBLE (NCID, VARID, NAME, XTYPE, & LEN, DVALS_A) end function NF_PUT_ATT_DOUBLE_SC INTEGER FUNCTION NF_GET_ATT_DOUBLE_SC (NCID, VARID, NAME, dvals) integer, intent ( in) :: NCID integer, intent ( in) :: VARID character (len = *), intent ( in) :: NAME doubleprecision, intent (out) :: dvals doubleprecision, dimension(1) :: dvals_A NF_GET_ATT_DOUBLE_SC=NF_GET_ATT_DOUBLE (NCID, VARID, NAME, dvals_A) dvals=dvals_A(1) end function NF_GET_ATT_DOUBLE_SC end module netcdf