!
!NCEP_MESO:MODEL_LAYER: PHYSICS
!
!***********************************************************************
SUBROUTINE CUCNVC(NTSD,DT,NCNVC,GPS,RESTRT & 1,8
& ,CLDEFI,LMH,WATER,N_MOIST &
& ,DETA1,DETA2,AETA1,AETA2,ETA1,ETA2 &
& ,PDTOP,PT,PD,RES,PINT,T,Q,TCUCN &
& ,PREC,ACPREC,CUPREC,CUPPT &
& ,SM,HBM2,LPBL,HBOT,HTOP,CNVBOT,CNVTOP &
& ,AVCNVC,ACUTIM,ZERO_3D &
& ,CONFIG_FLAGS &
& ,IDS,IDE,JDS,JDE,KDS,KDE &
& ,IMS,IME,JMS,JME,KMS,KME &
& ,ITS,ITE,JTS,JTE,KTS,KTE)
!***********************************************************************
!$$$ SUBPROGRAM DOCUMENTATION BLOCK
! . . .
! SUBPROGRAM: CUCNVC CONVECTIVE PRECIPITATION OUTER DRIVER
! PRGRMMR: BLACK ORG: W/NP22 DATE: 02-03-21
!
! ABSTRACT:
! CUCVNC DRIVES THE WRF CONVECTION SCHEMES
!
! PROGRAM HISTORY LOG:
! 02-03-21 BLACK - ORIGINATOR
!
! USAGE: CALL CUCNVC FROM SOLVE_RUNSTREAM
!
! ATTRIBUTES:
! LANGUAGE: FORTRAN 90
! MACHINE : IBM SP
!$$$
!-----------------------------------------------------------------------
USE MODULE_CONFIGURE
USE MODULE_STATE_DESCRIPTION
,ONLY : P_QV
USE module_model_constants
USE MODULE_MPP
USE MODULE_CU_BMJ
USE module_cumulus_driver
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
!-----------------------------------------------------------------------
!
INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
,IMS,IME,JMS,JME,KMS,KME &
,ITS,ITE,JTS,JTE,KTS,KTE &
,N_MOIST,NCNVC,NTSD
!
INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: LMH,LPBL
!
REAL,INTENT(IN) :: DT,GPS,PDTOP,PT
!
REAL,INTENT(INOUT) :: ACUTIM,AVCNVC
!
REAL,DIMENSION(KMS:KME-1),INTENT(IN) :: AETA1,AETA2,DETA1,DETA2
REAL,DIMENSION(KMS:KME ),INTENT(IN) :: ETA1,ETA2
!
REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: HBM2,PD,RES,SM
!
REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: ACPREC,CLDEFI &
& ,CNVBOT,CNVTOP &
& ,CUPPT,CUPREC &
& ,HBOT,HTOP,PREC
!
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(INOUT) :: Q,T &
& ,TCUCN
!
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: PINT
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(INOUT) :: ZERO_3D
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME,N_MOIST), INTENT(INOUT) :: WATER
!
LOGICAL,INTENT(IN) :: RESTRT
!
TYPE(GRID_CONFIG_REC_TYPE),INTENT(IN) :: CONFIG_FLAGS
!
!***
!*** LOCAL VARIABLES
!***
INTEGER :: I,ICLDCK,J,K
!
INTEGER,DIMENSION(IMS:IME,JMS:JME) :: LBOT,LOWLYR,LTOP,KPBL
REAL, DIMENSION(IMS:IME,JMS:JME) :: NCA
!
REAL :: CAPA,DPL,DQDT,DTCNVC,DTDT,PCPCOL,PDSL,PLYR,RDTCNVC
!
REAL,DIMENSION(KMS:KME-1) :: QL,TL
!
REAL,DIMENSION(IMS:IME,JMS:JME) :: CUBOT,CUTOP,RAINC,RAINCV,XLAND
!
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME) :: DZ,P8W,P_PHY,PI_PHY &
& ,RQCCUTEN,RQRCUTEN &
& ,RQVCUTEN,RR,RTHCUTEN &
& ,T_PHY,TH_PHY
!
!
LOGICAL :: RESTART,WARM_RAIN
LOGICAL,DIMENSION(IMS:IME,JMS:JME) :: CU_ACT_FLAG
!
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
MYIS1=MAX(IDS+1,ITS)
MYIE1=MIN(IDE-1,ITE)
MYJS2=MAX(JDS+2,JTS)
MYJE2=MIN(JDE-2,JTE)
!-----------------------------------------------------------------------
!
!*** INITIALIZE
!
RESTART=RESTRT
!
IF(NTSD.EQ.0)THEN
RESTART=.FALSE.
CALL BMJINIT
(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN &
& ,CLDEFI,LOWLYR,CP,R_D,RESTART &
& ,IDS,IDE,JDS,JDE,KDS,KDE &
& ,IMS,IME,JMS,JME,KMS,KME &
& ,ITS,ITE,JTS,JTE,KTS,KTE)
!
ENDIF
!-----------------------------------------------------------------------
!
AVCNVC=AVCNVC+1.
ACUTIM=ACUTIM+1.
!
DTCNVC=NCNVC*DT
RDTCNVC=1./DTCNVC
CAPA=R_D/CP
!-----------------------------------------------------------------------
!
DO J=MYJS2,MYJE2
DO I=MYIS1,MYIE1
!
PDSL=PD(I,J)*RES(I,J)
RAINCV(I,J)=0.
RAINC(I,J)=0.
P8W(I,KTS,J)=PD(I,J)+PDTOP+PT
LOWLYR(I,J)=KTE+1-LMH(I,J)
XLAND(I,J)=SM(I,J)+1.
NCA(I,J)=0
KPBL(I,J)=KTE-LPBL(I,J)+1
!
!*** FILL THE INPUT ARRAYS.
!
DO K=KTS,KTE
DPL=DETA1(K)*PDTOP+DETA2(K)*PDSL
QL(K)=AMAX1(Q(I,K,J),EPSQ)
PLYR=AETA1(K)*PDTOP+AETA2(K)*PDSL+PT
TL(K)=T(I,K,J)
!
RR(I,K,J)=PLYR/(R_D*TL(K)*(P608*QL(K)+1.))
T_PHY(I,K,J)=TL(K)
WATER(I,K,J,P_QV)=QL(K)/(1.-QL(K))
TH_PHY(I,K,J)=TL(K)*(1.E5/PLYR)**CAPA
!!! P8W(I,KFLIP,J)=PINT(I,K+1,J)
P8W(I,K+1,J)=ETA1(K+1)*PDTOP+ETA2(K+1)*PDSL+PT
P_PHY(I,K,J)=PLYR
PI_PHY(I,K,J)=(PLYR*1.E-5)**CAPA
DZ(I,K,J)=TL(K)*(P608*QL(K)+1.)*R_D &
& *(P8W(I,K,J)-P8W(I,K+1,J)) &
& /(P_PHY(I,K,J)*G)
!
RTHCUTEN(I,K,J)=0.
RQVCUTEN(I,K,J)=0.
RQCCUTEN(I,K,J)=0.
RQRCUTEN(I,K,J)=0.
ENDDO
!
ENDDO
ENDDO
!-----------------------------------------------------------------------
!
!*** SINGLE-COLUMN CONVECTION
!
!-----------------------------------------------------------------------
NCA=0
!
CALL CUMULUS_DRIVER
(NTSD,DT,GPS,N_MOIST &
& ,RTHCUTEN,RQVCUTEN,ZERO_3D,ZERO_3D &
& ,ZERO_3D,ZERO_3D,RAINC,RAINCV,NCA &
& ,ZERO_3D,ZERO_3D,TH_PHY,T_PHY,ZERO_3D,WATER &
& ,DZ,P8W,P_PHY,PI_PHY &
& ,CONFIG_FLAGS,ZERO_3D,RR,NCNVC &
& ,CLDEFI,LOWLYR,XLAND,CU_ACT_FLAG,WARM_RAIN &
& ,HTOP,HBOT,KPBL &
& ,IDS,IDE,JDS,JDE,KDS,KDE &
& ,IMS,IME,JMS,JME,KMS,KME &
& ,MYIS1,MYIE1,MYJS2,MYJE2,KTS,KTE )
! & ,HTOP,HBOT ) !optional arguments
! & ,LBOT=LBOT,LTOP=LTOP,LPBL=LPBL ) !optional arguments
!
!-----------------------------------------------------------------------
!
DO J=MYJS2,MYJE2
DO I=MYIS1,MYIE1
!
IF(HBM2(I,J).GT.0.5)THEN
!
!*** UPDATE TEMPERATURE, SPECIFIC HUMIDITY, AND HEATING.
!*** THE FLIP IS BECAUSE RTHCUTEN AND RQVCUTEN REACH THIS POINT
!*** WITH LAYER 1 AT THE BOTTOM.
!
DO K=KTS,KTE
!
!*** RQVCUTEN IN BMJDRV IS THE MIXING RATIO TENDENCY,
!*** SO RETRIEVE DQDT BY CONVERTING TO SPECIFIC HUMIDITY.
!
DQDT=RQVCUTEN(I,K,J)/(1.+WATER(I,K,J,P_QV))**2
!
!*** RTHCUTEN IN BMJDRV IS DTDT OVER PI,
!
DTDT=RTHCUTEN(I,K,J)*PI_PHY(I,K,J)
T(I,K,J)=T(I,K,J)+DTDT*DTCNVC
Q(I,K,J)=Q(I,K,J)+DQDT*DTCNVC
TCUCN(I,K,J)=TCUCN(I,K,J)+DTDT
ENDDO
!
!*** UPDATE PRECIPITATION
!
PCPCOL=RAINCV(I,J)*1.E-3*NCNVC
PREC(I,J)=PREC(I,J)+PCPCOL
ACPREC(I,J)=ACPREC(I,J)+PCPCOL
CUPREC(I,J)=CUPREC(I,J)+PCPCOL
CUPPT(I,J)=CUPPT(I,J)+PCPCOL
!
!*** SAVE CLOUD TOP AND BOTTOM FOR RADIATION.
!
IF(LTOP(I,J).GT.0.AND.LTOP(I,J).LT.KTE+1)THEN
HTOP(I,J)=MAX(REAL(LTOP(I,J)),HTOP(I,J))
CNVTOP(I,J)=MAX(REAL(LTOP(I,J)),CNVTOP(I,J))
ENDIF
IF(LBOT(I,J).GT.0.AND.LBOT(I,J).LT.KTE+1)THEN
HBOT(I,J)=MIN(REAL(LBOT(I,J)),HBOT(I,J))
CNVBOT(I,J)=MIN(REAL(LBOT(I,J)),CNVBOT(I,J))
ENDIF
ENDIF
!
ENDDO
ENDDO
!-----------------------------------------------------------------------
!
END SUBROUTINE CUCNVC
!
!-----------------------------------------------------------------------