PROGRAM arpsread,10 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Sample program to read history data file produced by ARPS 4.0 ! ! 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 ! ! !----------------------------------------------------------------------- ! IMPLICIT NONE INCLUDE 'globcst.inc' !----------------------------------------------------------------------- ! ! Dimension declaration ! !----------------------------------------------------------------------- INTEGER :: nx, ny, nz !----------------------------------------------------------------------- ! ! Arrays to be read in: ! !----------------------------------------------------------------------- ! REAL, ALLOCATABLE :: x(:) ! The x-coord. of the physical and ! computational grid. ! Defined at u-point. REAL, ALLOCATABLE :: y(:) ! The y-coord. of the physical and ! computational grid. ! Defined at v-point. 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 :: nstyps PARAMETER ( nstyps = 4 ) 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 REAL, ALLOCATABLE :: raing1(:,:) ! Grid supersaturation rain REAL, ALLOCATABLE :: rainc1(:,:) ! Cumulus convective rain ! !----------------------------------------------------------------------- ! ! Misc. internal variables ! !----------------------------------------------------------------------- ! INTEGER :: hinfmt, nchin INTEGER :: lengbf, lenfile1,lenfile2, ireturn CHARACTER (LEN=120) :: file1 CHARACTER (LEN=120) :: grdbasfn CHARACTER (LEN=120) :: file2 CHARACTER (LEN=120) :: basdmpfn INTEGER :: lbasdmpf, i,j, istatus REAL :: time !----------------------------------------------------------------------- ! ! NAMELIST declaration ! !----------------------------------------------------------------------- NAMELIST /grid_dims/ nx, ny, nz NAMELIST /input_files/ hinfmt, grdbasfn, file1, file2 ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! !----------------------------------------------------------------------- ! ! Get the dimensions nx,ny,nz ! !---------------------------------------------------------------------- READ(5,grid_dims,END=100) WRITE(6,'(a)')'Namelist block grid_dims sucessfully read in.' !----------------------------------------------------------------------- ! ! Allocate the variables and initialize the them to zero ! !----------------------------------------------------------------------- ALLOCATE( x = 0 ALLOCATE( y = 0 ALLOCATE( z = 0 ALLOCATE(zp(nx,ny,nz), STAT=istatus) zp = 0 ALLOCATE(hterain(nx,ny), STAT=istatus) hterain = 0 ALLOCATE(j1(nx,ny,nz), STAT=istatus) j1 = 0 ALLOCATE(j2(nx,ny,nz), STAT=istatus) j2 = 0 ALLOCATE(j3(nx,ny,nz), STAT=istatus) j3 = 0 ALLOCATE(uprt(nx,ny,nz), STAT=istatus) uprt = 0 ALLOCATE(vprt(nx,ny,nz), STAT=istatus) vprt = 0 ALLOCATE(wprt(nx,ny,nz), STAT=istatus) wprt = 0 ALLOCATE(ptprt(nx,ny,nz), STAT=istatus) ptprt = 0 ALLOCATE(pprt(nx,ny,nz), STAT=istatus) pprt = 0 ALLOCATE(qvprt(nx,ny,nz), STAT=istatus) qvprt = 0 ALLOCATE(qc(nx,ny,nz), STAT=istatus) qc = 0 ALLOCATE(qr(nx,ny,nz), STAT=istatus) qr = 0 ALLOCATE(qi(nx,ny,nz), STAT=istatus) qi = 0 ALLOCATE(qs(nx,ny,nz), STAT=istatus) qs = 0 ALLOCATE(qh(nx,ny,nz), STAT=istatus) qh = 0 ALLOCATE(tke(nx,ny,nz), STAT=istatus) tke = 0 ALLOCATE(kmh(nx,ny,nz), STAT=istatus) kmh = 0 ALLOCATE(kmv(nx,ny,nz), STAT=istatus) kmv = 0 ALLOCATE(ubar(nx,ny,nz), STAT=istatus) ubar = 0 ALLOCATE(vbar(nx,ny,nz), STAT=istatus) vbar = 0 ALLOCATE(wbar(nx,ny,nz), STAT=istatus) wbar = 0 ALLOCATE(ptbar(nx,ny,nz), STAT=istatus) ptbar = 0 ALLOCATE(pbar(nx,ny,nz), STAT=istatus) pbar = 0 ALLOCATE(rhobar(nx,ny,nz), STAT=istatus) rhobar = 0 ALLOCATE(qvbar(nx,ny,nz), STAT=istatus) qvbar = 0 ALLOCATE( u = 0 ALLOCATE( v = 0 ALLOCATE( w = 0 ALLOCATE(qv(nx,ny,nz), STAT=istatus) qv = 0 ALLOCATE(soiltyp(nx,ny,nstyps), STAT=istatus) soiltyp = 0 ALLOCATE(stypfrct(nx,ny,nstyps), STAT=istatus) stypfrct = 0 ALLOCATE(vegtyp(nx,ny), STAT=istatus) vegtyp = 0 ALLOCATE(lai(nx,ny), STAT=istatus) lai = 0 ALLOCATE(roufns(nx,ny), STAT=istatus) roufns = 0 ALLOCATE(veg(nx,ny), STAT=istatus) veg = 0 ALLOCATE(tsfc(nx,ny,0:nstyps), STAT=istatus) tsfc = 0 ALLOCATE(tsoil(nx,ny,0:nstyps), STAT=istatus) tsoil = 0 ALLOCATE(wetsfc(nx,ny,0:nstyps), STAT=istatus) wetsfc = 0 ALLOCATE(wetdp(nx,ny,0:nstyps), STAT=istatus) wetdp = 0 ALLOCATE(wetcanp(nx,ny,0:nstyps), STAT=istatus) wetcanp = 0 ALLOCATE(snowdpth(nx,ny), STAT=istatus) snowdpth = 0 ALLOCATE(raing(nx,ny), STAT=istatus) raing = 0 ALLOCATE(rainc(nx,ny), STAT=istatus) rainc = 0 ALLOCATE(prcrate(nx,ny,4), STAT=istatus) prcrate = 0 ALLOCATE(radfrc(nx,ny,nz), STAT=istatus) radfrc = 0 ALLOCATE(radsw(nx,ny), STAT=istatus) radsw = 0 ALLOCATE(rnflx(nx,ny), STAT=istatus) rnflx = 0 ALLOCATE(usflx(nx,ny), STAT=istatus) usflx = 0 ALLOCATE(vsflx(nx,ny), STAT=istatus) vsflx = 0 ALLOCATE(ptsflx(nx,ny), STAT=istatus) ptsflx = 0 ALLOCATE(qvsflx(nx,ny), STAT=istatus) qvsflx = 0 ALLOCATE(tem1(nx,ny,nz), STAT=istatus) tem1 = 0 ALLOCATE(tem2(nx,ny,nz), STAT=istatus) tem2 = 0 ALLOCATE(tem3(nx,ny,nz), STAT=istatus) tem3 = 0 ALLOCATE(raing1(nx,ny), STAT=istatus) raing1 = 0 ALLOCATE(rainc1(nx,ny), STAT=istatus) rainc1 = 0 ! !----------------------------------------------------------------------- ! ! Get the name of the input data set. ! !----------------------------------------------------------------------- ! READ(5,input_files,END=100) WRITE(6,'(a)')'Namelist block input_files sucessfully read in.' lengbf = 120 CALL strlnth( grdbasfn, lengbf) lenfile1 = 120 CALL strlnth( file1, lenfile1 ) lenfile2 = 120 CALL strlnth( file2, lenfile2 ) nchin = 9 CALL dtaread(nx,ny,nz,nstyps, & hinfmt, nchin,grdbasfn(1:lengbf),lengbf, & file1(1:lenfile1),lenfile1,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) CALL dtaread(nx,ny,nz,nstyps, & hinfmt, nchin,grdbasfn(1:lengbf),lengbf, & file2(1:lenfile2),lenfile2,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, & raing1,rainc1,prcrate, & radfrc,radsw,rnflx, & usflx,vsflx,ptsflx,qvsflx, & ireturn, tem1,tem2,tem3) curtim = time DO i=1,nx DO j=1,ny rainc1(i,j) = rainc1(i,j) - rainc(i,j) raing1(i,j) = raing1(i,j) - raing(i,j) END DO END DO dirname = './' CALL wrtvar(nx,ny,1, rainc1,'rainc',time,runname,dirname) CALL wrtvar(nx,ny,1, raing1,'raing',time,runname,dirname) DO i=1,nx DO j=1,ny raing1(i,j) = raing1(i,j) + rainc1(i,j) END DO END DO CALL wrtvar(nx,ny,1, raing1,'raint',time,runname,dirname) GOTO 101 100 CONTINUE WRITE(6,'(a)')'Namelist block READ in error. Then program will terminated.' 101 CONTINUE STOP END PROGRAM arpsread