! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE VINTRPVAR_WRF ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE vintrpvar_wrf(nx,ny,nz_ext,nz,kbgn,kend,lvlprof, & 11 iprtopt,intropt,zext,za,varext, & zsnd,varsnd,arpsbar,arpsprt,tem_ext) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Vertically interpolate WRF data which is in the same horizontal ! grid as ARPS data to ARPS height levels. External data (WRF) is ! valid vertically from kbgn to kend ! !----------------------------------------------------------------------- ! ! AUTHOR: Yunheng Wang ! 9/20/2003 Changed from mkarpsvar in src/ext2arps/extlib.f90. ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! INPUT: ! ! nx Number of grid points in the x-direction (east/west) ! for the ARPS grid ! ny Number of grid points in the y-direction (north/south) ! for the ARPS grid ! ! nz_ext Number of grid points in the vertical ! for the external grid ! ! nz Number of grid points in the vertical ! for the ARPS grid ! ! intropt Option indicating to interpolate perturbation or total ! variables: ! = 1 Interpolate perturbation variables and add to base ! sounding (default); ! = 2 Interploate total variables. ! iprtopt Flag for producing a perturbation variable ! iprtopt = 1 Produce mean and perturbation field ! iprtopt = 0 Produce mean and total field ! ! zext Array of heights of the external grid ! za Array of heights of ARPS physical heights ! zsnd 1-D array of height representing a mean sounding ! over domain ! varsnd 1-D array of variable representing a mean sounding ! over domain ! ! OUTPUT: ! ! arpsbar 3-D array of mean field on ARPS levels ! arpsprt 3-D array of perturbation (iprtopt=1) or ! total (iprtopt=0) variable at ARPS grid locations ! !----------------------------------------------------------------------- ! IMPLICIT NONE ! !----------------------------------------------------------------------- ! ! Input variables ! !----------------------------------------------------------------------- ! INTEGER, INTENT(IN) :: nx,ny ! ARPS grid dimensions INTEGER, INTENT(IN) :: nz_ext ! external grid dimensions INTEGER, INTENT(IN) :: nz ! ARPS grid dimensions INTEGER, INTENT(IN) :: kbgn INTEGER, INTENT(IN) :: kend INTEGER, INTENT(IN) :: lvlprof ! levels in mean sounding INTEGER, INTENT(IN) :: intropt ! interpolation option INTEGER, INTENT(IN) :: iprtopt ! perturbation generation flag REAL, INTENT(IN) :: zext(nx,ny,nz_ext) ! heights of external levels ! interpolated to ARPS grid locs REAL, INTENT(IN) :: za(nx,ny,nz) ! ARPS physical heights REAL, INTENT(IN) :: varext(nx,ny,nz_ext) ! variable to convert REAL, INTENT(IN) :: zsnd(lvlprof) ! 1-D array of level heights REAL, INTENT(IN) :: varsnd(lvlprof) ! 1-D array of level-means ! !----------------------------------------------------------------------- ! ! Output variables ! !----------------------------------------------------------------------- ! REAL, INTENT(OUT) :: arpsbar( nx, ny, nz) ! 3-D array of level-means REAL, INTENT(OUT) :: arpsprt( nx, ny, nz) ! Output array, perturnbation variable ! or total variable (see iprtopt) REAL, INTENT(INOUT) :: tem_ext(nx,ny,nz_ext) ! !----------------------------------------------------------------------- ! ! Misc. local variables: ! !----------------------------------------------------------------------- ! INTEGER :: i,j,k,ka,kl REAL :: wlow REAL :: topprt,botprt,arpstop,arpsbot ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! !----------------------------------------------------------------------- ! ! Subtract horizontal mean from external fields. ! !----------------------------------------------------------------------- ! IF (intropt == 1) THEN DO j=1,ny DO i=1,nx DO k=1,nz_ext DO kl=2,lvlprof-1 IF(zsnd(kl) > zext(i,j,k)) EXIT END DO wlow=(zsnd(kl)-zext(i,j,k)) / (zsnd(kl)-zsnd(kl-1)) tem_ext(i,j,k)= varext(i,j,k)- & ((1.-wlow)*varsnd(kl) + wlow*varsnd(kl-1)) END DO END DO END DO ELSE tem_ext(:,:,:) = varext(:,:,:) ENDIF ! !----------------------------------------------------------------------- ! ! Loop through all ARPS grid points ! !----------------------------------------------------------------------- ! DO j = 1,ny DO i = 1,nx ! !----------------------------------------------------------------------- ! ! Interpolate from the mean sounding to get arpsbar ! !----------------------------------------------------------------------- ! DO ka=1,nz DO kl=2,lvlprof-1 IF(zsnd(kl) > za(i,j,ka)) EXIT END DO wlow = (zsnd(kl)-za(i,j,ka)) / (zsnd(kl)-zsnd(kl-1)) arpsbar(i,j,ka)= (1.-wlow)*varsnd(kl) + wlow*varsnd(kl-1) END DO ! !----------------------------------------------------------------------- ! ! Find vertical location ! and interpolate in vertical between two horizontal ! interpolations on the external grid surfaces. ! ! Extrapolation is done by assuming the perturbation ! from mean is constant. ! !----------------------------------------------------------------------- ! botprt = tem_ext(i,j,kbgn) topprt = tem_ext(i,j,kend) DO ka=1,nz IF(za(i,j,ka) < zext(i,j,kbgn)) THEN arpsprt(i,j,ka) = botprt ELSE IF(za(i,j,ka) > zext(i,j,kend)) THEN arpsprt(i,j,ka) = topprt ELSE DO kl=kbgn+1,kend-1 IF(zext(i,j,kl) > za(i,j,ka)) EXIT END DO wlow = (zext(i,j,kl)- za(i,j,ka))/ & (zext(i,j,kl)-zext(i,j,kl-1)) arpstop = tem_ext(i,j,kl) arpsbot = tem_ext(i,j,kl-1) arpsprt(i,j,ka)=(1.-wlow)*arpstop+wlow*arpsbot END IF END DO END DO END DO ! !----------------------------------------------------------------------- ! ! If total quantity, rather than perturbation quantity desired, ! add the level mean to the interpolated perturbation variable ! at each grid point. ! !----------------------------------------------------------------------- ! IF(iprtopt == 0 .and. intropt == 1) THEN arpsprt(:,:,:) = arpsprt(:,:,:) + arpsbar(:,:,:) ELSE IF(iprtopt == 1 .and. intropt == 2) THEN arpsprt(:,:,:) = arpsprt(:,:,:) - arpsbar(:,:,:) END IF RETURN END SUBROUTINE vintrpvar_wrf ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE VINTRPVLZ_WRF ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE vintrpvlz_wrf(nx,ny,nz_ext,nz,lvlprof,iprtopt,intropt, & 1 zext,za,varext,zsnd,vlnsnd,arpsbar,arpsprt, & tem_ext) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Vertically interpolate WRF pressure which is in the same horizontal ! grid as ARPS data to ARPS height levels ! !----------------------------------------------------------------------- ! ! AUTHOR: Yunheng Wang ! 9/20/2003. Changed from mkarpsvlz in src/ext2arps/extlib.f90 ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! INPUT: ! ! nx Number of grid points in the x-direction (east/west) ! for the ARPS grid ! ny Number of grid points in the y-direction (north/south) ! for the ARPS grid ! ! nz_ext Number of grid points in the vertical ! for the external grid ! ! nz Number of grid points in the vertical ! for the ARPS grid ! ! intropt Option indicating to interpolate perturbation or total ! variables: ! = 1 Interpolate perturbation variables and add to base ! sounding (default); ! = 2 Interploate total variables. ! iprtopt Flag for producing a perturbation variable ! iprtopt = 1 Produce mean and perturbation field ! iprtopt = 0 Produce mean and total field ! ! zext Array of heights of the external grid ! za Array of heights of ARPS physical heights ! zsnd 1-D array of height representing a mean sounding ! over domain ! vlnsnd 1-D array of variable representing the log of the ! mean sounding of the variable. ! ! OUTPUT: ! ! arpsbar 3-D array of mean field on ARPS levels ! arpsprt 3-D array of perturbation (iprtopt=1) or ! total (iprtopt=0) variable at ARPS grid locations ! !----------------------------------------------------------------------- ! IMPLICIT NONE ! !----------------------------------------------------------------------- ! ! Input variables ! !----------------------------------------------------------------------- ! INTEGER, INTENT(IN) :: nx,ny ! ARPS grid dimensions INTEGER, INTENT(IN) :: nz_ext ! external grid dimensions INTEGER, INTENT(IN) :: nz ! ARPS grid dimensions INTEGER, INTENT(IN) :: lvlprof ! levels in mean sounding INTEGER, INTENT(IN) :: intropt ! interpolation option INTEGER, INTENT(IN) :: iprtopt ! perturbation generation flag REAL, INTENT(IN) :: zext(nx,ny,nz_ext) ! heights of external levels REAL, INTENT(IN) :: za(nx,ny,nz) ! ARPS physical heights REAL, INTENT(IN) :: varext(nx,ny,nz_ext)! variable to convert REAL, INTENT(IN) :: zsnd(lvlprof) ! 1-D array of level heights REAL, INTENT(IN) :: vlnsnd(lvlprof) ! 1-D array of level-means ! !----------------------------------------------------------------------- ! ! Output variables ! !----------------------------------------------------------------------- ! REAL, INTENT(OUT) :: arpsbar( nx, ny, nz) ! 3-D array of level-means REAL, INTENT(OUT) :: arpsprt( nx, ny, nz) ! Output array, perturnbation variable ! or total variable (see iprtopt) ! !----------------------------------------------------------------------- ! ! Temporary work arrays ! !----------------------------------------------------------------------- ! REAL, INTENT(INOUT) :: tem_ext(nx,ny,nz_ext) ! !----------------------------------------------------------------------- ! ! Misc. local variables: ! !----------------------------------------------------------------------- ! INTEGER :: i,j,k,ka,kl REAL :: wlow REAL :: topprt,botprt,arpstop,arpsbot ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! !----------------------------------------------------------------------- ! ! Subtract horizontal mean from external fields. ! !----------------------------------------------------------------------- ! IF (intropt == 1) THEN DO j=1,ny DO i=1,nx DO k=1,nz_ext DO kl=2,lvlprof-1 IF(zsnd(kl) > zext(i,j,k)) EXIT END DO wlow=(zsnd(kl)-zext(i,j,k)) / (zsnd(kl)-zsnd(kl-1)) tem_ext(i,j,k)=varext(i,j,k)-EXP( & ((1.-wlow)*vlnsnd(kl) + wlow*vlnsnd(kl-1))) END DO END DO END DO ELSE ! intropt=2 tem_ext(:,:,:) = LOG(varext(:,:,:)) ENDIF ! !----------------------------------------------------------------------- ! ! Loop through all ARPS grid points ! !----------------------------------------------------------------------- ! DO j=1,ny DO i=1,nx ! !----------------------------------------------------------------------- ! ! Interpolate from the mean sounding to get arpsbar ! !----------------------------------------------------------------------- ! DO ka=1,nz DO kl=2,lvlprof-1 IF(zsnd(kl) > za(i,j,ka)) EXIT END DO wlow=(zsnd(kl)-za(i,j,ka)) / (zsnd(kl)-zsnd(kl-1)) arpsbar(i,j,ka)=EXP((1.-wlow)*vlnsnd(kl) + wlow*vlnsnd(kl-1)) END DO ! !----------------------------------------------------------------------- ! ! Find vertical location ! and interpolate in vertical between two horizontal ! interpolations on the external grid surfaces. ! ! Extrapolation is done by assuming the perturbation ! from mean is constant. ! !----------------------------------------------------------------------- ! botprt= tem_ext(i,j,1) topprt= tem_ext(i,j,nz_ext) DO ka=1,nz IF(za(i,j,ka) < zext(i,j,1)) THEN arpsprt(i,j,ka)=botprt ELSE IF(za(i,j,ka) > zext(i,j,nz_ext)) THEN arpsprt(i,j,ka)=topprt ELSE DO kl=2,nz_ext-1 IF(zext(i,j,kl) > za(i,j,ka)) EXIT END DO wlow=(zext(i,j,kl)- za(i,j,ka))/ & (zext(i,j,kl)-zext(i,j,kl-1)) arpstop= tem_ext(i,j,kl) arpsbot= tem_ext(i,j,kl-1) arpsprt(i,j,ka)=(1.-wlow)*arpstop+wlow*arpsbot END IF END DO END DO END DO IF(intropt == 2) THEN arpsprt(:,:,:) = EXP(arpsprt(:,:,:)) ENDIF ! !----------------------------------------------------------------------- ! ! If total quantity, rather than perturbation quantity desired, ! add the level mean to the interpolated perturbation variable ! at each grid point. ! !----------------------------------------------------------------------- ! IF(iprtopt == 0 .and. intropt == 1) THEN arpsprt(:,:,:) = arpsprt(:,:,:) + arpsbar(:,:,:) ELSE IF(iprtopt == 1 .and. intropt == 2) THEN arpsprt(:,:,:) = arpsprt(:,:,:) - arpsbar(:,:,:) END IF ! RETURN END SUBROUTINE vintrpvlz_wrf ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE VINTRPSOIL_WRF ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE vintrpsoil_wrf(nx,ny,nzsoil_ext,nzsoil,soilmodel_option, & 1 zpsoilext,zpsoil,tsoil_in,qsoil_in, & tsoil_out,qsoil_out) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Vertically interpolate WRF soil variables which is in the same horizontal ! grid as ARPS data to ARPS soil layers ! !----------------------------------------------------------------------- ! ! AUTHOR: Yunheng Wang ! 9/20/2003. Based on mkarpsvar and intrp_soil etc. ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! INPUT: ! ! nx Number of grid points in the x-direction (east/west) ! for the ARPS grid ! ny Number of grid points in the y-direction (north/south) ! for the ARPS grid ! ! nzsoil_ext Number of grid points in the vertical soil layers ! for the external grid ! ! nzsoil Number of grid points in the vertical soil layers ! for the ARPS grid ! ! soilmodel_option Flag for ARPS soil model scheme ! = 1 Two-layer Force-restore model (Noilhan/Planton scheme) ! = 2 Multi-layer 'OUSoil' scheme (Based on OSU/NCEP ETA scheme) ! ! zpsoilext Array of heights of the external grid ! zpsoil Array of heights of ARPS physical heights ! ! tsoil_in ! qsoil_in ! ! OUTPUT: ! ! tsoil_out 3D array for soil temperature in ARPS grid ! qsoil_out 3D array for soil moisture in ARPS grid ! !----------------------------------------------------------------------- ! IMPLICIT NONE ! !----------------------------------------------------------------------- ! ! Input variables ! !----------------------------------------------------------------------- ! INTEGER, INTENT(IN) :: nx,ny ! ARPS grid dimensions INTEGER, INTENT(IN) :: nzsoil_ext ! external grid dimensions INTEGER, INTENT(INOUT) :: nzsoil ! ARPS grid dimensions INTEGER, INTENT(IN) :: soilmodel_option REAL, INTENT(IN) :: zpsoilext(nx,ny,nzsoil_ext) REAL, INTENT(INOUT) :: zpsoil(nx,ny,nzsoil) REAL, INTENT(IN) :: tsoil_in(nx,ny,nzsoil_ext) REAL, INTENT(IN) :: qsoil_in(nx,ny,nzsoil_ext) ! !----------------------------------------------------------------------- ! ! Output variables ! !----------------------------------------------------------------------- ! REAL, INTENT(OUT) :: tsoil_out(nx,ny,nzsoil) REAL, INTENT(OUT) :: qsoil_out(nx,ny, nzsoil) ! !----------------------------------------------------------------------- ! ! Temporary work arrays ! !----------------------------------------------------------------------- ! ! !----------------------------------------------------------------------- ! ! Misc. local variables: ! !----------------------------------------------------------------------- ! INTEGER :: i,j,k,m REAL :: w1,w2, dist ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! IF (soilmodel_option == 1) THEN ! old ARPS Force-Restore Soil model zpsoil(:,:,1) = 0.05 zpsoil(:,:,2) = 0.55 nzsoil = 2 END IF ! !----------------------------------------------------------------------- ! ! Loop through all ARPS grid points ! !----------------------------------------------------------------------- ! DO j=1,ny DO i=1,nx DO k = 1, nzsoil IF(zpsoil(i,j,k) < zpsoilext(i,j,1)) THEN ! extrapolation dist = zpsoilext(i,j,1) - zpsoil(i,j,k) w1 = (tsoil_in(i,j,1) - tsoil_in(i,j,2)) / & (zpsoilext(i,j,2)- zpsoilext(i,j,1)) w2 = (qsoil_in(i,j,1) - qsoil_in(i,j,2)) / & (zpsoilext(i,j,2)- zpsoilext(i,j,1)) tsoil_out(i,j,k) = tsoil_in(i,j,1) + w1*dist qsoil_out(i,j,k) = qsoil_in(i,j,1) + w2*dist ELSE IF(zpsoil(i,j,k) >= zpsoilext(i,j,nzsoil_ext)) THEN ! constant layers tsoil_out(i,j,k) = tsoil_in(i,j,nzsoil_ext) qsoil_out(i,j,k) = qsoil_in(i,j,nzsoil_ext) ELSE ! linear interpolation DO m = 1, nzsoil_ext IF(zpsoilext(i,j,m) > zpsoil(i,j,k)) EXIT END DO w1 = (zpsoilext(i,j,m) - zpsoil(i,j,k)) / & (zpsoilext(i,j,m)- zpsoilext(i,j,m-1)) w2 = (zpsoil(i,j,k) - zpsoilext(i,j,m-1) ) / & (zpsoilext(i,j,m)- zpsoilext(i,j,m-1)) tsoil_out(:,:,k) = tsoil_in(:,:,m-1)*w1 + tsoil_in(:,:,m)*w2 qsoil_out(:,:,k) = qsoil_in(:,:,m-1)*w1 + qsoil_in(:,:,m)*w2 END IF END DO END DO END DO RETURN END SUBROUTINE vintrpsoil_wrf SUBROUTINE readrain(extdname,io_form,use_wrf_grid,multifile, & 1,10 ncmprx,ncmpry,nx_ext,ny_ext,nz_ext,nx,ny, & iorder,iscl,jscl,x_ext,y_ext,xs2d,ys2d, & dxfld,dyfld,rdxfld,rdyfld, & raing_ext,rainc_ext,raing,rainc,tem1_ext, & istatus) IMPLICIT NONE CHARACTER(LEN=256), INTENT(IN) :: extdname INTEGER, INTENT(IN) :: io_form INTEGER, INTENT(IN) :: use_wrf_grid LOGICAL, INTENT(IN) :: multifile INTEGER, INTENT(IN) :: ncmprx,ncmpry INTEGER, INTENT(IN) :: nx_ext, ny_ext, nz_ext REAL, INTENT(IN) :: x_ext(nx_ext),y_ext(ny_ext) REAL, INTENT(IN) :: dxfld(nx_ext),dyfld(ny_ext),rdxfld(nx_ext),rdyfld(ny_ext) REAL, INTENT(IN) :: tem1_ext (nx_ext,ny_ext,nz_ext) INTEGER, INTENT(IN) :: iorder INTEGER, INTENT(IN) :: nx,ny INTEGER, INTENT(IN) :: iscl(nx,ny),jscl(nx,ny) REAL, INTENT(IN) :: xs2d(nx,ny),ys2d(nx,ny) REAL, INTENT(OUT) :: raing_ext(nx_ext,ny_ext) REAL, INTENT(OUT) :: rainc_ext(nx_ext,ny_ext) REAL, INTENT(OUT) :: raing(nx,ny) REAL, INTENT(OUT) :: rainc(nx,ny) INTEGER, INTENT(OUT) :: istatus !----------------------------------------------------------------------- ! ! Misc. local ! !----------------------------------------------------------------------- INTEGER :: fHndl(ncmprx,ncmpry) CHARACTER(LEN=19) :: timestr = ' ' REAL :: amax, amin INTEGER :: i,j INCLUDE 'mp.inc' !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Begining of executable code ... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IF (myproc == 0) WRITE(6,'(/,1x,2a,/)') 'Reading file ',TRIM(extdname) ! ! blocking inserted for ordering i/o for message passing ! DO i=0,nprocs-1,readstride IF(myproc >= i .AND. myproc <= i+readstride-1) THEN CALL open_wrf_file(TRIM(extdname),io_form,multifile, & .FALSE.,ncmprx,ncmpry,fHndl) CALL get_wrf_Times(fHndl,io_form,multifile,ncmprx,ncmpry, & 1,timestr) CALL getwrfrain(fHndl,io_form,multifile,ncmprx,ncmpry,1, & timestr,nx_ext,ny_ext,raing_ext,rainc_ext,istatus) CALL close_wrf_file(fHndl,io_form,multifile,.FALSE.,ncmprx,ncmpry) END IF IF (mp_opt > 0) CALL mpbarrier END DO IF (istatus /= 0 ) RETURN IF(myproc == 0) WRITE(6,'(1x,2a)') 'Read in precipitation from WRF history dumps at ',timestr CALL a3dmax0(raing_ext ,1,nx_ext,1,nx_ext,1,ny_ext,1,ny_ext, & 1,1,1,1,amax,amin) IF(myproc == 0) WRITE(6,'(1x,2(a,e13.6))') & 'raing_ext_min = ', amin,', raing_ext_max = ',amax CALL a3dmax0(rainc_ext ,1,nx_ext,1,nx_ext,1,ny_ext,1,ny_ext, & 1,1,1,1,amax,amin) IF(myproc == 0) WRITE(6,'(1x,2(a,e13.6))') & 'rainc_ext_min = ', amin,', rainc_ext_max = ',amax !----------------------------------------------------------------------- ! ! Processing PBL grid scale precipitation ! !----------------------------------------------------------------------- IF(use_wrf_grid /= 1) THEN CALL mkarps2d(nx_ext,ny_ext,nx,ny, & iorder,iscl,jscl,x_ext,y_ext, & xs2d,ys2d,raing_ext,raing, & dxfld,dyfld,rdxfld,rdyfld, & tem1_ext(1,1,1),tem1_ext(1,1,2), & tem1_ext(1,1,3),tem1_ext(1,1,4)) ELSE DO j = 2,ny-2 DO i = 2,nx-2 raing(i,j) = raing_ext(i-1,j-1) END DO END DO CALL edgfill(raing, 1,nx,2,nx-2,1,ny,2,ny-2,1,1,1,1) END IF !----------------------------------------------------------------------- ! ! Processing cumulus precipitation ! !----------------------------------------------------------------------- IF(use_wrf_grid /= 1) THEN CALL mkarps2d(nx_ext,ny_ext,nx,ny, & iorder,iscl,jscl,x_ext,y_ext, & xs2d,ys2d,rainc_ext,rainc, & dxfld,dyfld,rdxfld,rdyfld, & tem1_ext(1,1,1),tem1_ext(1,1,2), & tem1_ext(1,1,3),tem1_ext(1,1,4)) ELSE DO j = 2,ny-2 DO i = 2,nx-2 rainc(i,j) = rainc_ext(i-1,j-1) END DO END DO CALL edgfill(rainc, 1,nx,2,nx-2,1,ny,2,ny-2,1,1,1,1) END IF IF (myproc == 0) WRITE(6,'(1x,a)') 'Precipitation data was converted to the ARPS grid:' CALL a3dmax0(raing,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1,amax,amin) IF(myproc == 0) WRITE(6,'(1x,2(a,e13.6))') & 'raing_min= ', amin,', raing_max=',amax CALL a3dmax0(rainc,1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1,amax,amin) IF(myproc == 0) WRITE(6,'(1x,2(a,e13.6))') & 'rainc_min= ', amin,', rainc_max=',amax istatus = 0 RETURN END SUBROUTINE readrain