!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE INITOUT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE initout(mptr,nx,ny,nz,nstyps,exbcbufsz, & 3,56
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke, &
ubar,vbar,ptbar,pbar,rhostr,qvbar,kmh,kmv, &
x,y,z,zp,hterain, mapfct, j1,j2,j3,j3inv, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate,exbcbuf, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
rhobar,tem1,tem2,tem3,tem4,tem5, tem6, &
tem7,tem8,tem9,tem10)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Handles the model data output at the initial time.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 11/13/91.
!
! MODIFICATION HISTORY:
!
! 6/06/92 (M. Xue)
! Added full documentation.
!
! 7/13/92 (K. Brewster)
! Added comment line variables to arg list to be passed to the
! data dumping routines.
!
! 7/20/92 (M. Xue)
! Added call to energy and base state dump routines.
!
! 1/24/94 (Y. Liu)
! Added surface variables to the data dumping routines.
!
! 12/09/1998 (Donghai Wang)
! Added the snow cover.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! mptr Grid identifier.
! 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 (m/s)
! v y component of velocity (m/s)
! w Vertical component of Cartesian velocity (m/s)
! wcont Contravariant vertical velocity (m/s)
! ptprt Perturbation potential temperature (K)
! pprt Perturbation pressure (Pascal)
! qv Water vapor specific humidity (kg/kg)
! qc Cloud water mixing ratio (kg/kg)
! qr Rainwater mixing ratio (kg/kg)
! qi Cloud ice mixing ratio (kg/kg)
! qs Snow mixing ratio (kg/kg)
! qh Hail mixing ratio (kg/kg)
! tke Turbulent Kinetic Energy ((m/s)**2)
!
! 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 * j3 (kg/m**3)
! qvbar Base state water vapor specific humidity (kg/kg)
!
! kmh Horizontal turb. mixing coef. for momentum ( m**2/s )
! kmv Vertical turb. mixing coef. for momentum ( m**2/s )
!
! 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
! stypfrct Soil type fraction
! vegtyp Vegetation type
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Temperature at ground (K) (in top 1 cm layer)
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! wetsfc Surface soil moisture in the top 1 cm layer
! wetdp Deep soil moisture in the deep 1 m layer
! wetcanp Canopy water amount
!
! raing Grid supersaturation rain
! rainc Cumulus convective rain
! prcrate Precipitation rates
!
! radfrc Radiation forcing (K/s)
! radsw Solar radiation reaching the surface
! rnflx Net radiation flux absorbed by surface
!
! usflx Surface flux of u-momentum (kg/(m*s**2))
! vsflx Surface flux of v-momentum (kg/(m*s**2))
! ptsflx Surface heat flux (K*kg/(m**2 * s ))
! qvsflx Surface moisture flux of (kg/(m**2 * s))
!
! OUTPUT:
!
! None.
!
! WORK ARRAYS:
!
! rhobar Base state density (kg/m**3)
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
! tem5 Temporary work array.
! tem6 Temporary work array.
! tem7 Temporary work array.
! tem8 Temporary work array.
! tem9 Temporary work array.
! tem10 Temporary work array.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: mptr ! Grid identifier.
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 :: wcont (nx,ny,nz) ! Contravariant vertical 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 :: 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 * j3 (kg/m**3)
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
REAL :: kmh (nx,ny,nz) ! Horizontal turb. mixing coef. for
! momentum. ( m**2/s )
REAL :: kmv (nx,ny,nz) ! Vertical turb. mixing coef. for
! momentum. ( m**2/s )
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.
REAL :: mapfct(nx,ny,8) ! Map factors at scalar, u and v points
REAL :: j1 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as - d( zp )/d( x )
REAL :: j2 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as - d( zp )/d( y )
REAL :: j3 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as d( zp )/d( z )
REAL :: j3inv (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as d( zp )/d( z )
REAL :: rhobar(nx,ny,nz) ! Base state air density (kg/m**3)
INTEGER :: nstyps ! Number of soil types
INTEGER :: soiltyp (nx,ny,nstyps) ! Soil type
REAL :: stypfrct(nx,ny,nstyps) ! Soil type fraction
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) ! Ground sfc. temperature (K)
REAL :: tsoil (nx,ny,0:nstyps) ! Deep soil temperature (K)
REAL :: wetsfc (nx,ny,0:nstyps) ! Surface soil moisture
REAL :: wetdp (nx,ny,0:nstyps) ! Deep soil moisture
REAL :: wetcanp(nx,ny,0:nstyps) ! Canopy water amount
REAL :: snowdpth(nx,ny) ! Snow depth (m)
REAL :: raing(nx,ny) ! Grid supersaturation rain
REAL :: rainc(nx,ny) ! Cumulus convective rain
REAL :: prcrate(nx,ny,4) ! precipitation rates (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 :: radfrc(nx,ny,nz) ! Radiation forcing (K/s)
REAL :: radsw (nx,ny) ! Solar radiation reaching the surface
REAL :: rnflx (nx,ny) ! Net radiation flux absorbed by surface
REAL :: usflx (nx,ny) ! Surface flux of u-momentum (kg/(m*s**2))
REAL :: vsflx (nx,ny) ! Surface flux of v-momentum (kg/(m*s**2))
REAL :: ptsflx(nx,ny) ! Surface heat flux (K*kg/(m*s**2))
REAL :: qvsflx(nx,ny) ! Surface moisture flux (kg/(m**2*s))
INTEGER :: exbcbufsz ! Size of EXBC buffer
REAL :: exbcbuf(exbcbufsz) ! External boundary arrays
REAL :: tem1 (nx,ny,nz) ! Temporary work array
REAL :: tem2 (nx,ny,nz) ! Temporary work array
REAL :: tem3 (nx,ny,nz) ! Temporary work array
REAL :: tem4 (nx,ny,nz) ! Temporary work array
REAL :: tem5 (nx,ny,nz) ! Temporary work array
REAL :: tem6 (nx,ny,nz) ! Temporary work array
REAL :: tem7 (nx,ny,nz) ! Temporary work array
REAL :: tem8 (nx,ny,nz) ! Temporary work array
REAL :: tem9 (nx,ny,nz) ! Temporary work array
REAL :: tem10 (nx,ny,nz) ! Temporary work array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: tlevel ,tim ! Time level at which data are printed.
CHARACTER (LEN=128) :: basdmpfn
CHARACTER (LEN=128) :: exbcdmpfn
INTEGER :: lexdmpf
INTEGER :: lbasdmpf
INTEGER :: grdbas
REAL :: amin, amax
INTEGER :: i,j,k
INTEGER :: hdmpfmt1
CHARACTER (LEN=128) :: ternfn,sfcoutfl,soiloutfl,temchar
INTEGER :: lternfn,lfn
CHARACTER (LEN=128) :: savename ,timsnd
INTEGER :: tmstrln
INTEGER :: nunit
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'phycst.inc'
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...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
rhobar(i,j,k) = rhostr(i,j,k)*j3inv(i,j,k)
END DO
END DO
END DO
mgrid = mptr
!
!-----------------------------------------------------------------------
!
! For the initial time step, print out the max/min of all varaibles
! to check if their values are correct.
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) &
WRITE(6,'(/1x,a,i2/)') &
'Min. and max. of data arrays at initial time on grid ',mgrid
CALL a3dmax0
(x,1,nx,1,nx,1,1,1,1, 1,1,1,1, amax,amin)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
WRITE(6,'(1x,2(a,e13.6))') 'pbarmin = ', amin,', pbarmax =',amax
CALL a3dmax0
(qvbar,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1,amax,amin)
IF (myproc == 0) &
WRITE(6,'(1x,2(a,e13.6))') 'qvbarmin= ', amin,', qvbarmax=',amax
IF (myproc == 0) &
WRITE(6,'(/1x,a/)') 'Min/max of fields at tpresent:'
tim = tpresent
CALL a3dmax0
( amax,amin)
IF (myproc == 0) &
WRITE(6,'(1x,2(a,e13.6))') 'umin = ', amin,', umax =',amax
CALL a3dmax0
( amax,amin)
IF (myproc == 0) &
WRITE(6,'(1x,2(a,e13.6))') 'vmin = ', amin,', vmax =',amax
CALL a3dmax0
( amax,amin)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
WRITE(6,'(1x,2(a,e13.6))') 'qhmin = ', amin,', qhmax =',amax
IF (myproc == 0) &
WRITE(6,'(/1x,a/)') 'Min/max of fields at tpast:'
tim = tpast
CALL a3dmax0
( amax,amin)
IF (myproc == 0) &
WRITE(6,'(1x,2(a,e13.6))') 'umin = ', amin,', umax =',amax
CALL a3dmax0
( amax,amin)
IF (myproc == 0) &
WRITE(6,'(1x,2(a,e13.6))') 'vmin = ', amin,', vmax =',amax
CALL a3dmax0
( amax,amin)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
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)
IF (myproc == 0) &
WRITE(6,'(1x,2(a,e13.6))') 'qhmin = ', amin,', qhmax =',amax
tlevel = tpresent
!
!-----------------------------------------------------------------------
!
! Calculation of the max./min. statistics and printing of initial fields
!
!-----------------------------------------------------------------------
!
IF( nmaxmin > 0 ) THEN
CALL maxmin
(mptr,nx,ny,nz,tlevel,rhobar, &
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
x,y,z,zp,mapfct, &
tsfc(1,1,0),tsoil(1,1,0),wetsfc(1,1,0), &
wetdp(1,1,0),wetcanp(1,1,0), &
tem1,tem2,tem3)
END IF
!
!-----------------------------------------------------------------------
!
! Calculation of the energy statistics and printing at the initial time
!
!-----------------------------------------------------------------------
!
IF( nenergy > 0 ) THEN
CALL energy
(nx,ny,nz, &
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,rhobar, &
x,y,z,zp,hterain, j3, &
tem1,tem2,tem3,tem4,tem5)
END IF
IF( nfmtprt > 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Formatted printing of base state variables
!
!-----------------------------------------------------------------------
!
CALL basprt
(nx,ny,nz,ubar,vbar,ptbar,pbar,rhobar,qvbar, &
zp,hterain)
!
!-----------------------------------------------------------------------
!
! Formatted printing of time dependent fields
!
!-----------------------------------------------------------------------
!
IF (myproc == 0) THEN
WRITE(6,'(/'' THE INITIAL FIELDS:''/)')
CALL fmtprt
(nx,ny,nz, tlevel, &
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
x,y,z,zp,hterain, j1,j2,j3, tem1)
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Check to see if any history data dump is to be produced.
!
!-----------------------------------------------------------------------
!
IF( hdmpfmt == 0 .OR. nhisdmp <= 0 ) THEN
IF (myproc == 0) WRITE(6,'(1x,a)') &
'History data dump option=0, no data is dumped.'
GO TO 800
END IF
!
!-----------------------------------------------------------------------
!
! Data dump of the model grid and base state arrays:
!
!-----------------------------------------------------------------------
!
IF( hdmpfmt == 5 ) GO TO 700
IF( hdmpfmt == 9 ) GO TO 700
IF( hdmpfmt == 11 ) GO TO 700
!
!-----------------------------------------------------------------------
!
! Find a unique name basdmpfn(1:lbasdmpf) for the grid and
! base state array dump file
!
!-----------------------------------------------------------------------
!
CALL gtbasfn
(runname(1:lfnkey),dirname,ldirnam,hdmpfmt, &
mgrid,nestgrd,basdmpfn,lbasdmpf)
IF (myproc == 0) &
WRITE(6,'(1x,a,a)') &
'Data dump of grid and base state arrays into file ', &
basdmpfn(1:lbasdmpf)
grdbas = 1 ! Dump out grid and base state arrays only
tim = tpresent
DO k=1,nz
DO j=1,ny
DO i=1,nx
tem1(i,j,k)=0.0
END DO
END DO
END DO
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL dtadump
(nx,ny,nz,nstyps, &
hdmpfmt,nchdmp,basdmpfn(1:lbasdmpf), &
grdbas,filcmprs, &
u(1,1,1,tim),v(1,1,1,tim), &
w(1,1,1,tim),ptprt(1,1,1,tim), &
pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim),qr(1,1,1,tim), &
qi(1,1,1,tim),qs(1,1,1,tim), &
qh(1,1,1,tim),tke(1,1,1,tim),kmh,kmv, &
ubar,vbar,tem1,ptbar,pbar,rhobar,qvbar, &
x,y,z,zp,hterain,j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
tem2,tem3,tem6)
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
700 CONTINUE
!
!-----------------------------------------------------------------------
!
! Data dump of the model time dependent arrays at initial time:
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Find a unique name hdmpfn(1:ldmpf) for history dump data set
! at time 'curtim'.
!
!-----------------------------------------------------------------------
!
!
CALL gtdmpfn
(runname(1:lfnkey),dirname, &
ldirnam,curtim,hdmpfmt, &
mgrid,nestgrd, hdmpfn, ldmpf)
IF (myproc == 0) &
WRITE(6,'(1x,a,a)') 'History data dump in file ',hdmpfn(1:ldmpf)
grdbas = 0 ! No base state or grid array is dumped.
tim = tpresent
DO k=1,nz
DO j=1,ny
DO i=1,nx
tem1(i,j,k)=0.0
END DO
END DO
END DO
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL dtadump
(nx,ny,nz,nstyps, &
hdmpfmt,nchdmp,hdmpfn(1:ldmpf), &
grdbas,filcmprs, &
u(1,1,1,tim),v(1,1,1,tim), &
w(1,1,1,tim),ptprt(1,1,1,tim), &
pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim),qr(1,1,1,tim), &
qi(1,1,1,tim),qs(1,1,1,tim), &
qh(1,1,1,tim),tke(1,1,1,tim),kmh,kmv, &
ubar,vbar,tem1,ptbar,pbar,rhobar,qvbar, &
x,y,z,zp,hterain, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
tem2,tem3,tem6)
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
!
!-----------------------------------------------------------------------
!
! Call EXBCDUMP to dump the external boundary fields.
!
!-----------------------------------------------------------------------
!
IF ( extdadmp == 1 .AND. lbcopt == 2 ) THEN
IF ( hdmpfmt == 5 .OR. hdmpfmt == 9 .OR. hdmpfmt == 11 ) THEN
hdmpfmt1 = 1
ELSE
hdmpfmt1 = hdmpfmt
END IF
CALL gtdmpfn
(runname(1:lfnkey),dirname,ldirnam,curtim,1, &
mgrid,nestgrd, exbcdmpfn, lexdmpf)
exbcdmpfn(lexdmpf+1:lexdmpf+5) = '.exbc'
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL exbcdump
(nx,ny,nz,nstyps, &
hdmpfmt1,exbcdmpfn,grdbas,filcmprs, &
tem2,tem3,tem4,tem5,tem6,tem7, &
qc(1,1,1,tim),qr(1,1,1,tim), &
qi(1,1,1,tim),qs(1,1,1,tim), &
qh(1,1,1,tim),tke(1,1,1,tim),kmh,kmv, &
ubar,vbar,tem1,ptbar,pbar, &
rhobar,qvbar, x,y,z,zp,hterain, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
exbcbuf(nu0exb), exbcbuf(nv0exb), &
exbcbuf(nw0exb), exbcbuf(npt0exb), &
exbcbuf(npr0exb),exbcbuf(nqv0exb), &
exbcbuf(nqc0exb),exbcbuf(nqr0exb), &
exbcbuf(nqi0exb),exbcbuf(nqs0exb), &
exbcbuf(nqh0exb),exbcbuf(nudtexb), &
exbcbuf(nvdtexb),exbcbuf(nwdtexb), &
exbcbuf(nptdtexb),exbcbuf(nprdtexb), &
exbcbuf(nqvdtexb),exbcbuf(nqcdtexb), &
exbcbuf(nqrdtexb),exbcbuf(nqidtexb), &
exbcbuf(nqsdtexb),exbcbuf(nqhdtexb), &
tem8,tem9,tem10)
!
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
END IF
!-----------------------------------------------------------------------
!
! Write out soil model variable file
!
!-----------------------------------------------------------------------
IF (soildmp > 0) THEN
CALL cvttsnd
( curtim, timsnd, tmstrln )
soiloutfl = runname(1:lfnkey)//".soilvar."//timsnd(1:tmstrln)
lfn = lfnkey + 9 + tmstrln
IF( dirname /= ' ' ) THEN
temchar = soiloutfl
soiloutfl = dirname(1:ldirnam)//'/'//temchar
lfn = lfn + ldirnam + 1
END IF
IF (mp_opt > 0) THEN
savename(1:128) = soiloutfl(1:128)
WRITE(soiloutfl, '(a,a,2i2.2)') trim(savename),'_',loc_x,loc_y
lfn = lfn + 5
END IF
CALL fnversn
(soiloutfl, lfn)
WRITE (6,*) 'Write soil initial data to ',soiloutfl(1:lfn)
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL wrtsoil
(nx,ny,nstyps, soiloutfl(1:lfn),dx,dy, &
mapproj,trulat1,trulat2,trulon,sclfct,ctrlat,ctrlon, &
1,1,1,1,1,1, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth,soiltyp)
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
END IF
!-----------------------------------------------------------------------
!
! Write out terrain data
!
!-----------------------------------------------------------------------
IF (terndmp > 0) THEN
CALL getunit
( nunit )
ternfn = runname(1:lfnkey)//".trndata"
lternfn = lfnkey + 8
IF( dirname /= ' ' ) THEN
temchar = ternfn
ternfn = dirname(1:ldirnam)//'/'//temchar
lternfn = lternfn + ldirnam + 1
END IF
IF (mp_opt > 0) THEN
savename(1:128) = ternfn(1:128)
WRITE(ternfn, '(a,a,2i2.2)') trim(savename),'_',loc_x,loc_y
lternfn = lternfn + 5
END IF
CALL fnversn
(ternfn, lternfn )
WRITE (6,*) 'Write terrain data to ',ternfn(1:lternfn)
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL writtrn
(nx,ny,ternfn(1:lternfn), dx,dy, &
mapproj,trulat1,trulat2,trulon,sclfct, &
ctrlat,ctrlon,hterain)
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
END IF
!-----------------------------------------------------------------------
!
! Write out surface property data file: sfcoutfl .
!
!-----------------------------------------------------------------------
IF (sfcdmp > 0) THEN
sfcoutfl = runname(1:lfnkey)//".sfcdata"
lfn = lfnkey + 8
IF( dirname /= ' ' ) THEN
temchar = sfcoutfl
sfcoutfl = dirname(1:ldirnam)//'/'//temchar
lfn = lfn + ldirnam + 1
END IF
IF (mp_opt > 0) THEN
savename(1:128) = sfcoutfl(1:128)
WRITE(sfcoutfl, '(a,a,2i2.2)') trim(savename),'_',loc_x,loc_y
lfn = lfn + 5
END IF
CALL fnversn
(sfcoutfl, lfn)
WRITE (6,*) 'Write surface property data in ',sfcoutfl(1:lfn)
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL wrtsfcdt
(nx,ny,nstyps,sfcoutfl(1:lfn), dx,dy, &
mapproj,trulat1,trulat2,trulon,sclfct,ctrlat,ctrlon, &
1,1,1,1,1,0, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg,veg)
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
END IF ! landin.eq.1
800 CONTINUE ! Entry if hdmpfmt=0
RETURN
END SUBROUTINE initout
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE OUTPUT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
!EMK BMJ
SUBROUTINE output(mptr,nx,ny,nz,nstyps,exbcbufsz, & 3,25
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke, &
udteb, udtwb, vdtnb, vdtsb, &
pdteb ,pdtwb ,pdtnb ,pdtsb, &
ubar,vbar,ptbar,pbar,rhostr,qvbar,kmh,kmv, &
x,y,z,zp,hterain, mapfct, j1,j2,j3,j3inv, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth,qvsfc, &
ptcumsrc,qcumsrc,w0avg,nca,kfraincv, &
cldefi,xland,bmjraincv, &
raing,rainc,prcrate,exbcbuf, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
rhobar, tem1,tem2,tem3,tem4,tem5,tem6, &
tem7,tem8,tem9,tem10)
!EMK END
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Coordinate the output of model data at a particular time.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 11/13/91.
!
! MODIFICATION HISTORY:
!
! 6/06/92 (M. Xue)
! Added full documentation.
!
! 7/13/92 (K. Brewster)
! Added comment line variables to arg list to be passed to the
! data dumping routines.
!
! 1/24/94 (Y. Liu)
! Added surface variables to arg list to be passed to the
! data dumping routines.
!
! 02/07/1995 (Yuhe Liu)
! Added a new 2-D permanent array, veg(nx,ny), to the argument list
!
! 12/6/95 (J. Zong and M. Xue)
! Added qs and qh to the argument list of REFLEC when it is called
! to include the contributions of qs and qh to reflectivity.
!
! 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:
!
! mptr Grid identifier.
! 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 (m/s)
! v y component of velocity (m/s)
! w Vertical component of Cartesian velocity (m/s)
! wcont Contravariant vertical velocity (m/s)
! ptprt Perturbation potential temperature (K)
! pprt Perturbation pressure (Pascal)
! qv Water vapor specific humidity (kg/kg)
! qc Cloud water mixing ratio (kg/kg)
! qr Rainwater mixing ratio (kg/kg)
! qi Cloud ice mixing ratio (kg/kg)
! qs Snow mixing ratio (kg/kg)
! qh Hail mixing ratio (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 * j3 (kg/m**3)
! qvbar Base state water vapor specific humidity (kg/kg)
!
! kmh Horizontal turb. mixing coef. for momentum ( m**2/s )
! kmv Vertical turb. mixing coef. for momentum ( m**2/s )
!
! 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 at the horizontal grid points
! stypfrct Soil type fraction
! vegtyp Vegetation type at the horizontal grid points
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Temperature at ground (K) (in top 1 cm layer)
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! wetsfc Surface soil moisture in the top 1 cm layer
! wetdp Deep soil moisture in the deep 1 m layer
! wetcanp Canopy water amount
! qvsfc Effective qv at sfc.
!
! ptcumsrc Source term in pt-equation due to cumulus parameterization
! qcumsrc Source term in water equation 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)
!
! raing Grid supersaturation rain
! rainc Cumulus convective rain
! prcrate Precipitation rates
!
! radfrc Radiation forcing (K/s)
! radsw Solar radiation reaching the surface
! rnflx Net radiation flux absorbed by surface
!
! usflx Surface flux of u-momentum (kg/(m*s**2))
! vsflx Surface flux of v-momentum (kg/(m*s**2))
! ptsflx Surface heat flux (K*kg/(m**2 * s ))
! qvsflx Surface moisture flux of (kg/(m**2 * s))
!
! OUTPUT:
!
! None.
!
! WORK ARRAYS:
!
! rhobar Base state density (kg/m**3)
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
! tem5 Temporary work array.
! tem6 Temporary work array.
! tem7 Temporary work array.
! tem8 Temporary work array.
! tem9 Temporary work array.
! tem10 Temporary work array.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: mptr ! Grid identifier.
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 :: wcont (nx,ny,nz) ! Contravariant vertical 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 * j3 (kg/m**3)
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
REAL :: kmh (nx,ny,nz) ! Horizontal turb. mixing coef. for
! momentum. ( m**2/s )
REAL :: kmv (nx,ny,nz) ! Vertical turb. mixing coef. for
! momentum. ( m**2/s )
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.
REAL :: mapfct(nx,ny,8) ! Map factors at scalar, u and v points
REAL :: j1 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as - d( zp )/d( x )
REAL :: j2 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as - d( zp )/d( y )
REAL :: j3 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as d( zp )/d( z )
REAL :: j3inv (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as d( zp )/d( z )
REAL :: rhobar(nx,ny,nz) ! Base state air density (kg/m**3)
INTEGER :: nstyps ! Number of soil types
INTEGER :: soiltyp (nx,ny,nstyps) ! Soil type at each point
REAL :: stypfrct(nx,ny,nstyps) ! Soil type fraction
INTEGER :: vegtyp (nx,ny) ! Vegetation type at each point
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) ! Ground sfc. temperature (K)
REAL :: qvsfc (nx,ny,0:nstyps) ! Effective qv at sfc.
REAL :: tsoil (nx,ny,0:nstyps) ! Deep soil temperature (K)
REAL :: wetsfc (nx,ny,0:nstyps) ! Surface soil moisture
REAL :: wetdp (nx,ny,0:nstyps) ! Deep soil moisture
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(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 :: 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
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 :: usflx (nx,ny) ! Surface flux of u-momentum (kg/(m*s**2))
REAL :: vsflx (nx,ny) ! Surface flux of v-momentum (kg/(m*s**2))
REAL :: ptsflx(nx,ny) ! Surface heat flux (K*kg/(m*s**2))
REAL :: qvsflx(nx,ny) ! Surface moisture flux (kg/(m**2*s))
INTEGER :: exbcbufsz ! Size of external buffer array
REAL :: exbcbuf ( exbcbufsz) ! External buffer array
REAL :: tem1 (nx,ny,nz) ! Temporary work array
REAL :: tem2 (nx,ny,nz) ! Temporary work array
REAL :: tem3 (nx,ny,nz) ! Temporary work array
REAL :: tem4 (nx,ny,nz) ! Temporary work array
REAL :: tem5 (nx,ny,nz) ! Temporary work array
REAL :: tem6 (nx,ny,nz) ! Temporary work array
REAL :: tem7 (nx,ny,nz) ! Temporary work array
REAL :: tem8 (nx,ny,nz) ! Temporary work array
REAL :: tem9 (nx,ny,nz) ! Temporary work array
REAL :: tem10 (nx,ny,nz) ! Temporary work array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: tlevel, tim ! Time level at which data are printed.
CHARACTER (LEN=128) :: exbcdmpfn
INTEGER :: lexdmpf
INTEGER :: grdbas
INTEGER :: i,j,k
LOGICAL :: dumphist
CHARACTER (LEN=128) :: soiloutfl,temchar,timsnd
INTEGER :: lfn,tmstrln
CHARACTER (LEN=128) :: savename
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'phycst.inc'
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...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
rhobar(i,j,k) = rhostr(i,j,k)*j3inv(i,j,k)
END DO
END DO
END DO
mgrid = mptr
!
!-----------------------------------------------------------------------
!
! Printing, diagnostics and history dump of data at time tpresent
!
!-----------------------------------------------------------------------
!
tlevel = tpresent
!
!-----------------------------------------------------------------------
!
! Dump restart data files every nrstout number of time steps.
!
!-----------------------------------------------------------------------
!
IF( nrstout > 0.AND.MOD(nstep,nrstout) == 0) THEN
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
!EMK BMJ
CALL rstout
(nx,ny,nz,nstyps, exbcbufsz, &
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
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
END IF
!
!-----------------------------------------------------------------------
!
! Calculate the max and min values of variables and write them
! into a separate file.
!
!-----------------------------------------------------------------------
!
IF( nmaxmin > 0) THEN
IF(MOD(nstep,nmaxmin) == 0) THEN
CALL maxmin
(mptr,nx,ny,nz,tlevel,rhobar, &
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
x,y,z,zp,mapfct, &
tsfc(1,1,0),tsoil(1,1,0),wetsfc(1,1,0), &
wetdp(1,1,0),wetcanp(1,1,0), &
tem1,tem2,tem3)
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Calculation of energy statistics and printing
!
!-----------------------------------------------------------------------
!
IF( nenergy > 0) THEN
IF(MOD(nstep,nenergy) == 0) THEN
CALL energy
(nx,ny,nz, &
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,rhobar, &
x,y,z,zp,hterain, j3, &
tem1,tem2,tem3,tem4,tem5)
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Print out formatted 2-d slices of 3-d arrays
!
!-----------------------------------------------------------------------
!
IF( nfmtprt > 0) THEN
IF(MOD(nstep,nfmtprt) == 0) THEN
WRITE(6,'(1x,a,f13.3,a,i10)') &
'Print fields at time=',curtim,'(s) with nstep=',nstep
CALL fmtprt
(nx,ny,nz, tlevel, &
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
x,y,z,zp,hterain, j1,j2,j3, tem1)
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Produce history data dump every nhisdmp number of time steps.
!
!-----------------------------------------------------------------------
!
dumphist = .false.
IF ( nhisdmp > 0.AND.hdmpfmt /= 0) THEN
IF ( hdmpopt == 1 .AND. nstep >= nstrtdmp ) THEN
dumphist = MOD(nstep-nstrtdmp,nhisdmp) == 0
ELSE IF ( hdmpopt == 2 .AND. nhisdmp <= numhdmp ) THEN
35 IF ( nstep > hdmpstp(nhisdmp) .AND. nhisdmp < numhdmp ) THEN
nhisdmp = nhisdmp + 1
GO TO 35
END IF
dumphist = nstep == hdmpstp(nhisdmp)
IF ( dumphist ) nhisdmp = nhisdmp + 1
END IF
END IF
IF ( dumphist ) THEN
!
!-----------------------------------------------------------------------
!
! Find a unique name hdmpfn(1:ldmpf) for the history dump data
! set at time 'curtim'.
!
! For the savi3D data dump case, the file name is specified only
! once in INITOUT.
!
!-----------------------------------------------------------------------
!
IF( hdmpfmt /= 5 .AND. hdmpfmt /= 9 ) THEN
CALL gtdmpfn
(runname(1:lfnkey),dirname, &
ldirnam,curtim,hdmpfmt, &
mgrid,nestgrd, hdmpfn, ldmpf)
END IF
IF (myproc == 0) WRITE(6,'(1x,a,a)') &
'History data dump in file ',hdmpfn(1:ldmpf)
grdbas = 0 ! No base state or grid array is dumped.
tim = tpresent
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL dtadump
(nx,ny,nz,nstyps, &
hdmpfmt,nchdmp,hdmpfn(1:ldmpf), &
grdbas,filcmprs, &
u(1,1,1,tim),v(1,1,1,tim), &
w(1,1,1,tim), &
ptprt(1,1,1,tim), &
pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim), &
qr(1,1,1,tim), &
qi(1,1,1,tim),qs(1,1,1,tim), &
qh(1,1,1,tim),tke(1,1,1,tim),kmh,kmv, &
ubar,vbar,tem1,ptbar,pbar,rhobar,qvbar, &
x,y,z,zp,hterain, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
tem2,tem3,tem6)
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
!
!-----------------------------------------------------------------------
!
! Dump the fields of external boundary conditions for diagnostic
! purpose.
!
!-----------------------------------------------------------------------
!
IF ( extdadmp == 1 .AND. lbcopt == 2 ) THEN
!
!-----------------------------------------------------------------------
!
! Call EXBCDUMP to dump the external boundary fields.
!
!-----------------------------------------------------------------------
!
CALL gtdmpfn
(runname(1:lfnkey),dirname,ldirnam,curtim,1, &
mgrid,nestgrd, exbcdmpfn, lexdmpf)
exbcdmpfn(lexdmpf+1:lexdmpf+5) = '.exbc'
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL exbcdump
( nx,ny,nz,nstyps, &
1,exbcdmpfn,grdbas,filcmprs, &
tem2,tem3,tem4,tem5,tem6,tem7, &
qc(1,1,1,tim),qr(1,1,1,tim), &
qi(1,1,1,tim),qs(1,1,1,tim), &
qh(1,1,1,tim),tke(1,1,1,tim),kmh,kmv, &
ubar,vbar,tem1,ptbar,pbar, &
rhobar,qvbar, &
x,y,z,zp,hterain, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
exbcbuf(nu0exb), exbcbuf(nv0exb), &
exbcbuf(nw0exb), exbcbuf(npt0exb), &
exbcbuf(npr0exb),exbcbuf(nqv0exb), &
exbcbuf(nqc0exb),exbcbuf(nqr0exb), &
exbcbuf(nqi0exb),exbcbuf(nqs0exb), &
exbcbuf(nqh0exb),exbcbuf(nudtexb), &
exbcbuf(nvdtexb),exbcbuf(nwdtexb), &
exbcbuf(nptdtexb),exbcbuf(nprdtexb), &
exbcbuf(nqvdtexb),exbcbuf(nqcdtexb), &
exbcbuf(nqrdtexb),exbcbuf(nqidtexb), &
exbcbuf(nqsdtexb),exbcbuf(nqhdtexb), &
tem8,tem9,tem10)
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
END IF
!wdt update begin -- allow one to dump out sfc, soil & tern data even if
! no history dump is written out.
END IF
!-----------------------------------------------------------------------
!
! Write out soil model variable file
!
!-----------------------------------------------------------------------
IF (soildmp > 0) THEN
CALL cvttsnd
( curtim, timsnd, tmstrln )
soiloutfl = runname(1:lfnkey)//".soilvar."//timsnd(1:tmstrln)
lfn = lfnkey + 9 + tmstrln
IF( dirname /= ' ' ) THEN
temchar = soiloutfl
soiloutfl = dirname(1:ldirnam)//'/'//temchar
lfn = lfn + ldirnam + 1
END IF
IF (mp_opt > 0) THEN
savename(1:128) = soiloutfl(1:128)
WRITE(soiloutfl, '(a,a,2i2.2)') trim(savename),'_',loc_x,loc_y
lfn = lfn + 5
END IF
CALL fnversn
(soiloutfl, lfn)
WRITE (6,*) 'Write soil initial data to ',soiloutfl(1:lfn)
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL wrtsoil
(nx,ny,nstyps, soiloutfl(1:lfn),dx,dy, &
mapproj,trulat1,trulat2,trulon,sclfct,ctrlat,ctrlon, &
1,1,1,1,1,1, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth,soiltyp)
!wdt update end
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
END IF
!-----------------------------------------------------------------------
!
! Produces HDF images of Radar reflectivity factor at z=.25 and 4 km.
!
!-----------------------------------------------------------------------
IF( nimgdmp /= 0 ) THEN
IF( MOD(nstep,nimgdmp) == 0 .AND. imgopt == 1) THEN
tim = tpresent
CALL reflec
(nx,ny,nz, rhobar, qr(1,1,1,tim), qs(1,1,1,tim), &
qh(1,1,1,tim), tem1)
! CALL img3d0(tem1,nx,1,nx-1,-2, ny,1,ny-1,-2, nz,1,nz-1,-2,
! : 75.0 , 0.0 , 'rf' ,runname(1:lfnkey),curtim, 1, 2 ,
! : 1 ,1 ,
! : mptr, nestgrd, tem1)
! CALL avgz(tem1 , 1 ,
! : nx,ny,nz, 1,nx-1, 1,ny-1, 2,nz-1, tem2)
CALL img3d0
(tem1,nx,1,nx-1,-2, ny,1,ny-1,-2, nz,1,nz-1,-2, &
75.0 , 0.0 , 'rf' ,runname(1:lfnkey),curtim, 1, 24 , &
1 ,1 , mptr, nestgrd, tem1)
CALL img3d0
(ptprt(1,1,1,tim) &
,nx,1,nx-1,-2, ny,1,ny-1,-2, nz,1,nz-1,-2, &
0.0 , -12.0 , 'pt' ,runname(1:lfnkey),curtim, 1, 2 , &
1 ,1 , mptr, nestgrd, tem1)
CALL img3d0
( ,nx,1,nx-1,-2, ny,1,ny-1,-2, nz,1,nz-1,-2, &
10.0 , -10.0 , 'w' ,runname(1:lfnkey),curtim, 1, 5 , &
1 ,1 , mptr, nestgrd, tem1)
CALL img3d0
( ,nx,1,nx-1,-2, ny,1,ny-1,-2, nz,1,nz-1,-2, &
60.0 , -30.0 , 'w' ,runname(1:lfnkey),curtim, 1,24 , &
1 ,1 , mptr, nestgrd, tem1)
END IF
END IF
IF( nplots /= 0) THEN
IF( MOD(nstep,nplots) == 0 .AND. pltopt == 1) THEN
tim = tpresent
CALL wrtxyslic
(nx,ny,nz, u(1,1,1,tim),v(1,1,1,tim),w(1,1,1,tim), &
ptprt(1,1,1,tim),pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim),qr(1,1,1,tim), ubar,vbar,ptbar, &
pbar,qvbar, &
x,y,zp, 50.0,runname(1:lfnkey),curtim,mgrid, &
nestgrd, &
tem1,tem2)
CALL wrtxyslic
(nx,ny,nz, u(1,1,1,tim),v(1,1,1,tim),w(1,1,1,tim), &
ptprt(1,1,1,tim),pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim),qr(1,1,1,tim), ubar,vbar,ptbar, &
pbar,qvbar, &
x,y,zp, 1000.0,runname(1:lfnkey),curtim,mgrid, &
nestgrd, &
tem1,tem2)
CALL wrtxyslic
(nx,ny,nz, u(1,1,1,tim),v(1,1,1,tim),w(1,1,1,tim), &
ptprt(1,1,1,tim),pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim),qr(1,1,1,tim), ubar,vbar,ptbar, &
pbar,qvbar, &
x,y,zp, 2000.0,runname(1:lfnkey),curtim,mgrid, &
nestgrd, &
tem1,tem2)
CALL wrtxyslic
(nx,ny,nz, u(1,1,1,tim),v(1,1,1,tim),w(1,1,1,tim), &
ptprt(1,1,1,tim),pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim),qr(1,1,1,tim), ubar,vbar,ptbar, &
pbar,qvbar, &
x,y,zp, 4000.0,runname(1:lfnkey),curtim,mgrid, &
nestgrd, &
tem1,tem2)
CALL wrtxyslic
(nx,ny,nz, u(1,1,1,tim),v(1,1,1,tim),w(1,1,1,tim), &
ptprt(1,1,1,tim),pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim),qr(1,1,1,tim), ubar,vbar,ptbar, &
pbar,qvbar, &
x,y,zp, 8000.0,runname(1:lfnkey),curtim,mgrid, &
nestgrd, &
tem1,tem2)
END IF
END IF
RETURN
END SUBROUTINE output
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CHKSTAB ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE chkstab(mptr,nx,ny,nz,nstyps, & 3,4
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke, &
ubar,vbar,ptbar,pbar,rhobar,qvbar,kmh,kmv, &
x,y,z,zp,hterain,mapfct, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
tem1,tem2,tem3, tem4)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Check the stability of the time integration. If unstable, dump
! out the model data and stop the model run.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 11/13/91.
!
! MODIFICATION HISTORY:
!
! 6/06/92 (M. Xue)
! Added full documentation.
!
! 7/13/92 (K. Brewster)
! Added comment line variables to arg list to be passed to the
! data dumping routines.
!
! 12/09/1998 (Donghai Wang)
! Added the snow cover.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! mptr Grid identifier.
! 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 (m/s)
! v y component of velocity (m/s)
! w Vertical component of Cartesian velocity (m/s)
! wcont Contravariant vertical velocity (m/s)
! ptprt Perturbation potential temperature (K)
! pprt Perturbation pressure (Pascal)
! qv Water vapor specific humidity (kg/kg)
! qc Cloud water mixing ratio (kg/kg)
! qr Rainwater mixing ratio (kg/kg)
! qi Cloud ice mixing ratio (kg/kg)
! qs Snow mixing ratio (kg/kg)
! qh Hail mixing ratio (kg/kg)
! tke Turbulent Kinetic Energy ((m/s)**2)
!
! 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)
! rhobar Base state density (kg/m**3)
! qvbar Base state water vapor specific humidity (kg/kg)
!
! kmh Horizontal turb. mixing coef. for momentum ( m**2/s )
! kmv Vertical turb. mixing coef. for momentum ( m**2/s )
!
! 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
! stypfrct Soil type fraction
! vegtyp Vegetation type
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Temperature at ground (K) (in top 1 cm layer)
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! wetsfc Surface soil moisture in the top 1 cm layer
! wetdp Deep soil moisture in the deep 1 m layer
! wetcanp Canopy water amount
!
! raing Grid supersaturation rain
! rainc Cumulus convective rain
! prcrate Precipitation rates
!
! radfrc Radiation forcing (K/s)
! radsw Solar radiation reaching the surface
! rnflx Net radiation flux absorbed by surface
!
! usflx Surface flux of u-momentum (kg/(m*s**2))
! vsflx Surface flux of v-momentum (kg/(m*s**2))
! ptsflx Surface heat flux (K*kg/(m**2 * s ))
! qvsflx Surface moisture flux of (kg/(m**2 * s))
!
! OUTPUT:
!
! None.
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: mptr ! Grid identifier.
INCLUDE 'timelvls.inc'
INCLUDE 'mp.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 :: wcont (nx,ny,nz) ! Contravariant vertical 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
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 :: rhobar(nx,ny,nz) ! Base state air density (kg/m**3)
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
REAL :: kmh (nx,ny,nz) ! Horizontal turb. mixing coef. for
! momentum. ( m**2/s )
REAL :: kmv (nx,ny,nz) ! Vertical turb. mixing coef. for
! momentum. ( m**2/s )
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.
REAL :: mapfct(nx,ny,8) ! Map factors at scalar, u and v points
REAL :: j1 (nx,ny,nz) ! Coordinate transformation Jacobian defined as
! - d( zp )/d( x )
REAL :: j2 (nx,ny,nz) ! Coordinate transformation Jacobian defined as
! - d( zp )/d( y )
REAL :: j3 (nx,ny,nz) ! Coordinate transformation Jacobian defined as
! d( zp )/d( z )
INTEGER :: nstyps ! Number of soil types
INTEGER :: soiltyp (nx,ny,nstyps) ! Soil type
REAL :: stypfrct(nx,ny,nstyps) ! Soil type fraction
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) ! Ground sfc. temperature (K)
REAL :: tsoil (nx,ny,0:nstyps) ! Deep soil temperature (K)
REAL :: wetsfc (nx,ny,0:nstyps) ! Surface soil moisture
REAL :: wetdp (nx,ny,0:nstyps) ! Deep soil moisture
REAL :: wetcanp(nx,ny,0:nstyps) ! Canopy water amount
REAL :: snowdpth(nx,ny) ! Snow depth (m)
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 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 :: radfrc(nx,ny,nz) ! Radiation forcing (K/s)
REAL :: radsw (nx,ny) ! Solar radiation reaching the surface
REAL :: rnflx (nx,ny) ! Net radiation flux absorbed by surface
REAL :: usflx (nx,ny) ! Surface flux of u-momentum (kg/(m*s**2))
REAL :: vsflx (nx,ny) ! Surface flux of v-momentum (kg/(m*s**2))
REAL :: ptsflx(nx,ny) ! Surface heat flux (K*kg/(m*s**2))
REAL :: qvsflx(nx,ny) ! Surface moisture flux (kg/(m**2*s))
REAL :: tem1 (nx,ny,nz) ! Temporary work array
REAL :: tem2 (nx,ny,nz) ! Temporary work array
REAL :: tem3 (nx,ny,nz) ! Temporary work array
REAL :: tem4 (nx,ny,nz) ! Temporary work array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
INTEGER :: tlevel
REAL :: absmax,vellmt
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'phycst.inc'
INCLUDE 'globcst.inc'
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
mgrid = mptr
tlevel = tpresent
!
!-----------------------------------------------------------------------
!
! Check for instabilty of model integration.
!
! When instability is detected, stop the model run and dump out the
! model data.
!
!-----------------------------------------------------------------------
!
absmax = MAX(ABS( ABS(!
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx
absmax = MAX(absmax,ABS( END DO
END DO
END DO
DO k=1,nz-1
DO j=1,ny
DO i=1,nx-1
absmax = MAX(absmax,ABS( END DO
END DO
END DO
DO k=1,nz
DO j=1,ny-1
DO i=1,nx-1
absmax = MAX(absmax,ABS( END DO
END DO
END DO
!
!-----------------------------------------------------------------------
!
! Set an upper limit on maximum velocity component, above which
! the integeration is regarded as unstable.
!
!-----------------------------------------------------------------------
!
vellmt = 150.0
IF( absmax > vellmt ) THEN
WRITE(6,'(/1x,a,f5.1,a,/1x,a,i6,/1x,a)') &
'Maximum velocity component exceeded ',vellmt,' m/s,', &
'Time integration is unstable. Job aborted at the end of step', &
nstep,' Fields at this time dumped out.'
IF (mp_opt > 0) THEN
CALL arpsstop
("arpsstop called from CHKSTAB for MP version",1)
END IF
CALL set_acct
(output_acct)
CALL abortdmp
(mptr,nx,ny,nz,nstyps, &
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke, &
ubar,vbar,ptbar,pbar,rhobar,qvbar,kmh,kmv, &
x,y,z,zp,hterain,mapfct, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
tem1,tem2,tem3, tem4)
CALL arpsstop
("arpsstop called from CHKSTAB after abortdmp",1)
END IF
RETURN
END SUBROUTINE chkstab
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE MAXMIN ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE maxmin(mptr,nx,ny,nz,tlevel,rhobar, & 3,31
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
x,y,z,zp,mapfct, &
tsfc,tsoil,wetsfc,wetdp,wetcanp, &
tem1,tem2,tem3)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Calculate the maximum and minimum of the time dependent fields and
! write them into a file named runname(1:lfnkey).maxmin.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
!
! 6/06/92 (M. Xue)
! Added full documentation.
!
! 4/10/93 (K. Droegemeier and MX)
! Added max.&min. calcualtions of reflectivity, vorticity and max.
! low-level winds.
!
! 12/6/95 (J. Zong amd M. Xue)
! Call subroutine REFLEC to calculate reflectivity (in dBz) rather
! than use an explicit expression to ease modifications to reflectivity
! formula (e.g., including contributions of snow and graupel/hail to
! reflectivity). While doing so, the reflectivity in dBz must be
! converted to Z in calculating VIL.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! mptr Grid identifier.
! 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
!
! tlevel The time level at which the data are printed.
!
! rhobar Base state density (kg/m**3)
! u x component of velocity (m/s)
! v y component of velocity (m/s)
! w Vertical component of Cartesian velocity (m/s)
! wcont Contravariant vertical velocity (m/s)
! ptprt Perturbation potential temperature (K)
! pprt Perturbation pressure (Pascal)
! qv Water vapor specific humidity (kg/kg)
! qc Cloud water mixing ratio (kg/kg)
! qr Rainwater mixing ratio (kg/kg)
! qi Cloud ice mixing ratio (kg/kg)
! qs Snow mixing ratio (kg/kg)
! qh Hail mixing ratio (kg/kg)
! tke Turbulent Kinetic Energy ((m/s)**2)
!
! 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)
! mapfct Map factors at scalar, u and v points
!
! tsfc Temperature at ground (K) (in top 1 cm layer)
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! wetsfc Surface soil moisture in the top 1 cm layer
! wetdp Deep soil moisture in the deep 1 m layer
! wetcanp Canopy water amount
!
! OUTPUT:
!
! None.
!
! WORK ARRAYS:
!
! tem1 Radar reflectivity factor (dBz)
! tem2 Vertical vorticity (per second)
! tem3 Vertically-Integrated Liquid (kg/m**2)
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: mptr ! Grid identifier.
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions.
INTEGER :: tlevel ! Time level at which data are processed.
INCLUDE 'timelvls.inc'
REAL :: rhobar(nx,ny,nz) ! Base state density (kg/m**3)
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 :: wcont (nx,ny,nz) ! Contravariant vertical 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 :: kmh (nx,ny,nz) ! Horizontal turb. mixing coef. for
! momentum. ( m**2/s )
REAL :: kmv (nx,ny,nz) ! Vertical turb. mixing coef. for
! momentum. ( m**2/s )
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 :: mapfct(nx,ny,8) ! Map factors at scalar, u and v points
REAL :: tsfc (nx,ny) ! Ground sfc. temperature (K)
REAL :: tsoil (nx,ny) ! Deep soil temperature (K)
REAL :: wetsfc(nx,ny) ! Surface soil moisture
REAL :: wetdp (nx,ny) ! Deep soil moisture
REAL :: wetcanp(nx,ny) ! Canopy water amount
REAL :: tem1 (nx,ny,nz) ! Radar reflectivity factor (dBz)
REAL :: tem2 (nx,ny,nz) ! Vertical vorticity (per second)
REAL :: tem3 (nx,ny,nz) ! Vertically-integrated liquid (kg/m**2)
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid & map parameters.
INCLUDE 'mp.inc' ! Message passing parameters.
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=128 ) :: maxfn ! Name of max./min. file
INTEGER :: lmaxfn
INTEGER :: i,j,k
INTEGER :: istat
INTEGER :: imax,jmax,kmax,imin,jmin,kmin, klevel
REAL :: umax,vmax,wmax,ptmax,pmax,qvmax,qcmax,qrmax,qimax,qsmax,qhmax
REAL :: tkemin,tkemax
REAL :: amin, amax
REAL :: umin,vmin,wmin,ptmin,pmin,qvmin,qcmin,qrmin,qimin,qsmin,qhmin
REAL :: zrefmax,refmax,refmin
REAL :: udtdxmax,udtdxmin,vdtdymax,vdtdymin,wdtdzmax,wdtdzmin
REAL :: uvtem,utem,vtem,ucnmax,vcnmax,wcnmax,uvcnmax
integer iumax, jumax, kumax
integer ivmax, jvmax, kvmax
integer iwmax, jwmax, kwmax
REAL :: uvmax, uvmaxdr, uvmin, eps, pi
REAL :: weight,wreflk,frsvth
REAL :: zlevel, pastim, denwater,vtr
REAL :: acumrain ! Accumulated surface rain fall
! in entire domain (mm)
REAL :: vorlx,vorln,vorux,vorun
! Lower and upper level vorticity max/min.
REAL :: vil ! Vertical integrated max reflectivity
! averaged over 5 grid points
REAL :: gumove,gvmove
INTEGER :: ncalls(mgrdmax), nchmax1(mgrdmax)
SAVE acumrain,pastim
SAVE ncalls,nchmax1
DATA pastim,acumrain /0.0,0.0/
DATA ncalls /mgrdmax*0/
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!-----------------------------------------------------------------------
!
! Find the first scalar level whose height is equal to or higher than
! a given value zlevel. We assume that all grid points on a given
! level have the same height.
!
!-----------------------------------------------------------------------
zlevel = 2000.0
DO k=2,nz-1
IF( 0.5*( zp(1,1,k)+zp(1,1,k+1) ) >= zlevel ) EXIT
END DO
!65 CONTINUE
klevel = MIN(nz-1,MAX(2, k-1))
!
!-----------------------------------------------------------------------
! Compute Courant numbers for monitoring time integration stability
!-----------------------------------------------------------------------
!
IF (myproc == 0 ) WRITE(6,*) ' '
!-----------------------------------------------------------------------
! Max Courant number in x direction
!-----------------------------------------------------------------------
DO k=2,nz-2
DO j=2,ny-2
DO i=2,nx-1
tem3(i,j,k) = dtbig*ABS( END DO
END DO
END DO
CALL a3dmax
(tem3,1,nx,2,nx-1,1,ny,2,ny-2,1,nz,2,nz-2, &
udtdxmax,udtdxmin, iumax,jumax,kumax, imin,jmin,kmin)
ucnmax = udtdxmax
IF (myproc == 0) &
WRITE(6,'((1x,a,f10.4,3(a,i3),a,f10.3))') &
'ucourant =',udtdxmax,' at i=',iumax,', j=',jumax,', k=',kumax, &
', u=',u(iumax,jumax,kumax,2)
!-----------------------------------------------------------------------
! Max Courant number in y direction
!-----------------------------------------------------------------------
DO k=2,nz-2
DO j=2,ny-1
DO i=2,nx-2
tem3(i,j,k) = dtbig*ABS( END DO
END DO
END DO
CALL a3dmax
(tem3,1,nx,2,nx-2,1,ny,2,ny-1,1,nz,2,nz-2 , &
vdtdymax,vdtdymin, ivmax,jvmax,kvmax, imin,jmin,kmin)
vcnmax = vdtdymax
IF (myproc == 0) &
WRITE(6,'((1x,a,f10.4,3(a,i3),a,f10.3))') &
'vcourant =',vdtdymax,' at i=',ivmax,', j=',jvmax,', k=',kvmax, &
', v=',v(ivmax,jvmax,kvmax,2)
!-----------------------------------------------------------------------
! Max Courant number in z direction for each layer
!-----------------------------------------------------------------------
DO k=2,nz-1
DO j=2,ny-2
DO i=2,nx-2
tem3(i,j,k) = dtbig*ABS(wcont(i,j,k))/dz
END DO
END DO
END DO
CALL a3dmax
(tem3,1,nx,2,nx-2,1,ny,2,ny-2,1,nz,2,nz-1, &
wdtdzmax,wdtdzmin, iwmax,jwmax,kwmax, imin,jmin,kmin)
wcnmax = wdtdzmax
IF (myproc == 0) &
WRITE(6,'((1x,a,f10.4,3(a,i3),2(a,f10.3)))') &
'wcourant =',wdtdzmax,' at i=',iwmax,', j=',jwmax,', k=',kwmax, &
', wcont=',wcont(iwmax,jwmax,kwmax),', w=',w(iwmax,jwmax,kwmax,2)
!-----------------------------------------------------------------------
! Max Courant number in horizontal direction for each layer
!-----------------------------------------------------------------------
DO k=2,nz-2
DO j=2,ny-2
DO i=2,nx-2
utem = 0.5*(u(i,j,k,2)+u(i+1,j,k,2))
vtem = 0.5*(v(i,j,k,2)+v(i,j+1,k,2))
uvtem = sqrt(utem*utem+vtem*vtem)
tem3(i,j,k) = dtbig*utem*vtem/(dx*max(1.0,uvtem))*mapfct(i,j,1)
END DO
END DO
END DO
CALL a3dmax
(tem3,1,nx,2,nx-2,1,ny,2,ny-2,1,nz,2,nz-2, &
uvcnmax,wdtdzmin, iwmax,jwmax,kwmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'((1x,a,f10.4,3(a,i3),a,f10.4))') &
'uvcourant=',wdtdzmax,' at i=',iwmax,', j=',jwmax,', k=',kwmax, &
', mapfct=',mapfct(iwmax,jwmax,1)
!-----------------------------------------------------------------------
! Domain maximum Courant number in all three directions
!-----------------------------------------------------------------------
!
! IF (myproc == 0) &
! WRITE(6,'(4(a,f10.4))') 'ucnmax =', ucnmax, ', vcnmax =', vcnmax, ', &
! wcnmax =', wcnmax,', uvcnmax=',uvcnmax
!
!-----------------------------------------------------------------------
!
! Compute the radar reflectivity factor following Kessler (1969).
! Here, arg=Z (mm**6/m**3), and dBz = 10log10 (arg).
!
!-----------------------------------------------------------------------
!
CALL reflec
(nx,ny,nz, rhobar, qr(1,1,1,tlevel), qs(1,1,1,tlevel), &
qh(1,1,1,tlevel), tem1)
!
!-----------------------------------------------------------------------
!
! Compute the verticallly-integrated liquid water using the
! formula given by Stewart (1991) - NOAA Tech Memo NWR SR-136,
! National Weather Service, 20 pp.
!
! VIL is obtained by averaging over a 3 x 3 km square centered on
! the domain-maximum reflectivity. It is computed only where the
! reflectivity is non-zero.
!
!-----------------------------------------------------------------------
!
! First, find the domain-maximum reflectivity factor
!
!-----------------------------------------------------------------------
CALL a3dmax
(tem1,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1, &
refmax,refmin, imax,jmax,kmax, imin,jmin,kmin)
IF (mp_opt == 0) THEN
zrefmax=MAX(0.0,(zp(imax,jmax,kmax)+zp(imax,jmax,kmax+1))*0.5)
END IF
IF (myproc == 0) &
WRITE(6,'((1x,a,g25.12,3(a,i3)))') &
'refmax=',refmax,' at i=',imax,', j=',jmax,', k=',kmax
!
!-----------------------------------------------------------------------
!
! Compute a horizontally-averaged reflectivity centered on the max,
! and sum vertically. wreflk = weighted reflectivity at level k.
!
! First, we recompute the "arg" function in mm**6/m**3. VIL does
! not use reflectivity in dBz, but rather "arg", or Z. At this
! point, tem1 is overwritten and no longer contains 10log10 (Z).
!
!-----------------------------------------------------------------------
!
! CALL reflec(nx,ny,nz, rhobar, qr(1,1,1,tlevel), qs(1,1,1,tlevel),
! : qh(1,1,1,tlevel), tem1)
DO k = 1,nz-1
DO j = 1,ny-1
DO i = 1,nx-1
tem1(i,j,k) = 10.0**( 0.1*tem1(i,j,k) )
END DO
END DO
END DO
frsvth = 4./7.
weight = 1./9.
vil = 0.0
imax = MIN( nx-2,MAX(2,imax) )
jmax = MIN( ny-2,MAX(2,jmax) )
kmax = MIN( nz-2,MAX(2,kmax) )
DO k = 2,nz-2
wreflk = weight*(tem1(imax,jmax,k) &
+tem1(imax+1,jmax,k)+tem1(imax-1,jmax,k) &
+tem1(imax,jmax+1,k)+tem1(imax,jmax-1,k) &
+tem1(imax+1,jmax+1,k)+tem1(imax-1,jmax+1,k) &
+tem1(imax+1,jmax-1,k)+tem1(imax-1,jmax-1,k))
vil = vil+dz*3.44E-6* wreflk**frsvth
END DO
!-----------------------------------------------------------------------
!
! Compute the surface accumulated precipitation. The depth of water
! accumulated per timestep is given by:
!
! depth (m) = terminal velocity * qr * dt * (rhobar/denwater)
!
! This equation is derived by temporally integrating the vertical
! flux of rain through the lowest model level. The total is given
! for the entire computational domain.
!
!-----------------------------------------------------------------------
denwater = 1000.0 ! Density of liquid water.
DO j=1,ny-1
DO i=1,nx-1
vtr = 36.34 * &
(0.001*rhobar(i,j,2)*MAX(0.0,qr(i,j,2,tlevel)))**0.1364 * &
SQRT(rho0/rhobar(i,j,2))
acumrain = acumrain + vtr*qr(i,j,2,tlevel)* &
(curtim-pastim)*rhobar(i,j,2)/denwater * 1000.0
END DO
END DO
!
!-----------------------------------------------------------------------
!
! Compute the vertical vorticity, which is defined at the corner
! point of grid box.
!
!-----------------------------------------------------------------------
DO k=2,nz-1
DO j=2,ny-1
DO i=2,nx-1
tem2(i,j,k)= &
(v(i,j,k,tlevel)-v(i-1,j,k,tlevel))/dx- &
(u(i,j,k,tlevel)-u(i,j-1,k,tlevel))/dy
END DO
END DO
END DO
DO k=2,nz-1
DO j=2,ny-1
tem2( 1,j,k)=tem2( 2,j,k)
tem2(nx,j,k)=tem2(nx-1,j,k)
END DO
END DO
DO k=2,nz-1
DO i=1,nx
tem2(i, 1,k)=tem2(i, 2,k)
tem2(i,ny,k)=tem2(i,ny-1,k)
END DO
END DO
DO j=1,ny
DO i=1,nx
tem2(i,j, 1)=tem2(i,j, 2)
tem2(i,j,nz)=tem2(i,j,nz-1)
END DO
END DO
!-----------------------------------------------------------------------
!
! Pull out the domain-maximum vertical vorticity below z = zlevel.
! vrbx = max (x) vorticity at or below z = zlevel.
!
!-----------------------------------------------------------------------
!
CALL a3dmax
(tem2,1,nx,2,nx-1,1,ny,2,ny-1,1,nz,2,klevel, &
vorlx,vorln,imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'((1x,a,g25.12,3(a,i3)))') &
'vorlx=',vorlx,' at i=',imax,', j=',jmax,', k=',kmax
!-----------------------------------------------------------------------
!
! Pull out the domain-maximum vertical vorticity above z = zlevel.
! vrbx = max (x) vorticity at or above z = zlevel.
!
!-----------------------------------------------------------------------
CALL a3dmax
(tem2,1,nx,2,nx-1,1,ny,2,ny-1,1,nz,klevel+1,nz-2, &
vorux,vorun,imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'((1x,a,g25.12,3(a,i3)))') &
'vorux=',vorux,' at i=',imax,', j=',jmax,', k=',kmax
!
!-----------------------------------------------------------------------
!
! The maximum ground-relative surface winds below z = zlevel.
!
!-----------------------------------------------------------------------
!
IF ( grdtrns == 0 ) THEN
gumove = 0.0
gvmove = 0.0
ELSE
gumove = umove
gvmove = vmove
END IF
eps = 1.0E-30
pi = ATAN( 1.0 )*4
DO k = 1,nz-1
DO j = 1,ny-1
DO i = 1,nx-1
tem1(i,j,k)= SQRT( &
((u(i,j,k,tlevel)+u(i+1,j,k,tlevel))*0.5+gumove)**2+ &
((v(i,j,k,tlevel)+v(i,j+1,k,tlevel))*0.5+gvmove)**2)
END DO
END DO
END DO
CALL a3dmax
(tem1,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,2,klevel, &
uvmax,uvmin, imax,jmax,kmax, imin,jmin,kmin)
!
!-----------------------------------------------------------------------
!
! The direction of the maximum ground-relative surface wind
!
!-----------------------------------------------------------------------
!
IF (mp_opt == 0) THEN
uvmaxdr = 180.0/pi * ASIN( MAX(-1.0, MIN(1.0, &
((u(imax,jmax,kmax,tlevel)+u(imax+1,jmax,kmax,tlevel)) &
*0.5+gumove)/(tem1(imax,jmax,kmax)+eps))) )
IF( ((v(imax,jmax,kmax,tlevel)+v(imax,jmax+1,kmax,tlevel)) &
*0.5+gvmove) < 0.0 ) uvmaxdr = uvmaxdr + 360.0
ELSE
uvmaxdr = 0
END IF
!
!-----------------------------------------------------------------------
!
! Make the wind direction conform to the weather report standard
! i.e. zero degree for the northerly wind.
!
!-----------------------------------------------------------------------
!
uvmaxdr = 90.0 - uvmaxdr
IF( uvmaxdr < 0.0) uvmaxdr = 360.0 + uvmaxdr
IF (myproc == 0) THEN
WRITE(6,'((1x,a,g25.12,3(a,i3)))') &
'uvmax=',uvmax,' at i=',imax,', j=',jmax,', k=',kmax
WRITE(6,'((1x,a,g25.12,3(a,i3)))') &
'uvmaxdr=',uvmaxdr,' at i=',imax,', j=',jmax,', k=',kmax
END IF
CALL a3dmax
( 1,ny,1,ny-1,1,nz,1,nz-1, &
umax,umin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'umin =',umin,' at i=',imin,', j=',jmin,', k=',kmin, &
'umax =',umax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
( 1,ny,1,ny,1,nz,1,nz-1, &
vmax,vmin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'vmin =',vmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'vmax =',vmax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
( 1,ny,1,ny-1,1,nz,1,nz, &
wmax,wmin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'wmin =',wmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'wmax =',wmax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
(ptprt(1,1,1,tlevel),1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
ptmax,ptmin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'ptmin=',ptmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'ptmax=',ptmax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
(pprt(1,1,1,tlevel),1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
pmax,pmin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.10,3(a,i3)))') &
'pmin =',pmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'pmax =',pmax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
(qv(1,1,1,tlevel),1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
qvmax,qvmin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'qvmin=',qvmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'qvmax=',qvmax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
(qc(1,1,1,tlevel),1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
qcmax,qcmin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'qcmin=',qcmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'qcmax=',qcmax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
(qr(1,1,1,tlevel),1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
qrmax,qrmin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'qrmin=',qrmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'qrmax=',qrmax,' at i=',imax,', j=',jmax,', k=',kmax
IF( iceout == 1) THEN
CALL a3dmax
(qi(1,1,1,tlevel),1,nx,1,nx-1,1,ny, &
1,ny-1,1,nz,1,nz-1, &
qimax,qimin, imax,jmax,kmax, &
imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'qimin=',qimin,' at i=',imin,', j=',jmin,', k=',kmin, &
'qimax=',qimax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
(qs(1,1,1,tlevel),1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
qsmax,qsmin, imax,jmax,kmax, &
imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'qsmin=',qsmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'qsmax=',qsmax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
(qh(1,1,1,tlevel),1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
qhmax,qhmin, imax,jmax,kmax, &
imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'qhmin=',qhmin,' at i=',imin,', j=',jmin,', k=',kmin, &
'qhmax=',qhmax,' at i=',imax,', j=',jmax,', k=',kmax
ELSE
qimin=0.0
qimax=0.0
qsmin=0.0
qsmax=0.0
qhmin=0.0
qhmax=0.0
END IF
IF( tkeout == 1 ) THEN
CALL a3dmax
(tke(1,1,1,tlevel),1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
tkemax,tkemin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'tkemin=',tkemin,' at i=',imin,', j=',jmin,', k=',kmin, &
'tkemax=',tkemax,' at i=',imax,', j=',jmax,', k=',kmax
END IF
IF( trbout == 1 ) THEN
CALL a3dmax
(kmh,1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'kmhmin=',amin,' at i=',imin,', j=',jmin,', k=',kmin, &
'kmhmax=',amax,' at i=',imax,', j=',jmax,', k=',kmax
CALL a3dmax
(kmv,1,nx,1,nx-1, &
1,ny,1,ny-1,1,nz,1,nz-1, &
amax,amin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,3(a,i3)))') &
'kmvmin=',amin,' at i=',imin,', j=',jmin,', k=',kmin, &
'kmvmax=',amax,' at i=',imax,', j=',jmax,', k=',kmax
END IF
IF( sfcphy /= 0 ) THEN
CALL a3dmax
(tsfc,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,2(a,i3)))') &
'tsfcmin=',amin,' at i=',imin,', j=',jmin, &
'tsfcmax=',amax,' at i=',imax,', j=',jmax
CALL a3dmax
(tsoil,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,2(a,i3)))') &
'tsoilmin=',amin,' at i=',imin,', j=',jmin, &
'tsoilmax=',amax,' at i=',imax,', j=',jmax
CALL a3dmax
(wetsfc,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,2(a,i3)))') &
'wetsmin=',amin,' at i=',imin,', j=',jmin, &
'wetsmax=',amax,' at i=',imax,', j=',jmax
CALL a3dmax
(wetdp,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,2(a,i3)))') &
'wetdmin=',amin,' at i=',imin,', j=',jmin, &
'wetdcmax=',amax,' at i=',imax,', j=',jmax
CALL a3dmax
(wetcanp,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1, &
amax,amin, imax,jmax,kmax, imin,jmin,kmin)
IF (myproc == 0) &
WRITE(6,'(2(1x,a,g25.12,2(a,i3)))') &
'wetcmin=',amin,' at i=',imin,', j=',jmin, &
'wetcmax=',amax,' at i=',imax,', j=',jmax
END IF
IF (myproc == 0) WRITE(6,*) ' '
IF (myproc == 0) THEN
IF ( ncalls(mptr) == 0 ) THEN
maxfn = runname(1:lfnkey)//'.maxmin'
lmaxfn = 7 + lfnkey
IF(nestgrd == 1) THEN
WRITE(maxfn((lmaxfn+1):(lmaxfn+4)),'(a,i2.2)')'.g',mptr
lmaxfn = lmaxfn + 4
END IF
WRITE(6,'(1x,a,a,a/,1x,a)') &
'Check to see if file ',maxfn(1:lmaxfn),' already exists.', &
'If so, append a version number to the filename.'
CALL fnversn
( maxfn, lmaxfn )
CALL getunit
( nchmax1(mptr) )
OPEN(nchmax1(mptr),FORM='formatted',STATUS='new', &
FILE=maxfn(1:lmaxfn),IOSTAT=istat)
IF( istat /= 0) THEN
WRITE(6,'(/a,i2,/a/)') &
' Error occured when opening file '//maxfn(1:lmaxfn)// &
' using FORTRAN unit ',nchmax1(mptr), &
' Program stopped in MAXMIN.'
CALL arpsstop
("arpsstop called from MAXMIN with istat problem",1)
END IF
WRITE(nchmax1(mptr),'(a)') ''''//runname//''''
WRITE(nchmax1(mptr),'(t2,a,t15,a,t25,a,t35,a,t45, &
& a,t55,a,t65,a,t75,a, &
& t85,a,t95,a,t105,a,t115,a,t125,a,t135, &
& a,t145,a,t155,a,t165, &
& a,t175,a,t185,a,t195,a,t204,a)') &
'''TIME','UMIN','UMAX','VMIN','VMAX', &
'WMIN','WMAX','PTMIN', &
'PTMAX','PMIN','PMAX','QVMAX','QCMAX', &
'QRMAX','QIMAX', &
'QSMAX','QHMAX','UVMAX','VORLX','VORUX', &
'REFMAX'//''''
ncalls(mptr) = 1
END IF
WRITE(nchmax1(mptr),'(f9.2,7f10.5, f10.5,2f10.2,6f10.5,4f10.5)') &
curtim,umin,umax,vmin,vmax,wmin,wmax,ptmin,ptmax, &
pmin,pmax,qvmax*1000,qcmax*1000.0,qrmax*1000.0, &
qimax*1000,qsmax*1000.0,qhmax*1000.0, &
uvmax,vorlx,vorux,refmax
END IF
RETURN
END SUBROUTINE maxmin
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE BASPRT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE basprt(nx,ny,nz, & 1,19
ubar,vbar,ptbar,pbar,rhobar,qvbar, zp,hterain)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Print out base state fields in FORTRAN unit nch=6.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 11/13/91.
!
! MODIFICATION HISTORY:
!
! 6/06/92 (M. Xue)
! Added full documentation.
!
!-----------------------------------------------------------------------
!
! 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
!
! 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)
! rhobar Base state density (kg/m**3)
! qvbar Base state water vapor specific humidity (kg/kg)
! zp Vertical coordinate of grid points in physical space (m)
! hterain Terrain height (m)
!
! OUTPUT:
!
! None.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions.
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 :: rhobar(nx,ny,nz) ! Base state air density (kg/m**3)
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
REAL :: zp (nx,ny,nz) ! The physical height coordinate defined at
! w-point of staggered grid.
REAL :: hterain(nx,ny) ! The height of the terrain.
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,mode
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
WRITE(6,'(/1x,a/)') 'Print out of base state fields.'
!
!-----------------------------------------------------------------------
!
! Formatted printing of x-y slice at the model mid-level
!
!-----------------------------------------------------------------------
!
mode = 1
k = (nz-1)/2+1
CALL wrigar
(ubar,1,nx,1,ny,1,nz,1,nx,1,ny-1,k,k, &
'ubar xy',0.0, mode )
CALL wrigar
(vbar,1,nx,1,ny,1,nz,1,nx-1,1,ny,k,k, &
'vbar xy',0.0, mode )
CALL wrigar
(ptbar,1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'ptbar xy',0.00, mode )
CALL wrigar
(pbar,1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'pbar xy',0.0, mode )
CALL wrigar
(rhobar,1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'rhobar xy',0.00, mode )
CALL wrigar
(qvbar,1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'qvbar xy',0.0, mode )
!
!-----------------------------------------------------------------------
!
! Formatted printing of x-z slice through the center of the model
! domain.
!
!-----------------------------------------------------------------------
!
j = (ny-1)/2+1
CALL wrigar
(zp,1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz,'zp x-z',0.0, 2 )
CALL wrigar
(ubar,1,nx,1,ny,1,nz,1,nx,j,j,1,nz-1 &
,'ubar x-z',0.0, 2 )
CALL wrigar
(vbar,1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'vbar x-z',0.0, 2 )
CALL wrigar
(ptbar,1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'ptbar x-z',0.00, 2 )
CALL wrigar
(pbar,1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'pbar x-z',0.0, 2 )
CALL wrigar
(rhobar,1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'rhobar x-z',0.0, 2 )
CALL wrigar
(qvbar,1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'qvbar x-z',0.0, 2 )
!
!-----------------------------------------------------------------------
!
! Formatted printing of y-z slice through the model domain center
!
!-----------------------------------------------------------------------
!
i = (nx-1)/2+1
CALL wrigar
(ubar,1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'ubar y-z',0.0, 3 )
CALL wrigar
(vbar,1,nx,1,ny,1,nz,i,i,1,ny ,1,nz-1 &
,'vbar y-z',0.0, 3 )
CALL wrigar
(ptbar,1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'ptbar y-z',0.00, 3 )
CALL wrigar
(pbar,1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'pbar y-z',0.0, 3 )
CALL wrigar
(rhobar,1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'rhobar y-z',0.0, 3 )
CALL wrigar
(qvbar,1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'qvbar y-z',0.0, 3 )
RETURN
END SUBROUTINE basprt
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE FMTPRT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE fmtprt(nx,ny,nz, tlevel, & 3,39
u, v, w, ptprt, pprt, qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
x,y,z,zp,hterain, j1,j2,j3, tem1)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Produce formatted print out of array tables in FORTRAN unit nch=6.
! By default, the x-y, x-z and y-z slices through the domain center
! are printed.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 5/29/91.
!
! MODIFICATION HISTORY:
!
! 6/06/92 (M. Xue)
! Added full documentation.
!
!-----------------------------------------------------------------------
!
! 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
!
! tlevel The time level at which the data are printed.
!
! u x component of velocity (m/s)
! v y component of velocity (m/s)
! w Vertical component of Cartesian velocity (m/s)
! ptprt Perturbation potential temperature (K)
! pprt Perturbation pressure (Pascal)
! qv Water vapor specific humidity (kg/kg)
! qc Cloud water mixing ratio (kg/kg)
! qr Rainwater mixing ratio (kg/kg)
! qi Cloud ice mixing ratio (kg/kg)
! qs Snow mixing ratio (kg/kg)
! qh Hail mixing ratio (kg/kg)
! tke Turbulent Kinetic Energy ((m/s)**2)
!
! kmh Horizontal turb. mixing coef. for momentum ( m**2/s )
! kmv Vertical turb. mixing coef. for momentum ( m**2/s )
!
! 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)
!
! j1 Coordinate transformation Jacobian -d(zp)/dx
! j2 Coordinate transformation Jacobian -d(zp)/dy
! j3 Coordinate transformation Jacobian d(zp)/dz
!
!
! OUTPUT:
!
! None.
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'timelvls.inc'
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
INTEGER :: tlevel ! Time level at which data are printed.
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 :: kmh (nx,ny,nz) ! Horizontal turb. mixing coef. for
! momentum. ( m**2/s )
REAL :: kmv (nx,ny,nz) ! Vertical turb. mixing coef. for
! momentum. ( m**2/s )
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.
REAL :: j1 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as - d( zp )/d( x )
REAL :: j2 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as - d( zp )/d( y )
REAL :: j3 (nx,ny,nz) ! Coordinate transformation Jacobian defined
! as d( zp )/d( z )
REAL :: tem1 (nx,ny,nz) ! Temporary work array.
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i, j, k
! integer iplot(3)
INTEGER :: mode ! Control the printing of an individual slice
! mode = 1: print x-y slice
! = 2: print x-z slice
! = 3: print y-z slice
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!
!-----------------------------------------------------------------------
!
! The following parameters are passed into this subroutine through
! a common block in globcst.inc. They control the output of
! water and ice variables.
!
! mstout =0 or 1. If mstout=0, water variables are not printed.
! iceout =0 or 1. If iceout=0, printing of qi, qs and qh is skipped.
! basout =0 or 1. If basout=0, base state variables are not dumped.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Formatted printing of x-y slice at the model mid-levels.
!
!-----------------------------------------------------------------------
!
! return
mode = 1
k = (nz-1)/2+1
CALL wrigar
( 'u x-y',0.0, mode )
CALL wrigar
( 'v x-y',0.0, mode )
CALL wrigar
( 'w x-y',0.0, mode )
CALL wrigar
(ptprt(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'ptprt xy',0.00, mode )
CALL wrigar
(pprt(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'pprt xy',0.0, mode )
IF( mstout == 1) THEN
CALL wrigar
(qv(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'qv x-y',0.0, mode )
CALL wrigar
(qc(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'qc x-y',0.0, mode )
CALL wrigar
(qr(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'qr x-y',0.0, mode )
IF( iceout == 1) THEN
CALL wrigar
(qi(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'qi x-y',0.0, mode )
CALL wrigar
(qs(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'qs x-y',0.0, mode )
CALL wrigar
(qh(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k, &
'qh x-y',0.0, mode )
END IF
END IF
CALL wrigar
(kmh,1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k,'kmhx-y',.0,mode)
CALL wrigar
(kmv,1,nx,1,ny,1,nz,1,nx-1,1,ny-1,k,k,'kmvx-y',.0,mode)
!
!-----------------------------------------------------------------------
!
! Formatted printing of x-z slice through the model domain center.
!
!-----------------------------------------------------------------------
!
mode = 2 ! Print x-z slices
!
j = (ny-1)/2+1
CALL wrigar
( ,'u x-z',0.0, mode )
CALL wrigar
( ,'v x-z',0.0, mode )
CALL wrigar
( ,'w x-z',0.0, mode )
CALL wrigar
(ptprt(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'ptprt x-z',0.00, mode )
CALL wrigar
(pprt(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'pprt x-z',0.0, mode )
IF( mstout == 1) THEN
CALL wrigar
(qv(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'qv x-z',0.0, mode )
CALL wrigar
(qc(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'qc x-z',0.0, mode )
CALL wrigar
(qr(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'qr x-z',0.0, mode )
IF( iceout == 1) THEN
CALL wrigar
(qi(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'qi x-z',0.0, mode )
CALL wrigar
(qs(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'qs x-z',0.0, mode )
CALL wrigar
(qh(1,1,1,tlevel),1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'qh x-z',0.0, mode )
END IF
END IF
CALL wrigar
(kmh ,1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'kmhx-z',0.0, mode )
CALL wrigar
(kmv ,1,nx,1,ny,1,nz,1,nx-1,j,j,1,nz-1 &
,'kmvx-z',0.0, mode )
!
!
!-----------------------------------------------------------------------
!
! Formatted printing of y-z slice through the model domain center.
!
!-----------------------------------------------------------------------
!
mode = 3 ! Print y-z slices
i = (nx-1)/2+1
CALL wrigar
( ,'u y-z',0.0, mode )
CALL wrigar
( ,'v y-z',0.0, mode )
CALL wrigar
( ,'w y-z',0.0, mode )
CALL wrigar
(ptprt(1,1,1,tlevel),1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'ptprt y-z',0.00, mode )
CALL wrigar
(pprt(1,1,1,tlevel),1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'pprt y-z',0.0, mode )
IF( mstout == 1) THEN
CALL wrigar
(qv(1,1,1,tlevel),1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'qv y-z',0.0, mode )
CALL wrigar
(qc(1,1,1,tlevel),1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'qc y-z',0.0, mode )
CALL wrigar
(qr(1,1,1,tlevel),1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'qr y-z',0.0, mode )
IF( iceout == 1) THEN
CALL wrigar
(qi(1,1,1,tlevel),1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'qi y-z',0.0, mode )
CALL wrigar
(qs(1,1,1,tlevel),1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'qs y-z',0.0, mode )
CALL wrigar
(qh(1,1,1,tlevel),1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'qh y-z',0.0, mode )
END IF
END IF
CALL wrigar
(kmh ,1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'kmhy-z',0.0, mode )
CALL wrigar
(kmv ,1,nx,1,ny,1,nz,i,i,1,ny-1,1,nz-1 &
,'kmvy-z',0.0, mode )
RETURN
END SUBROUTINE fmtprt
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE ABORTDMP ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE abortdmp(mptr,nx,ny,nz,nstyps, & 2,5
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke, &
ubar,vbar,ptbar,pbar,rhobar,qvbar,kmh,kmv, &
x,y,z,zp,hterain,mapfct, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
tem1,tem2,tem3, tem4)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Write out a number of files including the history and
! restart dumps when the model aborts.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 8/8/95.
!
! MODIFICATION HISTORY:
!
! Based on CHKSTAB.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! mptr Grid identifier.
! 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 (m/s)
! v y component of velocity (m/s)
! w Vertical component of Cartesian velocity (m/s)
! wcont Contravariant vertical velocity (m/s)
! ptprt Perturbation potential temperature (K)
! pprt Perturbation pressure (Pascal)
! qv Water vapor specific humidity (kg/kg)
! qc Cloud water mixing ratio (kg/kg)
! qr Rainwater mixing ratio (kg/kg)
! qi Cloud ice mixing ratio (kg/kg)
! qs Snow mixing ratio (kg/kg)
! qh Hail mixing ratio (kg/kg)
! tke Turbulent Kinetic Energy ((m/s)**2)
!
! 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)
! rhobar Base state density (kg/m**3)
! qvbar Base state water vapor specific humidity (kg/kg)
!
! kmh Horizontal turb. mixing coef. for momentum ( m**2/s )
! kmv Vertical turb. mixing coef. for momentum ( m**2/s )
!
! 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
! stypfrct Soil type fraction
! vegtyp Vegetation type
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Temperature at ground (K) (in top 1 cm layer)
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! wetsfc Surface soil moisture in the top 1 cm layer
! wetdp Deep soil moisture in the deep 1 m layer
! wetcanp Canopy water amount
!
! raing Grid supersaturation rain
! rainc Cumulus convective rain
! prcrate Precipitation rates
!
! radfrc Radiation forcing (K/s)
! radsw Solar radiation reaching the surface
! rnflx Net radiation flux absorbed by surface
!
! usflx Surface flux of u-momentum (kg/(m*s**2))
! vsflx Surface flux of v-momentum (kg/(m*s**2))
! ptsflx Surface heat flux (K*kg/(m**2 * s ))
! qvsflx Surface moisture flux of (kg/(m**2 * s))
!
! OUTPUT:
!
! None.
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: mptr ! Grid identifier.
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 :: wcont (nx,ny,nz) ! Contravariant vertical 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
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 :: rhobar(nx,ny,nz) ! Base state air density (kg/m**3)
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
REAL :: kmh (nx,ny,nz) ! Horizontal turb. mixing coef. for
! momentum. ( m**2/s )
REAL :: kmv (nx,ny,nz) ! Vertical turb. mixing coef. for
! momentum. ( m**2/s )
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.
REAL :: mapfct(nx,ny,8) ! Map factors at scalar, u and v points
REAL :: j1 (nx,ny,nz) ! Coordinate transformation Jacobian defined as
! - d( zp )/d( x )
REAL :: j2 (nx,ny,nz) ! Coordinate transformation Jacobian defined as
! - d( zp )/d( y )
REAL :: j3 (nx,ny,nz) ! Coordinate transformation Jacobian defined as
! d( zp )/d( z )
INTEGER :: nstyps ! Number of soil types
INTEGER :: soiltyp (nx,ny,nstyps) ! Soil type
REAL :: stypfrct(nx,ny,nstyps) ! Soil type fraction
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) ! Ground sfc. temperature (K)
REAL :: tsoil (nx,ny,0:nstyps) ! Deep soil temperature (K)
REAL :: wetsfc (nx,ny,0:nstyps) ! Surface soil moisture
REAL :: wetdp (nx,ny,0:nstyps) ! Deep soil moisture
REAL :: wetcanp(nx,ny,0:nstyps) ! Canopy water amount
REAL :: snowdpth(nx,ny) ! Snow depth (m)
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 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 :: radfrc(nx,ny,nz) ! Radiation forcing (K/s)
REAL :: radsw (nx,ny) ! Solar radiation reaching the surface
REAL :: rnflx (nx,ny) ! Net radiation flux absorbed by surface
REAL :: usflx (nx,ny) ! Surface flux of u-momentum (kg/(m*s**2))
REAL :: vsflx (nx,ny) ! Surface flux of v-momentum (kg/(m*s**2))
REAL :: ptsflx(nx,ny) ! Surface heat flux (K*kg/(m*s**2))
REAL :: qvsflx(nx,ny) ! Surface moisture flux (kg/(m**2*s))
REAL :: tem1 (nx,ny,nz) ! Temporary work array
REAL :: tem2 (nx,ny,nz) ! Temporary work array
REAL :: tem3 (nx,ny,nz) ! Temporary work array
REAL :: tem4 (nx,ny,nz) ! Temporary work array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: ierr
INTEGER :: tlevel, tim
INTEGER :: grdbas,i
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'phycst.inc'
INCLUDE 'globcst.inc'
INCLUDE 'mp.inc' ! Message passing parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
mgrid = mptr
tlevel = tpresent
!
!-----------------------------------------------------------------------
!
! Max./min. statistics calculation and printing of initial fields
!
!-----------------------------------------------------------------------
!
CALL maxmin
(mptr,nx,ny,nz,tlevel,rhobar, &
u,v,w,wcont,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
x,y,z,zp,mapfct, &
tsfc(1,1,0),tsoil(1,1,0),wetsfc(1,1,0), &
wetdp(1,1,0),wetcanp(1,1,0), &
tem1,tem2,tem3)
!
!-----------------------------------------------------------------------
!
! Formatted printing of time dependent variables
!
!-----------------------------------------------------------------------
!
CALL fmtprt
(nx,ny,nz, tlevel, &
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
x,y,z,zp,hterain, j1,j2,j3, tem1)
!
!-----------------------------------------------------------------------
!
! Check to see if any history data dump is to be produced.
!
!-----------------------------------------------------------------------
!
IF( hdmpfmt == 0 ) THEN
IF (myproc == 0) WRITE(6,'(1x,a)') &
'History data dump option was 0, no data is dumped.'
GO TO 800
END IF
!
!-----------------------------------------------------------------------
!
! Find a unique name hdmpfn(1:ldmpf) for the history dump data set
! at time 'curtim'.
!
! For the savi3D data dump case, the file name is specified only
! once in INITOUT.
!
!-----------------------------------------------------------------------
!
!
IF( hdmpfmt /= 5 .AND. hdmpfmt /= 9 ) THEN
CALL gtdmpfn
(runname(1:lfnkey),dirname, &
ldirnam,curtim,hdmpfmt, &
mgrid,nestgrd, hdmpfn, ldmpf)
END IF
IF (myproc == 0) WRITE(6,'(1x,a,a)') &
'History data dump in file ',hdmpfn(1:ldmpf)
grdbas = 0 ! No base state or grid array is dumped.
tim = tpresent
! blocking inserted for ordering i/o for message passing
DO i=0,nprocs-1,max_fopen
IF(myproc >= i.AND.myproc <= i+max_fopen-1)THEN
CALL dtadump
(nx,ny,nz,nstyps, &
hdmpfmt,nchdmp,hdmpfn(1:ldmpf), &
grdbas,filcmprs, &
u(1,1,1,tim),v(1,1,1,tim), &
w(1,1,1,tim),ptprt(1,1,1,tim), &
pprt(1,1,1,tim),qv(1,1,1,tim), &
qc(1,1,1,tim),qr(1,1,1,tim), &
qi(1,1,1,tim),qs(1,1,1,tim), &
qh(1,1,1,tim),tke(1,1,1,tim),kmh,kmv, &
ubar,vbar,tem1,ptbar,pbar,rhobar,qvbar, &
x,y,z,zp,hterain, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
tem2,tem3,tem4)
END IF
IF (mp_opt > 0) CALL mpbarrier
END DO
!
!-----------------------------------------------------------------------
!
! If ARPS is dumping Savi3D GRAF format history files,
! call grafclose to close the GRAF file before program stop.
!
!-----------------------------------------------------------------------
!
IF (hdmpfmt == 5) THEN
CALL mclosescheme (gridid, ierr)
CALL mclosedataset (dsindex, ierr)
END IF
IF (hdmpfmt == 9) CLOSE (nchdmp)
800 CONTINUE
RETURN
END SUBROUTINE abortdmp
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE WRTXYSLIC ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE wrtxyslic(nx,ny,nz, u,v,w,ptprt,pprt,qv,qc,qr, & 5,6
ubar,vbar,ptbar,pbar,qvbar, x,y,zp, zslice, &
fnkey,time,mgrid,nestgrd, &
zs,tem1)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Write out 2-D x-y slice of a 3-D array for given k or height z.
!
! We assume the grid levels are flat, and base state variables
! are constant on each level.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
! 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 a given time level (m/s)
! v y component of velocity at a given time level (m/s)
! w Vertical component of Cartesian velocity at a given
! time level (m/s)
! ptprt Perturbation potential temperature at a given time
! level (K)
! pprt Perturbation pressure at a given time level (Pascal)
! qv Water vapor specific humidity (kg/kg)
! qc Cloud water mixing ratio at a given time level (kg/kg)
! qr Rainwater mixing ratio at a given time level (kg/kg)
!
! ubar Base state x-velocity component (m/s)
! vbar Base state y-velocity component (m/s)
! ptbar Base state potential temperature (K)
! pbar Base state pressure (Pascal)
! 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)
! zp z coordinate of grid points in physcial space (m)
!
! zslice The height of the x-y slice to be written out.
!
! fnkey File name key
! time time of data in seconds
!
! mgrid The grid number
! nestgrd Flag for nested grid run.
!
! WORK ARRAYS:
!
! zs Temporary work array, zp averaged to scalar point.
! tem1 Temporary work array.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz
REAL :: u (nx,ny,nz) ! Total u-velocity (m/s)
REAL :: v (nx,ny,nz) ! Total v-velocity (m/s)
REAL :: w (nx,ny,nz) ! Total w-velocity (m/s)
REAL :: ptprt (nx,ny,nz) ! Perturbation potential temperature (K)
REAL :: pprt (nx,ny,nz) ! Perturbation pressure (Pascal)
REAL :: qv (nx,ny,nz) ! Water vapor specific humidity (kg/kg)
REAL :: qc (nx,ny,nz) ! Cloud water mixing ratio (kg/kg)
REAL :: qr (nx,ny,nz) ! Rain water mixing ratio (kg/kg)
REAL :: ubar (nx,ny,nz) ! Base state x-velocity (m/s)
REAL :: vbar (nx,ny,nz) ! Base state y-velocity (m/s)
REAL :: ptbar (nx,ny,nz) ! Base state potential temperature (K)
REAL :: pbar (nx,ny,nz) ! Base state pressure (Pascal)
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 :: zp (nx,ny,nz) ! The physical height coordinate defined at
! w-point of the staggered grid.
REAL :: zslice ! The height of the x-y slice to be written out.
CHARACTER (LEN=128) :: timsnd
CHARACTER (LEN=* ) :: fnkey ! The height of the x-y slice to be written out
INTEGER :: tmstrln ! length of timsnd
REAL :: time ! time of data in seconds
INTEGER :: kslice
INTEGER :: mgrid ! The grid number
INTEGER :: nestgrd ! Flag for nested grid run.
REAL :: zs (nx,ny,nz) ! Temporary work array, zp averaged
! to scalar point
REAL :: tem1(nx,ny)
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
INTEGER :: i,j,k,length,nunit,istat,ierr
CHARACTER (LEN=128) :: xysfn
CHARACTER (LEN=35) :: gridnum
DATA gridnum /'123456789abcdefghijklmnopqrstuvwxyz'/
CHARACTER (LEN=128) :: savename
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
INCLUDE 'mp.inc' ! Message passing parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
CALL cvttsnd
( time, timsnd, tmstrln )
xysfn = fnkey
length = LEN( fnkey )
WRITE(xysfn(length+1:length+7),'(a,i5.5)') '.z',nint(zslice)
xysfn(length+8:length+8+tmstrln) = 't'//timsnd(1:tmstrln)
length = length + 8 + tmstrln
IF( nestgrd == 1 ) THEN
WRITE(xysfn(length+1:length+3),'(''.G'',A)') &
gridnum(mgrid:mgrid)
length = length + 3
END IF
CALL getunit
( nunit )
IF (mp_opt > 0) THEN
savename(1:128) = xysfn(1:128)
WRITE(xysfn, '(a,a,2i2.2)') trim(savename),'_',loc_x,loc_y
length = length + 5
END IF
CALL fnversn
(xysfn, length )
CALL asnctl
('NEWLOCAL', 1, ierr)
CALL asnfile
(xysfn(1:length), '-F f77 -N ieee', ierr)
OPEN(UNIT=nunit,FILE=trim(xysfn(1:length)),STATUS='unknown', &
FORM='unformatted',IOSTAT= istat )
IF (mp_opt > 0) THEN
xysfn(1:128) = savename(1:128)
length = length - 5
END IF
CALL avgz
(zp, 0 , &
nx,ny,nz, 1,nx, 1,ny, 1,nz-1, zs)
kslice = nz-2
DO k=2,nz-1
IF( zs(1,1,k) > zslice ) THEN
kslice = k-1
EXIT
END IF
END DO
! 6 CONTINUE
k = kslice
WRITE(nunit) fnkey
WRITE(nunit) nx,ny
WRITE(nunit) time
WRITE(nunit) zslice
WRITE(nunit) 'x '
WRITE(nunit) x
WRITE(nunit) 'y '
WRITE(nunit) y
DO j=1,ny
DO i=1,nx
tem1(i,j)=u(i,j,k)+ (u(i,j,k+1)-u(i,j,k))* &
(zslice-zs(i,j,k))/(zs(i,j,k+1)-zs(i,j,k))
END DO
END DO
WRITE(nunit) 'u '
WRITE(nunit) ubar(1,1,k)+ (ubar(1,1,k+1)-ubar(1,1,k))* &
(zslice-zs(1,1,k))/(zs(1,1,k+1)-zs(1,1,k))
WRITE(nunit) tem1
DO j=1,ny
DO i=1,nx
tem1(i,j)=v(i,j,k)+ (v(i,j,k+1)-v(i,j,k))* &
(zslice-zs(i,j,k))/(zs(i,j,k+1)-zs(i,j,k))
END DO
END DO
WRITE(nunit) 'v '
WRITE(nunit) vbar(1,1,k)+ (vbar(1,1,k+1)-vbar(1,1,k))* &
(zslice-zs(1,1,k))/(zs(1,1,k+1)-zs(1,1,k))
WRITE(nunit) tem1
DO j=1,ny
DO i=1,nx
tem1(i,j)=0.5*(w(i,j,k)+w(i,j,k+1))+ &
0.5*(w(i,j,k+2)-w(i,j,k))* &
(zslice-zs(i,j,k))/(zs(i,j,k+1)-zs(i,j,k))
END DO
END DO
WRITE(nunit) 'w '
WRITE(nunit) 0.0
WRITE(nunit) tem1
DO j=1,ny
DO i=1,nx
tem1(i,j)=ptprt(i,j,k)+ (ptprt(i,j,k+1)-ptprt(i,j,k))* &
(zslice-zs(i,j,k))/(zs(i,j,k+1)-zs(i,j,k))
END DO
END DO
WRITE(nunit) 'ptprt'
WRITE(nunit) ptbar(1,1,k)+ (ptbar(1,1,k+1)-ptbar(1,1,k))* &
(zslice-zs(1,1,k))/(zs(1,1,k+1)-zs(1,1,k))
WRITE(nunit) tem1
DO j=1,ny
DO i=1,nx
tem1(i,j)=pprt(i,j,k)+ (pprt(i,j,k+1)-pprt(i,j,k))* &
(zslice-zs(i,j,k))/(zs(i,j,k+1)-zs(i,j,k))
END DO
END DO
WRITE(nunit) 'pprt '
WRITE(nunit) pbar(1,1,k)+ (pbar(1,1,k+1)-pbar(1,1,k))* &
(zslice-zs(1,1,k))/(zs(1,1,k+1)-zs(1,1,k))
WRITE(nunit) tem1
DO j=1,ny
DO i=1,nx
tem1(i,j)= qv(i,j,k)+ (qv(i,j,k+1)-qv(i,j,k))* &
(zslice-zs(i,j,k))/(zs(i,j,k+1)-zs(i,j,k))
END DO
END DO
WRITE(nunit) 'qv '
WRITE(nunit) qvbar(1,1,k)+ (qvbar(1,1,k+1)-qvbar(1,1,k))* &
(zslice-zs(1,1,k))/(zs(1,1,k+1)-zs(1,1,k))
WRITE(nunit) tem1
DO j=1,ny
DO i=1,nx
tem1(i,j)= qc(i,j,k)+ (qc(i,j,k+1)-qc(i,j,k))* &
(zslice-zs(i,j,k))/(zs(i,j,k+1)-zs(i,j,k))
END DO
END DO
WRITE(nunit) 'qc '
WRITE(nunit) 0.0
WRITE(nunit) tem1
DO j=1,ny
DO i=1,nx
tem1(i,j)= qr(i,j,k)+ (qr(i,j,k+1)-qr(i,j,k))* &
(zslice-zs(i,j,k))/(zs(i,j,k+1)-zs(i,j,k))
END DO
END DO
WRITE(nunit) 'qr '
WRITE(nunit) 0.0
WRITE(nunit) tem1
CLOSE(UNIT = nunit )
CALL retunit( nunit )
RETURN
END SUBROUTINE wrtxyslic