[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 20001017: attributes "friend" are not allowed
- Subject: Re: 20001017: attributes "friend" are not allowed
- Date: Wed, 18 Oct 2000 11:27:14 -0600
>To: address@hidden
>From: Jongil Han <address@hidden>
>Subject: Re: 20001017: attributes "friend" are not allowed
>Organization: UCSD
>Keywords: 200010171538.e9HFcl422289
Jongil,
> By the way, could you send me a sample fortran program to read netcdf
> data set if you have? As a beginer, it's not easy to figure out and be
> familiar with netcdf data set. A sample program that uses netcdf library
> and utility would be very helpful.
There are now two Fortran interfaces, one for Fortran-77 and one for
Fortran-90. The latter is contained in the netcdf-3.5 beta release,
and will be in the final netCDF-3.5 release to be made available in
the next week or two. It is described at
http://www.unidata.ucar.edu/packages/netcdf/f90/index.html
But I assume you want to use the Fortran 77 interface in netCDF 3.4,
which is also available in netCDF 3.5. An overview of the netCDF
calls needed to read data is in the "Use of the NetCDF Library"
chapter of the "NetCDF User's Guide for FORTRAN" at
http://www.unidata.ucar.edu/packages/netcdf/guidef/guidef-9.html#HEADING9-0
See especially section 4.2 and 4.3.
I've also appended an example of a Fortran program that reads netCDF
data.
You can generate examples of Fortran programs that write netCDF data
by first creating a "CDL file" (a text version of a binary netCDF
file, see the User's Guide) and then using the ncgen utility with the
"-f" option to generate the Fortran code needed to create the
corresponding netCDF file.
There is also a large test program in the nf_test/ directory that
demonstrates every feature of the interface ...
--Russ
_____________________________________________________________________
Russ Rew UCAR Unidata Program
address@hidden http://www.unidata.ucar.edu
program fgennc
include 'netcdf.inc'
* error status return
integer iret
* netCDF id
integer ncid
* dimension ids
integer m_dim
integer n_dim
integer r_dim
* dimension lengths
integer m_len
integer n_len
integer r_len
parameter (m_len = 3)
parameter (n_len = 2)
parameter (r_len = NF_UNLIMITED)
* variable ids
integer w_id
integer x_id
integer y_id
integer z_id
* rank (number of dimensions) for each variable
integer w_rank
integer x_rank
integer y_rank
integer z_rank
parameter (w_rank = 1)
parameter (x_rank = 2)
parameter (y_rank = 1)
parameter (z_rank = 2)
* variable shapes
integer w_dims(w_rank)
integer x_dims(x_rank)
integer y_dims(y_rank)
integer z_dims(z_rank)
* data variables
real w(m_len)
real x(n_len, m_len)
* open file
iret = nf_open('md.nc', NF_NOWRITE, ncid)
call check_err(iret)
* read w array as reals
iret = nf_inq_varid(ncid, 'w', w_id)
call check_err(iret)
iret = nf_get_var_real(ncid, w_id, w)
call check_err(iret)
print *, w(1), w(2), w(3)
iret = nf_close(ncid)
call check_err(iret)
end
subroutine writerecs(ncid,y_id,z_id)
* netCDF id
integer ncid
* variable ids
integer y_id
integer z_id
include 'netcdf.inc'
* error status return
integer iret
* netCDF dimension sizes for dimensions used with record variables
integer n_len
parameter (n_len = 2)
* rank (number of dimensions) for each variable
integer y_rank
integer z_rank
parameter (y_rank = 1)
parameter (z_rank = 2)
* starts and counts for array sections of record variables
integer y_start(y_rank), y_count(y_rank)
integer z_start(z_rank), z_count(z_rank)
* data variables
integer y_nr
parameter (y_nr = 2)
real y(y_nr)
integer z_nr
parameter (z_nr = 2)
real z(n_len, z_nr)
data y /-1, -2/
data z /-11, -12, -21, -22/
* store y
y_start(1) = 1
y_count(1) = y_nr
iret = nf_put_vara_real(ncid, y_id, y_start, y_count, y)
call check_err(iret)
* store z
z_start(1) = 1
z_start(2) = 1
z_count(1) = n_len
z_count(2) = z_nr
iret = nf_put_vara_real(ncid, z_id, z_start, z_count, z)
call check_err(iret)
end
subroutine check_err(iret)
integer iret
include 'netcdf.inc'
if (iret .ne. NF_NOERR) then
print *, nf_strerror(iret)
stop
endif
end