r4627 | gill | 2010-12-29 16:29:58 -0700 (Wed, 29 Dec 2010) | 5 lines
[wrffire.git] / wrfv2_fire / phys / module_cu_tiedtke.F
blob2a723af5cefe07729b24660690caaa23f3d9faf7
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 !++++++++++++++++++++++++++++
27      REAL,PRIVATE :: G
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 
31     
32      REAL :: ENTRPEN,ENTRSCV,ENTRMID,ENTRDD,CMFCTOP,RHM,RHC,    &
33              CMFCMAX,CMFCMIN,CMFDEPS,RHCDD,CPRCON,CRIRH,ZBUO0,  &
34              fdbk,ZTAU
36      INTEGER :: nentr
38      REAL :: CVDIFTS, CEVAPCU1, CEVAPCU2,ZDNOPRC
39     
40   
41      PARAMETER(A=6371.22E03,                                    &
42       ALV=2.5008E6,                 &                  
43       ALS=2.8345E6,                 &
44       ALF=ALS-ALV,                  &
45       CPD=1005.46,                  &
46       CPV=1869.46,                  & ! CPV in module is 1846.4
47       RCPD=1.0/CPD,                 &
48       RHOH2O=1.0E03,                & 
49       TMELT=273.16,                 &
50       G=9.806,                      & ! G=9.806
51       ZRG=1.0/G,                    &
52       RD=287.05,                    &
53       RV=461.51,                    &
54       C1ES=610.78,                  &
55       C2ES=C1ES*RD/RV,              &
56       C3LES=17.269,                 &
57       C4LES=35.86,                  &
58       C5LES=C3LES*(TMELT-C4LES),    &
59       C3IES=21.875,                 &
60       C4IES=7.66,                   &
61       C5IES=C3IES*(TMELT-C4IES),    &
62       API=3.141593,                 & ! API=2.0*ASIN(1.)
63       VTMPC1=RV/RD-1.0,             &
64       VTMPC2=CPV/CPD-1.0,           &
65       CVDIFTS=1.0,                  &
66       CEVAPCU1=1.93E-6*261.,        & 
67       CEVAPCU2=1.E3/(38.3*0.293) )
69      
70 !                SPECIFY PARAMETERS FOR MASSFLUX-SCHEME
71 !                  --------------------------------------
72 !                   These are tunable parameters
74 !     ENTRPEN: AVERAGE ENTRAINMENT RATE FOR PENETRATIVE CONVECTION
75 !     -------
77       PARAMETER(ENTRPEN=1.0E-4)
79 !     ENTRSCV: AVERAGE ENTRAINMENT RATE FOR SHALLOW CONVECTION
80 !     -------
82       PARAMETER(ENTRSCV=1.2E-3)
84 !     ENTRMID: AVERAGE ENTRAINMENT RATE FOR MIDLEVEL CONVECTION
85 !     -------
87       PARAMETER(ENTRMID=1.0E-4)
89 !     ENTRDD: AVERAGE ENTRAINMENT RATE FOR DOWNDRAFTS
90 !     ------
92       PARAMETER(ENTRDD =2.0E-4)
94 !     CMFCTOP:   RELATIVE CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANCY LEVEL
95 !     -------
97       PARAMETER(CMFCTOP=0.26)
99 !     CMFCMAX:   MAXIMUM MASSFLUX VALUE ALLOWED FOR UPDRAFTS ETC
100 !     -------
102       PARAMETER(CMFCMAX=1.0)
104 !     CMFCMIN:   MINIMUM MASSFLUX VALUE (FOR SAFETY)
105 !     -------
107       PARAMETER(CMFCMIN=1.E-10)
109 !     CMFDEPS:   FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS
110 !     -------
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 !-----------------------------------------------------------------------
136 CONTAINS
137 !-----------------------------------------------------------------------
138       SUBROUTINE CU_TIEDTKE(                                    &
139                  DT,ITIMESTEP,STEPCU                            &
140                 ,RAINCV,PRATEC,QFX,ZNU                          &
141                 ,U3D,V3D,W,T3D,QV3D,QC3D,QI3D,PI3D,RHO3D        &
142                 ,QVFTEN,QVPBLTEN                                &
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            &
149                 ,RUCUTEN, RVCUTEN                               &
150                 ,F_QV    ,F_QC    ,F_QR    ,F_QI    ,F_QS       &
151                                                                 )
153 !-------------------------------------------------------------------
154       IMPLICIT NONE
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)
188 !-- DT          time step (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,      &
211                                         ITIMESTEP,                      &
212                                         STEPCU
214       REAL,    INTENT(IN) ::                                            &
215                                         DT
218       REAL,    DIMENSION(ims:ime, jms:jme), INTENT(IN) ::               &
219                                         XLAND
221       REAL,    DIMENSION(ims:ime, jms:jme), INTENT(INOUT) ::            &
222                                         RAINCV, PRATEC
224       LOGICAL, DIMENSION(IMS:IME,JMS:JME), INTENT(INOUT) ::             &
225                                         CU_ACT_FLAG
228       REAL,    DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN) ::      &
229                                         DZ8W,                           &
230                                         P8w,                            &
231                                         Pcps,                           &
232                                         PI3D,                           &
233                                         QC3D,                           &
234                                         QVFTEN,                         &
235                                         QVPBLTEN,                       &
236                                         QI3D,                           &
237                                         QV3D,                           &
238                                         RHO3D,                          &
239                                         T3D,                            &
240                                         U3D,                            &
241                                         V3D,                            &
242                                         W                              
244 !--------------------------- OPTIONAL VARS ----------------------------
245                                                                                                       
246       REAL, DIMENSION(ims:ime, kms:kme, jms:jme),                       &
247                OPTIONAL, INTENT(INOUT) ::                               &
248                                         RQCCUTEN,                       &
249                                         RQICUTEN,                       &
250                                         RQVCUTEN,                       &
251                                         RTHCUTEN,                       &
252                                         RUCUTEN,                        &
253                                         RVCUTEN
254                                                                                                       
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
260 ! use or not.
262      LOGICAL, OPTIONAL ::                                    &
263                                                    F_QV      &
264                                                   ,F_QC      &
265                                                   ,F_QR      &
266                                                   ,F_QI      &
267                                                   ,F_QS
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) ::                           &
277                                         QFX     
279       REAL      ::                                      &
280                                         DELT,                           &
281                                         RDELT                          
283       REAL     , DIMENSION(its:ite) ::                  &
284                                         RCS,                            &
285                                         RN,                             &
286                                         EVAP
287       INTEGER  , DIMENSION(its:ite) ::  SLIMSK                         
288       
290       REAL     , DIMENSION(its:ite, kts:kte+1) ::       &
291                                         PRSI                            
293       REAL     , DIMENSION(its:ite, kts:kte) ::         &
294                                         DEL,                            &
295                                         DOT,                            &
296                                         PHIL,                           &
297                                         PRSL,                           &
298                                         Q1,                             & 
299                                         Q2,                             &
300                                         Q3,                             &
301                                         Q1B,                            &
302                                         Q1BL,                           &
303                                         Q11,                            &
304                                         Q12,                            &  
305                                         T1,                             & 
306                                         U1,                             & 
307                                         V1,                             & 
308                                         ZI,                             & 
309                                         ZL,                             &
310                                         OMG,                            &
311                                         GHT 
313       INTEGER, DIMENSION(its:ite) ::                                    &
314                                         KBOT,                           &
315                                         KTOP                           
317       INTEGER ::                                                        &
318                                         I,                              &
319                                         IM,                             &
320                                         J,                              &
321                                         K,                              &
322                                         KM,                             &
323                                         KP,                             &
324                                         KX
327       LOGICAL :: run_param
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
333       INTEGER                      :: zz 
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
341            run_param = .TRUE.
342          else
343            run_param = .FALSE.
344          endif   
345       else
346          if (MOD(ITIMESTEP,STEPCU) .EQ. 0 .or. ITIMESTEP .eq. 1) then
347             run_param = .TRUE.
348          else
349             run_param = .FALSE.
350          endif
351       endif
353 !-----------------------------------------------------------------------
354    IF(run_param) THEN
356       DO J=JTS,JTE
357          DO I=ITS,ITE
358             CU_ACT_FLAG(I,J)=.TRUE.
359          ENDDO
360       ENDDO
362       IM=ITE-ITS+1
363       KX=KTE-KTS+1
364       DELT=DT*STEPCU
365       RDELT=1./DELT
367 !-------------  J LOOP (OUTER) --------------------------------------------------
369    DO J=jts,jte
371 ! --------------- compute zi and zl -----------------------------------------
372       DO i=its,ite
373         ZI(I,KTS)=0.0
374       ENDDO
376       DO k=kts+1,kte
377         KM=k-1
378         DO i=its,ite
379           ZI(I,K)=ZI(I,KM)+dz8w(i,km,j)
380         ENDDO
381       ENDDO
383       DO k=kts+1,kte
384         KM=k-1
385         DO i=its,ite
386           ZL(I,KM)=(ZI(I,K)+ZI(I,KM))*0.5
387         ENDDO
388       ENDDO
390       DO i=its,ite
391         ZL(I,KTE)=2.*ZI(I,KTE)-ZL(I,KTE-1)
392       ENDDO
394 ! --------------- end compute zi and zl -------------------------------------
395       DO i=its,ite
396         SLIMSK(i)=int(ABS(XLAND(i,j)-2.))
397       ENDDO
399       DO k=kts,kte
400         kp=k+1
401         DO i=its,ite
402           DOT(i,k)=-0.5*g*rho3d(i,k,j)*(w(i,k,j)+w(i,kp,j))
403         ENDDO
404       ENDDO
406       DO k=kts,kte
407         zz = kte+1-k        
408         DO i=its,ite
409           U1(i,zz)=U3D(i,k,j)
410           V1(i,zz)=V3D(i,k,j)
411           T1(i,zz)=T3D(i,k,j)
412           Q1(i,zz)= QV3D(i,k,j)
413           if(itimestep == 1) then
414              Q1B(i,zz)=0.
415              Q1BL(i,zz)=0.
416           else
417              Q1B(i,zz)=QVFTEN(i,k,j)
418              Q1BL(i,zz)=QVPBLTEN(i,k,j)
419           endif
420           Q2(i,zz)=QC3D(i,k,j)
421           Q3(i,zz)=QI3D(i,k,j)
422           OMG(i,zz)=DOT(i,k)
423           GHT(i,zz)=ZL(i,k)
424           PRSL(i,zz) = Pcps(i,k,j)
425         ENDDO
426       ENDDO
428       DO k=kts,kte+1
429         zz = kte+2-k
430         DO i=its,ite
431           PRSI(i,zz) = P8w(i,k,j)
432         ENDDO
433       ENDDO 
435       DO k=kts,kte
436          zz = kte+1-k
437          sig1(zz) = ZNU(k)
438       ENDDO
440 !###############before call TIECNV, we need EVAP########################
441 !       EVAP is the vapor flux at the surface
442 !########################################################################
444       DO i=its,ite
445         EVAP(i) = QFX(i,j)
446       ENDDO
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)                 
451       DO I=ITS,ITE
452          RAINCV(I,J)=RN(I)/STEPCU
453          PRATEC(I,J)=RN(I)/(STEPCU * DT)
454       ENDDO
456       DO K=KTS,KTE
457         zz = kte+1-k
458         DO I=ITS,ITE
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 
463         ENDDO
464       ENDDO
466       IF(PRESENT(RQCCUTEN))THEN
467         IF ( F_QC ) THEN
468           DO K=KTS,KTE
469             zz = kte+1-k
470             DO I=ITS,ITE
471               RQCCUTEN(I,K,J)=(Q2(I,zz)-QC3D(I,K,J))*RDELT
472             ENDDO
473           ENDDO
474         ENDIF
475       ENDIF
477       IF(PRESENT(RQICUTEN))THEN
478         IF ( F_QI ) THEN
479           DO K=KTS,KTE
480             zz = kte+1-k
481             DO I=ITS,ITE
482               RQICUTEN(I,K,J)=(Q3(I,zz)-QI3D(I,K,J))*RDELT
483             ENDDO
484           ENDDO
485         ENDIF
486       ENDIF
489    ENDDO
491    ENDIF
493    END SUBROUTINE CU_TIEDTKE
495 !====================================================================
496    SUBROUTINE tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,          &
497                      RUCUTEN,RVCUTEN,                                   &
498                      RESTART,P_QC,P_QI,P_FIRST_SCALAR,                  &
499                      allowed_to_read,                                   &
500                      ids, ide, jds, jde, kds, kde,                      &
501                      ims, ime, jms, jme, kms, kme,                      &
502                      its, ite, jts, jte, kts, kte)
503 !--------------------------------------------------------------------
504    IMPLICIT NONE
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) ::  &
513                                                               RTHCUTEN, &
514                                                               RQVCUTEN, &
515                                                               RQCCUTEN, &
516                                                               RQICUTEN, &
517                                                               RUCUTEN,RVCUTEN 
519    INTEGER :: i, j, k, itf, jtf, ktf
521    jtf=min0(jte,jde-1)
522    ktf=min0(kte,kde-1)
523    itf=min0(ite,ide-1)
525    IF(.not.restart)THEN
526      DO j=jts,jtf
527      DO k=kts,ktf
528      DO i=its,itf
529        RTHCUTEN(i,k,j)=0.
530        RQVCUTEN(i,k,j)=0.
531        RUCUTEN(i,k,j)=0.
532        RVCUTEN(i,k,j)=0.
533      ENDDO
534      ENDDO
535      ENDDO
537      IF (P_QC .ge. P_FIRST_SCALAR) THEN
538         DO j=jts,jtf
539         DO k=kts,ktf
540         DO i=its,itf
541            RQCCUTEN(i,k,j)=0.
542         ENDDO
543         ENDDO
544         ENDDO
545      ENDIF
547      IF (P_QI .ge. P_FIRST_SCALAR) THEN
548         DO j=jts,jtf
549         DO k=kts,ktf
550         DO i=its,itf
551            RQICUTEN(i,k,j)=0.
552         ENDDO
553         ENDDO
554         ENDDO
555      ENDIF
556    ENDIF
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 !********************************************************
572 !        subroutine TIECNV
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 !-----------------------------------------------------------------
580       implicit none
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)
596       REAL  dt
597       LOGICAL LOCUM(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
602 !     real TLUCUA
603 !     external TLUCUA
605       ZTMST=dt
606 !  Masv flux diagnostics.
608       PSHEAT=0.0
609       PSRAIN=0.0
610       PSEVAP=0.0
611       PSMELT=0.0
612       PSDISS=0.0
613       DO 8 j=1,lq
614         ZRAIN(j)=0.0
615         LOCUM(j)=.FALSE.
616         PRSFC(j)=0.0
617         PSSFC(j)=0.0
618         PAPRC(j)=0.0
619         PAPRS(j)=0.0
620         PAPRSM(j)=0.0
621         PQHFL(j)=evap(j)
622     8 CONTINUE
624 !     CONVERT MODEL VARIABLES FOR MFLUX SCHEME
626       DO 10 k=1,km
627         DO 10 j=1,lq
628           PTTE(j,k)=0.0
629           PCTE(j,k)=0.0
630           PVOM(j,k)=0.0
631           PVOL(j,k)=0.0
632           ZTP1(j,k)=pt(j,k)
633           ZQP1(j,k)=pqv(j,k)/(1.0+pqv(j,k))
634           PUM1(j,k)=pu(j,k)
635           PVM1(j,k)=pv(j,k)
636           PVERV(j,k)=pomg(j,k)
637           PGEO(j,k)=G*poz(j,k)
638           TT=ZTP1(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)
643           ZQQ(j,k)=PQTE(j,k)
644    10 CONTINUE
646 !-----------------------------------------------------------------------
647 !*    2.     CALL 'CUMASTR'(MASTER-ROUTINE FOR CUMULUS PARAMETERIZATION)
649       CALL CUMASTR_NEW &
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, &
658           PCTE,     sig1,     lndj)
660 !     TO INCLUDE THE CLOUD WATER AND CLOUD ICE DETRAINED FROM CONVECTION
662       IF(fdbk.ge.1.0e-9) THEN
663       DO 20 K=1,km
664       DO 20 j=1,lq
665       If(PCTE(j,k).GT.0.0) then
666         ZTPP1=pt(j,k)+PTTE(j,k)*ZTMST
667         if(ZTPP1.ge.t000) then
668            fliq=1.0
669            ZALF=0.0
670         else if(ZTPP1.le.hgfr) then
671            fliq=0.0
672            ZALF=ALF
673         else
674            ZTC=ZTPP1-t000
675            fliq=0.0059+0.9941*exp(-0.003102*ZTC*ZTC)
676            ZALF=ALF
677         endif
678         fice=1.0-fliq
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)
682       Endif
683    20 CONTINUE
684       ENDIF
686       DO 75 k=1,km
687         DO 75 j=1,lq
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))
691    75 CONTINUE
692       DO 85 j=1,lq
693         zprecc(j)=amax1(0.0,(PRSFC(j)+PSSFC(j))*ZTMST)
694    85 CONTINUE
695       IF (LMFDUDV) THEN
696         DO 100 k=1,km
697           DO 100 j=1,lq
698             pu(j,k)=pu(j,k)+PVOM(j,k)*ZTMST
699             pv(j,k)=pv(j,k)+PVOL(j,k)*ZTMST
700   100   CONTINUE
701       ENDIF
703       RETURN
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,& 
723           PCTE,     sig1,     lndj)
725 !***CUMASTR*  MASTER ROUTINE FOR CUMULUS MASSFLUX-SCHEME
726 !     M.TIEDTKE      E.C.M.W.F.     1986/1987/1989
727 !***PURPOSE
728 !   -------
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.
734 !***INTERFACE.
735 !   ----------
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)
745 !***METHOD
746 !   ------
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'
764 !***EXTERNALS.
765 !   ----------
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
774 !***SWITCHES.
775 !   --------
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
781 !***
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
789 !                LEVEL
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
794 !***REFERENCE.
795 !   ----------
796 !          PAPER ON MASSFLUX SCHEME (TIEDTKE,1989)
797 !-----------------------------------------------------------------
798 !-------------------------------------------------------------------
799       IMPLICIT NONE
800 !-------------------------------------------------------------------
801       INTEGER   KLON, KLEV, KLEVP1
802       INTEGER   KLEVM1
803       REAL      ZTMST
804       REAL      PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT, ZCONS2
805       INTEGER   JK,JL,IKB
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
809       INTEGER   ICUM, ITOPM2
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)
839       REAL     sig1(KLEV)
840       INTEGER  ILAB(KLON,KLEV),        IDTOP(KLON),   &
841               ICTOP0(KLON),           ILWMIN(KLON)    
842       INTEGER  KCBOT(KLON),            KCTOP(KLON),   &
843               KTYPE(KLON),            IHMIN(KLON),    &
844               KTOP0,                  lndj(KLON)
845       LOGICAL  LDCUM(KLON)
846       LOGICAL  LODDRAF(KLON),          LLO1
847 !-------------------------------------------
848 !     1.    SPECIFY CONSTANTS AND PARAMETERS
849 !-------------------------------------------
850   100 CONTINUE
851       ZCONS2=1./(G*ZTMST)
852 !--------------------------------------------------------------
853 !*    2.    INITIALIZE VALUES AT VERTICAL GRID POINTS IN 'CUINI'
854 !--------------------------------------------------------------
855   200 CONTINUE
856       CALL CUINI &
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,  &
864           PLUDE,    ILAB)
865 !----------------------------------
866 !*    3.0   CLOUD BASE CALCULATIONS
867 !----------------------------------
868   300 CONTINUE
869 !*         (A) DETERMINE CLOUD BASE VALUES IN 'CUBASE'
870 !          -------------------------------------------
871       CALL CUBASE &
872          (KLON,     KLEV,     KLEVP1,   KLEVM1,   ZTENH, &
873           ZQENH,    ZGEOH,    PAPH,     PTU,      PQU,   &
874           PLU,      PUEN,     PVEN,     ZUU,      ZVU,   &
875           LDCUM,    KCBOT,    ILAB)
876 !*          (B) DETERMINE TOTAL MOISTURE CONVERGENCE AND
877 !*              THEN DECIDE ON TYPE OF CUMULUS CONVECTION
878 !               -----------------------------------------
879        JK=1
880        DO 310 JL=1,KLON
881        ZDQCV(JL) =PQTE(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
882        ZDQPBL(JL)=0.0
883        IDTOP(JL)=0
884   310  CONTINUE
885        DO 320 JK=2,KLEV
886        DO 315 JL=1,KLON
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))
890   315 CONTINUE
891   320 CONTINUE
892       DO 340 JL=1,KLON
893          KTYPE(JL)=0
894       IF(ZDQCV(JL).GT.MAX(0.,1.1*PQHFL(JL)*G)) THEN
895          KTYPE(JL)=1
896       ELSE
897          KTYPE(JL)=2
898       ENDIF
899 !*         (C) DETERMINE MOISTURE SUPPLY FOR BOUNDARY LAYER
900 !*             AND DETERMINE CLOUD BASE MASSFLUX IGNORING
901 !*             THE EFFECTS OF DOWNDRAFTS AT THIS STAGE
902 !              ------------------------------------------
903       IKB=KCBOT(JL)
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))
908       ELSE
909          ZMFUB(JL)=0.01
910          LDCUM(JL)=.FALSE.
911       ENDIF
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 !------------------------------------------------------
917   400 CONTINUE
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 ! -------------------------------------------------------------
922       IKB=KCBOT(JL)
923       ZHCBASE(JL)=CPD*PTU(JL,IKB)+ZGEOH(JL,IKB)+ALV*PQU(JL,IKB)
924       ICTOP0(JL)=KCBOT(JL)-1
925   340 CONTINUE
926       ZALVDCP=ALV/CPD
927       ZQALV=1./ALV
928       DO 420 JK=KLEVM1,3,-1
929       DO 420 JL=1,KLON
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.)
936       ZHHATT(JL,JK)=ZHHAT
937       IF(JK.LT.ICTOP0(JL).AND.ZHCBASE(JL).GT.ZHHAT) ICTOP0(JL)=JK
938   420 CONTINUE
939       DO 430 JL=1,KLON
940       JK=KCBOT(JL)
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.)
947       ZHHATT(JL,JK)=ZHHAT
948   430 CONTINUE
950 ! Find lowest possible org. detrainment level
952       DO 440 JL = 1, KLON
953          ZHMIN(JL) = 0.
954          IF( LDCUM(JL).AND.KTYPE(JL).EQ.1 ) THEN
955             IHMIN(JL) = KCBOT(JL)
956          ELSE
957             IHMIN(JL) = -1
958          END IF
959  440  CONTINUE 
961       ZBI = 1./(25.*G)
962       DO 450 JK = KLEV, 1, -1
963       DO 450 JL = 1, KLON
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
966         IKB = KCBOT(JL)
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,      &
971           JK-1)-PGEO(JL,JK))
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
977       END IF
978  450  CONTINUE 
979       DO 460 JL = 1, KLON
980       IF (LDCUM(JL).AND.KTYPE(JL).EQ.1) THEN
981         IF (IHMIN(JL).LT.ICTOP0(JL)) IHMIN(JL) = ICTOP0(JL)
982       END IF
983       if(nentr.eq.1) then
984         IF(KTYPE(JL).EQ.1) THEN
985           ZENTR(JL)=ENTRPEN
986         ELSE
987           ZENTR(JL)=ENTRSCV
988         ENDIF
989         if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.1
990       else
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
994       endif
995  460  CONTINUE 
996 !*         (B) DO ASCENT IN 'CUASC'IN ABSENCE OF DOWNDRAFTS
997 !----------------------------------------------------------
998       CALL CUASC_NEW &
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 !------------------------------------------------------------------
1012       DO 480 JL=1,KLON
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
1017         ZENTR(JL)=ENTRSCV
1018         if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.1
1019       endif
1020       if(nentr.eq.2) then
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
1024       endif
1025       ZRFL(JL)=ZDMFUP(JL,1)
1026   480 CONTINUE
1027       DO 490 JK=2,KLEV
1028       DO 490 JL=1,KLON
1029           ZRFL(JL)=ZRFL(JL)+ZDMFUP(JL,JK)
1030   490 CONTINUE
1031 !-----------------------------------------
1032 !*    5.0   CUMULUS DOWNDRAFT CALCULATIONS
1033 !-----------------------------------------
1034   500 CONTINUE
1035       IF(LMFDD) THEN
1036 !*      (A) DETERMINE LFS IN 'CUDLFS'
1037 !--------------------------------------
1038          CALL CUDLFS &
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 !------------------------------------------------------------
1047          CALL CUDDRAF &
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 !-----------------------------------------------------------
1055       END IF
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
1060 !       (ktype=2)
1061 !       implemented by Y. WANG based on ECHAM4 in Nov. 2001.
1063       DO 510 JL=1,KLON
1064         ZHEAT(JL)=0.0
1065         ZCAPE(JL)=0.0
1066         ZRELH(JL)=0.0
1067         ZMFUB1(JL)=ZMFUB(JL)
1068   510 CONTINUE
1070       DO 511 JL=1,KLON
1071       IF(LDCUM(JL).AND.KTYPE(JL).EQ.1) THEN
1072       KTOP0=MAX(12,KCTOP(JL))
1073        DO JK=2,KLEV
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))) &
1082            -1.0)*ZDZ
1083        ENDIF
1084        IF(JK.LE.KCBOT(JL).AND.JK.GT.KTOP0) THEN
1085          dept=(PAPH(JL,JK)-PAPH(JL,JK-1))/(PAPH(JL,KCBOT(JL))-  &
1086             PAPH(JL,KTOP0))
1087          ZRELH(JL)=ZRELH(JL)+dept*PQEN(JL,JK)/PQSEN(JL,JK)
1088        ENDIF
1089        ENDDO
1091        IF(ZRELH(JL).GE.CRIRH) THEN
1092          IKB=KCBOT(JL)
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)
1098        ELSE
1099          ZMFUB1(JL)=0.01
1100          ZMFUB(JL)=0.01
1101          LDCUM(JL)=.FALSE.
1102         ENDIF
1103        ENDIF
1104   511  CONTINUE
1106 !*  5.2   RECALCULATE CONVECTIVE FLUXES DUE TO EFFECT OF
1107 !         DOWNDRAFTS ON BOUNDARY LAYER MOISTURE BUDGET
1108 !--------------------------------------------------------
1109        DO 512 JL=1,KLON
1110         IF(KTYPE(JL).NE.1) THEN
1111            IKB=KCBOT(JL)
1112            IF(PMFD(JL,IKB).LT.0.0.AND.LODDRAF(JL)) THEN
1113               ZEPS=CMFDEPS
1114            ELSE
1115               ZEPS=0.
1116            ENDIF
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))
1124            ELSE
1125               ZMFUB1(JL)=ZMFUB(JL)
1126            ENDIF
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)
1131         END IF
1132   512   CONTINUE
1133         DO 530 JK=1,KLEV
1134         DO 530 JL=1,KLON
1135         IF(LDCUM(JL)) THEN
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
1141         ELSE
1142            PMFD(JL,JK)=0.0
1143            ZMFDS(JL,JK)=0.0
1144            ZMFDQ(JL,JK)=0.0
1145            ZDMFDP(JL,JK)=0.0
1146         ENDIF
1147   530   CONTINUE
1148         DO 538 JL=1,KLON
1149            IF(LDCUM(JL)) THEN
1150               ZMFUB(JL)=ZMFUB1(JL)
1151            ELSE
1152               ZMFUB(JL)=0.0
1153            ENDIF
1154   538   CONTINUE
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 !---------------------------------------------------------------
1162   600 CONTINUE
1163       CALL CUASC_NEW &
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 !----------------------------------------------------------
1176   700 CONTINUE
1177       CALL CUFLX &
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 !----------------------------------------------------------------
1188   800 CONTINUE
1189       CALL CUDTDQ                                          &
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 !----------------------------------------------------------------
1200   900 CONTINUE
1201       IF(LMFDUDV) THEN
1202       CALL CUDUDV  &
1203          (KLON,     KLEV,     KLEVP1,   ITOPM2,   KTYPE,   &
1204           KCBOT,    PAPH,     LDCUM,    PUEN,     PVEN,    &
1205           PVOM,     PVOL,     ZUU,      ZUD,      ZVU,     &
1206           ZVD,      PMFU,     PMFD,     PSDISS)
1207       END IF
1208  1000 CONTINUE
1209       RETURN
1210       END SUBROUTINE CUMASTR_NEW
1213 !#############################################################
1215 !             LEVEL 3 SUBROUTINEs
1217 !#############################################################
1218 !**********************************************
1219 !       SUBROUTINE CUINI
1220 !**********************************************
1222       SUBROUTINE CUINI                                    &
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,    &
1230           PLUDE,    KLAB)
1231 !      M.TIEDTKE         E.C.M.W.F.     12/89
1232 !***PURPOSE
1233 !   -------
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
1237 !***INTERFACE
1238 !   ---------
1239 !          THIS ROUTINE IS CALLED FROM *CUMASTR*.
1240 !***METHOD.
1241 !  --------
1242 !          FOR EXTRAPOLATION TO HALF LEVELS SEE TIEDTKE(1989)
1243 !***EXTERNALS
1244 !   ---------
1245 !          *CUADJTQ* TO SPECIFY QS AT HALF LEVELS
1246 ! ----------------------------------------------------------------
1247 !-------------------------------------------------------------------
1248       IMPLICIT NONE
1249 !-------------------------------------------------------------------
1250       INTEGER   KLON, KLEV, KLEVP1
1251       INTEGER   klevm1
1252       INTEGER   JK,JL,IK, ICALL
1253       REAL      ZDP, ZZS
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),          &
1270               PDPMEL(KLON,KLEV)
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 ! -----------------------------------------------------------
1278   100 CONTINUE
1279       ZDP=0.5
1280       DO 130 JK=2,KLEV
1281       DO 110 JL=1,KLON
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)
1286       ZPH(JL)=PAPH(JL,JK)
1287       LOFLAG(JL)=.TRUE.
1288   110 CONTINUE
1289       IK=JK
1290       ICALL=0
1291       CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTENH,PQSENH,LOFLAG,ICALL)
1292       DO 120 JL=1,KLON
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.)
1296   120 CONTINUE
1297   130 CONTINUE
1298       DO 140 JL=1,KLON
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)
1305       KLWMIN(JL)=KLEV
1306       ZWMAX(JL)=0.
1307   140 CONTINUE
1308       DO 160 JK=KLEVM1,2,-1
1309       DO 150 JL=1,KLON
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
1313   150 CONTINUE
1314   160 CONTINUE
1315       DO 190 JK=KLEV,3,-1
1316       DO 180 JL=1,KLON
1317       IF(PVERV(JL,JK).LT.ZWMAX(JL)) THEN
1318          ZWMAX(JL)=PVERV(JL,JK)
1319          KLWMIN(JL)=JK
1320       END IF
1321   180 CONTINUE
1322   190 CONTINUE
1323 !-----------------------------------------------------------
1324 !*    2.0      INITIALIZE VALUES FOR UPDRAFTS AND DOWNDRAFTS
1325 !-----------------------------------------------------------
1326   200 CONTINUE
1327       DO 230 JK=1,KLEV
1328       IK=JK-1
1329       IF(JK.EQ.1) IK=1
1330       DO 220 JL=1,KLON
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)
1335       PLU(JL,JK)=0.
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)
1340       PMFU(JL,JK)=0.
1341       PMFD(JL,JK)=0.
1342       PMFUS(JL,JK)=0.
1343       PMFDS(JL,JK)=0.
1344       PMFUQ(JL,JK)=0.
1345       PMFDQ(JL,JK)=0.
1346       PDMFUP(JL,JK)=0.
1347       PDMFDP(JL,JK)=0.
1348       PDPMEL(JL,JK)=0.
1349       PLUDE(JL,JK)=0.
1350       KLAB(JL,JK)=0
1351   220 CONTINUE
1352   230 CONTINUE
1353       RETURN
1354       END SUBROUTINE CUINI   
1356 !**********************************************
1357 !       SUBROUTINE CUBASE
1358 !********************************************** 
1359       SUBROUTINE CUBASE &
1360          (KLON,     KLEV,     KLEVP1,   KLEVM1,   PTENH, &
1361           PQENH,    PGEOH,    PAPH,     PTU,      PQU,   &
1362           PLU,      PUEN,     PVEN,     PUU,      PVU,   &
1363           LDCUM,    KCBOT,    KLAB)
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
1367 !***PURPOSE.
1368 !   --------
1369 !          TO PRODUCE CLOUD BASE VALUES FOR CU-PARAMETRIZATION
1370 !***INTERFACE
1371 !   ---------
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
1377 !***METHOD.
1378 !  --------
1379 !          LIFT SURFACE AIR DRY-ADIABATICALLY TO CLOUD BASE
1380 !          (NON ENTRAINING PLUME,I.E.CONSTANT MASSFLUX)
1381 !***EXTERNALS
1382 !   ---------
1383 !          *CUADJTQ* FOR ADJUSTING T AND Q DUE TO CONDENSATION IN ASCENT
1384 ! ----------------------------------------------------------------
1385 !-------------------------------------------------------------------
1386       IMPLICIT NONE
1387 !-------------------------------------------------------------------
1388       INTEGER   KLON, KLEV, KLEVP1
1389       INTEGER   klevm1
1390       INTEGER   JL,JK,IS,IK,ICALL,IKB
1391       REAL      ZBUO,ZZ
1392       REAL     PTENH(KLON,KLEV),       PQENH(KLON,KLEV),  &
1393               PGEOH(KLON,KLEV),       PAPH(KLON,KLEVP1)
1394       REAL     PTU(KLON,KLEV),         PQU(KLON,KLEV),   &
1395               PLU(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 !------------------------------------------------
1419   100 CONTINUE
1420       DO 110 JL=1,KLON
1421         KLAB(JL,KLEV)=1
1422         KCBOT(JL)=KLEVM1
1423         LDCUM(JL)=.FALSE.
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))
1426   110 CONTINUE
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 !-------------------------------------------------------
1433       DO 200 JK=1,KLEV
1434       DO 200 JL=1,KLON
1435         ZQOLD(JL,JK)=0.0
1436   200 CONTINUE
1437       DO 290 JK=KLEVM1,2,-1
1438         IS=0
1439         DO 210 JL=1,KLON
1440           IF(KLAB(JL,JK+1).EQ.1) THEN
1441              IS=IS+1
1442              LOFLAG(JL)=.TRUE.
1443           ELSE
1444              LOFLAG(JL)=.FALSE.
1445           ENDIF
1446           ZPH(JL)=PAPH(JL,JK)
1447   210   CONTINUE
1448         IF(IS.EQ.0) GO TO 290
1449         DO 220 JL=1,KLON
1450           IF(LOFLAG(JL)) THEN
1451              PQU(JL,JK)=PQU(JL,JK+1)
1452              PTU(JL,JK)=(CPD*PTU(JL,JK+1)+PGEOH(JL,JK+1)  &
1453                        -PGEOH(JL,JK))*RCPD
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)
1458           END IF
1459   220   CONTINUE
1460         IK=JK
1461         ICALL=1
1462         CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTU,PQU,LOFLAG,ICALL)
1463         DO 240 JL=1,KLON
1464           IF(LOFLAG(JL).AND.PQU(JL,JK).NE.ZQOLD(JL,JK)) THEN
1465              KLAB(JL,JK)=2
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
1469              IF(ZBUO.GT.0.) THEN
1470                 KCBOT(JL)=JK
1471                 LDCUM(JL)=.TRUE.
1472              END IF
1473           END IF
1474   240   CONTINUE
1475 !             CALCULATE AVERAGES OF U AND V FOR SUBCLOUD ARA,.
1476 !             THE VALUES WILL BE USED TO DEFINE CLOUD BASE VALUES.
1477         IF(LMFDUDV) THEN
1478            DO 250 JL=1,KLON
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))
1484              END IF
1485  250       CONTINUE
1486         END IF
1487   290 CONTINUE
1488       IF(LMFDUDV) THEN
1489          DO 310 JL=1,KLON
1490          IF(LDCUM(JL)) THEN
1491             IKB=KCBOT(JL)
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
1495          ELSE
1496             PUU(JL,KLEV)=PUEN(JL,KLEVM1)
1497             PVU(JL,KLEV)=PVEN(JL,KLEVM1)
1498          END IF
1499  310     CONTINUE
1500       END IF
1501       RETURN
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.
1522 !***PURPOSE.
1523 !   --------
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)
1527 !***INTERFACE
1528 !   ---------
1529 !          THIS ROUTINE IS CALLED FROM *CUMASTR*.
1530 !***METHOD.
1531 !  --------
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*)
1540 !***EXTERNALS
1541 !   ---------
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
1545 !***REFERENCE
1546 !   ---------
1547 !          (TIEDTKE,1989)
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.
1582 !       PDMFUP [ZMFUP] -
1583 !       KCBOT - Cloud Base Level. (CUBASE)
1584 !       KCTOP -
1585 !       KCTOP0 [ICTOP0] - Estimate of Cloud Top. (CUMASTR)
1586 !       KCUM [ICUM] -
1587 !-------------------------------------------------------------------
1588       IMPLICIT NONE
1589 !-------------------------------------------------------------------
1590       INTEGER   KLON, KLEV, KLEVP1
1591       INTEGER   klevm1,kcum
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
1598       REAL      ZBUOYZ,ZZDMF
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)
1618       REAL     PHCBASE(KLON)
1619       INTEGER  KLWMIN(KLON),           KTYPE(KLON),      &
1620               KLAB(KLON,KLEV),        KCBOT(KLON),       &
1621               KCTOP(KLON),            KCTOP0(KLON),      &
1622               KHMIN(KLON)
1623       LOGICAL  LDCUM(KLON),            LOFLAG(KLON)
1624 !--------------------------------
1625 !*    1.       SPECIFY PARAMETERS
1626 !--------------------------------
1627   100 CONTINUE
1628       ZCONS2=1./(G*ZTMST)
1629 !---------------------------------
1630 !     2.        SET DEFAULT VALUES
1631 !---------------------------------
1632   200 CONTINUE
1633       DO 210 JL=1,KLON
1634         ZMFUU(JL)=0.
1635         ZMFUV(JL)=0.
1636         ZBUOY(JL)=0.
1637         IF(.NOT.LDCUM(JL)) KTYPE(JL)=0
1638   210 CONTINUE
1639       DO 230 JK=1,KLEV
1640       DO 230 JL=1,KLON
1641           PLU(JL,JK)=0.
1642           PMFU(JL,JK)=0.
1643           PMFUS(JL,JK)=0.
1644           PMFUQ(JL,JK)=0.
1645           PMFUL(JL,JK)=0.
1646           PLUDE(JL,JK)=0.
1647           PDMFUP(JL,JK)=0.
1648           ZOENTR(JL,JK)=0.
1649           ZODETR(JL,JK)=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
1652   230 CONTINUE
1653 !------------------------------------------------
1654 !     3.0      INITIALIZE VALUES AT LIFTING LEVEL
1655 !------------------------------------------------
1656       DO 310 JL=1,KLON
1657         KCTOP(JL)=KLEVM1
1658         IF(.NOT.LDCUM(JL)) THEN
1659            KCBOT(JL)=KLEVM1
1660            PMFUB(JL)=0.
1661            PQU(JL,KLEV)=0.
1662         END IF
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)
1666         IF(LMFDUDV) THEN
1667            ZMFUU(JL)=PMFUB(JL)*PUU(JL,KLEV)
1668            ZMFUV(JL)=PMFUB(JL)*PVU(JL,KLEV)
1669         END IF
1670   310 CONTINUE
1672 !-- 3.1 Find organized entrainment at cloud base
1674       DO 322 JL=1,KLON
1675       LDCUM(JL)=.FALSE.
1676       IF (KTYPE(JL).EQ.1) THEN
1677       IKB = KCBOT(JL)
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) &
1685                 +ZDRODZ
1686         ZOENTR(JL,IKB-1) = MIN(ZOENTR(JL,IKB-1),1.E-3)
1687         ZOENTR(JL,IKB-1) = MAX(ZOENTR(JL,IKB-1),0.)
1688        END IF
1689       END IF
1690   322 CONTINUE 
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 !-----------------------------------------------------------------
1698   400 CONTINUE
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 ! ---------------------------------------------------------------------
1703       IK=JK
1704       IF(LMFMID.AND.IK.LT.KLEVM1.AND.IK.GT.KLEV-13) THEN
1705       CALL CUBASMC  &
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)
1712       ENDIF
1713       IS=0
1714       DO 410 JL=1,KLON
1715         ZQOLD(JL)=0.0
1716         IS=IS+KLAB(JL,JK+1)
1717         IF(KLAB(JL,JK+1).EQ.0) KLAB(JL,JK)=0
1718         LOFLAG(JL)=KLAB(JL,JK+1).GT.0
1719         ZPH(JL)=PAPH(JL,JK)
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
1729               PMFUB(JL)=ZMFMAX
1730            END IF
1731         END IF
1732   410 CONTINUE
1733       IF(IS.EQ.0) GO TO 480
1735 !*     SPECIFY ENTRAINMENT RATES IN *CUENTR_NEW*
1736 ! -------------------------------------
1737       IK=JK
1738       CALL CUENTR_NEW &
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
1753       DO 420 JL=1,KLON
1754       IF(LOFLAG(JL)) THEN
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.)
1759         END IF
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.)
1768         END IF
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)
1774           ikt = kctop0(jl)
1775           znevn=(pgeoh(jl,ikt)-pgeoh(jl,jk+1))*(zmse-phhatt(jl,  &
1776                jk+1))*zrg
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)
1782         END IF
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))*  &
1789              zoentr(jl,jk)
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)))-  &
1808             pgeoh(jl,jk))*rcpd
1809         ptu(jl,jk) = MAX(100.,ptu(jl,jk))
1810         ptu(jl,jk) = MIN(400.,ptu(jl,jk))
1811         zqold(jl) = pqu(jl,jk)
1812       END IF
1813   420 CONTINUE
1814 !*             DO CORRECTIONS FOR MOIST ASCENT
1815 !*             BY ADJUSTING T,Q AND L IN *CUADJTQ*
1816 !------------------------------------------------
1817       IK=JK
1818       ICALL=1
1820       CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTU,PQU,LOFLAG,ICALL)
1822       DO 440 JL=1,KLON
1823       IF(LOFLAG(JL).AND.PQU(JL,JK).NE.ZQOLD(JL)) THEN
1824          KLAB(JL,JK)=2
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
1831             KCTOP(JL)=JK
1832             LDCUM(JL)=.TRUE.
1833             IF(ZPBASE(JL)-PAPH(JL,JK).GE.ZDNOPRC) THEN
1834                ZPRCON=CPRCON
1835             ELSE
1836                ZPRCON=0.
1837             ENDIF
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))
1840             PLU(JL,JK)=ZLNEW
1841          ELSE
1842             KLAB(JL,JK)=0
1843             PMFU(JL,JK)=0.
1844          END IF
1845       END IF
1846       IF(LOFLAG(JL)) THEN
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)
1850       END IF
1851   440 CONTINUE
1853       IF(LMFDUDV) THEN
1855         DO 460 JL=1,KLON
1856         zdmfen(jl) = zdmfen(jl) + zoentr(jl,jk)
1857         zdmfde(jl) = zdmfde(jl) + zodetr(jl,jk)
1858            IF(LOFLAG(JL)) THEN
1859               IF(KTYPE(JL).EQ.1.OR.KTYPE(JL).EQ.3) THEN
1860                  IF(ZDMFEN(JL).LE.1.E-20) THEN
1861                     ZZ=3.
1862                  ELSE
1863                     ZZ=2.
1864                  ENDIF
1865               ELSE
1866                  IF(ZDMFEN(JL).LE.1.0E-20) THEN
1867                     ZZ=1.
1868                  ELSE
1869                     ZZ=0.
1870                  ENDIF
1871               END IF
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))
1882               END IF
1883            END IF
1884   460   CONTINUE
1886         END IF
1888 ! Compute organized entrainment
1889 ! for use at next level
1891       DO 470 jl = 1, klon
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 -  &
1898                  g/(rd*ptenh(jl,jk))
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.)
1903        END IF
1904   470 CONTINUE 
1906   480 CONTINUE
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)
1913   500 CONTINUE
1914       DO 510 JL=1,KLON
1915       IF(KCTOP(JL).EQ.KLEVM1) LDCUM(JL)=.FALSE.
1916       KCBOT(JL)=MAX(KCBOT(JL),KCTOP(JL))
1917   510 CONTINUE
1918       IS=0
1919       DO 520 JL=1,KLON
1920       IF(LDCUM(JL)) THEN
1921          IS=IS+1
1922       ENDIF
1923   520 CONTINUE
1924       KCUM=IS
1925       IF(IS.EQ.0) GO TO 800
1926       DO 530 JL=1,KLON
1927       IF(LDCUM(JL)) THEN
1928          JK=KCTOP(JL)-1
1929          ZZDMF=CMFCTOP
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)
1937          PDMFUP(JL,JK)=0.
1938       END IF
1939   530 CONTINUE
1940         IF(LMFDUDV) THEN
1941            DO 540 JL=1,KLON
1942            IF(LDCUM(JL)) THEN
1943               JK=KCTOP(JL)-1
1944               PUU(JL,JK)=PUU(JL,JK+1)
1945               PVU(JL,JK)=PVU(JL,JK+1)
1946            END IF
1947   540      CONTINUE
1948         END IF
1949   800 CONTINUE
1950       RETURN
1951       END SUBROUTINE CUASC_NEW
1954 !**********************************************
1955 !       SUBROUTINE CUDLFS
1956 !********************************************** 
1957       SUBROUTINE CUDLFS &
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
1967 !***PURPOSE.
1968 !   --------
1969 !          TO PRODUCE LFS-VALUES FOR CUMULUS DOWNDRAFTS
1970 !          FOR MASSFLUX CUMULUS PARAMETERIZATION
1971 !***INTERFACE
1972 !   ---------
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.
1978 !***METHOD.
1979 !  --------
1980 !          CHECK FOR NEGATIVE BUOYANCY OF AIR OF EQUAL PARTS OF
1981 !          MOIST ENVIRONMENTAL AIR AND CLOUD AIR.
1982 !***EXTERNALS
1983 !   ---------
1984 !          *CUADJTQ* FOR CALCULATING WET BULB T AND Q AT LFS
1985 ! ----------------------------------------------------------------
1986 !-------------------------------------------------------------------
1987       IMPLICIT NONE
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),        &
2005               KDTOP(KLON)
2006       LOGICAL  LDCUM(KLON),            LLo2(KLON),         &
2007               LDDRAF(KLON)
2008 !-----------------------------------------------
2009 !     1.       SET DEFAULT VALUES FOR DOWNDRAFTS
2010 !-----------------------------------------------
2011   100 CONTINUE
2012       DO 110 JL=1,KLON
2013       LDDRAF(JL)=.FALSE.
2014       KDTOP(JL)=KLEVP1
2015   110 CONTINUE
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 !------------------------------------------------------------------
2029   200 CONTINUE
2030       KE=KLEV-3
2031       DO 290 JK=3,KE
2032 !   2.1      CALCULATE WET-BULB TEMPERATURE AND MOISTURE
2033 !            FOR ENVIRONMENTAL AIR IN *CUADJTQ*
2034 ! -----------------------------------------------------
2035   210 CONTINUE
2036       IS=0
2037       DO 212 JL=1,KLON
2038       ZTENWB(JL,JK)=PTENH(JL,JK)
2039       ZQENWB(JL,JK)=PQENH(JL,JK)
2040       ZPH(JL)=PAPH(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))
2043       IF(LLO2(JL))THEN
2044          IS=IS+1
2045       ENDIF
2046   212 CONTINUE
2047       IF(IS.EQ.0) GO TO 290
2048       IK=JK
2049       ICALL=2
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 ! -----------------------------------------------------
2055   220 CONTINUE
2056       DO 222 JL=1,KLON
2057       IF(LLO2(JL)) THEN
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
2065             KDTOP(JL)=JK
2066             LDDRAF(JL)=.TRUE.
2067             PTD(JL,JK)=ZTTEST
2068             PQD(JL,JK)=ZQTEST
2069             PMFD(JL,JK)=ZMFTOP
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)
2074          END IF
2075       END IF
2076   222 CONTINUE
2077          IF(LMFDUDV) THEN
2078             DO 224 JL=1,KLON
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))
2082             END IF
2083   224       CONTINUE
2084          END IF
2085   290 CONTINUE
2086  300  CONTINUE
2087       RETURN
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
2101 !***PURPOSE.
2102 !   --------
2103 !          TO PRODUCE THE VERTICAL PROFILES FOR CUMULUS DOWNDRAFTS
2104 !          (I.E. T,Q,U AND V AND FLUXES)
2105 !***INTERFACE
2106 !   ---------
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
2111 !***METHOD.
2112 !  --------
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.
2116 !***EXTERNALS
2117 !   ---------
2118 !          *CUADJTQ* FOR ADJUSTING T AND Q DUE TO EVAPORATION IN
2119 !          SATURATED DESCENT
2120 !***REFERENCE
2121 !   ---------
2122 !          (TIEDTKE,1989)
2123 ! ----------------------------------------------------------------
2124 !-------------------------------------------------------------------
2125       IMPLICIT NONE
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),  &
2138               PRFL(KLON)
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 ! ----------------------------------------------------------------
2151   100 CONTINUE
2152       DO 180 JK=3,KLEV
2153       IS=0
2154       DO 110 JL=1,KLON
2155       ZPH(JL)=PAPH(JL,JK)
2156       LLO2(JL)=LDDRAF(JL).AND.PMFD(JL,JK-1).LT.0.
2157       IF(LLO2(JL)) THEN
2158          IS=IS+1
2159       ENDIF
2160   110 CONTINUE
2161       IF(IS.EQ.0) GO TO 180
2162       DO 122 JL=1,KLON
2163       IF(LLO2(JL)) THEN
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))
2166          ZDMFEN(JL)=ZENTR
2167          ZDMFDE(JL)=ZENTR
2168       END IF
2169   122 CONTINUE
2170       ITOPDE=KLEV-2
2171          IF(JK.GT.ITOPDE) THEN
2172             DO 124 JL=1,KLON
2173             IF(LLO2(JL)) THEN
2174                ZDMFEN(JL)=0.
2175                ZDMFDE(JL)=PMFD(JL,ITOPDE)*      &
2176               (PAPH(JL,JK)-PAPH(JL,JK-1))/     &
2177               (PAPH(JL,KLEVP1)-PAPH(JL,ITOPDE))
2178             END IF
2179   124       CONTINUE
2180          END IF
2181       DO 126 JL=1,KLON
2182          IF(LLO2(JL)) THEN
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)))- &
2192                        PGEOH(JL,JK))*RCPD
2193             PTD(JL,JK)=MIN(400.,PTD(JL,JK))
2194             PTD(JL,JK)=MAX(100.,PTD(JL,JK))
2195             ZCOND(JL)=PQD(JL,JK)
2196          END IF
2197   126 CONTINUE
2198       IK=JK
2199       ICALL=2
2200       CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTD,PQD,LLO2,ICALL)
2201       DO 150 JL=1,KLON
2202          IF(LLO2(JL)) THEN
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
2207                PMFD(JL,JK)=0.
2208             ENDIF
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
2214          END IF
2215   150 CONTINUE
2216         IF(LMFDUDV) THEN
2217           DO 160 JL=1,KLON
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)))
2225              END IF
2226   160     CONTINUE
2227         END IF
2228   180 CONTINUE
2229       RETURN
2230       END SUBROUTINE CUDDRAF
2233 !**********************************************
2234 !       SUBROUTINE CUFLX
2235 !********************************************** 
2236       SUBROUTINE CUFLX &
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
2245 !***PURPOSE
2246 !   -------
2247 !          THIS ROUTINE DOES THE FINAL CALCULATION OF CONVECTIVE
2248 !          FLUXES IN THE CLOUD LAYER AND IN THE SUBCLOUD LAYER
2249 !***INTERFACE
2250 !   ---------
2251 !          THIS ROUTINE IS CALLED FROM *CUMASTR*.
2252 !***EXTERNALS
2253 !   ---------
2254 !          NONE
2255 ! ----------------------------------------------------------------
2256 !-------------------------------------------------------------------
2257       IMPLICIT NONE
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)
2275       REAL     sig1(KLEV)
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)
2281       ZCONS2=1./(G*ZTMST)
2282       ZCUCOV=0.05
2283       ZTMELP2=TMELT+2.
2284 !*  1.0      DETERMINE FINAL CONVECTIVE FLUXES
2285 !---------------------------------------------
2286   100 CONTINUE
2287       ITOP=KLEV
2288       DO 110 JL=1,KLON
2289       PRFL(JL)=0.
2290       PSFL(JL)=0.
2291       PRAIN(JL)=0.
2292 !     SWITCH OFF SHALLOW CONVECTION
2293       IF(.NOT.LMFSCV.AND.KTYPE(JL).EQ.2)THEN
2294         LDCUM(JL)=.FALSE.
2295         LDDRAF(JL)=.FALSE.
2296       ENDIF
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
2300   110 CONTINUE
2301       KTOPM2=ITOP-2
2302       DO 120 JK=KTOPM2,KLEV
2303       DO 115 JL=1,KLON
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)
2312          ELSE
2313             PMFD(JL,JK)=0.
2314             PMFDS(JL,JK)=0.
2315             PMFDQ(JL,JK)=0.
2316             PDMFDP(JL,JK-1)=0.
2317          END IF
2318       ELSE
2319          PMFU(JL,JK)=0.
2320          PMFD(JL,JK)=0.
2321          PMFUS(JL,JK)=0.
2322          PMFDS(JL,JK)=0.
2323          PMFUQ(JL,JK)=0.
2324          PMFDQ(JL,JK)=0.
2325          PMFUL(JL,JK)=0.
2326          PDMFUP(JL,JK-1)=0.
2327          PDMFDP(JL,JK-1)=0.
2328          PLUDE(JL,JK-1)=0.
2329       END IF
2330   115 CONTINUE
2331   120 CONTINUE
2332       DO 130 JK=KTOPM2,KLEV
2333       DO 125 JL=1,KLON
2334       IF(LDCUM(JL).AND.JK.GT.KCBOT(JL)) THEN
2335          IKB=KCBOT(JL)
2336          ZZP=((PAPH(JL,KLEVP1)-PAPH(JL,JK))/  &
2337              (PAPH(JL,KLEVP1)-PAPH(JL,IKB)))
2338          IF(KTYPE(JL).EQ.3) THEN
2339             ZZP=ZZP**2
2340          ENDIF
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
2345       END IF
2346 !*    2.        CALCULATE RAIN/SNOW FALL RATES
2347 !*              CALCULATE MELTING OF SNOW
2348 !*              CALCULATE EVAPORATION OF PRECIP
2349 !----------------------------------------------
2350       IF(LDCUM(JL)) THEN
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
2360             END IF
2361          ELSE
2362             PSFL(JL)=PSFL(JL)+PDMFUP(JL,JK)+PDMFDP(JL,JK)
2363          END IF
2364       END IF
2365   125 CONTINUE
2366   130 CONTINUE
2367       DO 230 JL=1,KLON
2368         PRFL(JL)=MAX(PRFL(JL),0.)
2369         PSFL(JL)=MAX(PSFL(JL),0.)
2370         ZPSUBCL(JL)=PRFL(JL)+PSFL(JL)
2371   230 CONTINUE
2372       DO 240 JK=KTOPM2,KLEV
2373       DO 235 JL=1,KLON
2374       IF(LDCUM(JL).AND.JK.GE.KCBOT(JL).AND. &
2375              ZPSUBCL(JL).GT.1.E-20) THEN
2376           ZRFL=ZPSUBCL(JL)
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)
2384           ZRFLN=MAX(ZRNEW,0.)
2385           ZDRFL=MIN(0.,ZRFLN-ZRFL)
2386           PDMFUP(JL,JK)=PDMFUP(JL,JK)+ZDRFL
2387           ZPSUBCL(JL)=ZRFLN
2388       END IF
2389   235 CONTINUE
2390   240 CONTINUE
2391       DO 250 JL=1,KLON
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)))
2397   250 CONTINUE
2398       RETURN
2399       END SUBROUTINE CUFLX
2402 !**********************************************
2403 !       SUBROUTINE CUDTDQ
2404 !********************************************** 
2405       SUBROUTINE CUDTDQ &
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
2416 !***INTERFACE.
2417 !   ----------
2418 !          *CUDTDQ* IS CALLED FROM *CUMASTR*
2419 ! ----------------------------------------------------------------
2420 !-------------------------------------------------------------------
2421       IMPLICIT NONE
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),      &
2438               PQEN(KLON,KLEV)
2439       REAL     PDPMEL(KLON,KLEV),      PSFL(KLON)
2440       REAL     ZSHEAT(KLON),           ZMELT(KLON)
2441       LOGICAL  LDCUM(KLON)
2442 !--------------------------------
2443 !*    1.0      SPECIFY PARAMETERS
2444 !--------------------------------
2445   100 CONTINUE
2446       ZDIAGT=ZTMST
2447       ZDIAGW=ZDIAGT/RHOH2O
2448 !--------------------------------------------------
2449 !*    2.0      INCREMENTATION OF T AND Q TENDENCIES
2450 !--------------------------------------------------
2451   200 CONTINUE
2452       DO 210 JL=1,KLON
2453       ZMELT(JL)=0.
2454       ZSHEAT(JL)=0.
2455   210 CONTINUE
2456       DO 250 JK=KTOPM2,KLEV
2457       IF(JK.LT.KLEV) THEN
2458          DO 220 JL=1,KLON
2459          IF(LDCUM(JL)) THEN
2460             IF(PTEN(JL,JK).GT.TMELT) THEN
2461                ZALV=ALV
2462             ELSE
2463                ZALV=ALS
2464             ENDIF
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)
2483          END IF
2484   220 CONTINUE
2485       ELSE
2486          DO 230 JL=1,KLON
2487          IF(LDCUM(JL)) THEN
2488             IF(PTEN(JL,JK).GT.TMELT) THEN
2489                ZALV=ALV
2490             ELSE
2491                ZALV=ALS
2492             ENDIF
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)
2507          END IF
2508   230    CONTINUE
2509       END IF
2510   250 CONTINUE
2511 !---------------------------------------------------------
2512 !      3.      UPDATE SURFACE FIELDS AND DO GLOBAL BUDGETS
2513 !---------------------------------------------------------
2514   300 CONTINUE
2515       DO 310 JL=1,KLON
2516       PRSFC(JL)=PRFL(JL)
2517       PSSFC(JL)=PSFL(JL)
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)
2524   310 CONTINUE
2525       PSEVAP=PSEVAP+PSRAIN
2526       RETURN
2527       END SUBROUTINE CUDTDQ
2530 !**********************************************
2531 !       SUBROUTINE CUDUDV
2532 !********************************************** 
2533       SUBROUTINE CUDUDV &
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
2541 !***INTERFACE.
2542 !   ----------
2543 !          *CUDUDV* IS CALLED FROM *CUMASTR*
2544 ! ----------------------------------------------------------------
2545 !-------------------------------------------------------------------
2546       IMPLICIT NONE
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),    &
2553               PAPH(KLON,KLEVP1)
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),   &
2559               ZDISS(KLON)
2560       INTEGER  KTYPE(KLON),            KCBOT(KLON)
2561       LOGICAL  LDCUM(KLON)
2562 !------------------------------------------------------------
2563 !*    1.0      CALCULATE FLUXES AND UPDATE U AND V TENDENCIES
2564 ! -----------------------------------------------------------
2565   100 CONTINUE
2566       DO 120 JK=KTOPM2,KLEV
2567       IK=JK-1
2568       DO 110 JL=1,KLON
2569       IF(LDCUM(JL)) THEN
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))
2574       END IF
2575   110 CONTINUE
2576   120 CONTINUE
2577       DO 140 JK=KTOPM2,KLEV
2578       DO 130 JL=1,KLON
2579       IF(LDCUM(JL).AND.JK.GT.KCBOT(JL)) THEN
2580          IKB=KCBOT(JL)
2581          ZZP=((PAPH(JL,KLEVP1)-PAPH(JL,JK))/  &
2582              (PAPH(JL,KLEVP1)-PAPH(JL,IKB)))
2583          IF(KTYPE(JL).EQ.3) THEN
2584             ZZP=ZZP**2
2585          ENDIF
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
2590       END IF
2591   130 CONTINUE
2592   140 CONTINUE
2593       DO 150 JL=1,KLON
2594       ZDISS(JL)=0.
2595   150 CONTINUE
2596       DO 190 JK=KTOPM2,KLEV
2597       IF(JK.LT.KLEV) THEN
2598          DO 160 JL=1,KLON
2599             IF(LDCUM(JL)) THEN
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
2613             END IF
2614   160    CONTINUE
2615       ELSE
2616          DO 170 JL=1,KLON
2617             IF(LDCUM(JL)) THEN
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
2627             END IF
2628   170    CONTINUE
2629        END IF
2630   190 CONTINUE
2631       ZSUM=SSUM(KLON,ZDISS(1),1)
2632       PSDISS=PSDISS+ZSUM
2633       RETURN
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
2653 !***PURPOSE.
2654 !   --------
2655 !          THIS ROUTINE CALCULATES CLOUD BASE VALUES
2656 !          FOR MIDLEVEL CONVECTION
2657 !***INTERFACE
2658 !   ---------
2659 !          THIS ROUTINE IS CALLED FROM *CUASC*.
2660 !          INPUT ARE ENVIRONMENTAL VALUES T,Q ETC
2661 !          IT RETURNS CLOUDBASE VALUES FOR MIDLEVEL CONVECTION
2662 !***METHOD.
2663 !   -------
2664 !          S. TIEDTKE (1989)
2665 !***EXTERNALS
2666 !   ---------
2667 !          NONE
2668 ! ----------------------------------------------------------------
2669 !-------------------------------------------------------------------
2670       IMPLICIT NONE
2671 !-------------------------------------------------------------------
2672       INTEGER   KLON, KLEV, KLEVP1
2673       INTEGER   KLEVM1,KK, JL
2674       REAL      zzzmb
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),      &
2687               KLAB(KLON,KLEV)
2688       LOGICAL  LDCUM(KLON)
2689 !--------------------------------------------------------
2690 !*    1.      CALCULATE ENTRAINMENT AND DETRAINMENT RATES
2691 ! -------------------------------------------------------
2692   100 CONTINUE
2693          DO 150 JL=1,KLON
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)) &
2697                                *RCPD
2698             PQU(JL,KK+1)=PQEN(JL,KK)
2699             PLU(JL,KK+1)=0.
2700             ZZZMB=MAX(CMFCMIN,-PVERV(JL,KK)/G)
2701             ZZZMB=MIN(ZZZMB,CMFCMAX)
2702             PMFUB(JL)=ZZZMB
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)
2706             PMFUL(JL,KK+1)=0.
2707             PDMFUP(JL,KK+1)=0.
2708             KCBOT(JL)=KK
2709             KLAB(JL,KK+1)=1
2710             KTYPE(JL)=3
2711             PENTR(JL)=ENTRMID
2712                IF(LMFDUDV) THEN
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)
2717                END IF
2718          END IF
2719   150   CONTINUE
2720       RETURN
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
2730 !***PURPOSE.
2731 !   --------
2732 !          TO PRODUCE T,Q AND L VALUES FOR CLOUD ASCENT
2733 !***INTERFACE
2734 !   ---------
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
2745 !***EXTERNALS
2746 !   ---------
2747 !          3 LOOKUP TABLES ( TLUCUA, TLUCUB, TLUCUC )
2748 !          FOR CONDENSATION CALCULATIONS.
2749 !          THE TABLES ARE INITIALISED IN *SETPHYS*.
2750 ! ----------------------------------------------------------------
2751 !-------------------------------------------------------------------
2752       IMPLICIT NONE
2753 !-------------------------------------------------------------------
2754       INTEGER   KLON, KLEV
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),       &
2759               PP(KLON)
2760       LOGICAL  LDFLAG(KLON)
2761 !------------------------------------------------------------------
2762 !     2.      CALCULATE CONDENSATION AND ADJUST T AND Q ACCORDINGLY
2763 !------------------------------------------------------------------
2764   200 CONTINUE
2765       IF (KCALL.EQ.1 ) THEN
2766          ISUM=0
2767          DO 210 JL=1,KLON
2768          ZCOND(JL)=0.
2769          IF(LDFLAG(JL)) THEN
2770             ZQP(JL)=1./PP(JL)
2771             TT=PT(JL,KK)
2772             ZQSAT=TLUCUA(TT)*ZQP(JL)
2773             ZQSAT=MIN(0.5,ZQSAT)
2774             ZCOR=1./(1.-VTMPC1*ZQSAT)
2775             ZQSAT=ZQSAT*ZCOR
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
2781          END IF
2782   210    CONTINUE
2783          IF(ISUM.EQ.0) GO TO 230
2784          DO 220 JL=1,KLON
2785          IF(LDFLAG(JL).AND.ZCOND(JL).NE.0.) THEN
2786             TT=PT(JL,KK)
2787             ZQSAT=TLUCUA(TT)*ZQP(JL)
2788             ZQSAT=MIN(0.5,ZQSAT)
2789             ZCOR=1./(1.-VTMPC1*ZQSAT)
2790             ZQSAT=ZQSAT*ZCOR
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
2794          END IF
2795   220    CONTINUE
2796   230    CONTINUE
2797       END IF
2798       IF(KCALL.EQ.2) THEN
2799          ISUM=0
2800          DO 310 JL=1,KLON
2801          ZCOND(JL)=0.
2802          IF(LDFLAG(JL)) THEN
2803             TT=PT(JL,KK)
2804             ZQP(JL)=1./PP(JL)
2805             ZQSAT=TLUCUA(TT)*ZQP(JL)
2806             ZQSAT=MIN(0.5,ZQSAT)
2807             ZCOR=1./(1.-VTMPC1*ZQSAT)
2808             ZQSAT=ZQSAT*ZCOR
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
2814          END IF
2815   310    CONTINUE
2816          IF(ISUM.EQ.0) GO TO 330
2817          DO 320 JL=1,KLON
2818          IF(LDFLAG(JL).AND.ZCOND(JL).NE.0.) THEN
2819             TT=PT(JL,KK)
2820             ZQSAT=TLUCUA(TT)*ZQP(JL)
2821             ZQSAT=MIN(0.5,ZQSAT)
2822             ZCOR=1./(1.-VTMPC1*ZQSAT)
2823             ZQSAT=ZQSAT*ZCOR
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
2827          END IF
2828   320    CONTINUE
2829   330    CONTINUE
2830       END IF
2831       IF(KCALL.EQ.0) THEN
2832          ISUM=0
2833          DO 410 JL=1,KLON
2834            TT=PT(JL,KK)
2835            ZQP(JL)=1./PP(JL)
2836            ZQSAT=TLUCUA(TT)*ZQP(JL)
2837            ZQSAT=MIN(0.5,ZQSAT)
2838            ZCOR=1./(1.-VTMPC1*ZQSAT)
2839            ZQSAT=ZQSAT*ZCOR
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
2844   410    CONTINUE
2845          IF(ISUM.EQ.0) GO TO 430
2846          DO 420 JL=1,KLON
2847            TT=PT(JL,KK)
2848            ZQSAT=TLUCUA(TT)*ZQP(JL)
2849            ZQSAT=MIN(0.5,ZQSAT)
2850            ZCOR=1./(1.-VTMPC1*ZQSAT)
2851            ZQSAT=ZQSAT*ZCOR
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
2855   420    CONTINUE
2856   430    CONTINUE
2857       END IF
2858       IF(KCALL.EQ.4) THEN
2859          DO 510 JL=1,KLON
2860            TT=PT(JL,KK)
2861            ZQP(JL)=1./PP(JL)
2862            ZQSAT=TLUCUA(TT)*ZQP(JL)
2863            ZQSAT=MIN(0.5,ZQSAT)
2864            ZCOR=1./(1.-VTMPC1*ZQSAT)
2865            ZQSAT=ZQSAT*ZCOR
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)
2869   510    CONTINUE
2870          DO 520 JL=1,KLON
2871            TT=PT(JL,KK)
2872            ZQSAT=TLUCUA(TT)*ZQP(JL)
2873            ZQSAT=MIN(0.5,ZQSAT)
2874            ZCOR=1./(1.-VTMPC1*ZQSAT)
2875            ZQSAT=ZQSAT*ZCOR
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
2879   520    CONTINUE
2880       END IF
2881       RETURN
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
2894 !      Y.WANG            IPRC           11/01
2895 !***PURPOSE.
2896 !   --------
2897 !          THIS ROUTINE CALCULATES ENTRAINMENT/DETRAINMENT RATES
2898 !          FOR UPDRAFTS IN CUMULUS PARAMETERIZATION
2899 !***INTERFACE
2900 !   ---------
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
2905 !***METHOD.
2906 !  --------
2907 !          S. TIEDTKE (1989), NORDENG(1996)
2908 !***EXTERNALS
2909 !   ---------
2910 !          NONE
2911 ! ----------------------------------------------------------------
2912 !-------------------------------------------------------------------
2913       IMPLICIT NONE
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),        &
2923               ZODETR(KLON,KLEV)
2924       INTEGER  KLWMIN(KLON),           KTYPE(KLON),        &
2925               KCBOT(KLON),            KCTOP0(KLON),        &
2926               KHMIN(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 !-------------------------------------------------------
2935       DO jl = 1, klon
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)
2942         if(llo1) then
2943            zdmfde(jl) = zentr
2944         else
2945            zdmfde(jl) = 0.0
2946         endif
2947         llo2 = llo1.AND.ktype(jl).EQ.2.AND.((zpbase(jl)-paph(jl,kk)) &
2948              .LT.ZDNOPRC.OR.paph(jl,kk).GT.zpmid)
2949         if(llo2) then
2950             zdmfen(jl) = zentr
2951         else
2952             zdmfen(jl) = 0.0
2953         endif
2954         iklwmin = MAX(klwmin(jl),kctop0(jl)+2)
2955         llo2 = llo1.AND.ktype(jl).EQ.3.AND.(kk.GE.iklwmin.OR.pap(jl,kk) &
2956              .GT.zpmid)
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
2962         ikb = kcbot(jl)
2963         zodetr(jl,kk) = 0.
2964         IF (llo2.AND.kk.LE.khmin(jl).AND.kk.GE.kctop0(jl)) THEN
2965           ikt = kctop0(jl)
2966           ikh = khmin(jl)
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
2974           END IF
2975         END IF
2976       ENDDO
2978       RETURN
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
2990       IMPLICIT NONE
2991       REAL X(*)
2992       REAL ZSUM
2993       INTEGER N, IX, JX, JL
2995       JX = 1
2996       ZSUM = 0.0
2997       DO JL = 1, N
2998         ZSUM = ZSUM + X(JX)
2999         JX = JX + IX
3000       enddo
3002       SSUM=ZSUM
3004       RETURN
3005       END FUNCTION SSUM
3007       REAL FUNCTION TLUCUA(TT)
3009 !  Set up lookup tables for cloud ascent calculations.
3011       IMPLICIT NONE
3012       REAL ZCVM3,ZCVM4,TT !,TLUCUA
3014       IF(TT-TMELT.GT.0.) THEN
3015          ZCVM3=C3LES
3016          ZCVM4=C4LES
3017       ELSE
3018          ZCVM3=C3IES
3019          ZCVM4=C4IES
3020       END IF
3021       TLUCUA=C2ES*EXP(ZCVM3*(TT-TMELT)*(1./(TT-ZCVM4)))
3023       RETURN
3024       END FUNCTION TLUCUA
3026       REAL FUNCTION TLUCUB(TT)
3028 !  Set up lookup tables for cloud ascent calculations.
3030       IMPLICIT NONE
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
3036          ZCVM4=C4LES
3037          ZCVM5=Z5ALVCP
3038       ELSE
3039          ZCVM4=C4IES
3040          ZCVM5=Z5ALSCP
3041       END IF
3042       TLUCUB=ZCVM5*(1./(TT-ZCVM4))**2
3044       RETURN
3045       END FUNCTION TLUCUB
3047       REAL FUNCTION TLUCUC(TT)
3049 !  Set up lookup tables for cloud ascent calculations.
3051       IMPLICIT NONE
3052       REAL ZALVDCP,ZALSDCP,TT,ZLDCP !,TLUCUC
3054       ZALVDCP=ALV/CPD
3055       ZALSDCP=ALS/CPD
3056       IF(TT-TMELT.GT.0.) THEN
3057          ZLDCP=ZALVDCP
3058       ELSE
3059          ZLDCP=ZALSDCP
3060       END IF
3061       TLUCUC=ZLDCP
3063       RETURN
3064       END FUNCTION TLUCUC
3067 END MODULE module_cu_tiedtke