[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: netCDF 2.4.2 released
- Subject: Re: netCDF 2.4.2 released
- Date: Wed, 17 Jul 1996 09:29:11 -0600
Hi Don,
> I recently brought your 2.4.2 netcdf distribution up on WinNT and
> have a couple of items that should be included in the instructions.
>
> 1) copy local_nc.gen to local_nc.h in libsrc
> 2) copy msoftyy.c to ncgenyy.c and copy msofttab.h to ncgentab.h in ncgen
Thanks. I've included these in the INSTALL document for the next release.
I also added these to the document "Known Problems with the netCDF
Distribution" at
<URL:http://www.unidata.ucar.edu/packages/netcdf/known_problems.html>
that's now referenced from the netCDF home page, and made a link to that
entry from the FAQ document where Windows NT is mentioned.
> I've been looking at porting the stuff to VC++ 4.0 (easy) and Fortran
> PowerStation 4.0 (Fortran90, hard). The problems seems to be with the
> Fortran PS interface files. It appears to care whether I'm passing a
> scalar or array (even though both are passed by reference :-( ). I have
> a clunky version working, but it was just to get my model ported. I'm not
> sure you even want to see it yet. I'll let you know when I have something
> that is useable by the general public.
Yes, I've been corresponding with Robert Pincus, NASA/GSFC, about a Fortran
90 interface block for netCDF, and I've appended what we came up with, in
case you're interested. For netCDF 3.0, we've designed a new Fortran
interface (while keeping the old one for backward compatibility) that will
do type conversion, so you can ask for data as type "real" and not care
whether it's stored in the netCDF file as bytes, integers, real, or double
precision. This will make it easier to provide interface blocks too, since
there's no "type-punning" in the new netCDF-3.0 interface.
--Russ
! Encapsulation of netCDF API parameters and interface blocks.
! Derived from "netcdf.inc" in the netCDF 2.4/HDF 4.0.1 distribution.
! Russ Rew, Unidata, and Robert Pincus, NASA/GSFC
module netcdf
! Netcdf data types
integer, parameter :: NCBYTE = 1, NCCHAR = 2, NCSHORT = 3, &
NCLONG = 4, NCFLOAT = 5, NCDOUBLE = 6
! masks for the struct NC flag field; passed in as 'mode' arg to
! nccreate and ncopen.
integer, parameter :: &
NCRDWR = 1, & ! read/write, 0 => readonly
NCCREAT = 2, & ! in create phase, cleared by ncendef
NCEXCL = 4, & ! on create destroy existing file
NCINDEF = 8, & ! in define mode, cleared by ncendef
NCNSYNC = 16, & ! synchronise whole header on change (X'20')
NCHSYNC = 32, & ! synchronise numrecs on change (X'10')
NCNDIRTY = 64, & ! numrecs has changed (X'40')
NCHDIRTY = 128, & ! header info has changed (X'80')
NCFILL = 0, & ! prefill vars on endef and increase of record (default)
NCNOFILL = 256, & ! don't fill vars on endef and increase of record (X'100')
NCLINK = 32768 ! isa link (X'8000')
! 'mode' arguments for nccreate and ncopen
integer, parameter :: &
NCNOWRIT = 0, NCWRITE = NCRDWR, &
NCCLOB = 11, NCNOCLOB = 15
integer, parameter :: &
NCUNLIM = 0 ! 'size' argument to ncdimdef for an unlimited dimension
integer, parameter :: &
NCGLOBAL = 0 ! attribute id to put/get a global attribute
! Advisory Maximums
integer, parameter :: &
MAXNCOP = 32, MAXNCDIM = 32, MAXNCATT = 512, MAXNCVAR = 512, &
MAXNCNAM = 128, MAXVDIMS = MAXNCDIM ! Not enforced
! Global netcdf error status variable
! Initialized in error.c
integer, parameter :: &
NCNOERR = 0, & ! No Error
NCEBADID = 1, & ! Too many netcdfs open
NCENFILE = 2, & ! Not a netcdf id
NCEEXIST = 3, & ! netcdf file exists && NCNOCLOB
NCEINVAL = 4, & ! Invalid Argument
NCEPERM = 5, & ! Write to read only
NCENOTIN = 6, & ! Operation not allowed in data mode
NCEINDEF = 7, & ! Operation not allowed in define mode
NCECOORD = 8, & ! Coordinates out of Domain
NCEMAXDS = 9, & ! String match to name in use
NCENAME = 10, & ! MAXNCDIMS exceeded
NCENOATT = 11, & ! Attribute not found
NCEMAXAT = 12, & ! MAXNCATTRS exceeded
NCEBADTY = 13, & ! Not a netcdf data type
NCEBADD = 14, & ! Invalid dimension id
NCEUNLIM = 15, & ! NCUNLIMITED in the wrong index
NCEMAXVS = 16, & ! MAXNCVARS exceeded
NCENOTVR = 17, & ! Variable not found
NCEGLOB = 18, & ! Action prohibited on NCGLOBAL varid
NCENOTNC = 19, & ! Not a netcdf file
NCESTS = 20, &
NCENTOOL = 21, &
NCFOOBAR = 32, &
NCSYSERR = -1
! Global options variable. Used to determine behavior of error handler.
! Initialized in lerror.c
integer, parameter :: NCFATAL = 1, NCVERBOS = 2
! 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
integer function ncopn(filename, rwmode, rcode)
character (len = *), intent ( in) :: filename
integer , intent ( in) :: rwmode
integer , intent (out) :: rcode
end function ncopn
subroutine ncredf (ncid, rcode)
integer , intent ( in) :: ncid
integer , intent (out) :: rcode
end subroutine ncredf
subroutine ncendf (ncid, rcode)
integer , intent ( in) :: ncid
integer , intent (out) :: rcode
end subroutine ncendf
subroutine ncclos (ncid, rcode)
integer , intent ( in) :: ncid
integer , intent (out) :: rcode
end subroutine ncclos
subroutine ncinq (ncid, ndims, nvars, natts, recdim, rcode)
integer , intent ( in) :: ncid
integer , intent (out) :: ndims, nvars, natts, recdim
integer , intent (out) :: rcode
end subroutine ncinq
subroutine ncsnc (ncid, rcode)
integer , intent ( in) :: ncid
integer , intent (out) :: rcode
end subroutine ncsnc
subroutine ncabor (ncid, rcode)
integer , intent ( in) :: ncid
integer , intent (out) :: rcode
end subroutine ncabor
integer function ncddef(ncid, dimname, dimsize, rcode)
integer , intent ( in) :: ncid, dimsize
character (len = *), intent ( in) :: dimname
integer , intent (out) :: rcode
end function ncddef
integer function ncdid(ncid, dimname, rcode)
integer , intent ( in) :: ncid
character (len = *), intent ( in) :: dimname
integer , intent (out) :: rcode
end function ncdid
subroutine ncdinq (ncid,dimid, dimname,size,rcode)
integer , intent ( in) :: ncid, dimid
character (len = *), intent (out) :: dimname
integer , intent (out) :: size
integer , intent (out) :: rcode
end subroutine ncdinq
subroutine ncdren (ncid,dimid,dimname, rcode)
integer , intent ( in) :: ncid, dimid
character (len = *), intent ( in) :: dimname
integer , intent (out) :: rcode
end subroutine ncdren
integer function ncvdef(ncid, varname, vartype, nvdims, vdims, rcode)
integer , intent ( in) :: ncid, vartype, nvdims
character (len = *) , intent ( in) :: varname
integer, dimension(:), intent ( in) :: vdims
integer , intent (out) :: rcode
end function ncvdef
integer function ncvid(ncid, varname, rcode)
integer , intent ( in) :: ncid
character (len = *), intent ( in) :: varname
integer , intent (out) :: rcode
end function ncvid
subroutine ncvinq (ncid,varid, varname,datatype,nvdims,vdims,nvatts,rcode)
integer , intent ( in) :: ncid, varid
character (len = *), intent (out) :: varname
integer , intent (out) :: datatype, nvdims, nvatts, rcode
integer, dimension(:), &
intent (out) :: vdims
end subroutine ncvinq
! In some of the following routines, values may legally have any type and any
! dimension up to 7 (the Fortran limit). We haven't worked out a way to
! treat this in Fortran-90, so the interface blocks have been commented out.
! subroutine ncvpt1 (ncid,varid,indices,value, rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: indices
! real , intent ( in) :: value
! integer , intent (out) :: rcode
! end subroutine ncvpt1
subroutine ncvp1c (ncid,varid,indices, chval, rcode)
integer , intent ( in) :: ncid, varid
integer, dimension(:), &
intent ( in) :: indices
character , intent ( in) :: chval
integer , intent (out) :: rcode
end subroutine ncvp1c
! subroutine ncvgt1 (ncid,varid,indices, value, rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: indices
! real , intent (out) :: value
! integer , intent (out) :: rcode
! end subroutine ncvgt1
subroutine ncvg1c (ncid,varid,indices, chval, rcode)
integer , intent ( in) :: ncid, varid
integer, dimension(:), &
intent ( in) :: indices
character , intent (out) :: chval
integer , intent (out) :: rcode
end subroutine ncvg1c
! subroutine ncvpt (ncid,varid,start,counts,values, rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: start, counts
! real , intent ( in) :: values(*)
! integer , intent (out) :: rcode
! end subroutine ncvpt
! subroutine ncvptc (ncid,varid,start,counts,string,lenstr, rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: start, counts
! character (len = *), intent ( in) :: string
! integer , intent ( in) :: lenstr
! integer , intent (out) :: rcode
! end subroutine ncvptc
! subroutine ncvptg (ncid,varid,start,counts,strides,imap,values, rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: start, counts, strides, imap
! real , intent ( in) :: values(*)
! integer , intent (out) :: rcode
! end subroutine ncvptg
! subroutine ncvpgc (ncid,varid,start,counts,strides,imap,string,rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: start, counts, strides, imap
! character (len = *), intent ( in) :: string
! integer , intent (out) :: rcode
! end subroutine ncvpgc
! subroutine ncvgt (ncid,varid,start,counts, values,rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: start, counts
! real , intent (out) :: values
! integer , intent (out) :: rcode
! end subroutine ncvgt
! subroutine ncvgtc (ncid,varid,start,counts, string,lenstr,rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: start, counts
! character (len = *), intent (out) :: string
! integer , intent ( in) :: lenstr
! integer , intent (out) :: rcode
! end subroutine ncvgtc
! subroutine ncvgtg (ncid,varid,start,counts,strides,imap,values,rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: start, counts, strides, imap
! real , intent (out) :: values
! integer , intent (out) :: rcode
! end subroutine ncvgtg
! subroutine ncvggc (ncid,varid,start,counts,strides,imap,string,rcode)
! integer , intent ( in) :: ncid, varid
! integer, dimension(:), &
! intent ( in) :: start, counts
! integer , intent ( in) :: strides(*)
! integer , intent ( in) :: imap(*)
! character (len = *), intent (out) :: string
! integer , intent (out) :: rcode
! end subroutine ncvggc
subroutine ncvren (ncid,varid,varname, rcode)
integer , intent ( in) :: ncid, varid
character (len = *), intent ( in) :: varname
integer , intent (out) :: rcode
end subroutine ncvren
! subroutine ncapt (ncid,varid,attname,datatype,attlen,values, rcode)
! integer , intent ( in) :: ncid, varid
! character (len = *), intent ( in) :: attname
! integer , intent ( in) :: datatype, attlen
! real , intent ( in) :: values(*)
! integer , intent (out) :: rcode
! end subroutine ncapt
subroutine ncaptc (ncid,varid,attname,datatype,lenstr,string, rcode)
integer , intent ( in) :: ncid, varid
character (len = *), intent ( in) :: attname
integer , intent ( in) :: datatype, lenstr
character (len = *), intent ( in) :: string
integer , intent (out) :: rcode
end subroutine ncaptc
subroutine ncainq (ncid,varid,attname, datatype,attlen,rcode)
integer , intent ( in) :: ncid, varid
character (len = *), intent ( in) :: attname
integer , intent (out) :: datatype, attlen
integer , intent (out) :: rcode
end subroutine ncainq
! subroutine ncagt (ncid,varid,attname, values,rcode)
! integer , intent ( in) :: ncid, varid
! character (len = *), intent ( in) :: attname
! real , intent (out) :: values
! integer , intent (out) :: rcode
! end subroutine ncagt
subroutine ncagtc (ncid,varid,attname, string,lenstr,rcode)
integer , intent ( in) :: ncid, varid
character (len = *), intent ( in) :: attname
character (len = *), intent (out) :: string
integer , intent ( in) :: lenstr
integer , intent (out) :: rcode
end subroutine ncagtc
subroutine ncacpy (inncid,invarid,attname,outncid,outvarid, rcode)
integer , intent ( in) :: inncid, invarid
character (len = *), intent ( in) :: attname
integer , intent ( in) :: outncid, outvarid
integer , intent (out) :: rcode
end subroutine ncacpy
subroutine ncanam (ncid,varid,attnum, attname,rcode)
integer , intent ( in) :: ncid, varid, attnum
character (len = *), intent (out) :: attname
integer , intent (out) :: rcode
end subroutine ncanam
subroutine ncaren (ncid,varid,attname,newname, rcode)
integer , intent ( in) :: ncid, varid
character (len = *), intent ( in) :: attname, newname
integer , intent (out) :: rcode
end subroutine ncaren
subroutine ncadel (ncid,varid,attname, rcode)
integer , intent ( in) :: ncid, varid
character (len = *), intent ( in) :: attname
integer , intent (out) :: rcode
end subroutine ncadel
integer function nctlen(type, rcode)
integer , intent ( in) :: type
integer , intent (out) :: rcode
end function nctlen
subroutine ncpopt (ncopts)
integer , intent ( in) :: ncopts
end subroutine ncpopt
subroutine ncgopt (ncopts)
integer , intent (out) :: ncopts
end subroutine ncgopt
integer function ncsfil(ncid, fillmode, rcode)
integer , intent ( in) :: ncid, fillmode
integer , intent (out) :: rcode
end function ncsfil
end interface
end module netcdf