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

Re: 19980803: 2 Questions to netCDF 3.4



>To: address@hidden
>From: address@hidden
>Subject: 2 Questions to netCDF 3.4
>Organization: .
>Keywords: 199808030909.DAA13766

Hi Juergen,

> I have 2 Questions to netCDF 3.4.

I have forwarded your first question regarding what appears to be a bug
on a CRAY J90 to Steve Emmerson <address@hidden> for further
investigation.

> 2. My second question is, if I can get a module file for the FORTRAN
> netCDF routines with a declaration of all interfaces to the FORTRAN netcdf
> functions.
> Like following (for netCDF2.4):
> 
> ...
>  ! Functions in the FORTRAN interface
> 
>   interface
>     integer function nccre(filename, cmode, rcode)
>       character (len = *), intent ( in) :: filename
>       integer            , intent ( in) :: cmode
>       integer            , intent (out) :: rcode
>     end function nccre

Unfortunately, we don't have a complete module file for the netCDF-3
Fortran interfaces.

The module file we supplied with netcdf-2.4 was an experiment in trying
to provide some Fortran 90 support, but we never succeeded in creating a
complete Fortran 90 interface for netCDF-2, because the Fortran
interface uses "type punning" where the same parameter to a subroutine
such as NCVPT's data parameter is intended to serve for INTEGER or REAL
arguments of various ranks (scalar, vector, multidimensional arrays
...).  We did not know how to get around Fortran 90's stricter type
checking that only permits a single type and shape for the data
parameter.

In the latest version (netcdf-3.4), the new interface solves the type
punning problem by doing automatic type conversion between the external
numeric type and whatever internal numeric type you desire, but it
doesn't solve the problem of allowing different ranks for the data
argument.  We have discussed with Robert Pincus of NASA how to solve
this problem and provide a good Fortran 90 interface for netCDF, but we
haven't finished the required work.  Pincus has suggested how we could
use generic functions and optional (named) arguments to implement a
Fortran 90 interface (purely with module definitions) that uses just one
read and one write interface, but we currently don't have the resources
to finish adapting netCDF-3 to Fortran 90.

In case you are interested, I've appended the module file in its current
state.  If you can get this to work for your purposes, we would be very
interested.  I would also be happy to send you notes from a meeting we
had with Pincus about steps needed to create the generic interface for
Fortran 90 that he had in mind, if you are interested.

--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