PROGRAM arpsread,10 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Sample program to read history data file produced by ARPS. ! ! Link arpsread using the following command on a IBM RISC/6000 ! system, assuming HDF, NetCDF and Savi3D libraries are not ! available: ! ! f90 arpsread.f read3d.o nohdfio3d.o nonetio3d.o nosviio3d.o \ ! gradsio3d.o pakio3d.o outlib3d.o ibmlib3d.o ! ! !----------------------------------------------------------------------- ! INCLUDE 'globcst.inc' INTEGER :: nx, ny, nz INTEGER :: nstyps ! !----------------------------------------------------------------------- ! ! Arrays to be read in: ! !----------------------------------------------------------------------- ! REAL, allocatable :: x(:) ! The x-coord. of the physical and ! computational grid. REAL, allocatable :: y(:) ! The y-coord. of the physical and ! computational grid. REAL, allocatable :: z(:) ! The z-coord. of the computational ! grid. Defined at w-point. REAL, allocatable :: zp(:,:,:) ! The height of the terrain. REAL, allocatable :: hterain(:,:) ! Terrain height. REAL, allocatable :: j1(:,:,:) ! Coordinate transformation ! Jacobian -d(zp)/d(x) REAL, allocatable :: j2(:,:,:) ! Coordinate transformation ! Jacobian -d(zp)/d(y) REAL, allocatable :: j3(:,:,:) ! Coordinate transformation ! Jacobian d(zp)/d(z) REAL, allocatable :: uprt (:,:,:) ! Perturbation u-velocity (m/s) REAL, allocatable :: vprt (:,:,:) ! Perturbation v-velocity (m/s) REAL, allocatable :: wprt (:,:,:) ! Perturbation w-velocity (m/s) REAL, allocatable :: ptprt (:,:,:) ! Perturbation potential temperature (K) REAL, allocatable :: pprt (:,:,:) ! Perturbation pressure (Pascal) REAL, allocatable :: qvprt (:,:,:) ! Perturbation water vapor specific ! humidity (kg/kg) REAL, allocatable :: qc (:,:,:) ! Cloud water mixing ratio (kg/kg) REAL, allocatable :: qr (:,:,:) ! Rain water mixing ratio (kg/kg) REAL, allocatable :: qi (:,:,:) ! Cloud ice mixing ratio (kg/kg) REAL, allocatable :: qs (:,:,:) ! Snow mixing ratio (kg/kg) REAL, allocatable :: qh (:,:,:) ! Hail mixing ratio (kg/kg) REAL, allocatable :: tke (:,:,:) ! Turbulent Kinetic Energy ((m/s)**2) REAL, allocatable :: kmh (:,:,:) ! Horizontal turb. mixing coef. for ! momentum. ( m**2/s ) REAL, allocatable :: kmv (:,:,:) ! Vertical turb. mixing coef. for ! momentum. ( m**2/s ) REAL, allocatable :: ubar (:,:,:) ! Base state u-velocity (m/s) REAL, allocatable :: vbar (:,:,:) ! Base state v-velocity (m/s) REAL, allocatable :: wbar (:,:,:) ! Base state w-velocity (m/s) REAL, allocatable :: ptbar (:,:,:) ! Base state potential temperature (K) REAL, allocatable :: pbar (:,:,:) ! Base state pressure (Pascal) REAL, allocatable :: rhobar (:,:,:) ! Base state air density (kg/m**3) REAL, allocatable :: qvbar (:,:,:) ! Base state water vapor specific ! humidity (kg/kg) REAL, allocatable :: u (:,:,:) ! Total u-velocity (m/s) REAL, allocatable :: v (:,:,:) ! Total v-velocity (m/s) REAL, allocatable :: w (:,:,:) ! Total w-velocity (m/s) REAL, allocatable :: qv (:,:,:) ! Water vapor specific humidity (kg/kg) INTEGER, allocatable :: soiltyp (:,:,:) ! Soil type REAL, allocatable :: stypfrct(:,:,:) ! Fraction of soil types INTEGER, allocatable :: vegtyp(:,:) ! Vegetation type REAL, allocatable :: lai (:,:) ! Leaf Area Index REAL, allocatable :: roufns (:,:) ! Surface roughness REAL, allocatable :: veg (:,:) ! Vegetation fraction REAL, allocatable :: tsfc (:,:,:) ! Temperature at surface (K) REAL, allocatable :: tsoil (:,:,:) ! Deep soil temperature (K) REAL, allocatable :: wetsfc (:,:,:) ! Surface soil moisture REAL, allocatable :: wetdp (:,:,:) ! Deep soil moisture REAL, allocatable :: wetcanp(:,:,:) ! Canopy water amount REAL, allocatable :: snowdpth(:,:) ! Snow depth (m) REAL, allocatable ::raing(:,:) ! Grid supersaturation rain REAL, allocatable ::rainc(:,:) ! Cumulus convective rain REAL, allocatable ::prcrate(:,:,:) ! precipitation rate (kg/(m**2*s)) ! prcrate(1,1,1) = total precip. rate ! prcrate(1,1,2) = grid scale precip. rate ! prcrate(1,1,3) = cumulus precip. rate ! prcrate(1,1,4) = microphysics precip. rate REAL, allocatable ::radfrc(:,:,:) ! Radiation forcing (K/s) REAL, allocatable ::radsw (:,:) ! Solar radiation reaching the surface REAL, allocatable ::rnflx (:,:) ! Net radiation flux absorbed by surface REAL, allocatable ::usflx (:,:) ! Surface flux of u-momentum (kg/(m*s**2)) REAL, allocatable ::vsflx (:,:) ! Surface flux of v-momentum (kg/(m*s**2)) REAL, allocatable ::ptsflx(:,:) ! Surface heat flux (K*kg/(m*s**2)) REAL, allocatable ::qvsflx(:,:) ! Surface moisture flux (kg/(m**2*s)) REAL, allocatable ::tem1(:,:,:) ! Work arrays REAL, allocatable ::tem2(:,:,:) ! Work arrays REAL, allocatable ::tem3(:,:,:) ! Work arrays ! !----------------------------------------------------------------------- ! ! Misc. internal variables ! !----------------------------------------------------------------------- ! INTEGER :: hinfmt, nchin, istatus INTEGER :: lengbf, lenfil, ireturn CHARACTER (LEN=80) :: filename CHARACTER (LEN=80) :: grdbasfn REAL :: time hinfmt = 1 ! Data format set to 1 for unformatted binary grdbasfn = 'may20.grbgrdbas' ! File containing base state and grid arrays lengbf = len_trim(grdbasfn) filename = 'may20.grb003600' ! History data file at 3600 s. lenfil = len_trim(filename ) ! !----------------------------------------------------------------------- ! ! Obtain the grid dimensions from input data. ! !----------------------------------------------------------------------- ! CALL get_dims_from_data(hinfmt,grdbasfn(1:lengbf), & nx,ny,nz,nstyps, ireturn) IF( ireturn /= 0 ) THEN PRINT*,'Problem occured when trying to get dimensions from data.' PRINT*,'Program stopped.' STOP END IF WRITE(6,'(3(a,i5))') 'nx =',nx,', ny=',ny,', nz=',nz ! ! ! Allocate arrays ! !----------------------------------------------------------------------- ! allocate(x (nx),stat=istatus) allocate(y (ny),stat=istatus) allocate(z (nz),stat=istatus) allocate(zp (nx,ny,nz),stat=istatus) allocate(hterain(nx,ny),stat=istatus) allocate(j1 (nx,ny,nz),stat=istatus) allocate(j2 (nx,ny,nz),stat=istatus) allocate(j3 (nx,ny,nz),stat=istatus) allocate(uprt (nx,ny,nz),stat=istatus) allocate(vprt (nx,ny,nz),stat=istatus) allocate(wprt (nx,ny,nz),stat=istatus) allocate(ptprt (nx,ny,nz),stat=istatus) allocate(pprt (nx,ny,nz),stat=istatus) allocate(qvprt (nx,ny,nz),stat=istatus) allocate(qc (nx,ny,nz),stat=istatus) allocate(qr (nx,ny,nz),stat=istatus) allocate(qi (nx,ny,nz),stat=istatus) allocate(qs (nx,ny,nz),stat=istatus) allocate(qh (nx,ny,nz),stat=istatus) allocate(tke (nx,ny,nz),stat=istatus) allocate(kmh (nx,ny,nz),stat=istatus) allocate(kmv (nx,ny,nz),stat=istatus) allocate(ubar (nx,ny,nz),stat=istatus) allocate(vbar (nx,ny,nz),stat=istatus) allocate(wbar (nx,ny,nz),stat=istatus) allocate(ptbar (nx,ny,nz),stat=istatus) allocate(pbar (nx,ny,nz),stat=istatus) allocate(rhobar (nx,ny,nz),stat=istatus) allocate(qvbar (nx,ny,nz),stat=istatus) allocate(u (nx,ny,nz),stat=istatus) allocate(v (nx,ny,nz),stat=istatus) allocate(w (nx,ny,nz),stat=istatus) allocate(qv (nx,ny,nz),stat=istatus) allocate(soiltyp (nx,ny,nstyps),stat=istatus) allocate(stypfrct(nx,ny,nstyps),stat=istatus) allocate(vegtyp(nx,ny),stat=istatus) allocate(lai (nx,ny),stat=istatus) allocate(roufns (nx,ny),stat=istatus) allocate(veg (nx,ny),stat=istatus) allocate(tsfc (nx,ny,0:nstyps),stat=istatus) allocate(tsoil (nx,ny,0:nstyps),stat=istatus) allocate(wetsfc (nx,ny,0:nstyps),stat=istatus) allocate(wetdp (nx,ny,0:nstyps),stat=istatus) allocate(wetcanp(nx,ny,0:nstyps),stat=istatus) allocate(snowdpth(nx,ny),stat=istatus) allocate(raing(nx,ny),stat=istatus) allocate(rainc(nx,ny),stat=istatus) allocate(prcrate(nx,ny,4),stat=istatus) allocate(radfrc(nx,ny,nz),stat=istatus) allocate(radsw (nx,ny),stat=istatus) allocate(rnflx (nx,ny),stat=istatus) allocate(usflx (nx,ny),stat=istatus) allocate(vsflx (nx,ny),stat=istatus) allocate(ptsflx(nx,ny),stat=istatus) allocate(qvsflx(nx,ny),stat=istatus) allocate(tem1(nx,ny,nz),stat=istatus) allocate(tem2(nx,ny,nz),stat=istatus) allocate(tem3(nx,ny,nz),stat=istatus) CALL dtaread(nx,ny,nz,nstyps, & hinfmt, nchin,grdbasfn(1:16),lengbf, & filename(1:16),lenfil,time, & x,y,z,zp, uprt ,vprt ,wprt ,ptprt, pprt , & qvprt, qc, qr, qi, qs, qh, tke,kmh,kmv, & ubar, vbar, wbar, ptbar, pbar, rhobar, qvbar, & soiltyp,stypfrct,vegtyp,lai,roufns,veg, & tsfc, tsoil, wetsfc, wetdp, wetcanp,snowdpth, & raing,rainc,prcrate, & radfrc,radsw,rnflx, & usflx,vsflx,ptsflx,qvsflx, & ireturn, tem1,tem2,tem3) curtim = time STOP END PROGRAM arpsread