[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 19990126: Fortran 90 module for NetCDF 3.4



>To: address@hidden
>cc: address@hidden
>From: Paul LE TEXIER <address@hidden>
>Subject: Fortran 90 module for NetCDF 3.4
>Organization: CEA/CESTA
>Keywords: 199901261328.GAA08067

Hi,

>  Please, is there a netcdf module for use with fortran 90 and netcdf
> version 3.4 ?

I've appended the latest attempt we have made at creating such a
module.

It has a problem we don't know how to get around, namely that it can
only handle arrays of rank 1.  If you try to use a multidimensional
array, the compiler complains the argument has the wrong rank.  A user
has to PACK the values from a multidimensional array before calling
NF_PUT_VARA_ routines, and similarly unpack them on reading.  If you
can use the f90 interface module with this restriction, it may be of
some use to you.  Better still, if you know a way around this
restriction, we would be very interested, but we are not Fortran 90
experts.  I think this restriction makes the current interface module
not very useful, so we haven't included it in the source distribution.

--Russ

_____________________________________________________________________

Russ Rew                                         UCAR Unidata Program
address@hidden                     http://www.unidata.ucar.edu

  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

      INTEGER FUNCTION  NF_PUT_VAR_INT1   (NCID, VARID, I1VAL)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        integer*1,                     intent ( in) :: I1VAL
      end function NF_PUT_VAR_INT1

      INTEGER FUNCTION  NF_GET_VAR_INT1   (NCID, VARID, i1val)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        integer*1,                     intent (out) :: i1val
      end function NF_GET_VAR_INT1

      INTEGER FUNCTION  NF_PUT_VAR_INT2   (NCID, VARID, I2VAL)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        integer*2,                     intent ( in) :: I2VAL
      end function NF_PUT_VAR_INT2

      INTEGER FUNCTION  NF_GET_VAR_INT2   (NCID, VARID, i2val)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        integer*2,                     intent (out) :: i2val
      end function NF_GET_VAR_INT2

      INTEGER FUNCTION  NF_PUT_VAR_INT    (NCID, VARID, IVAL)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        integer,                       intent ( in) :: IVAL
      end function NF_PUT_VAR_INT

      INTEGER FUNCTION  NF_GET_VAR_INT    (NCID, VARID, ival)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        integer,                       intent (out) :: ival
      end function NF_GET_VAR_INT

      INTEGER FUNCTION  NF_PUT_VAR_REAL   (NCID, VARID, RVAL)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        real,                          intent ( in) :: RVAL
      end function NF_PUT_VAR_REAL

      INTEGER FUNCTION  NF_GET_VAR_REAL   (NCID, VARID, rval)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        real,                          intent (out) :: rval
      end function NF_GET_VAR_REAL

      INTEGER FUNCTION  NF_PUT_VAR_DOUBLE (NCID, VARID, DVAL)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        doubleprecision,               intent ( in) :: DVAL
      end function NF_PUT_VAR_DOUBLE

      INTEGER FUNCTION  NF_GET_VAR_DOUBLE (NCID, VARID, dval)
        integer,                       intent ( in) :: NCID
        integer,                       intent ( in) :: VARID
        doubleprecision,               intent (out) :: dval
      end function NF_GET_VAR_DOUBLE

      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

      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

      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

      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

      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

      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

      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

      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

      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

      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

      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