1 !-----------------------------------------------------------------------
3 !WRF:MODEL_LAYER:PHYSICS
5 !####################TIEDTKE SCHEME#########################
6 ! Taken from the IPRC iRAM - Yuqing Wang, University of Hawaii
7 ! Added by Chunxi Zhang and Yuqing Wang to WRF3.2, May, 2010
8 ! refenrence: Tiedtke (1989, MWR, 117, 1779-1800)
9 ! Nordeng, T.E., (1995), CAPE closure and organized entrainment/detrainment
10 ! Yuqing Wang et al. (2003,J. Climate, 16, 1721-1738) for improvements
11 ! for cloud top detrainment
12 ! (2004, Mon. Wea. Rev., 132, 274-296), improvements for PBL clouds
13 ! (2007,Mon. Wea. Rev., 135, 567-585), diurnal cycle of precipitation
14 ! This scheme is on testing
15 !###########################################################
16 MODULE module_cu_tiedtke
18 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19 ! epsl--- allowed minimum value for floating calculation
20 !---------------------------------------------------------------
21 real,parameter :: epsl = 1.0e-20
22 real,parameter :: t000 = 273.15
23 real,parameter :: hgfr = 233.15 ! defined in param.f in explct
24 !-------------------------------------------------------------
25 ! Ends the parameters set
26 !++++++++++++++++++++++++++++
28 REAL :: API,A,EOMEGA,RD,RV,CPD,RCPD,VTMPC1,VTMPC2,CPV, &
29 RHOH2O,ALV,ALS,ALF,CLW,TMELT,SOLC,STBO,DAYL,YEARL, &
30 C1ES,C2ES,C3LES,C3IES,C4LES,C4IES,C5LES,C5IES,ZRG
32 REAL :: ENTRPEN,ENTRSCV,ENTRMID,ENTRDD,CMFCTOP,RHM,RHC, &
33 CMFCMAX,CMFCMIN,CMFDEPS,RHCDD,CPRCON,CRIRH,ZBUO0, &
38 REAL :: CVDIFTS, CEVAPCU1, CEVAPCU2,ZDNOPRC
41 PARAMETER(A=6371.22E03, &
46 CPV=1869.46, & ! CPV in module is 1846.4
58 C5LES=C3LES*(TMELT-C4LES), &
61 C5IES=C3IES*(TMELT-C4IES), &
62 API=3.141593, & ! API=2.0*ASIN(1.)
66 CEVAPCU1=1.93E-6*261., &
67 CEVAPCU2=1.E3/(38.3*0.293) )
70 ! SPECIFY PARAMETERS FOR MASSFLUX-SCHEME
71 ! --------------------------------------
72 ! These are tunable parameters
74 ! ENTRPEN: AVERAGE ENTRAINMENT RATE FOR PENETRATIVE CONVECTION
77 PARAMETER(ENTRPEN=1.0E-4)
79 ! ENTRSCV: AVERAGE ENTRAINMENT RATE FOR SHALLOW CONVECTION
82 PARAMETER(ENTRSCV=1.2E-3)
84 ! ENTRMID: AVERAGE ENTRAINMENT RATE FOR MIDLEVEL CONVECTION
87 PARAMETER(ENTRMID=1.0E-4)
89 ! ENTRDD: AVERAGE ENTRAINMENT RATE FOR DOWNDRAFTS
92 PARAMETER(ENTRDD =2.0E-4)
94 ! CMFCTOP: RELATIVE CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANCY LEVEL
97 PARAMETER(CMFCTOP=0.26)
99 ! CMFCMAX: MAXIMUM MASSFLUX VALUE ALLOWED FOR UPDRAFTS ETC
102 PARAMETER(CMFCMAX=1.0)
104 ! CMFCMIN: MINIMUM MASSFLUX VALUE (FOR SAFETY)
107 PARAMETER(CMFCMIN=1.E-10)
109 ! CMFDEPS: FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS
112 PARAMETER(CMFDEPS=0.30)
114 ! CPRCON: COEFFICIENTS FOR DETERMINING CONVERSION FROM CLOUD WATER
116 PARAMETER(CPRCON = 2.0E-3/G)
118 ! ZDNOPRC: The pressure depth below which no precipitation
120 PARAMETER(ZDNOPRC = 1.5E4)
121 !--------------------
122 PARAMETER(nentr=1) ! Old entrainment rate parameterization ! chn1,2,4
123 ! PARAMETER(nentr=2) ! New entrainment rate parameterization ! chn3
125 !--------------------
126 PARAMETER(RHC=0.80,RHM=1.0,ZBUO0=0.50)
127 !--------------------
128 PARAMETER(CRIRH=0.80,fdbk = 1.0,ZTAU = 3600.0)
129 !--------------------
130 LOGICAL :: LMFPEN,LMFMID,LMFSCV,LMFDD,LMFDUDV
131 PARAMETER(LMFPEN=.TRUE.,LMFMID=.TRUE.,LMFSCV=.TRUE.,LMFDD=.TRUE.,LMFDUDV=.TRUE.)
132 !--------------------
133 !#################### END of Variables definition##########################
134 !-----------------------------------------------------------------------
137 !-----------------------------------------------------------------------
138 SUBROUTINE CU_TIEDTKE( &
139 DT,ITIMESTEP,STEPCU &
140 ,RAINCV,PRATEC,QFX,ZNU &
141 ,U3D,V3D,W,T3D,QV3D,QC3D,QI3D,PI3D,RHO3D &
143 ,DZ8W,PCPS,P8W,XLAND,CU_ACT_FLAG &
144 ,CUDT, CURR_SECS, ADAPT_STEP_FLAG &
145 ,ids,ide, jds,jde, kds,kde &
146 ,ims,ime, jms,jme, kms,kme &
147 ,its,ite, jts,jte, kts,kte &
148 ,RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN &
150 ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS &
153 !-------------------------------------------------------------------
155 !-------------------------------------------------------------------
156 !-- U3D 3D u-velocity interpolated to theta points (m/s)
157 !-- V3D 3D v-velocity interpolated to theta points (m/s)
158 !-- TH3D 3D potential temperature (K)
159 !-- T3D temperature (K)
160 !-- QV3D 3D water vapor mixing ratio (Kg/Kg)
161 !-- QC3D 3D cloud mixing ratio (Kg/Kg)
162 !-- QI3D 3D ice mixing ratio (Kg/Kg)
163 !-- RHO3D 3D air density (kg/m^3)
164 !-- P8w 3D hydrostatic pressure at full levels (Pa)
165 !-- Pcps 3D hydrostatic pressure at half levels (Pa)
166 !-- PI3D 3D exner function (dimensionless)
167 !-- RTHCUTEN Theta tendency due to
168 ! cumulus scheme precipitation (K/s)
169 !-- RUCUTEN U wind tendency due to
170 ! cumulus scheme precipitation (K/s)
171 !-- RVCUTEN V wind tendency due to
172 ! cumulus scheme precipitation (K/s)
173 !-- RQVCUTEN Qv tendency due to
174 ! cumulus scheme precipitation (kg/kg/s)
175 !-- RQRCUTEN Qr tendency due to
176 ! cumulus scheme precipitation (kg/kg/s)
177 !-- RQCCUTEN Qc tendency due to
178 ! cumulus scheme precipitation (kg/kg/s)
179 !-- RQSCUTEN Qs tendency due to
180 ! cumulus scheme precipitation (kg/kg/s)
181 !-- RQICUTEN Qi tendency due to
182 ! cumulus scheme precipitation (kg/kg/s)
183 !-- RAINC accumulated total cumulus scheme precipitation (mm)
184 !-- RAINCV cumulus scheme precipitation (mm)
185 !-- PRATEC precipitiation rate from cumulus scheme (mm/s)
186 !-- dz8w dz between full levels (m)
187 !-- QFX upward moisture flux at the surface (kg/m^2/s)
189 !-- ids start index for i in domain
190 !-- ide end index for i in domain
191 !-- jds start index for j in domain
192 !-- jde end index for j in domain
193 !-- kds start index for k in domain
194 !-- kde end index for k in domain
195 !-- ims start index for i in memory
196 !-- ime end index for i in memory
197 !-- jms start index for j in memory
198 !-- jme end index for j in memory
199 !-- kms start index for k in memory
200 !-- kme end index for k in memory
201 !-- its start index for i in tile
202 !-- ite end index for i in tile
203 !-- jts start index for j in tile
204 !-- jte end index for j in tile
205 !-- kts start index for k in tile
206 !-- kte end index for k in tile
207 !-------------------------------------------------------------------
208 INTEGER, INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
209 ims,ime, jms,jme, kms,kme, &
210 its,ite, jts,jte, kts,kte, &
214 REAL, INTENT(IN) :: &
218 REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN) :: &
221 REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: &
224 LOGICAL, DIMENSION(IMS:IME,JMS:JME), INTENT(INOUT) :: &
228 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN) :: &
244 !--------------------------- OPTIONAL VARS ----------------------------
246 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), &
247 OPTIONAL, INTENT(INOUT) :: &
256 ! Flags relating to the optional tendency arrays declared above
257 ! Models that carry the optional tendencies will provdide the
258 ! optional arguments at compile time; these flags all the model
259 ! to determine at run-time whether a particular tracer is in
262 LOGICAL, OPTIONAL :: &
269 ! Adaptive time-step variables
270 REAL, INTENT(IN ) :: CUDT
271 REAL, INTENT(IN ) :: CURR_SECS
272 LOGICAL,INTENT(IN ) :: ADAPT_STEP_FLAG
274 !--------------------------- LOCAL VARS ------------------------------
276 REAL, DIMENSION(ims:ime, jms:jme) :: &
283 REAL , DIMENSION(its:ite) :: &
287 INTEGER , DIMENSION(its:ite) :: SLIMSK
290 REAL , DIMENSION(its:ite, kts:kte+1) :: &
293 REAL , DIMENSION(its:ite, kts:kte) :: &
313 INTEGER, DIMENSION(its:ite) :: &
329 !-------other local variables----
330 INTEGER,DIMENSION( its:ite ) :: KTYPE
331 REAL, DIMENSION( kts:kte ) :: sig1 ! half sigma levels
332 REAL, DIMENSION( kms:kme ) :: ZNU
334 !-----------------------------------------------------------------------
336 !*** CHECK TO SEE IF THIS IS A CONVECTION TIMESTEP
338 if (adapt_step_flag) then
339 if ( (ITIMESTEP .eq. 1) .or. (cudt .eq. 0) .or. &
340 ( CURR_SECS + dt >= ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then
346 if (MOD(ITIMESTEP,STEPCU) .EQ. 0 .or. ITIMESTEP .eq. 1) then
353 !-----------------------------------------------------------------------
358 CU_ACT_FLAG(I,J)=.TRUE.
367 !------------- J LOOP (OUTER) --------------------------------------------------
371 ! --------------- compute zi and zl -----------------------------------------
379 ZI(I,K)=ZI(I,KM)+dz8w(i,km,j)
386 ZL(I,KM)=(ZI(I,K)+ZI(I,KM))*0.5
391 ZL(I,KTE)=2.*ZI(I,KTE)-ZL(I,KTE-1)
394 ! --------------- end compute zi and zl -------------------------------------
396 SLIMSK(i)=int(ABS(XLAND(i,j)-2.))
402 DOT(i,k)=-0.5*g*rho3d(i,k,j)*(w(i,k,j)+w(i,kp,j))
412 Q1(i,zz)= QV3D(i,k,j)
413 if(itimestep == 1) then
417 Q1B(i,zz)=QVFTEN(i,k,j)
418 Q1BL(i,zz)=QVPBLTEN(i,k,j)
424 PRSL(i,zz) = Pcps(i,k,j)
431 PRSI(i,zz) = P8w(i,k,j)
440 !###############before call TIECNV, we need EVAP########################
441 ! EVAP is the vapor flux at the surface
442 !########################################################################
447 !########################################################################
448 CALL TIECNV(U1,V1,T1,Q1,Q2,Q3,Q1B,Q1BL,GHT,OMG,PRSL,PRSI,EVAP, &
449 RN,SLIMSK,KTYPE,IM,KX,KX+1,sig1,DELT)
452 RAINCV(I,J)=RN(I)/STEPCU
453 PRATEC(I,J)=RN(I)/(STEPCU * DT)
459 RTHCUTEN(I,K,J)=(T1(I,zz)-T3D(I,K,J))/PI3D(I,K,J)*RDELT
460 RQVCUTEN(I,K,J)=(Q1(I,zz)-QV3D(I,K,J))*RDELT
461 RUCUTEN(I,K,J) =(U1(I,zz)-U3D(I,K,J))*RDELT
462 RVCUTEN(I,K,J) =(V1(I,zz)-V3D(I,K,J))*RDELT
466 IF(PRESENT(RQCCUTEN))THEN
471 RQCCUTEN(I,K,J)=(Q2(I,zz)-QC3D(I,K,J))*RDELT
477 IF(PRESENT(RQICUTEN))THEN
482 RQICUTEN(I,K,J)=(Q3(I,zz)-QI3D(I,K,J))*RDELT
493 END SUBROUTINE CU_TIEDTKE
495 !====================================================================
496 SUBROUTINE tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
498 RESTART,P_QC,P_QI,P_FIRST_SCALAR, &
500 ids, ide, jds, jde, kds, kde, &
501 ims, ime, jms, jme, kms, kme, &
502 its, ite, jts, jte, kts, kte)
503 !--------------------------------------------------------------------
505 !--------------------------------------------------------------------
506 LOGICAL , INTENT(IN) :: allowed_to_read,restart
507 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
508 ims, ime, jms, jme, kms, kme, &
509 its, ite, jts, jte, kts, kte
510 INTEGER , INTENT(IN) :: P_FIRST_SCALAR, P_QI, P_QC
512 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
519 INTEGER :: i, j, k, itf, jtf, ktf
537 IF (P_QC .ge. P_FIRST_SCALAR) THEN
547 IF (P_QI .ge. P_FIRST_SCALAR) THEN
558 END SUBROUTINE tiedtkeinit
560 ! ------------------------------------------------------------------------
562 !------------This is the combined version for tiedtke---------------
563 !----------------------------------------------------------------
564 ! In this module only the mass flux convection scheme of the ECMWF is included
565 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
566 !#############################################################
568 ! LEVEL 1 SUBROUTINEs
570 !#############################################################
571 !********************************************************
573 !********************************************************
574 SUBROUTINE TIECNV(pu,pv,pt,pqv,pqc,pqi,pqvf,pqvbl,poz,pomg, &
575 pap,paph,evap,zprecc,lndj,KTYPE,lq,km,km1,sig1,dt)
576 !-----------------------------------------------------------------
577 ! This is the interface between the meso-scale model and the mass
578 ! flux convection module
579 !-----------------------------------------------------------------
582 real pu(lq,km),pv(lq,km),pt(lq,km),pqv(lq,km),pqvf(lq,km)
583 real poz(lq,km),pomg(lq,km),evap(lq),zprecc(lq),pqvbl(lq,km)
585 REAL PUM1(lq,km), PVM1(lq,km), &
586 PTTE(lq,km), PQTE(lq,km), PVOM(lq,km), PVOL(lq,km), &
587 PVERV(lq,km), PGEO(lq,km), PAP(lq,km), PAPH(lq,km1)
588 REAL PQHFL(lq), ZQQ(lq,km), PAPRC(lq), PAPRS(lq), &
589 PRSFC(lq), PSSFC(lq), PAPRSM(lq), PCTE(lq,km)
590 REAL ZTP1(lq,km), ZQP1(lq,km), ZTU(lq,km), ZQU(lq,km), &
591 ZLU(lq,km), ZLUDE(lq,km), ZMFU(lq,km), ZMFD(lq,km), &
592 ZQSAT(lq,km), pqc(lq,km), pqi(lq,km), ZRAIN(lq)
594 REAL sig(km1),sig1(km)
595 INTEGER ICBOT(lq), ICTOP(lq), KTYPE(lq), lndj(lq)
599 real PSHEAT,PSRAIN,PSEVAP,PSMELT,PSDISS,TT
600 real ZTMST,ZTPP1,fliq,fice,ZTC,ZALF
601 integer i,j,k,lq,lp,km,km1
606 ! Masv flux diagnostics.
624 ! CONVERT MODEL VARIABLES FOR MFLUX SCHEME
633 ZQP1(j,k)=pqv(j,k)/(1.0+pqv(j,k))
639 ZQSAT(j,k)=TLUCUA(TT)/PAP(j,k)
640 ZQSAT(j,k)=MIN(0.5,ZQSAT(j,k))
641 ZQSAT(j,k)=ZQSAT(j,k)/(1.-VTMPC1*ZQSAT(j,k))
642 PQTE(j,k)=pqvf(j,k)+pqvbl(j,k)
646 !-----------------------------------------------------------------------
647 !* 2. CALL 'CUMASTR'(MASTER-ROUTINE FOR CUMULUS PARAMETERIZATION)
650 (lq, km, km1, km-1, ZTP1, &
651 ZQP1, PUM1, PVM1, PVERV, ZQSAT, &
652 PQHFL, ZTMST, PAP, PAPH, PGEO, &
653 PTTE, PQTE, PVOM, PVOL, PRSFC, &
654 PSSFC, PAPRC, PAPRSM, PAPRS, LOCUM, &
655 KTYPE, ICBOT, ICTOP, ZTU, ZQU, &
656 ZLU, ZLUDE, ZMFU, ZMFD, ZRAIN, &
657 PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT, &
660 ! TO INCLUDE THE CLOUD WATER AND CLOUD ICE DETRAINED FROM CONVECTION
662 IF(fdbk.ge.1.0e-9) THEN
665 If(PCTE(j,k).GT.0.0) then
666 ZTPP1=pt(j,k)+PTTE(j,k)*ZTMST
667 if(ZTPP1.ge.t000) then
670 else if(ZTPP1.le.hgfr) then
675 fliq=0.0059+0.9941*exp(-0.003102*ZTC*ZTC)
679 pqc(j,k)=pqc(j,k)+fliq*PCTE(j,k)*ZTMST
680 pqi(j,k)=pqi(j,k)+fice*PCTE(j,k)*ZTMST
681 PTTE(j,k)=PTTE(j,k)-ZALF*RCPD*fliq*PCTE(j,k)
688 pt(j,k)=ZTP1(j,k)+PTTE(j,k)*ZTMST
689 ZQP1(j,k)=ZQP1(j,k)+(PQTE(j,k)-ZQQ(j,k))*ZTMST
690 pqv(j,k)=ZQP1(j,k)/(1.0-ZQP1(j,k))
693 zprecc(j)=amax1(0.0,(PRSFC(j)+PSSFC(j))*ZTMST)
698 pu(j,k)=pu(j,k)+PVOM(j,k)*ZTMST
699 pv(j,k)=pv(j,k)+PVOL(j,k)*ZTMST
704 END SUBROUTINE TIECNV
706 !#############################################################
708 ! LEVEL 2 SUBROUTINEs
710 !#############################################################
711 !***********************************************************
712 ! SUBROUTINE CUMASTR_NEW
713 !***********************************************************
714 SUBROUTINE CUMASTR_NEW &
715 (KLON, KLEV, KLEVP1, KLEVM1, PTEN, &
716 PQEN, PUEN, PVEN, PVERV, PQSEN, &
717 PQHFL, ZTMST, PAP, PAPH, PGEO, &
718 PTTE, PQTE, PVOM, PVOL, PRSFC, &
719 PSSFC, PAPRC, PAPRSM, PAPRS, LDCUM, &
720 KTYPE, KCBOT, KCTOP, PTU, PQU, &
721 PLU, PLUDE, PMFU, PMFD, PRAIN, &
722 PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT,&
725 !***CUMASTR* MASTER ROUTINE FOR CUMULUS MASSFLUX-SCHEME
726 ! M.TIEDTKE E.C.M.W.F. 1986/1987/1989
729 ! THIS ROUTINE COMPUTES THE PHYSICAL TENDENCIES OF THE
730 ! PROGNOSTIC VARIABLES T,Q,U AND V DUE TO CONVECTIVE PROCESSES.
731 ! PROCESSES CONSIDERED ARE: CONVECTIVE FLUXES, FORMATION OF
732 ! PRECIPITATION, EVAPORATION OF FALLING RAIN BELOW CLOUD BASE,
733 ! SATURATED CUMULUS DOWNDRAFTS.
736 ! *CUMASTR* IS CALLED FROM *MSSFLX*
737 ! THE ROUTINE TAKES ITS INPUT FROM THE LONG-TERM STORAGE
738 ! T,Q,U,V,PHI AND P AND MOISTURE TENDENCIES.
739 ! IT RETURNS ITS OUTPUT TO THE SAME SPACE
740 ! 1.MODIFIED TENDENCIES OF MODEL VARIABLES
741 ! 2.RATES OF CONVECTIVE PRECIPITATION
742 ! (USED IN SUBROUTINE SURF)
743 ! 3.CLOUD BASE, CLOUD TOP AND PRECIP FOR RADIATION
744 ! (USED IN SUBROUTINE CLOUD)
747 ! PARAMETERIZATION IS DONE USING A MASSFLUX-SCHEME.
748 ! (1) DEFINE CONSTANTS AND PARAMETERS
749 ! (2) SPECIFY VALUES (T,Q,QS...) AT HALF LEVELS AND
750 ! INITIALIZE UPDRAFT- AND DOWNDRAFT-VALUES IN 'CUINI'
751 ! (3) CALCULATE CLOUD BASE IN 'CUBASE'
752 ! AND SPECIFY CLOUD BASE MASSFLUX FROM PBL MOISTURE BUDGET
753 ! (4) DO CLOUD ASCENT IN 'CUASC' IN ABSENCE OF DOWNDRAFTS
754 ! (5) DO DOWNDRAFT CALCULATIONS:
755 ! (A) DETERMINE VALUES AT LFS IN 'CUDLFS'
756 ! (B) DETERMINE MOIST DESCENT IN 'CUDDRAF'
757 ! (C) RECALCULATE CLOUD BASE MASSFLUX CONSIDERING THE
758 ! EFFECT OF CU-DOWNDRAFTS
759 ! (6) DO FINAL CLOUD ASCENT IN 'CUASC'
760 ! (7) DO FINAL ADJUSMENTS TO CONVECTIVE FLUXES IN 'CUFLX',
761 ! DO EVAPORATION IN SUBCLOUD LAYER
762 ! (8) CALCULATE INCREMENTS OF T AND Q IN 'CUDTDQ'
763 ! (9) CALCULATE INCREMENTS OF U AND V IN 'CUDUDV'
766 ! CUINI: INITIALIZES VALUES AT VERTICAL GRID USED IN CU-PARAMETR.
767 ! CUBASE: CLOUD BASE CALCULATION FOR PENETR.AND SHALLOW CONVECTION
768 ! CUASC: CLOUD ASCENT FOR ENTRAINING PLUME
769 ! CUDLFS: DETERMINES VALUES AT LFS FOR DOWNDRAFTS
770 ! CUDDRAF:DOES MOIST DESCENT FOR CUMULUS DOWNDRAFTS
771 ! CUFLX: FINAL ADJUSTMENTS TO CONVECTIVE FLUXES (ALSO IN PBL)
772 ! CUDQDT: UPDATES TENDENCIES FOR T AND Q
773 ! CUDUDV: UPDATES TENDENCIES FOR U AND V
776 ! LMFPEN=.T. PENETRATIVE CONVECTION IS SWITCHED ON
777 ! LMFSCV=.T. SHALLOW CONVECTION IS SWITCHED ON
778 ! LMFMID=.T. MIDLEVEL CONVECTION IS SWITCHED ON
779 ! LMFDD=.T. CUMULUS DOWNDRAFTS SWITCHED ON
780 ! LMFDUDV=.T. CUMULUS FRICTION SWITCHED ON
782 ! MODEL PARAMETERS (DEFINED IN SUBROUTINE CUPARAM)
783 ! ------------------------------------------------
784 ! ENTRPEN ENTRAINMENT RATE FOR PENETRATIVE CONVECTION
785 ! ENTRSCV ENTRAINMENT RATE FOR SHALLOW CONVECTION
786 ! ENTRMID ENTRAINMENT RATE FOR MIDLEVEL CONVECTION
787 ! ENTRDD ENTRAINMENT RATE FOR CUMULUS DOWNDRAFTS
788 ! CMFCTOP RELATIVE CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANCY
790 ! CMFCMAX MAXIMUM MASSFLUX VALUE ALLOWED FOR
791 ! CMFCMIN MINIMUM MASSFLUX VALUE (FOR SAFETY)
792 ! CMFDEPS FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS
793 ! CPRCON COEFFICIENT FOR CONVERSION FROM CLOUD WATER TO RAIN
796 ! PAPER ON MASSFLUX SCHEME (TIEDTKE,1989)
797 !-----------------------------------------------------------------
798 !-------------------------------------------------------------------
800 !-------------------------------------------------------------------
801 INTEGER KLON, KLEV, KLEVP1
804 REAL PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT, ZCONS2
806 REAL ZQUMQE, ZDQMIN, ZMFMAX, ZALVDCP, ZQALV
807 REAL ZHSAT, ZGAM, ZZZ, ZHHAT, ZBI, ZRO, ZDZ, ZDHDZ, ZDEPTH
808 REAL ZFAC, ZRH, ZPBMPT, DEPT, ZHT, ZEPS
810 REAL PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
811 PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
812 PTTE(KLON,KLEV), PQTE(KLON,KLEV), &
813 PVOM(KLON,KLEV), PVOL(KLON,KLEV), &
814 PQSEN(KLON,KLEV), PGEO(KLON,KLEV), &
815 PAP(KLON,KLEV), PAPH(KLON,KLEVP1),&
816 PVERV(KLON,KLEV), PQHFL(KLON)
817 REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
818 PLU(KLON,KLEV), PLUDE(KLON,KLEV), &
819 PMFU(KLON,KLEV), PMFD(KLON,KLEV), &
820 PAPRC(KLON), PAPRS(KLON), &
821 PAPRSM(KLON), PRAIN(KLON), &
822 PRSFC(KLON), PSSFC(KLON)
823 REAL ZTENH(KLON,KLEV), ZQENH(KLON,KLEV),&
824 ZGEOH(KLON,KLEV), ZQSENH(KLON,KLEV),&
825 ZTD(KLON,KLEV), ZQD(KLON,KLEV), &
826 ZMFUS(KLON,KLEV), ZMFDS(KLON,KLEV), &
827 ZMFUQ(KLON,KLEV), ZMFDQ(KLON,KLEV), &
828 ZDMFUP(KLON,KLEV), ZDMFDP(KLON,KLEV),&
829 ZMFUL(KLON,KLEV), ZRFL(KLON), &
830 ZUU(KLON,KLEV), ZVU(KLON,KLEV), &
831 ZUD(KLON,KLEV), ZVD(KLON,KLEV)
832 REAL ZENTR(KLON), ZHCBASE(KLON), &
833 ZMFUB(KLON), ZMFUB1(KLON), &
834 ZDQPBL(KLON), ZDQCV(KLON)
835 REAL ZSFL(KLON), ZDPMEL(KLON,KLEV), &
836 PCTE(KLON,KLEV), ZCAPE(KLON), &
837 ZHEAT(KLON), ZHHATT(KLON,KLEV), &
838 ZHMIN(KLON), ZRELH(KLON)
840 INTEGER ILAB(KLON,KLEV), IDTOP(KLON), &
841 ICTOP0(KLON), ILWMIN(KLON)
842 INTEGER KCBOT(KLON), KCTOP(KLON), &
843 KTYPE(KLON), IHMIN(KLON), &
846 LOGICAL LODDRAF(KLON), LLO1
847 !-------------------------------------------
848 ! 1. SPECIFY CONSTANTS AND PARAMETERS
849 !-------------------------------------------
852 !--------------------------------------------------------------
853 !* 2. INITIALIZE VALUES AT VERTICAL GRID POINTS IN 'CUINI'
854 !--------------------------------------------------------------
857 (KLON, KLEV, KLEVP1, KLEVM1, PTEN, &
858 PQEN, PQSEN, PUEN, PVEN, PVERV, &
859 PGEO, PAPH, ZGEOH, ZTENH, ZQENH, &
860 ZQSENH, ILWMIN, PTU, PQU, ZTD, &
861 ZQD, ZUU, ZVU, ZUD, ZVD, &
862 PMFU, PMFD, ZMFUS, ZMFDS, ZMFUQ, &
863 ZMFDQ, ZDMFUP, ZDMFDP, ZDPMEL, PLU, &
865 !----------------------------------
866 !* 3.0 CLOUD BASE CALCULATIONS
867 !----------------------------------
869 !* (A) DETERMINE CLOUD BASE VALUES IN 'CUBASE'
870 ! -------------------------------------------
872 (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
873 ZQENH, ZGEOH, PAPH, PTU, PQU, &
874 PLU, PUEN, PVEN, ZUU, ZVU, &
876 !* (B) DETERMINE TOTAL MOISTURE CONVERGENCE AND
877 !* THEN DECIDE ON TYPE OF CUMULUS CONVECTION
878 ! -----------------------------------------
881 ZDQCV(JL) =PQTE(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
887 ZDQCV(JL)=ZDQCV(JL)+PQTE(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
888 IF(JK.GE.KCBOT(JL)) ZDQPBL(JL)=ZDQPBL(JL)+PQTE(JL,JK) &
889 *(PAPH(JL,JK+1)-PAPH(JL,JK))
894 IF(ZDQCV(JL).GT.MAX(0.,1.1*PQHFL(JL)*G)) THEN
899 !* (C) DETERMINE MOISTURE SUPPLY FOR BOUNDARY LAYER
900 !* AND DETERMINE CLOUD BASE MASSFLUX IGNORING
901 !* THE EFFECTS OF DOWNDRAFTS AT THIS STAGE
902 ! ------------------------------------------
904 ZQUMQE=PQU(JL,IKB)+PLU(JL,IKB)-ZQENH(JL,IKB)
905 ZDQMIN=MAX(0.01*ZQENH(JL,IKB),1.E-10)
906 IF(ZDQPBL(JL).GT.0..AND.ZQUMQE.GT.ZDQMIN.AND.LDCUM(JL)) THEN
907 ZMFUB(JL)=ZDQPBL(JL)/(G*MAX(ZQUMQE,ZDQMIN))
912 ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
913 ZMFUB(JL)=MIN(ZMFUB(JL),ZMFMAX)
914 !------------------------------------------------------
915 !* 4.0 DETERMINE CLOUD ASCENT FOR ENTRAINING PLUME
916 !------------------------------------------------------
918 !* (A) ESTIMATE CLOUD HEIGHT FOR ENTRAINMENT/DETRAINMENT
919 !* CALCULATIONS IN CUASC (MAX.POSSIBLE CLOUD HEIGHT
920 !* FOR NON-ENTRAINING PLUME, FOLLOWING A.-S.,1974)
921 ! -------------------------------------------------------------
923 ZHCBASE(JL)=CPD*PTU(JL,IKB)+ZGEOH(JL,IKB)+ALV*PQU(JL,IKB)
924 ICTOP0(JL)=KCBOT(JL)-1
928 DO 420 JK=KLEVM1,3,-1
930 ZHSAT=CPD*ZTENH(JL,JK)+ZGEOH(JL,JK)+ALV*ZQSENH(JL,JK)
931 ZGAM=C5LES*ZALVDCP*ZQSENH(JL,JK)/ &
932 ((1.-VTMPC1*ZQSENH(JL,JK))*(ZTENH(JL,JK)-C4LES)**2)
933 ZZZ=CPD*ZTENH(JL,JK)*0.608
934 ZHHAT=ZHSAT-(ZZZ+ZGAM*ZZZ)/(1.+ZGAM*ZZZ*ZQALV)* &
935 MAX(ZQSENH(JL,JK)-ZQENH(JL,JK),0.)
937 IF(JK.LT.ICTOP0(JL).AND.ZHCBASE(JL).GT.ZHHAT) ICTOP0(JL)=JK
941 ZHSAT=CPD*ZTENH(JL,JK)+ZGEOH(JL,JK)+ALV*ZQSENH(JL,JK)
942 ZGAM=C5LES*ZALVDCP*ZQSENH(JL,JK)/ &
943 ((1.-VTMPC1*ZQSENH(JL,JK))*(ZTENH(JL,JK)-C4LES)**2)
944 ZZZ=CPD*ZTENH(JL,JK)*0.608
945 ZHHAT=ZHSAT-(ZZZ+ZGAM*ZZZ)/(1.+ZGAM*ZZZ*ZQALV)* &
946 MAX(ZQSENH(JL,JK)-ZQENH(JL,JK),0.)
950 ! Find lowest possible org. detrainment level
954 IF( LDCUM(JL).AND.KTYPE(JL).EQ.1 ) THEN
955 IHMIN(JL) = KCBOT(JL)
962 DO 450 JK = KLEV, 1, -1
964 LLO1 = LDCUM(JL).AND.KTYPE(JL).EQ.1.AND.IHMIN(JL).EQ.KCBOT(JL)
965 IF (LLO1.AND.JK.LT.KCBOT(JL).AND.JK.GE.ICTOP0(JL)) THEN
967 ZRO = RD*ZTENH(JL,JK)/(G*PAPH(JL,JK))
968 ZDZ = (PAPH(JL,JK)-PAPH(JL,JK-1))*ZRO
969 ZDHDZ=(CPD*(PTEN(JL,JK-1)-PTEN(JL,JK))+ALV*(PQEN(JL,JK-1)- &
970 PQEN(JL,JK))+(PGEO(JL,JK-1)-PGEO(JL,JK)))*G/(PGEO(JL, &
972 ZDEPTH = ZGEOH(JL,JK) - ZGEOH(JL,IKB)
973 ZFAC = SQRT(1.+ZDEPTH*ZBI)
974 ZHMIN(JL) = ZHMIN(JL) + ZDHDZ*ZFAC*ZDZ
975 ZRH = -ALV*(ZQSENH(JL,JK)-ZQENH(JL,JK))*ZFAC
976 IF (ZHMIN(JL).GT.ZRH) IHMIN(JL) = JK
980 IF (LDCUM(JL).AND.KTYPE(JL).EQ.1) THEN
981 IF (IHMIN(JL).LT.ICTOP0(JL)) IHMIN(JL) = ICTOP0(JL)
984 IF(KTYPE(JL).EQ.1) THEN
989 if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.1
991 ZDEPTH=ZRG*(ZGEOH(JL,ICTOP0(JL))-ZGEOH(JL,KCBOT(JL)))
992 ZENTR(JL)=MAX(ENTRPEN,1.5/MAX(500.0,ZDEPTH))
993 if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.1
996 !* (B) DO ASCENT IN 'CUASC'IN ABSENCE OF DOWNDRAFTS
997 !----------------------------------------------------------
999 (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
1000 ZQENH, PUEN, PVEN, PTEN, PQEN, &
1001 PQSEN, PGEO, ZGEOH, PAP, PAPH, &
1002 PQTE, PVERV, ILWMIN, LDCUM, ZHCBASE, &
1003 KTYPE, ILAB, PTU, PQU, PLU, &
1004 ZUU, ZVU, PMFU, ZMFUB, ZENTR, &
1005 ZMFUS, ZMFUQ, ZMFUL, PLUDE, ZDMFUP, &
1006 KCBOT, KCTOP, ICTOP0, ICUM, ZTMST, &
1007 IHMIN, ZHHATT, ZQSENH)
1008 IF(ICUM.EQ.0) GO TO 1000
1009 !* (C) CHECK CLOUD DEPTH AND CHANGE ENTRAINMENT RATE ACCORDINGLY
1010 ! CALCULATE PRECIPITATION RATE (FOR DOWNDRAFT CALCULATION)
1011 !------------------------------------------------------------------
1013 ZPBMPT=PAPH(JL,KCBOT(JL))-PAPH(JL,KCTOP(JL))
1014 IF(LDCUM(JL)) ICTOP0(JL)=KCTOP(JL)
1015 IF(LDCUM(JL).AND.KTYPE(JL).EQ.1.AND.ZPBMPT.LT.ZDNOPRC) KTYPE(JL)=2
1016 IF(KTYPE(JL).EQ.2.and.nentr.eq.1) then
1018 if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.1
1021 ZDEPTH=ZRG*(ZGEOH(JL,KCTOP(JL))-ZGEOH(JL,KCBOT(JL)))
1022 ZENTR(JL)=MAX(ENTRPEN,1.5/MAX(500.0,ZDEPTH))
1023 if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.1
1025 ZRFL(JL)=ZDMFUP(JL,1)
1029 ZRFL(JL)=ZRFL(JL)+ZDMFUP(JL,JK)
1031 !-----------------------------------------
1032 !* 5.0 CUMULUS DOWNDRAFT CALCULATIONS
1033 !-----------------------------------------
1036 !* (A) DETERMINE LFS IN 'CUDLFS'
1037 !--------------------------------------
1039 (KLON, KLEV, KLEVP1, ZTENH, ZQENH, &
1040 PUEN, PVEN, ZGEOH, PAPH, PTU, &
1041 PQU, ZUU, ZVU, LDCUM, KCBOT, &
1042 KCTOP, ZMFUB, ZRFL, ZTD, ZQD, &
1043 ZUD, ZVD, PMFD, ZMFDS, ZMFDQ, &
1044 ZDMFDP, IDTOP, LODDRAF)
1045 !* (B) DETERMINE DOWNDRAFT T,Q AND FLUXES IN 'CUDDRAF'
1046 !------------------------------------------------------------
1048 (KLON, KLEV, KLEVP1, ZTENH, ZQENH, &
1049 PUEN, PVEN, ZGEOH, PAPH, ZRFL, &
1050 LODDRAF, ZTD, ZQD, ZUD, ZVD, &
1051 PMFD, ZMFDS, ZMFDQ, ZDMFDP)
1052 !* (C) RECALCULATE CONVECTIVE FLUXES DUE TO EFFECT OF
1053 ! DOWNDRAFTS ON BOUNDARY LAYER MOISTURE BUDGET
1054 !-----------------------------------------------------------
1057 !-- 5.1 Recalculate cloud base massflux from a cape closure
1058 ! for deep convection (ktype=1) and by PBL equilibrium
1059 ! taking downdrafts into account for shallow convection
1061 ! implemented by Y. WANG based on ECHAM4 in Nov. 2001.
1067 ZMFUB1(JL)=ZMFUB(JL)
1071 IF(LDCUM(JL).AND.KTYPE(JL).EQ.1) THEN
1072 KTOP0=MAX(12,KCTOP(JL))
1074 IF(JK.LE.KCBOT(JL).AND.JK.GT.KCTOP(JL)) THEN
1075 ZRO=PAPH(JL,JK)/(RD*ZTENH(JL,JK))
1076 ZDZ=(PAPH(JL,JK)-PAPH(JL,JK-1))/(G*ZRO)
1077 ZHEAT(JL)=ZHEAT(JL)+((PTEN(JL,JK-1)-PTEN(JL,JK) &
1078 +G*ZDZ/CPD)/ZTENH(JL,JK)+0.608*(PQEN(JL,JK-1)- &
1079 PQEN(JL,JK)))*(PMFU(JL,JK)+PMFD(JL,JK))*G/ZRO
1080 ZCAPE(JL)=ZCAPE(JL)+G*((PTU(JL,JK)*(1.+.608*PQU(JL,JK) &
1081 -PLU(JL,JK)))/(ZTENH(JL,JK)*(1.+.608*ZQENH(JL,JK))) &
1084 IF(JK.LE.KCBOT(JL).AND.JK.GT.KTOP0) THEN
1085 dept=(PAPH(JL,JK)-PAPH(JL,JK-1))/(PAPH(JL,KCBOT(JL))- &
1087 ZRELH(JL)=ZRELH(JL)+dept*PQEN(JL,JK)/PQSEN(JL,JK)
1091 IF(ZRELH(JL).GE.CRIRH) THEN
1093 ! ZHT=MAX(0.0,(ZCAPE(JL)-300.0))/(ZTAU*ZHEAT(JL))
1094 ZHT=MAX(0.0,(ZCAPE(JL)-0.0))/(ZTAU*ZHEAT(JL))
1095 ZMFUB1(JL)=MAX(ZMFUB(JL)*ZHT,0.01)
1096 ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
1097 ZMFUB1(JL)=MIN(ZMFUB1(JL),ZMFMAX)
1106 !* 5.2 RECALCULATE CONVECTIVE FLUXES DUE TO EFFECT OF
1107 ! DOWNDRAFTS ON BOUNDARY LAYER MOISTURE BUDGET
1108 !--------------------------------------------------------
1110 IF(KTYPE(JL).NE.1) THEN
1112 IF(PMFD(JL,IKB).LT.0.0.AND.LODDRAF(JL)) THEN
1117 ZQUMQE=PQU(JL,IKB)+PLU(JL,IKB)- &
1118 ZEPS*ZQD(JL,IKB)-(1.-ZEPS)*ZQENH(JL,IKB)
1119 ZDQMIN=MAX(0.01*ZQENH(JL,IKB),1.E-10)
1120 ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
1121 IF(ZDQPBL(JL).GT.0..AND.ZQUMQE.GT.ZDQMIN.AND.LDCUM(JL) &
1122 .AND.ZMFUB(JL).LT.ZMFMAX) THEN
1123 ZMFUB1(JL)=ZDQPBL(JL)/(G*MAX(ZQUMQE,ZDQMIN))
1125 ZMFUB1(JL)=ZMFUB(JL)
1127 LLO1=(KTYPE(JL).EQ.2).AND.ABS(ZMFUB1(JL) &
1128 -ZMFUB(JL)).LT.0.2*ZMFUB(JL)
1129 IF(.NOT.LLO1) ZMFUB1(JL)=ZMFUB(JL)
1130 ZMFUB1(JL)=MIN(ZMFUB1(JL),ZMFMAX)
1136 ZFAC=ZMFUB1(JL)/MAX(ZMFUB(JL),1.E-10)
1137 PMFD(JL,JK)=PMFD(JL,JK)*ZFAC
1138 ZMFDS(JL,JK)=ZMFDS(JL,JK)*ZFAC
1139 ZMFDQ(JL,JK)=ZMFDQ(JL,JK)*ZFAC
1140 ZDMFDP(JL,JK)=ZDMFDP(JL,JK)*ZFAC
1150 ZMFUB(JL)=ZMFUB1(JL)
1156 !---------------------------------------------------------------
1157 !* 6.0 DETERMINE FINAL CLOUD ASCENT FOR ENTRAINING PLUME
1158 !* FOR PENETRATIVE CONVECTION (TYPE=1),
1159 !* FOR SHALLOW TO MEDIUM CONVECTION (TYPE=2)
1160 !* AND FOR MID-LEVEL CONVECTION (TYPE=3).
1161 !---------------------------------------------------------------
1164 (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
1165 ZQENH, PUEN, PVEN, PTEN, PQEN, &
1166 PQSEN, PGEO, ZGEOH, PAP, PAPH, &
1167 PQTE, PVERV, ILWMIN, LDCUM, ZHCBASE,&
1168 KTYPE, ILAB, PTU, PQU, PLU, &
1169 ZUU, ZVU, PMFU, ZMFUB, ZENTR, &
1170 ZMFUS, ZMFUQ, ZMFUL, PLUDE, ZDMFUP, &
1171 KCBOT, KCTOP, ICTOP0, ICUM, ZTMST, &
1172 IHMIN, ZHHATT, ZQSENH)
1173 !----------------------------------------------------------
1174 !* 7.0 DETERMINE FINAL CONVECTIVE FLUXES IN 'CUFLX'
1175 !----------------------------------------------------------
1178 (KLON, KLEV, KLEVP1, PQEN, PQSEN, &
1179 ZTENH, ZQENH, PAPH, ZGEOH, KCBOT, &
1180 KCTOP, IDTOP, KTYPE, LODDRAF, LDCUM, &
1181 PMFU, PMFD, ZMFUS, ZMFDS, ZMFUQ, &
1182 ZMFDQ, ZMFUL, PLUDE, ZDMFUP, ZDMFDP, &
1183 ZRFL, PRAIN, PTEN, ZSFL, ZDPMEL, &
1184 ITOPM2, ZTMST, sig1)
1185 !----------------------------------------------------------------
1186 !* 8.0 UPDATE TENDENCIES FOR T AND Q IN SUBROUTINE CUDTDQ
1187 !----------------------------------------------------------------
1190 (KLON, KLEV, KLEVP1, ITOPM2, PAPH, &
1191 LDCUM, PTEN, PTTE, PQTE, ZMFUS, &
1192 ZMFDS, ZMFUQ, ZMFDQ, ZMFUL, ZDMFUP, &
1193 ZDMFDP, ZTMST, ZDPMEL, PRAIN, ZRFL, &
1194 ZSFL, PSRAIN, PSEVAP, PSHEAT, PSMELT, &
1195 PRSFC, PSSFC, PAPRC, PAPRSM, PAPRS, &
1196 PQEN, PQSEN, PLUDE, PCTE)
1197 !----------------------------------------------------------------
1198 !* 9.0 UPDATE TENDENCIES FOR U AND U IN SUBROUTINE CUDUDV
1199 !----------------------------------------------------------------
1203 (KLON, KLEV, KLEVP1, ITOPM2, KTYPE, &
1204 KCBOT, PAPH, LDCUM, PUEN, PVEN, &
1205 PVOM, PVOL, ZUU, ZUD, ZVU, &
1206 ZVD, PMFU, PMFD, PSDISS)
1210 END SUBROUTINE CUMASTR_NEW
1213 !#############################################################
1215 ! LEVEL 3 SUBROUTINEs
1217 !#############################################################
1218 !**********************************************
1220 !**********************************************
1223 (KLON, KLEV, KLEVP1, KLEVM1, PTEN, &
1224 PQEN, PQSEN, PUEN, PVEN, PVERV, &
1225 PGEO, PAPH, PGEOH, PTENH, PQENH, &
1226 PQSENH, KLWMIN, PTU, PQU, PTD, &
1227 PQD, PUU, PVU, PUD, PVD, &
1228 PMFU, PMFD, PMFUS, PMFDS, PMFUQ, &
1229 PMFDQ, PDMFUP, PDMFDP, PDPMEL, PLU, &
1231 ! M.TIEDTKE E.C.M.W.F. 12/89
1234 ! THIS ROUTINE INTERPOLATES LARGE-SCALE FIELDS OF T,Q ETC.
1235 ! TO HALF LEVELS (I.E. GRID FOR MASSFLUX SCHEME),
1236 ! AND INITIALIZES VALUES FOR UPDRAFTS AND DOWNDRAFTS
1239 ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
1242 ! FOR EXTRAPOLATION TO HALF LEVELS SEE TIEDTKE(1989)
1245 ! *CUADJTQ* TO SPECIFY QS AT HALF LEVELS
1246 ! ----------------------------------------------------------------
1247 !-------------------------------------------------------------------
1249 !-------------------------------------------------------------------
1250 INTEGER KLON, KLEV, KLEVP1
1252 INTEGER JK,JL,IK, ICALL
1254 REAL PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
1255 PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
1256 PQSEN(KLON,KLEV), PVERV(KLON,KLEV), &
1257 PGEO(KLON,KLEV), PGEOH(KLON,KLEV), &
1258 PAPH(KLON,KLEVP1), PTENH(KLON,KLEV), &
1259 PQENH(KLON,KLEV), PQSENH(KLON,KLEV)
1260 REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
1261 PTD(KLON,KLEV), PQD(KLON,KLEV), &
1262 PUU(KLON,KLEV), PUD(KLON,KLEV), &
1263 PVU(KLON,KLEV), PVD(KLON,KLEV), &
1264 PMFU(KLON,KLEV), PMFD(KLON,KLEV), &
1265 PMFUS(KLON,KLEV), PMFDS(KLON,KLEV), &
1266 PMFUQ(KLON,KLEV), PMFDQ(KLON,KLEV), &
1267 PDMFUP(KLON,KLEV), PDMFDP(KLON,KLEV), &
1268 PLU(KLON,KLEV), PLUDE(KLON,KLEV)
1269 REAL ZWMAX(KLON), ZPH(KLON), &
1271 INTEGER KLAB(KLON,KLEV), KLWMIN(KLON)
1272 LOGICAL LOFLAG(KLON)
1273 !------------------------------------------------------------
1274 !* 1. SPECIFY LARGE SCALE PARAMETERS AT HALF LEVELS
1275 !* ADJUST TEMPERATURE FIELDS IF STATICLY UNSTABLE
1276 !* FIND LEVEL OF MAXIMUM VERTICAL VELOCITY
1277 ! -----------------------------------------------------------
1282 PGEOH(JL,JK)=PGEO(JL,JK)+(PGEO(JL,JK-1)-PGEO(JL,JK))*ZDP
1283 PTENH(JL,JK)=(MAX(CPD*PTEN(JL,JK-1)+PGEO(JL,JK-1), &
1284 CPD*PTEN(JL,JK)+PGEO(JL,JK))-PGEOH(JL,JK))*RCPD
1285 PQSENH(JL,JK)=PQSEN(JL,JK-1)
1291 CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTENH,PQSENH,LOFLAG,ICALL)
1293 PQENH(JL,JK)=MIN(PQEN(JL,JK-1),PQSEN(JL,JK-1)) &
1294 +(PQSENH(JL,JK)-PQSEN(JL,JK-1))
1295 PQENH(JL,JK)=MAX(PQENH(JL,JK),0.)
1299 PTENH(JL,KLEV)=(CPD*PTEN(JL,KLEV)+PGEO(JL,KLEV)- &
1300 PGEOH(JL,KLEV))*RCPD
1301 PQENH(JL,KLEV)=PQEN(JL,KLEV)
1302 PTENH(JL,1)=PTEN(JL,1)
1303 PQENH(JL,1)=PQEN(JL,1)
1304 PGEOH(JL,1)=PGEO(JL,1)
1308 DO 160 JK=KLEVM1,2,-1
1310 ZZS=MAX(CPD*PTENH(JL,JK)+PGEOH(JL,JK), &
1311 CPD*PTENH(JL,JK+1)+PGEOH(JL,JK+1))
1312 PTENH(JL,JK)=(ZZS-PGEOH(JL,JK))*RCPD
1317 IF(PVERV(JL,JK).LT.ZWMAX(JL)) THEN
1318 ZWMAX(JL)=PVERV(JL,JK)
1323 !-----------------------------------------------------------
1324 !* 2.0 INITIALIZE VALUES FOR UPDRAFTS AND DOWNDRAFTS
1325 !-----------------------------------------------------------
1331 PTU(JL,JK)=PTENH(JL,JK)
1332 PTD(JL,JK)=PTENH(JL,JK)
1333 PQU(JL,JK)=PQENH(JL,JK)
1334 PQD(JL,JK)=PQENH(JL,JK)
1336 PUU(JL,JK)=PUEN(JL,IK)
1337 PUD(JL,JK)=PUEN(JL,IK)
1338 PVU(JL,JK)=PVEN(JL,IK)
1339 PVD(JL,JK)=PVEN(JL,IK)
1354 END SUBROUTINE CUINI
1356 !**********************************************
1358 !**********************************************
1360 (KLON, KLEV, KLEVP1, KLEVM1, PTENH, &
1361 PQENH, PGEOH, PAPH, PTU, PQU, &
1362 PLU, PUEN, PVEN, PUU, PVU, &
1364 ! THIS ROUTINE CALCULATES CLOUD BASE VALUES (T AND Q)
1365 ! FOR CUMULUS PARAMETERIZATION
1366 ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
1369 ! TO PRODUCE CLOUD BASE VALUES FOR CU-PARAMETRIZATION
1372 ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
1373 ! INPUT ARE ENVIRONM. VALUES OF T,Q,P,PHI AT HALF LEVELS.
1374 ! IT RETURNS CLOUD BASE VALUES AND FLAGS AS FOLLOWS;
1375 ! KLAB=1 FOR SUBCLOUD LEVELS
1376 ! KLAB=2 FOR CONDENSATION LEVEL
1379 ! LIFT SURFACE AIR DRY-ADIABATICALLY TO CLOUD BASE
1380 ! (NON ENTRAINING PLUME,I.E.CONSTANT MASSFLUX)
1383 ! *CUADJTQ* FOR ADJUSTING T AND Q DUE TO CONDENSATION IN ASCENT
1384 ! ----------------------------------------------------------------
1385 !-------------------------------------------------------------------
1387 !-------------------------------------------------------------------
1388 INTEGER KLON, KLEV, KLEVP1
1390 INTEGER JL,JK,IS,IK,ICALL,IKB
1392 REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
1393 PGEOH(KLON,KLEV), PAPH(KLON,KLEVP1)
1394 REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
1396 REAL PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
1397 PUU(KLON,KLEV), PVU(KLON,KLEV)
1398 REAL ZQOLD(KLON,KLEV), ZPH(KLON)
1399 INTEGER KLAB(KLON,KLEV), KCBOT(KLON)
1400 LOGICAL LDCUM(KLON), LOFLAG(KLON)
1401 !***INPUT VARIABLES:
1402 ! PTENH [ZTENH] - Environment Temperature on half levels. (CUINI)
1403 ! PQENH [ZQENH] - Env. specific humidity on half levels. (CUINI)
1404 ! PGEOH [ZGEOH] - Geopotential on half levels, (MSSFLX)
1405 ! PAPH - Pressure of half levels. (MSSFLX)
1406 !***VARIABLES MODIFIED BY CUBASE:
1407 ! LDCUM - Logical denoting profiles. (CUBASE)
1408 ! KTYPE - Convection type - 1: Penetrative (CUMASTR)
1409 ! 2: Stratocumulus (CUMASTR)
1410 ! 3: Mid-level (CUASC)
1411 ! PTU - Cloud Temperature.
1412 ! PQU - Cloud specific Humidity.
1413 ! PLU - Cloud Liquid Water (Moisture condensed out)
1414 ! KCBOT - Cloud Base Level. (CUBASE)
1415 ! KLAB [ILAB] - Level Label - 1: Sub-cloud layer (CUBASE)
1416 !------------------------------------------------
1417 ! 1. INITIALIZE VALUES AT LIFTING LEVEL
1418 !------------------------------------------------
1424 PUU(JL,KLEV)=PUEN(JL,KLEV)*(PAPH(JL,KLEVP1)-PAPH(JL,KLEV))
1425 PVU(JL,KLEV)=PVEN(JL,KLEV)*(PAPH(JL,KLEVP1)-PAPH(JL,KLEV))
1427 !-------------------------------------------------------
1428 ! 2.0 DO ASCENT IN SUBCLOUD LAYER,
1429 ! CHECK FOR EXISTENCE OF CONDENSATION LEVEL,
1430 ! ADJUST T,Q AND L ACCORDINGLY IN *CUADJTQ*,
1431 ! CHECK FOR BUOYANCY AND SET FLAGS
1432 !-------------------------------------------------------
1437 DO 290 JK=KLEVM1,2,-1
1440 IF(KLAB(JL,JK+1).EQ.1) THEN
1448 IF(IS.EQ.0) GO TO 290
1451 PQU(JL,JK)=PQU(JL,JK+1)
1452 PTU(JL,JK)=(CPD*PTU(JL,JK+1)+PGEOH(JL,JK+1) &
1454 ZBUO=PTU(JL,JK)*(1.+VTMPC1*PQU(JL,JK))- &
1455 PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))+ZBUO0
1456 IF(ZBUO.GT.0.) KLAB(JL,JK)=1
1457 ZQOLD(JL,JK)=PQU(JL,JK)
1462 CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTU,PQU,LOFLAG,ICALL)
1464 IF(LOFLAG(JL).AND.PQU(JL,JK).NE.ZQOLD(JL,JK)) THEN
1466 PLU(JL,JK)=PLU(JL,JK)+ZQOLD(JL,JK)-PQU(JL,JK)
1467 ZBUO=PTU(JL,JK)*(1.+VTMPC1*PQU(JL,JK))- &
1468 PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))+ZBUO0
1475 ! CALCULATE AVERAGES OF U AND V FOR SUBCLOUD ARA,.
1476 ! THE VALUES WILL BE USED TO DEFINE CLOUD BASE VALUES.
1479 IF(JK.GE.KCBOT(JL)) THEN
1480 PUU(JL,KLEV)=PUU(JL,KLEV)+ &
1481 PUEN(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
1482 PVU(JL,KLEV)=PVU(JL,KLEV)+ &
1483 PVEN(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
1492 ZZ=1./(PAPH(JL,KLEVP1)-PAPH(JL,IKB))
1493 PUU(JL,KLEV)=PUU(JL,KLEV)*ZZ
1494 PVU(JL,KLEV)=PVU(JL,KLEV)*ZZ
1496 PUU(JL,KLEV)=PUEN(JL,KLEVM1)
1497 PVU(JL,KLEV)=PVEN(JL,KLEVM1)
1502 END SUBROUTINE CUBASE
1505 !**********************************************
1506 ! SUBROUTINE CUASC_NEW
1507 !**********************************************
1508 SUBROUTINE CUASC_NEW &
1509 (KLON, KLEV, KLEVP1, KLEVM1, PTENH, &
1510 PQENH, PUEN, PVEN, PTEN, PQEN, &
1511 PQSEN, PGEO, PGEOH, PAP, PAPH, &
1512 PQTE, PVERV, KLWMIN, LDCUM, PHCBASE,&
1513 KTYPE, KLAB, PTU, PQU, PLU, &
1514 PUU, PVU, PMFU, PMFUB, PENTR, &
1515 PMFUS, PMFUQ, PMFUL, PLUDE, PDMFUP, &
1516 KCBOT, KCTOP, KCTOP0, KCUM, ZTMST, &
1517 KHMIN, PHHATT, PQSENH)
1518 ! THIS ROUTINE DOES THE CALCULATIONS FOR CLOUD ASCENTS
1519 ! FOR CUMULUS PARAMETERIZATION
1520 ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
1521 ! Y.WANG IPRC 11/01 MODIF.
1524 ! TO PRODUCE CLOUD ASCENTS FOR CU-PARAMETRIZATION
1525 ! (VERTICAL PROFILES OF T,Q,L,U AND V AND CORRESPONDING
1526 ! FLUXES AS WELL AS PRECIPITATION RATES)
1529 ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
1532 ! LIFT SURFACE AIR DRY-ADIABATICALLY TO CLOUD BASE
1533 ! AND THEN CALCULATE MOIST ASCENT FOR
1534 ! ENTRAINING/DETRAINING PLUME.
1535 ! ENTRAINMENT AND DETRAINMENT RATES DIFFER FOR
1536 ! SHALLOW AND DEEP CUMULUS CONVECTION.
1537 ! IN CASE THERE IS NO PENETRATIVE OR SHALLOW CONVECTION
1538 ! CHECK FOR POSSIBILITY OF MID LEVEL CONVECTION
1539 ! (CLOUD BASE VALUES CALCULATED IN *CUBASMC*)
1542 ! *CUADJTQ* ADJUST T AND Q DUE TO CONDENSATION IN ASCENT
1543 ! *CUENTR_NEW* CALCULATE ENTRAINMENT/DETRAINMENT RATES
1544 ! *CUBASMC* CALCULATE CLOUD BASE VALUES FOR MIDLEVEL CONVECTION
1548 !***INPUT VARIABLES:
1549 ! PTENH [ZTENH] - Environ Temperature on half levels. (CUINI)
1550 ! PQENH [ZQENH] - Env. specific humidity on half levels. (CUINI)
1551 ! PUEN - Environment wind u-component. (MSSFLX)
1552 ! PVEN - Environment wind v-component. (MSSFLX)
1553 ! PTEN - Environment Temperature. (MSSFLX)
1554 ! PQEN - Environment Specific Humidity. (MSSFLX)
1555 ! PQSEN - Environment Saturation Specific Humidity. (MSSFLX)
1556 ! PGEO - Geopotential. (MSSFLX)
1557 ! PGEOH [ZGEOH] - Geopotential on half levels, (MSSFLX)
1558 ! PAP - Pressure in Pa. (MSSFLX)
1559 ! PAPH - Pressure of half levels. (MSSFLX)
1560 ! PQTE - Moisture convergence (Delta q/Delta t). (MSSFLX)
1561 ! PVERV - Large Scale Vertical Velocity (Omega). (MSSFLX)
1562 ! KLWMIN [ILWMIN] - Level of Minimum Omega. (CUINI)
1563 ! KLAB [ILAB] - Level Label - 1: Sub-cloud layer.
1564 ! 2: Condensation Level (Cloud Base)
1565 ! PMFUB [ZMFUB] - Updraft Mass Flux at Cloud Base. (CUMASTR)
1566 !***VARIABLES MODIFIED BY CUASC:
1567 ! LDCUM - Logical denoting profiles. (CUBASE)
1568 ! KTYPE - Convection type - 1: Penetrative (CUMASTR)
1569 ! 2: Stratocumulus (CUMASTR)
1570 ! 3: Mid-level (CUASC)
1571 ! PTU - Cloud Temperature.
1572 ! PQU - Cloud specific Humidity.
1573 ! PLU - Cloud Liquid Water (Moisture condensed out)
1574 ! PUU [ZUU] - Cloud Momentum U-Component.
1575 ! PVU [ZVU] - Cloud Momentum V-Component.
1576 ! PMFU - Updraft Mass Flux.
1577 ! PENTR [ZENTR] - Entrainment Rate. (CUMASTR ) (CUBASMC)
1578 ! PMFUS [ZMFUS] - Updraft Flux of Dry Static Energy. (CUBASMC)
1579 ! PMFUQ [ZMFUQ] - Updraft Flux of Specific Humidity.
1580 ! PMFUL [ZMFUL] - Updraft Flux of Cloud Liquid Water.
1581 ! PLUDE - Liquid Water Returned to Environment by Detrainment.
1583 ! KCBOT - Cloud Base Level. (CUBASE)
1585 ! KCTOP0 [ICTOP0] - Estimate of Cloud Top. (CUMASTR)
1587 !-------------------------------------------------------------------
1589 !-------------------------------------------------------------------
1590 INTEGER KLON, KLEV, KLEVP1
1592 REAL ZTMST,ZCONS2,ZDZ,ZDRODZ
1593 INTEGER JL,JK,IKB,IK,IS,IKT,ICALL
1594 REAL ZMFMAX,ZFAC,ZMFTEST,ZDPRHO,ZMSE,ZNEVN,ZODMAX
1595 REAL ZQEEN,ZSEEN,ZSCDE,ZGA,ZDT,ZSCOD
1596 REAL ZQUDE,ZQCOD, ZMFUSK, ZMFUQK,ZMFULK
1597 REAL ZBUO, ZPRCON, ZLNEW, ZZ, ZDMFEU, ZDMFDU
1599 REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
1600 PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
1601 PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
1602 PGEO(KLON,KLEV), PGEOH(KLON,KLEV), &
1603 PAP(KLON,KLEV), PAPH(KLON,KLEVP1), &
1604 PQSEN(KLON,KLEV), PQTE(KLON,KLEV), &
1605 PVERV(KLON,KLEV), PQSENH(KLON,KLEV)
1606 REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
1607 PUU(KLON,KLEV), PVU(KLON,KLEV), &
1608 PMFU(KLON,KLEV), ZPH(KLON), &
1609 PMFUB(KLON), PENTR(KLON), &
1610 PMFUS(KLON,KLEV), PMFUQ(KLON,KLEV), &
1611 PLU(KLON,KLEV), PLUDE(KLON,KLEV), &
1612 PMFUL(KLON,KLEV), PDMFUP(KLON,KLEV)
1613 REAL ZDMFEN(KLON), ZDMFDE(KLON), &
1614 ZMFUU(KLON), ZMFUV(KLON), &
1615 ZPBASE(KLON), ZQOLD(KLON), &
1616 PHHATT(KLON,KLEV), ZODETR(KLON,KLEV), &
1617 ZOENTR(KLON,KLEV), ZBUOY(KLON)
1619 INTEGER KLWMIN(KLON), KTYPE(KLON), &
1620 KLAB(KLON,KLEV), KCBOT(KLON), &
1621 KCTOP(KLON), KCTOP0(KLON), &
1623 LOGICAL LDCUM(KLON), LOFLAG(KLON)
1624 !--------------------------------
1625 !* 1. SPECIFY PARAMETERS
1626 !--------------------------------
1629 !---------------------------------
1630 ! 2. SET DEFAULT VALUES
1631 !---------------------------------
1637 IF(.NOT.LDCUM(JL)) KTYPE(JL)=0
1650 IF(.NOT.LDCUM(JL).OR.KTYPE(JL).EQ.3) KLAB(JL,JK)=0
1651 IF(.NOT.LDCUM(JL).AND.PAPH(JL,JK).LT.4.E4) KCTOP0(JL)=JK
1653 !------------------------------------------------
1654 ! 3.0 INITIALIZE VALUES AT LIFTING LEVEL
1655 !------------------------------------------------
1658 IF(.NOT.LDCUM(JL)) THEN
1663 PMFU(JL,KLEV)=PMFUB(JL)
1664 PMFUS(JL,KLEV)=PMFUB(JL)*(CPD*PTU(JL,KLEV)+PGEOH(JL,KLEV))
1665 PMFUQ(JL,KLEV)=PMFUB(JL)*PQU(JL,KLEV)
1667 ZMFUU(JL)=PMFUB(JL)*PUU(JL,KLEV)
1668 ZMFUV(JL)=PMFUB(JL)*PVU(JL,KLEV)
1672 !-- 3.1 Find organized entrainment at cloud base
1676 IF (KTYPE(JL).EQ.1) THEN
1678 ZBUOY(JL)=G*((PTU(JL,IKB)-PTENH(JL,IKB))/PTENH(JL,IKB)+ &
1679 0.608*(PQU(JL,IKB)-PQENH(JL,IKB)))
1680 IF (ZBUOY(JL).GT.0.) THEN
1681 ZDZ = (PGEO(JL,IKB-1)-PGEO(JL,IKB))*ZRG
1682 ZDRODZ = -LOG(PTEN(JL,IKB-1)/PTEN(JL,IKB))/ZDZ - &
1683 G/(RD*PTENH(JL,IKB))
1684 ZOENTR(JL,IKB-1)=ZBUOY(JL)*0.5/(1.+ZBUOY(JL)*ZDZ) &
1686 ZOENTR(JL,IKB-1) = MIN(ZOENTR(JL,IKB-1),1.E-3)
1687 ZOENTR(JL,IKB-1) = MAX(ZOENTR(JL,IKB-1),0.)
1692 !-----------------------------------------------------------------
1693 ! 4. DO ASCENT: SUBCLOUD LAYER (KLAB=1) ,CLOUDS (KLAB=2)
1694 ! BY DOING FIRST DRY-ADIABATIC ASCENT AND THEN
1695 ! BY ADJUSTING T,Q AND L ACCORDINGLY IN *CUADJTQ*,
1696 ! THEN CHECK FOR BUOYANCY AND SET FLAGS ACCORDINGLY
1697 !-----------------------------------------------------------------
1699 DO 480 JK=KLEVM1,2,-1
1700 ! SPECIFY CLOUD BASE VALUES FOR MIDLEVEL CONVECTION
1701 ! IN *CUBASMC* IN CASE THERE IS NOT ALREADY CONVECTION
1702 ! ---------------------------------------------------------------------
1704 IF(LMFMID.AND.IK.LT.KLEVM1.AND.IK.GT.KLEV-13) THEN
1706 (KLON, KLEV, KLEVM1, IK, PTEN, &
1707 PQEN, PQSEN, PUEN, PVEN, PVERV, &
1708 PGEO, PGEOH, LDCUM, KTYPE, KLAB, &
1709 PMFU, PMFUB, PENTR, KCBOT, PTU, &
1710 PQU, PLU, PUU, PVU, PMFUS, &
1711 PMFUQ, PMFUL, PDMFUP, ZMFUU, ZMFUV)
1717 IF(KLAB(JL,JK+1).EQ.0) KLAB(JL,JK)=0
1718 LOFLAG(JL)=KLAB(JL,JK+1).GT.0
1720 IF(KTYPE(JL).EQ.3.AND.JK.EQ.KCBOT(JL)) THEN
1721 ZMFMAX=(PAPH(JL,JK)-PAPH(JL,JK-1))*ZCONS2
1722 IF(PMFUB(JL).GT.ZMFMAX) THEN
1723 ZFAC=ZMFMAX/PMFUB(JL)
1724 PMFU(JL,JK+1)=PMFU(JL,JK+1)*ZFAC
1725 PMFUS(JL,JK+1)=PMFUS(JL,JK+1)*ZFAC
1726 PMFUQ(JL,JK+1)=PMFUQ(JL,JK+1)*ZFAC
1727 ZMFUU(JL)=ZMFUU(JL)*ZFAC
1728 ZMFUV(JL)=ZMFUV(JL)*ZFAC
1733 IF(IS.EQ.0) GO TO 480
1735 !* SPECIFY ENTRAINMENT RATES IN *CUENTR_NEW*
1736 ! -------------------------------------
1739 (KLON, KLEV, KLEVP1, IK, PTENH,&
1740 PAPH, PAP, PGEOH, KLWMIN, LDCUM,&
1741 KTYPE, KCBOT, KCTOP0, ZPBASE, PMFU, &
1742 PENTR, ZDMFEN, ZDMFDE, ZODETR, KHMIN)
1744 ! DO ADIABATIC ASCENT FOR ENTRAINING/DETRAINING PLUME
1745 ! -------------------------------------------------------
1746 ! Do adiabatic ascent for entraining/detraining plume
1747 ! the cloud ensemble entrains environmental values
1748 ! in turbulent detrainment cloud ensemble values are detrained
1749 ! in organized detrainment the dry static energy and
1750 ! moisture that are neutral compared to the
1751 ! environmental air are detrained
1755 IF(JK.LT.KCBOT(JL)) THEN
1756 ZMFTEST=PMFU(JL,JK+1)+ZDMFEN(JL)-ZDMFDE(JL)
1757 ZMFMAX=MIN(ZMFTEST,(PAPH(JL,JK)-PAPH(JL,JK-1))*ZCONS2)
1758 ZDMFEN(JL)=MAX(ZDMFEN(JL)-MAX(ZMFTEST-ZMFMAX,0.),0.)
1760 ZDMFDE(JL)=MIN(ZDMFDE(JL),0.75*PMFU(JL,JK+1))
1761 PMFU(JL,JK)=PMFU(JL,JK+1)+ZDMFEN(JL)-ZDMFDE(JL)
1762 IF (JK.LT.kcbot(jl)) THEN
1763 zdprho = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg
1764 zoentr(jl,jk) = zoentr(jl,jk)*zdprho*pmfu(jl,jk+1)
1765 zmftest = pmfu(jl,jk) + zoentr(jl,jk)-zodetr(jl,jk)
1766 zmfmax = MIN(zmftest,(paph(jl,jk)-paph(jl,jk-1))*zcons2)
1767 zoentr(jl,jk) = MAX(zoentr(jl,jk)-MAX(zmftest-zmfmax,0.),0.)
1770 ! limit organized detrainment to not allowing for too deep clouds
1772 IF (ktype(jl).EQ.1.AND.jk.LT.kcbot(jl).AND.jk.LE.khmin(jl)) THEN
1773 zmse = cpd*ptu(jl,jk+1) + alv*pqu(jl,jk+1) + pgeoh(jl,jk+1)
1775 znevn=(pgeoh(jl,ikt)-pgeoh(jl,jk+1))*(zmse-phhatt(jl, &
1777 IF (znevn.LE.0.) znevn = 1.
1778 zdprho = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg
1779 zodmax = ((phcbase(jl)-zmse)/znevn)*zdprho*pmfu(jl,jk+1)
1780 zodmax = MAX(zodmax,0.)
1781 zodetr(jl,jk) = MIN(zodetr(jl,jk),zodmax)
1783 zodetr(jl,jk) = MIN(zodetr(jl,jk),0.75*pmfu(jl,jk))
1784 pmfu(jl,jk) = pmfu(jl,jk) + zoentr(jl,jk) - zodetr(jl,jk)
1785 ZQEEN=PQENH(JL,JK+1)*ZDMFEN(JL)
1786 zqeen=zqeen + pqenh(jl,jk+1)*zoentr(jl,jk)
1787 ZSEEN=(CPD*PTENH(JL,JK+1)+PGEOH(JL,JK+1))*ZDMFEN(JL)
1788 zseen=zseen+(cpd*ptenh(jl,jk+1)+pgeoh(jl,jk+1))* &
1790 ZSCDE=(CPD*PTU(JL,JK+1)+PGEOH(JL,JK+1))*ZDMFDE(JL)
1791 ! find moist static energy that give nonbuoyant air
1792 zga = alv*pqsenh(jl,jk+1)/(rv*(ptenh(jl,jk+1)**2))
1793 zdt = (plu(jl,jk+1)-0.608*(pqsenh(jl,jk+1)-pqenh(jl, &
1794 jk+1)))/(1./ptenh(jl,jk+1)+0.608*zga)
1795 zscod = cpd*ptenh(jl,jk+1) + pgeoh(jl,jk+1) + cpd*zdt
1796 zscde = zscde + zodetr(jl,jk)*zscod
1797 zqude = pqu(jl,jk+1)*zdmfde(jl)
1798 zqcod = pqsenh(jl,jk+1) + zga*zdt
1799 zqude = zqude + zodetr(jl,jk)*zqcod
1800 plude(jl,jk) = plu(jl,jk+1)*zdmfde(jl)
1801 plude(jl,jk) = plude(jl,jk)+plu(jl,jk+1)*zodetr(jl,jk)
1802 zmfusk = pmfus(jl,jk+1) + zseen - zscde
1803 zmfuqk = pmfuq(jl,jk+1) + zqeen - zqude
1804 zmfulk = pmful(jl,jk+1) - plude(jl,jk)
1805 plu(jl,jk) = zmfulk*(1./MAX(cmfcmin,pmfu(jl,jk)))
1806 pqu(jl,jk) = zmfuqk*(1./MAX(cmfcmin,pmfu(jl,jk)))
1807 ptu(jl,jk)=(zmfusk*(1./MAX(cmfcmin,pmfu(jl,jk)))- &
1809 ptu(jl,jk) = MAX(100.,ptu(jl,jk))
1810 ptu(jl,jk) = MIN(400.,ptu(jl,jk))
1811 zqold(jl) = pqu(jl,jk)
1814 !* DO CORRECTIONS FOR MOIST ASCENT
1815 !* BY ADJUSTING T,Q AND L IN *CUADJTQ*
1816 !------------------------------------------------
1820 CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTU,PQU,LOFLAG,ICALL)
1823 IF(LOFLAG(JL).AND.PQU(JL,JK).NE.ZQOLD(JL)) THEN
1825 PLU(JL,JK)=PLU(JL,JK)+ZQOLD(JL)-PQU(JL,JK)
1826 ZBUO=PTU(JL,JK)*(1.+VTMPC1*PQU(JL,JK)-PLU(JL,JK))- &
1827 PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))
1828 IF(KLAB(JL,JK+1).EQ.1) ZBUO=ZBUO+ZBUO0
1829 IF(ZBUO.GT.0..AND.PMFU(JL,JK).GT.0.01*PMFUB(JL).AND. &
1830 JK.GE.KCTOP0(JL)) THEN
1833 IF(ZPBASE(JL)-PAPH(JL,JK).GE.ZDNOPRC) THEN
1838 ZLNEW=PLU(JL,JK)/(1.+ZPRCON*(PGEOH(JL,JK)-PGEOH(JL,JK+1)))
1839 PDMFUP(JL,JK)=MAX(0.,(PLU(JL,JK)-ZLNEW)*PMFU(JL,JK))
1847 PMFUL(JL,JK)=PLU(JL,JK)*PMFU(JL,JK)
1848 PMFUS(JL,JK)=(CPD*PTU(JL,JK)+PGEOH(JL,JK))*PMFU(JL,JK)
1849 PMFUQ(JL,JK)=PQU(JL,JK)*PMFU(JL,JK)
1856 zdmfen(jl) = zdmfen(jl) + zoentr(jl,jk)
1857 zdmfde(jl) = zdmfde(jl) + zodetr(jl,jk)
1859 IF(KTYPE(JL).EQ.1.OR.KTYPE(JL).EQ.3) THEN
1860 IF(ZDMFEN(JL).LE.1.E-20) THEN
1866 IF(ZDMFEN(JL).LE.1.0E-20) THEN
1872 ZDMFEU=ZDMFEN(JL)+ZZ*ZDMFDE(JL)
1873 ZDMFDU=ZDMFDE(JL)+ZZ*ZDMFDE(JL)
1874 ZDMFDU=MIN(ZDMFDU,0.75*PMFU(JL,JK+1))
1875 ZMFUU(JL)=ZMFUU(JL)+ &
1876 ZDMFEU*PUEN(JL,JK)-ZDMFDU*PUU(JL,JK+1)
1877 ZMFUV(JL)=ZMFUV(JL)+ &
1878 ZDMFEU*PVEN(JL,JK)-ZDMFDU*PVU(JL,JK+1)
1879 IF(PMFU(JL,JK).GT.0.) THEN
1880 PUU(JL,JK)=ZMFUU(JL)*(1./PMFU(JL,JK))
1881 PVU(JL,JK)=ZMFUV(JL)*(1./PMFU(JL,JK))
1888 ! Compute organized entrainment
1889 ! for use at next level
1892 IF (loflag(jl).AND.ktype(jl).EQ.1) THEN
1893 zbuoyz=g*((ptu(jl,jk)-ptenh(jl,jk))/ptenh(jl,jk)+ &
1894 0.608*(pqu(jl,jk)-pqenh(jl,jk))-plu(jl,jk))
1895 zbuoyz = MAX(zbuoyz,0.0)
1896 zdz = (pgeo(jl,jk-1)-pgeo(jl,jk))*zrg
1897 zdrodz = -LOG(pten(jl,jk-1)/pten(jl,jk))/zdz - &
1899 zbuoy(jl) = zbuoy(jl) + zbuoyz*zdz
1900 zoentr(jl,jk-1) = zbuoyz*0.5/(1.+zbuoy(jl))+zdrodz
1901 zoentr(jl,jk-1) = MIN(zoentr(jl,jk-1),1.E-3)
1902 zoentr(jl,jk-1) = MAX(zoentr(jl,jk-1),0.)
1907 ! -----------------------------------------------------------------
1908 ! 5. DETERMINE CONVECTIVE FLUXES ABOVE NON-BUOYANCY LEVEL
1909 ! -----------------------------------------------------------------
1910 ! (NOTE: CLOUD VARIABLES LIKE T,Q AND L ARE NOT
1911 ! AFFECTED BY DETRAINMENT AND ARE ALREADY KNOWN
1912 ! FROM PREVIOUS CALCULATIONS ABOVE)
1915 IF(KCTOP(JL).EQ.KLEVM1) LDCUM(JL)=.FALSE.
1916 KCBOT(JL)=MAX(KCBOT(JL),KCTOP(JL))
1925 IF(IS.EQ.0) GO TO 800
1930 ZDMFDE(JL)=(1.-ZZDMF)*PMFU(JL,JK+1)
1931 PLUDE(JL,JK)=ZDMFDE(JL)*PLU(JL,JK+1)
1932 PMFU(JL,JK)=PMFU(JL,JK+1)-ZDMFDE(JL)
1933 PMFUS(JL,JK)=(CPD*PTU(JL,JK)+PGEOH(JL,JK))*PMFU(JL,JK)
1934 PMFUQ(JL,JK)=PQU(JL,JK)*PMFU(JL,JK)
1935 PMFUL(JL,JK)=PLU(JL,JK)*PMFU(JL,JK)
1936 PLUDE(JL,JK-1)=PMFUL(JL,JK)
1944 PUU(JL,JK)=PUU(JL,JK+1)
1945 PVU(JL,JK)=PVU(JL,JK+1)
1951 END SUBROUTINE CUASC_NEW
1954 !**********************************************
1956 !**********************************************
1958 (KLON, KLEV, KLEVP1, PTENH, PQENH, &
1959 PUEN, PVEN, PGEOH, PAPH, PTU, &
1960 PQU, PUU, PVU, LDCUM, KCBOT, &
1961 KCTOP, PMFUB, PRFL, PTD, PQD, &
1962 PUD, PVD, PMFD, PMFDS, PMFDQ, &
1963 PDMFDP, KDTOP, LDDRAF)
1964 ! THIS ROUTINE CALCULATES LEVEL OF FREE SINKING FOR
1965 ! CUMULUS DOWNDRAFTS AND SPECIFIES T,Q,U AND V VALUES
1966 ! M.TIEDTKE E.C.M.W.F. 12/86 MODIF. 12/89
1969 ! TO PRODUCE LFS-VALUES FOR CUMULUS DOWNDRAFTS
1970 ! FOR MASSFLUX CUMULUS PARAMETERIZATION
1973 ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
1974 ! INPUT ARE ENVIRONMENTAL VALUES OF T,Q,U,V,P,PHI
1975 ! AND UPDRAFT VALUES T,Q,U AND V AND ALSO
1976 ! CLOUD BASE MASSFLUX AND CU-PRECIPITATION RATE.
1977 ! IT RETURNS T,Q,U AND V VALUES AND MASSFLUX AT LFS.
1980 ! CHECK FOR NEGATIVE BUOYANCY OF AIR OF EQUAL PARTS OF
1981 ! MOIST ENVIRONMENTAL AIR AND CLOUD AIR.
1984 ! *CUADJTQ* FOR CALCULATING WET BULB T AND Q AT LFS
1985 ! ----------------------------------------------------------------
1986 !-------------------------------------------------------------------
1988 !-------------------------------------------------------------------
1989 INTEGER KLON, KLEV, KLEVP1
1990 INTEGER JL,KE,JK,IS,IK,ICALL
1991 REAL ZTTEST, ZQTEST, ZBUO, ZMFTOP
1992 REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
1993 PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
1994 PGEOH(KLON,KLEV), PAPH(KLON,KLEVP1), &
1995 PTU(KLON,KLEV), PQU(KLON,KLEV), &
1996 PUU(KLON,KLEV), PVU(KLON,KLEV), &
1997 PMFUB(KLON), PRFL(KLON)
1998 REAL PTD(KLON,KLEV), PQD(KLON,KLEV), &
1999 PUD(KLON,KLEV), PVD(KLON,KLEV), &
2000 PMFD(KLON,KLEV), PMFDS(KLON,KLEV), &
2001 PMFDQ(KLON,KLEV), PDMFDP(KLON,KLEV)
2002 REAL ZTENWB(KLON,KLEV), ZQENWB(KLON,KLEV), &
2003 ZCOND(KLON), ZPH(KLON)
2004 INTEGER KCBOT(KLON), KCTOP(KLON), &
2006 LOGICAL LDCUM(KLON), LLo2(KLON), &
2008 !-----------------------------------------------
2009 ! 1. SET DEFAULT VALUES FOR DOWNDRAFTS
2010 !-----------------------------------------------
2016 IF(.NOT.LMFDD) GO TO 300
2017 !------------------------------------------------------------
2018 ! 2. DETERMINE LEVEL OF FREE SINKING BY
2019 ! DOING A SCAN FROM TOP TO BASE OF CUMULUS CLOUDS
2020 ! FOR EVERY POINT AND PROCEED AS FOLLOWS:
2021 ! (1) DETEMINE WET BULB ENVIRONMENTAL T AND Q
2022 ! (2) DO MIXING WITH CUMULUS CLOUD AIR
2023 ! (3) CHECK FOR NEGATIVE BUOYANCY
2024 ! THE ASSUMPTION IS THAT AIR OF DOWNDRAFTS IS MIXTURE
2025 ! OF 50% CLOUD AIR + 50% ENVIRONMENTAL AIR AT WET BULB
2026 ! TEMPERATURE (I.E. WHICH BECAME SATURATED DUE TO
2027 ! EVAPORATION OF RAIN AND CLOUD WATER)
2028 !------------------------------------------------------------------
2032 ! 2.1 CALCULATE WET-BULB TEMPERATURE AND MOISTURE
2033 ! FOR ENVIRONMENTAL AIR IN *CUADJTQ*
2034 ! -----------------------------------------------------
2038 ZTENWB(JL,JK)=PTENH(JL,JK)
2039 ZQENWB(JL,JK)=PQENH(JL,JK)
2041 LLO2(JL)=LDCUM(JL).AND.PRFL(JL).GT.0..AND..NOT.LDDRAF(JL).AND. &
2042 (JK.LT.KCBOT(JL).AND.JK.GT.KCTOP(JL))
2047 IF(IS.EQ.0) GO TO 290
2050 CALL CUADJTQ(KLON,KLEV,IK,ZPH,ZTENWB,ZQENWB,LLO2,ICALL)
2051 ! 2.2 DO MIXING OF CUMULUS AND ENVIRONMENTAL AIR
2052 ! AND CHECK FOR NEGATIVE BUOYANCY.
2053 ! THEN SET VALUES FOR DOWNDRAFT AT LFS.
2054 ! -----------------------------------------------------
2058 ZTTEST=0.5*(PTU(JL,JK)+ZTENWB(JL,JK))
2059 ZQTEST=0.5*(PQU(JL,JK)+ZQENWB(JL,JK))
2060 ZBUO=ZTTEST*(1.+VTMPC1*ZQTEST)- &
2061 PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))
2062 ZCOND(JL)=PQENH(JL,JK)-ZQENWB(JL,JK)
2063 ZMFTOP=-CMFDEPS*PMFUB(JL)
2064 IF(ZBUO.LT.0..AND.PRFL(JL).GT.10.*ZMFTOP*ZCOND(JL)) THEN
2070 PMFDS(JL,JK)=PMFD(JL,JK)*(CPD*PTD(JL,JK)+PGEOH(JL,JK))
2071 PMFDQ(JL,JK)=PMFD(JL,JK)*PQD(JL,JK)
2072 PDMFDP(JL,JK-1)=-0.5*PMFD(JL,JK)*ZCOND(JL)
2073 PRFL(JL)=PRFL(JL)+PDMFDP(JL,JK-1)
2079 IF(PMFD(JL,JK).LT.0.) THEN
2080 PUD(JL,JK)=0.5*(PUU(JL,JK)+PUEN(JL,JK-1))
2081 PVD(JL,JK)=0.5*(PVU(JL,JK)+PVEN(JL,JK-1))
2088 END SUBROUTINE CUDLFS
2091 !**********************************************
2092 ! SUBROUTINE CUDDRAF
2093 !**********************************************
2094 SUBROUTINE CUDDRAF &
2095 (KLON, KLEV, KLEVP1, PTENH, PQENH, &
2096 PUEN, PVEN, PGEOH, PAPH, PRFL, &
2097 LDDRAF, PTD, PQD, PUD, PVD, &
2098 PMFD, PMFDS, PMFDQ, PDMFDP)
2099 ! THIS ROUTINE CALCULATES CUMULUS DOWNDRAFT DESCENT
2100 ! M.TIEDTKE E.C.M.W.F. 12/86 MODIF. 12/89
2103 ! TO PRODUCE THE VERTICAL PROFILES FOR CUMULUS DOWNDRAFTS
2104 ! (I.E. T,Q,U AND V AND FLUXES)
2107 ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
2108 ! INPUT IS T,Q,P,PHI,U,V AT HALF LEVELS.
2109 ! IT RETURNS FLUXES OF S,Q AND EVAPORATION RATE
2110 ! AND U,V AT LEVELS WHERE DOWNDRAFT OCCURS
2113 ! CALCULATE MOIST DESCENT FOR ENTRAINING/DETRAINING PLUME BY
2114 ! A) MOVING AIR DRY-ADIABATICALLY TO NEXT LEVEL BELOW AND
2115 ! B) CORRECTING FOR EVAPORATION TO OBTAIN SATURATED STATE.
2118 ! *CUADJTQ* FOR ADJUSTING T AND Q DUE TO EVAPORATION IN
2123 ! ----------------------------------------------------------------
2124 !-------------------------------------------------------------------
2126 !-------------------------------------------------------------------
2127 INTEGER KLON, KLEV, KLEVP1
2128 INTEGER JK,IS,JL,ITOPDE, IK, ICALL
2129 REAL ZENTR,ZSEEN, ZQEEN, ZSDDE, ZQDDE,ZMFDSK, ZMFDQK
2130 REAL ZBUO, ZDMFDP, ZMFDUK, ZMFDVK
2131 REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
2132 PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
2133 PGEOH(KLON,KLEV), PAPH(KLON,KLEVP1)
2134 REAL PTD(KLON,KLEV), PQD(KLON,KLEV), &
2135 PUD(KLON,KLEV), PVD(KLON,KLEV), &
2136 PMFD(KLON,KLEV), PMFDS(KLON,KLEV), &
2137 PMFDQ(KLON,KLEV), PDMFDP(KLON,KLEV), &
2139 REAL ZDMFEN(KLON), ZDMFDE(KLON), &
2140 ZCOND(KLON), ZPH(KLON)
2141 LOGICAL LDDRAF(KLON), LLO2(KLON)
2142 !--------------------------------------------------------------
2143 ! 1. CALCULATE MOIST DESCENT FOR CUMULUS DOWNDRAFT BY
2144 ! (A) CALCULATING ENTRAINMENT RATES, ASSUMING
2145 ! LINEAR DECREASE OF MASSFLUX IN PBL
2146 ! (B) DOING MOIST DESCENT - EVAPORATIVE COOLING
2147 ! AND MOISTENING IS CALCULATED IN *CUADJTQ*
2148 ! (C) CHECKING FOR NEGATIVE BUOYANCY AND
2149 ! SPECIFYING FINAL T,Q,U,V AND DOWNWARD FLUXES
2150 ! ----------------------------------------------------------------
2156 LLO2(JL)=LDDRAF(JL).AND.PMFD(JL,JK-1).LT.0.
2161 IF(IS.EQ.0) GO TO 180
2164 ZENTR=ENTRDD*PMFD(JL,JK-1)*RD*PTENH(JL,JK-1)/ &
2165 (G*PAPH(JL,JK-1))*(PAPH(JL,JK)-PAPH(JL,JK-1))
2171 IF(JK.GT.ITOPDE) THEN
2175 ZDMFDE(JL)=PMFD(JL,ITOPDE)* &
2176 (PAPH(JL,JK)-PAPH(JL,JK-1))/ &
2177 (PAPH(JL,KLEVP1)-PAPH(JL,ITOPDE))
2183 PMFD(JL,JK)=PMFD(JL,JK-1)+ZDMFEN(JL)-ZDMFDE(JL)
2184 ZSEEN=(CPD*PTENH(JL,JK-1)+PGEOH(JL,JK-1))*ZDMFEN(JL)
2185 ZQEEN=PQENH(JL,JK-1)*ZDMFEN(JL)
2186 ZSDDE=(CPD*PTD(JL,JK-1)+PGEOH(JL,JK-1))*ZDMFDE(JL)
2187 ZQDDE=PQD(JL,JK-1)*ZDMFDE(JL)
2188 ZMFDSK=PMFDS(JL,JK-1)+ZSEEN-ZSDDE
2189 ZMFDQK=PMFDQ(JL,JK-1)+ZQEEN-ZQDDE
2190 PQD(JL,JK)=ZMFDQK*(1./MIN(-CMFCMIN,PMFD(JL,JK)))
2191 PTD(JL,JK)=(ZMFDSK*(1./MIN(-CMFCMIN,PMFD(JL,JK)))- &
2193 PTD(JL,JK)=MIN(400.,PTD(JL,JK))
2194 PTD(JL,JK)=MAX(100.,PTD(JL,JK))
2195 ZCOND(JL)=PQD(JL,JK)
2200 CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTD,PQD,LLO2,ICALL)
2203 ZCOND(JL)=ZCOND(JL)-PQD(JL,JK)
2204 ZBUO=PTD(JL,JK)*(1.+VTMPC1*PQD(JL,JK))- &
2205 PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))
2206 IF(ZBUO.GE.0..OR.PRFL(JL).LE.(PMFD(JL,JK)*ZCOND(JL))) THEN
2209 PMFDS(JL,JK)=(CPD*PTD(JL,JK)+PGEOH(JL,JK))*PMFD(JL,JK)
2210 PMFDQ(JL,JK)=PQD(JL,JK)*PMFD(JL,JK)
2211 ZDMFDP=-PMFD(JL,JK)*ZCOND(JL)
2212 PDMFDP(JL,JK-1)=ZDMFDP
2213 PRFL(JL)=PRFL(JL)+ZDMFDP
2218 IF(LLO2(JL).AND.PMFD(JL,JK).LT.0.) THEN
2219 ZMFDUK=PMFD(JL,JK-1)*PUD(JL,JK-1)+ &
2220 ZDMFEN(JL)*PUEN(JL,JK-1)-ZDMFDE(JL)*PUD(JL,JK-1)
2221 ZMFDVK=PMFD(JL,JK-1)*PVD(JL,JK-1)+ &
2222 ZDMFEN(JL)*PVEN(JL,JK-1)-ZDMFDE(JL)*PVD(JL,JK-1)
2223 PUD(JL,JK)=ZMFDUK*(1./MIN(-CMFCMIN,PMFD(JL,JK)))
2224 PVD(JL,JK)=ZMFDVK*(1./MIN(-CMFCMIN,PMFD(JL,JK)))
2230 END SUBROUTINE CUDDRAF
2233 !**********************************************
2235 !**********************************************
2237 (KLON, KLEV, KLEVP1, PQEN, PQSEN, &
2238 PTENH, PQENH, PAPH, PGEOH, KCBOT, &
2239 KCTOP, KDTOP, KTYPE, LDDRAF, LDCUM, &
2240 PMFU, PMFD, PMFUS, PMFDS, PMFUQ, &
2241 PMFDQ, PMFUL, PLUDE, PDMFUP, PDMFDP, &
2242 PRFL, PRAIN, PTEN, PSFL, PDPMEL, &
2243 KTOPM2, ZTMST, sig1)
2244 ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
2247 ! THIS ROUTINE DOES THE FINAL CALCULATION OF CONVECTIVE
2248 ! FLUXES IN THE CLOUD LAYER AND IN THE SUBCLOUD LAYER
2251 ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
2255 ! ----------------------------------------------------------------
2256 !-------------------------------------------------------------------
2258 !-------------------------------------------------------------------
2259 INTEGER KLON, KLEV, KLEVP1
2260 INTEGER KTOPM2, ITOP, JL, JK, IKB
2261 REAL ZTMST, ZCONS1, ZCONS2, ZCUCOV, ZTMELP2
2262 REAL ZZP, ZFAC, ZSNMLT, ZRFL, CEVAPCU, ZRNEW
2263 REAL ZRMIN, ZRFLN, ZDRFL, ZDPEVAP
2264 REAL PQEN(KLON,KLEV), PQSEN(KLON,KLEV), &
2265 PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
2266 PAPH(KLON,KLEVP1), PGEOH(KLON,KLEV)
2267 REAL PMFU(KLON,KLEV), PMFD(KLON,KLEV), &
2268 PMFUS(KLON,KLEV), PMFDS(KLON,KLEV), &
2269 PMFUQ(KLON,KLEV), PMFDQ(KLON,KLEV), &
2270 PDMFUP(KLON,KLEV), PDMFDP(KLON,KLEV), &
2271 PMFUL(KLON,KLEV), PLUDE(KLON,KLEV), &
2272 PRFL(KLON), PRAIN(KLON)
2273 REAL PTEN(KLON,KLEV), PDPMEL(KLON,KLEV), &
2274 PSFL(KLON), ZPSUBCL(KLON)
2276 INTEGER KCBOT(KLON), KCTOP(KLON), &
2277 KDTOP(KLON), KTYPE(KLON)
2278 LOGICAL LDDRAF(KLON), LDCUM(KLON)
2279 !* SPECIFY CONSTANTS
2280 ZCONS1=CPD/(ALF*G*ZTMST)
2284 !* 1.0 DETERMINE FINAL CONVECTIVE FLUXES
2285 !---------------------------------------------
2292 ! SWITCH OFF SHALLOW CONVECTION
2293 IF(.NOT.LMFSCV.AND.KTYPE(JL).EQ.2)THEN
2297 ITOP=MIN(ITOP,KCTOP(JL))
2298 IF(.NOT.LDCUM(JL).OR.KDTOP(JL).LT.KCTOP(JL)) LDDRAF(JL)=.FALSE.
2299 IF(.NOT.LDCUM(JL)) KTYPE(JL)=0
2302 DO 120 JK=KTOPM2,KLEV
2304 IF(LDCUM(JL).AND.JK.GE.KCTOP(JL)-1) THEN
2305 PMFUS(JL,JK)=PMFUS(JL,JK)-PMFU(JL,JK)* &
2306 (CPD*PTENH(JL,JK)+PGEOH(JL,JK))
2307 PMFUQ(JL,JK)=PMFUQ(JL,JK)-PMFU(JL,JK)*PQENH(JL,JK)
2308 IF(LDDRAF(JL).AND.JK.GE.KDTOP(JL)) THEN
2309 PMFDS(JL,JK)=PMFDS(JL,JK)-PMFD(JL,JK)* &
2310 (CPD*PTENH(JL,JK)+PGEOH(JL,JK))
2311 PMFDQ(JL,JK)=PMFDQ(JL,JK)-PMFD(JL,JK)*PQENH(JL,JK)
2332 DO 130 JK=KTOPM2,KLEV
2334 IF(LDCUM(JL).AND.JK.GT.KCBOT(JL)) THEN
2336 ZZP=((PAPH(JL,KLEVP1)-PAPH(JL,JK))/ &
2337 (PAPH(JL,KLEVP1)-PAPH(JL,IKB)))
2338 IF(KTYPE(JL).EQ.3) THEN
2341 PMFU(JL,JK)=PMFU(JL,IKB)*ZZP
2342 PMFUS(JL,JK)=PMFUS(JL,IKB)*ZZP
2343 PMFUQ(JL,JK)=PMFUQ(JL,IKB)*ZZP
2344 PMFUL(JL,JK)=PMFUL(JL,IKB)*ZZP
2346 !* 2. CALCULATE RAIN/SNOW FALL RATES
2347 !* CALCULATE MELTING OF SNOW
2348 !* CALCULATE EVAPORATION OF PRECIP
2349 !----------------------------------------------
2351 PRAIN(JL)=PRAIN(JL)+PDMFUP(JL,JK)
2352 IF(PTEN(JL,JK).GT.TMELT) THEN
2353 PRFL(JL)=PRFL(JL)+PDMFUP(JL,JK)+PDMFDP(JL,JK)
2354 IF(PSFL(JL).GT.0..AND.PTEN(JL,JK).GT.ZTMELP2) THEN
2355 ZFAC=ZCONS1*(PAPH(JL,JK+1)-PAPH(JL,JK))
2356 ZSNMLT=MIN(PSFL(JL),ZFAC*(PTEN(JL,JK)-ZTMELP2))
2357 PDPMEL(JL,JK)=ZSNMLT
2358 PSFL(JL)=PSFL(JL)-ZSNMLT
2359 PRFL(JL)=PRFL(JL)+ZSNMLT
2362 PSFL(JL)=PSFL(JL)+PDMFUP(JL,JK)+PDMFDP(JL,JK)
2368 PRFL(JL)=MAX(PRFL(JL),0.)
2369 PSFL(JL)=MAX(PSFL(JL),0.)
2370 ZPSUBCL(JL)=PRFL(JL)+PSFL(JL)
2372 DO 240 JK=KTOPM2,KLEV
2374 IF(LDCUM(JL).AND.JK.GE.KCBOT(JL).AND. &
2375 ZPSUBCL(JL).GT.1.E-20) THEN
2377 CEVAPCU=CEVAPCU1*SQRT(CEVAPCU2*SQRT(sig1(JK)))
2378 ZRNEW=(MAX(0.,SQRT(ZRFL/ZCUCOV)- &
2379 CEVAPCU*(PAPH(JL,JK+1)-PAPH(JL,JK))* &
2380 MAX(0.,PQSEN(JL,JK)-PQEN(JL,JK))))**2*ZCUCOV
2381 ZRMIN=ZRFL-ZCUCOV*MAX(0.,0.8*PQSEN(JL,JK)-PQEN(JL,JK)) &
2382 *ZCONS2*(PAPH(JL,JK+1)-PAPH(JL,JK))
2383 ZRNEW=MAX(ZRNEW,ZRMIN)
2385 ZDRFL=MIN(0.,ZRFLN-ZRFL)
2386 PDMFUP(JL,JK)=PDMFUP(JL,JK)+ZDRFL
2392 ZDPEVAP=ZPSUBCL(JL)-(PRFL(JL)+PSFL(JL))
2393 PRFL(JL)=PRFL(JL)+ZDPEVAP*PRFL(JL)* &
2394 (1./MAX(1.E-20,PRFL(JL)+PSFL(JL)))
2395 PSFL(JL)=PSFL(JL)+ZDPEVAP*PSFL(JL)* &
2396 (1./MAX(1.E-20,PRFL(JL)+PSFL(JL)))
2399 END SUBROUTINE CUFLX
2402 !**********************************************
2404 !**********************************************
2406 (KLON, KLEV, KLEVP1, KTOPM2, PAPH, &
2407 LDCUM, PTEN, PTTE, PQTE, PMFUS, &
2408 PMFDS, PMFUQ, PMFDQ, PMFUL, PDMFUP, &
2409 PDMFDP, ZTMST, PDPMEL, PRAIN, PRFL, &
2410 PSFL, PSRAIN, PSEVAP, PSHEAT, PSMELT, &
2411 PRSFC, PSSFC, PAPRC, PAPRSM, PAPRS, &
2412 PQEN, PQSEN, PLUDE, PCTE)
2413 !**** *CUDTDQ* - UPDATES T AND Q TENDENCIES, PRECIPITATION RATES
2414 ! DOES GLOBAL DIAGNOSTICS
2415 ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
2418 ! *CUDTDQ* IS CALLED FROM *CUMASTR*
2419 ! ----------------------------------------------------------------
2420 !-------------------------------------------------------------------
2422 !-------------------------------------------------------------------
2423 INTEGER KLON, KLEV, KLEVP1
2424 INTEGER KTOPM2,JL, JK
2425 REAL ZTMST, PSRAIN, PSEVAP, PSHEAT, PSMELT, ZDIAGT, ZDIAGW
2426 REAL ZALV, RHK, RHCOE, PLDFD, ZDTDT, ZDQDT
2427 REAL PTTE(KLON,KLEV), PQTE(KLON,KLEV), &
2428 PTEN(KLON,KLEV), PLUDE(KLON,KLEV), &
2429 PGEO(KLON,KLEV), PAPH(KLON,KLEVP1), &
2430 PAPRC(KLON), PAPRS(KLON), &
2431 PAPRSM(KLON), PCTE(KLON,KLEV), &
2432 PRSFC(KLON), PSSFC(KLON)
2433 REAL PMFUS(KLON,KLEV), PMFDS(KLON,KLEV), &
2434 PMFUQ(KLON,KLEV), PMFDQ(KLON,KLEV), &
2435 PMFUL(KLON,KLEV), PQSEN(KLON,KLEV), &
2436 PDMFUP(KLON,KLEV), PDMFDP(KLON,KLEV),&
2437 PRFL(KLON), PRAIN(KLON), &
2439 REAL PDPMEL(KLON,KLEV), PSFL(KLON)
2440 REAL ZSHEAT(KLON), ZMELT(KLON)
2442 !--------------------------------
2443 !* 1.0 SPECIFY PARAMETERS
2444 !--------------------------------
2447 ZDIAGW=ZDIAGT/RHOH2O
2448 !--------------------------------------------------
2449 !* 2.0 INCREMENTATION OF T AND Q TENDENCIES
2450 !--------------------------------------------------
2456 DO 250 JK=KTOPM2,KLEV
2460 IF(PTEN(JL,JK).GT.TMELT) THEN
2465 RHK=MIN(1.0,PQEN(JL,JK)/PQSEN(JL,JK))
2466 RHCOE=MAX(0.0,(RHK-RHC)/(RHM-RHC))
2467 pldfd=MAX(0.0,RHCOE*fdbk*PLUDE(JL,JK))
2468 ZDTDT=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*RCPD* &
2469 (PMFUS(JL,JK+1)-PMFUS(JL,JK)+ &
2470 PMFDS(JL,JK+1)-PMFDS(JL,JK)-ALF*PDPMEL(JL,JK) &
2471 -ZALV*(PMFUL(JL,JK+1)-PMFUL(JL,JK)-pldfd- &
2472 (PDMFUP(JL,JK)+PDMFDP(JL,JK))))
2473 PTTE(JL,JK)=PTTE(JL,JK)+ZDTDT
2474 ZDQDT=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*&
2475 (PMFUQ(JL,JK+1)-PMFUQ(JL,JK)+ &
2476 PMFDQ(JL,JK+1)-PMFDQ(JL,JK)+ &
2477 PMFUL(JL,JK+1)-PMFUL(JL,JK)-pldfd- &
2478 (PDMFUP(JL,JK)+PDMFDP(JL,JK)))
2479 PQTE(JL,JK)=PQTE(JL,JK)+ZDQDT
2480 PCTE(JL,JK)=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*pldfd
2481 ZSHEAT(JL)=ZSHEAT(JL)+ZALV*(PDMFUP(JL,JK)+PDMFDP(JL,JK))
2482 ZMELT(JL)=ZMELT(JL)+PDPMEL(JL,JK)
2488 IF(PTEN(JL,JK).GT.TMELT) THEN
2493 RHK=MIN(1.0,PQEN(JL,JK)/PQSEN(JL,JK))
2494 RHCOE=MAX(0.0,(RHK-RHC)/(RHM-RHC))
2495 pldfd=MAX(0.0,RHCOE*fdbk*PLUDE(JL,JK))
2496 ZDTDT=-(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*RCPD* &
2497 (PMFUS(JL,JK)+PMFDS(JL,JK)+ALF*PDPMEL(JL,JK)-ZALV* &
2498 (PMFUL(JL,JK)+PDMFUP(JL,JK)+PDMFDP(JL,JK)+pldfd))
2499 PTTE(JL,JK)=PTTE(JL,JK)+ZDTDT
2500 ZDQDT=-(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
2501 (PMFUQ(JL,JK)+PMFDQ(JL,JK)+pldfd+ &
2502 (PMFUL(JL,JK)+PDMFUP(JL,JK)+PDMFDP(JL,JK)))
2503 PQTE(JL,JK)=PQTE(JL,JK)+ZDQDT
2504 PCTE(JL,JK)=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*pldfd
2505 ZSHEAT(JL)=ZSHEAT(JL)+ZALV*(PDMFUP(JL,JK)+PDMFDP(JL,JK))
2506 ZMELT(JL)=ZMELT(JL)+PDPMEL(JL,JK)
2511 !---------------------------------------------------------
2512 ! 3. UPDATE SURFACE FIELDS AND DO GLOBAL BUDGETS
2513 !---------------------------------------------------------
2518 PAPRC(JL)=PAPRC(JL)+ZDIAGW*(PRFL(JL)+PSFL(JL))
2519 PAPRS(JL)=PAPRSM(JL)+ZDIAGW*PSFL(JL)
2520 PSHEAT=PSHEAT+ZSHEAT(JL)
2521 PSRAIN=PSRAIN+PRAIN(JL)
2522 PSEVAP=PSEVAP-(PRFL(JL)+PSFL(JL))
2523 PSMELT=PSMELT+ZMELT(JL)
2525 PSEVAP=PSEVAP+PSRAIN
2527 END SUBROUTINE CUDTDQ
2530 !**********************************************
2532 !**********************************************
2534 (KLON, KLEV, KLEVP1, KTOPM2, KTYPE, &
2535 KCBOT, PAPH, LDCUM, PUEN, PVEN, &
2536 PVOM, PVOL, PUU, PUD, PVU, &
2537 PVD, PMFU, PMFD, PSDISS)
2538 !**** *CUDUDV* - UPDATES U AND V TENDENCIES,
2539 ! DOES GLOBAL DIAGNOSTIC OF DISSIPATION
2540 ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
2543 ! *CUDUDV* IS CALLED FROM *CUMASTR*
2544 ! ----------------------------------------------------------------
2545 !-------------------------------------------------------------------
2547 !-------------------------------------------------------------------
2548 INTEGER KLON, KLEV, KLEVP1
2549 INTEGER KTOPM2, JK, IK, JL, IKB
2550 REAL PSDISS,ZZP, ZDUDT ,ZDVDT, ZSUM
2551 REAL PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
2552 PVOL(KLON,KLEV), PVOM(KLON,KLEV), &
2554 REAL PUU(KLON,KLEV), PUD(KLON,KLEV), &
2555 PVU(KLON,KLEV), PVD(KLON,KLEV), &
2556 PMFU(KLON,KLEV), PMFD(KLON,KLEV)
2557 REAL ZMFUU(KLON,KLEV), ZMFDU(KLON,KLEV), &
2558 ZMFUV(KLON,KLEV), ZMFDV(KLON,KLEV), &
2560 INTEGER KTYPE(KLON), KCBOT(KLON)
2562 !------------------------------------------------------------
2563 !* 1.0 CALCULATE FLUXES AND UPDATE U AND V TENDENCIES
2564 ! -----------------------------------------------------------
2566 DO 120 JK=KTOPM2,KLEV
2570 ZMFUU(JL,JK)=PMFU(JL,JK)*(PUU(JL,JK)-PUEN(JL,IK))
2571 ZMFUV(JL,JK)=PMFU(JL,JK)*(PVU(JL,JK)-PVEN(JL,IK))
2572 ZMFDU(JL,JK)=PMFD(JL,JK)*(PUD(JL,JK)-PUEN(JL,IK))
2573 ZMFDV(JL,JK)=PMFD(JL,JK)*(PVD(JL,JK)-PVEN(JL,IK))
2577 DO 140 JK=KTOPM2,KLEV
2579 IF(LDCUM(JL).AND.JK.GT.KCBOT(JL)) THEN
2581 ZZP=((PAPH(JL,KLEVP1)-PAPH(JL,JK))/ &
2582 (PAPH(JL,KLEVP1)-PAPH(JL,IKB)))
2583 IF(KTYPE(JL).EQ.3) THEN
2586 ZMFUU(JL,JK)=ZMFUU(JL,IKB)*ZZP
2587 ZMFUV(JL,JK)=ZMFUV(JL,IKB)*ZZP
2588 ZMFDU(JL,JK)=ZMFDU(JL,IKB)*ZZP
2589 ZMFDV(JL,JK)=ZMFDV(JL,IKB)*ZZP
2596 DO 190 JK=KTOPM2,KLEV
2600 ZDUDT=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
2601 (ZMFUU(JL,JK+1)-ZMFUU(JL,JK)+ &
2602 ZMFDU(JL,JK+1)-ZMFDU(JL,JK))
2603 ZDVDT=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
2604 (ZMFUV(JL,JK+1)-ZMFUV(JL,JK)+ &
2605 ZMFDV(JL,JK+1)-ZMFDV(JL,JK))
2606 ZDISS(JL)=ZDISS(JL)+ &
2607 PUEN(JL,JK)*(ZMFUU(JL,JK+1)-ZMFUU(JL,JK)+ &
2608 ZMFDU(JL,JK+1)-ZMFDU(JL,JK))+ &
2609 PVEN(JL,JK)*(ZMFUV(JL,JK+1)-ZMFUV(JL,JK)+ &
2610 ZMFDV(JL,JK+1)-ZMFDV(JL,JK))
2611 PVOM(JL,JK)=PVOM(JL,JK)+ZDUDT
2612 PVOL(JL,JK)=PVOL(JL,JK)+ZDVDT
2618 ZDUDT=-(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
2619 (ZMFUU(JL,JK)+ZMFDU(JL,JK))
2620 ZDVDT=-(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
2621 (ZMFUV(JL,JK)+ZMFDV(JL,JK))
2622 ZDISS(JL)=ZDISS(JL)- &
2623 (PUEN(JL,JK)*(ZMFUU(JL,JK)+ZMFDU(JL,JK))+ &
2624 PVEN(JL,JK)*(ZMFUV(JL,JK)+ZMFDV(JL,JK)))
2625 PVOM(JL,JK)=PVOM(JL,JK)+ZDUDT
2626 PVOL(JL,JK)=PVOL(JL,JK)+ZDVDT
2631 ZSUM=SSUM(KLON,ZDISS(1),1)
2634 END SUBROUTINE CUDUDV
2637 !#################################################################
2639 ! LEVEL 4 SUBROUTINES
2641 !#################################################################
2642 !**************************************************************
2643 ! SUBROUTINE CUBASMC
2644 !**************************************************************
2645 SUBROUTINE CUBASMC &
2646 (KLON, KLEV, KLEVM1, KK, PTEN, &
2647 PQEN, PQSEN, PUEN, PVEN, PVERV, &
2648 PGEO, PGEOH, LDCUM, KTYPE, KLAB, &
2649 PMFU, PMFUB, PENTR, KCBOT, PTU, &
2650 PQU, PLU, PUU, PVU, PMFUS, &
2651 PMFUQ, PMFUL, PDMFUP, PMFUU, PMFUV)
2652 ! M.TIEDTKE E.C.M.W.F. 12/89
2655 ! THIS ROUTINE CALCULATES CLOUD BASE VALUES
2656 ! FOR MIDLEVEL CONVECTION
2659 ! THIS ROUTINE IS CALLED FROM *CUASC*.
2660 ! INPUT ARE ENVIRONMENTAL VALUES T,Q ETC
2661 ! IT RETURNS CLOUDBASE VALUES FOR MIDLEVEL CONVECTION
2668 ! ----------------------------------------------------------------
2669 !-------------------------------------------------------------------
2671 !-------------------------------------------------------------------
2672 INTEGER KLON, KLEV, KLEVP1
2673 INTEGER KLEVM1,KK, JL
2675 REAL PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
2676 PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
2677 PQSEN(KLON,KLEV), PVERV(KLON,KLEV), &
2678 PGEO(KLON,KLEV), PGEOH(KLON,KLEV)
2679 REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
2680 PUU(KLON,KLEV), PVU(KLON,KLEV), &
2681 PLU(KLON,KLEV), PMFU(KLON,KLEV), &
2682 PMFUB(KLON), PENTR(KLON), &
2683 PMFUS(KLON,KLEV), PMFUQ(KLON,KLEV), &
2684 PMFUL(KLON,KLEV), PDMFUP(KLON,KLEV), &
2685 PMFUU(KLON), PMFUV(KLON)
2686 INTEGER KTYPE(KLON), KCBOT(KLON), &
2689 !--------------------------------------------------------
2690 !* 1. CALCULATE ENTRAINMENT AND DETRAINMENT RATES
2691 ! -------------------------------------------------------
2694 IF( .NOT. LDCUM(JL).AND.KLAB(JL,KK+1).EQ.0.0.AND. &
2695 PQEN(JL,KK).GT.0.90*PQSEN(JL,KK)) THEN
2696 PTU(JL,KK+1)=(CPD*PTEN(JL,KK)+PGEO(JL,KK)-PGEOH(JL,KK+1)) &
2698 PQU(JL,KK+1)=PQEN(JL,KK)
2700 ZZZMB=MAX(CMFCMIN,-PVERV(JL,KK)/G)
2701 ZZZMB=MIN(ZZZMB,CMFCMAX)
2703 PMFU(JL,KK+1)=PMFUB(JL)
2704 PMFUS(JL,KK+1)=PMFUB(JL)*(CPD*PTU(JL,KK+1)+PGEOH(JL,KK+1))
2705 PMFUQ(JL,KK+1)=PMFUB(JL)*PQU(JL,KK+1)
2713 PUU(JL,KK+1)=PUEN(JL,KK)
2714 PVU(JL,KK+1)=PVEN(JL,KK)
2715 PMFUU(JL)=PMFUB(JL)*PUU(JL,KK+1)
2716 PMFUV(JL)=PMFUB(JL)*PVU(JL,KK+1)
2721 END SUBROUTINE CUBASMC
2724 !**************************************************************
2725 ! SUBROUTINE CUADJTQ
2726 !**************************************************************
2727 SUBROUTINE CUADJTQ(KLON,KLEV,KK,PP,PT,PQ,LDFLAG,KCALL)
2728 ! M.TIEDTKE E.C.M.W.F. 12/89
2729 ! D.SALMOND CRAY(UK)) 12/8/91
2732 ! TO PRODUCE T,Q AND L VALUES FOR CLOUD ASCENT
2735 ! THIS ROUTINE IS CALLED FROM SUBROUTINES:
2736 ! *CUBASE* (T AND Q AT CONDENSTION LEVEL)
2737 ! *CUASC* (T AND Q AT CLOUD LEVELS)
2738 ! *CUINI* (ENVIRONMENTAL T AND QS VALUES AT HALF LEVELS)
2739 ! INPUT ARE UNADJUSTED T AND Q VALUES,
2740 ! IT RETURNS ADJUSTED VALUES OF T AND Q
2741 ! NOTE: INPUT PARAMETER KCALL DEFINES CALCULATION AS
2742 ! KCALL=0 ENV. T AND QS IN*CUINI*
2743 ! KCALL=1 CONDENSATION IN UPDRAFTS (E.G. CUBASE, CUASC)
2744 ! KCALL=2 EVAPORATION IN DOWNDRAFTS (E.G. CUDLFS,CUDDRAF
2747 ! 3 LOOKUP TABLES ( TLUCUA, TLUCUB, TLUCUC )
2748 ! FOR CONDENSATION CALCULATIONS.
2749 ! THE TABLES ARE INITIALISED IN *SETPHYS*.
2750 ! ----------------------------------------------------------------
2751 !-------------------------------------------------------------------
2753 !-------------------------------------------------------------------
2755 INTEGER KK, KCALL, ISUM, JL
2756 REAL ZQSAT, ZCOR, ZCOND1, TT
2757 REAL PT(KLON,KLEV), PQ(KLON,KLEV), &
2758 ZCOND(KLON), ZQP(KLON), &
2760 LOGICAL LDFLAG(KLON)
2761 !------------------------------------------------------------------
2762 ! 2. CALCULATE CONDENSATION AND ADJUST T AND Q ACCORDINGLY
2763 !------------------------------------------------------------------
2765 IF (KCALL.EQ.1 ) THEN
2772 ZQSAT=TLUCUA(TT)*ZQP(JL)
2773 ZQSAT=MIN(0.5,ZQSAT)
2774 ZCOR=1./(1.-VTMPC1*ZQSAT)
2776 ZCOND(JL)=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
2777 ZCOND(JL)=MAX(ZCOND(JL),0.)
2778 PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND(JL)
2779 PQ(JL,KK)=PQ(JL,KK)-ZCOND(JL)
2780 IF(ZCOND(JL).NE.0.0) ISUM=ISUM+1
2783 IF(ISUM.EQ.0) GO TO 230
2785 IF(LDFLAG(JL).AND.ZCOND(JL).NE.0.) THEN
2787 ZQSAT=TLUCUA(TT)*ZQP(JL)
2788 ZQSAT=MIN(0.5,ZQSAT)
2789 ZCOR=1./(1.-VTMPC1*ZQSAT)
2791 ZCOND1=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
2792 PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND1
2793 PQ(JL,KK)=PQ(JL,KK)-ZCOND1
2805 ZQSAT=TLUCUA(TT)*ZQP(JL)
2806 ZQSAT=MIN(0.5,ZQSAT)
2807 ZCOR=1./(1.-VTMPC1*ZQSAT)
2809 ZCOND(JL)=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
2810 ZCOND(JL)=MIN(ZCOND(JL),0.)
2811 PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND(JL)
2812 PQ(JL,KK)=PQ(JL,KK)-ZCOND(JL)
2813 IF(ZCOND(JL).NE.0.0) ISUM=ISUM+1
2816 IF(ISUM.EQ.0) GO TO 330
2818 IF(LDFLAG(JL).AND.ZCOND(JL).NE.0.) THEN
2820 ZQSAT=TLUCUA(TT)*ZQP(JL)
2821 ZQSAT=MIN(0.5,ZQSAT)
2822 ZCOR=1./(1.-VTMPC1*ZQSAT)
2824 ZCOND1=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
2825 PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND1
2826 PQ(JL,KK)=PQ(JL,KK)-ZCOND1
2836 ZQSAT=TLUCUA(TT)*ZQP(JL)
2837 ZQSAT=MIN(0.5,ZQSAT)
2838 ZCOR=1./(1.-VTMPC1*ZQSAT)
2840 ZCOND(JL)=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
2841 PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND(JL)
2842 PQ(JL,KK)=PQ(JL,KK)-ZCOND(JL)
2843 IF(ZCOND(JL).NE.0.0) ISUM=ISUM+1
2845 IF(ISUM.EQ.0) GO TO 430
2848 ZQSAT=TLUCUA(TT)*ZQP(JL)
2849 ZQSAT=MIN(0.5,ZQSAT)
2850 ZCOR=1./(1.-VTMPC1*ZQSAT)
2852 ZCOND1=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
2853 PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND1
2854 PQ(JL,KK)=PQ(JL,KK)-ZCOND1
2862 ZQSAT=TLUCUA(TT)*ZQP(JL)
2863 ZQSAT=MIN(0.5,ZQSAT)
2864 ZCOR=1./(1.-VTMPC1*ZQSAT)
2866 ZCOND(JL)=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
2867 PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND(JL)
2868 PQ(JL,KK)=PQ(JL,KK)-ZCOND(JL)
2872 ZQSAT=TLUCUA(TT)*ZQP(JL)
2873 ZQSAT=MIN(0.5,ZQSAT)
2874 ZCOR=1./(1.-VTMPC1*ZQSAT)
2876 ZCOND1=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
2877 PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND1
2878 PQ(JL,KK)=PQ(JL,KK)-ZCOND1
2882 END SUBROUTINE CUADJTQ
2885 !**********************************************************
2886 ! SUBROUTINE CUENTR_NEW
2887 !**********************************************************
2888 SUBROUTINE CUENTR_NEW &
2889 (KLON, KLEV, KLEVP1, KK, PTENH, &
2890 PAPH, PAP, PGEOH, KLWMIN, LDCUM, &
2891 KTYPE, KCBOT, KCTOP0, ZPBASE, PMFU, &
2892 PENTR, ZDMFEN, ZDMFDE, ZODETR, KHMIN)
2893 ! M.TIEDTKE E.C.M.W.F. 12/89
2897 ! THIS ROUTINE CALCULATES ENTRAINMENT/DETRAINMENT RATES
2898 ! FOR UPDRAFTS IN CUMULUS PARAMETERIZATION
2901 ! THIS ROUTINE IS CALLED FROM *CUASC*.
2902 ! INPUT ARE ENVIRONMENTAL VALUES T,Q ETC
2903 ! AND UPDRAFT VALUES T,Q ETC
2904 ! IT RETURNS ENTRAINMENT/DETRAINMENT RATES
2907 ! S. TIEDTKE (1989), NORDENG(1996)
2911 ! ----------------------------------------------------------------
2912 !-------------------------------------------------------------------
2914 !-------------------------------------------------------------------
2915 INTEGER KLON, KLEV, KLEVP1
2916 INTEGER KK, JL, IKLWMIN,IKB, IKT, IKH
2917 REAL ZRRHO, ZDPRHO, ZPMID, ZENTR, ZZMZK, ZTMZK, ARG, ZORGDE
2918 REAL PTENH(KLON,KLEV), &
2919 PAP(KLON,KLEV), PAPH(KLON,KLEVP1), &
2920 PMFU(KLON,KLEV), PGEOH(KLON,KLEV), &
2921 PENTR(KLON), ZPBASE(KLON), &
2922 ZDMFEN(KLON), ZDMFDE(KLON), &
2924 INTEGER KLWMIN(KLON), KTYPE(KLON), &
2925 KCBOT(KLON), KCTOP0(KLON), &
2927 LOGICAL LDCUM(KLON),LLO1,LLO2
2928 !---------------------------------------------------------
2929 !* 1. CALCULATE ENTRAINMENT AND DETRAINMENT RATES
2930 !---------------------------------------------------------
2931 !* 1.1 SPECIFY ENTRAINMENT RATES FOR SHALLOW CLOUDS
2932 !----------------------------------------------------------
2933 !* 1.2 SPECIFY ENTRAINMENT RATES FOR DEEP CLOUDS
2934 !-------------------------------------------------------
2936 zpbase(jl) = paph(jl,kcbot(jl))
2937 zrrho = (rd*ptenh(jl,kk+1))/paph(jl,kk+1)
2938 zdprho = (paph(jl,kk+1)-paph(jl,kk))*zrg
2939 zpmid = 0.5*(zpbase(jl)+paph(jl,kctop0(jl)))
2940 zentr = pentr(jl)*pmfu(jl,kk+1)*zdprho*zrrho
2941 llo1 = kk.LT.kcbot(jl).AND.ldcum(jl)
2947 llo2 = llo1.AND.ktype(jl).EQ.2.AND.((zpbase(jl)-paph(jl,kk)) &
2948 .LT.ZDNOPRC.OR.paph(jl,kk).GT.zpmid)
2954 iklwmin = MAX(klwmin(jl),kctop0(jl)+2)
2955 llo2 = llo1.AND.ktype(jl).EQ.3.AND.(kk.GE.iklwmin.OR.pap(jl,kk) &
2957 IF (llo2) zdmfen(jl) = zentr
2958 llo2 = llo1.AND.ktype(jl).EQ.1
2959 ! Turbulent entrainment
2960 IF (llo2) zdmfen(jl) = zentr
2961 ! Organized detrainment, detrainment starts at khmin
2964 IF (llo2.AND.kk.LE.khmin(jl).AND.kk.GE.kctop0(jl)) THEN
2967 IF (ikh.GT.ikt) THEN
2968 zzmzk = -(pgeoh(jl,ikh)-pgeoh(jl,kk))*zrg
2969 ztmzk = -(pgeoh(jl,ikh)-pgeoh(jl,ikt))*zrg
2970 arg = 3.1415*(zzmzk/ztmzk)*0.5
2971 zorgde = TAN(arg)*3.1415*0.5/ztmzk
2972 zdprho = (paph(jl,kk+1)-paph(jl,kk))*(zrg*zrrho)
2973 zodetr(jl,kk) = MIN(zorgde,1.E-3)*pmfu(jl,kk+1)*zdprho
2979 END SUBROUTINE CUENTR_NEW
2982 !**********************************************************
2983 ! FUNCTION SSUM, TLUCUA, TLUCUB, TLUCUC
2984 !**********************************************************
2985 REAL FUNCTION SSUM ( N, X, IX )
2987 ! COMPUTES SSUM = SUM OF [X(I)]
2988 ! FOR N ELEMENTS OF X WITH SKIP INCREMENT IX FOR VECTOR X
2993 INTEGER N, IX, JX, JL
3007 REAL FUNCTION TLUCUA(TT)
3009 ! Set up lookup tables for cloud ascent calculations.
3012 REAL ZCVM3,ZCVM4,TT !,TLUCUA
3014 IF(TT-TMELT.GT.0.) THEN
3021 TLUCUA=C2ES*EXP(ZCVM3*(TT-TMELT)*(1./(TT-ZCVM4)))
3026 REAL FUNCTION TLUCUB(TT)
3028 ! Set up lookup tables for cloud ascent calculations.
3031 REAL Z5ALVCP,Z5ALSCP,ZCVM4,ZCVM5,TT !,TLUCUB
3033 Z5ALVCP=C5LES*ALV/CPD
3034 Z5ALSCP=C5IES*ALS/CPD
3035 IF(TT-TMELT.GT.0.) THEN
3042 TLUCUB=ZCVM5*(1./(TT-ZCVM4))**2
3047 REAL FUNCTION TLUCUC(TT)
3049 ! Set up lookup tables for cloud ascent calculations.
3052 REAL ZALVDCP,ZALSDCP,TT,ZLDCP !,TLUCUC
3056 IF(TT-TMELT.GT.0.) THEN
3067 END MODULE module_cu_tiedtke