!
! ##################################################################
! ##################################################################
! ###### ######
! ###### SUBROUTINE RDARPSQPF ######
! ###### ######
! ###### Developed by ######
! ###### Center for Analysis and Prediction of Storms ######
! ###### University of Oklahoma ######
! ###### ######
! ##################################################################
! ##################################################################
SUBROUTINE RDARPSQPF(nx,ny,nz,tpcp,tpcpold,foundpcp,addpcp,nfile, & 1,10
& kgds,ibi,kbms,iyear,imon,iday,ihr,ifhr1, &
& ifhr2,jmaxin,ibufsize, &
& dir_extd,extdname,extdfcst,extdfmt,iimin,iimax, &
& jjmin,jjmax)
!#######################################################################
!
! PURPOSE:
!
! Reads in ARPS history dump and calculates accumulated
! precipitation.
!
! AUTHOR: Eric Kemp, February 2000.
! Based on program ARPSENSCV.
!
!#######################################################################
!
! Variable Declarations:
!
!#######################################################################
IMPLICIT NONE
!#######################################################################
!
! Include files:
!
!#######################################################################
include 'indtflg.inc'
include 'globcst.inc'
include 'phycst.inc'
include 'grid.inc'
!#######################################################################
!
! External variables
!
!#######################################################################
INTEGER nx,ny,nz
INTEGER nzsoil
INTEGER JMAXIN,IBUFSIZE
REAL tpcp(JMAXIN)
REAL tpcpold(JMAXIN)
INTEGER foundpcp,addpcp
CHARACTER*132 NFILE
INTEGER IYEAR,IMON,IDAY,IHR,IFHR1,IFHR2
INTEGER KGDS(*)
INTEGER IBI
LOGICAL*1 KBMS(JMAXIN)
CHARACTER*(*) dir_extd,extdname
CHARACTER*9 extdfcst
INTEGER extdfmt
INTEGER iimin,iimax,jjmin,jjmax
!#######################################################################
!
! Arrays to be read in:
!
!#######################################################################
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 zpsoil(nx,ny,nz) ! The physical height coordinate of soil model
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 pt (nx,ny,nz) ! Total poten
real qvprt (nx,ny,nz)
real u (nx,ny,nz) ! Total u-velocity (m/s)
real v (nx,ny,nz) ! Total v-velocity (m/s)
real w (nx,ny,nz) ! Total w-velocity (m/s)
real ptprt (nx,ny,nz) ! Perturbation potential temperature
! from that of base state atmosphere (K)
real pprt (nx,ny,nz) ! Perturbation pressure from that
! of base state atmosphere (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 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 density rhobar
real qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
integer nstyps ! Number of soil type
parameter ( nstyps = 4 )
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 tsoil (nx,ny,nzsoil,0:nstyps) ! Deep soil temperature (K)
real qsoil (nx,ny,nzsoil,0:nstyps) ! Deep soil temperature (K)
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 raint(nx,ny) ! Total rain (rainc+raing)
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) = cumulative 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 radswnet(nx,ny) ! Net shortwave radiation
REAL radlwin(nx,ny) ! Incoming longwave radiation
real usflx (nx,ny) ! Surface flux of u-momentum (kg/(m*s**2))
real vsflx (nx,ny) ! Surface flux of v-momentum (kg/(m*s**2))
real ptsflx(nx,ny) ! Surface heat flux (K*kg/(m*s**2))
real qvsflx(nx,ny) ! Surface moisture flux (kg/(m**2*s))
!#######################################################################
!
! Temporary work arrays
!
!#######################################################################
real tem1(nx,ny,nz)
real tem2(nx,ny,nz)
real tem3(nx,ny,nz)
!#######################################################################
!
! Other variables
!
!#######################################################################
REAL accppt(nx-1,ny-1),tpptold(nx-1,ny-1)
INTEGER nchin,lengbf,lenfil
REAL time
INTEGER i,j,ni,nj,nf,ireturn
CHARACTER*80 timsnd
INTEGER tmstrln
REAL time_ext
INTEGER ihr,imin,isec
CHARACTER*3 fmtn
INTEGER lenrun,ldir
INTEGER hinfmt
CHARACTER grdbasfn*132,filename*132
INTEGER ICOMP
CHARACTER*1 GDS(400),PDS(400)
INTEGER KPTR(200),KPDS(200),IPDS(200),IGDS(200)
DATA KPTR/200*0/,KPDS/200*0/
INTEGER LENGDS,NPTS,IRET,KRET,k
REAL TMPLAT
!#######################################################################
!
! Temporary code
!
!#######################################################################
REAL maxtpcp
integer iproj
real scale,trlon
real latnot(2)
real x0,y0
real lat(nx,ny)
real lon(nx,ny)
real xctr,yctr,dx,dy
! real x(nx)
! real y(ny)
real xsc(nx)
real ysc(ny)
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
maxtpcp = REAL(0)
ni=nx-1
nj=ny-1
k = 1
DO j = 1,ny
DO i = 1,nx
IF (i.lt.nx.AND.j.lt.ny) THEN
tpptold(i,j) = tpcpold(k)
ENDIF
k = k + 1
END DO
END DO
DO k = 1, JMAXIN
tpcp(k) = REAL(0)
tpcpold(k) = REAL(0)
END DO
!#######################################################################
!
! Build file names
!
!#######################################################################
IF ( extdfcst .EQ. ' ') extdfcst='000:00:00'
lenrun=LEN(dir_extd)
ldir=lenrun
CALL strlnth
( dir_extd, ldir )
IF ( ldir .EQ. 0 .OR. dir_extd(1:ldir) .EQ. ' ' ) THEN
dir_extd = '.'
ldir = 1
END IF
IF( dir_extd(ldir:ldir) .NE. '/' .AND. ldir .LT. lenrun ) THEN
ldir = ldir + 1
dir_extd(ldir:ldir) = '/'
END IF
lenrun = LEN( extdname )
CALL strlnth
( extdname, lenrun )
IF( extdfmt .EQ. 1 ) THEN
fmtn = 'bin'
ELSE IF ( extdfmt .EQ. 2 ) THEN
fmtn = 'asc'
ELSE IF ( extdfmt .EQ. 3 ) THEN
fmtn = 'hdf'
ELSE IF ( extdfmt .EQ. 4 ) THEN
fmtn = 'pak'
ELSE IF ( extdfmt .EQ. 6 ) THEN
fmtn = 'bn2'
ELSE IF ( extdfmt .EQ. 7 ) THEN
fmtn = 'net'
ELSE IF ( extdfmt .EQ. 8 ) THEN
fmtn = 'npk'
ELSE IF ( extdfmt .EQ. 9 ) THEN
fmtn = 'gad'
ELSE IF ( extdfmt .EQ. 10 ) THEN
fmtn = 'grb'
ELSE
WRITE(6,'(a,a,a)') &
& 'Unknown format, ', extdfmt, '. Program stopped in RDARPSQPF.'
STOP
END IF
READ(extdfcst,'(i3,1x,i2,1x,i2)') ihr,imin,isec
time_ext = FLOAT( (ihr*3600)+(imin*60)+isec )
CALL cvttsnd
( time_ext, timsnd, tmstrln )
grdbasfn = dir_extd(1:ldir)//extdname(1:lenrun) &
& //'.'//fmtn//'grdbas'
lenfil = ldir + lenrun + 10
filename = dir_extd(1:ldir)//extdname(1:lenrun) &
& //'.'//fmtn//timsnd(1:tmstrln)
lengbf = ldir + lenrun + 4 + tmstrln
WRITE(6,*) 'The external grid and base file, grdbasfn = ', &
& grdbasfn(1:lengbf)
WRITE(6,*) 'The external time dependent file, filename = ', &
& filename(1:lenfil)
!#######################################################################
!
! Read ARPS history dump.
!
!#######################################################################
lengbf = 80
CALL strlnth
( grdbasfn, lengbf)
lenfil = 80
CALL strlnth
( filename, lenfil)
hinfmt = extdfmt
CALL dtaread
(nx,ny,nz,nzsoil, nstyps, &
& hinfmt, nchin,grdbasfn(1:lengbf),lengbf, &
& filename(1:lenfil),lenfil,time, &
& x,y,z,zp,zpsoil,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, &
& tsoil,qsoil,wetcanp,snowdpth, &
& raing,rainc,prcrate, &
& radfrc,radsw,rnflx, &
& radswnet,radlwin, &
& usflx,vsflx,ptsflx,qvsflx, &
& ireturn, tem1,tem2, tem3)
IYEAR = year
IMON = month
IDAY = day
IHR = hour
IFHR1 = 0
IFHR2 = time/3600
IF (trulat1.gt.trulat2) THEN
tmplat = trulat1
trulat1 = trulat2
trulat2 = tmplat
ENDIF
!#######################################################################
!
! Create decoded Grid Description Section data (array KGDS) for
! subroutine ipolates.
!
!#######################################################################
CALL mkigds
(nx,ny,nz,0,igds)
ICOMP=MOD(IGDS(8)/8,2)
CALL W3FI74(IGDS,ICOMP,GDS,LENGDS,NPTS,IRET)
IF(IRET.NE.0) THEN
WRITE(6,*)'RDARPSQPF: ERROR -- Could not create GDS.'
WRITE(6,*)'IRET = ',IRET
WRITE(6,*)'Aborting...'
STOP
ENDIF
CALL FI633
(GDS,KPTR,KGDS,IRET)
IF(IRET.NE.0) THEN
WRITE(6,*)'RDARPSQPF: ERROR -- Could not create KGDS.'
WRITE(6,*)'IRET = ',IRET
WRITE(6,*)'Aborting...'
STOP
ENDIF
KGDS(14) = 1 ! Flag for subroutine gdswiz03
KGDS(15) = 0
KGDS(19) = 0
!#######################################################################
!
! Create bitmap for subroutine ipolates
!
!#######################################################################
IBI = 1 ! Flag indicating that bitmap will be used.
DO i = 1,JMAXIN
KBMS(i) = .FALSE.
END DO
k = 1
DO j = 1,ny
DO i = 1,nx
IF (i.ge.iimin .AND. i.le.iimax .AND. &
& j.ge.jjmin .AND. j.le.jjmax) THEN
KBMS(k) = .TRUE.
ENDIF
k = k + 1
END DO
END DO
!#######################################################################
!
! Convert the rainfall arrays and store the old ones.
!
!#######################################################################
DO 300 j=1,ny-1
DO 300 i=1,nx-1
raint(i,j)=raing(i,j)+rainc(i,j)
300 CONTINUE
CALL ARY2DCV
(nx,ny,raint,ni,nj,accppt)
!#######################################################################
!
! Convert accppt from 0h-now accul. rain to (Tnf-1->Tnf) accul. rain
! (by subtracting tpptold) and store the original value in tpptold
!
!#######################################################################
CALL pptsto
(ni,nj,accppt,tpptold)
k = 1
DO j = 1,ny
DO i = 1,nx
IF (i.lt.nx.AND.j.lt.ny) THEN
tpcp(k) = accppt(i,j)
tpcpold(k) = tpptold(i,j)
maxtpcp = MAX(maxtpcp,tpcp(k))
ENDIF
k = k + 1
END DO
END DO
!#######################################################################
!
! Set foundpcp to one (indicating that QPF has been found) and
! return.
!
!#######################################################################
foundpcp = 1
RETURN
END
!
! ##################################################################
! ##################################################################
! ###### ######
! ###### SUBROUTINE ARY2DCV ######
! ###### ######
! ###### Developed by ######
! ###### Center for Analysis and Prediction of Storms ######
! ###### University of Oklahoma ######
! ###### ######
! ##################################################################
! ##################################################################
SUBROUTINE ARY2DCV(nx,ny,a,ni,nj,b) 27
!#######################################################################
!
! PURPOSE:
!
! Copies the contents of one 2-D array into another.
!
! AUTHOR: ?????
!
! MODIFICATION HISTORY:
! Eric Kemp, February 2000
! Added Documentation.
!
!#######################################################################
!
! Variable Declarations:
!
!#######################################################################
IMPLICIT none
INTEGER nx,ny,ni,nj
REAL a(nx,ny),b(ni,nj)
INTEGER i,j
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
! print *,a(35,35),a(78,68)
DO j=1,nj
DO i=1,ni
b(i,j)=a(i,j)
ENDDO
ENDDO
RETURN
END