!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE BINREAD ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE binread(nx,ny,nz,nstyps,grdbas,inch,time,x,y,z,zp, & 2,4
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 in binary data set created by ARPS using history dump format
! No. 1.
! All data read in are located at the original staggered grid points
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 2/27/92.
!
! MODIFICATION HISTORY:
!
! 6/08/92
! Added full documentation (K. Brewster)
!
! 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 binary dumping
!
! 03/26/96 (G. Bassett)
! Backwards compatibility added for ARPS 3.2 and ARPS 4.0 binary
! history dump formats.
!
! 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 binary reading.
! This channel must be opened for unformatted 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))
!
! ireturn Return status indicator
! =0, successful read of all data
! =1, error reading data
! =2, end-of-file reached during read attempt
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
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).
INTEGER :: grdbas ! Data read flag.
INTEGER :: inch ! Channel number for binary reading
REAL :: time ! Time in seconds of data read
! from "filename"
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) ! Perturbation 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 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) ! 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**2*s))
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,fmtver,fmtverin
PARAMETER (fmtver='004.10 Binary Data')
PARAMETER (fmtver0='003.20 Binary Data')
PARAMETER (fmtver1='004.00 Binary Data')
INTEGER :: oldver ! Flag indicating if the file is an old
! (oldver=1) or current format (oldver=0).
CHARACTER (LEN=10) :: tmunit
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: lchanl
PARAMETER (lchanl=6) ! Channel number for formatted printing.
INTEGER :: i,j,k,is
INTEGER :: nstyp1
CHARACTER (LEN=12) :: label
INTEGER :: nxin,nyin,nzin
INTEGER :: bgrdin,bbasin,bvarin,bicein,btkein,btrbin
INTEGER :: idummy
REAL :: rdummy
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'indtflg.inc'
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid & map parameters.
INCLUDE 'mp.inc' ! mpi parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!
!-----------------------------------------------------------------------
!
! Read header info
!
!-----------------------------------------------------------------------
!
READ(inch,ERR=110,END=120) fmtverin
IF(( fmtverin /= fmtver ) .AND. ( fmtverin /= fmtver0 ) &
.AND. ( fmtverin /= fmtver1 )) THEN
IF (myproc == 0) &
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
('arpstop called from binread header read',1)
END IF
IF ( fmtverin == fmtver ) THEN
oldver = 0
ELSE
oldver = 1
END IF
READ(inch,ERR=110,END=120) runname
READ(inch,ERR=110,END=120) nocmnt
IF( nocmnt > 0 ) THEN
DO i=1,nocmnt
READ(inch,ERR=110,END=120) cmnt(i)
END DO
END IF
IF (myproc == 0) &
WRITE(6,'(//'' THE NAME OF THIS RUN IS: '',A//)') runname
IF( nocmnt > 0 ) THEN
IF(myproc == 0)THEN
DO i=1,nocmnt
WRITE(6,'(1x,a)') cmnt(i)
END DO
END IF
END IF
READ(inch,ERR=110,END=120) time,tmunit
!
!-----------------------------------------------------------------------
!
! Get dimensions of data in binary file and check against
! the dimensions passed to BINREAD
!
!-----------------------------------------------------------------------
!
READ(inch,ERR=110,END=120) nxin, nyin, nzin
IF( nxin /= nx .OR. nyin /= ny .OR. nzin /= nz ) THEN
IF(myproc == 0)THEN
WRITE(6,'(1x,a)') &
' Dimensions in BINREAD inconsistent with data.'
WRITE(6,'(1x,a,3I15)') ' Read were: ', nxin, nyin, nzin
WRITE(6,'(1x,a,3I15)') ' Expected: ', nx, ny, nz
WRITE(6,'(1x,a)') &
' Program aborted in BINREAD.'
END IF
CALL arpsstop
('arpstop called from binread nx-ny-nz read ',1)
END IF
!
!-----------------------------------------------------------------------
!
! Read in flags for different data groups
!
!-----------------------------------------------------------------------
!
IF( grdbas == 1 ) THEN ! Read grid and base state arrays
IF (myproc == 0) &
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,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
IF (myproc == 0) &
WRITE(lchanl,'(1x,a,f8.1,a,f8.3,a/)')'To read data for time:', &
time,' secs = ',(time/60.),' mins.'
READ(inch,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,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,ERR=110,END=120) &
nstyp1, prcin, radin, flxin,snowcin, &
snowin,idummy,idummy,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
IF ( nstyp1 < 1 ) THEN
nstyp1 = 1
END IF
READ(inch,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, z and zp arrays.
!
!----------------------------------------------------------------------
!
IF( grdin == 1 .OR. grdbas == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) x
IF (myproc == 0) &
WRITE(lchanl,910) label,' x.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) y
IF (myproc == 0) &
WRITE(lchanl,910) label,' y.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) z
IF (myproc == 0) &
WRITE(lchanl,910) label,' z.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) zp
IF (myproc == 0) &
WRITE(lchanl,910) label,' zp.'
END IF ! grdin
!
!-----------------------------------------------------------------------
!
! Read in base state fields
!
!----------------------------------------------------------------------
!
IF( basin == 1 .OR. grdbas == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ubar
IF (myproc == 0) &
WRITE(lchanl,910) label,' ubar.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) vbar
IF (myproc == 0) &
WRITE(lchanl,910) label,' vbar.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) wbar
IF (myproc == 0) &
WRITE(lchanl,910) label,' wbar.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ptbar
IF (myproc == 0) &
WRITE(lchanl,910) label,' ptbar.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) pbar
IF (myproc == 0) &
WRITE(lchanl,910) label,' pbar.'
IF( mstin == 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qvbar
IF (myproc == 0) &
WRITE(lchanl,910) label,' qvbar.'
END IF
IF (landin == 1) THEN
IF (nstyp1 <= 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((soiltyp(i,j,1),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' soiltyp.'
ELSE
DO is=1,nstyp1
IF (is <= nstyps) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((soiltyp(i,j,is),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' soiltyp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((stypfrct(i,j,is),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' stypfrct.'
ELSE
READ(inch,ERR=110,END=120) label
IF (myproc == 0) &
WRITE(lchanl,910) label,'skipping soiltyp'
READ(inch,ERR=110,END=120)
READ(inch,ERR=110,END=120) label
IF (myproc == 0) &
WRITE(lchanl,910) label,'skipping stypfrct.'
READ(inch,ERR=110,END=120)
ENDIF
END DO
END IF
CALL fix_stypfrct_nstyp
(nx,ny,nstyp1,nstyp,stypfrct)
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) vegtyp
IF (myproc == 0) &
WRITE(lchanl,910) label,' vegtyp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) lai
IF (myproc == 0) &
WRITE(lchanl,910) label,' lai.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) roufns
IF (myproc == 0) &
WRITE(lchanl,910) label,' roufns.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) veg
IF (myproc == 0) &
WRITE(lchanl,910) label,' veg.'
END IF
END IF
IF( grdbas == 1 ) GO TO 930
IF( varin == 1 ) THEN
IF ( totin == 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Read in perturbations from history dump
!
!-----------------------------------------------------------------------
!
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) uprt
IF (myproc == 0) &
WRITE(lchanl,910) label,' uprt.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) vprt
IF (myproc == 0) &
WRITE(lchanl,910) label,' vprt.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) wprt
IF (myproc == 0) &
WRITE(lchanl,910) label,' wprt.'
!
!-----------------------------------------------------------------------
!
! Read in scalars
!
!----------------------------------------------------------------------
!
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ptprt
IF (myproc == 0) &
WRITE(lchanl,910) label,' ptprt.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) pprt
IF (myproc == 0) &
WRITE(lchanl,910) label,' pprt.'
ELSE
!
!-----------------------------------------------------------------------
!
! Read in total values of variables from history dump
!
!----------------------------------------------------------------------
!
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) uprt
IF (myproc == 0) &
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) vprt
IF (myproc == 0) &
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) wprt
IF (myproc == 0) &
WRITE(lchanl,910) label,' w.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ptprt
IF (myproc == 0) &
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) pprt
IF (myproc == 0) &
WRITE(lchanl,910) 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
!
!-----------------------------------------------------------------------
!
! Read in moisture variables
!
!-----------------------------------------------------------------------
!
IF( mstin == 1 ) THEN
IF ( totin == 0 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qvprt
IF (myproc == 0) &
WRITE(lchanl,910) label,' qvprt.'
ELSE
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qvprt
IF (myproc == 0) &
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qc
IF (myproc == 0) &
WRITE(lchanl,910) label,' qc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qr
IF (myproc == 0) &
WRITE(lchanl,910) label,' qr.'
IF( rainin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) raing
IF (myproc == 0) &
WRITE(lchanl,910) label,' raing.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) rainc
IF (myproc == 0) &
WRITE(lchanl,910) label,' rainc.'
END IF
IF( prcin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((prcrate(i,j,1),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' prcrate1.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((prcrate(i,j,2),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' prcrate2.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((prcrate(i,j,3),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' prcrate3.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((prcrate(i,j,4),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' prcrate4.'
END IF
IF( icein == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qi
IF (myproc == 0) &
WRITE(lchanl,910) label,' qi.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qs
IF (myproc == 0) &
WRITE(lchanl,910) label,' qs.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qh
IF (myproc == 0) &
WRITE(lchanl,910) label,' qh.'
END IF
END IF
IF( tkein == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) tke
IF (myproc == 0) &
WRITE(lchanl,910) label,' tke.'
END IF
IF( trbin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) kmh
IF (myproc == 0) &
WRITE(lchanl,910) label,' kmh.'
IF ( oldver == 0 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) kmv
IF (myproc == 0) &
WRITE(lchanl,910) label,' kmv.'
END IF
END IF
IF( sfcin == 1 ) THEN
IF (nstyp1 <= 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((tsfc(i,j,0),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' tsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((tsoil(i,j,0),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' tsoil.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((wetsfc(i,j,0),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' wetsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((wetdp(i,j,0),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' wetdp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((wetcanp(i,j,0),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' wetcanp.'
ELSE
DO is=0,nstyp1
IF (is <= nstyps) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((tsfc(i,j,is),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' tsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((tsoil(i,j,is),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' tsoil.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((wetsfc(i,j,is),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' wetsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((wetdp(i,j,is),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' wetdp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((wetcanp(i,j,is),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' wetcanp.'
ELSE
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
IF (myproc == 0) &
WRITE(lchanl,910) label,'skipping tsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
IF (myproc == 0) &
WRITE(lchanl,910) label,'skipping tsoil.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
IF (myproc == 0) &
WRITE(lchanl,910) label,'skipping wetsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
IF (myproc == 0) &
WRITE(lchanl,910) label,'skipping wetdp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
IF (myproc == 0) &
WRITE(lchanl,910) label,'skipping wetcanp.'
ENDIF
END DO
END IF
CALL fix_soil_nstyp
(nx,ny,nstyp1,nstyp,tsfc,tsoil,wetsfc,wetdp,wetcanp)
IF (snowcin == 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
IF (myproc == 0) &
WRITE(lchanl,910) label,' snowcvr -- discarding.'
END IF
IF (snowin == 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((snowdpth(i,j),i=1,nx),j=1,ny)
IF (myproc == 0) &
WRITE(lchanl,910) label,' snowdpth.'
END IF
END IF
IF( radin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) radfrc
IF (myproc == 0) &
WRITE(lchanl,910) label,' radfrc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) radsw
IF (myproc == 0) &
WRITE(lchanl,910) label,' radsw.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) rnflx
IF (myproc == 0) &
WRITE(lchanl,910) label,' rnflx.'
END IF
IF( flxin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) usflx
IF (myproc == 0) &
WRITE(lchanl,910) label,' usflx.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) vsflx
IF (myproc == 0) &
WRITE(lchanl,910) label,' vsflx.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ptsflx
IF (myproc == 0) &
WRITE(lchanl,910) label,' ptsflx.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) qvsflx
IF (myproc == 0) &
WRITE(lchanl,910) label,' qvsflx.'
END IF
910 FORMAT(1X,'Field ',a12,' was read into array',a)
!
!-----------------------------------------------------------------------
!
! Friendly exit message
!
!----------------------------------------------------------------------
!
930 CONTINUE
IF (myproc == 0) &
WRITE(6,'(/a,F8.1,a/)') &
' Data at time=', time/60,' (min) were successfully read.'
ireturn = 0
RETURN
!
!-----------------------------------------------------------------------
!
! Error during read
!
!----------------------------------------------------------------------
!
110 CONTINUE
WRITE(6,'(/a/)') ' Error reading data in BINREAD'
ireturn=1
RETURN
!
!-----------------------------------------------------------------------
!
! End-of-file during read
!
!----------------------------------------------------------------------
!
120 CONTINUE
WRITE(6,'(/a/)') ' End of file reached in BINREAD'
ireturn=2
RETURN
END SUBROUTINE binread
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE BN2READ ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE bn2read(nx,ny,nz,nstyps,grdbas,inch,time,x,y,z,zp, & 2,4
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 in binary data set created by ARPS using history dump format
! No.2.
! All data read in are located at the original staggered grid points
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 2/27/92.
!
! MODIFICATION HISTORY:
!
! 6/08/92 Added full documentation (K. Brewster)
!
! 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 second binary dumping
!
! 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 binary reading.
! This channel must be opened for unformatted 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))
!
! ireturn Return status indicator
! =0 successful read of all data
! =1 error reading data
! =2 end-of-file reached during read attempt
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
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).
INTEGER :: grdbas ! Data read flag.
INTEGER :: inch ! Channel number for binary reading
REAL :: time ! Time in seconds of data read
! from "filename"
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) ! Perturbation 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**2*s))
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 2nd Binary Data')
PARAMETER (fmtver1='004.10 2nd Binary Data')
CHARACTER (LEN=10) :: tmunit
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: lchanl
PARAMETER (lchanl=6) ! Channel number for formatted printing.
INTEGER :: i,j,k,is
INTEGER :: nstyp1
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,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
('arpstop called from bn2read header read ',1)
END IF
READ(inch,ERR=110,END=120) runname
READ(inch,ERR=110,END=120) nocmnt
IF( nocmnt > 0 ) THEN
DO i=1,nocmnt
READ(inch,ERR=110,END=120) cmnt(i)
END DO
END IF
WRITE(6,'(//'' THE NAME OF THIS RUN IS: '',A//)') runname
IF( nocmnt > 0 ) THEN
DO i=1,nocmnt
WRITE(6,'(1x,a)') cmnt(i)
END DO
END IF
READ(inch,ERR=110,END=120) time,tmunit
!
!-----------------------------------------------------------------------
!
! Get dimensions of data in binary file and check against
! the dimensions passed to BN2READ
!
!-----------------------------------------------------------------------
!
READ(inch,ERR=110,END=120) nxin, nyin, nzin
IF( nxin /= nx .OR. nyin /= ny .OR. nzin /= nz ) THEN
WRITE(6,'(1x,a)') &
' Dimensions in BN2READ inconsistent with data.'
WRITE(6,'(1x,a,3I15)') ' Read were: ', nxin, nyin, nzin
WRITE(6,'(1x,a)') &
' Program aborted in BN2READ.'
CALL arpsstop
('arpstop called from bn2read nx-ny-nz read',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,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,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,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.1 or later
! version.
!
!-----------------------------------------------------------------------
!
READ(inch,ERR=110,END=120) &
nstyp1, prcin, radin, flxin,snowcin, &
snowin,idummy,idummy,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
IF ( nstyp1 < 1 ) THEN
nstyp1 = 1
END IF
READ(inch,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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) (x(i),i=1,nx)
WRITE(lchanl,910) label,' x.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) (y(j),j=1,ny)
WRITE(lchanl,910) label,' y.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) (z(k),k=1,nz)
WRITE(lchanl,910) label,' z.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((zp(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' zp.'
END IF ! grdin
!
!-----------------------------------------------------------------------
!
! Read in base state fields
!
!----------------------------------------------------------------------
!
IF( basin == 1 .OR. grdbas == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((ubar(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' ubar.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((vbar(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' vbar.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((wbar(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' wbar.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((ptbar(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' ptbar.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((pbar(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' pbar.'
IF( mstin == 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((qvbar(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' qvbar.'
END IF
IF(landin == 1) THEN
IF( nstyp1 <= 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((soiltyp(i,j,1),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' soiltyp.'
ELSE
DO is=1,nstyp1
IF (is <= nstyps) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((soiltyp(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' soiltyp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((stypfrct(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' stypfrct.'
ELSE
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
WRITE(lchanl,910) label,'skipping soiltyp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
WRITE(lchanl,910) label,'skipping stypfrct.'
ENDIF
END DO
END IF
CALL fix_stypfrct_nstyp
(nx,ny,nstyp1,nstyp,stypfrct)
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((vegtyp (i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' vegtyp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((lai (i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' lai.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((roufns (i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' roufns.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((veg (i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((uprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' uprt.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((vprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' vprt.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((wprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' wprt.'
!
!-----------------------------------------------------------------------
!
! Read in scalars
!
!----------------------------------------------------------------------
!
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((ptprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' ptprt.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((pprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' pprt.'
ELSE
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((uprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((vprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((wprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' w.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((ptprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((pprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) 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
!
!-----------------------------------------------------------------------
!
! Read in moisture variables
!
!----------------------------------------------------------------------
!
IF( mstin == 1 ) THEN
IF ( totin == 0 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((qvprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' qvprt.'
ELSE
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((qvprt(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) 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,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((qc(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' qc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((qr(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' qr.'
IF( rainin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((raing(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' raing.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((rainc(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' rainc.'
END IF
IF( prcin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((prcrate(i,j,1),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' prcrate1.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((prcrate(i,j,2),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' prcrate2.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((prcrate(i,j,3),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' prcrate3.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
((prcrate(i,j,4),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' prcrate4.'
END IF
IF( icein == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((qi(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' qi.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((qs(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' qs.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((qh(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' qh.'
END IF
END IF
IF( tkein == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((tke(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' tke.'
END IF
IF( trbin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((kmh(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' kmh.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((kmv(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' kmv.'
END IF
IF( sfcin == 1 ) THEN
IF (nstyp1 <= 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((tsfc(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' tsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((tsoil(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' tsoil.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((wetsfc(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' wetsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((wetdp(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' wetdp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((wetcanp(i,j,0),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' wetcanp.'
ELSE
DO is=0,nstyp1
IF (is <= nstyps) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)((tsfc(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' tsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)((tsoil(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' tsoil.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)((wetsfc(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' wetsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)((wetdp(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' wetdp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)((wetcanp(i,j,is),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' wetcanp.'
ELSE
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
WRITE(lchanl,910) label,'skipping tsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
WRITE(lchanl,910) label,'skipping tsoil.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
WRITE(lchanl,910) label,'skipping wetsfc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
WRITE(lchanl,910) label,'skipping wetdp.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
WRITE(lchanl,910) label,'skipping wetcanp.'
ENDIF
END DO
END IF
CALL fix_soil_nstyp
(nx,ny,nstyp1,nstyp,tsfc,tsoil,wetsfc,wetdp,wetcanp)
IF(snowcin == 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)
WRITE(lchanl,910) label,' snowcvr -- discarding.'
END IF
IF(snowin == 1) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120)((snowdpth(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' snowdpth.'
END IF
END IF
IF( radin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) &
(((radfrc(i,j,k),i=1,nx),j=1,ny),k=1,nz)
WRITE(lchanl,910) label,' radfrc.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((radsw(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' radsw.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((rnflx(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' rnflx.'
END IF
IF( flxin == 1 ) THEN
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((usflx(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' usflx.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((vsflx(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' vsflx.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((ptsflx(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' ptsflx.'
READ(inch,ERR=110,END=120) label
READ(inch,ERR=110,END=120) ((qvsflx(i,j),i=1,nx),j=1,ny)
WRITE(lchanl,910) label,' qvsflx.'
END IF
910 FORMAT(1X,'Field ',a12,' was read into array',a)
!
!-----------------------------------------------------------------------
!
! Friendly exit message
!
!----------------------------------------------------------------------
!
930 CONTINUE
WRITE(6,'(/a,F8.1,a/)') &
' Data at time=', time/60,' (min) were successfully read.'
ireturn = 0
RETURN
!
!-----------------------------------------------------------------------
!
! Error during read
!
!----------------------------------------------------------------------
!
110 CONTINUE
WRITE(6,'(/a/)') ' Error reading data in BN2READ'
ireturn=1
RETURN
!
!-----------------------------------------------------------------------
!
! End-of-file during read
!
!----------------------------------------------------------------------
!
120 CONTINUE
WRITE(6,'(/a/)') ' End of file reached in BN2READ'
ireturn=2
RETURN
END SUBROUTINE bn2read
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE BINDUMP ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE bindump(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 as binary data.
!
! 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.
!
! The last 4 characters of the 12 character label written out
! with each 1-,2-, or 3-d array is used by the splitdump and
! joinfiles subroutines used by the message passing version of the
! ARPS (and also by some auxiliary ARPS I/O routines)
! to determine the data type of the array.
! Key to the labels:
!
! 'nnnnnnn tdds'
!
! n - characters containing the name of the variable.
! t - type of variable: "r" for real and "i" for integer.
! dd - number of dimensions: "1d" "2d" or "3d".
! s - staggered dimension: "0" for centered,
! "1" for staggered in x,
! "2" for staggered in y,
! "3" for staggered in z.
!
!-----------------------------------------------------------------------
!
!
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 3/10/92.
!
! MODIFICATION HISTORY:
!
! 6/06/92 (M. Xue)
! Added full documentation.
!
! 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 binary dumping
!
! 03/26/96 (G. Bassett)
! Labels were modified to include information about array type.
! This information is used by splitdump and joinfiles subroutines.
!
! 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
! stypfrct Soil type fraction
! vegtyp Vegetation type
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Skin temperature at the ground or ocean surface (K)
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! 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 (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.
! tkeout =0 or 1. If tkeout=0, tke is not dumped.
! trbout =0 or 1. If trbout=0, turbulence parameter km is not dumped.
! sfcout =0 or 1. If sfcout=0, surface variables are not dumped.
! landout=0 or 1. If landout=0, surface propertty arrays are not dumped.
! radout =0 or 1. If radout =0, radiation arrays are not dumped.
! flxout =0 or 1. If flxout =0, surface flux arrays are not dumped.
!
! These following parameters are also passed in through common
! blocks in globcst.inc.
!
! runname,curtim,umove,vmove,xgrdorg,ygrdorg
!
!-----------------------------------------------------------------------
!
! 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 fractions
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**2*s))
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 Binary Data')
CHARACTER (LEN=10) :: tmunit
PARAMETER (tmunit='seconds ')
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,l,is
INTEGER :: idummy
REAL :: rdummy
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid & map parameters.
INCLUDE 'mp.inc' ! mpi parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF (myproc == 0) &
WRITE(6,'(1x,a,f13.3/)') 'Writing history data at time=', curtim
!
!-----------------------------------------------------------------------
!
! Write header info
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) fmtver
WRITE(nchanl) runname
WRITE(nchanl) nocmnt
IF( nocmnt > 0 ) THEN
DO l=1,nocmnt
WRITE(nchanl) cmnt(l)
END DO
END IF
WRITE(nchanl) curtim,tmunit
WRITE(nchanl) nx,ny,nz
!
!-----------------------------------------------------------------------
!
! Write the flags for different data groups.
!
!-----------------------------------------------------------------------
!
idummy = 0
IF( grdbas == 1 ) THEN
WRITE(nchanl) 1, 1, 0, mstout, 0, &
0, 0, 0, landout,totout, &
0, idummy, idummy, mapproj, month, &
day, year, hour, minute, second
ELSE
WRITE(nchanl) 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) umove, vmove, xgrdorg, ygrdorg, trulat1, &
trulat2, trulon, sclfct, rdummy, rdummy, &
rdummy, rdummy, rdummy, rdummy, rdummy, &
tstop, thisdmp, latitud, ctrlat, ctrlon
!
!-----------------------------------------------------------------------
!
! If totout=1, write additional parameters to history dump files.
! This is for ARPS version 4.1.2 or later.
!
!-----------------------------------------------------------------------
!
IF ( totout == 1 ) THEN
WRITE(nchanl) 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) 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, write out grid variables
!
!-----------------------------------------------------------------------
!
IF(grdout == 1 .OR. grdbas == 1 ) THEN
WRITE(nchanl) 'x coord r1d1'
WRITE(nchanl) x
WRITE(nchanl) 'y coord r1d2'
WRITE(nchanl) y
WRITE(nchanl) 'z coord r1d3'
WRITE(nchanl) z
CALL edgfill
(zp,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz)
WRITE(nchanl) 'zp coor r3d0'
WRITE(nchanl) zp
END IF ! grdout
!
!-----------------------------------------------------------------------
!
! 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) 'ubar r3d1'
WRITE(nchanl) ubar
CALL edgfill
(vbar,1,nx,1,nx-1, 1,ny,1,ny, 1,nz,1,nz-1)
WRITE(nchanl) 'vbar r3d2'
WRITE(nchanl) 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) 'wbar r3d3'
WRITE(nchanl) tem1
CALL edgfill
(ptbar,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'ptbar r3d0'
WRITE(nchanl) ptbar
CALL edgfill
(pbar,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'pbar r3d0'
WRITE(nchanl) 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) 'qvbar r3d0'
WRITE(nchanl) 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) 'soiltyp i2d0'
WRITE(nchanl) ((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) 'soiltyp i2d0'
WRITE(nchanl) ((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) 'stypfrc r2d0'
WRITE(nchanl) ((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) 'vegtyp i2d0'
WRITE(nchanl) vegtyp
CALL edgfill
(lai ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'lai r2d0'
WRITE(nchanl) lai
CALL edgfill
(roufns ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'roufns r2d0'
WRITE(nchanl) roufns
CALL edgfill
(veg ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'veg r2d0'
WRITE(nchanl) veg
END IF
END IF
IF ( grdbas == 1 ) RETURN
!
!-----------------------------------------------------------------------
!
! If varout = 1, Write out uprt, vprt, wprt, ptprt, pprt.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Write out u,v and w.
!
!-----------------------------------------------------------------------
!
IF(varout == 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
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) 'uprt r3d1'
WRITE(nchanl) 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) 'vprt r3d2'
WRITE(nchanl) tem1
CALL edgfill
(w,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz)
WRITE(nchanl) 'wprt r3d3'
WRITE(nchanl) w
!
!-----------------------------------------------------------------------
!
! Write out scalars
!
!-----------------------------------------------------------------------
!
CALL edgfill
(ptprt,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'ptprt r3d0'
WRITE(nchanl) ptprt
CALL edgfill
(pprt,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'pprt r3d0'
WRITE(nchanl) 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) 'u r3d1'
WRITE(nchanl) u
CALL edgfill
(v,1,nx,1,nx-1, 1,ny,1,ny, 1,nz,1,nz-1)
WRITE(nchanl) 'v r3d2'
WRITE(nchanl) v
CALL edgfill
(w,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz)
WRITE(nchanl) 'w r3d3'
WRITE(nchanl) 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) 'pt r3d0'
WRITE(nchanl) 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) 'p r3d0'
WRITE(nchanl) tem1
END IF
END IF ! varout
!
!-----------------------------------------------------------------------
!
! If mstout = 1, write out moisture scalars.
!
!-----------------------------------------------------------------------
!
IF(mstout == 1) THEN
IF( totout == 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Write out perturbation 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) 'qvprt r3d0'
WRITE(nchanl) 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) 'qv r3d0'
WRITE(nchanl) qv
END IF
CALL edgfill
(qc,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'qc r3d0'
WRITE(nchanl) qc
CALL edgfill
(qr,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'qr r3d0'
WRITE(nchanl) qr
IF(rainout == 1) THEN
CALL edgfill
(raing, 1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'raing r2d0'
WRITE(nchanl) raing
CALL edgfill
(rainc,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'rainc r2d0'
WRITE(nchanl) 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) 'prcrat1 r2d0'
WRITE(nchanl) ((prcrate(i,j,1),i=1,nx),j=1,ny)
WRITE(nchanl) 'prcrat2 r2d0'
WRITE(nchanl) ((prcrate(i,j,2),i=1,nx),j=1,ny)
WRITE(nchanl) 'prcrat3 r2d0'
WRITE(nchanl) ((prcrate(i,j,3),i=1,nx),j=1,ny)
WRITE(nchanl) 'prcrat4 r2d0'
WRITE(nchanl) ((prcrate(i,j,4),i=1,nx),j=1,ny)
END IF
IF(iceout == 1) THEN
CALL edgfill
(qi,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'qi r3d0'
WRITE(nchanl) qi
CALL edgfill
(qs,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'qs r3d0'
WRITE(nchanl) qs
CALL edgfill
(qh,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'qh r3d0'
WRITE(nchanl) qh
END IF !iceout
END IF !mstout
!
!-----------------------------------------------------------------------
!
! If tkeout = 1, write out tke.
!
!-----------------------------------------------------------------------
!
IF( tkeout == 1 ) THEN
CALL edgfill
(tke,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'tke r3d0'
WRITE(nchanl) tke
END IF
!
!-----------------------------------------------------------------------
!
! If trbout = 1, write out the turbulence parameter, km.
!
!-----------------------------------------------------------------------
!
IF( trbout == 1 ) THEN
CALL edgfill
(kmh,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'kmh r3d0'
WRITE(nchanl) kmh
CALL edgfill
(kmv,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'kmv r3d0'
WRITE(nchanl) 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) 'tsfc r2d0'
WRITE(nchanl) ((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) 'tsoil r2d0'
WRITE(nchanl) ((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) 'wetsfc r2d0'
WRITE(nchanl) ((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) 'wetdp r2d0'
WRITE(nchanl) ((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) 'wetcanp r2d0'
WRITE(nchanl) ((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) 'tsfc r2d0'
WRITE(nchanl) ((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) 'tsoil r2d0'
WRITE(nchanl) ((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) 'wetsfc r2d0'
WRITE(nchanl) ((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) 'wetdp r2d0'
WRITE(nchanl) ((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) 'wetcanp r2d0'
WRITE(nchanl) ((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) 'snowdpthr2d0'
WRITE(nchanl) ((snowdpth(i,j),i=1,nx),j=1,ny)
END IF
END IF
!
!-----------------------------------------------------------------------
!
! If radout = 1, write out the radiation arrays
!
!-----------------------------------------------------------------------
!
IF( radout == 1 ) THEN
CALL edgfill
(radfrc,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
WRITE(nchanl) 'radfrc r3d0'
WRITE(nchanl) radfrc
CALL edgfill
(radsw,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'radsw r2d0'
WRITE(nchanl) radsw
CALL edgfill
(rnflx,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'rnflx r2d0'
WRITE(nchanl) rnflx
END IF ! radout
!
!-----------------------------------------------------------------------
!
! If flxout = 1, write out the surface fluxes
!
!-----------------------------------------------------------------------
!
IF( flxout == 1 ) THEN
CALL edgfill
(usflx,1,nx,1,nx, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'usflx r2d0'
WRITE(nchanl) usflx
CALL edgfill
(vsflx,1,nx,1,nx-1, 1,ny,1,ny, 1,1,1,1)
WRITE(nchanl) 'vsflx r2d0'
WRITE(nchanl) vsflx
CALL edgfill
(ptsflx,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'ptsflx r2d0'
WRITE(nchanl) ptsflx
CALL edgfill
(qvsflx,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
WRITE(nchanl) 'qvsflx r2d0'
WRITE(nchanl) qvsflx
END IF ! flxout
RETURN
END SUBROUTINE bindump
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE BN2DUMP ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE bn2dump(nx,ny,nz, nstyps, nchanl, grdbas, & 1
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 as binary data.
!
! This routine can dump the data arrays in a model subdomain and
! at selected data points.
!
! 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
! 3/10/92.
!
! MODIFICATION HISTORY:
!
! 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 second binary dumping
!
! 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. These parameters 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)
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**2*s))
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 2nd Binary Data')
CHARACTER (LEN=10) :: tmunit
PARAMETER (tmunit='seconds ')
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,l,is, idummy
REAL :: rdummy
INTEGER :: nxout,nyout,nzout ! The size of array to be written out.
INTEGER :: ist ,ind ,isk ,jst ,jnd ,jsk ,kst ,knd ,ksk
INTEGER :: ist1,ind1,isk1,jst1,jnd1,jsk1,kst1,knd1,ksk1
INTEGER :: setdomn,setskip
SAVE setdomn, setskip
SAVE ist,ind,isk,jst,jnd,jsk,kst,knd,ksk
DATA setdomn, setskip /0,0/
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc' ! Grid & map parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IF( setdomn == 0) THEN ! If these parameters are nevers set ...
ist = 1
jst = 1
kst = 1
ind = nx
jnd = ny
knd = nz
END IF
IF( setskip == 0) THEN ! If these parameters are nevers set ...
isk = 1
jsk = 1
ksk = 1
END IF
WRITE(6,'(1x,a,f13.3/)') 'Writing history data at time=', curtim
!
!-----------------------------------------------------------------------
!
! Write header info
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) fmtver
WRITE(nchanl) runname
WRITE(nchanl) nocmnt
IF( nocmnt > 0 ) THEN
DO l=1,nocmnt
WRITE(nchanl) cmnt(l)
END DO
END IF
WRITE(nchanl) curtim,tmunit
nxout = ist+(ind-ist)/isk
nyout = jst+(jnd-jst)/jsk
nzout = kst+(knd-kst)/ksk
WRITE(nchanl) nxout, nyout, nzout
PRINT*,'nxout= ',nxout,'nyout= ',nyout,'nzout= ',nzout
!
!-----------------------------------------------------------------------
!
! Write the flags for different data groups.
!
!-----------------------------------------------------------------------
!
idummy = 0
IF( grdbas == 1 ) THEN
WRITE(nchanl) 1, 1, 0, mstout, 0, &
0, idummy, idummy, landout, totout, &
idummy, idummy, idummy, mapproj, month, &
day, year, hour, minute, second
ELSE
WRITE(nchanl) 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) umove, vmove, xgrdorg, ygrdorg, trulat1, &
trulat2, trulon, sclfct, rdummy, rdummy, &
rdummy, rdummy, rdummy, rdummy, rdummy, &
tstop, thisdmp, latitud, ctrlat, ctrlon
IF ( totout /= 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Add new parameters for new version of history data dump
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) 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) 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, write out grid variables
!
!-----------------------------------------------------------------------
!
IF(grdout == 1 .OR. grdbas == 1 ) THEN
WRITE(nchanl) 'x coordinate'
WRITE(nchanl) ( x(i), i=ist,ind,isk)
WRITE(nchanl) 'y coordinate'
WRITE(nchanl) ( y(j), j=jst,jnd,jsk)
WRITE(nchanl) 'z coordinate'
WRITE(nchanl) ( z(k), k=kst,knd,ksk)
WRITE(nchanl) 'zp coord '
WRITE(nchanl) ((( zp(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
END IF ! grdout
!
!-----------------------------------------------------------------------
!
! If basout=1, write out base state variables.
!
!-----------------------------------------------------------------------
!
IF(basout == 1 .OR. grdbas == 1 ) THEN
WRITE(nchanl) 'ubar '
WRITE(nchanl) ((( ubar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'vbar '
WRITE(nchanl) ((( vbar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
DO k=kst,knd,ksk
DO j=jst,jnd,jsk
DO i=ist,ind,isk
tem1(i,j,k) = 0.0
END DO
END DO
END DO
WRITE(nchanl) 'wbar '
WRITE(nchanl) (((tem1(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'ptbar '
WRITE(nchanl) (((ptbar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'pbar '
WRITE(nchanl) (((pbar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
IF(mstout == 1) THEN
WRITE(nchanl) 'qvbar '
WRITE(nchanl) (((qvbar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
END IF
IF(landout == 1) THEN
IF( nstyp <= 1 ) THEN
WRITE(nchanl) 'soiltyp '
WRITE(nchanl) ((soiltyp(i,j,1),i=ist,ind,isk), &
j=jst,jnd,jsk)
ELSE
DO is=1,nstyp
WRITE(nchanl) 'soiltyp '
WRITE(nchanl) ((soiltyp(i,j,is),i=ist,ind,isk), &
j=jst,jnd,jsk)
WRITE(nchanl) 'stypfrct '
WRITE(nchanl) ((stypfrct(i,j,is),i=ist,ind,isk), &
j=jst,jnd,jsk)
END DO
END IF
WRITE(nchanl) 'vegtyp '
WRITE(nchanl) ((vegtyp (i,j),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'lai '
WRITE(nchanl) ((lai (i,j),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'roufns '
WRITE(nchanl) ((roufns (i,j),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'veg '
WRITE(nchanl) ((veg (i,j),i=ist,ind,isk),j=jst,jnd,jsk)
END IF
END IF
IF ( grdbas == 1 ) RETURN
!
!-----------------------------------------------------------------------
!
! If varout = 1, Write out uprt, vprt, wprt, ptprt, pprt.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Write out u, v and w
!
!-----------------------------------------------------------------------
!
IF(varout == 1) THEN
IF ( totout == 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Write out perturbatios to history dump
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) 'uprt '
WRITE(nchanl) ((( u(i,j,k)-ubar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'vprt '
WRITE(nchanl) ((( v(i,j,k)-vbar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'wprt '
WRITE(nchanl) ((( w(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
!
!-----------------------------------------------------------------------
!
! Write out scalars
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) 'ptprt '
WRITE(nchanl) ((( ptprt(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'pprt '
WRITE(nchanl) ((( pprt(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
ELSE
!
!-----------------------------------------------------------------------
!
! Write out total values to history dump
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) 'u '
WRITE(nchanl) ((( u(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'v '
WRITE(nchanl) ((( v(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'w '
WRITE(nchanl) ((( w(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
!
!-----------------------------------------------------------------------
!
! Write out scalars
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) 'pt '
WRITE(nchanl) ((( ptprt(i,j,k)+ptbar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'p '
WRITE(nchanl) ((( pprt(i,j,k)+pbar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
END IF
END IF ! varout
!
!-----------------------------------------------------------------------
!
! If mstout = 1, write out moisture scalars.
!
!-----------------------------------------------------------------------
!
IF(mstout == 1) THEN
IF ( totout == 0 ) THEN
!
!-----------------------------------------------------------------------
!
! Write out perturbations to history dump
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) 'qvprt '
WRITE(nchanl) ((( qv(i,j,k)-qvbar(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
ELSE
!
!-----------------------------------------------------------------------
!
! Write out total values to history dump
!
!-----------------------------------------------------------------------
!
WRITE(nchanl) 'qv '
WRITE(nchanl) ((( qv(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
END IF
WRITE(nchanl) 'qc '
WRITE(nchanl) ((( qc(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'qr '
WRITE(nchanl) ((( qr(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
IF(rainout == 1) THEN
WRITE(nchanl) 'raing '
WRITE(nchanl) ((raing(i,j),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'rainc '
WRITE(nchanl) ((rainc(i,j),i=ist,ind,isk),j=jst,jnd,jsk)
END IF !rainout
IF ( prcout == 1 ) THEN
WRITE(nchanl) 'prcrate1 '
WRITE(nchanl) ((prcrate(i,j,1),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'prcrate2 '
WRITE(nchanl) ((prcrate(i,j,2),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'prcrate3 '
WRITE(nchanl) ((prcrate(i,j,3),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'prcrate4 '
WRITE(nchanl) ((prcrate(i,j,4),i=ist,ind,isk),j=jst,jnd,jsk)
END IF ! prcout
IF(iceout == 1) THEN
WRITE(nchanl) 'qi '
WRITE(nchanl) ((( qi(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'qs '
WRITE(nchanl) ((( qs(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'qh '
WRITE(nchanl) ((( qh(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
END IF !iceout
END IF !mstout
!
!-----------------------------------------------------------------------
!
! If tkeout = 1, write out turbulence parameter, km.
!
!-----------------------------------------------------------------------
!
IF( tkeout == 1 ) THEN
WRITE(nchanl) 'tke '
WRITE(nchanl) ((( tke(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
END IF ! tkeout
!
!-----------------------------------------------------------------------
!
! If trbout = 1, write out turbulence parameter, km.
!
!-----------------------------------------------------------------------
!
IF( trbout == 1 ) THEN
WRITE(nchanl) 'kmh '
WRITE(nchanl) ((( kmh(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'kmv '
WRITE(nchanl) ((( kmv(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
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
WRITE(nchanl) 'tsfc '
WRITE(nchanl) ((tsfc(i,j,0),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'tsoil '
WRITE(nchanl) ((tsoil(i,j,0),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'wetsfc '
WRITE(nchanl) ((wetsfc(i,j,0),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'wetdp '
WRITE(nchanl) ((wetdp(i,j,0),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'wetcanp '
WRITE(nchanl) ((wetcanp(i,j,0),i=ist,ind,isk),j=jst,jnd,jsk)
ELSE
DO is=0,nstyp
WRITE(nchanl) 'tsfc '
WRITE(nchanl) ((tsfc(i,j,is),i=ist,ind,isk), &
j=jst,jnd,jsk)
WRITE(nchanl) 'tsoil '
WRITE(nchanl) ((tsoil(i,j,is),i=ist,ind,isk), &
j=jst,jnd,jsk)
WRITE(nchanl) 'wetsfc '
WRITE(nchanl) ((wetsfc(i,j,is),i=ist,ind,isk), &
j=jst,jnd,jsk)
WRITE(nchanl) 'wetdp '
WRITE(nchanl) ((wetdp(i,j,is),i=ist,ind,isk), &
j=jst,jnd,jsk)
WRITE(nchanl) 'wetcanp '
WRITE(nchanl) ((wetcanp(i,j,is),i=ist,ind,isk), &
j=jst,jnd,jsk)
END DO
END IF
IF(snowout == 1) THEN
WRITE(nchanl) 'snowdpth '
WRITE(nchanl) ((snowdpth(i,j),i=ist,ind,isk), &
j=jst,jnd,jsk)
END IF
END IF ! sfcout done
!
!-----------------------------------------------------------------------
!
! If radout = 1, write out radiation arrays, radfrc, radsw and
! rnflx.
!
!-----------------------------------------------------------------------
!
IF( radout == 1 ) THEN
WRITE(nchanl) 'radfrc '
WRITE(nchanl) ((( radfrc(i,j,k), &
i=ist,ind,isk),j=jst,jnd,jsk),k=kst,knd,ksk)
WRITE(nchanl) 'radsw '
WRITE(nchanl) (( radsw(i,j), &
i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'rnflx'
WRITE(nchanl) (( rnflx(i,j), &
i=ist,ind,isk),j=jst,jnd,jsk)
END IF ! radout
!
!-----------------------------------------------------------------------
!
! If flxout = 1, write out surface fluxes
!
!-----------------------------------------------------------------------
!
IF( flxout == 1 ) THEN
WRITE(nchanl) 'usflx '
WRITE(nchanl) (( usflx(i,j),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'vsflx '
WRITE(nchanl) (( vsflx(i,j),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'ptsflx '
WRITE(nchanl) (( ptsflx(i,j),i=ist,ind,isk),j=jst,jnd,jsk)
WRITE(nchanl) 'qvsflx '
WRITE(nchanl) (( qvsflx(i,j),i=ist,ind,isk),j=jst,jnd,jsk)
END IF ! flxout
RETURN
ENTRY bdmpdomn(ist1,ind1,jst1,jnd1,kst1,knd1)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! To set the start and end indicies of the model subdomain
! in which the data is dumped out.
!
!-----------------------------------------------------------------------
!
ist = ist1
jst = jst1
kst = kst1
ind = ind1
jnd = jnd1
knd = knd1
setdomn = 1
RETURN
ENTRY bdmpskip(isk1, jsk1, ksk1)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! To set data skip parameters for data dump.
!
!-----------------------------------------------------------------------
!
isk = isk1
jsk = jsk1
ksk = ksk1
setskip = 1
RETURN
END SUBROUTINE bn2dump