!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE RSTOUT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
!EMK BMJ
SUBROUTINE rstout(nx,ny,nz, nstyps,exbcbufsz, & 2,28
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke, &
udteb, udtwb, vdtnb, vdtsb, &
pdteb ,pdtwb ,pdtnb ,pdtsb, &
ubar,vbar,ptbar,pbar,rhostr,qvbar, &
x,y,z,zp,hterain, mapfct, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth,qvsfc, &
ptcumsrc,qcumsrc,w0avg,nca,kfraincv, &
cldefi,xland,bmjraincv, &
radfrc,radsw,rnflx, &
raing,rainc,prcrate, exbcbuf, tem1)
!EMK END
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Dump out a model restart file at a specified model time. Only permanent
! arrays in the model (which are saved between time steps) need to be
! dumped for a model restart. For time dependent variables, two time
! levels (time tpast and tfuture) are needed for a model restart so
! fields at both time levels are dumped out.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 4/01/1992.
!
! MODIFICATION HISTORY:
!
! 5/06/92 (M. Xue)
! Added full documentation.
!
! 5/06/92 (M. Xue)
! Included grid and terrain data in the restart dump.
!
! 6/2/92 (M. Xue and H. Jin)
! Further facelift.
!
! 2/10/93 (K. Droegemeier)
! Cleaned up documentation.
!
! 02/07/1995 (Yuhe Liu)
! Added a new 2-D permanent array, veg(nx,ny), to the argument list
!
! 05/05/1995 (M. Xue)
! Added rainc and raing into the restart data dump.
!
! 08/22/1995 (M. Xue)
! Added ptcumsrc and qvcumsrc into the restart data dump.
!
! 08/30/1995 (Yuhe Liu)
! Added the external boundary data into the restart dump
!
! 2/2/96 (Donghai Wang & Yuhe Liu)
! Added a 3-D array, mapfct, for map projection factor.
!
! 08/01/97 (Zonghui Huo)
! Added Kain-fritsch cumulus parameterization scheme.
!
! 11/06/97 (D. Weber)
! Added three additional levels to the mapfct array. The three
! levels (4,5,6) represent the inverse of the first three in order.
! The inverse map factors are computed to improve efficiency.
!
! 4/15/1998 (Donghai Wang)
! Added the source terms to the right hand terms of the qc,qr,qi,qs
! equations due to the K-F cumulus parameterization.
!
! 4/15/1998 (Donghai Wang)
! Added the running average vertical velocity (array w0avg)
! for the K-F cumulus parameterization scheme.
!
! 12/09/1998 (Donghai Wang)
! Added the snow cover.
!
! 13 March 2002 (Eric Kemp)
! Added arrays for WRF BMJ cumulus scheme.
!
! April 2002 (Fanyou Kong)
! Added cnvctopt=5 option for new WRF K-F (KF_ETA) scheme
!
!-----------------------------------------------------------------------
!
! INPUT:
!
!
! nx Number of grid points in the x-direction (east/west)
! ny Number of grid points in the y-direction (north/south)
! nz Number of grid points in the vertical
!
! u x component of velocity at times tpast and tpresent (m/s)
! v y component of velocity at times tpast and tpresent (m/s)
! w Vertical component of Cartesian velocity at times
! ptprt Perturbation potential temperature at times tpast and
! tpresent (K)
! pprt Perturbation pressure at times tpast and tpresent (Pascal)
!
! qv Water vapor specific humidity at times tpast and tpresent (kg/kg)
! qc Cloud water mixing ratio at times tpast and tpresent (kg/kg)
! qr Rainwater mixing ratio at times tpast and tpresent (kg/kg)
! qi Cloud ice mixing ratio at times tpast and tpresent (kg/kg)
! qs Snow mixing ratio at times tpast and tpresent (kg/kg)
! qh Hail mixing ratio at times tpast and tpresent (kg/kg)
! tke Turbulent Kinetic Energy ((m/s)**2)
!
! udteb Time tendency of u field at east boundary (m/s**2)
! udtwb Time tendency of u field at west boundary (m/s**2)
!
! vdtnb Time tendency of v field at north boundary (m/s**2)
! vdtsb Time tendency of v field at south boundary (m/s**2)
!
! pdteb Time tendency of pprt field at east boundary (PASCAL/s)
! pdtwb Time tendency of pprt field at west boundary (PASCAL/s)
! pdtnb Time tendency of pprt field at north boundary (PASCAL/s)
! pdtsb Time tendency of pprt field at south boundary (PASCAL/s)
!
! ubar Base state zonal velocity component (m/s)
! vbar Base state meridional velocity component (m/s)
! ptbar Base state potential temperature (K)
! pbar Base state pressure (Pascal)
! rhostr Base state density (kg/m**3)times j3.
! qvbar Base state water vapor specific humidity (kg/kg)
!
! x x coordinate of grid points in physical/comp. space (m)
! y y coordinate of grid points in physical/comp. space (m)
! z z coordinate of grid points in computational space (m)
! zp Vertical coordinate of grid points in physical space (m)
! hterain Terrain height (m)
!
! mapfct Map factors at scalar, u and v points
!
! soiltyp Soil type
! vegtyp Vegetation type
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Skin temperature at the ground or ocean surface (K)
! qvsfc Effective S.H. at sfc.
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! wetsfc Surface soil moisture
! wetdp Deep soil moisture
! wetcanp Canopy water amount
! ptcumsrc Source term in pt-equation due to cumulus parameterization
! qcumsrc Source term in water equations due to cumulus parameterization
! kfraincv K-F convective rainfall (cm)
! nca K-F counter for CAPE release
! cldefi BMJ cloud efficiency
! xland BMJ land/sea mask
! bmjraincv BMJ convective rainfall (cm)
!
! radfrc Radiation forcing (K)
! radsw Solar radiation reaching the surface
! rnflx Net absorbed radiation by the surface
!
! raing Grid scale rainfall
! rainc Convective rainfall
!
! OUTPUT:
!
! None
!
! WORK ARRAY:
!
! tem1 Temporary work array.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'timelvls.inc'
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
REAL :: u (nx,ny,nz,nt) ! Total u-velocity (m/s)
REAL :: v (nx,ny,nz,nt) ! Total v-velocity (m/s)
REAL :: w (nx,ny,nz,nt) ! Total w-velocity (m/s)
REAL :: ptprt (nx,ny,nz,nt) ! Perturbation potential temperature (K)
REAL :: pprt (nx,ny,nz,nt) ! Perturbation pressure (Pascal)
REAL :: qv (nx,ny,nz,nt) ! Water vapor specific humidity (kg/kg)
REAL :: qc (nx,ny,nz,nt) ! Cloud water mixing ratio (kg/kg)
REAL :: qr (nx,ny,nz,nt) ! Rain water mixing ratio (kg/kg)
REAL :: qi (nx,ny,nz,nt) ! Cloud ice mixing ratio (kg/kg)
REAL :: qs (nx,ny,nz,nt) ! Snow mixing ratio (kg/kg)
REAL :: qh (nx,ny,nz,nt) ! Hail mixing ratio (kg/kg)
REAL :: tke (nx,ny,nz,nt) ! Turbulent Kinetic Energy ((m/s)**2)
REAL :: udteb (ny,nz) ! T-tendency of u at e-boundary (m/s**2)
REAL :: udtwb (ny,nz) ! T-tendency of u at w-boundary (m/s**2)
REAL :: vdtnb (nx,nz) ! T-tendency of v at n-boundary (m/s**2)
REAL :: vdtsb (nx,nz) ! T-tendency of v at s-boundary (m/s**2)
REAL :: pdteb (ny,nz) ! T-tendency of pprt at e-boundary (PASCAL/s)
REAL :: pdtwb (ny,nz) ! T-tendency of pprt at w-boundary (PASCAL/s)
REAL :: pdtnb (nx,nz) ! T-tendency of pprt at n-boundary (PASCAL/s)
REAL :: pdtsb (nx,nz) ! T-tendency of pprt at s-boundary (PASCAL/s)
REAL :: ubar (nx,ny,nz) ! Base state u-velocity (m/s)
REAL :: vbar (nx,ny,nz) ! Base state v-velocity (m/s)
REAL :: ptbar (nx,ny,nz) ! Base state potential temperature (K)
REAL :: pbar (nx,ny,nz) ! Base state pressure (Pascal)
REAL :: rhostr(nx,ny,nz) ! Base state air density (kg/m**3) times j3.
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
REAL :: x (nx) ! The x-coord. of the physical and
! computational grid. Defined at u-point.
REAL :: y (ny) ! The y-coord. of the physical and
! computational grid. Defined at v-point.
REAL :: z (nz) ! The z-coord. of the computational grid.
! Defined at w-point on the staggered grid.
REAL :: zp (nx,ny,nz) ! The physical height coordinate defined at
! w-point of the staggered grid.
REAL :: hterain(nx,ny) ! Terrain height (m).
REAL :: mapfct(nx,ny,8) ! Map factors at scalar, u and v points
INTEGER :: nstyps ! Number of soil types
INTEGER :: soiltyp (nx,ny,nstyps) ! Soil type
REAL :: stypfrct(nx,ny,nstyps)
INTEGER :: vegtyp(nx,ny) ! Vegetation type
REAL :: lai (nx,ny) ! Leaf Area Index
REAL :: roufns (nx,ny) ! Surface roughness
REAL :: veg (nx,ny) ! Vegetation fraction
REAL :: tsfc (nx,ny,0:nstyps) ! Temperature at ground (K)
! (in top 1cm layer)
REAL :: tsoil (nx,ny,0:nstyps) ! Deep soil temperature(K)
! (in deep 1m layer)
REAL :: wetsfc (nx,ny,0:nstyps) ! Surface soil moisture
! in the top 1cm layer
REAL :: wetdp (nx,ny,0:nstyps) ! Deep soil moisture
! in the deep 1 m layer
REAL :: wetcanp(nx,ny,0:nstyps) ! Canopy water amount
REAL :: snowdpth(nx,ny) ! Snow depth (m)
REAL :: qvsfc (nx,ny,0:nstyps) ! Effective specific humidity
! at the surface (kg/kg)
REAL :: ptcumsrc(nx,ny,nz) ! Source term in pt-equation due
! to cumulus parameterization
REAL :: qcumsrc(nx,ny,nz,5) ! Source term in water equations due
! to cumulus parameterization:
! qcumsrc(1,1,1,1) for qv equation
! qcumsrc(1,1,1,2) for qc equation
! qcumsrc(1,1,1,3) for qr equation
! qcumsrc(1,1,1,4) for qi equation
! qcumsrc(1,1,1,5) for qs equation
REAL :: w0avg(nx,ny,nz) ! a closing running average vertical
! velocity in 10min for K-F scheme
REAL :: kfraincv(nx,ny) ! K-F convective rainfall (cm)
INTEGER :: nca(nx,ny) ! K-F counter for CAPE release
!EMK BMJ
REAL,INTENT(IN) :: cldefi(nx,ny) ! BMJ cloud efficiency
REAL,INTENT(IN) :: xland(nx,ny) ! BMJ land mask
! (1.0 = land, 2.0 = sea)
REAL,INTENT(IN) :: bmjraincv(nx,ny) ! BMJ convective rainfall (cm)
!EMK END
REAL :: radfrc(nx,ny,nz) ! Radiation forcing (K/s)
REAL :: radsw(nx,ny) ! Solar radiation reacing the surface
REAL :: rnflx(nx,ny) ! Net absorbed radiation by the surface
REAL :: raing(nx,ny) ! Grid supersaturation rain
REAL :: rainc(nx,ny) ! Cumulus convective rain
REAL :: prcrate(nx,ny,4) ! precipitation rate (kg/(m**2*s))
! prcrate(1,1,1) = total precipitation rate
! prcrate(1,1,2) = grid scale precip. rate
! prcrate(1,1,3) = cumulus precip. rate
! prcrate(1,1,4) = microphysics precip. rate
INTEGER :: exbcbufsz ! EXBC buffer size
REAL :: exbcbuf( exbcbufsz ) ! EXBC buffer array
REAL :: tem1 (nx,ny,nz) ! Temporary work array.
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: ijk, nxyz
INTEGER :: basrstout ! Control parameter for the base state
! array output
INTEGER :: grdrstout ! Control parameter for the grid array output
INTEGER :: icerstout ! Control parameter for the ice variable output
INTEGER :: sfcrstout ! Control parameter for the surface variable
! output
INTEGER :: prcrstout ! Control parameter for the precip. rate and rain output
INTEGER :: rcumout ! Control parameter for ptcumsrc and qcumsrc output
INTEGER :: exbcout ! Control parameter for external boundary output
INTEGER :: mapfout ! Control parameter for map factor output
INTEGER :: radrstout ! Control parameter for radiation forcing output
INTEGER :: kfrsout ! Control parameter for Kain-Fritsch output
INTEGER :: bmjsout ! Control parameter for WRF BMJ output
INTEGER :: idummy
INTEGER :: istat
INTEGER :: lrstof
REAL :: rdummy
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid & map parameters.
INCLUDE 'bndry.inc'
INCLUDE 'exbc.inc'
!
!-----------------------------------------------------------------------
!
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!
!-----------------------------------------------------------------------
!
! Get a name for the restart data file.
!
!-----------------------------------------------------------------------
!
CALL gtrstfn
(runname(1:lfnkey),dirname,ldirnam,curtim, &
mgrid,nestgrd, rstoutf, lrstof )
CALL getunit
( rstount )
OPEN(UNIT=rstount,FILE=trim(rstoutf(1:lrstof)),FORM='unformatted', &
STATUS='new',IOSTAT=istat)
IF( istat /= 0) THEN
WRITE(6,'(/a,i2,/a/)') &
' Error occured when opening restart output file ' &
//rstoutf(1:lrstof)// &
' using FORTRAN unit ',rstount,' Program stopped in RSTOUT.'
CALL arpsstop
('arpsstop called from RSTOUT problem opening file',1)
END IF
WRITE(6,'('' DUMPING OUT RESTART FILE AT TIME '',F10.2, &
& ''(s) in FILE '',a,'' using fortran channel no '', i2)') &
curtim, rstoutf(1:lrstof),rstount
!
!-----------------------------------------------------------------------
!
! Write out the restart data:
!
!-----------------------------------------------------------------------
!
WRITE(rstount) curtim
WRITE(rstount) nx,ny,nz
basrstout = 1
grdrstout = 1
icerstout = ice
mapfout = 1
prcrstout = 0
IF ( moist /= 0 ) prcrstout = 1
sfcrstout = 0
IF( sfcphy /= 0 ) sfcrstout = 1
rcumout=0
IF ( cnvctopt /= 0 ) rcumout=1
exbcout = 0
IF ( lbcopt == 2 ) exbcout = 1
radrstout = 0
IF ( radopt > 0 ) radrstout = 1
kfrsout=0
IF ( cnvctopt == 3 .OR. cnvctopt == 5) kfrsout=1
!EMK BMJ
bmjsout=0
IF ( cnvctopt == 4 ) bmjsout=1
!EMK BMJ
idummy = 0
!EMK BMJ
! WRITE(rstount) basrstout,grdrstout,icerstout,sfcrstout,prcrstout, &
! rcumout,exbcout,mapfout,radrstout,nstyp, &
! kfrsout,bmjsout,rayklow,idummy,idummy,idummy, &
! idummy,idummy,idummy,idummy,idummy
WRITE(rstount) basrstout,grdrstout,icerstout,sfcrstout,prcrstout, &
rcumout,exbcout,mapfout,radrstout,nstyp, &
kfrsout,rayklow,bmjsout,idummy,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
!EMK END
rdummy = 0.0
WRITE(rstount) dx,dy,dz,umove,vmove, &
xgrdorg,ygrdorg,trulat1,trulat2,trulon, &
sclfct,latitud,ctrlat,ctrlon,rdummy, &
rdummy,rdummy,rdummy,rdummy,rdummy
IF( grdrstout == 1) THEN
WRITE(rstount) x
WRITE(rstount) y
WRITE(rstount) z
WRITE(rstount) zp
END IF
IF( basrstout == 1) THEN
WRITE(rstount) ubar
WRITE(rstount) vbar
WRITE(rstount) ptbar
WRITE(rstount) pbar
WRITE(rstount) rhostr
WRITE(rstount) qvbar
END IF
CALL cpyary3d
(nx,ny,nz,u (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,v (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,w (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,ptprt(1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,pprt (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qv (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qc (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qr (1,1,1,tpast), tem1)
WRITE(rstount) tem1
IF( icerstout /= 0) THEN
CALL cpyary3d
(nx,ny,nz,qi (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qs (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qh (1,1,1,tpast), tem1)
WRITE(rstount) tem1
END IF
CALL cpyary3d
(nx,ny,nz,tke (1,1,1,tpast), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,u (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,v (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,w (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,ptprt(1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,pprt (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qv (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qc (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qr (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
IF( icerstout /= 0) THEN
CALL cpyary3d
(nx,ny,nz,qi (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qs (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
CALL cpyary3d
(nx,ny,nz,qh (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
END IF
CALL cpyary3d
(nx,ny,nz,tke (1,1,1,tpresent), tem1)
WRITE(rstount) tem1
WRITE(rstount) udteb
WRITE(rstount) udtwb
WRITE(rstount) vdtnb
WRITE(rstount) vdtsb
WRITE(rstount) pdteb
WRITE(rstount) pdtwb
WRITE(rstount) pdtnb
WRITE(rstount) pdtsb
IF ( sfcrstout /= 0 ) THEN
PRINT *,'write out sfc/soil variables:'
WRITE(rstount) soiltyp
WRITE(rstount) stypfrct
WRITE(rstount) vegtyp
WRITE(rstount) lai
WRITE(rstount) roufns
WRITE(rstount) veg
WRITE(rstount) tsfc
WRITE(rstount) qvsfc
WRITE(rstount) tsoil
WRITE(rstount) wetsfc
WRITE(rstount) wetdp
WRITE(rstount) wetcanp
WRITE(rstount) snowdpth
END IF
IF ( prcrstout /= 0 ) THEN
WRITE(rstount) raing
WRITE(rstount) rainc
WRITE(rstount) prcrate
END IF
IF ( rcumout /= 0 ) THEN
WRITE(rstount) ptcumsrc
WRITE(rstount) qcumsrc
END IF
IF ( exbcout /= 0 ) THEN
WRITE(rstount) abstfcst0, abstfcst, &
ubcrd,vbcrd,wbcrd,ptbcrd,prbcrd, &
qvbcrd,qcbcrd,qrbcrd,qibcrd,qsbcrd,qhbcrd
WRITE(rstount) exbcbuf
END IF
IF ( mapfout == 1 ) THEN
WRITE(rstount) mapfct
END IF
IF ( radrstout == 1 ) THEN
WRITE(rstount) radfrc
WRITE(rstount) radsw
WRITE(rstount) rnflx
END IF
IF ( kfrsout /= 0 ) THEN
WRITE(rstount) w0avg
WRITE(rstount) nca
WRITE(rstount) kfraincv
END IF
IF ( bmjsout /= 0 ) THEN
WRITE(rstount) cldefi
WRITE(rstount) xland
WRITE(rstount) bmjraincv
END IF
CLOSE (UNIT=rstount)
CALL retunit( rstount )
!
!-----------------------------------------------------------------------
!
! Compress the restart file using system command.
!
!-----------------------------------------------------------------------
!
IF( filcmprs
== 1 ) CALL cmprs( rstoutf(1:lrstof) )
RETURN
END SUBROUTINE rstout
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE RSTIN ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
!EMK BMJ
SUBROUTINE rstin(nx,ny,nz,nts,nstyps,exbcbufsz, & 1,84
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke, &
udteb, udtwb, vdtnb, vdtsb, &
pdteb ,pdtwb ,pdtnb ,pdtsb, &
ubar,vbar,ptbar,pbar,rhostr,qvbar, &
x,y,z,zp,hterain,mapfct,j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth,qvsfc, &
ptcumsrc,qcumsrc,w0avg,nca,kfraincv, &
cldefi,xland,bmjraincv, &
radfrc,radsw,rnflx, &
raing,rainc,prcrate, exbcbuf, tem1, tem2)
!EMK END
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Read in data from a restart file to initialize u,v,w,prprt,pprt,
! qv,qc,qr,qi,qs,qh and tke at time tpast and tpresent, the base state
! variables ubar,vbar,ptbar,pbar,rhostr,qvbar, and the time tendencies
! of variables at the lateral boundaries.
!
! Fields at tfuture are set to the values at tpresent.
!
! This subroutine also sets the value of tstart.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 4/01/1992.
!
! MODIFICATION HISTORY:
!
! 5/06/92 (M. Xue)
! Added full documentation.
!
! 10/15/1992 (M. Xue)
! Reading of grid and base state arrays added.
!
! 2/10/93 (K. Droegemeier)
! Cleaned up documentation.
!
! 9/7/93 (Ming Xue)
! Changed cpyary to cpyary3d.
!
! 9/7/93 (A. Shapiro & Ming Xue)
! Adjustment to tpast values after umove and vmove are changed.
!
! 02/07/1995 (Yuhe Liu)
! Added a new 2-D permanent array, veg(nx,ny), to the argument list
!
! 05/05/1995 (M. Xue)
! Added rainc and raing into the restart data dump.
!
! 08/22/1995 (M. Xue)
! Added ptcumsrc and qvcumsrc into the restart data dump.
!
! 08/30/1995 (Yuhe Liu)
! Added the external boundary data into the restart dump
!
! 9/10/1995 (M. Xue)
! When umove or vmove in arps40.input is 999.0, (umove,vmove)
! in the restart data is used. No adjustment will be
! made to the wind fields in this case.
!
! 2/2/96 (Donghai Wang & Yuhe Liu)
! Added a 3-D array, mapfct, for map projection factor.
!
! 08/01/97 (Zonghui Huo)
! Added Kain-fritsch cumulus parameterization scheme.
!
! 11/06/97 (D. Weber)
! Added three additional levels to the mapfct array. The three
! levels (4,5,6) represent the inverse of the first three in order.
! The inverse map factors are computed to improve efficiency.
!
! 4/15/1998 (Donghai Wang)
! Added the source terms to the right hand terms of the qc,qr,qi,qs
! equations due to the K-F cumulus parameterization.
!
! 4/15/1998 (Donghai Wang)
! Added the running average vertical velocity (array w0avg)
! for the K-F cumulus parameterization scheme.
!
! 12/09/1998 (Donghai Wang)
! Added the snow cover.
!
! 13 March 2002 (Eric Kemp)
! Added arrays for WRF BMJ cumulus scheme.
!
!-----------------------------------------------------------------------
!
! INPUT :
!
! nx Number of grid points in the x-direction (east/west)
! ny Number of grid points in the y-direction (north/south)
! nz Number of grid points in the vertical
! nts Number of time levels to be initialized.
!
! OUTPUT:
!
! u x component of velocity at times tpast and tpresent (m/s)
! v y component of velocity at times tpast and tpresent (m/s)
! w Vertical component of Cartesian velocity at times
! tpast and tpresent (m/s)
! ptprt Perturbation potential temperature at times tpast and
! tpresent (K)
! pprt Perturbation pressure at times tpast and tpresent (Pascal)
!
! qv Water vapor specific humidity at times tpast and tpresent (kg/kg)
! qc Cloud water mixing ratio at times tpast and tpresent (kg/kg)
! qr Rainwater mixing ratio at times tpast and tpresent (kg/kg)
! qi Cloud ice mixing ratio at times tpast and tpresent (kg/kg)
! qs Snow mixing ratio at times tpast and tpresent (kg/kg)
! qh Hail mixing ratio at times tpast and tpresent (kg/kg)
! tke Turbulent Kinetic Energy ((m/s)**2)
!
! udteb Time tendency of u field at east boundary (m/s**2)
! udtwb Time tendency of u field at west boundary (m/s**2)
!
! vdtnb Time tendency of v field at north boundary (m/s**2)
! vdtsb Time tendency of v field at south boundary (m/s**2)
!
! pdteb Time tendency of pprt field at east boundary (PASCAL/s)
! pdtwb Time tendency of pprt field at west boundary (PASCAL/s)
! pdtnb Time tendency of pprt field at north boundary (PASCAL/s)
! pdtsb Time tendency of pprt field at south boundary (PASCAL/s)
!
! ubar Base state zonal velocity component (m/s)
! vbar Base state meridional velocity component (m/s)
! ptbar Base state potential temperature (K)
! pbar Base state pressure (Pascal)
! rhostr Base state density (kg/m**3) times j3.
! qvbar Base state water vapor specific humidity (kg/kg)
!
! x x coordinate of grid points in physical/comp. space (m)
! y y coordinate of grid points in physical/comp. space (m)
! z z coordinate of grid points in computational space (m)
! zp Vertical coordinate of grid points in physical space (m)
! hterain Terrain height (m)
!
! mapfct Map factors at scalar, u and v points
!
! j1 Coordinate transformation Jacobian -d(zp)/dx
! j2 Coordinate transformation Jacobian -d(zp)/dy
! j3 Coordinate transformation Jacobian d(zp)/dz
!
! soiltyp Soil type
! vegtyp Vegetation type
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Skin temperature at the ground or ocean surface (K)
! qvsfc Effective S.H. at sfc.
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! wetsfc Surface soil moisture
! wetdp Deep soil moisture
! wetcanp Canopy water amount
! ptcumsrc Source term in pt-equation due to cumulus parameterization
! qcumsrc Source term in water equations due to cumulus parameterization
! kfraincv K-F convective rainfall (cm)
! nca K-F counter for CAPE release
! cldefi BMJ cloud efficiency
! xland BMJ land/sea mask
! bmjraincv BMJ convective rainfall (cm)
!
! radfrc Radiation forcing (K)
! radsw Solar radiation reaching the surface
! rnflx Net absorbed radiation by the surface
!
! raing Grid scale rainfall
! rainc Convective rainfall
!
! tstart The time when the time integration starts, which is set to
! the time of the restart data
!
! tem1 Temporary work array
! tem2 Temporary work array
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nts ! Number of time levels to be initialized.
INTEGER :: tpast ! Index of time level for the past time.
INTEGER :: tpresent ! Index of time level for the present time.
INTEGER :: tfuture ! Index of time level for the future time.
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
REAL :: u (nx,ny,nz,nts) ! Total u-velocity (m/s)
REAL :: v (nx,ny,nz,nts) ! Total v-velocity (m/s)
REAL :: w (nx,ny,nz,nts) ! Total w-velocity (m/s)
REAL :: ptprt (nx,ny,nz,nts) ! Perturbation potential temperature (K)
REAL :: pprt (nx,ny,nz,nts) ! Perturbation pressure (Pascal)
REAL :: qv (nx,ny,nz,nts) ! Water vapor specific humidity (kg/kg)
REAL :: qc (nx,ny,nz,nts) ! Cloud water mixing ratio (kg/kg)
REAL :: qr (nx,ny,nz,nts) ! Rain water mixing ratio (kg/kg)
REAL :: qi (nx,ny,nz,nts) ! Cloud ice mixing ratio (kg/kg)
REAL :: qs (nx,ny,nz,nts) ! Snow mixing ratio (kg/kg)
REAL :: qh (nx,ny,nz,nts) ! Hail mixing ratio (kg/kg)
REAL :: tke (nx,ny,nz,nts) ! Turbulent Kinetic Energy ((m/s)**2)
REAL :: udteb (ny,nz) ! T-tendency of u at e-boundary (m/s**2)
REAL :: udtwb (ny,nz) ! T-tendency of u at w-boundary (m/s**2)
REAL :: vdtnb (nx,nz) ! T-tendency of v at n-boundary (m/s**2)
REAL :: vdtsb (nx,nz) ! T-tendency of v at s-boundary (m/s**2)
REAL :: pdteb (ny,nz) ! T-tendency of pprt at e-boundary (PASCAL/s)
REAL :: pdtwb (ny,nz) ! T-tendency of pprt at w-boundary (PASCAL/s)
REAL :: pdtnb (nx,nz) ! T-tendency of pprt at n-boundary (PASCAL/s)
REAL :: pdtsb (nx,nz) ! T-tendency of pprt at s-boundary (PASCAL/s)
REAL :: ubar (nx,ny,nz) ! Base state u-velocity (m/s)
REAL :: vbar (nx,ny,nz) ! Base state v-velocity (m/s)
REAL :: ptbar (nx,ny,nz) ! Base state potential temperature (K)
REAL :: pbar (nx,ny,nz) ! Base state pressure (Pascal)
REAL :: rhostr(nx,ny,nz) ! Base state air density (kg/m**3) time j3.
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
REAL :: x (nx) ! The x-coord. of the physical and
! computational grid. Defined at u-point.
REAL :: y (ny) ! The y-coord. of the physical and
! computational grid. Defined at v-point.
REAL :: z (nz) ! The z-coord. of the computational grid.
! Defined at w-point on the staggered grid.
REAL :: zp (nx,ny,nz) ! The physical height coordinate defined at
! w-point of the staggered grid.
REAL :: hterain(nx,ny) ! Terrain height (m).
REAL :: mapfct(nx,ny,8) ! Map factors at scalar, u and v points
REAL :: j1 (nx,ny,nz) ! Coordinate transformation Jacobian -d(zp)/dx.
REAL :: j2 (nx,ny,nz) ! Coordinate transformation Jacobian -d(zp)/dy.
REAL :: j3 (nx,ny,nz) ! Coordinate transformation Jacobian d(zp)/dz.
INTEGER :: nstyps ! Number of soil types
INTEGER :: soiltyp (nx,ny,nstyps) ! Soil type
REAL :: stypfrct(nx,ny,nstyps)
INTEGER :: vegtyp(nx,ny) ! Vegetation type
REAL :: lai (nx,ny) ! Leaf Area Index
REAL :: roufns (nx,ny) ! Surface roughness
REAL :: veg (nx,ny) ! Vegetation fraction
REAL :: tsfc (nx,ny,0:nstyps) ! Temperature at ground (K)(in top 1cm layer)
REAL :: qvsfc (nx,ny,0:nstyps) ! Effective S. H. at the surface (kg/kg)
REAL :: tsoil (nx,ny,0:nstyps) ! Deep soil temperature(K)(in deep 1 m layer)
REAL :: wetsfc (nx,ny,0:nstyps) ! Surface soil moisture in the top 1 cm layer
REAL :: wetdp (nx,ny,0:nstyps) ! Deep soil moisture in the deep 1 m layer
REAL :: wetcanp(nx,ny,0:nstyps) ! Canopy water amount
REAL :: snowdpth(nx,ny) ! Snow depth (m)
REAL :: ptcumsrc(nx,ny,nz) ! Source term in pt-equation due
! to cumulus parameterization
REAL :: qcumsrc(nx,ny,nz,5) ! Source term in water equations due
! to cumulus parameterization:
! qcumsrc(1,1,1,1) for qv equation
! qcumsrc(1,1,1,2) for qc equation
! qcumsrc(1,1,1,3) for qr equation
! qcumsrc(1,1,1,4) for qi equation
! qcumsrc(1,1,1,5) for qs equation
REAL :: w0avg(nx,ny,nz) ! a closing running average vertical
! velocity in 10min for K-F scheme
REAL :: kfraincv(nx,ny) ! K-F convective rainfall (cm)
INTEGER :: nca(nx,ny) ! K-F counter for CAPE release
!EMK BMJ
REAL,INTENT(OUT) :: cldefi(nx,ny) ! BMJ cloud efficiency
REAL,INTENT(OUT) :: xland(nx,ny) ! BMJ land mask
REAL,INTENT(OUT) :: bmjraincv(nx,ny) ! BMJ convective rainfall (cm)
! (1.0 = land, 2.0 = sea)
!EMK END
REAL :: radfrc(nx,ny,nz) ! Radiation forcing (K/s)
REAL :: radsw(nx,ny) ! Solar radiation reacing the surface
REAL :: rnflx(nx,ny) ! Net absorbed radiation by the surface
REAL :: raing(nx,ny) ! Grid supersaturation rain
REAL :: rainc(nx,ny) ! Cumulus convective rain
REAL :: prcrate(nx,ny,4) ! precipitation rate (kg/(m**2*s))
! prcrate(1,1,1) = total precipitation rate
! prcrate(1,1,2) = grid scale precip. rate
! prcrate(1,1,3) = cumulus precip. rate
! prcrate(1,1,4) = microphysics precip. rate
INTEGER :: exbcbufsz ! EXBC buffer size
REAL :: exbcbuf( exbcbufsz ) ! EXBC buffer array
REAL :: tem1 (nx,ny,nz) ! Temporary work array.
REAL :: tem2 (nx,ny,nz) ! Temporary work array.
INTEGER :: grdrstin ! Parameter indicating if the restart data contains
! the grid variables.
INTEGER :: basrstin ! Parameter indicating if the restart data contains
! the base state variables.
INTEGER :: icerstin ! Parameter indicating if the restart data contains
! the ice variables.
INTEGER :: sfcrstin ! Parameter indicating if the restart data contains
! the surface variables.
INTEGER :: prcrsin ! Parameter indicating if the restart data contains
! precipitation rate and rainfall
INTEGER :: rcumin ! Parameter indicating if the cumulus source terms
! data are present.
INTEGER :: exbcin ! Parameter indicating if the external boundary
! data are present.
INTEGER :: mapfin ! Parameter indicating if the map factor
! data are present.
INTEGER :: radrstin ! Parameter indicating if the radiation forcing
! arrays are present.
INTEGER :: kfrsin ! Parameter indicating if k-f variable exists
INTEGER :: bmjsin ! Parameter indicating if BMJ variable exists
REAL :: umoveold ! The domain translation speed of in restart data
REAL :: vmoveold ! The domain translation speed of in restart data
REAL :: uchange ! Change in domain translation speed
REAL :: vchange ! Change in domain translation speed
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: tim
INTEGER :: i, j, k, n, ijk
INTEGER :: nxin, nyin, nzin, nxyz
INTEGER :: istat, idummy
REAL :: datatim,rdummy,dxin,dyin,dzin
REAL :: amin, amax
LOGICAL :: fexist,cmprsed
INTEGER :: lrstfn
CHARACTER (LEN=80) :: savename
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid & map parameters.
INCLUDE 'bndry.inc'
INCLUDE 'exbc.inc'
INCLUDE 'mp.inc' ! Message passing parameters.
!-----------------------------------------------------------------------
!
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF(nts == 3 ) THEN
tpast = 1
tpresent = 2
tfuture = 3
ELSE IF(nts == 2 ) THEN
tpast = 1
tpresent = 2
tfuture = 2
ELSE
tpast = 1
tpresent = 1
tfuture = 1
END IF
! Added a wrapper for scheduling the number of open files...
! The wrapper will conclude prior to the maxmin checking....
! note call to jacob is moved outside the file open control loop.
! due to message passing code in the call to jacob.
! blocking inserted for ordering i/o for message passing
DO n=0,nprocs-1,max_fopen
IF(myproc >= n.AND.myproc <= n+max_fopen-1)THEN
CALL getunit
( rstiunt )
lrstfn = 80
CALL strlnth
( rstinf, lrstfn)
IF (mp_opt > 0) THEN
savename(1:80) = rstinf(1:80)
WRITE(rstinf, '(a,a,2i2.2)') trim(savename),'_',loc_x,loc_y
lrstfn = lrstfn + 5
END IF
cmprsed = .false.
INQUIRE(FILE=rstinf(1:lrstfn), EXIST = fexist )
IF( fexist ) GO TO 100
INQUIRE(FILE=rstinf(1:lrstfn)//'.Z', EXIST = fexist )
IF( fexist ) THEN
cmprsed = .true.
CALL uncmprs
( rstinf(1:lrstfn)//'.Z' )
GO TO 100
END IF
INQUIRE(FILE=rstinf(1:lrstfn)//'.gz', EXIST = fexist )
IF( fexist ) THEN
cmprsed = .true.
CALL uncmprs
( rstinf(1:lrstfn)//'.gz' )
GO TO 100
END IF
CALL wrtcomment
('File '//rstinf(1:lrstfn)// &
' or its compressed version not found.',1)
CALL arpsstop
('arpsstop called from RSTIN compressed file not '// &
'found',1)
100 CONTINUE
OPEN(UNIT=rstiunt,FILE=trim(rstinf(1:lrstfn)), &
FORM='unformatted',STATUS='old',IOSTAT=istat)
IF (mp_opt > 0) THEN
rstinf(1:80) = savename(1:80)
lrstfn = lrstfn - 5
END IF
IF( istat /= 0) THEN
WRITE(6,'(/1x,a,i2/)') &
'Error occured when opening restart input file '// &
rstinf(1:lrstfn)// &
' using FORTRAN unit ',rstiunt
CALL arpsstop
('arpsstop called from RSTIN restart file not'// &
'found',1)
END IF
WRITE(6,'(/1x,a,/1x,a,i2/)') &
'This is a restart run. Input was read from restart file ', &
rstinf(1:lrstfn)//' using fortran unit ',rstiunt
!
!
!-----------------------------------------------------------------------
!
! Read in the restart data:
!
!-----------------------------------------------------------------------
!
READ(rstiunt,ERR=999) datatim
tstart = datatim
WRITE(6,'(a,f8.1)') ' Restart data is at time ', datatim
READ(rstiunt,ERR=999) nxin,nyin,nzin
IF((nx /= nxin).OR.(ny /= nyin).OR.(nz /= nzin)) THEN
WRITE(6,'(a,/a,i5,a,i5,a,i5,/a,i5,a,i5,a,i5)') &
' Array dimension(s) in the restart data inconsistent with ', &
' model definitions, dimensions in input data were nx=',nxin, &
', ny=',nyin,', nz=',nzin,' the model definitions were nx=', &
nx,' ny= ', ny, ' nz= ',nz
WRITE(6,'(a)') ' Job stopped in subroutine rstin.'
CALL arpsstop
('arpsstop called from RSTIN dimensions '// &
'inconsistent',1)
END IF
!EMK BMJ
! READ(rstiunt) basrstin,grdrstin,icerstin,sfcrstin,prcrsin, &
! rcumin,exbcin,mapfin,radrstin,nstyp, &
! kfrsin,bmjsin,rayklow,idummy,idummy,idummy, &
! idummy,idummy,idummy,idummy,idummy
READ(rstiunt) basrstin,grdrstin,icerstin,sfcrstin,prcrsin, &
rcumin,exbcin,mapfin,radrstin,nstyp, &
kfrsin,rayklow,bmjsin,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
!EMK END
READ(rstiunt) dx,dy,dz,umoveold,vmoveold, &
xgrdorg,ygrdorg,trulat1,trulat2,trulon, &
sclfct,latitud,ctrlat,ctrlon,rdummy, &
rdummy,rdummy,rdummy,rdummy,rdummy
IF( grdrstin == 1) THEN
READ(rstiunt) x
READ(rstiunt) y
READ(rstiunt) z
READ(rstiunt) zp
DO i=1,nx
DO j=1,ny
hterain(i,j) = zp(i,j,2)
END DO
END DO
END IF
IF( basrstin == 1) THEN
READ(rstiunt) ubar
READ(rstiunt) vbar
READ(rstiunt) ptbar
READ(rstiunt) pbar
READ(rstiunt) rhostr
READ(rstiunt) qvbar
WRITE(6,'(/1x,a/,1x,a/)') &
'Base state arrays are read in from restart data set', &
'the base state set in INIBASE is superceded.'
END IF
tim = tpast
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,u (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,v (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,w (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,ptprt(1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,pprt (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qv (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qc (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qr (1,1,1,tim))
IF( icerstin /= 0) THEN
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qi (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qs (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qh (1,1,1,tim))
ELSE
DO k=1,nz
DO j=1,ny
DO i=1,nx
qi(i,j,k,tim) = 0.0
qs(i,j,k,tim) = 0.0
qh(i,j,k,tim) = 0.0
END DO
END DO
END DO
END IF
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,tke (1,1,1,tim))
tim = tpresent
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,u (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,v (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,w (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,ptprt(1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,pprt (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qv (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qc (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qr (1,1,1,tim))
IF( icerstin /= 0) THEN
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qi (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qs (1,1,1,tim))
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,qh (1,1,1,tim))
ELSE
DO k=1,nz
DO j=1,ny
DO i=1,nx
qi(i,j,k,tim) = 0.0
qs(i,j,k,tim) = 0.0
qh(i,j,k,tim) = 0.0
END DO
END DO
END DO
END IF
READ(rstiunt,ERR=999) tem1
CALL cpyary3d
(nx,ny,nz,tem1,tke (1,1,1,tim))
READ(rstiunt,ERR=999) udteb
READ(rstiunt,ERR=999) udtwb
READ(rstiunt,ERR=999) vdtnb
READ(rstiunt,ERR=999) vdtsb
READ(rstiunt,ERR=999) pdteb
READ(rstiunt,ERR=999) pdtwb
READ(rstiunt,ERR=999) pdtnb
READ(rstiunt,ERR=999) pdtsb
!-----------------------------------------------------------------------
!
! Set the future values of variables to their current values.
! This is done primarily for safety reasons since the arrays at
! tfuture will be overwritten by the new values during the
! time integration.
!
!-----------------------------------------------------------------------
!
CALL cpyary3d
(nx,ny,nz,u (1,1,1,tpresent) , u (1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,v (1,1,1,tpresent) , v (1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,w (1,1,1,tpresent) , w (1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,ptprt(1,1,1,tpresent), &
ptprt(1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,pprt (1,1,1,tpresent), &
pprt (1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,qv(1,1,1,tpresent) , qv(1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,qc(1,1,1,tpresent) , qc(1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,qr(1,1,1,tpresent) , qr(1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,qi(1,1,1,tpresent) , qi(1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,qs(1,1,1,tpresent) , qs(1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,qh(1,1,1,tpresent) , qh(1,1,1,tfuture))
CALL cpyary3d
(nx,ny,nz,tke(1,1,1,tpresent) , &
tke(1,1,1,tfuture))
IF ( sfcrstin /= 0 ) THEN
PRINT *,'read in sfc/soil variables:'
READ(rstiunt,ERR=999) soiltyp
READ(rstiunt,ERR=999) stypfrct
READ(rstiunt,ERR=999) vegtyp
READ(rstiunt,ERR=999) lai
READ(rstiunt,ERR=999) roufns
READ(rstiunt,ERR=999) veg
READ(rstiunt,ERR=999) tsfc
READ(rstiunt,ERR=999) qvsfc
READ(rstiunt,ERR=999) tsoil
READ(rstiunt,ERR=999) wetsfc
READ(rstiunt,ERR=999) wetdp
READ(rstiunt,ERR=999) wetcanp
READ(rstiunt,ERR=999) snowdpth
END IF
IF ( prcrsin /= 0 ) THEN
READ(rstiunt,ERR=999) raing
READ(rstiunt,ERR=999) rainc
READ(rstiunt,ERR=999) prcrate
END IF
IF ( rcumin /= 0 ) THEN
READ(rstiunt,ERR=999) ptcumsrc
READ(rstiunt,ERR=999) qcumsrc
END IF
IF ( exbcin /= 0 ) THEN
IF ( lbcopt == 2 ) THEN
READ(rstiunt,ERR=999) abstfcst0, abstfcst, &
ubcrd,vbcrd,wbcrd,ptbcrd,prbcrd, &
qvbcrd,qcbcrd,qrbcrd,qibcrd,qsbcrd,qhbcrd
READ(rstiunt,ERR=999) exbcbuf
ELSE
WRITE(6,'(a/a/a/a)') &
'WARNING: The restart file contains EXBC arrays, while', &
' the this run does not have EXBC option.', &
' Therefore, the results from restart run may be', &
' alterred. The program will continue.'
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
READ(rstiunt,ERR=999)
END IF
END IF
IF ( mapfin == 1 ) THEN
READ(rstiunt,ERR=999) mapfct
END IF
IF ( radrstin == 1 ) THEN
READ(rstiunt,ERR=999) radfrc
READ(rstiunt,ERR=999) radsw
READ(rstiunt,ERR=999) rnflx
END IF
IF ( kfrsin /= 0) THEN
READ(rstiunt,ERR=999) w0avg
READ(rstiunt,ERR=999) nca
READ(rstiunt,ERR=999) kfraincv
END IF
IF ( bmjsin /= 0) THEN
READ(rstiunt,ERR=999) cldefi
READ(rstiunt,ERR=999) xland
READ(rstiunt,ERR=999) bmjraincv
END IF
CLOSE (UNIT=rstiunt)
CALL retunit( rstiunt )
!
!-----------------------------------------------------------------------
!
! Reset the model u and v velocity values using the new
! domain translation speed.
!
!-----------------------------------------------------------------------
!
IF( nint(umove) == 999 .OR. nint(vmove) == 999 ) THEN
umove = umoveold
vmove = vmoveold
ELSE IF (umoveold /= umove .OR. vmoveold /= vmove ) THEN
WRITE(6,'(3(/1x,a)/)') &
'ATTENTION: UMOVE or VMOVE in the input file were different ', &
'from those in the restart file. Subroutine ADJUVMV is called', &
'to adjust the time-dependent variables for option grdtrns!=0.'
IF ( grdtrns /= 0 ) THEN
uchange = umove - umoveold
vchange = vmove - vmoveold
CALL adjuvmv
(nx,ny,nz, &
ubar,vbar,u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,qvbar, &
uchange, vchange, tem1, tem2)
END IF
END IF
END IF ! end of FOPEN wrapper for file read/write...
IF (mp_opt > 0) CALL mpbarrier
END DO
CALL jacob
(nx,ny,nz,x,y,z,zp,j1,j2,j3)
WRITE(6,'(/1x,a/,1x,a/)') &
'Grid definition arrays are read in from initialization data', &
'those set in INIGRD are superceded.'
!
!-----------------------------------------------------------------------
!
! Print out the domain-wide max/min of output variables.
!
!-----------------------------------------------------------------------
WRITE(6,'(/1x,a/)') &
'Min. and max. of the data arrays read in from restart data:'
CALL a3dmax0
(x,1,nx,1,nx,1,1,1,1, 1,1,1,1, amax,amin)
WRITE(6,'(/1x,2(a,e13.6))') 'xmin = ', amin,', xmax =',amax
CALL a3dmax0
(y,1,ny,1,ny,1,1,1,1, 1,1,1,1, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'ymin = ', amin,', ymax =',amax
CALL a3dmax0
(z,1,nz,1,nz,1,1,1,1, 1,1,1,1, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'zmin = ', amin,', zmax =',amax
CALL a3dmax0
(zp,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'zpmin = ', amin,', zpmax =',amax
CALL a3dmax0
(hterain,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'hmin = ', amin,', hmax =',amax
CALL a3dmax0
(ubar,1,nx,1,nx,1,ny,1,ny-1,1,nz,1,nz-1, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'ubarmin = ', amin,', ubarmax =',amax
CALL a3dmax0
(vbar,1,nx,1,nx-1,1,ny,1,ny,1,nz,1,nz-1, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'vbarmin = ', amin,', vbarmax =',amax
CALL a3dmax0
(ptbar,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1,amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'ptbarmin= ', amin,', ptbarmax=',amax
CALL a3dmax0
(pbar,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'pbarmin = ', amin,', pbarmax =',amax
CALL a3dmax0
(rhostr,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1,amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'rhostrmin=', amin,', rhostrmax=',amax
CALL a3dmax0
(qvbar,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1,amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qvbarmin= ', amin,', qvbarmax=',amax
DO i = 1,2
IF( i == 1) THEN
WRITE(6,'(/1x,a/)') 'Min/max of fields at tpresent:'
tim = tpresent
ELSE
WRITE(6,'(/1x,a/)') 'Min/max of fields at tpast:'
tim = tpast
END IF
CALL a3dmax0
( amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'umin = ', amin,', umax =', &
amax
CALL a3dmax0
( amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'vmin = ', amin,', vmax =', &
amax
CALL a3dmax0
( amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'wmin = ', amin,', wmax =', &
amax
CALL a3dmax0
(ptprt(1,1,1,tim),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1, &
nz-1,amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'ptprtmin= ', amin,', ptprtmax=', &
amax
CALL a3dmax0
(pprt(1,1,1,tim),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1, &
nz-1,amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'pprtmin = ', amin,', pprtmax =', &
amax
CALL a3dmax0
(qv(1,1,1,tim),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qvmin = ', amin,', qvmax =', &
amax
CALL a3dmax0
(qc(1,1,1,tim),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qcmin = ', amin,', qcmax =', &
amax
CALL a3dmax0
(qr(1,1,1,tim),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qrmin = ', amin,', qrmax =', &
amax
CALL a3dmax0
(qi(1,1,1,tim),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qimin = ', amin,', qimax =', &
amax
CALL a3dmax0
(qs(1,1,1,tim),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qsmin = ', amin,', qsmax =', &
amax
CALL a3dmax0
(qh(1,1,1,tim),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qhmin = ', amin,', qhmax =', &
amax
END DO
WRITE(6,'(/1x,a/)') &
'Min/max of fields for other one time level arrays:'
CALL a3dmax0
(tsfc(1,1,0),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'tsfcmin = ', amin,', tsfcmax =',amax
CALL a3dmax0
(tsoil(1,1,0),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'tsoilmin= ', amin,', tsoilmax =',amax
CALL a3dmax0
(wetsfc(1,1,0),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'wetsmin = ', amin,', wetsmax =',amax
CALL a3dmax0
(wetdp(1,1,0),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'wetdmin = ', amin,', wetdmax =',amax
CALL a3dmax0
(wetcanp(1,1,0),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'wetcmin = ', amin,', wetcmax =',amax
CALL a3dmax0
(raing,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'raingmin= ', amin,', raingmax =',amax
CALL a3dmax0
(rainc,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'raincmin= ', amin,', raincmax =',amax
CALL a3dmax0
(ptcumsrc,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'ptcummin= ', amin,', ptcummax=',amax
CALL a3dmax0
(qcumsrc(1,1,1,1),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qvcummin= ', amin,', qvcummax=',amax
CALL a3dmax0
(qcumsrc(1,1,1,2),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qccummin= ', amin,', qccummax=',amax
CALL a3dmax0
(qcumsrc(1,1,1,3),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qrcummin= ', amin,', qrcummax=',amax
CALL a3dmax0
(qcumsrc(1,1,1,4),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qicummin= ', amin,', qicummax=',amax
CALL a3dmax0
(qcumsrc(1,1,1,5),1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin)
WRITE(6,'(1x,2(a,e13.6))') 'qscummin= ', amin,', qscummax=',amax
!
!-----------------------------------------------------------------------
!
! Compress the restart file if it was originally compressed.
!
!-----------------------------------------------------------------------
!
IF( cmprsed .AND. filcmprs == 1 ) THEN
CALL cmprs
( rstinf(1:lrstfn) )
END IF
RETURN
999 CONTINUE
WRITE(6,'(a)') ' Error reading restart data '//rstinf
WRITE(6,'(a,i3,a)') ' Fortran channel ',rstiunt,' was used.'
WRITE(6,'(a)') ' Job stopped in subroutine rstin!'
CLOSE (UNIT=rstiunt)
CALL arpsstop
('arpsstop called from RSTIN error reading restart'// &
'file ',1)
END SUBROUTINE rstin
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CPYARY3D ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
SUBROUTINE cpyary3d(nx,ny,nz, ain, aout) 60
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Copy the contents of array 'ain' into 'aout'.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 11/10/1992.
!
! MODIFICATION HISTORY:
!
! 2/11/93 (K. Droegemeier)
! Added full documentation.
!
!-----------------------------------------------------------------------
!
! INPUT :
!
! ain Input array
! nx 1st Dimension of input and output arrays.
! ny 2nd Dimension of input and output arrays.
! nz 3rd Dimension of input and output arrays.
!
! OUTPUT:
!
! aout Output array.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz
REAL :: ain (nx,ny,nz) ! Input array to be copied in aout.
REAL :: aout(nx,ny,nz) ! Array whose value will be copied fron ain.
INTEGER :: i,j,k
!-----------------------------------------------------------------------
!
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
DO k=1,nz
DO j=1,ny
DO i=1,nx
aout(i,j,k) = ain(i,j,k)
END DO
END DO
END DO
RETURN
END SUBROUTINE cpyary3d