Example netcdf program
program test_netcdf ! ----------------------------------------------------------------------- ! The drunken divers testcase ! some lines are stolen from unidata - netcdf testprograms ! ----------------------------------------------------------------------- use netcdf implicit none character*256 :: outputfile='divers_birth_day_drink.nc' integer :: stdout=6 ! include 'netcdf.inc' integer :: ncid, k integer :: latdim, londim, depthdim, timedim integer :: vardims(4) integer :: latid, lonid, depthid, timeid, ndepth=5 integer :: varid real :: depth(5), drinks(1,1,5,1), degeast, degnorth real*8 :: rdays character (len = *), parameter :: varunit = "glasses" character (len = *), parameter :: varname = "number of drinks" character (len = *), parameter :: varshort = "drinks" character (len = *), parameter :: units = "units" character (len = *), parameter :: long_name = "long_name" character (len = *), parameter :: lat_name = "latitude" character (len = *), parameter :: lon_name = "longitude" character (len = *), parameter :: lat_units = "degrees_north" character (len = *), parameter :: lon_units = "degrees_east" character (len = *), parameter :: depth_units = "m" character (len = *), parameter :: time_units = "days since 2000-01-01 00:00:00" character (len = *), parameter :: origin = "time_origin" character (len = *), parameter :: origin_val = "1-jan-2000 00:00:00" ! ----------------------------------------------------------------------- ! define where and when the diver dives and ! in which depth he has how much birthday drinks ! ----------------------------------------------------------------------- degnorth = 57.02 degeast = 20.3 rdays = 10.0 do k=1, 5 depth(k) = float(k)*float(k) drinks(1,1,k,1) = depth(k) enddo ! ----------------------------------------------------------------------- ! create the file ! ----------------------------------------------------------------------- call check( nf90_create(outputfile, nf90_clobber, ncid)) write(stdout,*) 'file ',trim(outputfile),' has been created ' ! ----------------------------------------------------------------------- ! define axis ! ----------------------------------------------------------------------- call check( nf90_def_dim(ncid, 'longitude', 1, londim)) call check( nf90_def_dim(ncid, 'latitude' , 1, latdim)) call check( nf90_def_dim(ncid, 'depth' , ndepth, depthdim)) call check( nf90_def_dim(ncid, 'time' , nf90_unlimited, timedim)) call check( nf90_def_var(ncid, lon_name, nf90_real, londim, lonid)) call check( nf90_def_var(ncid, lat_name, nf90_real, latdim, latid)) call check( nf90_def_var(ncid, 'depth', nf90_real, depthdim, depthid)) call check( nf90_def_var(ncid, 'time', nf90_real, timedim, timeid)) call check( nf90_put_att(ncid, latid, units, lat_units) ) call check( nf90_put_att(ncid, lonid, units, lon_units) ) call check( nf90_put_att(ncid, depthid, units, depth_units)) call check( nf90_put_att(ncid, timeid, units, time_units)) call check( nf90_put_att(ncid, timeid, origin, origin_val)) vardims(1) = londim vardims(2) = latdim vardims(3) = depthdim vardims(4) = timedim ! ----------------------------------------------------------------------- ! define variables ! ----------------------------------------------------------------------- call check( nf90_def_var(ncid, trim(varshort), nf90_real, vardims, varid)) call check( nf90_put_att(ncid, varid, units ,trim(varunit))) call check( nf90_put_att(ncid, varid, long_name, trim(varname))) call check( nf90_enddef(ncid)) ! ----------------------------------------------------------------------- ! now write something ! ----------------------------------------------------------------------- call check( nf90_put_var(ncid, latid, degnorth)) call check( nf90_put_var(ncid, lonid, degeast)) call check( nf90_put_var(ncid, depthid, depth)) call check( nf90_put_var(ncid, timeid, rdays)) call check( nf90_put_var(ncid, varid, drinks)) !----------------------------------------------------------------------- ! ready !----------------------------------------------------------------------- call check( nf90_close(ncid)) contains subroutine check(status) integer, intent ( in) :: status if(status /= nf90_noerr) then print *, trim(nf90_strerror(status)) stop "stopped" end if end subroutine check end program test_netcdf
, multiple selections available,