|
|
Line 17: |
Line 17: |
| The metadata for the collection <code>inst01hr_3d_T_Cv</code> is available at | | The metadata for the collection <code>inst01hr_3d_T_Cv</code> is available at |
| http://opendap.nccs.nasa.gov/dods/OSSE/G5NR/Ganymed/7km/0.5000_deg/inst/inst01hr_3d_T_Cv.info | | http://opendap.nccs.nasa.gov/dods/OSSE/G5NR/Ganymed/7km/0.5000_deg/inst/inst01hr_3d_T_Cv.info |
|
| |
| == Read downloaded nc4 file ==
| |
|
| |
| We first 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 code below does the following
| |
| * reads global temperature data and computes its max/min
| |
| * reads a subset of the data and computes the subset's max/min
| |
|
| |
|
| ==== Code ==== | | ==== Code ==== |
|
| |
|
| <syntaxhighlight lang="fortran" line> | | <syntaxhighlight lang="fortran" line> |
| program g5nr_reader
| |
|
| |
| use netcdf ! for reading the NR files
| |
|
| |
| implicit none
| |
|
| |
| ! File name
| |
| ! ---------
| |
| character(len=256) :: T_file
| |
|
| |
| ! 4D array: (lon,lat,lev,time)
| |
| ! ------------------------------------
| |
| real, allocatable :: T(:,:,:,:) ! global data
| |
| real, allocatable :: Tsub(:,:,:,:) ! subset of global data
| |
|
| |
| ! Miscellaneous
| |
| ! -------------
| |
| integer :: ierr
| |
| integer :: im, jm, lm
| |
| real :: minlat, minlon, maxlat, maxlon
| |
| integer :: im_sub, jm_sub
| |
| integer :: imin, imax, jmin, jmax
| |
| 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"
| |
|
| |
| ! Open file and get var id
| |
| ! ------------------------
| |
| call check(nf90_open(T_file,NF90_NOWRITE,ncid), "opening T file")
| |
| call check(nf90_inq_varid(ncid,"T",varid), "getting T varid")
| |
|
| |
| ! Read global temperature data
| |
| ! ----------------------------
| |
| allocate(T(im,jm,lm,1)) ! global 4D array with 1 time level
| |
| start = [1, 1, 1, 1]
| |
| count = [im, jm, lm, 1] ! 1 time level, 3D (lon,lat,lev) array
| |
| write(*,*) 'Reading global T...'
| |
| call check(nf90_get_var(ncid,varid,T,start=start,count=count), "reading T")
| |
| write(*,*)'T: ', maxval(T),minval(T)
| |
|
| |
| ! Read temperature over US
| |
| ! lons = -180:0.5:179.5
| |
| ! lats = -90:0.5:90
| |
| ! ------------------------
| |
| write(*,*) 'Reading T over US'
| |
| minlon = -130.
| |
| maxlon = -65.
| |
| minlat = 25.
| |
| maxlat = 50.
| |
| imin = nint((minlon + 180.)/0.5)
| |
| imax = nint((maxlon + 180.)/0.5)
| |
| jmin = nint((minlat + 90.)/0.5)
| |
| jmax = nint((maxlat + 90.)/0.5)
| |
| im_sub = imax-imin+1
| |
| jm_sub = jmax-jmin+1
| |
| allocate(Tsub(im_sub,jm_sub,lm,1)) ! global 4D array with 1 time level
| |
| start = [1, 1, 1, 1]
| |
| count = [im_sub, jm_sub, lm, 1] ! 1 time level, 3D (lon,lat,lev) array
| |
| call check(nf90_get_var(ncid,varid,Tsub,start=start,count=count), "reading Tsub")
| |
| write(*,*)'Tsub: ', maxval(Tsub),minval(Tsub)
| |
|
| |
| ! close file, release memory
| |
| call check(nf90_close(ncid), "closing T file")
| |
| deallocate(T)
| |
| deallocate(Tsub)
| |
|
| |
| ! 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
| |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|