WOCE Logo  World Ocean Circulation Experiment
  Global Data Resource
 
   Home   |   Documents   |   Software/Resources   |   Help
 
 Inventories
 WOCE Bibliography
 WOCE Data and Summaries
     Updates
  Bathymetry
     Summary
     Data
  Updates
  Current Meters
     Summary
     Data
  Updates
  Drifters
     Summary
     Data
  Updates
  Sub Surface Floats
     Summary
     Data
  Updates
  Air-Sea Fluxes
     Data
  Updates
  Hydrography
     Summary
     Data
  Updates
  Profiling Floats
     Summary
     Data
  Updates
  Satellite Sea Level
     Summary
     Data
  Updates
  Satellite Sea Sfc Temp  
     Summary
     Data
  Updates
  Satellite Surface Winds
     Summary
     Data
  Updates
  Sea Level - Delayed Mode
     Summary
     Data
  Updates
  Sea Level - Fast Return
     Summary
     Data
  Updates
  Sea Surface Salinity
     Summary
     Data
  Updates
  Shipboard ADCP
     Summary
     Data
  Updates
  Surface Meteorology
     Summary
     Data
  Updates
  Upper Ocean Thermal
     Summary
     Data
  Updates
 Search Tool
  Updates
 Global Data History
 
netCDF Primer   | Software   | netCDF Online hyperlink  | WOCE Conventions

Appendix 1: Readnet.for created from cdf2fortran

Sample file produced by the cdf2fortran utility with the netCDF file 'rcm00683.cdf' found in the WOCE CD ROM 2. Note that this fortran routine can be easily generalised to read all of the cm data records on this CD set.

c-----------------------------------------------------------------------

c

c readnet.f

c This file is a fortran template file designed to read the given

c netCDF file into memory.

c

c History:

c Date Name Action

c --------- ------------ --------------------------------------------

c ?? ??? ?? cids Created.

c

c-----------------------------------------------------------------------

c Do not forget to include the -I path_to_netcdf_includes in your

c compile statement

c Required includes.

c include 'netcdf.inc'

include '/usr/local/netcdf/include/netcdf.inc'

c Define Variables.

c Variable ids run sequentially from 1 to nvars = 08

parameter (nvars = 8) ! number of variables

parameter (nrec= 36434) ! change this 'to generalize

parameter (ndims = 1) ! number of dimensions

parameter (itime = 36434)

integer*4 rcode ! error code

integer*4 recdim ! record dimension

real*8 date(nrec)

real*8 time(nrec)

real*4 speed(nrec)

real*4 direction(nrec)

real*4 u(nrec)

real*4 v(nrec)

real*4 temperature(nrec)

real*4 pressure(nrec)

integer*4 start(ndims) ! hyperslab starting index

integer*4 count(ndims) ! hyperslab count from start

integer vdims(ndims) ! max # of var dims

character*1024 strbuf ! string buffer for var

! and attr names

c Open netCDF file.

ncid=ncopn('rcm00683.cdf',ncnowrit,rcode)

c Get info on the record dimension for this file.

call ncinq(ncid,ndims,nvars,ngatts,recdim,rcode)

call ncdinq(ncid,recdim,strbuf,nrecs,rcode)

c nrecs now contains the # of records for this file

c Retrieve data for date variable.

call ncvinq(ncid, 1,strbuf,nctype,nvdim,vdims,nvatts,rcode)

lenstr=1

do j=1,nvdim

call ncdinq(ncid,vdims(j),strbuf,ndsize,rcode)

lenstr=lenstr*ndsize

start(j)=1

count(j)=ndsize

end do

call ncvgt(ncid, 1,start,count,date,rcode)

c Retrieve data for time variable.

call ncvinq(ncid, 2,strbuf,nctype,nvdim,vdims,nvatts,rcode)

lenstr=1

do j=1,nvdim

call ncdinq(ncid,vdims(j),strbuf,ndsize,rcode)

lenstr=lenstr*ndsize

start(j)=1

count(j)=ndsize

end do

call ncvgt(ncid, 2,start,count,time,rcode)

c Retrieve data for speed variable.

call ncvinq(ncid, 3,strbuf,nctype,nvdim,vdims,nvatts,rcode)

lenstr=1

do j=1,nvdim

call ncdinq(ncid,vdims(j),strbuf,ndsize,rcode)

lenstr=lenstr*ndsize

start(j)=1

count(j)=ndsize

end do

call ncvgt(ncid, 3,start,count,speed,rcode)

c Retrieve data for direction variable.

call ncvinq(ncid, 4,strbuf,nctype,nvdim,vdims,nvatts,rcode)

lenstr=1

do j=1,nvdim

call ncdinq(ncid,vdims(j),strbuf,ndsize,rcode)

lenstr=lenstr*ndsize

start(j)=1

count(j)=ndsize

end do

call ncvgt(ncid, 4,start,count,direction,rcode)

c Retrieve data for u variable.

call ncvinq(ncid, 5,strbuf,nctype,nvdim,vdims,nvatts,rcode)

lenstr=1

do j=1,nvdim

call ncdinq(ncid,vdims(j),strbuf,ndsize,rcode)

lenstr=lenstr*ndsize

start(j)=1

count(j)=ndsize

end do

call ncvgt(ncid, 5,start,count,u,rcode)

c Retrieve data for v variable.

call ncvinq(ncid, 6,strbuf,nctype,nvdim,vdims,nvatts,rcode)

lenstr=1

do j=1,nvdim

call ncdinq(ncid,vdims(j),strbuf,ndsize,rcode)

lenstr=lenstr*ndsize

start(j)=1

count(j)=ndsize

end do

call ncvgt(ncid, 6,start,count,v,rcode)

c Retrieve data for temperature variable.

call ncvinq(ncid, 7,strbuf,nctype,nvdim,vdims,nvatts,rcode)

lenstr=1

do j=1,nvdim

call ncdinq(ncid,vdims(j),strbuf,ndsize,rcode)

lenstr=lenstr*ndsize

start(j)=1

count(j)=ndsize

end do

call ncvgt(ncid, 7,start,count,temperature,rcode)

c Retrieve data for pressure variable.

call ncvinq(ncid, 8,strbuf,nctype,nvdim,vdims,nvatts,rcode)

lenstr=1

do j=1,nvdim

call ncdinq(ncid,vdims(j),strbuf,ndsize,rcode)

lenstr=lenstr*ndsize

start(j)=1

count(j)=ndsize

end do

call ncvgt(ncid, 8,start,count,pressure,rcode)

c ******************************************

c Begin writing statements to use the data.

c ******************************************

c End Program.

stop

end