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

Re: netcdf.f90 & 3.3.1 ?



Hi Paul,

I've appended a FORTRAN 90 module for netCDF 3.3.

I tried compiling this (using the Sun f90 compiler) by itself and with
the test routines in nf_test/, but I'm not sure those are adequate
tests.  If you have a good way to test this, I'd appreciate it.

Also, this contains concrete type declarations that are not really valid
Fortran 90, such as INTEGER*1 and INTEGER*2.  For some f90 compilers
these may need to be changed (for example there might be a BYTE type
used instead of INTEGER*1).  They way this should probably be handled in
the release is to put this in a .F file and have the preprocessor use
information generated by the configure script to generate a .f version.

Anyway, I'd be interested in knowing if you find any problems with this
...

--Russ

_____________________________________________________________________

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

!  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

! Functions in the netCDF-3 FORTRAN interface

  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
end module netcdf