!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE ASCREAD ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ascread(nx,ny,nz,nstyps,grdbas,inch,time,x,y,z,zp, & 2,2
uprt, vprt, wprt, ptprt, pprt, &
qvprt, qc, qr, qi, qs, qh, tke,kmh,kmv, &
ubar,vbar,wbar,ptbar,pbar,rhobar,qvbar, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
ireturn)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Read history data from channel nchanl in ASCII format.
! format.
!
! All data read in are located at the original staggered grid points.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Keith Brewster
! 6/02/92.
!
! MODIFICATION HISTORY:
!
! 7/14/92 (K. Brewster)
! Added runname, comment and version number reading
!
! 8/20/92 (M. Xue)
! Added data reading of computational z coordinate array z.
!
! 4/23/93 (M. Xue)
! New data format.
!
! 02/06/95 (Y. Liu)
! Added map projection parameters into the ASCII dumping
!
! 05/31/95 (Y. Liu)
! Changed the integer dumping format from 20I3 to 10I8.
!
! 12/09/1998 (Donghai Wang)
! Added the snow cover.
!
!-----------------------------------------------------------------------
!
! 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
!
! grdbas Data read flag.
! =1, only grid and base state arrays will be read
! =0, all arrays will be read based on data
! parameter setting.
! inch Channel number for ASCII reading.
! This channel must be opened for formatted reading
! by the calling routine.
!
! OUTPUT:
!
! time Time in seconds of data read from "filename"
!
! 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 z coordinate of grid points in physical space (m)
!
! uprt x component of perturbation velocity (m/s)
! vprt y component of perturbation velocity (m/s)
! wprt Vertical component of perturbation velocity in
! Cartesian coordinates (m/s).
! ptprt Perturbation potential temperature (K)
! pprt Perturbation pressure (Pascal)
!
! qvprt Perturbation water vapor mixing ratio (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 )
!
! ubar Base state x velocity component (m/s)
! vbar Base state y velocity component (m/s)
! wbar Base state z velocity component (m/s)
! ptbar Base state potential temperature (K)
! pbar Base state pressure (Pascal)
! rhobar Base state air density (kg/m**3)
! qvbar Base state water vapor mixing ratio (kg/kg)
!
! soiltyp Soil type
! stypfrct Soil type fraction
! vegtyp Vegetation type
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Temperature at surface (K)
! tsoil Deep soil temperature (K)
! wetsfc Surface soil moisture
! wetdp Deep soil moisture
! 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))
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
INTEGER :: grdbas ! Data read flag.
INTEGER :: inch ! Channel number for binary reading
REAL :: time ! Time in seconds of data read
! from "filename"
REAL :: x (nx) ! x-coord. of the physical and compu
! -tational grid. Defined at u-point(m).
REAL :: y (ny) ! y-coord. of the physical and compu
! -tational grid. Defined at v-point(m).
REAL :: z (nz) ! z-coord. of the computational grid.
! Defined at w-point on the staggered
! grid(m).
REAL :: zp (nx,ny,nz) ! Physical height coordinate defined at
! w-point of the staggered grid(m).
REAL :: uprt (nx,ny,nz) ! Perturbation u-velocity (m/s)
REAL :: vprt (nx,ny,nz) ! Perturbation v-velocity (m/s)
REAL :: wprt (nx,ny,nz) ! Perturbation w-velocity (m/s)
REAL :: ptprt (nx,ny,nz) ! Perturbation potential temperature (K)
REAL :: pprt (nx,ny,nz) ! Perturbation pressure (Pascal)
REAL :: qvprt (nx,ny,nz) ! Water vapor mixing ratio (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 :: qi (nx,ny,nz) ! Cloud ice mixing ratio (kg/kg)
REAL :: qs (nx,ny,nz) ! Snow mixing ratio (kg/kg)
REAL :: qh (nx,ny,nz) ! Hail mixing ratio (kg/kg)
REAL :: tke (nx,ny,nz) ! 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 :: ubar (nx,ny,nz) ! Base state u-velocity (m/s)
REAL :: vbar (nx,ny,nz) ! Base state v-velocity (m/s)
REAL :: wbar (nx,ny,nz) ! Base state w-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 mixing ratio
INTEGER :: nstyps ! Number of soil type
INTEGER :: soiltyp(nx,ny,nstyps) ! Soil type
REAL :: stypfrct(nx,ny,nstyps) ! Soil type
INTEGER :: vegtyp (nx,ny) ! Vegetation type
REAL :: lai (nx,ny) ! Leaf Area Index
REAL :: roufns (nx,ny) ! Surface roughness
REAL :: veg (nx,ny) ! Vegetation fraction
REAL :: tsfc (nx,ny,0:nstyps) ! Temperature at surface (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))
INTEGER :: ireturn ! Return status indicator
!
!-----------------------------------------------------------------------
!
! Parameters describing routine that wrote the gridded data
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=40) :: fmtver0,fmtver1,fmtverin
PARAMETER (fmtver0='004.10 ASCII Formatted Data')
PARAMETER (fmtver1='004.10 ASCII Formatted Data')
CHARACTER (LEN=10) :: tmunit
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: lchanl
PARAMETER (lchanl=6) ! Channel number for formatted printing.
INTEGER :: i,j,k,is
CHARACTER (LEN=12) :: label
INTEGER :: nxin,nyin,nzin
INTEGER :: bgrdin,bbasin,bvarin,bicein,btkein,btrbin,idummy
REAL :: rdummy
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'indtflg.inc'
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid & map parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!
!-----------------------------------------------------------------------
!
! Read header info
!
!-----------------------------------------------------------------------
!
READ(inch,'(1x,a40)',ERR=110,END=120) fmtverin
IF( fmtverin /= fmtver0 .AND. fmtverin /= fmtver1 ) THEN
WRITE(6,'(/1x,a/1x,2a/1x,2a/1x,2a/1x,a)') &
'Data format incompatible with the data reader.', &
'Format of data is ',fmtverin,' Format of reader is ',fmtver1, &
'compitable to ',fmtver0, '. Job stopped.'
CALL arpsstop
('arpsstop called from asciiread',1)
END IF
READ(inch,'(1x,a80)',ERR=110,END=120) runname
WRITE(6,'(//'' THE NAME OF THIS RUN IS: '',A//)') runname
READ(inch,'(1x,i4)',ERR=110,END=120) nocmnt
IF( nocmnt > 0 ) THEN
DO i=1,nocmnt
READ(inch,'(1x,a80)',ERR=110,END=120) cmnt(i)
END DO
END IF
IF( nocmnt > 0 ) THEN
DO i=1,nocmnt
WRITE(6,'(1x,a)') cmnt(i)
END DO
END IF
!
READ(inch,'(1x,e16.8,1x,a10)',ERR=110,END=120) time,tmunit
!
!-----------------------------------------------------------------------
!
! Get dimensions of data in ASCII file and check against
! the dimensions passed to ASCREAD
!
!-----------------------------------------------------------------------
!
READ(inch,'(1x, 3i12)',ERR=110,END=120) nxin,nyin,nzin
IF( nxin /= nx .OR. nyin /= ny .OR. nzin /= nz ) THEN
WRITE(6,'(1x,a)') &
' Dimensions in ASCREAD inconsistent with data.'
WRITE(6,'(1x,a,3I15)') ' Read were: ', nxin, nyin, nzin
WRITE(6,'(1x,a)') &
' Program aborted in ASCREAD.'
CALL arpsstop
('arpsstop called from asciiread while reading nx..',1)
END IF
!
!-----------------------------------------------------------------------
!
! Read in flags for different data groups
!
!-----------------------------------------------------------------------
!
IF( grdbas == 1 ) THEN ! Read grid and base state arrays
WRITE(lchanl,'(1x,a,f8.1,a,f8.3,a/)') &
'To read grid and base state data at time ', time, &
' secs = ',(time/60.),' mins.'
READ(inch,'(1x,10i8)',ERR=110,END=120) &
bgrdin,bbasin,bvarin,mstin,bicein, &
btrbin,idummy,idummy,landin,totin, &
btkein,idummy,idummy,mapproj,month, &
day,year,hour,minute,second
ELSE ! Normal data reading
WRITE(lchanl,'(1x,a,f8.1,a,f8.3,a/)')'To read data for time:', &
time,' secs = ',(time/60.),' mins.'
READ(inch,'(1x,10i8)',ERR=110,END=120) &
grdin,basin,varin,mstin,icein, &
trbin,sfcin,rainin,landin,totin, &
tkein,idummy,idummy,mapproj,month, &
day,year,hour,minute,second
END IF
READ(inch,910,ERR=110,END=120) &
umove,vmove,xgrdorg,ygrdorg,trulat1, &
trulat2,trulon,sclfct,rdummy,rdummy, &
rdummy,rdummy,rdummy,rdummy,rdummy, &
tstop,thisdmp,latitud,ctrlat,ctrlon
IF ( totin /= 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Read in additional parameters for ARPS history dump 4.0 or later
! version.
!
!-----------------------------------------------------------------------
!
READ(inch,'(1x,10i8)',ERR=110,END=120) &
nstyp, prcin, radin, flxin,snowcin, &
snowin,idummy,idummy,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
IF ( nstyp < 1 ) THEN
nstyp = 1
END IF
READ(inch,910,ERR=110,END=120) &
rdummy,rdummy,rdummy,rdummy,rdummy, &
rdummy,rdummy,rdummy,rdummy,rdummy, &
rdummy,rdummy,rdummy,rdummy,rdummy, &
rdummy,rdummy,rdummy,rdummy,rdummy
END IF
!
!-----------------------------------------------------------------------
!
! Read in x,y and z at grid cell centers (scalar points).
!
!----------------------------------------------------------------------
!
IF( grdin == 1 .OR. grdbas == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) x
WRITE(lchanl,920) label,' x.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) y
WRITE(lchanl,920) label,' y.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) z
WRITE(lchanl,920) label,' z.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) zp
WRITE(lchanl,920) label,' zp.'
END IF
!
!-----------------------------------------------------------------------
!
! Read in base state fields
!
!----------------------------------------------------------------------
!
IF( basin == 1 .OR. grdbas == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) ubar
WRITE(lchanl,920) label,' ubar.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) vbar
WRITE(lchanl,920) label,' vbar.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) wbar
WRITE(lchanl,920) label,' wbar.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) ptbar
WRITE(lchanl,920) label,' ptbar.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) pbar
WRITE(lchanl,920) label,' pbar.'
IF( mstin == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qvbar
WRITE(lchanl,920) label,' qvbar.'
END IF
IF (landin == 1) THEN
IF (nstyp <= 1) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,911,ERR=110,END=120) &
((soiltyp(i,j,1),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' soiltyp.'
ELSE
DO is=1,nstyp
READ(inch,900,ERR=110,END=120) label
READ(inch,911,ERR=110,END=120) &
((soiltyp(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' soiltyp.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((stypfrct(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,'stypfrct.'
END DO
END IF
READ(inch,900,ERR=110,END=120) label
READ(inch,911,ERR=110,END=120) vegtyp
WRITE(lchanl,920) label,' vegtyp.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) lai
WRITE(lchanl,920) label,' lai.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) roufns
WRITE(lchanl,920) label,' roufns.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) veg
WRITE(lchanl,920) label,' veg.'
END IF
END IF
IF( grdbas == 1 ) GO TO 930
IF( varin == 1 ) THEN
IF ( totin == 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Read in uprt, vprt, and wprt
!
!----------------------------------------------------------------------
!
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) uprt
WRITE(lchanl,920) label,' uprt.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) vprt
WRITE(lchanl,920) label,' vprt.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) wprt
WRITE(lchanl,920) label,' wprt.'
!
!-----------------------------------------------------------------------
!
! Read in scalars
!
!----------------------------------------------------------------------
!
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) ptprt
WRITE(lchanl,920) label,' ptprt.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) pprt
WRITE(lchanl,920) label,' pprt.'
ELSE
!
!-----------------------------------------------------------------------
!
! Read in total u, v, and w, and then derive uprt, vprt, and wprt
!
!-----------------------------------------------------------------------
!
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) uprt
WRITE(lchanl,920) label,' u.'
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx
uprt(i,j,k) = uprt(i,j,k) - ubar(i,j,k)
END DO
END DO
END DO
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) vprt
WRITE(lchanl,920) label,' v.'
DO k=1,nz-1
DO j=1,ny
DO i=1,nx-1
vprt(i,j,k) = vprt(i,j,k) - vbar(i,j,k)
END DO
END DO
END DO
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) wprt
WRITE(lchanl,920) label,' w.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) ptprt
WRITE(lchanl,920) label,' pt.'
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
ptprt(i,j,k) = ptprt(i,j,k) - ptbar(i,j,k)
END DO
END DO
END DO
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) pprt
WRITE(lchanl,920) label,' p.'
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
pprt(i,j,k) = pprt(i,j,k) - pbar(i,j,k)
END DO
END DO
END DO
END IF
END IF
IF( mstin == 1 ) THEN
IF ( totin == 0 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qvprt
WRITE(lchanl,920) label,' qvprt.'
ELSE
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qvprt
WRITE(lchanl,920) label,' qv.'
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
qvprt(i,j,k) = qvprt(i,j,k) - qvbar(i,j,k)
END DO
END DO
END DO
END IF
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qc
WRITE(lchanl,920) label,' qc.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qr
WRITE(lchanl,920) label,' qr.'
IF( rainin == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) raing
WRITE(lchanl,920) label,' raing.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) rainc
WRITE(lchanl,920) label,' rainc.'
END IF
IF( prcin == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((prcrate(i,j,1),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' prcrate1.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((prcrate(i,j,2),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' prcrate2.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((prcrate(i,j,3),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' prcrate3.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((prcrate(i,j,4),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' prcrate4.'
END IF
IF( icein == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qi
WRITE(lchanl,920) label,' qi.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qs
WRITE(lchanl,920) label,' qs.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qh
WRITE(lchanl,920) label,' qh.'
END IF
END IF
IF( tkein == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) tke
WRITE(lchanl,920) label,' tke.'
END IF
IF( trbin == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) kmh
WRITE(lchanl,920) label,' kmh.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) kmv
WRITE(lchanl,920) label,' kmv.'
END IF
IF( sfcin == 1) THEN
IF (nstyp <= 1) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((tsfc(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' tsfc.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((tsoil(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' tsoil.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((wetsfc(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' wetsfc.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((wetdp(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' wetdp.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((wetcanp(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' wetcanp.'
ELSE
DO is=0,nstyp
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((tsfc(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' tsfc.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((tsoil(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' tsoil.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((wetsfc(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' wetsfc.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((wetdp(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' wetdp.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((wetcanp(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' wetcanp.'
END DO
END IF
IF(snowcin == 1) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120)
WRITE(lchanl,920) label,' snowcvr -- discarding.'
END IF
IF(snowin == 1) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) &
((snowdpth(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,920) label,' snowdpth.'
END IF
END IF
IF( radin == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) radfrc
WRITE(lchanl,920) label,' radfrc.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) radsw
WRITE(lchanl,920) label,' radsw.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) rnflx
WRITE(lchanl,920) label,' rnflx.'
END IF
IF( flxin == 1 ) THEN
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) usflx
WRITE(lchanl,920) label,' usflx.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) vsflx
WRITE(lchanl,920) label,' vsflx.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) ptsflx
WRITE(lchanl,920) label,' ptsflx.'
READ(inch,900,ERR=110,END=120) label
READ(inch,910,ERR=110,END=120) qvsflx
WRITE(lchanl,920) label,' qvsflx.'
END IF
!
!-----------------------------------------------------------------------
!
! Friendly exit message
!
!----------------------------------------------------------------------
!
930 CONTINUE
WRITE(6,'(/a,F8.1,a/)') &
' Data at time=', time/60,' (min) were successfully read.'
ireturn = 0
RETURN
900 FORMAT(1X,a)
910 FORMAT(1X,8E16.10)
911 FORMAT(1X,10I8)
920 FORMAT(1X,'Field ',a12,' was read into array ',a)
!
!-----------------------------------------------------------------------
!
! Error during read
!
!----------------------------------------------------------------------
!
110 CONTINUE
WRITE(6,'(/a/)') ' Error reading data in ASCREAD'
ireturn=1
RETURN
!
!-----------------------------------------------------------------------
!
! End-of-file during read
!
!----------------------------------------------------------------------
!
120 CONTINUE
WRITE(6,'(/a/)') ' End of file reached in ASCREAD'
ireturn=2
RETURN
END SUBROUTINE ascread
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE ASCDUMP ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ascdump(nx,ny,nz,nstyps,nchanl, grdbas, & 1,54
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
ubar,vbar,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, &
tem1)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Write history data into channel nchanl in ASCII format.
!
! All data read in are located at the original staggered grid points.
!
! Note: coordinate fields are dumped as 3 dimensional fields which
! have been converted from meters to kilometers. This is for the
! convenience of the plotting applications.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 5/31/92.
!
! MODIFICATION HISTORY:
!
! 7/13/92 (K. Brewster)
! Added runname, comment and version number writing
!
! 8/23/92 (M. Xue)
! Modify to perform the dumping of both base and t-dependent arrays
! and added control on grid staggering.
!
! 4/4/93 (M. Xue)
! Modified, so that data on the original staggered grid are written
! out. Averaging to the volume center is no longer done.
!
! 9/1/94 (Y. Lu)
! Cleaned up documentation.
!
! 02/06/95 (Y. Liu)
! Added map projection parameters into the ASCII dumping
!
! 05/31/95 (Y. Liu)
! Changed the integer dumping format from 20I4 to 10I8.
!
! 12/09/1998 (Donghai Wang)
! Added the snow cover.
!
!-----------------------------------------------------------------------
!
! 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
!
! nchanl FORTRAN I/O channel number for history data output.
! grdbas Flag indicating if this is a call for the data dump
! of grid and base state arrays only. If so, grdbas=1.
!
! 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 at a given time level (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)
! qi Cloud ice mixing ratio at a given time level (kg/kg)
! qs Snow mixing ratio at a given time level (kg/kg)
! qh Hail mixing ratio at a given time level (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 )
!
! 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)
!
! 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
!
! soiltyp Soil type
! 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 ARRAY:
!
! tem1 Temporary work array.
!
!-----------------------------------------------------------------------
!
! The following parameters are passed into this subroutine through
! a common block in globcst.inc, and they determine which
! variables are output.
!
! grdout =0 or 1. If grdout=0, grid variables are not dumped.
! basout =0 or 1. If basout=0, base state variables are not dumped.
! varout =0 or 1. If varout=0, model perturbation variables are not dumped.
! mstout =0 or 1. If mstout=0, water variables are not dumped.
! rainout=0 or 1. If rainout=0, rain variables are not dumped.
! prcout =0 or 1. If prcout=0, precipitation rates are not dumped.
! iceout =0 or 1. If iceout=0, qi, qs and qh are not dumped.
! trbout =0 or 1. If trbout=0, turbulence parameter km is not dumped.
! tkeout =0 or 1. If tkeout=0, tke is not dumped.
! radout =0 or 1. If radout=0, radiation arrays are not dumped.
! flxout =0 or 1. If flxout=0, surface fluxes are not dumped.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
INTEGER :: nchanl ! FORTRAN I/O channel number for output
INTEGER :: grdbas ! If this is a grid/base state array dump
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 :: qi (nx,ny,nz) ! Cloud ice mixing ratio (kg/kg)
REAL :: qs (nx,ny,nz) ! Snow mixing ratio (kg/kg)
REAL :: qh (nx,ny,nz) ! Hail mixing ratio (kg/kg)
REAL :: tke (nx,ny,nz) ! 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 :: 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 :: 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 )
INTEGER :: nstyps ! Number of soil types
INTEGER :: soiltyp(nx,ny,nstyps) ! Soil type
REAL :: stypfrct(nx,ny,nstyps) ! Soil type
INTEGER :: vegtyp (nx,ny) ! Vegetation type
REAL :: lai (nx,ny) ! Leaf Area Index
REAL :: roufns (nx,ny) ! Surface roughness
REAL :: veg (nx,ny) ! Vegetation fraction
REAL :: tsfc (nx,ny,0:nstyps) ! Temperature at surface (K)
! (in top 1 cm layer)
REAL :: tsoil (nx,ny,0:nstyps) ! Deep soil temperature (K)
! (in deep 1 m layer)
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
!
!-----------------------------------------------------------------------
!
! Parameters describing this routine
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=40) :: fmtver
PARAMETER (fmtver='004.10 ASCII Formatted Data')
CHARACTER (LEN=10) :: tmunit
PARAMETER (tmunit='seconds ')
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,l, idummy,is
REAL :: rdummy
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid & map parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
WRITE(6,'(1x,a,f13.3/)') 'Writing history data at time=', curtim
WRITE(nchanl,'(1x,a)') fmtver
WRITE(nchanl,901) runname
WRITE(nchanl,'(1x,i4)') nocmnt
IF(nocmnt > 0) THEN
DO l=1,nocmnt
WRITE(nchanl,901) cmnt(l)
END DO
END IF
WRITE(nchanl,'(1x,e16.8,1x,a10)') curtim,tmunit
WRITE(nchanl,'(1x,3i12 )') nx,ny,nz
!
!-----------------------------------------------------------------------
!
! Write the flags for different data groups.
!
!-----------------------------------------------------------------------
!
idummy = 0
IF( grdbas == 1 ) THEN
WRITE(nchanl,'(1x,10i8)') &
1, 1, 0, mstout, 0, &
0, 0, 0, landout, totout, &
idummy, idummy, idummy, mapproj, month, &
day, year, hour, minute, second
ELSE
WRITE(nchanl,'(1x,10i8)') &
grdout, basout, varout, mstout, iceout, &
trbout, sfcout, rainout,landout,totout, &
tkeout, idummy, idummy, mapproj, month, &
day, year, hour, minute, second
END IF
rdummy = 0.0
WRITE(nchanl,900) &
umove, vmove, xgrdorg, ygrdorg, trulat1, &
trulat2, trulon, sclfct, rdummy, rdummy, &
rdummy, rdummy, rdummy, rdummy, rdummy, &
tstop, thisdmp, latitud, ctrlat, ctrlon
IF ( totout == 1 ) THEN
WRITE(nchanl,'(1x,10i8)') &
nstyp, prcout, radout, flxout, 0, & ! 0 for snowcvr
snowout,idummy, idummy, idummy, idummy, &
idummy, idummy, idummy, idummy, idummy, &
idummy, idummy, idummy, idummy, idummy
WRITE(nchanl,900) &
rdummy, rdummy, rdummy, rdummy, rdummy, &
rdummy, rdummy, rdummy, rdummy, rdummy, &
rdummy, rdummy, rdummy, rdummy, rdummy, &
rdummy, rdummy, rdummy, rdummy, rdummy
END IF
IF( grdout == 1 .OR. grdbas == 1 ) THEN
WRITE(nchanl,'(1x,a)') 'x coordinate'
WRITE(nchanl,900) x
WRITE(nchanl,'(1x,a)') 'y coordinate'
WRITE(nchanl,900) y
WRITE(nchanl,'(1x,a)') 'z coordinate'
WRITE(nchanl,900) z
CALL edgfill
(zp,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz)
WRITE(nchanl,'(1x,a)') 'zp coordinat'
WRITE(nchanl,900) zp
END IF
!
!-----------------------------------------------------------------------
!
! If basout=1, write out base state variables.
!
!-----------------------------------------------------------------------
!
IF( basout == 1 .OR. grdbas == 1 ) THEN
CALL edgfill
(ubar,1,nx,1,nx, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'ubar '
WRITE(nchanl,900) ubar
CALL edgfill
(vbar,1,nx,1,nx-1, 1,ny,1,ny, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'vbar '
WRITE(nchanl,900) vbar
DO k=1,nz
DO j=1,ny
DO i=1,nx
tem1(i,j,k) = 0.0
END DO
END DO
END DO
WRITE(nchanl,'(1x,a)') 'wbar '
WRITE(nchanl,900) tem1
CALL edgfill
(ptbar,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'ptbar '
WRITE(nchanl,900) ptbar
CALL edgfill
(pbar,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'pbar '
WRITE(nchanl,900) pbar
IF(mstout == 1) THEN
CALL edgfill
(qvbar,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'qvbar '
WRITE(nchanl,900) qvbar
END IF
IF(landout == 1) THEN
IF( nstyp <= 1 ) THEN
CALL iedgfill
(soiltyp(1,1,1),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'soiltyp '
WRITE(nchanl,902) ((soiltyp(i,j,1),i=1,nx),j=1,ny)
ELSE
DO is = 1,nstyp
CALL iedgfill
(soiltyp(1,1,is),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'soiltyp '
WRITE(nchanl,902) ((soiltyp(i,j,is),i=1,nx),j=1,ny)
CALL edgfill
(stypfrct(1,1,is),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'stypfrct '
WRITE(nchanl,900) ((stypfrct(i,j,is),i=1,nx),j=1,ny)
END DO
END IF
CALL iedgfill
(vegtyp ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'vegtyp '
WRITE(nchanl,902) vegtyp
CALL edgfill
(lai ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'lai '
WRITE(nchanl,900) lai
CALL edgfill
(roufns ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'roufns '
WRITE(nchanl,900) roufns
CALL edgfill
(veg ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'veg '
WRITE(nchanl,900) veg
END IF
END IF
IF ( grdbas == 1 ) RETURN
!
!-----------------------------------------------------------------------
!
! If varout = 1, Write out uprt, vprt, wprt, ptprt, pprt.
!
!-----------------------------------------------------------------------
!
IF( varout == 1 ) THEN
!
!-----------------------------------------------------------------------
!
! Write out u, v and w
!
!-----------------------------------------------------------------------
!
IF ( totout == 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Write out perturbations to history dump
!
!-----------------------------------------------------------------------
!
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx
tem1(i,j,k)=u(i,j,k)-ubar(i,j,k)
END DO
END DO
END DO
CALL edgfill
(tem1,1,nx,1,nx, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'uprt '
WRITE(nchanl,900) tem1
DO k=1,nz-1
DO i=1,nx-1
DO j=1,ny
tem1(i,j,k)=v(i,j,k)-vbar(i,j,k)
END DO
END DO
END DO
CALL edgfill
(tem1,1,nx,1,nx-1, 1,ny,1,ny, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'vprt '
WRITE(nchanl,900) tem1
CALL edgfill
(w,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz)
WRITE(nchanl,'(1x,a)') 'wprt '
WRITE(nchanl,900) w
!
!-----------------------------------------------------------------------
!
! Write out scalars
!
!-----------------------------------------------------------------------
!
CALL edgfill
(ptprt,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'ptprt '
WRITE(nchanl,900) ptprt
CALL edgfill
(pprt,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'pprt '
WRITE(nchanl,900) pprt
ELSE
!
!-----------------------------------------------------------------------
!
! Write out total values to history dump
!
!-----------------------------------------------------------------------
!
CALL edgfill
(u,1,nx,1,nx, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'u '
WRITE(nchanl,900) u
CALL edgfill
(v,1,nx,1,nx-1, 1,ny,1,ny, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'v '
WRITE(nchanl,900) v
CALL edgfill
(w,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz)
WRITE(nchanl,'(1x,a)') 'w '
WRITE(nchanl,900) w
!
!-----------------------------------------------------------------------
!
! Write out scalars
!
!-----------------------------------------------------------------------
!
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
tem1(i,j,k) = ptbar(i,j,k) + ptprt(i,j,k)
END DO
END DO
END DO
CALL edgfill
(tem1,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'pt '
WRITE(nchanl,900) tem1
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
tem1(i,j,k) = pbar(i,j,k) + pprt(i,j,k)
END DO
END DO
END DO
CALL edgfill
(tem1,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'p '
WRITE(nchanl,900) tem1
END IF
END IF
!
!-----------------------------------------------------------------------
!
! If mstout = 1, Write out moisture variables
!
!-----------------------------------------------------------------------
!
IF( mstout == 1 ) THEN
IF ( totout == 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Write out perturbations to history dump
!
!-----------------------------------------------------------------------
!
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
tem1(i,j,k) = qv(i,j,k)-qvbar(i,j,k)
END DO
END DO
END DO
CALL edgfill
(tem1,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'qvprt '
WRITE(nchanl,900) tem1
ELSE
!
!-----------------------------------------------------------------------
!
! Write out total values to history dump
!
!-----------------------------------------------------------------------
!
CALL edgfill
(qv,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'qv '
WRITE(nchanl,900) qv
END IF
CALL edgfill
(qc,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'qc '
WRITE(nchanl,900) qc
CALL edgfill
(qr,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'qr '
WRITE(nchanl,900) qr
IF( rainout == 1 ) THEN
CALL edgfill
(raing,1,nx,1,nx-1, 1,ny,1,ny-1,1,1,1,1)
WRITE(nchanl,'(1x,a)') 'raing '
WRITE(nchanl,900) raing
CALL edgfill
(rainc,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'rainc '
WRITE(nchanl,900) rainc
END IF ! rainout
IF( prcout == 1 ) THEN
CALL edgfill
(prcrate,1,nx,1,nx-1, 1,ny,1,ny-1,1,4,1,4)
WRITE(nchanl,'(1x,a)') 'prcrate1 '
WRITE(nchanl,900) ((prcrate(i,j,1),i=1,nx),j=1,ny)
WRITE(nchanl,'(1x,a)') 'prcrate2 '
WRITE(nchanl,900) ((prcrate(i,j,2),i=1,nx),j=1,ny)
WRITE(nchanl,'(1x,a)') 'prcrate3 '
WRITE(nchanl,900) ((prcrate(i,j,3),i=1,nx),j=1,ny)
WRITE(nchanl,'(1x,a)') 'prcrate4 '
WRITE(nchanl,900) ((prcrate(i,j,4),i=1,nx),j=1,ny)
END IF ! prcout
IF( iceout == 1 ) THEN
CALL edgfill
(qi,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'qi '
WRITE(nchanl,900) qi
CALL edgfill
(qs,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'qs '
WRITE(nchanl,900) qs
CALL edgfill
(qh,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'qh '
WRITE(nchanl,900) qh
END IF ! iceout
END IF ! mstout
IF( tkeout == 1 ) THEN
CALL edgfill
(tke,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'tke '
WRITE(nchanl,900) tke
END IF ! tkeout
IF( trbout == 1 ) THEN
CALL edgfill
(kmh,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'kmh '
WRITE(nchanl,900) kmh
CALL edgfill
(kmv,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'kmv '
WRITE(nchanl,900) kmv
END IF ! trbout
!
!-----------------------------------------------------------------------
!
! If sfcout = 1, write out the surface variables, tsfc, tsoil,
! wetsfc, wetdp, and wetcanp.
!
!-----------------------------------------------------------------------
!
IF ( sfcout == 1) THEN
IF ( nstyp <= 1 ) THEN
CALL edgfill
(tsfc(1,1,0),1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'tsfc '
WRITE(nchanl,900) ((tsfc(i,j,0),i=1,nx),j=1,ny)
CALL edgfill
(tsoil(1,1,0),1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'tsoil '
WRITE(nchanl,900) ((tsoil(i,j,0),i=1,nx),j=1,ny)
CALL edgfill
(wetsfc(1,1,0),1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'wetsfc '
WRITE(nchanl,900) ((wetsfc(i,j,0),i=1,nx),j=1,ny)
CALL edgfill
(wetdp(1,1,0),1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'wetdp '
WRITE(nchanl,900) ((wetdp(i,j,0),i=1,nx),j=1,ny)
CALL edgfill
(wetcanp(1,1,0),1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'wetcanp '
WRITE(nchanl,900) ((wetcanp(i,j,0),i=1,nx),j=1,ny)
ELSE
DO is=0,nstyp
CALL edgfill
(tsfc(1,1,is),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'tsfc '
WRITE(nchanl,900) ((tsfc(i,j,is),i=1,nx),j=1,ny)
CALL edgfill
(tsoil(1,1,is),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'tsoil '
WRITE(nchanl,900) ((tsoil(i,j,is),i=1,nx),j=1,ny)
CALL edgfill
(wetsfc(1,1,is),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'wetsfc '
WRITE(nchanl,900) ((wetsfc(i,j,is),i=1,nx),j=1,ny)
CALL edgfill
(wetdp(1,1,is),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'wetdp '
WRITE(nchanl,900) ((wetdp(i,j,is),i=1,nx),j=1,ny)
CALL edgfill
(wetcanp(1,1,is),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'wetcanp '
WRITE(nchanl,900) ((wetcanp(i,j,is),i=1,nx),j=1,ny)
END DO
END IF
IF (snowout == 1) THEN
CALL edgfill
(snowdpth,1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
WRITE(nchanl,'(1x,a)') 'snowdpth '
WRITE(nchanl,900) ((snowdpth(i,j),i=1,nx),j=1,ny)
END IF
END IF ! sfcout done
!
!-----------------------------------------------------------------------
!
! Write out radiation ararys to history dump
!
!-----------------------------------------------------------------------
!
IF( radout == 1 ) THEN
CALL edgfill
(radfrc,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl,'(1x,a)') 'radfrc '
WRITE(nchanl,900) radfrc
CALL edgfill
(radsw,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'radsw '
WRITE(nchanl,900) radsw
CALL edgfill
(rnflx,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'rnflx '
WRITE(nchanl,900) rnflx
END IF ! radout
!
!-----------------------------------------------------------------------
!
! Write out surface fluxes to history dump
!
!-----------------------------------------------------------------------
!
IF( flxout == 1 ) THEN
CALL edgfill
(usflx,1,nx,1,nx, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'usflx '
WRITE(nchanl,900) usflx
CALL edgfill
(vsflx,1,nx,1,nx-1, 1,ny,1,ny, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'vsflx '
WRITE(nchanl,900) vsflx
CALL edgfill
(ptsflx,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'ptsflx '
WRITE(nchanl,900) ptsflx
CALL edgfill
(qvsflx,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl,'(1x,a)') 'qvsflx '
WRITE(nchanl,900) qvsflx
END IF ! flxout
900 FORMAT(1X,8E16.10)
901 FORMAT(1X,a80)
902 FORMAT(1X,10I8)
RETURN
END SUBROUTINE ascdump