[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 950625: example files for using netCDF
- Subject: Re: 950625: example files for using netCDF
- Date: Mon, 26 Jun 1995 09:36:28 -0600
>Keywords: 199506251818.AA12345
Hi Jeremy,
> I am currently trying to use the netCDF file format.
> I was wondering if there were any example fortran programs
> that showed how to write and read a simple using netCDF.
> Althoug the user guide gives an outline on how to do this a
> working concrete example would be much appreciated.
The source distribution includes a test program in netcdf/fortran/ftest.f,
but it's not a very good example since its purpose is to test all the
Fortran interfaces.
If you compose a simple CDL file, say "simple.cdl", to specify the structure
of a simple netCDF dataset, you can use
ncgen -f simple.cdl
to generate Fortran code that will create the netCDF file. This will not
produce a great example, but for automatically-generated code, it's not too
bad. A program that generates Fortran code to read a netCDF file is
available as user-contributed software from:
ftp://ftp.unidata.ucar.edu/pub/netcdf/contrib/gennet.f
I can't find any great complete Fortran example programs, but I've appended
an example sent in from someone at NOAA/FSL who was inquiring about a bug.
I hope this is of some help.
--Russ
______________________________________________________________________________
Russ Rew UCAR Unidata Program
address@hidden http://www.unidata.ucar.edu
program series
C This program will open a series of netCDF-format MAPS model output.
include 'netcdf.inc'
implicit none
integer i, n, times, ndims, filenum, nlevels
c--Set number of dimensions, pressure levels and time levels here:
c (nlevels is the number of interpolated levels for mae program input)
parameter(ndims=2,n=39,times=8,filenum=13,nlevels=50)
integer start(ndims), count(ndims), cdfid, divid, rcode, timeid
integer ncnowrit, qid, qadvtid, tid, tadvtid, dayindex, timesize
integer dims, vars, gatts, recid
real div(n,times), extdiv(n,times), aveserqadvt(filenum,n,times)
real q(n,times), qadvt(n,times), extq(n,times), extqadvt(n,times)
real sertempc(filenum,n,times), tadvt(n,times), exttempc(n,times)
real exttadvt(n,times), tempc(n,times), sertadvt(filenum,n,times)
real serdiv(filenum,n,times), p(n), avesertadvt(filenum,n,times)
real aveserdiv(filenum,n,times), serq(filenum,n,times), hr
real serqadvt(filenum,n,times), seromegaprime(filenum,n,times)
real exttempk(n,times), pmax, pmin, sertempk(filenum,n,times)
character filename*70, date*3, name*128
c--Set desired max and min pressure levels for mae input file here:
parameter(pmax=950.,pmin=250.,hr=60.*60.)
open(unit=60,file='serdiv',form='formatted')
open(unit=61,file='avserdiv',form='formatted')
open(unit=62,file='sertempc',form='formatted')
data start /1,1/
data count /n,times/
data p /1050.,1025.,1000.,975.,950.,925.,900.,875.,850.,825.,
+ 800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,
+ 525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,
+ 250.,225.,200.,175.,150.,125.,100./
c print*,'Enter starting date as a string <month><day>:'
c read(*,21) dayindex
dayindex=129
do i=1,filenum
if(dayindex.eq.132) dayindex = 201
filename = 'doug.nc'
print*,'Processing ',filename,' ...'
c Make errors non-fatal to allow us to do error handling.
c The default is all errors are fatal = call ncpopt(NCVERBOS+NCFATAL)
c call ncpopt(0)
c call ncpopt(NCVERBOS)
C NetCDF subroutine to open netCDF file.
cdfid = ncopn(filename, ncnowrit, rcode)
print*,'cdfid',cdfid
C NetCDF subroutine determining actual dimension of observation times.
timeid = ncdid(cdfid,'time', rcode)
call ncdinq(cdfid, timeid, name, timesize, rcode)
if ( rcode.ne.0 ) print*, 'Error getting time dimension'
print *, 'ncdid/ncdinq result:' , name
call ncinq(cdfid, dims, vars, gatts, recid, rcode)
call ncdinq(cdfid, recid, name, timesize, rcode)
if (rcode.ne.0 ) print*, 'Error getting time dimension...'
c print*,'timeid',timeid
print*,'recid',recid
print*,'name is',name
print*,'timesize is',timesize
print*,'rcode is',rcode
enddo
end