Recipe: Fortran program as OPeNDAP client: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 13: | Line 13: | ||
== Program to read downloaded nc4 file == | == Program to read downloaded nc4 file == | ||
Download the collection inst01hr_3d_T_Cv for 2006-Sep-18/0900z as described [[G5NR Data Access Guide#ftp (global data)|here]]. The downloaded file is <code>c1440_NR.inst01hr_3d_T_Cv.20060918_0900z.nc4</code>. The program to read this file is | |||
<nowiki> | <nowiki> |
Revision as of 07:58, 27 October 2014
Back to G5NR Data Access Guide.
First, we ensure that out NetCDF-4 library has been built with Fortran, HDF5 and OPeNDAP support. All three queries
> nc-config --has-f90 > nc-config --has-hdf5 > nc-config --has-dap
should return yes.
Program to read downloaded nc4 file
Download the collection inst01hr_3d_T_Cv for 2006-Sep-18/0900z as described here. The downloaded file is c1440_NR.inst01hr_3d_T_Cv.20060918_0900z.nc4
. The program to read this file is
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, allocatable :: T(:,:,:,:) ! Miscellaneous ! ------------- integer :: ierr integer :: im, jm, lm integer :: ncid, varid integer :: start(4), count(4) ! file name and dimensions ! ------------------------ im = 720 jm = 361 lm = 72 T_file = "c1440_NR.inst01hr_3d_T_Cv.20060918_0900z.nc4" ! 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") ! Print min/max of arrays ! ----------------------- write(*,*)'T: ', maxval(T),minval(T) deallocate(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
Compile and run
The above code, g5nr_reader.f90
is compiled as
gfortran