Recipe: Fortran program as OPeNDAP client
Program to read downloaded nc4 file
To read a downloaded file in Fortran we need a NetCDF-4 library that has been configured with HDF5 support. Availability of HDF5 support can be checked using the nc-config
tool included in the NetCDF-4 package.
> nc_config --has-hdf5
should return the value
yes
.
program g5nr_reader use netcdf ! for reading the NR files implicit none ! File name ! --------- character(len=256) :: T_file ! Global, 4D array: (lon,lat,lev,time) ! ------------------------------------ real, pointer :: T(:,:,:,:) => null() ! Miscellaneous ! ------------- integer :: ierr integer :: im, jm, lm integer :: ncid, varid integer :: start(4), count(4) ! For now hard code file name and dimensions ! ------------------------------------------ im = 720 jm = 361 lm = 72 T_file = "http://opendap.nccs.nasa.gov:9090/dods/OSSE/GEOS-5.12/BETA9/0.5000_deg/inst/inst01hr_3d_T_Cv" ! Allocate the Global 4-D array with only 1 time level ! ---------------------------------------------------- allocate(T(im,jm,lm,1)) ! Hypercube for reading one 1 array for a given time ! ------------------------------------------------- start = (/ 1, 1, 1, 37 /) ! time level 37 count = (/ im, jm, lm, 1 /) ! 1 time level, 3D (lon,lat,lev) array ! Read the data file ! ------------------ write(*,*)'Reading T' call check( nf90_open(T_file,NF90_NOWRITE,ncid), "opening T file") call check( nf90_inq_varid(ncid,"t",varid), "getting T varid") call check( nf90_get_var(ncid,varid,T,start=start,count=count), "reading T") call check( nf90_close(ncid), "closing T file") ! Orint min/max of arrays ! ----------------------- write(*,*)'T: ', maxval(T),minval(T) ! All done ! -------- contains subroutine check(status, loc) integer, intent(in) :: status character(len=*), intent(in) :: loc if(status /= NF90_NOERR) then write (*,*) "Error at ", loc write (*,*) NF90_STRERROR(status) end if end subroutine check end program g5nr_reader