/wrfv2_fire/phys/module_cu_tiedtke.F
FORTRAN Legacy | 3558 lines | 2424 code | 127 blank | 1007 comment | 44 complexity | 8096b897f66f6a9493ad2bce5123e39f MD5 | raw file
Possible License(s): AGPL-1.0
Large files files are truncated, but you can click here to view the full file
- !-----------------------------------------------------------------------
- !
- !WRF:MODEL_LAYER:PHYSICS
- !
- !####################TIEDTKE SCHEME#########################
- ! Taken from the IPRC iRAM - Yuqing Wang, University of Hawaii
- ! Added by Chunxi Zhang and Yuqing Wang to WRF3.2, May, 2010
- ! refenrence: Tiedtke (1989, MWR, 117, 1779-1800)
- ! Nordeng, T.E., (1995), CAPE closure and organized entrainment/detrainment
- ! Yuqing Wang et al. (2003,J. Climate, 16, 1721-1738) for improvements
- ! for cloud top detrainment
- ! (2004, Mon. Wea. Rev., 132, 274-296), improvements for PBL clouds
- ! (2007,Mon. Wea. Rev., 135, 567-585), diurnal cycle of precipitation
- ! This scheme is on testing
- !###########################################################
- MODULE module_cu_tiedtke
- !
- !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ! epsl--- allowed minimum value for floating calculation
- !---------------------------------------------------------------
- real,parameter :: epsl = 1.0e-20
- real,parameter :: t000 = 273.15
- real,parameter :: hgfr = 233.15 ! defined in param.f in explct
- !-------------------------------------------------------------
- ! Ends the parameters set
- !++++++++++++++++++++++++++++
- REAL,PRIVATE :: G,CPV
- REAL :: API,A,EOMEGA,RD,RV,CPD,RCPD,VTMPC1,VTMPC2, &
- RHOH2O,ALV,ALS,ALF,CLW,TMELT,SOLC,STBO,DAYL,YEARL, &
- C1ES,C2ES,C3LES,C3IES,C4LES,C4IES,C5LES,C5IES,ZRG
-
- REAL :: ENTRPEN,ENTRSCV,ENTRMID,ENTRDD,CMFCTOP,RHM,RHC, &
- CMFCMAX,CMFCMIN,CMFDEPS,RHCDD,CPRCON,CRIRH,ZBUO0, &
- fdbk,ZTAU
-
- INTEGER :: orgen,nturben,cutrigger
- REAL :: CVDIFTS, CEVAPCU1, CEVAPCU2,ZDNOPRC
-
-
- PARAMETER(A=6371.22E03, &
- ALV=2.5008E6, &
- ALS=2.8345E6, &
- ALF=ALS-ALV, &
- CPD=1005.46, &
- CPV=1869.46, & ! CPV in module is 1846.4
- RCPD=1.0/CPD, &
- RHOH2O=1.0E03, &
- TMELT=273.16, &
- G=9.806, & ! G=9.806
- ZRG=1.0/G, &
- RD=287.05, &
- RV=461.51, &
- C1ES=610.78, &
- C2ES=C1ES*RD/RV, &
- C3LES=17.269, &
- C4LES=35.86, &
- C5LES=C3LES*(TMELT-C4LES), &
- C3IES=21.875, &
- C4IES=7.66, &
- C5IES=C3IES*(TMELT-C4IES), &
- API=3.141593, & ! API=2.0*ASIN(1.)
- VTMPC1=RV/RD-1.0, &
- VTMPC2=CPV/CPD-1.0, &
- CVDIFTS=1.0, &
- CEVAPCU1=1.93E-6*261.0*0.5/G, &
- CEVAPCU2=1.E3/(38.3*0.293) )
-
- ! SPECIFY PARAMETERS FOR MASSFLUX-SCHEME
- ! --------------------------------------
- ! These are tunable parameters
- !
- ! ENTRPEN: AVERAGE ENTRAINMENT RATE FOR PENETRATIVE CONVECTION
- ! -------
- !
- PARAMETER(ENTRPEN=1.0E-4)
- !
- ! ENTRSCV: AVERAGE ENTRAINMENT RATE FOR SHALLOW CONVECTION
- ! -------
- !
- PARAMETER(ENTRSCV=1.2E-3)
- !
- ! ENTRMID: AVERAGE ENTRAINMENT RATE FOR MIDLEVEL CONVECTION
- ! -------
- !
- PARAMETER(ENTRMID=1.0E-4)
- !
- ! ENTRDD: AVERAGE ENTRAINMENT RATE FOR DOWNDRAFTS
- ! ------
- !
- PARAMETER(ENTRDD =2.0E-4)
- !
- ! CMFCTOP: RELATIVE CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANCY LEVEL
- ! -------
- !
- PARAMETER(CMFCTOP=0.30)
- !
- ! CMFCMAX: MAXIMUM MASSFLUX VALUE ALLOWED FOR UPDRAFTS ETC
- ! -------
- !
- PARAMETER(CMFCMAX=1.0)
- !
- ! CMFCMIN: MINIMUM MASSFLUX VALUE (FOR SAFETY)
- ! -------
- !
- PARAMETER(CMFCMIN=1.E-10)
- !
- ! CMFDEPS: FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS
- ! -------
- !
- PARAMETER(CMFDEPS=0.30)
- !
- ! CPRCON: COEFFICIENTS FOR DETERMINING CONVERSION FROM CLOUD WATER
- !
- PARAMETER(CPRCON = 1.1E-3/G)
- !
- ! ZDNOPRC: The pressure depth below which no precipitation
- !
- PARAMETER(ZDNOPRC =1.5E4)
- !--------------------
- PARAMETER(orgen=1) ! Old organized entrainment rate
- ! PARAMETER(orgen=2) ! New organized entrainment rate
- PARAMETER(nturben=1) ! old deep turburent entrainment/detrainment rate
- ! PARAMETER(nturben=2) ! New deep turburent entrainment/detrainment rate
- PARAMETER(cutrigger=1) ! Old trigger function
- ! PARAMETER(cutrigger=2) ! New trigger function
- !
- !--------------------
- PARAMETER(RHC=0.80,RHM=1.0,ZBUO0=0.50)
- !--------------------
- PARAMETER(CRIRH=0.70,fdbk = 1.0,ZTAU = 1800.0)
- !--------------------
- LOGICAL :: LMFPEN,LMFMID,LMFSCV,LMFDD,LMFDUDV
- PARAMETER(LMFPEN=.TRUE.,LMFMID=.TRUE.,LMFSCV=.TRUE.,LMFDD=.TRUE.,LMFDUDV=.TRUE.)
- !--------------------
- !#################### END of Variables definition##########################
- !-----------------------------------------------------------------------
- !
- CONTAINS
- !-----------------------------------------------------------------------
- SUBROUTINE CU_TIEDTKE( &
- DT,ITIMESTEP,STEPCU &
- ,RAINCV,PRATEC,QFX,HFX,ZNU &
- ,U3D,V3D,W,T3D,QV3D,QC3D,QI3D,PI3D,RHO3D &
- ,QVFTEN,QVPBLTEN &
- ,DZ8W,PCPS,P8W,XLAND,CU_ACT_FLAG &
- ,CUDT, CURR_SECS, ADAPT_STEP_FLAG &
- ,CUDTACTTIME &
- ,ids,ide, jds,jde, kds,kde &
- ,ims,ime, jms,jme, kms,kme &
- ,its,ite, jts,jte, kts,kte &
- ,RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN &
- ,RUCUTEN, RVCUTEN &
- ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS &
- )
- !-------------------------------------------------------------------
- IMPLICIT NONE
- !-------------------------------------------------------------------
- !-- U3D 3D u-velocity interpolated to theta points (m/s)
- !-- V3D 3D v-velocity interpolated to theta points (m/s)
- !-- TH3D 3D potential temperature (K)
- !-- T3D temperature (K)
- !-- QV3D 3D water vapor mixing ratio (Kg/Kg)
- !-- QC3D 3D cloud mixing ratio (Kg/Kg)
- !-- QI3D 3D ice mixing ratio (Kg/Kg)
- !-- RHO3D 3D air density (kg/m^3)
- !-- P8w 3D hydrostatic pressure at full levels (Pa)
- !-- Pcps 3D hydrostatic pressure at half levels (Pa)
- !-- PI3D 3D exner function (dimensionless)
- !-- RTHCUTEN Theta tendency due to
- ! cumulus scheme precipitation (K/s)
- !-- RUCUTEN U wind tendency due to
- ! cumulus scheme precipitation (K/s)
- !-- RVCUTEN V wind tendency due to
- ! cumulus scheme precipitation (K/s)
- !-- RQVCUTEN Qv tendency due to
- ! cumulus scheme precipitation (kg/kg/s)
- !-- RQRCUTEN Qr tendency due to
- ! cumulus scheme precipitation (kg/kg/s)
- !-- RQCCUTEN Qc tendency due to
- ! cumulus scheme precipitation (kg/kg/s)
- !-- RQSCUTEN Qs tendency due to
- ! cumulus scheme precipitation (kg/kg/s)
- !-- RQICUTEN Qi tendency due to
- ! cumulus scheme precipitation (kg/kg/s)
- !-- RAINC accumulated total cumulus scheme precipitation (mm)
- !-- RAINCV cumulus scheme precipitation (mm)
- !-- PRATEC precipitiation rate from cumulus scheme (mm/s)
- !-- dz8w dz between full levels (m)
- !-- QFX upward moisture flux at the surface (kg/m^2/s)
- !-- DT time step (s)
- !-- ids start index for i in domain
- !-- ide end index for i in domain
- !-- jds start index for j in domain
- !-- jde end index for j in domain
- !-- kds start index for k in domain
- !-- kde end index for k in domain
- !-- ims start index for i in memory
- !-- ime end index for i in memory
- !-- jms start index for j in memory
- !-- jme end index for j in memory
- !-- kms start index for k in memory
- !-- kme end index for k in memory
- !-- its start index for i in tile
- !-- ite end index for i in tile
- !-- jts start index for j in tile
- !-- jte end index for j in tile
- !-- kts start index for k in tile
- !-- kte end index for k in tile
- !-------------------------------------------------------------------
- INTEGER, INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
- ims,ime, jms,jme, kms,kme, &
- its,ite, jts,jte, kts,kte, &
- ITIMESTEP, &
- STEPCU
- REAL, INTENT(IN) :: &
- DT
- REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN) :: &
- XLAND
- REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: &
- RAINCV, PRATEC
- LOGICAL, DIMENSION(IMS:IME,JMS:JME), INTENT(INOUT) :: &
- CU_ACT_FLAG
- REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN) :: &
- DZ8W, &
- P8w, &
- Pcps, &
- PI3D, &
- QC3D, &
- QVFTEN, &
- QVPBLTEN, &
- QI3D, &
- QV3D, &
- RHO3D, &
- T3D, &
- U3D, &
- V3D, &
- W
- !--------------------------- OPTIONAL VARS ----------------------------
-
- REAL, DIMENSION(ims:ime, kms:kme, jms:jme), &
- OPTIONAL, INTENT(INOUT) :: &
- RQCCUTEN, &
- RQICUTEN, &
- RQVCUTEN, &
- RTHCUTEN, &
- RUCUTEN, &
- RVCUTEN
-
- !
- ! Flags relating to the optional tendency arrays declared above
- ! Models that carry the optional tendencies will provdide the
- ! optional arguments at compile time; these flags all the model
- ! to determine at run-time whether a particular tracer is in
- ! use or not.
- !
- LOGICAL, OPTIONAL :: &
- F_QV &
- ,F_QC &
- ,F_QR &
- ,F_QI &
- ,F_QS
-
- ! Adaptive time-step variables
- REAL, INTENT(IN ) :: CUDT
- REAL, INTENT(IN ) :: CURR_SECS
- LOGICAL,INTENT(IN ) , OPTIONAL :: ADAPT_STEP_FLAG
- REAL, INTENT (INOUT) :: CUDTACTTIME
- !--------------------------- LOCAL VARS ------------------------------
- REAL, DIMENSION(ims:ime, jms:jme) :: &
- QFX, &
- HFX
- REAL :: &
- DELT, &
- RDELT
- REAL , DIMENSION(its:ite) :: &
- RCS, &
- RN, &
- EVAP, &
- heatflux, &
- rho2d
- INTEGER , DIMENSION(its:ite) :: SLIMSK
-
- REAL , DIMENSION(its:ite, kts:kte+1) :: &
- PRSI
- REAL , DIMENSION(its:ite, kts:kte) :: &
- DEL, &
- DOT, &
- PHIL, &
- PRSL, &
- Q1, &
- Q2, &
- Q3, &
- Q1B, &
- Q1BL, &
- Q11, &
- Q12, &
- T1, &
- U1, &
- V1, &
- ZI, &
- ZL, &
- OMG, &
- GHT
- INTEGER, DIMENSION(its:ite) :: &
- KBOT, &
- KTOP
- INTEGER :: &
- I, &
- IM, &
- J, &
- K, &
- KM, &
- KP, &
- KX
- LOGICAL :: run_param, doing_adapt_dt , decided
- !-------other local variables----
- INTEGER,DIMENSION( its:ite ) :: KTYPE
- REAL, DIMENSION( kts:kte ) :: sig1 ! half sigma levels
- REAL, DIMENSION( kms:kme ) :: ZNU
- INTEGER :: zz
- !-----------------------------------------------------------------------
- !
- !
- !*** CHECK TO SEE IF THIS IS A CONVECTION TIMESTEP
- !
- ! Initialization for adaptive time step.
- doing_adapt_dt = .FALSE.
- IF ( PRESENT(adapt_step_flag) ) THEN
- IF ( adapt_step_flag ) THEN
- doing_adapt_dt = .TRUE.
- IF ( cudtacttime .EQ. 0. ) THEN
- cudtacttime = curr_secs + cudt*60.
- END IF
- END IF
- END IF
- ! Do we run through this scheme or not?
- ! Test 1: If this is the initial model time, then yes.
- ! ITIMESTEP=1
- ! Test 2: If the user asked for the cumulus to be run every time step, then yes.
- ! CUDT=0 or STEPCU=1
- ! Test 3: If not adaptive dt, and this is on the requested cumulus frequency, then yes.
- ! MOD(ITIMESTEP,STEPCU)=0
- ! Test 4: If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
- ! CURR_SECS >= CUDTACTTIME
- ! If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
- ! to TRUE. The decided flag says that one of these tests was able to say "yes", run the scheme.
- ! We only proceed to other tests if the previous tests all have left decided as FALSE.
- ! If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
- ! cumulus run.
- decided = .FALSE.
- run_param = .FALSE.
- IF ( ( .NOT. decided ) .AND. &
- ( itimestep .EQ. 1 ) ) THEN
- run_param = .TRUE.
- decided = .TRUE.
- END IF
- IF ( ( .NOT. decided ) .AND. &
- ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
- run_param = .TRUE.
- decided = .TRUE.
- END IF
- IF ( ( .NOT. decided ) .AND. &
- ( .NOT. doing_adapt_dt ) .AND. &
- ( MOD(itimestep,stepcu) .EQ. 0 ) ) THEN
- run_param = .TRUE.
- decided = .TRUE.
- END IF
- IF ( ( .NOT. decided ) .AND. &
- ( doing_adapt_dt ) .AND. &
- ( curr_secs .GE. cudtacttime ) ) THEN
- run_param = .TRUE.
- decided = .TRUE.
- cudtacttime = curr_secs + cudt*60
- END IF
- !-----------------------------------------------------------------------
- IF(run_param) THEN
- DO J=JTS,JTE
- DO I=ITS,ITE
- CU_ACT_FLAG(I,J)=.TRUE.
- ENDDO
- ENDDO
-
- IM=ITE-ITS+1
- KX=KTE-KTS+1
- DELT=DT*STEPCU
- RDELT=1./DELT
- !------------- J LOOP (OUTER) --------------------------------------------------
- DO J=jts,jte
- ! --------------- compute zi and zl -----------------------------------------
- DO i=its,ite
- ZI(I,KTS)=0.0
- ENDDO
- DO k=kts+1,kte
- KM=k-1
- DO i=its,ite
- ZI(I,K)=ZI(I,KM)+dz8w(i,km,j)
- ENDDO
- ENDDO
- DO k=kts+1,kte
- KM=k-1
- DO i=its,ite
- ZL(I,KM)=(ZI(I,K)+ZI(I,KM))*0.5
- ENDDO
- ENDDO
- DO i=its,ite
- ZL(I,KTE)=2.*ZI(I,KTE)-ZL(I,KTE-1)
- ENDDO
- ! --------------- end compute zi and zl -------------------------------------
- DO i=its,ite
- SLIMSK(i)=int(ABS(XLAND(i,j)-2.))
- ENDDO
- DO k=kts,kte
- kp=k+1
- DO i=its,ite
- DOT(i,k)=-0.5*g*rho3d(i,k,j)*(w(i,k,j)+w(i,kp,j))
- ENDDO
- ENDDO
- DO k=kts,kte
- zz = kte+1-k
- DO i=its,ite
- U1(i,zz)=U3D(i,k,j)
- V1(i,zz)=V3D(i,k,j)
- T1(i,zz)=T3D(i,k,j)
- Q1(i,zz)= QV3D(i,k,j)
- if(itimestep == 1) then
- Q1B(i,zz)=0.
- Q1BL(i,zz)=0.
- else
- Q1B(i,zz)=QVFTEN(i,k,j)
- Q1BL(i,zz)=QVPBLTEN(i,k,j)
- endif
- Q2(i,zz)=QC3D(i,k,j)
- Q3(i,zz)=QI3D(i,k,j)
- OMG(i,zz)=DOT(i,k)
- GHT(i,zz)=ZL(i,k)
- PRSL(i,zz) = Pcps(i,k,j)
- ENDDO
- ENDDO
- DO k=kts,kte+1
- zz = kte+2-k
- DO i=its,ite
- PRSI(i,zz) = P8w(i,k,j)
- ENDDO
- ENDDO
- DO k=kts,kte
- zz = kte+1-k
- sig1(zz) = ZNU(k)
- ENDDO
- !###############before call TIECNV, we need EVAP########################
- ! EVAP is the vapor flux at the surface
- !########################################################################
- !
- DO i=its,ite
- EVAP(i) = QFX(i,j)
- heatflux(i)=HFX(i,j)
- rho2d(i) = rho3d(i,1,j)
- ENDDO
- !########################################################################
- CALL TIECNV(U1,V1,T1,Q1,Q2,Q3,Q1B,Q1BL,GHT,OMG,PRSL,PRSI,EVAP,heatflux,rho2d, &
- RN,SLIMSK,KTYPE,IM,KX,KX+1,sig1,DELT)
- DO I=ITS,ITE
- RAINCV(I,J)=RN(I)/STEPCU
- PRATEC(I,J)=RN(I)/(STEPCU * DT)
- ENDDO
- DO K=KTS,KTE
- zz = kte+1-k
- DO I=ITS,ITE
- RTHCUTEN(I,K,J)=(T1(I,zz)-T3D(I,K,J))/PI3D(I,K,J)*RDELT
- RQVCUTEN(I,K,J)=(Q1(I,zz)-QV3D(I,K,J))*RDELT
- RUCUTEN(I,K,J) =(U1(I,zz)-U3D(I,K,J))*RDELT
- RVCUTEN(I,K,J) =(V1(I,zz)-V3D(I,K,J))*RDELT
- ENDDO
- ENDDO
- IF(PRESENT(RQCCUTEN))THEN
- IF ( F_QC ) THEN
- DO K=KTS,KTE
- zz = kte+1-k
- DO I=ITS,ITE
- RQCCUTEN(I,K,J)=(Q2(I,zz)-QC3D(I,K,J))*RDELT
- ENDDO
- ENDDO
- ENDIF
- ENDIF
- IF(PRESENT(RQICUTEN))THEN
- IF ( F_QI ) THEN
- DO K=KTS,KTE
- zz = kte+1-k
- DO I=ITS,ITE
- RQICUTEN(I,K,J)=(Q3(I,zz)-QI3D(I,K,J))*RDELT
- ENDDO
- ENDDO
- ENDIF
- ENDIF
- ENDDO
- ENDIF
- END SUBROUTINE CU_TIEDTKE
- !====================================================================
- SUBROUTINE tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
- RUCUTEN,RVCUTEN, &
- RESTART,P_QC,P_QI,P_FIRST_SCALAR, &
- allowed_to_read, &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte)
- !--------------------------------------------------------------------
- IMPLICIT NONE
- !--------------------------------------------------------------------
- LOGICAL , INTENT(IN) :: allowed_to_read,restart
- INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte
- INTEGER , INTENT(IN) :: P_FIRST_SCALAR, P_QI, P_QC
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
- RTHCUTEN, &
- RQVCUTEN, &
- RQCCUTEN, &
- RQICUTEN, &
- RUCUTEN,RVCUTEN
- INTEGER :: i, j, k, itf, jtf, ktf
- jtf=min0(jte,jde-1)
- ktf=min0(kte,kde-1)
- itf=min0(ite,ide-1)
- IF(.not.restart)THEN
- DO j=jts,jtf
- DO k=kts,ktf
- DO i=its,itf
- RTHCUTEN(i,k,j)=0.
- RQVCUTEN(i,k,j)=0.
- RUCUTEN(i,k,j)=0.
- RVCUTEN(i,k,j)=0.
- ENDDO
- ENDDO
- ENDDO
- IF (P_QC .ge. P_FIRST_SCALAR) THEN
- DO j=jts,jtf
- DO k=kts,ktf
- DO i=its,itf
- RQCCUTEN(i,k,j)=0.
- ENDDO
- ENDDO
- ENDDO
- ENDIF
- IF (P_QI .ge. P_FIRST_SCALAR) THEN
- DO j=jts,jtf
- DO k=kts,ktf
- DO i=its,itf
- RQICUTEN(i,k,j)=0.
- ENDDO
- ENDDO
- ENDDO
- ENDIF
- ENDIF
- END SUBROUTINE tiedtkeinit
- ! ------------------------------------------------------------------------
- !------------This is the combined version for tiedtke---------------
- !----------------------------------------------------------------
- ! In this module only the mass flux convection scheme of the ECMWF is included
- !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- !#############################################################
- !
- ! LEVEL 1 SUBROUTINEs
- !
- !#############################################################
- !********************************************************
- ! subroutine TIECNV
- !********************************************************
- SUBROUTINE TIECNV(pu,pv,pt,pqv,pqc,pqi,pqvf,pqvbl,poz,pomg, &
- pap,paph,evap,hfx,rho,zprecc,lndj,KTYPE,lq,km,km1,sig1,dt)
- !-----------------------------------------------------------------
- ! This is the interface between the meso-scale model and the mass
- ! flux convection module
- !-----------------------------------------------------------------
- implicit none
- real pu(lq,km),pv(lq,km),pt(lq,km),pqv(lq,km),pqvf(lq,km)
- real poz(lq,km),pomg(lq,km),evap(lq),zprecc(lq),pqvbl(lq,km)
- real PHHFL(lq),RHO(lq),hfx(lq)
- REAL PUM1(lq,km), PVM1(lq,km), &
- PTTE(lq,km), PQTE(lq,km), PVOM(lq,km), PVOL(lq,km), &
- PVERV(lq,km), PGEO(lq,km), PAP(lq,km), PAPH(lq,km1)
- REAL PQHFL(lq), ZQQ(lq,km), PAPRC(lq), PAPRS(lq), &
- PRSFC(lq), PSSFC(lq), PAPRSM(lq), PCTE(lq,km)
- REAL ZTP1(lq,km), ZQP1(lq,km), ZTU(lq,km), ZQU(lq,km), &
- ZLU(lq,km), ZLUDE(lq,km), ZMFU(lq,km), ZMFD(lq,km), &
- ZQSAT(lq,km), pqc(lq,km), pqi(lq,km), ZRAIN(lq)
- REAL sig(km1),sig1(km)
- INTEGER ICBOT(lq), ICTOP(lq), KTYPE(lq), lndj(lq)
- REAL dt
- LOGICAL LOCUM(lq)
- real PSHEAT,PSRAIN,PSEVAP,PSMELT,PSDISS,TT
- real ZTMST,ZTPP1,fliq,fice,ZTC,ZALF
- integer i,j,k,lq,lp,km,km1
- ! real TLUCUA
- ! external TLUCUA
- ZTMST=dt
- ! Masv flux diagnostics.
- PSHEAT=0.0
- PSRAIN=0.0
- PSEVAP=0.0
- PSMELT=0.0
- PSDISS=0.0
- DO 8 j=1,lq
- ZRAIN(j)=0.0
- LOCUM(j)=.FALSE.
- PRSFC(j)=0.0
- PSSFC(j)=0.0
- PAPRC(j)=0.0
- PAPRS(j)=0.0
- PAPRSM(j)=0.0
- PQHFL(j)=evap(j)
- PHHFL(j)=hfx(j)
- 8 CONTINUE
- ! CONVERT MODEL VARIABLES FOR MFLUX SCHEME
- DO 10 k=1,km
- DO 10 j=1,lq
- PTTE(j,k)=0.0
- PCTE(j,k)=0.0
- PVOM(j,k)=0.0
- PVOL(j,k)=0.0
- ZTP1(j,k)=pt(j,k)
- ZQP1(j,k)=pqv(j,k)/(1.0+pqv(j,k))
- PUM1(j,k)=pu(j,k)
- PVM1(j,k)=pv(j,k)
- PVERV(j,k)=pomg(j,k)
- PGEO(j,k)=G*poz(j,k)
- TT=ZTP1(j,k)
- ZQSAT(j,k)=TLUCUA(TT)/PAP(j,k)
- ZQSAT(j,k)=MIN(0.5,ZQSAT(j,k))
- ZQSAT(j,k)=ZQSAT(j,k)/(1.-VTMPC1*ZQSAT(j,k))
- PQTE(j,k)=pqvf(j,k)+pqvbl(j,k)
- ZQQ(j,k)=PQTE(j,k)
- 10 CONTINUE
- !
- !-----------------------------------------------------------------------
- !* 2. CALL 'CUMASTR'(MASTER-ROUTINE FOR CUMULUS PARAMETERIZATION)
- !
- CALL CUMASTR_NEW &
- (lq, km, km1, km-1, ZTP1, &
- ZQP1, PUM1, PVM1, PVERV, ZQSAT, &
- PQHFL, ZTMST, PAP, PAPH, PGEO, &
- PTTE, PQTE, PVOM, PVOL, PRSFC, &
- PSSFC, PAPRC, PAPRSM, PAPRS, LOCUM, &
- KTYPE, ICBOT, ICTOP, ZTU, ZQU, &
- ZLU, ZLUDE, ZMFU, ZMFD, ZRAIN, &
- PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT, &
- PCTE, PHHFL, RHO, sig1, lndj)
- !
- ! TO INCLUDE THE CLOUD WATER AND CLOUD ICE DETRAINED FROM CONVECTION
- !
- IF(fdbk.ge.1.0e-9) THEN
- DO 20 K=1,km
- DO 20 j=1,lq
- If(PCTE(j,k).GT.0.0) then
- ZTPP1=pt(j,k)+PTTE(j,k)*ZTMST
- if(ZTPP1.ge.t000) then
- fliq=1.0
- ZALF=0.0
- else if(ZTPP1.le.hgfr) then
- fliq=0.0
- ZALF=ALF
- else
- ZTC=ZTPP1-t000
- fliq=0.0059+0.9941*exp(-0.003102*ZTC*ZTC)
- ZALF=ALF
- endif
- fice=1.0-fliq
- pqc(j,k)=pqc(j,k)+fliq*PCTE(j,k)*ZTMST
- pqi(j,k)=pqi(j,k)+fice*PCTE(j,k)*ZTMST
- PTTE(j,k)=PTTE(j,k)-ZALF*RCPD*fliq*PCTE(j,k)
- Endif
- 20 CONTINUE
- ENDIF
- !
- DO 75 k=1,km
- DO 75 j=1,lq
- pt(j,k)=ZTP1(j,k)+PTTE(j,k)*ZTMST
- ZQP1(j,k)=ZQP1(j,k)+(PQTE(j,k)-ZQQ(j,k))*ZTMST
- pqv(j,k)=ZQP1(j,k)/(1.0-ZQP1(j,k))
- 75 CONTINUE
- DO 85 j=1,lq
- zprecc(j)=amax1(0.0,(PRSFC(j)+PSSFC(j))*ZTMST)
- 85 CONTINUE
- IF (LMFDUDV) THEN
- DO 100 k=1,km
- DO 100 j=1,lq
- pu(j,k)=pu(j,k)+PVOM(j,k)*ZTMST
- pv(j,k)=pv(j,k)+PVOL(j,k)*ZTMST
- 100 CONTINUE
- ENDIF
- !
- RETURN
- END SUBROUTINE TIECNV
- !#############################################################
- !
- ! LEVEL 2 SUBROUTINEs
- !
- !#############################################################
- !***********************************************************
- ! SUBROUTINE CUMASTR_NEW
- !***********************************************************
- SUBROUTINE CUMASTR_NEW &
- (KLON, KLEV, KLEVP1, KLEVM1, PTEN, &
- PQEN, PUEN, PVEN, PVERV, PQSEN, &
- PQHFL, ZTMST, PAP, PAPH, PGEO, &
- PTTE, PQTE, PVOM, PVOL, PRSFC, &
- PSSFC, PAPRC, PAPRSM, PAPRS, LDCUM, &
- KTYPE, KCBOT, KCTOP, PTU, PQU, &
- PLU, PLUDE, PMFU, PMFD, PRAIN, &
- PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT,&
- PCTE, PHHFL, RHO, sig1, lndj)
- !
- !***CUMASTR* MASTER ROUTINE FOR CUMULUS MASSFLUX-SCHEME
- ! M.TIEDTKE E.C.M.W.F. 1986/1987/1989
- !***PURPOSE
- ! -------
- ! THIS ROUTINE COMPUTES THE PHYSICAL TENDENCIES OF THE
- ! PROGNOSTIC VARIABLES T,Q,U AND V DUE TO CONVECTIVE PROCESSES.
- ! PROCESSES CONSIDERED ARE: CONVECTIVE FLUXES, FORMATION OF
- ! PRECIPITATION, EVAPORATION OF FALLING RAIN BELOW CLOUD BASE,
- ! SATURATED CUMULUS DOWNDRAFTS.
- !***INTERFACE.
- ! ----------
- ! *CUMASTR* IS CALLED FROM *MSSFLX*
- ! THE ROUTINE TAKES ITS INPUT FROM THE LONG-TERM STORAGE
- ! T,Q,U,V,PHI AND P AND MOISTURE TENDENCIES.
- ! IT RETURNS ITS OUTPUT TO THE SAME SPACE
- ! 1.MODIFIED TENDENCIES OF MODEL VARIABLES
- ! 2.RATES OF CONVECTIVE PRECIPITATION
- ! (USED IN SUBROUTINE SURF)
- ! 3.CLOUD BASE, CLOUD TOP AND PRECIP FOR RADIATION
- ! (USED IN SUBROUTINE CLOUD)
- !***METHOD
- ! ------
- ! PARAMETERIZATION IS DONE USING A MASSFLUX-SCHEME.
- ! (1) DEFINE CONSTANTS AND PARAMETERS
- ! (2) SPECIFY VALUES (T,Q,QS...) AT HALF LEVELS AND
- ! INITIALIZE UPDRAFT- AND DOWNDRAFT-VALUES IN 'CUINI'
- ! (3) CALCULATE CLOUD BASE IN 'CUBASE'
- ! AND SPECIFY CLOUD BASE MASSFLUX FROM PBL MOISTURE BUDGET
- ! (4) DO CLOUD ASCENT IN 'CUASC' IN ABSENCE OF DOWNDRAFTS
- ! (5) DO DOWNDRAFT CALCULATIONS:
- ! (A) DETERMINE VALUES AT LFS IN 'CUDLFS'
- ! (B) DETERMINE MOIST DESCENT IN 'CUDDRAF'
- ! (C) RECALCULATE CLOUD BASE MASSFLUX CONSIDERING THE
- ! EFFECT OF CU-DOWNDRAFTS
- ! (6) DO FINAL CLOUD ASCENT IN 'CUASC'
- ! (7) DO FINAL ADJUSMENTS TO CONVECTIVE FLUXES IN 'CUFLX',
- ! DO EVAPORATION IN SUBCLOUD LAYER
- ! (8) CALCULATE INCREMENTS OF T AND Q IN 'CUDTDQ'
- ! (9) CALCULATE INCREMENTS OF U AND V IN 'CUDUDV'
- !***EXTERNALS.
- ! ----------
- ! CUINI: INITIALIZES VALUES AT VERTICAL GRID USED IN CU-PARAMETR.
- ! CUBASE: CLOUD BASE CALCULATION FOR PENETR.AND SHALLOW CONVECTION
- ! CUASC: CLOUD ASCENT FOR ENTRAINING PLUME
- ! CUDLFS: DETERMINES VALUES AT LFS FOR DOWNDRAFTS
- ! CUDDRAF:DOES MOIST DESCENT FOR CUMULUS DOWNDRAFTS
- ! CUFLX: FINAL ADJUSTMENTS TO CONVECTIVE FLUXES (ALSO IN PBL)
- ! CUDQDT: UPDATES TENDENCIES FOR T AND Q
- ! CUDUDV: UPDATES TENDENCIES FOR U AND V
- !***SWITCHES.
- ! --------
- ! LMFPEN=.T. PENETRATIVE CONVECTION IS SWITCHED ON
- ! LMFSCV=.T. SHALLOW CONVECTION IS SWITCHED ON
- ! LMFMID=.T. MIDLEVEL CONVECTION IS SWITCHED ON
- ! LMFDD=.T. CUMULUS DOWNDRAFTS SWITCHED ON
- ! LMFDUDV=.T. CUMULUS FRICTION SWITCHED ON
- !***
- ! MODEL PARAMETERS (DEFINED IN SUBROUTINE CUPARAM)
- ! ------------------------------------------------
- ! ENTRPEN ENTRAINMENT RATE FOR PENETRATIVE CONVECTION
- ! ENTRSCV ENTRAINMENT RATE FOR SHALLOW CONVECTION
- ! ENTRMID ENTRAINMENT RATE FOR MIDLEVEL CONVECTION
- ! ENTRDD ENTRAINMENT RATE FOR CUMULUS DOWNDRAFTS
- ! CMFCTOP RELATIVE CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANCY
- ! LEVEL
- ! CMFCMAX MAXIMUM MASSFLUX VALUE ALLOWED FOR
- ! CMFCMIN MINIMUM MASSFLUX VALUE (FOR SAFETY)
- ! CMFDEPS FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS
- ! CPRCON COEFFICIENT FOR CONVERSION FROM CLOUD WATER TO RAIN
- !***REFERENCE.
- ! ----------
- ! PAPER ON MASSFLUX SCHEME (TIEDTKE,1989)
- !-----------------------------------------------------------------
- !-------------------------------------------------------------------
- IMPLICIT NONE
- !-------------------------------------------------------------------
- INTEGER KLON, KLEV, KLEVP1
- INTEGER KLEVM1
- REAL ZTMST
- REAL PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT, ZCONS2
- INTEGER JK,JL,IKB
- REAL ZQUMQE, ZDQMIN, ZMFMAX, ZALVDCP, ZQALV
- REAL ZHSAT, ZGAM, ZZZ, ZHHAT, ZBI, ZRO, ZDZ, ZDHDZ, ZDEPTH
- REAL ZFAC, ZRH, ZPBMPT, DEPT, ZHT, ZEPS
- INTEGER ICUM, ITOPM2
- REAL PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
- PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
- PTTE(KLON,KLEV), PQTE(KLON,KLEV), &
- PVOM(KLON,KLEV), PVOL(KLON,KLEV), &
- PQSEN(KLON,KLEV), PGEO(KLON,KLEV), &
- PAP(KLON,KLEV), PAPH(KLON,KLEVP1),&
- PVERV(KLON,KLEV), PQHFL(KLON), &
- PHHFL(KLON), RHO(KLON)
- REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
- PLU(KLON,KLEV), PLUDE(KLON,KLEV), &
- PMFU(KLON,KLEV), PMFD(KLON,KLEV), &
- PAPRC(KLON), PAPRS(KLON), &
- PAPRSM(KLON), PRAIN(KLON), &
- PRSFC(KLON), PSSFC(KLON)
- REAL ZTENH(KLON,KLEV), ZQENH(KLON,KLEV),&
- ZGEOH(KLON,KLEV), ZQSENH(KLON,KLEV),&
- ZTD(KLON,KLEV), ZQD(KLON,KLEV), &
- ZMFUS(KLON,KLEV), ZMFDS(KLON,KLEV), &
- ZMFUQ(KLON,KLEV), ZMFDQ(KLON,KLEV), &
- ZDMFUP(KLON,KLEV), ZDMFDP(KLON,KLEV),&
- ZMFUL(KLON,KLEV), ZRFL(KLON), &
- ZUU(KLON,KLEV), ZVU(KLON,KLEV), &
- ZUD(KLON,KLEV), ZVD(KLON,KLEV)
- REAL ZENTR(KLON), ZHCBASE(KLON), &
- ZMFUB(KLON), ZMFUB1(KLON), &
- ZDQPBL(KLON), ZDQCV(KLON)
- REAL ZSFL(KLON), ZDPMEL(KLON,KLEV), &
- PCTE(KLON,KLEV), ZCAPE(KLON), &
- ZHEAT(KLON), ZHHATT(KLON,KLEV), &
- ZHMIN(KLON), ZRELH(KLON)
- REAL sig1(KLEV)
- INTEGER ILAB(KLON,KLEV), IDTOP(KLON), &
- ICTOP0(KLON), ILWMIN(KLON)
- INTEGER KCBOT(KLON), KCTOP(KLON), &
- KTYPE(KLON), IHMIN(KLON), &
- KTOP0, lndj(KLON)
- LOGICAL LDCUM(KLON)
- LOGICAL LODDRAF(KLON), LLO1
- REAL CRIRH1
- !-------------------------------------------
- ! 1. SPECIFY CONSTANTS AND PARAMETERS
- !-------------------------------------------
- 100 CONTINUE
- ZCONS2=1./(G*ZTMST)
- !--------------------------------------------------------------
- !* 2. INITIALIZE VALUES AT VERTICAL GRID POINTS IN 'CUINI'
- !--------------------------------------------------------------
- 200 CONTINUE
- CALL CUINI &
- (KLON, KLEV, KLEVP1, KLEVM1, PTEN, &
- PQEN, PQSEN, PUEN, PVEN, PVERV, &
- PGEO, PAPH, ZGEOH, ZTENH, ZQENH, &
- ZQSENH, ILWMIN, PTU, PQU, ZTD, &
- ZQD, ZUU, ZVU, ZUD, ZVD, &
- PMFU, PMFD, ZMFUS, ZMFDS, ZMFUQ, &
- ZMFDQ, ZDMFUP, ZDMFDP, ZDPMEL, PLU, &
- PLUDE, ILAB)
- !----------------------------------
- !* 3.0 CLOUD BASE CALCULATIONS
- !----------------------------------
- 300 CONTINUE
- !* (A) DETERMINE CLOUD BASE VALUES IN 'CUBASE'
- ! -------------------------------------------
- CALL CUBASE &
- (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
- ZQENH, ZGEOH, PAPH, PTU, PQU, &
- PLU, PUEN, PVEN, ZUU, ZVU, &
- LDCUM, KCBOT, ILAB)
- !* (B) DETERMINE TOTAL MOISTURE CONVERGENCE AND
- !* THEN DECIDE ON TYPE OF CUMULUS CONVECTION
- ! -----------------------------------------
- JK=1
- DO 310 JL=1,KLON
- ZDQCV(JL) =PQTE(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
- ZDQPBL(JL)=0.0
- IDTOP(JL)=0
- 310 CONTINUE
- DO 320 JK=2,KLEV
- DO 315 JL=1,KLON
- ZDQCV(JL)=ZDQCV(JL)+PQTE(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
- IF(JK.GE.KCBOT(JL)) ZDQPBL(JL)=ZDQPBL(JL)+PQTE(JL,JK) &
- *(PAPH(JL,JK+1)-PAPH(JL,JK))
- 315 CONTINUE
- 320 CONTINUE
- if(cutrigger .eq. 1) then
- DO JL=1,KLON
- KTYPE(JL)=0
- IF(ZDQCV(JL).GT.MAX(0.,1.1*PQHFL(JL)*G)) THEN
- KTYPE(JL)=1
- ELSE
- KTYPE(JL)=2
- ENDIF
- END DO
- else if(cutrigger .eq. 2) then
- CALL CUTYPE &
- ( KLON, KLEV, KLEVP1, KLEVM1, &
- ZTENH, ZQENH, ZQSENH, ZGEOH, PAPH, &
- RHO, PHHFL, PQHFL, KTYPE, lndj )
- end if
- !* (C) DETERMINE MOISTURE SUPPLY FOR BOUNDARY LAYER
- !* AND DETERMINE CLOUD BASE MASSFLUX IGNORING
- !* THE EFFECTS OF DOWNDRAFTS AT THIS STAGE
- ! ------------------------------------------
- ! do jl=1,klon
- ! if(ktype(jl) .ge. 1 ) then
- ! write(6,*)"ktype=", KTYPE(jl)
- ! end if
- ! end do
- DO 340 JL=1,KLON
- IKB=KCBOT(JL)
- ZQUMQE=PQU(JL,IKB)+PLU(JL,IKB)-ZQENH(JL,IKB)
- ZDQMIN=MAX(0.01*ZQENH(JL,IKB),1.E-10)
- IF(ZDQPBL(JL).GT.0..AND.ZQUMQE.GT.ZDQMIN.AND.LDCUM(JL)) THEN
- ZMFUB(JL)=ZDQPBL(JL)/(G*MAX(ZQUMQE,ZDQMIN))
- ELSE
- ZMFUB(JL)=0.01
- LDCUM(JL)=.FALSE.
- ENDIF
- ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
- ZMFUB(JL)=MIN(ZMFUB(JL),ZMFMAX)
- !------------------------------------------------------
- !* 4.0 DETERMINE CLOUD ASCENT FOR ENTRAINING PLUME
- !------------------------------------------------------
- 400 CONTINUE
- !* (A) ESTIMATE CLOUD HEIGHT FOR ENTRAINMENT/DETRAINMENT
- !* CALCULATIONS IN CUASC (MAX.POSSIBLE CLOUD HEIGHT
- !* FOR NON-ENTRAINING PLUME, FOLLOWING A.-S.,1974)
- ! -------------------------------------------------------------
- IKB=KCBOT(JL)
- ZHCBASE(JL)=CPD*PTU(JL,IKB)+ZGEOH(JL,IKB)+ALV*PQU(JL,IKB)
- ICTOP0(JL)=KCBOT(JL)-1
- 340 CONTINUE
- ZALVDCP=ALV/CPD
- ZQALV=1./ALV
- DO 420 JK=KLEVM1,3,-1
- DO 420 JL=1,KLON
- ZHSAT=CPD*ZTENH(JL,JK)+ZGEOH(JL,JK)+ALV*ZQSENH(JL,JK)
- ZGAM=C5LES*ZALVDCP*ZQSENH(JL,JK)/ &
- ((1.-VTMPC1*ZQSENH(JL,JK))*(ZTENH(JL,JK)-C4LES)**2)
- ZZZ=CPD*ZTENH(JL,JK)*0.608
- ZHHAT=ZHSAT-(ZZZ+ZGAM*ZZZ)/(1.+ZGAM*ZZZ*ZQALV)* &
- MAX(ZQSENH(JL,JK)-ZQENH(JL,JK),0.)
- ZHHATT(JL,JK)=ZHHAT
- IF(JK.LT.ICTOP0(JL).AND.ZHCBASE(JL).GT.ZHHAT) ICTOP0(JL)=JK
- 420 CONTINUE
- DO 430 JL=1,KLON
- JK=KCBOT(JL)
- ZHSAT=CPD*ZTENH(JL,JK)+ZGEOH(JL,JK)+ALV*ZQSENH(JL,JK)
- ZGAM=C5LES*ZALVDCP*ZQSENH(JL,JK)/ &
- ((1.-VTMPC1*ZQSENH(JL,JK))*(ZTENH(JL,JK)-C4LES)**2)
- ZZZ=CPD*ZTENH(JL,JK)*0.608
- ZHHAT=ZHSAT-(ZZZ+ZGAM*ZZZ)/(1.+ZGAM*ZZZ*ZQALV)* &
- MAX(ZQSENH(JL,JK)-ZQENH(JL,JK),0.)
- ZHHATT(JL,JK)=ZHHAT
- 430 CONTINUE
- !
- ! Find lowest possible org. detrainment level
- !
- DO 440 JL = 1, KLON
- ZHMIN(JL) = 0.
- IF( LDCUM(JL).AND.KTYPE(JL).EQ.1 ) THEN
- IHMIN(JL) = KCBOT(JL)
- ELSE
- IHMIN(JL) = -1
- END IF
- 440 CONTINUE
- !
- ZBI = 1./(25.*G)
- DO 450 JK = KLEV, 1, -1
- DO 450 JL = 1, KLON
- LLO1 = LDCUM(JL).AND.KTYPE(JL).EQ.1.AND.IHMIN(JL).EQ.KCBOT(JL)
- IF (LLO1.AND.JK.LT.KCBOT(JL).AND.JK.GE.ICTOP0(JL)) THEN
- IKB = KCBOT(JL)
- ZRO = RD*ZTENH(JL,JK)/(G*PAPH(JL,JK))
- ZDZ = (PAPH(JL,JK)-PAPH(JL,JK-1))*ZRO
- ZDHDZ=(CPD*(PTEN(JL,JK-1)-PTEN(JL,JK))+ALV*(PQEN(JL,JK-1)- &
- PQEN(JL,JK))+(PGEO(JL,JK-1)-PGEO(JL,JK)))*G/(PGEO(JL, &
- JK-1)-PGEO(JL,JK))
- ZDEPTH = ZGEOH(JL,JK) - ZGEOH(JL,IKB)
- ZFAC = SQRT(1.+ZDEPTH*ZBI)
- ZHMIN(JL) = ZHMIN(JL) + ZDHDZ*ZFAC*ZDZ
- ZRH = -ALV*(ZQSENH(JL,JK)-ZQENH(JL,JK))*ZFAC
- IF (ZHMIN(JL).GT.ZRH) IHMIN(JL) = JK
- END IF
- 450 CONTINUE
- DO 460 JL = 1, KLON
- IF (LDCUM(JL).AND.KTYPE(JL).EQ.1) THEN
- IF (IHMIN(JL).LT.ICTOP0(JL)) IHMIN(JL) = ICTOP0(JL)
- END IF
- IF(KTYPE(JL).EQ.1) THEN
- ZENTR(JL)=ENTRPEN
- ELSE
- ZENTR(JL)=ENTRSCV
- ENDIF
- if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.05
- 460 CONTINUE
- !* (B) DO ASCENT IN 'CUASC'IN ABSENCE OF DOWNDRAFTS
- !----------------------------------------------------------
- CALL CUASC_NEW &
- (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
- ZQENH, PUEN, PVEN, PTEN, PQEN, &
- PQSEN, PGEO, ZGEOH, PAP, PAPH, &
- PQTE, PVERV, ILWMIN, LDCUM, ZHCBASE, &
- KTYPE, ILAB, PTU, PQU, PLU, &
- ZUU, ZVU, PMFU, ZMFUB, ZENTR, &
- ZMFUS, ZMFUQ, ZMFUL, PLUDE, ZDMFUP, &
- KCBOT, KCTOP, ICTOP0, ICUM, ZTMST, &
- IHMIN, ZHHATT, ZQSENH)
- IF(ICUM.EQ.0) GO TO 1000
- !* (C) CHECK CLOUD DEPTH AND CHANGE ENTRAINMENT RATE ACCORDINGLY
- ! CALCULATE PRECIPITATION RATE (FOR DOWNDRAFT CALCULATION)
- !------------------------------------------------------------------
- DO 480 JL=1,KLON
- ZPBMPT=PAPH(JL,KCBOT(JL))-PAPH(JL,KCTOP(JL))
- IF(LDCUM(JL)) ICTOP0(JL)=KCTOP(JL)
- IF(LDCUM(JL).AND.KTYPE(JL).EQ.1.AND.ZPBMPT.LT.ZDNOPRC) KTYPE(JL)=2
- IF(KTYPE(JL).EQ.2) then
- ZENTR(JL)=ENTRSCV
- if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.05
- endif
- ZRFL(JL)=ZDMFUP(JL,1)
- 480 CONTINUE
- DO 490 JK=2,KLEV
- DO 490 JL=1,KLON
- ZRFL(JL)=ZRFL(JL)+ZDMFUP(JL,JK)
- 490 CONTINUE
- !-----------------------------------------
- !* 5.0 CUMULUS DOWNDRAFT CALCULATIONS
- !-----------------------------------------
- 500 CONTINUE
- IF(LMFDD) THEN
- !* (A) DETERMINE LFS IN 'CUDLFS'
- !--------------------------------------
- CALL CUDLFS &
- (KLON, KLEV, KLEVP1, ZTENH, ZQENH, &
- PUEN, PVEN, ZGEOH, PAPH, PTU, &
- PQU, ZUU, ZVU, LDCUM, KCBOT, &
- KCTOP, ZMFUB, ZRFL, ZTD, ZQD, &
- ZUD, ZVD, PMFD, ZMFDS, ZMFDQ, &
- ZDMFDP, IDTOP, LODDRAF)
- !* (B) DETERMINE DOWNDRAFT T,Q AND FLUXES IN 'CUDDRAF'
- !------------------------------------------------------------
- CALL CUDDRAF &
- (KLON, KLEV, KLEVP1, ZTENH, ZQENH, &
- PUEN, PVEN, ZGEOH, PAPH, ZRFL, &
- LODDRAF, ZTD, ZQD, ZUD, ZVD, &
- PMFD, ZMFDS, ZMFDQ, ZDMFDP)
- !* (C) RECALCULATE CONVECTIVE FLUXES DUE TO EFFECT OF
- ! DOWNDRAFTS ON BOUNDARY LAYER MOISTURE BUDGET
- !-----------------------------------------------------------
- END IF
- !
- !-- 5.1 Recalculate cloud base massflux from a cape closure
- ! for deep convection (ktype=1) and by PBL equilibrium
- ! taking downdrafts into account for shallow convection
- ! (ktype=2)
- ! implemented by Y. WANG based on ECHAM4 in Nov. 2001.
- !
- DO 510 JL=1,KLON
- ZHEAT(JL)=0.0
- ZCAPE(JL)=0.0
- ZRELH(JL)=0.0
- ZMFUB1(JL)=ZMFUB(JL)
- 510 CONTINUE
- !
- DO 511 JL=1,KLON
- IF(LDCUM(JL).AND.KTYPE(JL).EQ.1) THEN
- do jk=KLEVM1,2,-1
- if(abs(paph(jl,jk)*0.01 - 300) .lt. 50.) then
- KTOP0=MAX(jk,KCTOP(JL))
- exit
- end if
- end do
- ! KTOP0=MAX(12,KCTOP(JL))
- DO JK=2,KLEV
- IF(JK.LE.KCBOT(JL).AND.JK.GT.KCTOP(JL)) THEN
- ZRO=PAPH(JL,JK)/(RD*ZTENH(JL,JK))
- ZDZ=(PAPH(JL,JK)-PAPH(JL,JK-1))/(G*ZRO)
- ZHEAT(JL)=ZHEAT(JL)+((PTEN(JL,JK-1)-PTEN(JL,JK) &
- +G*ZDZ/CPD)/ZTENH(JL,JK)+0.608*(PQEN(JL,JK-1)- &
- PQEN(JL,JK)))*(PMFU(JL,JK)+PMFD(JL,JK))*G/ZRO
- ZCAPE(JL)=ZCAPE(JL)+G*((PTU(JL,JK)*(1.+.608*PQU(JL,JK) &
- -PLU(JL,JK)))/(ZTENH(JL,JK)*(1.+.608*ZQENH(JL,JK))) &
- -1.0)*ZDZ
- ENDIF
- IF(JK.LE.KCBOT(JL).AND.JK.GT.KTOP0) THEN
- dept=(PAPH(JL,JK)-PAPH(JL,JK-1))/(PAPH(JL,KCBOT(JL))- &
- PAPH(JL,KTOP0))
- ZRELH(JL)=ZRELH(JL)+dept*PQEN(JL,JK)/PQSEN(JL,JK)
- ENDIF
- ENDDO
- !
-
- if(cutrigger .eq. 1 ) then
- IF(lndj(JL).EQ.1) then
- CRIRH1=CRIRH*0.8
- ELSE
- CRIRH1=CRIRH
- ENDIF
- else
- CRIRH1=0.
- end if
- IF(ZRELH(JL).GE.CRIRH1 .AND. ZCAPE(JL) .GT. 100.) THEN
- IKB=KCBOT(JL)
- ZHT=ZCAPE(JL)/(ZTAU*ZHEAT(JL))
- ZMFUB1(JL)=MAX(ZMFUB(JL)*ZHT,0.01)
- ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
- ZMFUB1(JL)=MIN(ZMFUB1(JL),ZMFMAX)
- ELSE
- ZMFUB1(JL)=0.01
- ZMFUB(JL)=0.01
- LDCUM(JL)=.FALSE.
- ENDIF
- ENDIF
- 511 CONTINUE
- !
- !* 5.2 RECALCULATE CONVECTIVE FLUXES DUE TO EFFECT OF
- ! DOWNDRAFTS ON BOUNDARY LAYER MOISTURE BUDGET
- !--------------------------------------------------------
- DO 512 JL=1,KLON
- IF(KTYPE(JL).NE.1) THEN
- IKB=KCBOT(JL)
- IF(PMFD(JL,IKB).LT.0.0.AND.LODDRAF(JL)) THEN
- ZEPS=CMFDEPS
- ELSE
- ZEPS=0.
- ENDIF
- ZQUMQE=PQU(JL,IKB)+PLU(JL,IKB)- &
- ZEPS*ZQD(JL,IKB)-(1.-ZEPS)*ZQENH(JL,IKB)
- ZDQMIN=MAX(0.01*ZQENH(JL,IKB),1.E-10)
- ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
- IF(ZDQPBL(JL).GT.0..AND.ZQUMQE.GT.ZDQMIN.AND.LDCUM(JL) &
- .AND.ZMFUB(JL).LT.ZMFMAX) THEN
- ZMFUB1(JL)=ZDQPBL(JL)/(G*MAX(ZQUMQE,ZDQMIN))
- ELSE
- ZMFUB1(JL)=ZMFUB(JL)
- ENDIF
- LLO1=(KTYPE(JL).EQ.2).AND.ABS(ZMFUB1(JL) &
- -ZMFUB(JL)).LT.0.2*ZMFUB(JL)
- IF(.NOT.LLO1) ZMFUB1(JL)=ZMFUB(JL)
- ZMFUB1(JL)=MIN(ZMFUB1(JL),ZMFMAX)
- END IF
- 512 CONTINUE
- DO 530 JK=1,KLEV
- DO 530 JL=1,KLON
- IF(LDCUM(JL)) THEN
- ZFAC=ZMFUB1(JL)/MAX(ZMFUB(JL),1.E-10)
- PMFD(JL,JK)=PMFD(JL,JK)*ZFAC
- ZMFDS(JL,JK)=ZMFDS(JL,JK)*ZFAC
- ZMFDQ(JL,JK)=ZMFDQ(JL,JK)*ZFAC
- ZDMFDP(JL,JK)=ZDMFDP(JL,JK)*ZFAC
- ELSE
- PMFD(JL,JK)=0.0
- ZMFDS(JL,JK)=0.0
- ZMFDQ(JL,JK)=0.0
- ZDMFDP(JL,JK)=0.0
- ENDIF
- 530 CONTINUE
- DO 538 JL=1,KLON
- IF(LDCUM(JL)) THEN
- ZMFUB(JL)=ZMFUB1(JL)
- ELSE
- ZMFUB(JL)=0.0
- ENDIF
- 538 CONTINUE
- !
- !---------------------------------------------------------------
- !* 6.0 DETERMINE FINAL CLOUD ASCENT FOR ENTRAINING PLUME
- !* FOR PENETRATIVE CONVECTION (TYPE=1),
- !* FOR SHALLOW TO MEDIUM CONVECTION (TYPE=2)
- !* AND FOR MID-LEVEL CONVECTION (TYPE=3).
- !---------------------------------------------------------------
- 600 CONTINUE
- CALL CUASC_NEW &
- (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
- ZQENH, PUEN, PVEN, PTEN, PQEN, &
- PQSEN, PGEO, ZGEOH, PAP, PAPH, &
- PQTE, PVERV, ILWMIN, LDCUM, ZHCBASE,&
- KTYPE, ILAB, PTU, PQU, PLU, &
- ZUU, ZVU, PMFU, ZMFUB, ZENTR, &
- ZMFUS, ZMFUQ, ZMFUL, PLUDE, ZDMFUP, &
- KCBOT, KCTOP, ICTOP0, ICUM, ZTMST, &
- IHMIN, ZHHATT, ZQSENH)
- !----------------------------------------------------------
- !* 7.0 DETERMINE FINAL CONVECTIVE FLUXES IN 'CUFLX'
- !----------------------------------------------------------
- 700 CONTINUE
- CALL CUFLX &
- (KLON, KLEV, KLEVP1, PQEN, PQSEN, &
- ZTENH, ZQENH, PAPH, ZGEOH, KCBOT, &
- KCTOP, IDTOP, KTYPE, LODDRAF, LDCUM, &
- PMFU, PMFD, ZMFUS, ZMFDS, ZMFUQ, &
- ZMFDQ, ZMFUL, PLUDE, ZDMFUP, ZDMFDP, &
- ZRFL, PRAIN, PTEN, ZSFL, ZDPMEL, &
- ITOPM2, ZTMST, sig1)
- !----------------------------------------------------------------
- !* 8.0 UPDATE TENDENCIES FOR T AND Q IN SUBROUTINE CUDTDQ
- !----------------------------------------------------------------
- 800 CONTINUE
- CALL CUDTDQ &
- (KLON, KLEV, KLEVP1, ITOPM2, PAPH, &
- LDCUM, PTEN, PTTE, PQTE, ZMFUS, &
- ZMFDS, ZMFUQ, ZMFDQ, ZMFUL, ZDMFUP, &
- ZDMFDP, ZTMST, ZDPMEL, PRAIN, ZRFL, &
- …
Large files files are truncated, but you can click here to view the full file