PageRenderTime 77ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/phys/module_cu_tiedtke.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 3558 lines | 2424 code | 127 blank | 1007 comment | 44 complexity | 8096b897f66f6a9493ad2bce5123e39f MD5 | raw file
Possible License(s): AGPL-1.0
  1. !-----------------------------------------------------------------------
  2. !
  3. !WRF:MODEL_LAYER:PHYSICS
  4. !
  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
  17. !
  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,CPV
  28. REAL :: API,A,EOMEGA,RD,RV,CPD,RCPD,VTMPC1,VTMPC2, &
  29. RHOH2O,ALV,ALS,ALF,CLW,TMELT,SOLC,STBO,DAYL,YEARL, &
  30. C1ES,C2ES,C3LES,C3IES,C4LES,C4IES,C5LES,C5IES,ZRG
  31. REAL :: ENTRPEN,ENTRSCV,ENTRMID,ENTRDD,CMFCTOP,RHM,RHC, &
  32. CMFCMAX,CMFCMIN,CMFDEPS,RHCDD,CPRCON,CRIRH,ZBUO0, &
  33. fdbk,ZTAU
  34. INTEGER :: orgen,nturben,cutrigger
  35. REAL :: CVDIFTS, CEVAPCU1, CEVAPCU2,ZDNOPRC
  36. PARAMETER(A=6371.22E03, &
  37. ALV=2.5008E6, &
  38. ALS=2.8345E6, &
  39. ALF=ALS-ALV, &
  40. CPD=1005.46, &
  41. CPV=1869.46, & ! CPV in module is 1846.4
  42. RCPD=1.0/CPD, &
  43. RHOH2O=1.0E03, &
  44. TMELT=273.16, &
  45. G=9.806, & ! G=9.806
  46. ZRG=1.0/G, &
  47. RD=287.05, &
  48. RV=461.51, &
  49. C1ES=610.78, &
  50. C2ES=C1ES*RD/RV, &
  51. C3LES=17.269, &
  52. C4LES=35.86, &
  53. C5LES=C3LES*(TMELT-C4LES), &
  54. C3IES=21.875, &
  55. C4IES=7.66, &
  56. C5IES=C3IES*(TMELT-C4IES), &
  57. API=3.141593, & ! API=2.0*ASIN(1.)
  58. VTMPC1=RV/RD-1.0, &
  59. VTMPC2=CPV/CPD-1.0, &
  60. CVDIFTS=1.0, &
  61. CEVAPCU1=1.93E-6*261.0*0.5/G, &
  62. CEVAPCU2=1.E3/(38.3*0.293) )
  63. ! SPECIFY PARAMETERS FOR MASSFLUX-SCHEME
  64. ! --------------------------------------
  65. ! These are tunable parameters
  66. !
  67. ! ENTRPEN: AVERAGE ENTRAINMENT RATE FOR PENETRATIVE CONVECTION
  68. ! -------
  69. !
  70. PARAMETER(ENTRPEN=1.0E-4)
  71. !
  72. ! ENTRSCV: AVERAGE ENTRAINMENT RATE FOR SHALLOW CONVECTION
  73. ! -------
  74. !
  75. PARAMETER(ENTRSCV=1.2E-3)
  76. !
  77. ! ENTRMID: AVERAGE ENTRAINMENT RATE FOR MIDLEVEL CONVECTION
  78. ! -------
  79. !
  80. PARAMETER(ENTRMID=1.0E-4)
  81. !
  82. ! ENTRDD: AVERAGE ENTRAINMENT RATE FOR DOWNDRAFTS
  83. ! ------
  84. !
  85. PARAMETER(ENTRDD =2.0E-4)
  86. !
  87. ! CMFCTOP: RELATIVE CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANCY LEVEL
  88. ! -------
  89. !
  90. PARAMETER(CMFCTOP=0.30)
  91. !
  92. ! CMFCMAX: MAXIMUM MASSFLUX VALUE ALLOWED FOR UPDRAFTS ETC
  93. ! -------
  94. !
  95. PARAMETER(CMFCMAX=1.0)
  96. !
  97. ! CMFCMIN: MINIMUM MASSFLUX VALUE (FOR SAFETY)
  98. ! -------
  99. !
  100. PARAMETER(CMFCMIN=1.E-10)
  101. !
  102. ! CMFDEPS: FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS
  103. ! -------
  104. !
  105. PARAMETER(CMFDEPS=0.30)
  106. !
  107. ! CPRCON: COEFFICIENTS FOR DETERMINING CONVERSION FROM CLOUD WATER
  108. !
  109. PARAMETER(CPRCON = 1.1E-3/G)
  110. !
  111. ! ZDNOPRC: The pressure depth below which no precipitation
  112. !
  113. PARAMETER(ZDNOPRC =1.5E4)
  114. !--------------------
  115. PARAMETER(orgen=1) ! Old organized entrainment rate
  116. ! PARAMETER(orgen=2) ! New organized entrainment rate
  117. PARAMETER(nturben=1) ! old deep turburent entrainment/detrainment rate
  118. ! PARAMETER(nturben=2) ! New deep turburent entrainment/detrainment rate
  119. PARAMETER(cutrigger=1) ! Old trigger function
  120. ! PARAMETER(cutrigger=2) ! New trigger function
  121. !
  122. !--------------------
  123. PARAMETER(RHC=0.80,RHM=1.0,ZBUO0=0.50)
  124. !--------------------
  125. PARAMETER(CRIRH=0.70,fdbk = 1.0,ZTAU = 1800.0)
  126. !--------------------
  127. LOGICAL :: LMFPEN,LMFMID,LMFSCV,LMFDD,LMFDUDV
  128. PARAMETER(LMFPEN=.TRUE.,LMFMID=.TRUE.,LMFSCV=.TRUE.,LMFDD=.TRUE.,LMFDUDV=.TRUE.)
  129. !--------------------
  130. !#################### END of Variables definition##########################
  131. !-----------------------------------------------------------------------
  132. !
  133. CONTAINS
  134. !-----------------------------------------------------------------------
  135. SUBROUTINE CU_TIEDTKE( &
  136. DT,ITIMESTEP,STEPCU &
  137. ,RAINCV,PRATEC,QFX,HFX,ZNU &
  138. ,U3D,V3D,W,T3D,QV3D,QC3D,QI3D,PI3D,RHO3D &
  139. ,QVFTEN,QVPBLTEN &
  140. ,DZ8W,PCPS,P8W,XLAND,CU_ACT_FLAG &
  141. ,CUDT, CURR_SECS, ADAPT_STEP_FLAG &
  142. ,CUDTACTTIME &
  143. ,ids,ide, jds,jde, kds,kde &
  144. ,ims,ime, jms,jme, kms,kme &
  145. ,its,ite, jts,jte, kts,kte &
  146. ,RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN &
  147. ,RUCUTEN, RVCUTEN &
  148. ,F_QV ,F_QC ,F_QR ,F_QI ,F_QS &
  149. )
  150. !-------------------------------------------------------------------
  151. IMPLICIT NONE
  152. !-------------------------------------------------------------------
  153. !-- U3D 3D u-velocity interpolated to theta points (m/s)
  154. !-- V3D 3D v-velocity interpolated to theta points (m/s)
  155. !-- TH3D 3D potential temperature (K)
  156. !-- T3D temperature (K)
  157. !-- QV3D 3D water vapor mixing ratio (Kg/Kg)
  158. !-- QC3D 3D cloud mixing ratio (Kg/Kg)
  159. !-- QI3D 3D ice mixing ratio (Kg/Kg)
  160. !-- RHO3D 3D air density (kg/m^3)
  161. !-- P8w 3D hydrostatic pressure at full levels (Pa)
  162. !-- Pcps 3D hydrostatic pressure at half levels (Pa)
  163. !-- PI3D 3D exner function (dimensionless)
  164. !-- RTHCUTEN Theta tendency due to
  165. ! cumulus scheme precipitation (K/s)
  166. !-- RUCUTEN U wind tendency due to
  167. ! cumulus scheme precipitation (K/s)
  168. !-- RVCUTEN V wind tendency due to
  169. ! cumulus scheme precipitation (K/s)
  170. !-- RQVCUTEN Qv tendency due to
  171. ! cumulus scheme precipitation (kg/kg/s)
  172. !-- RQRCUTEN Qr tendency due to
  173. ! cumulus scheme precipitation (kg/kg/s)
  174. !-- RQCCUTEN Qc tendency due to
  175. ! cumulus scheme precipitation (kg/kg/s)
  176. !-- RQSCUTEN Qs tendency due to
  177. ! cumulus scheme precipitation (kg/kg/s)
  178. !-- RQICUTEN Qi tendency due to
  179. ! cumulus scheme precipitation (kg/kg/s)
  180. !-- RAINC accumulated total cumulus scheme precipitation (mm)
  181. !-- RAINCV cumulus scheme precipitation (mm)
  182. !-- PRATEC precipitiation rate from cumulus scheme (mm/s)
  183. !-- dz8w dz between full levels (m)
  184. !-- QFX upward moisture flux at the surface (kg/m^2/s)
  185. !-- DT time step (s)
  186. !-- ids start index for i in domain
  187. !-- ide end index for i in domain
  188. !-- jds start index for j in domain
  189. !-- jde end index for j in domain
  190. !-- kds start index for k in domain
  191. !-- kde end index for k in domain
  192. !-- ims start index for i in memory
  193. !-- ime end index for i in memory
  194. !-- jms start index for j in memory
  195. !-- jme end index for j in memory
  196. !-- kms start index for k in memory
  197. !-- kme end index for k in memory
  198. !-- its start index for i in tile
  199. !-- ite end index for i in tile
  200. !-- jts start index for j in tile
  201. !-- jte end index for j in tile
  202. !-- kts start index for k in tile
  203. !-- kte end index for k in tile
  204. !-------------------------------------------------------------------
  205. INTEGER, INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
  206. ims,ime, jms,jme, kms,kme, &
  207. its,ite, jts,jte, kts,kte, &
  208. ITIMESTEP, &
  209. STEPCU
  210. REAL, INTENT(IN) :: &
  211. DT
  212. REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN) :: &
  213. XLAND
  214. REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: &
  215. RAINCV, PRATEC
  216. LOGICAL, DIMENSION(IMS:IME,JMS:JME), INTENT(INOUT) :: &
  217. CU_ACT_FLAG
  218. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN) :: &
  219. DZ8W, &
  220. P8w, &
  221. Pcps, &
  222. PI3D, &
  223. QC3D, &
  224. QVFTEN, &
  225. QVPBLTEN, &
  226. QI3D, &
  227. QV3D, &
  228. RHO3D, &
  229. T3D, &
  230. U3D, &
  231. V3D, &
  232. W
  233. !--------------------------- OPTIONAL VARS ----------------------------
  234. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), &
  235. OPTIONAL, INTENT(INOUT) :: &
  236. RQCCUTEN, &
  237. RQICUTEN, &
  238. RQVCUTEN, &
  239. RTHCUTEN, &
  240. RUCUTEN, &
  241. RVCUTEN
  242. !
  243. ! Flags relating to the optional tendency arrays declared above
  244. ! Models that carry the optional tendencies will provdide the
  245. ! optional arguments at compile time; these flags all the model
  246. ! to determine at run-time whether a particular tracer is in
  247. ! use or not.
  248. !
  249. LOGICAL, OPTIONAL :: &
  250. F_QV &
  251. ,F_QC &
  252. ,F_QR &
  253. ,F_QI &
  254. ,F_QS
  255. ! Adaptive time-step variables
  256. REAL, INTENT(IN ) :: CUDT
  257. REAL, INTENT(IN ) :: CURR_SECS
  258. LOGICAL,INTENT(IN ) , OPTIONAL :: ADAPT_STEP_FLAG
  259. REAL, INTENT (INOUT) :: CUDTACTTIME
  260. !--------------------------- LOCAL VARS ------------------------------
  261. REAL, DIMENSION(ims:ime, jms:jme) :: &
  262. QFX, &
  263. HFX
  264. REAL :: &
  265. DELT, &
  266. RDELT
  267. REAL , DIMENSION(its:ite) :: &
  268. RCS, &
  269. RN, &
  270. EVAP, &
  271. heatflux, &
  272. rho2d
  273. INTEGER , DIMENSION(its:ite) :: SLIMSK
  274. REAL , DIMENSION(its:ite, kts:kte+1) :: &
  275. PRSI
  276. REAL , DIMENSION(its:ite, kts:kte) :: &
  277. DEL, &
  278. DOT, &
  279. PHIL, &
  280. PRSL, &
  281. Q1, &
  282. Q2, &
  283. Q3, &
  284. Q1B, &
  285. Q1BL, &
  286. Q11, &
  287. Q12, &
  288. T1, &
  289. U1, &
  290. V1, &
  291. ZI, &
  292. ZL, &
  293. OMG, &
  294. GHT
  295. INTEGER, DIMENSION(its:ite) :: &
  296. KBOT, &
  297. KTOP
  298. INTEGER :: &
  299. I, &
  300. IM, &
  301. J, &
  302. K, &
  303. KM, &
  304. KP, &
  305. KX
  306. LOGICAL :: run_param, doing_adapt_dt , decided
  307. !-------other local variables----
  308. INTEGER,DIMENSION( its:ite ) :: KTYPE
  309. REAL, DIMENSION( kts:kte ) :: sig1 ! half sigma levels
  310. REAL, DIMENSION( kms:kme ) :: ZNU
  311. INTEGER :: zz
  312. !-----------------------------------------------------------------------
  313. !
  314. !
  315. !*** CHECK TO SEE IF THIS IS A CONVECTION TIMESTEP
  316. !
  317. ! Initialization for adaptive time step.
  318. doing_adapt_dt = .FALSE.
  319. IF ( PRESENT(adapt_step_flag) ) THEN
  320. IF ( adapt_step_flag ) THEN
  321. doing_adapt_dt = .TRUE.
  322. IF ( cudtacttime .EQ. 0. ) THEN
  323. cudtacttime = curr_secs + cudt*60.
  324. END IF
  325. END IF
  326. END IF
  327. ! Do we run through this scheme or not?
  328. ! Test 1: If this is the initial model time, then yes.
  329. ! ITIMESTEP=1
  330. ! Test 2: If the user asked for the cumulus to be run every time step, then yes.
  331. ! CUDT=0 or STEPCU=1
  332. ! Test 3: If not adaptive dt, and this is on the requested cumulus frequency, then yes.
  333. ! MOD(ITIMESTEP,STEPCU)=0
  334. ! Test 4: If using adaptive dt and the current time is past the last requested activate cumulus time, then yes.
  335. ! CURR_SECS >= CUDTACTTIME
  336. ! If we do run through the scheme, we set the flag run_param to TRUE and we set the decided flag
  337. ! to TRUE. The decided flag says that one of these tests was able to say "yes", run the scheme.
  338. ! We only proceed to other tests if the previous tests all have left decided as FALSE.
  339. ! If we set run_param to TRUE and this is adaptive time stepping, we set the time to the next
  340. ! cumulus run.
  341. decided = .FALSE.
  342. run_param = .FALSE.
  343. IF ( ( .NOT. decided ) .AND. &
  344. ( itimestep .EQ. 1 ) ) THEN
  345. run_param = .TRUE.
  346. decided = .TRUE.
  347. END IF
  348. IF ( ( .NOT. decided ) .AND. &
  349. ( ( cudt .EQ. 0. ) .OR. ( stepcu .EQ. 1 ) ) ) THEN
  350. run_param = .TRUE.
  351. decided = .TRUE.
  352. END IF
  353. IF ( ( .NOT. decided ) .AND. &
  354. ( .NOT. doing_adapt_dt ) .AND. &
  355. ( MOD(itimestep,stepcu) .EQ. 0 ) ) THEN
  356. run_param = .TRUE.
  357. decided = .TRUE.
  358. END IF
  359. IF ( ( .NOT. decided ) .AND. &
  360. ( doing_adapt_dt ) .AND. &
  361. ( curr_secs .GE. cudtacttime ) ) THEN
  362. run_param = .TRUE.
  363. decided = .TRUE.
  364. cudtacttime = curr_secs + cudt*60
  365. END IF
  366. !-----------------------------------------------------------------------
  367. IF(run_param) THEN
  368. DO J=JTS,JTE
  369. DO I=ITS,ITE
  370. CU_ACT_FLAG(I,J)=.TRUE.
  371. ENDDO
  372. ENDDO
  373. IM=ITE-ITS+1
  374. KX=KTE-KTS+1
  375. DELT=DT*STEPCU
  376. RDELT=1./DELT
  377. !------------- J LOOP (OUTER) --------------------------------------------------
  378. DO J=jts,jte
  379. ! --------------- compute zi and zl -----------------------------------------
  380. DO i=its,ite
  381. ZI(I,KTS)=0.0
  382. ENDDO
  383. DO k=kts+1,kte
  384. KM=k-1
  385. DO i=its,ite
  386. ZI(I,K)=ZI(I,KM)+dz8w(i,km,j)
  387. ENDDO
  388. ENDDO
  389. DO k=kts+1,kte
  390. KM=k-1
  391. DO i=its,ite
  392. ZL(I,KM)=(ZI(I,K)+ZI(I,KM))*0.5
  393. ENDDO
  394. ENDDO
  395. DO i=its,ite
  396. ZL(I,KTE)=2.*ZI(I,KTE)-ZL(I,KTE-1)
  397. ENDDO
  398. ! --------------- end compute zi and zl -------------------------------------
  399. DO i=its,ite
  400. SLIMSK(i)=int(ABS(XLAND(i,j)-2.))
  401. ENDDO
  402. DO k=kts,kte
  403. kp=k+1
  404. DO i=its,ite
  405. DOT(i,k)=-0.5*g*rho3d(i,k,j)*(w(i,k,j)+w(i,kp,j))
  406. ENDDO
  407. ENDDO
  408. DO k=kts,kte
  409. zz = kte+1-k
  410. DO i=its,ite
  411. U1(i,zz)=U3D(i,k,j)
  412. V1(i,zz)=V3D(i,k,j)
  413. T1(i,zz)=T3D(i,k,j)
  414. Q1(i,zz)= QV3D(i,k,j)
  415. if(itimestep == 1) then
  416. Q1B(i,zz)=0.
  417. Q1BL(i,zz)=0.
  418. else
  419. Q1B(i,zz)=QVFTEN(i,k,j)
  420. Q1BL(i,zz)=QVPBLTEN(i,k,j)
  421. endif
  422. Q2(i,zz)=QC3D(i,k,j)
  423. Q3(i,zz)=QI3D(i,k,j)
  424. OMG(i,zz)=DOT(i,k)
  425. GHT(i,zz)=ZL(i,k)
  426. PRSL(i,zz) = Pcps(i,k,j)
  427. ENDDO
  428. ENDDO
  429. DO k=kts,kte+1
  430. zz = kte+2-k
  431. DO i=its,ite
  432. PRSI(i,zz) = P8w(i,k,j)
  433. ENDDO
  434. ENDDO
  435. DO k=kts,kte
  436. zz = kte+1-k
  437. sig1(zz) = ZNU(k)
  438. ENDDO
  439. !###############before call TIECNV, we need EVAP########################
  440. ! EVAP is the vapor flux at the surface
  441. !########################################################################
  442. !
  443. DO i=its,ite
  444. EVAP(i) = QFX(i,j)
  445. heatflux(i)=HFX(i,j)
  446. rho2d(i) = rho3d(i,1,j)
  447. ENDDO
  448. !########################################################################
  449. CALL TIECNV(U1,V1,T1,Q1,Q2,Q3,Q1B,Q1BL,GHT,OMG,PRSL,PRSI,EVAP,heatflux,rho2d, &
  450. 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
  455. DO K=KTS,KTE
  456. zz = kte+1-k
  457. DO I=ITS,ITE
  458. RTHCUTEN(I,K,J)=(T1(I,zz)-T3D(I,K,J))/PI3D(I,K,J)*RDELT
  459. RQVCUTEN(I,K,J)=(Q1(I,zz)-QV3D(I,K,J))*RDELT
  460. RUCUTEN(I,K,J) =(U1(I,zz)-U3D(I,K,J))*RDELT
  461. RVCUTEN(I,K,J) =(V1(I,zz)-V3D(I,K,J))*RDELT
  462. ENDDO
  463. ENDDO
  464. IF(PRESENT(RQCCUTEN))THEN
  465. IF ( F_QC ) THEN
  466. DO K=KTS,KTE
  467. zz = kte+1-k
  468. DO I=ITS,ITE
  469. RQCCUTEN(I,K,J)=(Q2(I,zz)-QC3D(I,K,J))*RDELT
  470. ENDDO
  471. ENDDO
  472. ENDIF
  473. ENDIF
  474. IF(PRESENT(RQICUTEN))THEN
  475. IF ( F_QI ) THEN
  476. DO K=KTS,KTE
  477. zz = kte+1-k
  478. DO I=ITS,ITE
  479. RQICUTEN(I,K,J)=(Q3(I,zz)-QI3D(I,K,J))*RDELT
  480. ENDDO
  481. ENDDO
  482. ENDIF
  483. ENDIF
  484. ENDDO
  485. ENDIF
  486. END SUBROUTINE CU_TIEDTKE
  487. !====================================================================
  488. SUBROUTINE tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
  489. RUCUTEN,RVCUTEN, &
  490. RESTART,P_QC,P_QI,P_FIRST_SCALAR, &
  491. allowed_to_read, &
  492. ids, ide, jds, jde, kds, kde, &
  493. ims, ime, jms, jme, kms, kme, &
  494. its, ite, jts, jte, kts, kte)
  495. !--------------------------------------------------------------------
  496. IMPLICIT NONE
  497. !--------------------------------------------------------------------
  498. LOGICAL , INTENT(IN) :: allowed_to_read,restart
  499. INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
  500. ims, ime, jms, jme, kms, kme, &
  501. its, ite, jts, jte, kts, kte
  502. INTEGER , INTENT(IN) :: P_FIRST_SCALAR, P_QI, P_QC
  503. REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
  504. RTHCUTEN, &
  505. RQVCUTEN, &
  506. RQCCUTEN, &
  507. RQICUTEN, &
  508. RUCUTEN,RVCUTEN
  509. INTEGER :: i, j, k, itf, jtf, ktf
  510. jtf=min0(jte,jde-1)
  511. ktf=min0(kte,kde-1)
  512. itf=min0(ite,ide-1)
  513. IF(.not.restart)THEN
  514. DO j=jts,jtf
  515. DO k=kts,ktf
  516. DO i=its,itf
  517. RTHCUTEN(i,k,j)=0.
  518. RQVCUTEN(i,k,j)=0.
  519. RUCUTEN(i,k,j)=0.
  520. RVCUTEN(i,k,j)=0.
  521. ENDDO
  522. ENDDO
  523. ENDDO
  524. IF (P_QC .ge. P_FIRST_SCALAR) THEN
  525. DO j=jts,jtf
  526. DO k=kts,ktf
  527. DO i=its,itf
  528. RQCCUTEN(i,k,j)=0.
  529. ENDDO
  530. ENDDO
  531. ENDDO
  532. ENDIF
  533. IF (P_QI .ge. P_FIRST_SCALAR) THEN
  534. DO j=jts,jtf
  535. DO k=kts,ktf
  536. DO i=its,itf
  537. RQICUTEN(i,k,j)=0.
  538. ENDDO
  539. ENDDO
  540. ENDDO
  541. ENDIF
  542. ENDIF
  543. END SUBROUTINE tiedtkeinit
  544. ! ------------------------------------------------------------------------
  545. !------------This is the combined version for tiedtke---------------
  546. !----------------------------------------------------------------
  547. ! In this module only the mass flux convection scheme of the ECMWF is included
  548. !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  549. !#############################################################
  550. !
  551. ! LEVEL 1 SUBROUTINEs
  552. !
  553. !#############################################################
  554. !********************************************************
  555. ! subroutine TIECNV
  556. !********************************************************
  557. SUBROUTINE TIECNV(pu,pv,pt,pqv,pqc,pqi,pqvf,pqvbl,poz,pomg, &
  558. pap,paph,evap,hfx,rho,zprecc,lndj,KTYPE,lq,km,km1,sig1,dt)
  559. !-----------------------------------------------------------------
  560. ! This is the interface between the meso-scale model and the mass
  561. ! flux convection module
  562. !-----------------------------------------------------------------
  563. implicit none
  564. real pu(lq,km),pv(lq,km),pt(lq,km),pqv(lq,km),pqvf(lq,km)
  565. real poz(lq,km),pomg(lq,km),evap(lq),zprecc(lq),pqvbl(lq,km)
  566. real PHHFL(lq),RHO(lq),hfx(lq)
  567. REAL PUM1(lq,km), PVM1(lq,km), &
  568. PTTE(lq,km), PQTE(lq,km), PVOM(lq,km), PVOL(lq,km), &
  569. PVERV(lq,km), PGEO(lq,km), PAP(lq,km), PAPH(lq,km1)
  570. REAL PQHFL(lq), ZQQ(lq,km), PAPRC(lq), PAPRS(lq), &
  571. PRSFC(lq), PSSFC(lq), PAPRSM(lq), PCTE(lq,km)
  572. REAL ZTP1(lq,km), ZQP1(lq,km), ZTU(lq,km), ZQU(lq,km), &
  573. ZLU(lq,km), ZLUDE(lq,km), ZMFU(lq,km), ZMFD(lq,km), &
  574. ZQSAT(lq,km), pqc(lq,km), pqi(lq,km), ZRAIN(lq)
  575. REAL sig(km1),sig1(km)
  576. INTEGER ICBOT(lq), ICTOP(lq), KTYPE(lq), lndj(lq)
  577. REAL dt
  578. LOGICAL LOCUM(lq)
  579. real PSHEAT,PSRAIN,PSEVAP,PSMELT,PSDISS,TT
  580. real ZTMST,ZTPP1,fliq,fice,ZTC,ZALF
  581. integer i,j,k,lq,lp,km,km1
  582. ! real TLUCUA
  583. ! external TLUCUA
  584. ZTMST=dt
  585. ! Masv flux diagnostics.
  586. PSHEAT=0.0
  587. PSRAIN=0.0
  588. PSEVAP=0.0
  589. PSMELT=0.0
  590. PSDISS=0.0
  591. DO 8 j=1,lq
  592. ZRAIN(j)=0.0
  593. LOCUM(j)=.FALSE.
  594. PRSFC(j)=0.0
  595. PSSFC(j)=0.0
  596. PAPRC(j)=0.0
  597. PAPRS(j)=0.0
  598. PAPRSM(j)=0.0
  599. PQHFL(j)=evap(j)
  600. PHHFL(j)=hfx(j)
  601. 8 CONTINUE
  602. ! CONVERT MODEL VARIABLES FOR MFLUX SCHEME
  603. DO 10 k=1,km
  604. DO 10 j=1,lq
  605. PTTE(j,k)=0.0
  606. PCTE(j,k)=0.0
  607. PVOM(j,k)=0.0
  608. PVOL(j,k)=0.0
  609. ZTP1(j,k)=pt(j,k)
  610. ZQP1(j,k)=pqv(j,k)/(1.0+pqv(j,k))
  611. PUM1(j,k)=pu(j,k)
  612. PVM1(j,k)=pv(j,k)
  613. PVERV(j,k)=pomg(j,k)
  614. PGEO(j,k)=G*poz(j,k)
  615. TT=ZTP1(j,k)
  616. ZQSAT(j,k)=TLUCUA(TT)/PAP(j,k)
  617. ZQSAT(j,k)=MIN(0.5,ZQSAT(j,k))
  618. ZQSAT(j,k)=ZQSAT(j,k)/(1.-VTMPC1*ZQSAT(j,k))
  619. PQTE(j,k)=pqvf(j,k)+pqvbl(j,k)
  620. ZQQ(j,k)=PQTE(j,k)
  621. 10 CONTINUE
  622. !
  623. !-----------------------------------------------------------------------
  624. !* 2. CALL 'CUMASTR'(MASTER-ROUTINE FOR CUMULUS PARAMETERIZATION)
  625. !
  626. CALL CUMASTR_NEW &
  627. (lq, km, km1, km-1, ZTP1, &
  628. ZQP1, PUM1, PVM1, PVERV, ZQSAT, &
  629. PQHFL, ZTMST, PAP, PAPH, PGEO, &
  630. PTTE, PQTE, PVOM, PVOL, PRSFC, &
  631. PSSFC, PAPRC, PAPRSM, PAPRS, LOCUM, &
  632. KTYPE, ICBOT, ICTOP, ZTU, ZQU, &
  633. ZLU, ZLUDE, ZMFU, ZMFD, ZRAIN, &
  634. PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT, &
  635. PCTE, PHHFL, RHO, sig1, lndj)
  636. !
  637. ! TO INCLUDE THE CLOUD WATER AND CLOUD ICE DETRAINED FROM CONVECTION
  638. !
  639. IF(fdbk.ge.1.0e-9) THEN
  640. DO 20 K=1,km
  641. DO 20 j=1,lq
  642. If(PCTE(j,k).GT.0.0) then
  643. ZTPP1=pt(j,k)+PTTE(j,k)*ZTMST
  644. if(ZTPP1.ge.t000) then
  645. fliq=1.0
  646. ZALF=0.0
  647. else if(ZTPP1.le.hgfr) then
  648. fliq=0.0
  649. ZALF=ALF
  650. else
  651. ZTC=ZTPP1-t000
  652. fliq=0.0059+0.9941*exp(-0.003102*ZTC*ZTC)
  653. ZALF=ALF
  654. endif
  655. fice=1.0-fliq
  656. pqc(j,k)=pqc(j,k)+fliq*PCTE(j,k)*ZTMST
  657. pqi(j,k)=pqi(j,k)+fice*PCTE(j,k)*ZTMST
  658. PTTE(j,k)=PTTE(j,k)-ZALF*RCPD*fliq*PCTE(j,k)
  659. Endif
  660. 20 CONTINUE
  661. ENDIF
  662. !
  663. DO 75 k=1,km
  664. DO 75 j=1,lq
  665. pt(j,k)=ZTP1(j,k)+PTTE(j,k)*ZTMST
  666. ZQP1(j,k)=ZQP1(j,k)+(PQTE(j,k)-ZQQ(j,k))*ZTMST
  667. pqv(j,k)=ZQP1(j,k)/(1.0-ZQP1(j,k))
  668. 75 CONTINUE
  669. DO 85 j=1,lq
  670. zprecc(j)=amax1(0.0,(PRSFC(j)+PSSFC(j))*ZTMST)
  671. 85 CONTINUE
  672. IF (LMFDUDV) THEN
  673. DO 100 k=1,km
  674. DO 100 j=1,lq
  675. pu(j,k)=pu(j,k)+PVOM(j,k)*ZTMST
  676. pv(j,k)=pv(j,k)+PVOL(j,k)*ZTMST
  677. 100 CONTINUE
  678. ENDIF
  679. !
  680. RETURN
  681. END SUBROUTINE TIECNV
  682. !#############################################################
  683. !
  684. ! LEVEL 2 SUBROUTINEs
  685. !
  686. !#############################################################
  687. !***********************************************************
  688. ! SUBROUTINE CUMASTR_NEW
  689. !***********************************************************
  690. SUBROUTINE CUMASTR_NEW &
  691. (KLON, KLEV, KLEVP1, KLEVM1, PTEN, &
  692. PQEN, PUEN, PVEN, PVERV, PQSEN, &
  693. PQHFL, ZTMST, PAP, PAPH, PGEO, &
  694. PTTE, PQTE, PVOM, PVOL, PRSFC, &
  695. PSSFC, PAPRC, PAPRSM, PAPRS, LDCUM, &
  696. KTYPE, KCBOT, KCTOP, PTU, PQU, &
  697. PLU, PLUDE, PMFU, PMFD, PRAIN, &
  698. PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT,&
  699. PCTE, PHHFL, RHO, sig1, lndj)
  700. !
  701. !***CUMASTR* MASTER ROUTINE FOR CUMULUS MASSFLUX-SCHEME
  702. ! M.TIEDTKE E.C.M.W.F. 1986/1987/1989
  703. !***PURPOSE
  704. ! -------
  705. ! THIS ROUTINE COMPUTES THE PHYSICAL TENDENCIES OF THE
  706. ! PROGNOSTIC VARIABLES T,Q,U AND V DUE TO CONVECTIVE PROCESSES.
  707. ! PROCESSES CONSIDERED ARE: CONVECTIVE FLUXES, FORMATION OF
  708. ! PRECIPITATION, EVAPORATION OF FALLING RAIN BELOW CLOUD BASE,
  709. ! SATURATED CUMULUS DOWNDRAFTS.
  710. !***INTERFACE.
  711. ! ----------
  712. ! *CUMASTR* IS CALLED FROM *MSSFLX*
  713. ! THE ROUTINE TAKES ITS INPUT FROM THE LONG-TERM STORAGE
  714. ! T,Q,U,V,PHI AND P AND MOISTURE TENDENCIES.
  715. ! IT RETURNS ITS OUTPUT TO THE SAME SPACE
  716. ! 1.MODIFIED TENDENCIES OF MODEL VARIABLES
  717. ! 2.RATES OF CONVECTIVE PRECIPITATION
  718. ! (USED IN SUBROUTINE SURF)
  719. ! 3.CLOUD BASE, CLOUD TOP AND PRECIP FOR RADIATION
  720. ! (USED IN SUBROUTINE CLOUD)
  721. !***METHOD
  722. ! ------
  723. ! PARAMETERIZATION IS DONE USING A MASSFLUX-SCHEME.
  724. ! (1) DEFINE CONSTANTS AND PARAMETERS
  725. ! (2) SPECIFY VALUES (T,Q,QS...) AT HALF LEVELS AND
  726. ! INITIALIZE UPDRAFT- AND DOWNDRAFT-VALUES IN 'CUINI'
  727. ! (3) CALCULATE CLOUD BASE IN 'CUBASE'
  728. ! AND SPECIFY CLOUD BASE MASSFLUX FROM PBL MOISTURE BUDGET
  729. ! (4) DO CLOUD ASCENT IN 'CUASC' IN ABSENCE OF DOWNDRAFTS
  730. ! (5) DO DOWNDRAFT CALCULATIONS:
  731. ! (A) DETERMINE VALUES AT LFS IN 'CUDLFS'
  732. ! (B) DETERMINE MOIST DESCENT IN 'CUDDRAF'
  733. ! (C) RECALCULATE CLOUD BASE MASSFLUX CONSIDERING THE
  734. ! EFFECT OF CU-DOWNDRAFTS
  735. ! (6) DO FINAL CLOUD ASCENT IN 'CUASC'
  736. ! (7) DO FINAL ADJUSMENTS TO CONVECTIVE FLUXES IN 'CUFLX',
  737. ! DO EVAPORATION IN SUBCLOUD LAYER
  738. ! (8) CALCULATE INCREMENTS OF T AND Q IN 'CUDTDQ'
  739. ! (9) CALCULATE INCREMENTS OF U AND V IN 'CUDUDV'
  740. !***EXTERNALS.
  741. ! ----------
  742. ! CUINI: INITIALIZES VALUES AT VERTICAL GRID USED IN CU-PARAMETR.
  743. ! CUBASE: CLOUD BASE CALCULATION FOR PENETR.AND SHALLOW CONVECTION
  744. ! CUASC: CLOUD ASCENT FOR ENTRAINING PLUME
  745. ! CUDLFS: DETERMINES VALUES AT LFS FOR DOWNDRAFTS
  746. ! CUDDRAF:DOES MOIST DESCENT FOR CUMULUS DOWNDRAFTS
  747. ! CUFLX: FINAL ADJUSTMENTS TO CONVECTIVE FLUXES (ALSO IN PBL)
  748. ! CUDQDT: UPDATES TENDENCIES FOR T AND Q
  749. ! CUDUDV: UPDATES TENDENCIES FOR U AND V
  750. !***SWITCHES.
  751. ! --------
  752. ! LMFPEN=.T. PENETRATIVE CONVECTION IS SWITCHED ON
  753. ! LMFSCV=.T. SHALLOW CONVECTION IS SWITCHED ON
  754. ! LMFMID=.T. MIDLEVEL CONVECTION IS SWITCHED ON
  755. ! LMFDD=.T. CUMULUS DOWNDRAFTS SWITCHED ON
  756. ! LMFDUDV=.T. CUMULUS FRICTION SWITCHED ON
  757. !***
  758. ! MODEL PARAMETERS (DEFINED IN SUBROUTINE CUPARAM)
  759. ! ------------------------------------------------
  760. ! ENTRPEN ENTRAINMENT RATE FOR PENETRATIVE CONVECTION
  761. ! ENTRSCV ENTRAINMENT RATE FOR SHALLOW CONVECTION
  762. ! ENTRMID ENTRAINMENT RATE FOR MIDLEVEL CONVECTION
  763. ! ENTRDD ENTRAINMENT RATE FOR CUMULUS DOWNDRAFTS
  764. ! CMFCTOP RELATIVE CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANCY
  765. ! LEVEL
  766. ! CMFCMAX MAXIMUM MASSFLUX VALUE ALLOWED FOR
  767. ! CMFCMIN MINIMUM MASSFLUX VALUE (FOR SAFETY)
  768. ! CMFDEPS FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS
  769. ! CPRCON COEFFICIENT FOR CONVERSION FROM CLOUD WATER TO RAIN
  770. !***REFERENCE.
  771. ! ----------
  772. ! PAPER ON MASSFLUX SCHEME (TIEDTKE,1989)
  773. !-----------------------------------------------------------------
  774. !-------------------------------------------------------------------
  775. IMPLICIT NONE
  776. !-------------------------------------------------------------------
  777. INTEGER KLON, KLEV, KLEVP1
  778. INTEGER KLEVM1
  779. REAL ZTMST
  780. REAL PSRAIN, PSEVAP, PSHEAT, PSDISS, PSMELT, ZCONS2
  781. INTEGER JK,JL,IKB
  782. REAL ZQUMQE, ZDQMIN, ZMFMAX, ZALVDCP, ZQALV
  783. REAL ZHSAT, ZGAM, ZZZ, ZHHAT, ZBI, ZRO, ZDZ, ZDHDZ, ZDEPTH
  784. REAL ZFAC, ZRH, ZPBMPT, DEPT, ZHT, ZEPS
  785. INTEGER ICUM, ITOPM2
  786. REAL PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
  787. PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
  788. PTTE(KLON,KLEV), PQTE(KLON,KLEV), &
  789. PVOM(KLON,KLEV), PVOL(KLON,KLEV), &
  790. PQSEN(KLON,KLEV), PGEO(KLON,KLEV), &
  791. PAP(KLON,KLEV), PAPH(KLON,KLEVP1),&
  792. PVERV(KLON,KLEV), PQHFL(KLON), &
  793. PHHFL(KLON), RHO(KLON)
  794. REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
  795. PLU(KLON,KLEV), PLUDE(KLON,KLEV), &
  796. PMFU(KLON,KLEV), PMFD(KLON,KLEV), &
  797. PAPRC(KLON), PAPRS(KLON), &
  798. PAPRSM(KLON), PRAIN(KLON), &
  799. PRSFC(KLON), PSSFC(KLON)
  800. REAL ZTENH(KLON,KLEV), ZQENH(KLON,KLEV),&
  801. ZGEOH(KLON,KLEV), ZQSENH(KLON,KLEV),&
  802. ZTD(KLON,KLEV), ZQD(KLON,KLEV), &
  803. ZMFUS(KLON,KLEV), ZMFDS(KLON,KLEV), &
  804. ZMFUQ(KLON,KLEV), ZMFDQ(KLON,KLEV), &
  805. ZDMFUP(KLON,KLEV), ZDMFDP(KLON,KLEV),&
  806. ZMFUL(KLON,KLEV), ZRFL(KLON), &
  807. ZUU(KLON,KLEV), ZVU(KLON,KLEV), &
  808. ZUD(KLON,KLEV), ZVD(KLON,KLEV)
  809. REAL ZENTR(KLON), ZHCBASE(KLON), &
  810. ZMFUB(KLON), ZMFUB1(KLON), &
  811. ZDQPBL(KLON), ZDQCV(KLON)
  812. REAL ZSFL(KLON), ZDPMEL(KLON,KLEV), &
  813. PCTE(KLON,KLEV), ZCAPE(KLON), &
  814. ZHEAT(KLON), ZHHATT(KLON,KLEV), &
  815. ZHMIN(KLON), ZRELH(KLON)
  816. REAL sig1(KLEV)
  817. INTEGER ILAB(KLON,KLEV), IDTOP(KLON), &
  818. ICTOP0(KLON), ILWMIN(KLON)
  819. INTEGER KCBOT(KLON), KCTOP(KLON), &
  820. KTYPE(KLON), IHMIN(KLON), &
  821. KTOP0, lndj(KLON)
  822. LOGICAL LDCUM(KLON)
  823. LOGICAL LODDRAF(KLON), LLO1
  824. REAL CRIRH1
  825. !-------------------------------------------
  826. ! 1. SPECIFY CONSTANTS AND PARAMETERS
  827. !-------------------------------------------
  828. 100 CONTINUE
  829. ZCONS2=1./(G*ZTMST)
  830. !--------------------------------------------------------------
  831. !* 2. INITIALIZE VALUES AT VERTICAL GRID POINTS IN 'CUINI'
  832. !--------------------------------------------------------------
  833. 200 CONTINUE
  834. CALL CUINI &
  835. (KLON, KLEV, KLEVP1, KLEVM1, PTEN, &
  836. PQEN, PQSEN, PUEN, PVEN, PVERV, &
  837. PGEO, PAPH, ZGEOH, ZTENH, ZQENH, &
  838. ZQSENH, ILWMIN, PTU, PQU, ZTD, &
  839. ZQD, ZUU, ZVU, ZUD, ZVD, &
  840. PMFU, PMFD, ZMFUS, ZMFDS, ZMFUQ, &
  841. ZMFDQ, ZDMFUP, ZDMFDP, ZDPMEL, PLU, &
  842. PLUDE, ILAB)
  843. !----------------------------------
  844. !* 3.0 CLOUD BASE CALCULATIONS
  845. !----------------------------------
  846. 300 CONTINUE
  847. !* (A) DETERMINE CLOUD BASE VALUES IN 'CUBASE'
  848. ! -------------------------------------------
  849. CALL CUBASE &
  850. (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
  851. ZQENH, ZGEOH, PAPH, PTU, PQU, &
  852. PLU, PUEN, PVEN, ZUU, ZVU, &
  853. LDCUM, KCBOT, ILAB)
  854. !* (B) DETERMINE TOTAL MOISTURE CONVERGENCE AND
  855. !* THEN DECIDE ON TYPE OF CUMULUS CONVECTION
  856. ! -----------------------------------------
  857. JK=1
  858. DO 310 JL=1,KLON
  859. ZDQCV(JL) =PQTE(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
  860. ZDQPBL(JL)=0.0
  861. IDTOP(JL)=0
  862. 310 CONTINUE
  863. DO 320 JK=2,KLEV
  864. DO 315 JL=1,KLON
  865. ZDQCV(JL)=ZDQCV(JL)+PQTE(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
  866. IF(JK.GE.KCBOT(JL)) ZDQPBL(JL)=ZDQPBL(JL)+PQTE(JL,JK) &
  867. *(PAPH(JL,JK+1)-PAPH(JL,JK))
  868. 315 CONTINUE
  869. 320 CONTINUE
  870. if(cutrigger .eq. 1) then
  871. DO JL=1,KLON
  872. KTYPE(JL)=0
  873. IF(ZDQCV(JL).GT.MAX(0.,1.1*PQHFL(JL)*G)) THEN
  874. KTYPE(JL)=1
  875. ELSE
  876. KTYPE(JL)=2
  877. ENDIF
  878. END DO
  879. else if(cutrigger .eq. 2) then
  880. CALL CUTYPE &
  881. ( KLON, KLEV, KLEVP1, KLEVM1, &
  882. ZTENH, ZQENH, ZQSENH, ZGEOH, PAPH, &
  883. RHO, PHHFL, PQHFL, KTYPE, lndj )
  884. end if
  885. !* (C) DETERMINE MOISTURE SUPPLY FOR BOUNDARY LAYER
  886. !* AND DETERMINE CLOUD BASE MASSFLUX IGNORING
  887. !* THE EFFECTS OF DOWNDRAFTS AT THIS STAGE
  888. ! ------------------------------------------
  889. ! do jl=1,klon
  890. ! if(ktype(jl) .ge. 1 ) then
  891. ! write(6,*)"ktype=", KTYPE(jl)
  892. ! end if
  893. ! end do
  894. DO 340 JL=1,KLON
  895. IKB=KCBOT(JL)
  896. ZQUMQE=PQU(JL,IKB)+PLU(JL,IKB)-ZQENH(JL,IKB)
  897. ZDQMIN=MAX(0.01*ZQENH(JL,IKB),1.E-10)
  898. IF(ZDQPBL(JL).GT.0..AND.ZQUMQE.GT.ZDQMIN.AND.LDCUM(JL)) THEN
  899. ZMFUB(JL)=ZDQPBL(JL)/(G*MAX(ZQUMQE,ZDQMIN))
  900. ELSE
  901. ZMFUB(JL)=0.01
  902. LDCUM(JL)=.FALSE.
  903. ENDIF
  904. ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
  905. ZMFUB(JL)=MIN(ZMFUB(JL),ZMFMAX)
  906. !------------------------------------------------------
  907. !* 4.0 DETERMINE CLOUD ASCENT FOR ENTRAINING PLUME
  908. !------------------------------------------------------
  909. 400 CONTINUE
  910. !* (A) ESTIMATE CLOUD HEIGHT FOR ENTRAINMENT/DETRAINMENT
  911. !* CALCULATIONS IN CUASC (MAX.POSSIBLE CLOUD HEIGHT
  912. !* FOR NON-ENTRAINING PLUME, FOLLOWING A.-S.,1974)
  913. ! -------------------------------------------------------------
  914. IKB=KCBOT(JL)
  915. ZHCBASE(JL)=CPD*PTU(JL,IKB)+ZGEOH(JL,IKB)+ALV*PQU(JL,IKB)
  916. ICTOP0(JL)=KCBOT(JL)-1
  917. 340 CONTINUE
  918. ZALVDCP=ALV/CPD
  919. ZQALV=1./ALV
  920. DO 420 JK=KLEVM1,3,-1
  921. DO 420 JL=1,KLON
  922. ZHSAT=CPD*ZTENH(JL,JK)+ZGEOH(JL,JK)+ALV*ZQSENH(JL,JK)
  923. ZGAM=C5LES*ZALVDCP*ZQSENH(JL,JK)/ &
  924. ((1.-VTMPC1*ZQSENH(JL,JK))*(ZTENH(JL,JK)-C4LES)**2)
  925. ZZZ=CPD*ZTENH(JL,JK)*0.608
  926. ZHHAT=ZHSAT-(ZZZ+ZGAM*ZZZ)/(1.+ZGAM*ZZZ*ZQALV)* &
  927. MAX(ZQSENH(JL,JK)-ZQENH(JL,JK),0.)
  928. ZHHATT(JL,JK)=ZHHAT
  929. IF(JK.LT.ICTOP0(JL).AND.ZHCBASE(JL).GT.ZHHAT) ICTOP0(JL)=JK
  930. 420 CONTINUE
  931. DO 430 JL=1,KLON
  932. JK=KCBOT(JL)
  933. ZHSAT=CPD*ZTENH(JL,JK)+ZGEOH(JL,JK)+ALV*ZQSENH(JL,JK)
  934. ZGAM=C5LES*ZALVDCP*ZQSENH(JL,JK)/ &
  935. ((1.-VTMPC1*ZQSENH(JL,JK))*(ZTENH(JL,JK)-C4LES)**2)
  936. ZZZ=CPD*ZTENH(JL,JK)*0.608
  937. ZHHAT=ZHSAT-(ZZZ+ZGAM*ZZZ)/(1.+ZGAM*ZZZ*ZQALV)* &
  938. MAX(ZQSENH(JL,JK)-ZQENH(JL,JK),0.)
  939. ZHHATT(JL,JK)=ZHHAT
  940. 430 CONTINUE
  941. !
  942. ! Find lowest possible org. detrainment level
  943. !
  944. DO 440 JL = 1, KLON
  945. ZHMIN(JL) = 0.
  946. IF( LDCUM(JL).AND.KTYPE(JL).EQ.1 ) THEN
  947. IHMIN(JL) = KCBOT(JL)
  948. ELSE
  949. IHMIN(JL) = -1
  950. END IF
  951. 440 CONTINUE
  952. !
  953. ZBI = 1./(25.*G)
  954. DO 450 JK = KLEV, 1, -1
  955. DO 450 JL = 1, KLON
  956. LLO1 = LDCUM(JL).AND.KTYPE(JL).EQ.1.AND.IHMIN(JL).EQ.KCBOT(JL)
  957. IF (LLO1.AND.JK.LT.KCBOT(JL).AND.JK.GE.ICTOP0(JL)) THEN
  958. IKB = KCBOT(JL)
  959. ZRO = RD*ZTENH(JL,JK)/(G*PAPH(JL,JK))
  960. ZDZ = (PAPH(JL,JK)-PAPH(JL,JK-1))*ZRO
  961. ZDHDZ=(CPD*(PTEN(JL,JK-1)-PTEN(JL,JK))+ALV*(PQEN(JL,JK-1)- &
  962. PQEN(JL,JK))+(PGEO(JL,JK-1)-PGEO(JL,JK)))*G/(PGEO(JL, &
  963. JK-1)-PGEO(JL,JK))
  964. ZDEPTH = ZGEOH(JL,JK) - ZGEOH(JL,IKB)
  965. ZFAC = SQRT(1.+ZDEPTH*ZBI)
  966. ZHMIN(JL) = ZHMIN(JL) + ZDHDZ*ZFAC*ZDZ
  967. ZRH = -ALV*(ZQSENH(JL,JK)-ZQENH(JL,JK))*ZFAC
  968. IF (ZHMIN(JL).GT.ZRH) IHMIN(JL) = JK
  969. END IF
  970. 450 CONTINUE
  971. DO 460 JL = 1, KLON
  972. IF (LDCUM(JL).AND.KTYPE(JL).EQ.1) THEN
  973. IF (IHMIN(JL).LT.ICTOP0(JL)) IHMIN(JL) = ICTOP0(JL)
  974. END IF
  975. IF(KTYPE(JL).EQ.1) THEN
  976. ZENTR(JL)=ENTRPEN
  977. ELSE
  978. ZENTR(JL)=ENTRSCV
  979. ENDIF
  980. if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.05
  981. 460 CONTINUE
  982. !* (B) DO ASCENT IN 'CUASC'IN ABSENCE OF DOWNDRAFTS
  983. !----------------------------------------------------------
  984. CALL CUASC_NEW &
  985. (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
  986. ZQENH, PUEN, PVEN, PTEN, PQEN, &
  987. PQSEN, PGEO, ZGEOH, PAP, PAPH, &
  988. PQTE, PVERV, ILWMIN, LDCUM, ZHCBASE, &
  989. KTYPE, ILAB, PTU, PQU, PLU, &
  990. ZUU, ZVU, PMFU, ZMFUB, ZENTR, &
  991. ZMFUS, ZMFUQ, ZMFUL, PLUDE, ZDMFUP, &
  992. KCBOT, KCTOP, ICTOP0, ICUM, ZTMST, &
  993. IHMIN, ZHHATT, ZQSENH)
  994. IF(ICUM.EQ.0) GO TO 1000
  995. !* (C) CHECK CLOUD DEPTH AND CHANGE ENTRAINMENT RATE ACCORDINGLY
  996. ! CALCULATE PRECIPITATION RATE (FOR DOWNDRAFT CALCULATION)
  997. !------------------------------------------------------------------
  998. DO 480 JL=1,KLON
  999. ZPBMPT=PAPH(JL,KCBOT(JL))-PAPH(JL,KCTOP(JL))
  1000. IF(LDCUM(JL)) ICTOP0(JL)=KCTOP(JL)
  1001. IF(LDCUM(JL).AND.KTYPE(JL).EQ.1.AND.ZPBMPT.LT.ZDNOPRC) KTYPE(JL)=2
  1002. IF(KTYPE(JL).EQ.2) then
  1003. ZENTR(JL)=ENTRSCV
  1004. if(lndj(JL).eq.1) ZENTR(JL)=ZENTR(JL)*1.05
  1005. endif
  1006. ZRFL(JL)=ZDMFUP(JL,1)
  1007. 480 CONTINUE
  1008. DO 490 JK=2,KLEV
  1009. DO 490 JL=1,KLON
  1010. ZRFL(JL)=ZRFL(JL)+ZDMFUP(JL,JK)
  1011. 490 CONTINUE
  1012. !-----------------------------------------
  1013. !* 5.0 CUMULUS DOWNDRAFT CALCULATIONS
  1014. !-----------------------------------------
  1015. 500 CONTINUE
  1016. IF(LMFDD) THEN
  1017. !* (A) DETERMINE LFS IN 'CUDLFS'
  1018. !--------------------------------------
  1019. CALL CUDLFS &
  1020. (KLON, KLEV, KLEVP1, ZTENH, ZQENH, &
  1021. PUEN, PVEN, ZGEOH, PAPH, PTU, &
  1022. PQU, ZUU, ZVU, LDCUM, KCBOT, &
  1023. KCTOP, ZMFUB, ZRFL, ZTD, ZQD, &
  1024. ZUD, ZVD, PMFD, ZMFDS, ZMFDQ, &
  1025. ZDMFDP, IDTOP, LODDRAF)
  1026. !* (B) DETERMINE DOWNDRAFT T,Q AND FLUXES IN 'CUDDRAF'
  1027. !------------------------------------------------------------
  1028. CALL CUDDRAF &
  1029. (KLON, KLEV, KLEVP1, ZTENH, ZQENH, &
  1030. PUEN, PVEN, ZGEOH, PAPH, ZRFL, &
  1031. LODDRAF, ZTD, ZQD, ZUD, ZVD, &
  1032. PMFD, ZMFDS, ZMFDQ, ZDMFDP)
  1033. !* (C) RECALCULATE CONVECTIVE FLUXES DUE TO EFFECT OF
  1034. ! DOWNDRAFTS ON BOUNDARY LAYER MOISTURE BUDGET
  1035. !-----------------------------------------------------------
  1036. END IF
  1037. !
  1038. !-- 5.1 Recalculate cloud base massflux from a cape closure
  1039. ! for deep convection (ktype=1) and by PBL equilibrium
  1040. ! taking downdrafts into account for shallow convection
  1041. ! (ktype=2)
  1042. ! implemented by Y. WANG based on ECHAM4 in Nov. 2001.
  1043. !
  1044. DO 510 JL=1,KLON
  1045. ZHEAT(JL)=0.0
  1046. ZCAPE(JL)=0.0
  1047. ZRELH(JL)=0.0
  1048. ZMFUB1(JL)=ZMFUB(JL)
  1049. 510 CONTINUE
  1050. !
  1051. DO 511 JL=1,KLON
  1052. IF(LDCUM(JL).AND.KTYPE(JL).EQ.1) THEN
  1053. do jk=KLEVM1,2,-1
  1054. if(abs(paph(jl,jk)*0.01 - 300) .lt. 50.) then
  1055. KTOP0=MAX(jk,KCTOP(JL))
  1056. exit
  1057. end if
  1058. end do
  1059. ! KTOP0=MAX(12,KCTOP(JL))
  1060. DO JK=2,KLEV
  1061. IF(JK.LE.KCBOT(JL).AND.JK.GT.KCTOP(JL)) THEN
  1062. ZRO=PAPH(JL,JK)/(RD*ZTENH(JL,JK))
  1063. ZDZ=(PAPH(JL,JK)-PAPH(JL,JK-1))/(G*ZRO)
  1064. ZHEAT(JL)=ZHEAT(JL)+((PTEN(JL,JK-1)-PTEN(JL,JK) &
  1065. +G*ZDZ/CPD)/ZTENH(JL,JK)+0.608*(PQEN(JL,JK-1)- &
  1066. PQEN(JL,JK)))*(PMFU(JL,JK)+PMFD(JL,JK))*G/ZRO
  1067. ZCAPE(JL)=ZCAPE(JL)+G*((PTU(JL,JK)*(1.+.608*PQU(JL,JK) &
  1068. -PLU(JL,JK)))/(ZTENH(JL,JK)*(1.+.608*ZQENH(JL,JK))) &
  1069. -1.0)*ZDZ
  1070. ENDIF
  1071. IF(JK.LE.KCBOT(JL).AND.JK.GT.KTOP0) THEN
  1072. dept=(PAPH(JL,JK)-PAPH(JL,JK-1))/(PAPH(JL,KCBOT(JL))- &
  1073. PAPH(JL,KTOP0))
  1074. ZRELH(JL)=ZRELH(JL)+dept*PQEN(JL,JK)/PQSEN(JL,JK)
  1075. ENDIF
  1076. ENDDO
  1077. !
  1078. if(cutrigger .eq. 1 ) then
  1079. IF(lndj(JL).EQ.1) then
  1080. CRIRH1=CRIRH*0.8
  1081. ELSE
  1082. CRIRH1=CRIRH
  1083. ENDIF
  1084. else
  1085. CRIRH1=0.
  1086. end if
  1087. IF(ZRELH(JL).GE.CRIRH1 .AND. ZCAPE(JL) .GT. 100.) THEN
  1088. IKB=KCBOT(JL)
  1089. ZHT=ZCAPE(JL)/(ZTAU*ZHEAT(JL))
  1090. ZMFUB1(JL)=MAX(ZMFUB(JL)*ZHT,0.01)
  1091. ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
  1092. ZMFUB1(JL)=MIN(ZMFUB1(JL),ZMFMAX)
  1093. ELSE
  1094. ZMFUB1(JL)=0.01
  1095. ZMFUB(JL)=0.01
  1096. LDCUM(JL)=.FALSE.
  1097. ENDIF
  1098. ENDIF
  1099. 511 CONTINUE
  1100. !
  1101. !* 5.2 RECALCULATE CONVECTIVE FLUXES DUE TO EFFECT OF
  1102. ! DOWNDRAFTS ON BOUNDARY LAYER MOISTURE BUDGET
  1103. !--------------------------------------------------------
  1104. DO 512 JL=1,KLON
  1105. IF(KTYPE(JL).NE.1) THEN
  1106. IKB=KCBOT(JL)
  1107. IF(PMFD(JL,IKB).LT.0.0.AND.LODDRAF(JL)) THEN
  1108. ZEPS=CMFDEPS
  1109. ELSE
  1110. ZEPS=0.
  1111. ENDIF
  1112. ZQUMQE=PQU(JL,IKB)+PLU(JL,IKB)- &
  1113. ZEPS*ZQD(JL,IKB)-(1.-ZEPS)*ZQENH(JL,IKB)
  1114. ZDQMIN=MAX(0.01*ZQENH(JL,IKB),1.E-10)
  1115. ZMFMAX=(PAPH(JL,IKB)-PAPH(JL,IKB-1))*ZCONS2
  1116. IF(ZDQPBL(JL).GT.0..AND.ZQUMQE.GT.ZDQMIN.AND.LDCUM(JL) &
  1117. .AND.ZMFUB(JL).LT.ZMFMAX) THEN
  1118. ZMFUB1(JL)=ZDQPBL(JL)/(G*MAX(ZQUMQE,ZDQMIN))
  1119. ELSE
  1120. ZMFUB1(JL)=ZMFUB(JL)
  1121. ENDIF
  1122. LLO1=(KTYPE(JL).EQ.2).AND.ABS(ZMFUB1(JL) &
  1123. -ZMFUB(JL)).LT.0.2*ZMFUB(JL)
  1124. IF(.NOT.LLO1) ZMFUB1(JL)=ZMFUB(JL)
  1125. ZMFUB1(JL)=MIN(ZMFUB1(JL),ZMFMAX)
  1126. END IF
  1127. 512 CONTINUE
  1128. DO 530 JK=1,KLEV
  1129. DO 530 JL=1,KLON
  1130. IF(LDCUM(JL)) THEN
  1131. ZFAC=ZMFUB1(JL)/MAX(ZMFUB(JL),1.E-10)
  1132. PMFD(JL,JK)=PMFD(JL,JK)*ZFAC
  1133. ZMFDS(JL,JK)=ZMFDS(JL,JK)*ZFAC
  1134. ZMFDQ(JL,JK)=ZMFDQ(JL,JK)*ZFAC
  1135. ZDMFDP(JL,JK)=ZDMFDP(JL,JK)*ZFAC
  1136. ELSE
  1137. PMFD(JL,JK)=0.0
  1138. ZMFDS(JL,JK)=0.0
  1139. ZMFDQ(JL,JK)=0.0
  1140. ZDMFDP(JL,JK)=0.0
  1141. ENDIF
  1142. 530 CONTINUE
  1143. DO 538 JL=1,KLON
  1144. IF(LDCUM(JL)) THEN
  1145. ZMFUB(JL)=ZMFUB1(JL)
  1146. ELSE
  1147. ZMFUB(JL)=0.0
  1148. ENDIF
  1149. 538 CONTINUE
  1150. !
  1151. !---------------------------------------------------------------
  1152. !* 6.0 DETERMINE FINAL CLOUD ASCENT FOR ENTRAINING PLUME
  1153. !* FOR PENETRATIVE CONVECTION (TYPE=1),
  1154. !* FOR SHALLOW TO MEDIUM CONVECTION (TYPE=2)
  1155. !* AND FOR MID-LEVEL CONVECTION (TYPE=3).
  1156. !---------------------------------------------------------------
  1157. 600 CONTINUE
  1158. CALL CUASC_NEW &
  1159. (KLON, KLEV, KLEVP1, KLEVM1, ZTENH, &
  1160. ZQENH, PUEN, PVEN, PTEN, PQEN, &
  1161. PQSEN, PGEO, ZGEOH, PAP, PAPH, &
  1162. PQTE, PVERV, ILWMIN, LDCUM, ZHCBASE,&
  1163. KTYPE, ILAB, PTU, PQU, PLU, &
  1164. ZUU, ZVU, PMFU, ZMFUB, ZENTR, &
  1165. ZMFUS, ZMFUQ, ZMFUL, PLUDE, ZDMFUP, &
  1166. KCBOT, KCTOP, ICTOP0, ICUM, ZTMST, &
  1167. IHMIN, ZHHATT, ZQSENH)
  1168. !----------------------------------------------------------
  1169. !* 7.0 DETERMINE FINAL CONVECTIVE FLUXES IN 'CUFLX'
  1170. !----------------------------------------------------------
  1171. 700 CONTINUE
  1172. CALL CUFLX &
  1173. (KLON, KLEV, KLEVP1, PQEN, PQSEN, &
  1174. ZTENH, ZQENH, PAPH, ZGEOH, KCBOT, &
  1175. KCTOP, IDTOP, KTYPE, LODDRAF, LDCUM, &
  1176. PMFU, PMFD, ZMFUS, ZMFDS, ZMFUQ, &
  1177. ZMFDQ, ZMFUL, PLUDE, ZDMFUP, ZDMFDP, &
  1178. ZRFL, PRAIN, PTEN, ZSFL, ZDPMEL, &
  1179. ITOPM2, ZTMST, sig1)
  1180. !----------------------------------------------------------------
  1181. !* 8.0 UPDATE TENDENCIES FOR T AND Q IN SUBROUTINE CUDTDQ
  1182. !----------------------------------------------------------------
  1183. 800 CONTINUE
  1184. CALL CUDTDQ &
  1185. (KLON, KLEV, KLEVP1, ITOPM2, PAPH, &
  1186. LDCUM, PTEN, PTTE, PQTE, ZMFUS, &
  1187. ZMFDS, ZMFUQ, ZMFDQ, ZMFUL, ZDMFUP, &
  1188. ZDMFDP, ZTMST, ZDPMEL, PRAIN, ZRFL, &
  1189. ZSFL, PSRAIN, PSEVAP, PSHEAT, PSMELT, &
  1190. PRSFC, PSSFC, PAPRC, PAPRSM, PAPRS, &
  1191. PQEN, PQSEN, PLUDE, PCTE)
  1192. !----------------------------------------------------------------
  1193. !* 9.0 UPDATE TENDENCIES FOR U AND U IN SUBROUTINE CUDUDV
  1194. !----------------------------------------------------------------
  1195. 900 CONTINUE
  1196. IF(LMFDUDV) THEN
  1197. CALL CUDUDV &
  1198. (KLON, KLEV, KLEVP1, ITOPM2, KTYPE, &
  1199. KCBOT, PAPH, LDCUM, PUEN, PVEN, &
  1200. PVOM, PVOL, ZUU, ZUD, ZVU, &
  1201. ZVD, PMFU, PMFD, PSDISS)
  1202. END IF
  1203. 1000 CONTINUE
  1204. RETURN
  1205. END SUBROUTINE CUMASTR_NEW
  1206. !
  1207. !#############################################################
  1208. !
  1209. ! LEVEL 3 SUBROUTINEs
  1210. !
  1211. !#############################################################
  1212. !**********************************************
  1213. ! SUBROUTINE CUINI
  1214. !**********************************************
  1215. !
  1216. SUBROUTINE CUINI &
  1217. (KLON, KLEV, KLEVP1, KLEVM1, PTEN, &
  1218. PQEN, PQSEN, PUEN, PVEN, PVERV, &
  1219. PGEO, PAPH, PGEOH, PTENH, PQENH, &
  1220. PQSENH, KLWMIN, PTU, PQU, PTD, &
  1221. PQD, PUU, PVU, PUD, PVD, &
  1222. PMFU, PMFD, PMFUS, PMFDS, PMFUQ, &
  1223. PMFDQ, PDMFUP, PDMFDP, PDPMEL, PLU, &
  1224. PLUDE, KLAB)
  1225. ! M.TIEDTKE E.C.M.W.F. 12/89
  1226. !***PURPOSE
  1227. ! -------
  1228. ! THIS ROUTINE INTERPOLATES LARGE-SCALE FIELDS OF T,Q ETC.
  1229. ! TO HALF LEVELS (I.E. GRID FOR MASSFLUX SCHEME),
  1230. ! AND INITIALIZES VALUES FOR UPDRAFTS AND DOWNDRAFTS
  1231. !***INTERFACE
  1232. ! ---------
  1233. ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
  1234. !***METHOD.
  1235. ! --------
  1236. ! FOR EXTRAPOLATION TO HALF LEVELS SEE TIEDTKE(1989)
  1237. !***EXTERNALS
  1238. ! ---------
  1239. ! *CUADJTQ* TO SPECIFY QS AT HALF LEVELS
  1240. ! ----------------------------------------------------------------
  1241. !-------------------------------------------------------------------
  1242. IMPLICIT NONE
  1243. !-------------------------------------------------------------------
  1244. INTEGER KLON, KLEV, KLEVP1
  1245. INTEGER klevm1
  1246. INTEGER JK,JL,IK, ICALL
  1247. REAL ZDP, ZZS
  1248. REAL PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
  1249. PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
  1250. PQSEN(KLON,KLEV), PVERV(KLON,KLEV), &
  1251. PGEO(KLON,KLEV), PGEOH(KLON,KLEV), &
  1252. PAPH(KLON,KLEVP1), PTENH(KLON,KLEV), &
  1253. PQENH(KLON,KLEV), PQSENH(KLON,KLEV)
  1254. REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
  1255. PTD(KLON,KLEV), PQD(KLON,KLEV), &
  1256. PUU(KLON,KLEV), PUD(KLON,KLEV), &
  1257. PVU(KLON,KLEV), PVD(KLON,KLEV), &
  1258. PMFU(KLON,KLEV), PMFD(KLON,KLEV), &
  1259. PMFUS(KLON,KLEV), PMFDS(KLON,KLEV), &
  1260. PMFUQ(KLON,KLEV), PMFDQ(KLON,KLEV), &
  1261. PDMFUP(KLON,KLEV), PDMFDP(KLON,KLEV), &
  1262. PLU(KLON,KLEV), PLUDE(KLON,KLEV)
  1263. REAL ZWMAX(KLON), ZPH(KLON), &
  1264. PDPMEL(KLON,KLEV)
  1265. INTEGER KLAB(KLON,KLEV), KLWMIN(KLON)
  1266. LOGICAL LOFLAG(KLON)
  1267. !------------------------------------------------------------
  1268. !* 1. SPECIFY LARGE SCALE PARAMETERS AT HALF LEVELS
  1269. !* ADJUST TEMPERATURE FIELDS IF STATICLY UNSTABLE
  1270. !* FIND LEVEL OF MAXIMUM VERTICAL VELOCITY
  1271. ! -----------------------------------------------------------
  1272. 100 CONTINUE
  1273. ZDP=0.5
  1274. DO 130 JK=2,KLEV
  1275. DO 110 JL=1,KLON
  1276. PGEOH(JL,JK)=PGEO(JL,JK)+(PGEO(JL,JK-1)-PGEO(JL,JK))*ZDP
  1277. PTENH(JL,JK)=(MAX(CPD*PTEN(JL,JK-1)+PGEO(JL,JK-1), &
  1278. CPD*PTEN(JL,JK)+PGEO(JL,JK))-PGEOH(JL,JK))*RCPD
  1279. PQSENH(JL,JK)=PQSEN(JL,JK-1)
  1280. ZPH(JL)=PAPH(JL,JK)
  1281. LOFLAG(JL)=.TRUE.
  1282. 110 CONTINUE
  1283. IK=JK
  1284. ICALL=0
  1285. CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTENH,PQSENH,LOFLAG,ICALL)
  1286. DO 120 JL=1,KLON
  1287. PQENH(JL,JK)=MIN(PQEN(JL,JK-1),PQSEN(JL,JK-1)) &
  1288. +(PQSENH(JL,JK)-PQSEN(JL,JK-1))
  1289. PQENH(JL,JK)=MAX(PQENH(JL,JK),0.)
  1290. 120 CONTINUE
  1291. 130 CONTINUE
  1292. DO 140 JL=1,KLON
  1293. PTENH(JL,KLEV)=(CPD*PTEN(JL,KLEV)+PGEO(JL,KLEV)- &
  1294. PGEOH(JL,KLEV))*RCPD
  1295. PQENH(JL,KLEV)=PQEN(JL,KLEV)
  1296. PTENH(JL,1)=PTEN(JL,1)
  1297. PQENH(JL,1)=PQEN(JL,1)
  1298. PGEOH(JL,1)=PGEO(JL,1)
  1299. KLWMIN(JL)=KLEV
  1300. ZWMAX(JL)=0.
  1301. 140 CONTINUE
  1302. DO 160 JK=KLEVM1,2,-1
  1303. DO 150 JL=1,KLON
  1304. ZZS=MAX(CPD*PTENH(JL,JK)+PGEOH(JL,JK), &
  1305. CPD*PTENH(JL,JK+1)+PGEOH(JL,JK+1))
  1306. PTENH(JL,JK)=(ZZS-PGEOH(JL,JK))*RCPD
  1307. 150 CONTINUE
  1308. 160 CONTINUE
  1309. DO 190 JK=KLEV,3,-1
  1310. DO 180 JL=1,KLON
  1311. IF(PVERV(JL,JK).LT.ZWMAX(JL)) THEN
  1312. ZWMAX(JL)=PVERV(JL,JK)
  1313. KLWMIN(JL)=JK
  1314. END IF
  1315. 180 CONTINUE
  1316. 190 CONTINUE
  1317. !-----------------------------------------------------------
  1318. !* 2.0 INITIALIZE VALUES FOR UPDRAFTS AND DOWNDRAFTS
  1319. !-----------------------------------------------------------
  1320. 200 CONTINUE
  1321. DO 230 JK=1,KLEV
  1322. IK=JK-1
  1323. IF(JK.EQ.1) IK=1
  1324. DO 220 JL=1,KLON
  1325. PTU(JL,JK)=PTENH(JL,JK)
  1326. PTD(JL,JK)=PTENH(JL,JK)
  1327. PQU(JL,JK)=PQENH(JL,JK)
  1328. PQD(JL,JK)=PQENH(JL,JK)
  1329. PLU(JL,JK)=0.
  1330. PUU(JL,JK)=PUEN(JL,IK)
  1331. PUD(JL,JK)=PUEN(JL,IK)
  1332. PVU(JL,JK)=PVEN(JL,IK)
  1333. PVD(JL,JK)=PVEN(JL,IK)
  1334. PMFU(JL,JK)=0.
  1335. PMFD(JL,JK)=0.
  1336. PMFUS(JL,JK)=0.
  1337. PMFDS(JL,JK)=0.
  1338. PMFUQ(JL,JK)=0.
  1339. PMFDQ(JL,JK)=0.
  1340. PDMFUP(JL,JK)=0.
  1341. PDMFDP(JL,JK)=0.
  1342. PDPMEL(JL,JK)=0.
  1343. PLUDE(JL,JK)=0.
  1344. KLAB(JL,JK)=0
  1345. 220 CONTINUE
  1346. 230 CONTINUE
  1347. RETURN
  1348. END SUBROUTINE CUINI
  1349. !**********************************************
  1350. ! SUBROUTINE CUBASE
  1351. !**********************************************
  1352. SUBROUTINE CUBASE &
  1353. (KLON, KLEV, KLEVP1, KLEVM1, PTENH, &
  1354. PQENH, PGEOH, PAPH, PTU, PQU, &
  1355. PLU, PUEN, PVEN, PUU, PVU, &
  1356. LDCUM, KCBOT, KLAB)
  1357. ! THIS ROUTINE CALCULATES CLOUD BASE VALUES (T AND Q)
  1358. ! FOR CUMULUS PARAMETERIZATION
  1359. ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
  1360. !***PURPOSE.
  1361. ! --------
  1362. ! TO PRODUCE CLOUD BASE VALUES FOR CU-PARAMETRIZATION
  1363. !***INTERFACE
  1364. ! ---------
  1365. ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
  1366. ! INPUT ARE ENVIRONM. VALUES OF T,Q,P,PHI AT HALF LEVELS.
  1367. ! IT RETURNS CLOUD BASE VALUES AND FLAGS AS FOLLOWS;
  1368. ! KLAB=1 FOR SUBCLOUD LEVELS
  1369. ! KLAB=2 FOR CONDENSATION LEVEL
  1370. !***METHOD.
  1371. ! --------
  1372. ! LIFT SURFACE AIR DRY-ADIABATICALLY TO CLOUD BASE
  1373. ! (NON ENTRAINING PLUME,I.E.CONSTANT MASSFLUX)
  1374. !***EXTERNALS
  1375. ! ---------
  1376. ! *CUADJTQ* FOR ADJUSTING T AND Q DUE TO CONDENSATION IN ASCENT
  1377. ! ----------------------------------------------------------------
  1378. !-------------------------------------------------------------------
  1379. IMPLICIT NONE
  1380. !-------------------------------------------------------------------
  1381. INTEGER KLON, KLEV, KLEVP1
  1382. INTEGER klevm1
  1383. INTEGER JL,JK,IS,IK,ICALL,IKB
  1384. REAL ZBUO,ZZ
  1385. REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
  1386. PGEOH(KLON,KLEV), PAPH(KLON,KLEVP1)
  1387. REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
  1388. PLU(KLON,KLEV)
  1389. REAL PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
  1390. PUU(KLON,KLEV), PVU(KLON,KLEV)
  1391. REAL ZQOLD(KLON,KLEV), ZPH(KLON)
  1392. INTEGER KLAB(KLON,KLEV), KCBOT(KLON)
  1393. LOGICAL LDCUM(KLON), LOFLAG(KLON)
  1394. !***INPUT VARIABLES:
  1395. ! PTENH [ZTENH] - Environment Temperature on half levels. (CUINI)
  1396. ! PQENH [ZQENH] - Env. specific humidity on half levels. (CUINI)
  1397. ! PGEOH [ZGEOH] - Geopotential on half levels, (MSSFLX)
  1398. ! PAPH - Pressure of half levels. (MSSFLX)
  1399. !***VARIABLES MODIFIED BY CUBASE:
  1400. ! LDCUM - Logical denoting profiles. (CUBASE)
  1401. ! KTYPE - Convection type - 1: Penetrative (CUMASTR)
  1402. ! 2: Stratocumulus (CUMASTR)
  1403. ! 3: Mid-level (CUASC)
  1404. ! PTU - Cloud Temperature.
  1405. ! PQU - Cloud specific Humidity.
  1406. ! PLU - Cloud Liquid Water (Moisture condensed out)
  1407. ! KCBOT - Cloud Base Level. (CUBASE)
  1408. ! KLAB [ILAB] - Level Label - 1: Sub-cloud layer (CUBASE)
  1409. !------------------------------------------------
  1410. ! 1. INITIALIZE VALUES AT LIFTING LEVEL
  1411. !------------------------------------------------
  1412. 100 CONTINUE
  1413. DO 110 JL=1,KLON
  1414. KLAB(JL,KLEV)=1
  1415. KCBOT(JL)=KLEVM1
  1416. LDCUM(JL)=.FALSE.
  1417. PUU(JL,KLEV)=PUEN(JL,KLEV)*(PAPH(JL,KLEVP1)-PAPH(JL,KLEV))
  1418. PVU(JL,KLEV)=PVEN(JL,KLEV)*(PAPH(JL,KLEVP1)-PAPH(JL,KLEV))
  1419. 110 CONTINUE
  1420. !-------------------------------------------------------
  1421. ! 2.0 DO ASCENT IN SUBCLOUD LAYER,
  1422. ! CHECK FOR EXISTENCE OF CONDENSATION LEVEL,
  1423. ! ADJUST T,Q AND L ACCORDINGLY IN *CUADJTQ*,
  1424. ! CHECK FOR BUOYANCY AND SET FLAGS
  1425. !-------------------------------------------------------
  1426. DO 200 JK=1,KLEV
  1427. DO 200 JL=1,KLON
  1428. ZQOLD(JL,JK)=0.0
  1429. 200 CONTINUE
  1430. DO 290 JK=KLEVM1,2,-1
  1431. IS=0
  1432. DO 210 JL=1,KLON
  1433. IF(KLAB(JL,JK+1).EQ.1) THEN
  1434. IS=IS+1
  1435. LOFLAG(JL)=.TRUE.
  1436. ELSE
  1437. LOFLAG(JL)=.FALSE.
  1438. ENDIF
  1439. ZPH(JL)=PAPH(JL,JK)
  1440. 210 CONTINUE
  1441. IF(IS.EQ.0) GO TO 290
  1442. DO 220 JL=1,KLON
  1443. IF(LOFLAG(JL)) THEN
  1444. PQU(JL,JK)=PQU(JL,JK+1)
  1445. PTU(JL,JK)=(CPD*PTU(JL,JK+1)+PGEOH(JL,JK+1) &
  1446. -PGEOH(JL,JK))*RCPD
  1447. ZBUO=PTU(JL,JK)*(1.+VTMPC1*PQU(JL,JK))- &
  1448. PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))+ZBUO0
  1449. IF(ZBUO.GT.0.) KLAB(JL,JK)=1
  1450. ZQOLD(JL,JK)=PQU(JL,JK)
  1451. END IF
  1452. 220 CONTINUE
  1453. IK=JK
  1454. ICALL=1
  1455. CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTU,PQU,LOFLAG,ICALL)
  1456. DO 240 JL=1,KLON
  1457. IF(LOFLAG(JL).AND.PQU(JL,JK).NE.ZQOLD(JL,JK)) THEN
  1458. KLAB(JL,JK)=2
  1459. PLU(JL,JK)=PLU(JL,JK)+ZQOLD(JL,JK)-PQU(JL,JK)
  1460. ZBUO=PTU(JL,JK)*(1.+VTMPC1*PQU(JL,JK))- &
  1461. PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))+ZBUO0
  1462. IF(ZBUO.GT.0.) THEN
  1463. KCBOT(JL)=JK
  1464. LDCUM(JL)=.TRUE.
  1465. END IF
  1466. END IF
  1467. 240 CONTINUE
  1468. ! CALCULATE AVERAGES OF U AND V FOR SUBCLOUD ARA,.
  1469. ! THE VALUES WILL BE USED TO DEFINE CLOUD BASE VALUES.
  1470. IF(LMFDUDV) THEN
  1471. DO 250 JL=1,KLON
  1472. IF(JK.GE.KCBOT(JL)) THEN
  1473. PUU(JL,KLEV)=PUU(JL,KLEV)+ &
  1474. PUEN(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
  1475. PVU(JL,KLEV)=PVU(JL,KLEV)+ &
  1476. PVEN(JL,JK)*(PAPH(JL,JK+1)-PAPH(JL,JK))
  1477. END IF
  1478. 250 CONTINUE
  1479. END IF
  1480. 290 CONTINUE
  1481. IF(LMFDUDV) THEN
  1482. DO 310 JL=1,KLON
  1483. IF(LDCUM(JL)) THEN
  1484. IKB=KCBOT(JL)
  1485. ZZ=1./(PAPH(JL,KLEVP1)-PAPH(JL,IKB))
  1486. PUU(JL,KLEV)=PUU(JL,KLEV)*ZZ
  1487. PVU(JL,KLEV)=PVU(JL,KLEV)*ZZ
  1488. ELSE
  1489. PUU(JL,KLEV)=PUEN(JL,KLEVM1)
  1490. PVU(JL,KLEV)=PVEN(JL,KLEVM1)
  1491. END IF
  1492. 310 CONTINUE
  1493. END IF
  1494. RETURN
  1495. END SUBROUTINE CUBASE
  1496. !**********************************************
  1497. ! SUBROUTINE CUTYPE
  1498. !**********************************************
  1499. SUBROUTINE CUTYPE &
  1500. ( KLON, KLEV, KLEVP1, KLEVM1,&
  1501. PTENH, PQENH, PQSENH, PGEOH, PAPH,&
  1502. RHO, HFX, QFX, KTYPE, lndj )
  1503. ! THIS ROUTINE CALCULATES CLOUD BASE and TOP
  1504. ! AND RETURN CLOUD TYPES
  1505. ! ZHANG & WANG IPRC 12/2010
  1506. !***PURPOSE.
  1507. ! --------
  1508. ! TO PRODUCE CLOUD TYPE for CU-PARAMETERIZATIONS
  1509. !***INTERFACE
  1510. ! ---------
  1511. ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
  1512. ! INPUT ARE ENVIRONM. VALUES OF T,Q,P,PHI AT HALF LEVELS.
  1513. ! IT RETURNS CLOUD TYPES AS FOLLOWS;
  1514. ! KTYPE=1 FOR deep cumulus
  1515. ! KTYPE=2 FOR shallow cumulus
  1516. !***METHOD.
  1517. ! --------
  1518. ! based on a simplified updraught equation
  1519. ! partial(Hup)/partial(z)=eta(H - Hup)
  1520. ! eta is the entrainment rate for test parcel
  1521. ! H stands for dry static energy or the total water specific humidity
  1522. ! references: Christian Jakob, 2003: A new subcloud model for mass-flux convection schemes
  1523. ! influence on triggering, updraft properties, and model climate, Mon.Wea.Rev.
  1524. ! 131, 2765-2778
  1525. ! and
  1526. ! IFS Documentation - Cy33r1
  1527. !
  1528. !***EXTERNALS
  1529. ! ---------
  1530. ! *CUADJTQ* FOR ADJUSTING T AND Q DUE TO CONDENSATION IN ASCENT
  1531. ! ----------------------------------------------------------------
  1532. !-------------------------------------------------------------------
  1533. IMPLICIT NONE
  1534. !-------------------------------------------------------------------
  1535. INTEGER KLON, KLEV, KLEVP1
  1536. INTEGER klevm1
  1537. INTEGER JL,JK,IS,IK,ICALL,IKB,LEVELS
  1538. REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
  1539. PQSENH(KLON,KLEV),&
  1540. PGEOH(KLON,KLEV), PAPH(KLON,KLEVP1)
  1541. REAL ZRELH(KLON)
  1542. REAL QFX(KLON),RHO(KLON),HFX(KLON)
  1543. REAL ZQOLD(KLON,KLEV), ZPH(KLON)
  1544. INTEGER KCTOP(KLON),KCBOT(KLON)
  1545. INTEGER KTYPE(KLON),LCLFLAG(KLON)
  1546. LOGICAL TOPFLAG(KLON),DEEPFLAG(KLON),MYFLAG(KLON)
  1547. REAL part1(klon), part2(klon), root(klon)
  1548. REAL conw(klon),deltT(klon),deltQ(klon)
  1549. REAL eta(klon),dz(klon),coef(klon)
  1550. REAL dhen(KLON,KLEV), dh(KLON,KLEV),qh(KLON,KLEV)
  1551. REAL Tup(KLON,KLEV),Qup(KLON,KLEV),ql(KLON,KLEV)
  1552. REAL ww(KLON,KLEV),Kup(KLON,KLEV)
  1553. REAL Vtup(KLON,KLEV),Vten(KLON,KLEV),buoy(KLON,KLEV)
  1554. INTEGER lndj(KLON)
  1555. REAL CRIRH1
  1556. !***INPUT VARIABLES:
  1557. ! PTENH [ZTENH] - Environment Temperature on half levels. (CUINI)
  1558. ! PQENH [ZQENH] - Env. specific humidity on half levels. (CUINI)
  1559. ! PGEOH [ZGEOH] - Geopotential on half levels, (MSSFLX)
  1560. ! PAPH - Pressure of half levels. (MSSFLX)
  1561. ! RHO - Density of the lowest Model level
  1562. ! QFX - net upward moisture flux at the surface (kg/m^2/s)
  1563. ! HFX - net upward heat flux at the surface (W/m^2)
  1564. !***VARIABLES OUTPUT BY CUTYPE:
  1565. ! KTYPE - Convection type - 1: Penetrative (CUMASTR)
  1566. ! 2: Stratocumulus (CUMASTR)
  1567. ! 3: Mid-level (CUASC)
  1568. !--------------------------------------------------------------
  1569. DO JL=1,KLON
  1570. KCBOT(JL)=KLEVM1
  1571. KCTOP(JL)=KLEVM1
  1572. KTYPE(JL)=0
  1573. END DO
  1574. !-----------------------------------------------------------
  1575. ! let's do test,and check the shallow convection first
  1576. ! the first level is JK+1
  1577. ! define deltaT and deltaQ
  1578. !-----------------------------------------------------------
  1579. DO JK=1,KLEV
  1580. DO JL=1,KLON
  1581. ZQOLD(JL,JK)=0.0
  1582. ql(jl,jk)=0.0 ! parcel liquid water
  1583. Tup(jl,jk)=0.0 ! parcel temperature
  1584. Qup(jl,jk)=0.0 ! parcel specific humidity
  1585. dh(jl,jk)=0.0 ! parcel dry static energy
  1586. qh(jl,jk)=0.0 ! parcel total water specific humidity
  1587. ww(jl,jk)=0.0 ! parcel vertical speed (m/s)
  1588. dhen(jl,jk)=0.0 ! environment dry static energy
  1589. Kup(jl,jk)=0.0 ! updraught kinetic energy for parcel
  1590. Vtup(jl,jk)=0.0 ! parcel virtual temperature considering water-loading
  1591. Vten(jl,jk)=0.0 ! environment virtual temperature
  1592. buoy(jl,jk)=0.0 ! parcel buoyancy
  1593. END DO
  1594. END DO
  1595. do jl=1,klon
  1596. lclflag(jl) = 0 ! flag for the condensation level
  1597. conw(jl) = 0.0 ! convective-scale velocity,also used for the vertical speed at the first level
  1598. myflag(jl) = .true. ! just as input for cuadjqt subroutine
  1599. topflag(jl) = .false.! flag for whether the cloud top is found
  1600. end do
  1601. ! check the levels from lowest level to second top level
  1602. do JK=KLEVM1,2,-1
  1603. DO JL=1,KLON
  1604. ZPH(JL)=PAPH(JL,JK)
  1605. END DO
  1606. ! define the variables at the first level
  1607. if(jk .eq. KLEVM1) then
  1608. do jl=1,klon
  1609. part1(jl) = 1.5*0.4*pgeoh(jl,jk+1)/(rho(jl)*ptenh(jl,jk+1))
  1610. part2(jl) = hfx(jl)/cpd+0.61*ptenh(jl,jk+1)*qfx(jl)
  1611. root(jl) = 0.001-part1(jl)*part2(jl)
  1612. if(root(jl) .gt. 0) then
  1613. conw(jl) = 1.2*(root(jl))**(1.0/3.0)
  1614. else
  1615. conw(jl) = -1.2*(-root(jl))**(1.0/3.0)
  1616. end if
  1617. deltT(jl) = -1.5*hfx(jl)/(rho(jl)*cpd*conw(jl))
  1618. deltQ(jl) = -1.5*qfx(jl)/(rho(jl)*conw(jl))
  1619. Tup(jl,jk+1) = ptenh(jl,jk+1) + deltT(jl)
  1620. Qup(jl,jk+1) = pqenh(jl,jk+1) + deltQ(jl)
  1621. ql(jl,jk+1) = 0.
  1622. dh(jl,jk+1) = pgeoh(jl,jk+1) + Tup(jl,jk+1)*cpd
  1623. qh(jl,jk+1) = pqenh(jl,jk+1) + deltQ(jl) + ql(jl,jk+1)
  1624. ww(jl,jk+1) = conw(jl)
  1625. end do
  1626. end if
  1627. ! the next levels, we use the variables at the first level as initial values
  1628. do jl=1,klon
  1629. if(.not. topflag(jl)) then
  1630. eta(jl) = 0.5*(0.55/(pgeoh(jl,jk)*zrg)+1.0e-3)
  1631. dz(jl) = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg
  1632. coef(jl)= eta(jl)*dz(jl)
  1633. dhen(jl,jk) = pgeoh(jl,jk) + cpd*ptenh(jl,jk)
  1634. dh(jl,jk) = (coef(jl)*dhen(jl,jk) + dh(jl,jk+1))/(1+coef(jl))
  1635. qh(jl,jk) = (coef(jl)*pqenh(jl,jk)+ qh(jl,jk+1))/(1+coef(jl))
  1636. Tup(jl,jk) = (dh(jl,jk)-pgeoh(jl,jk))*RCPD
  1637. Qup(jl,jk) = qh(jl,jk) - ql(jl,jk+1)
  1638. zqold(jl,jk) = Qup(jl,jk)
  1639. end if
  1640. end do
  1641. ! check if the parcel is saturated
  1642. ik=jk
  1643. icall=1
  1644. call CUADJTQ(klon,klev,ik,zph,Tup,Qup,myflag,icall)
  1645. do jl=1,klon
  1646. if( .not. topflag(jl) .and. zqold(jl,jk) .ne. Qup(jl,jk) ) then
  1647. lclflag(jl) = lclflag(jl) + 1
  1648. ql(jl,jk) = ql(jl,jk+1) + zqold(jl,jk) - Qup(jl,jk)
  1649. dh(jl,jk) = pgeoh(jl,jk) + cpd*Tup(jl,jk)
  1650. end if
  1651. end do
  1652. ! compute the updraft speed
  1653. do jl=1,klon
  1654. if(.not. topflag(jl))then
  1655. Kup(jl,jk+1) = 0.5*ww(jl,jk+1)**2
  1656. Vtup(jl,jk) = Tup(jl,jk)*(1.+VTMPC1*Qup(jl,jk)-ql(jl,jk))
  1657. Vten(jl,jk) = ptenh(jl,jk)*(1.+VTMPC1*pqenh(jl,jk))
  1658. buoy(jl,jk) = (Vtup(jl,jk) - Vten(jl,jk))/Vten(jl,jk)*g
  1659. Kup(jl,jk) = (Kup(jl,jk+1) + 0.333*dz(jl)*buoy(jl,jk))/ &
  1660. (1+2*2*eta(jl)*dz(jl))
  1661. if(Kup(jl,jk) .gt. 0 ) then
  1662. ww(jl,jk) = sqrt(2*Kup(jl,jk))
  1663. if(lclflag(jl) .eq. 1 ) kcbot(jl) = jk
  1664. if(jk .eq. 2) then
  1665. kctop(jl) = jk
  1666. topflag(jl)= .true.
  1667. end if
  1668. else
  1669. ww(jl,jk) = 0
  1670. kctop(jl) = jk + 1
  1671. topflag(jl) = .true.
  1672. end if
  1673. end if
  1674. end do
  1675. end do ! end all the levels
  1676. do jl=1,klon
  1677. if(paph(jl,kcbot(jl)) - paph(jl,kctop(jl)) .lt. ZDNOPRC .and. &
  1678. paph(jl,kcbot(jl)) - paph(jl,kctop(jl)) .gt. 0 &
  1679. .and. lclflag(jl) .gt. 0) then
  1680. ktype(jl) = 2
  1681. end if
  1682. end do
  1683. !-----------------------------------------------------------
  1684. ! Next, let's check the deep convection
  1685. ! the first level is JK
  1686. ! define deltaT and deltaQ
  1687. !----------------------------------------------------------
  1688. ! we check the parcel starting level by level (from the second lowest level to the next 12th level,
  1689. ! usually, the 12th level around 700 hPa for common eta levels)
  1690. do levels=KLEVM1-1,KLEVM1-12,-1
  1691. DO JK=1,KLEV
  1692. DO JL=1,KLON
  1693. ZQOLD(JL,JK)=0.0
  1694. ql(jl,jk)=0.0 ! parcel liquid water
  1695. Tup(jl,jk)=0.0 ! parcel temperature
  1696. Qup(jl,jk)=0.0 ! parcel specific humidity
  1697. dh(jl,jk)=0.0 ! parcel dry static energy
  1698. qh(jl,jk)=0.0 ! parcel total water specific humidity
  1699. ww(jl,jk)=0.0 ! parcel vertical speed (m/s)
  1700. dhen(jl,jk)=0.0 ! environment dry static energy
  1701. Kup(jl,jk)=0.0 ! updraught kinetic energy for parcel
  1702. Vtup(jl,jk)=0.0 ! parcel virtual temperature considering water-loading
  1703. Vten(jl,jk)=0.0 ! environment virtual temperature
  1704. buoy(jl,jk)=0.0 ! parcel buoyancy
  1705. END DO
  1706. END DO
  1707. do jl=1,klon
  1708. lclflag(jl) = 0 ! flag for the condensation level
  1709. kctop(jl) = levels
  1710. kcbot(jl) = levels
  1711. myflag(jl) = .true. ! just as input for cuadjqt subroutine
  1712. topflag(jl) = .false.! flag for whether the cloud top is found
  1713. end do
  1714. ! check the levels from lowest level to second top level
  1715. do JK=levels,2,-1
  1716. DO JL=1,KLON
  1717. ZPH(JL)=PAPH(JL,JK)
  1718. END DO
  1719. ! define the variables at the first level
  1720. if(jk .eq. levels) then
  1721. do jl=1,klon
  1722. deltT(jl) = 0.2
  1723. deltQ(jl) = 1.0e-4
  1724. if(paph(jl,KLEVM1-1)-paph(jl,jk) .le. 6.e3) then
  1725. ql(jl,jk+1) = 0.
  1726. Tup(jl,jk+1) = 0.25*(ptenh(jl,jk+1)+ptenh(jl,jk)+ &
  1727. ptenh(jl,jk-1)+ptenh(jl,jk-2)) + &
  1728. deltT(jl)
  1729. dh(jl,jk+1) = 0.25*(pgeoh(jl,jk+1)+pgeoh(jl,jk)+ &
  1730. pgeoh(jl,jk-1)+pgeoh(jl,jk-2)) + &
  1731. Tup(jl,jk+1)*cpd
  1732. qh(jl,jk+1) = 0.25*(pqenh(jl,jk+1)+pqenh(jl,jk)+ &
  1733. pqenh(jl,jk-1)+pqenh(jl,jk-2))+ &
  1734. deltQ(jl) + ql(jl,jk+1)
  1735. Qup(jl,jk+1) = qh(jl,jk+1) - ql(jl,jk+1)
  1736. else
  1737. ql(jl,jk+1) = 0.
  1738. Tup(jl,jk+1) = ptenh(jl,jk+1) + deltT(jl)
  1739. dh(jl,jk+1) = pgeoh(jl,jk+1) + Tup(jl,jk+1)*cpd
  1740. qh(jl,jk+1) = pqenh(jl,jk+1) + deltQ(jl)
  1741. Qup(jl,jk+1) = qh(jl,jk+1) - ql(jl,jk+1)
  1742. end if
  1743. ww(jl,jk+1) = 1.0
  1744. end do
  1745. end if
  1746. ! the next levels, we use the variables at the first level as initial values
  1747. do jl=1,klon
  1748. if(.not. topflag(jl)) then
  1749. eta(jl) = 1.1e-4
  1750. dz(jl) = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg
  1751. coef(jl)= eta(jl)*dz(jl)
  1752. dhen(jl,jk) = pgeoh(jl,jk) + cpd*ptenh(jl,jk)
  1753. dh(jl,jk) = (coef(jl)*dhen(jl,jk) + dh(jl,jk+1))/(1+coef(jl))
  1754. qh(jl,jk) = (coef(jl)*pqenh(jl,jk)+ qh(jl,jk+1))/(1+coef(jl))
  1755. Tup(jl,jk) = (dh(jl,jk)-pgeoh(jl,jk))*RCPD
  1756. Qup(jl,jk) = qh(jl,jk) - ql(jl,jk+1)
  1757. zqold(jl,jk) = Qup(jl,jk)
  1758. end if
  1759. end do
  1760. ! check if the parcel is saturated
  1761. ik=jk
  1762. icall=1
  1763. call CUADJTQ(klon,klev,ik,zph,Tup,Qup,myflag,icall)
  1764. do jl=1,klon
  1765. if( .not. topflag(jl) .and. zqold(jl,jk) .ne. Qup(jl,jk) ) then
  1766. lclflag(jl) = lclflag(jl) + 1
  1767. ql(jl,jk) = ql(jl,jk+1) + zqold(jl,jk) - Qup(jl,jk)
  1768. dh(jl,jk) = pgeoh(jl,jk) + cpd*Tup(jl,jk)
  1769. end if
  1770. end do
  1771. ! compute the updraft speed
  1772. do jl=1,klon
  1773. if(.not. topflag(jl))then
  1774. Kup(jl,jk+1) = 0.5*ww(jl,jk+1)**2
  1775. Vtup(jl,jk) = Tup(jl,jk)*(1.+VTMPC1*Qup(jl,jk)-ql(jl,jk))
  1776. Vten(jl,jk) = ptenh(jl,jk)*(1.+VTMPC1*pqenh(jl,jk))
  1777. buoy(jl,jk) = (Vtup(jl,jk) - Vten(jl,jk))/Vten(jl,jk)*g
  1778. Kup(jl,jk) = (Kup(jl,jk+1) + 0.333*dz(jl)*buoy(jl,jk))/ &
  1779. (1+2*2*eta(jl)*dz(jl))
  1780. if(Kup(jl,jk) .gt. 0 ) then
  1781. ww(jl,jk) = sqrt(2*Kup(jl,jk))
  1782. if(lclflag(jl) .eq. 1 ) kcbot(jl) = jk
  1783. if(jk .eq. 2) then
  1784. kctop(jl) = jk
  1785. topflag(jl)= .true.
  1786. end if
  1787. else
  1788. ww(jl,jk) = 0
  1789. kctop(jl) = jk + 1
  1790. topflag(jl) = .true.
  1791. end if
  1792. end if
  1793. end do
  1794. end do ! end all the levels
  1795. do jl = 1, klon
  1796. if(paph(jl,kcbot(jl)) - paph(jl,kctop(jl)) .gt. ZDNOPRC .and. &
  1797. lclflag(jl) .gt. 0 ) then
  1798. ZRELH(JL) = 0.
  1799. do jk=kcbot(jl),kctop(jl),-1
  1800. ZRELH(JL)=ZRELH(JL)+ PQENH(JL,JK)/PQSENH(JL,JK)
  1801. end do
  1802. ZRELH(JL) = ZRELH(JL)/(kcbot(jl)-kctop(jl)+1)
  1803. if(lndj(JL) .eq. 1) then
  1804. CRIRH1 = CRIRH*0.8
  1805. else
  1806. CRIRH1 = CRIRH
  1807. end if
  1808. if(ZRELH(JL) .ge. CRIRH1) ktype(jl) = 1
  1809. end if
  1810. end do
  1811. end do ! end all cycles
  1812. END SUBROUTINE CUTYPE
  1813. !
  1814. !**********************************************
  1815. ! SUBROUTINE CUASC_NEW
  1816. !**********************************************
  1817. SUBROUTINE CUASC_NEW &
  1818. (KLON, KLEV, KLEVP1, KLEVM1, PTENH, &
  1819. PQENH, PUEN, PVEN, PTEN, PQEN, &
  1820. PQSEN, PGEO, PGEOH, PAP, PAPH, &
  1821. PQTE, PVERV, KLWMIN, LDCUM, PHCBASE,&
  1822. KTYPE, KLAB, PTU, PQU, PLU, &
  1823. PUU, PVU, PMFU, PMFUB, PENTR, &
  1824. PMFUS, PMFUQ, PMFUL, PLUDE, PDMFUP, &
  1825. KCBOT, KCTOP, KCTOP0, KCUM, ZTMST, &
  1826. KHMIN, PHHATT, PQSENH)
  1827. ! THIS ROUTINE DOES THE CALCULATIONS FOR CLOUD ASCENTS
  1828. ! FOR CUMULUS PARAMETERIZATION
  1829. ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
  1830. ! Y.WANG IPRC 11/01 MODIF.
  1831. !***PURPOSE.
  1832. ! --------
  1833. ! TO PRODUCE CLOUD ASCENTS FOR CU-PARAMETRIZATION
  1834. ! (VERTICAL PROFILES OF T,Q,L,U AND V AND CORRESPONDING
  1835. ! FLUXES AS WELL AS PRECIPITATION RATES)
  1836. !***INTERFACE
  1837. ! ---------
  1838. ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
  1839. !***METHOD.
  1840. ! --------
  1841. ! LIFT SURFACE AIR DRY-ADIABATICALLY TO CLOUD BASE
  1842. ! AND THEN CALCULATE MOIST ASCENT FOR
  1843. ! ENTRAINING/DETRAINING PLUME.
  1844. ! ENTRAINMENT AND DETRAINMENT RATES DIFFER FOR
  1845. ! SHALLOW AND DEEP CUMULUS CONVECTION.
  1846. ! IN CASE THERE IS NO PENETRATIVE OR SHALLOW CONVECTION
  1847. ! CHECK FOR POSSIBILITY OF MID LEVEL CONVECTION
  1848. ! (CLOUD BASE VALUES CALCULATED IN *CUBASMC*)
  1849. !***EXTERNALS
  1850. ! ---------
  1851. ! *CUADJTQ* ADJUST T AND Q DUE TO CONDENSATION IN ASCENT
  1852. ! *CUENTR_NEW* CALCULATE ENTRAINMENT/DETRAINMENT RATES
  1853. ! *CUBASMC* CALCULATE CLOUD BASE VALUES FOR MIDLEVEL CONVECTION
  1854. !***REFERENCE
  1855. ! ---------
  1856. ! (TIEDTKE,1989)
  1857. !***INPUT VARIABLES:
  1858. ! PTENH [ZTENH] - Environ Temperature on half levels. (CUINI)
  1859. ! PQENH [ZQENH] - Env. specific humidity on half levels. (CUINI)
  1860. ! PUEN - Environment wind u-component. (MSSFLX)
  1861. ! PVEN - Environment wind v-component. (MSSFLX)
  1862. ! PTEN - Environment Temperature. (MSSFLX)
  1863. ! PQEN - Environment Specific Humidity. (MSSFLX)
  1864. ! PQSEN - Environment Saturation Specific Humidity. (MSSFLX)
  1865. ! PGEO - Geopotential. (MSSFLX)
  1866. ! PGEOH [ZGEOH] - Geopotential on half levels, (MSSFLX)
  1867. ! PAP - Pressure in Pa. (MSSFLX)
  1868. ! PAPH - Pressure of half levels. (MSSFLX)
  1869. ! PQTE - Moisture convergence (Delta q/Delta t). (MSSFLX)
  1870. ! PVERV - Large Scale Vertical Velocity (Omega). (MSSFLX)
  1871. ! KLWMIN [ILWMIN] - Level of Minimum Omega. (CUINI)
  1872. ! KLAB [ILAB] - Level Label - 1: Sub-cloud layer.
  1873. ! 2: Condensation Level (Cloud Base)
  1874. ! PMFUB [ZMFUB] - Updraft Mass Flux at Cloud Base. (CUMASTR)
  1875. !***VARIABLES MODIFIED BY CUASC:
  1876. ! LDCUM - Logical denoting profiles. (CUBASE)
  1877. ! KTYPE - Convection type - 1: Penetrative (CUMASTR)
  1878. ! 2: Stratocumulus (CUMASTR)
  1879. ! 3: Mid-level (CUASC)
  1880. ! PTU - Cloud Temperature.
  1881. ! PQU - Cloud specific Humidity.
  1882. ! PLU - Cloud Liquid Water (Moisture condensed out)
  1883. ! PUU [ZUU] - Cloud Momentum U-Component.
  1884. ! PVU [ZVU] - Cloud Momentum V-Component.
  1885. ! PMFU - Updraft Mass Flux.
  1886. ! PENTR [ZENTR] - Entrainment Rate. (CUMASTR ) (CUBASMC)
  1887. ! PMFUS [ZMFUS] - Updraft Flux of Dry Static Energy. (CUBASMC)
  1888. ! PMFUQ [ZMFUQ] - Updraft Flux of Specific Humidity.
  1889. ! PMFUL [ZMFUL] - Updraft Flux of Cloud Liquid Water.
  1890. ! PLUDE - Liquid Water Returned to Environment by Detrainment.
  1891. ! PDMFUP [ZMFUP] - FLUX DIFFERENCE OF PRECIP. IN UPDRAFTS
  1892. ! KCBOT - Cloud Base Level. (CUBASE)
  1893. ! KCTOP -
  1894. ! KCTOP0 [ICTOP0] - Estimate of Cloud Top. (CUMASTR)
  1895. ! KCUM [ICUM] -
  1896. !-------------------------------------------------------------------
  1897. IMPLICIT NONE
  1898. !-------------------------------------------------------------------
  1899. INTEGER KLON, KLEV, KLEVP1
  1900. INTEGER klevm1,kcum
  1901. REAL ZTMST,ZCONS2,ZDZ,ZDRODZ
  1902. INTEGER JL,JK,IKB,IK,IS,IKT,ICALL
  1903. REAL ZMFMAX,ZFAC,ZMFTEST,ZDPRHO,ZMSE,ZNEVN,ZODMAX
  1904. REAL ZQEEN,ZSEEN,ZSCDE,ZGA,ZDT,ZSCOD
  1905. REAL ZQUDE,ZQCOD, ZMFUSK, ZMFUQK,ZMFULK
  1906. REAL ZBUO, ZPRCON, ZLNEW, ZZ, ZDMFEU, ZDMFDU
  1907. REAL ZBUOYZ,ZZDMF
  1908. REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
  1909. PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
  1910. PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
  1911. PGEO(KLON,KLEV), PGEOH(KLON,KLEV), &
  1912. PAP(KLON,KLEV), PAPH(KLON,KLEVP1), &
  1913. PQSEN(KLON,KLEV), PQTE(KLON,KLEV), &
  1914. PVERV(KLON,KLEV), PQSENH(KLON,KLEV)
  1915. REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
  1916. PUU(KLON,KLEV), PVU(KLON,KLEV), &
  1917. PMFU(KLON,KLEV), ZPH(KLON), &
  1918. PMFUB(KLON), PENTR(KLON), &
  1919. PMFUS(KLON,KLEV), PMFUQ(KLON,KLEV), &
  1920. PLU(KLON,KLEV), PLUDE(KLON,KLEV), &
  1921. PMFUL(KLON,KLEV), PDMFUP(KLON,KLEV)
  1922. REAL ZDMFEN(KLON), ZDMFDE(KLON), &
  1923. ZMFUU(KLON), ZMFUV(KLON), &
  1924. ZPBASE(KLON), ZQOLD(KLON), &
  1925. PHHATT(KLON,KLEV), ZODETR(KLON,KLEV), &
  1926. ZOENTR(KLON,KLEV), ZBUOY(KLON)
  1927. REAL PHCBASE(KLON)
  1928. INTEGER KLWMIN(KLON), KTYPE(KLON), &
  1929. KLAB(KLON,KLEV), KCBOT(KLON), &
  1930. KCTOP(KLON), KCTOP0(KLON), &
  1931. KHMIN(KLON)
  1932. LOGICAL LDCUM(KLON), LOFLAG(KLON)
  1933. integer leveltop,levelbot
  1934. real tt(klon),ttb(klon)
  1935. real zqsat(klon), zqsatb(klon)
  1936. real fscale(klon)
  1937. !--------------------------------
  1938. !* 1. SPECIFY PARAMETERS
  1939. !--------------------------------
  1940. 100 CONTINUE
  1941. ZCONS2=1./(G*ZTMST)
  1942. !---------------------------------
  1943. ! 2. SET DEFAULT VALUES
  1944. !---------------------------------
  1945. 200 CONTINUE
  1946. DO 210 JL=1,KLON
  1947. ZMFUU(JL)=0.
  1948. ZMFUV(JL)=0.
  1949. ZBUOY(JL)=0.
  1950. IF(.NOT.LDCUM(JL)) KTYPE(JL)=0
  1951. 210 CONTINUE
  1952. DO 230 JK=1,KLEV
  1953. DO 230 JL=1,KLON
  1954. PLU(JL,JK)=0.
  1955. PMFU(JL,JK)=0.
  1956. PMFUS(JL,JK)=0.
  1957. PMFUQ(JL,JK)=0.
  1958. PMFUL(JL,JK)=0.
  1959. PLUDE(JL,JK)=0.
  1960. PDMFUP(JL,JK)=0.
  1961. ZOENTR(JL,JK)=0.
  1962. ZODETR(JL,JK)=0.
  1963. IF(.NOT.LDCUM(JL).OR.KTYPE(JL).EQ.3) KLAB(JL,JK)=0
  1964. IF(.NOT.LDCUM(JL).AND.PAPH(JL,JK).LT.4.E4) KCTOP0(JL)=JK
  1965. 230 CONTINUE
  1966. !------------------------------------------------
  1967. ! 3.0 INITIALIZE VALUES AT LIFTING LEVEL
  1968. !------------------------------------------------
  1969. DO 310 JL=1,KLON
  1970. KCTOP(JL)=KLEVM1
  1971. IF(.NOT.LDCUM(JL)) THEN
  1972. KCBOT(JL)=KLEVM1
  1973. PMFUB(JL)=0.
  1974. PQU(JL,KLEV)=0.
  1975. END IF
  1976. PMFU(JL,KLEV)=PMFUB(JL)
  1977. PMFUS(JL,KLEV)=PMFUB(JL)*(CPD*PTU(JL,KLEV)+PGEOH(JL,KLEV))
  1978. PMFUQ(JL,KLEV)=PMFUB(JL)*PQU(JL,KLEV)
  1979. IF(LMFDUDV) THEN
  1980. ZMFUU(JL)=PMFUB(JL)*PUU(JL,KLEV)
  1981. ZMFUV(JL)=PMFUB(JL)*PVU(JL,KLEV)
  1982. END IF
  1983. 310 CONTINUE
  1984. !
  1985. !-- 3.1 Find organized entrainment at cloud base
  1986. !
  1987. DO 322 JL=1,KLON
  1988. LDCUM(JL)=.FALSE.
  1989. IF (KTYPE(JL).EQ.1) THEN
  1990. IKB = KCBOT(JL)
  1991. if(orgen .eq. 1 ) then
  1992. ! old scheme
  1993. ZBUOY(JL)=G*((PTU(JL,IKB)-PTENH(JL,IKB))/PTENH(JL,IKB)+ &
  1994. 0.608*(PQU(JL,IKB)-PQENH(JL,IKB)))
  1995. IF (ZBUOY(JL).GT.0.) THEN
  1996. ZDZ = (PGEO(JL,IKB-1)-PGEO(JL,IKB))*ZRG
  1997. ZDRODZ = -LOG(PTEN(JL,IKB-1)/PTEN(JL,IKB))/ZDZ - &
  1998. G/(RD*PTENH(JL,IKB))
  1999. ZOENTR(JL,IKB-1)=ZBUOY(JL)*0.5/(1.+ZBUOY(JL)*ZDZ) &
  2000. +ZDRODZ
  2001. ZOENTR(JL,IKB-1) = MIN(ZOENTR(JL,IKB-1),1.E-3)
  2002. ZOENTR(JL,IKB-1) = MAX(ZOENTR(JL,IKB-1),0.)
  2003. END IF
  2004. ! New scheme
  2005. ! Let's define the fscale
  2006. else if(orgen .eq. 2 ) then
  2007. tt(jl) = ptenh(jl,ikb)
  2008. zqsat(jl) = TLUCUA(tt(jl))/paph(jl,ikb-1)
  2009. zqsat(jl) = zqsat(jl)/(1.-VTMPC1*zqsat(jl))
  2010. ttb(jl) = ptenh(jl,ikb)
  2011. zqsatb(jl) = TLUCUA(ttb(jl))/paph(jl,ikb)
  2012. zqsatb(jl) = zqsatb(jl)/(1.-VTMPC1*zqsatb(jl))
  2013. fscale(jl) = (zqsat(jl)/zqsatb(jl))**3
  2014. ! end of defining the fscale
  2015. zoentr(jl,ikb-1) = 1.E-3*(1.3-PQEN(jl,ikb-1)/PQSEN(jl,ikb-1))*fscale(jl)
  2016. zoentr(jl,ikb-1) = MIN(zoentr(jl,ikb-1),1.E-3)
  2017. zoentr(jl,ikb-1) = MAX(zoentr(jl,ikb-1),0.)
  2018. end if
  2019. END IF
  2020. 322 CONTINUE
  2021. !
  2022. !-----------------------------------------------------------------
  2023. ! 4. DO ASCENT: SUBCLOUD LAYER (KLAB=1) ,CLOUDS (KLAB=2)
  2024. ! BY DOING FIRST DRY-ADIABATIC ASCENT AND THEN
  2025. ! BY ADJUSTING T,Q AND L ACCORDINGLY IN *CUADJTQ*,
  2026. ! THEN CHECK FOR BUOYANCY AND SET FLAGS ACCORDINGLY
  2027. !-----------------------------------------------------------------
  2028. 400 CONTINUE
  2029. ! let's define the levels in which the middle level convection could be activated
  2030. do jk=KLEVM1,2,-1
  2031. if(abs(paph(1,jk)*0.01 - 250) .lt. 50.) then
  2032. leveltop = jk
  2033. exit
  2034. end if
  2035. end do
  2036. leveltop = min(KLEV-15,leveltop)
  2037. levelbot = KLEVM1 - 4
  2038. DO 480 JK=KLEVM1,2,-1
  2039. ! SPECIFY CLOUD BASE VALUES FOR MIDLEVEL CONVECTION
  2040. ! IN *CUBASMC* IN CASE THERE IS NOT ALREADY CONVECTION
  2041. ! ---------------------------------------------------------------------
  2042. IK=JK
  2043. IF(LMFMID.AND.IK.LT.levelbot.AND.IK.GT.leveltop) THEN
  2044. CALL CUBASMC &
  2045. (KLON, KLEV, KLEVM1, IK, PTEN, &
  2046. PQEN, PQSEN, PUEN, PVEN, PVERV, &
  2047. PGEO, PGEOH, LDCUM, KTYPE, KLAB, &
  2048. PMFU, PMFUB, PENTR, KCBOT, PTU, &
  2049. PQU, PLU, PUU, PVU, PMFUS, &
  2050. PMFUQ, PMFUL, PDMFUP, ZMFUU, ZMFUV)
  2051. ENDIF
  2052. IS=0
  2053. DO 410 JL=1,KLON
  2054. ZQOLD(JL)=0.0
  2055. IS=IS+KLAB(JL,JK+1)
  2056. IF(KLAB(JL,JK+1).EQ.0) KLAB(JL,JK)=0
  2057. LOFLAG(JL)=KLAB(JL,JK+1).GT.0
  2058. ZPH(JL)=PAPH(JL,JK)
  2059. IF(KTYPE(JL).EQ.3.AND.JK.EQ.KCBOT(JL)) THEN
  2060. ZMFMAX=(PAPH(JL,JK)-PAPH(JL,JK-1))*ZCONS2
  2061. IF(PMFUB(JL).GT.ZMFMAX) THEN
  2062. ZFAC=ZMFMAX/PMFUB(JL)
  2063. PMFU(JL,JK+1)=PMFU(JL,JK+1)*ZFAC
  2064. PMFUS(JL,JK+1)=PMFUS(JL,JK+1)*ZFAC
  2065. PMFUQ(JL,JK+1)=PMFUQ(JL,JK+1)*ZFAC
  2066. ZMFUU(JL)=ZMFUU(JL)*ZFAC
  2067. ZMFUV(JL)=ZMFUV(JL)*ZFAC
  2068. PMFUB(JL)=ZMFMAX
  2069. END IF
  2070. END IF
  2071. 410 CONTINUE
  2072. IF(IS.EQ.0) GO TO 480
  2073. !
  2074. !* SPECIFY ENTRAINMENT RATES IN *CUENTR_NEW*
  2075. ! -------------------------------------
  2076. IK=JK
  2077. CALL CUENTR_NEW &
  2078. (KLON, KLEV, KLEVP1, IK, PTENH,&
  2079. PAPH, PAP, PGEOH, KLWMIN, LDCUM,&
  2080. KTYPE, KCBOT, KCTOP0, ZPBASE, PMFU, &
  2081. PENTR, ZDMFEN, ZDMFDE, ZODETR, KHMIN)
  2082. !
  2083. ! DO ADIABATIC ASCENT FOR ENTRAINING/DETRAINING PLUME
  2084. ! -------------------------------------------------------
  2085. ! Do adiabatic ascent for entraining/detraining plume
  2086. ! the cloud ensemble entrains environmental values
  2087. ! in turbulent detrainment cloud ensemble values are detrained
  2088. ! in organized detrainment the dry static energy and
  2089. ! moisture that are neutral compared to the
  2090. ! environmental air are detrained
  2091. !
  2092. DO 420 JL=1,KLON
  2093. IF(LOFLAG(JL)) THEN
  2094. IF(JK.LT.KCBOT(JL)) THEN
  2095. ZMFTEST=PMFU(JL,JK+1)+ZDMFEN(JL)-ZDMFDE(JL)
  2096. ZMFMAX=MIN(ZMFTEST,(PAPH(JL,JK)-PAPH(JL,JK-1))*ZCONS2)
  2097. ZDMFEN(JL)=MAX(ZDMFEN(JL)-MAX(ZMFTEST-ZMFMAX,0.),0.)
  2098. END IF
  2099. ZDMFDE(JL)=MIN(ZDMFDE(JL),0.75*PMFU(JL,JK+1))
  2100. PMFU(JL,JK)=PMFU(JL,JK+1)+ZDMFEN(JL)-ZDMFDE(JL)
  2101. IF (JK.LT.kcbot(jl)) THEN
  2102. zdprho = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg
  2103. zoentr(jl,jk) = zoentr(jl,jk)*zdprho*pmfu(jl,jk+1)
  2104. zmftest = pmfu(jl,jk) + zoentr(jl,jk)-zodetr(jl,jk)
  2105. zmfmax = MIN(zmftest,(paph(jl,jk)-paph(jl,jk-1))*zcons2)
  2106. zoentr(jl,jk) = MAX(zoentr(jl,jk)-MAX(zmftest-zmfmax,0.),0.)
  2107. END IF
  2108. !
  2109. ! limit organized detrainment to not allowing for too deep clouds
  2110. !
  2111. IF (ktype(jl).EQ.1.AND.jk.LT.kcbot(jl).AND.jk.LE.khmin(jl)) THEN
  2112. zmse = cpd*ptu(jl,jk+1) + alv*pqu(jl,jk+1) + pgeoh(jl,jk+1)
  2113. ikt = kctop0(jl)
  2114. znevn=(pgeoh(jl,ikt)-pgeoh(jl,jk+1))*(zmse-phhatt(jl, &
  2115. jk+1))*zrg
  2116. IF (znevn.LE.0.) znevn = 1.
  2117. zdprho = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg
  2118. zodmax = ((phcbase(jl)-zmse)/znevn)*zdprho*pmfu(jl,jk+1)
  2119. zodmax = MAX(zodmax,0.)
  2120. zodetr(jl,jk) = MIN(zodetr(jl,jk),zodmax)
  2121. END IF
  2122. zodetr(jl,jk) = MIN(zodetr(jl,jk),0.75*pmfu(jl,jk))
  2123. pmfu(jl,jk) = pmfu(jl,jk) + zoentr(jl,jk) - zodetr(jl,jk)
  2124. ZQEEN=PQENH(JL,JK+1)*ZDMFEN(JL)
  2125. zqeen=zqeen + pqenh(jl,jk+1)*zoentr(jl,jk)
  2126. ZSEEN=(CPD*PTENH(JL,JK+1)+PGEOH(JL,JK+1))*ZDMFEN(JL)
  2127. zseen=zseen+(cpd*ptenh(jl,jk+1)+pgeoh(jl,jk+1))* &
  2128. zoentr(jl,jk)
  2129. ZSCDE=(CPD*PTU(JL,JK+1)+PGEOH(JL,JK+1))*ZDMFDE(JL)
  2130. ! find moist static energy that give nonbuoyant air
  2131. zga = alv*pqsenh(jl,jk+1)/(rv*(ptenh(jl,jk+1)**2))
  2132. zdt = (plu(jl,jk+1)-0.608*(pqsenh(jl,jk+1)-pqenh(jl, &
  2133. jk+1)))/(1./ptenh(jl,jk+1)+0.608*zga)
  2134. zscod = cpd*ptenh(jl,jk+1) + pgeoh(jl,jk+1) + cpd*zdt
  2135. zscde = zscde + zodetr(jl,jk)*zscod
  2136. zqude = pqu(jl,jk+1)*zdmfde(jl)
  2137. zqcod = pqsenh(jl,jk+1) + zga*zdt
  2138. zqude = zqude + zodetr(jl,jk)*zqcod
  2139. plude(jl,jk) = plu(jl,jk+1)*zdmfde(jl)
  2140. plude(jl,jk) = plude(jl,jk)+plu(jl,jk+1)*zodetr(jl,jk)
  2141. zmfusk = pmfus(jl,jk+1) + zseen - zscde
  2142. zmfuqk = pmfuq(jl,jk+1) + zqeen - zqude
  2143. zmfulk = pmful(jl,jk+1) - plude(jl,jk)
  2144. plu(jl,jk) = zmfulk*(1./MAX(cmfcmin,pmfu(jl,jk)))
  2145. pqu(jl,jk) = zmfuqk*(1./MAX(cmfcmin,pmfu(jl,jk)))
  2146. ptu(jl,jk)=(zmfusk*(1./MAX(cmfcmin,pmfu(jl,jk)))- &
  2147. pgeoh(jl,jk))*rcpd
  2148. ptu(jl,jk) = MAX(100.,ptu(jl,jk))
  2149. ptu(jl,jk) = MIN(400.,ptu(jl,jk))
  2150. zqold(jl) = pqu(jl,jk)
  2151. END IF
  2152. 420 CONTINUE
  2153. !* DO CORRECTIONS FOR MOIST ASCENT
  2154. !* BY ADJUSTING T,Q AND L IN *CUADJTQ*
  2155. !------------------------------------------------
  2156. IK=JK
  2157. ICALL=1
  2158. !
  2159. CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTU,PQU,LOFLAG,ICALL)
  2160. !
  2161. DO 440 JL=1,KLON
  2162. IF(LOFLAG(JL).AND.PQU(JL,JK).NE.ZQOLD(JL)) THEN
  2163. KLAB(JL,JK)=2
  2164. PLU(JL,JK)=PLU(JL,JK)+ZQOLD(JL)-PQU(JL,JK)
  2165. ZBUO=PTU(JL,JK)*(1.+VTMPC1*PQU(JL,JK)-PLU(JL,JK))- &
  2166. PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))
  2167. IF(KLAB(JL,JK+1).EQ.1) ZBUO=ZBUO+ZBUO0
  2168. IF(ZBUO.GT.0..AND.PMFU(JL,JK).GT.0.01*PMFUB(JL).AND. &
  2169. JK.GE.KCTOP0(JL)) THEN
  2170. KCTOP(JL)=JK
  2171. LDCUM(JL)=.TRUE.
  2172. IF(ZPBASE(JL)-PAPH(JL,JK).GE.ZDNOPRC) THEN
  2173. ZPRCON=CPRCON
  2174. ELSE
  2175. ZPRCON=0.
  2176. ENDIF
  2177. ZLNEW=PLU(JL,JK)/(1.+ZPRCON*(PGEOH(JL,JK)-PGEOH(JL,JK+1)))
  2178. PDMFUP(JL,JK)=MAX(0.,(PLU(JL,JK)-ZLNEW)*PMFU(JL,JK))
  2179. PLU(JL,JK)=ZLNEW
  2180. ELSE
  2181. KLAB(JL,JK)=0
  2182. PMFU(JL,JK)=0.
  2183. END IF
  2184. END IF
  2185. IF(LOFLAG(JL)) THEN
  2186. PMFUL(JL,JK)=PLU(JL,JK)*PMFU(JL,JK)
  2187. PMFUS(JL,JK)=(CPD*PTU(JL,JK)+PGEOH(JL,JK))*PMFU(JL,JK)
  2188. PMFUQ(JL,JK)=PQU(JL,JK)*PMFU(JL,JK)
  2189. END IF
  2190. 440 CONTINUE
  2191. !
  2192. IF(LMFDUDV) THEN
  2193. !
  2194. DO 460 JL=1,KLON
  2195. zdmfen(jl) = zdmfen(jl) + zoentr(jl,jk)
  2196. zdmfde(jl) = zdmfde(jl) + zodetr(jl,jk)
  2197. IF(LOFLAG(JL)) THEN
  2198. IF(KTYPE(JL).EQ.1.OR.KTYPE(JL).EQ.3) THEN
  2199. IF(ZDMFEN(JL).LE.1.E-20) THEN
  2200. ZZ=3.
  2201. ELSE
  2202. ZZ=2.
  2203. ENDIF
  2204. ELSE
  2205. IF(ZDMFEN(JL).LE.1.0E-20) THEN
  2206. ZZ=1.
  2207. ELSE
  2208. ZZ=0.
  2209. ENDIF
  2210. END IF
  2211. ZDMFEU=ZDMFEN(JL)+ZZ*ZDMFDE(JL)
  2212. ZDMFDU=ZDMFDE(JL)+ZZ*ZDMFDE(JL)
  2213. ZDMFDU=MIN(ZDMFDU,0.75*PMFU(JL,JK+1))
  2214. ZMFUU(JL)=ZMFUU(JL)+ &
  2215. ZDMFEU*PUEN(JL,JK)-ZDMFDU*PUU(JL,JK+1)
  2216. ZMFUV(JL)=ZMFUV(JL)+ &
  2217. ZDMFEU*PVEN(JL,JK)-ZDMFDU*PVU(JL,JK+1)
  2218. IF(PMFU(JL,JK).GT.0.) THEN
  2219. PUU(JL,JK)=ZMFUU(JL)*(1./PMFU(JL,JK))
  2220. PVU(JL,JK)=ZMFUV(JL)*(1./PMFU(JL,JK))
  2221. END IF
  2222. END IF
  2223. 460 CONTINUE
  2224. !
  2225. END IF
  2226. !
  2227. ! Compute organized entrainment
  2228. ! for use at next level
  2229. !
  2230. DO 470 jl = 1, klon
  2231. IF (loflag(jl).AND.ktype(jl).EQ.1) THEN
  2232. ! old scheme
  2233. if(orgen .eq. 1 ) then
  2234. zbuoyz=g*((ptu(jl,jk)-ptenh(jl,jk))/ptenh(jl,jk)+ &
  2235. 0.608*(pqu(jl,jk)-pqenh(jl,jk))-plu(jl,jk))
  2236. zbuoyz = MAX(zbuoyz,0.0)
  2237. zdz = (pgeo(jl,jk-1)-pgeo(jl,jk))*zrg
  2238. zdrodz = -LOG(pten(jl,jk-1)/pten(jl,jk))/zdz - &
  2239. g/(rd*ptenh(jl,jk))
  2240. zbuoy(jl) = zbuoy(jl) + zbuoyz*zdz
  2241. zoentr(jl,jk-1) = zbuoyz*0.5/(1.+zbuoy(jl))+zdrodz
  2242. zoentr(jl,jk-1) = MIN(zoentr(jl,jk-1),1.E-3)
  2243. zoentr(jl,jk-1) = MAX(zoentr(jl,jk-1),0.)
  2244. else if(orgen .eq. 2 ) then
  2245. ! Let's define the fscale
  2246. tt(jl) = ptenh(jl,jk-1)
  2247. zqsat(jl) = TLUCUA(tt(jl))/paph(jl,jk-1)
  2248. zqsat(jl) = zqsat(jl)/(1.-VTMPC1*zqsat(jl))
  2249. ttb(jl) = ptenh(jl,kcbot(jl))
  2250. zqsatb(jl) = TLUCUA(ttb(jl))/paph(jl,kcbot(jl))
  2251. zqsatb(jl) = zqsatb(jl)/(1.-VTMPC1*zqsatb(jl))
  2252. fscale(jl) = (zqsat(jl)/zqsatb(jl))**3
  2253. ! end of defining the fscale
  2254. zoentr(jl,jk-1) = 1.E-3*(1.3-PQEN(jl,jk-1)/PQSEN(jl,jk-1))*fscale(jl)
  2255. zoentr(jl,jk-1) = MIN(zoentr(jl,jk-1),1.E-3)
  2256. zoentr(jl,jk-1) = MAX(zoentr(jl,jk-1),0.)
  2257. ! write(6,*) "zoentr=",zoentr(jl,jk-1)
  2258. end if
  2259. END IF
  2260. 470 CONTINUE
  2261. !
  2262. 480 CONTINUE
  2263. ! -----------------------------------------------------------------
  2264. ! 5. DETERMINE CONVECTIVE FLUXES ABOVE NON-BUOYANCY LEVEL
  2265. ! -----------------------------------------------------------------
  2266. ! (NOTE: CLOUD VARIABLES LIKE T,Q AND L ARE NOT
  2267. ! AFFECTED BY DETRAINMENT AND ARE ALREADY KNOWN
  2268. ! FROM PREVIOUS CALCULATIONS ABOVE)
  2269. 500 CONTINUE
  2270. DO 510 JL=1,KLON
  2271. IF(KCTOP(JL).EQ.KLEVM1) LDCUM(JL)=.FALSE.
  2272. KCBOT(JL)=MAX(KCBOT(JL),KCTOP(JL))
  2273. 510 CONTINUE
  2274. IS=0
  2275. DO 520 JL=1,KLON
  2276. IF(LDCUM(JL)) THEN
  2277. IS=IS+1
  2278. ENDIF
  2279. 520 CONTINUE
  2280. KCUM=IS
  2281. IF(IS.EQ.0) GO TO 800
  2282. DO 530 JL=1,KLON
  2283. IF(LDCUM(JL)) THEN
  2284. JK=KCTOP(JL)-1
  2285. ZZDMF=CMFCTOP
  2286. ZDMFDE(JL)=(1.-ZZDMF)*PMFU(JL,JK+1)
  2287. PLUDE(JL,JK)=ZDMFDE(JL)*PLU(JL,JK+1)
  2288. PMFU(JL,JK)=PMFU(JL,JK+1)-ZDMFDE(JL)
  2289. PMFUS(JL,JK)=(CPD*PTU(JL,JK)+PGEOH(JL,JK))*PMFU(JL,JK)
  2290. PMFUQ(JL,JK)=PQU(JL,JK)*PMFU(JL,JK)
  2291. PMFUL(JL,JK)=PLU(JL,JK)*PMFU(JL,JK)
  2292. PLUDE(JL,JK-1)=PMFUL(JL,JK)
  2293. PDMFUP(JL,JK)=0.
  2294. END IF
  2295. 530 CONTINUE
  2296. IF(LMFDUDV) THEN
  2297. DO 540 JL=1,KLON
  2298. IF(LDCUM(JL)) THEN
  2299. JK=KCTOP(JL)-1
  2300. PUU(JL,JK)=PUU(JL,JK+1)
  2301. PVU(JL,JK)=PVU(JL,JK+1)
  2302. END IF
  2303. 540 CONTINUE
  2304. END IF
  2305. 800 CONTINUE
  2306. RETURN
  2307. END SUBROUTINE CUASC_NEW
  2308. !
  2309. !**********************************************
  2310. ! SUBROUTINE CUDLFS
  2311. !**********************************************
  2312. SUBROUTINE CUDLFS &
  2313. (KLON, KLEV, KLEVP1, PTENH, PQENH, &
  2314. PUEN, PVEN, PGEOH, PAPH, PTU, &
  2315. PQU, PUU, PVU, LDCUM, KCBOT, &
  2316. KCTOP, PMFUB, PRFL, PTD, PQD, &
  2317. PUD, PVD, PMFD, PMFDS, PMFDQ, &
  2318. PDMFDP, KDTOP, LDDRAF)
  2319. ! THIS ROUTINE CALCULATES LEVEL OF FREE SINKING FOR
  2320. ! CUMULUS DOWNDRAFTS AND SPECIFIES T,Q,U AND V VALUES
  2321. ! M.TIEDTKE E.C.M.W.F. 12/86 MODIF. 12/89
  2322. !***PURPOSE.
  2323. ! --------
  2324. ! TO PRODUCE LFS-VALUES FOR CUMULUS DOWNDRAFTS
  2325. ! FOR MASSFLUX CUMULUS PARAMETERIZATION
  2326. !***INTERFACE
  2327. ! ---------
  2328. ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
  2329. ! INPUT ARE ENVIRONMENTAL VALUES OF T,Q,U,V,P,PHI
  2330. ! AND UPDRAFT VALUES T,Q,U AND V AND ALSO
  2331. ! CLOUD BASE MASSFLUX AND CU-PRECIPITATION RATE.
  2332. ! IT RETURNS T,Q,U AND V VALUES AND MASSFLUX AT LFS.
  2333. !***METHOD.
  2334. ! --------
  2335. ! CHECK FOR NEGATIVE BUOYANCY OF AIR OF EQUAL PARTS OF
  2336. ! MOIST ENVIRONMENTAL AIR AND CLOUD AIR.
  2337. !***EXTERNALS
  2338. ! ---------
  2339. ! *CUADJTQ* FOR CALCULATING WET BULB T AND Q AT LFS
  2340. ! ----------------------------------------------------------------
  2341. !-------------------------------------------------------------------
  2342. IMPLICIT NONE
  2343. !-------------------------------------------------------------------
  2344. INTEGER KLON, KLEV, KLEVP1
  2345. INTEGER JL,KE,JK,IS,IK,ICALL
  2346. REAL ZTTEST, ZQTEST, ZBUO, ZMFTOP
  2347. REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
  2348. PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
  2349. PGEOH(KLON,KLEV), PAPH(KLON,KLEVP1), &
  2350. PTU(KLON,KLEV), PQU(KLON,KLEV), &
  2351. PUU(KLON,KLEV), PVU(KLON,KLEV), &
  2352. PMFUB(KLON), PRFL(KLON)
  2353. REAL PTD(KLON,KLEV), PQD(KLON,KLEV), &
  2354. PUD(KLON,KLEV), PVD(KLON,KLEV), &
  2355. PMFD(KLON,KLEV), PMFDS(KLON,KLEV), &
  2356. PMFDQ(KLON,KLEV), PDMFDP(KLON,KLEV)
  2357. REAL ZTENWB(KLON,KLEV), ZQENWB(KLON,KLEV), &
  2358. ZCOND(KLON), ZPH(KLON)
  2359. INTEGER KCBOT(KLON), KCTOP(KLON), &
  2360. KDTOP(KLON)
  2361. LOGICAL LDCUM(KLON), LLo2(KLON), &
  2362. LDDRAF(KLON)
  2363. !-----------------------------------------------
  2364. ! 1. SET DEFAULT VALUES FOR DOWNDRAFTS
  2365. !-----------------------------------------------
  2366. 100 CONTINUE
  2367. DO 110 JL=1,KLON
  2368. LDDRAF(JL)=.FALSE.
  2369. KDTOP(JL)=KLEVP1
  2370. 110 CONTINUE
  2371. IF(.NOT.LMFDD) GO TO 300
  2372. !------------------------------------------------------------
  2373. ! 2. DETERMINE LEVEL OF FREE SINKING BY
  2374. ! DOING A SCAN FROM TOP TO BASE OF CUMULUS CLOUDS
  2375. ! FOR EVERY POINT AND PROCEED AS FOLLOWS:
  2376. ! (1) DETEMINE WET BULB ENVIRONMENTAL T AND Q
  2377. ! (2) DO MIXING WITH CUMULUS CLOUD AIR
  2378. ! (3) CHECK FOR NEGATIVE BUOYANCY
  2379. ! THE ASSUMPTION IS THAT AIR OF DOWNDRAFTS IS MIXTURE
  2380. ! OF 50% CLOUD AIR + 50% ENVIRONMENTAL AIR AT WET BULB
  2381. ! TEMPERATURE (I.E. WHICH BECAME SATURATED DUE TO
  2382. ! EVAPORATION OF RAIN AND CLOUD WATER)
  2383. !------------------------------------------------------------------
  2384. 200 CONTINUE
  2385. KE=KLEV-3
  2386. DO 290 JK=3,KE
  2387. ! 2.1 CALCULATE WET-BULB TEMPERATURE AND MOISTURE
  2388. ! FOR ENVIRONMENTAL AIR IN *CUADJTQ*
  2389. ! -----------------------------------------------------
  2390. 210 CONTINUE
  2391. IS=0
  2392. DO 212 JL=1,KLON
  2393. ZTENWB(JL,JK)=PTENH(JL,JK)
  2394. ZQENWB(JL,JK)=PQENH(JL,JK)
  2395. ZPH(JL)=PAPH(JL,JK)
  2396. LLO2(JL)=LDCUM(JL).AND.PRFL(JL).GT.0..AND..NOT.LDDRAF(JL).AND. &
  2397. (JK.LT.KCBOT(JL).AND.JK.GT.KCTOP(JL))
  2398. IF(LLO2(JL))THEN
  2399. IS=IS+1
  2400. ENDIF
  2401. 212 CONTINUE
  2402. IF(IS.EQ.0) GO TO 290
  2403. IK=JK
  2404. ICALL=2
  2405. CALL CUADJTQ(KLON,KLEV,IK,ZPH,ZTENWB,ZQENWB,LLO2,ICALL)
  2406. ! 2.2 DO MIXING OF CUMULUS AND ENVIRONMENTAL AIR
  2407. ! AND CHECK FOR NEGATIVE BUOYANCY.
  2408. ! THEN SET VALUES FOR DOWNDRAFT AT LFS.
  2409. ! -----------------------------------------------------
  2410. 220 CONTINUE
  2411. DO 222 JL=1,KLON
  2412. IF(LLO2(JL)) THEN
  2413. ZTTEST=0.5*(PTU(JL,JK)+ZTENWB(JL,JK))
  2414. ZQTEST=0.5*(PQU(JL,JK)+ZQENWB(JL,JK))
  2415. ZBUO=ZTTEST*(1.+VTMPC1*ZQTEST)- &
  2416. PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))
  2417. ZCOND(JL)=PQENH(JL,JK)-ZQENWB(JL,JK)
  2418. ZMFTOP=-CMFDEPS*PMFUB(JL)
  2419. IF(ZBUO.LT.0..AND.PRFL(JL).GT.10.*ZMFTOP*ZCOND(JL)) THEN
  2420. KDTOP(JL)=JK
  2421. LDDRAF(JL)=.TRUE.
  2422. PTD(JL,JK)=ZTTEST
  2423. PQD(JL,JK)=ZQTEST
  2424. PMFD(JL,JK)=ZMFTOP
  2425. PMFDS(JL,JK)=PMFD(JL,JK)*(CPD*PTD(JL,JK)+PGEOH(JL,JK))
  2426. PMFDQ(JL,JK)=PMFD(JL,JK)*PQD(JL,JK)
  2427. PDMFDP(JL,JK-1)=-0.5*PMFD(JL,JK)*ZCOND(JL)
  2428. PRFL(JL)=PRFL(JL)+PDMFDP(JL,JK-1)
  2429. END IF
  2430. END IF
  2431. 222 CONTINUE
  2432. IF(LMFDUDV) THEN
  2433. DO 224 JL=1,KLON
  2434. IF(PMFD(JL,JK).LT.0.) THEN
  2435. PUD(JL,JK)=0.5*(PUU(JL,JK)+PUEN(JL,JK-1))
  2436. PVD(JL,JK)=0.5*(PVU(JL,JK)+PVEN(JL,JK-1))
  2437. END IF
  2438. 224 CONTINUE
  2439. END IF
  2440. 290 CONTINUE
  2441. 300 CONTINUE
  2442. RETURN
  2443. END SUBROUTINE CUDLFS
  2444. !
  2445. !**********************************************
  2446. ! SUBROUTINE CUDDRAF
  2447. !**********************************************
  2448. SUBROUTINE CUDDRAF &
  2449. (KLON, KLEV, KLEVP1, PTENH, PQENH, &
  2450. PUEN, PVEN, PGEOH, PAPH, PRFL, &
  2451. LDDRAF, PTD, PQD, PUD, PVD, &
  2452. PMFD, PMFDS, PMFDQ, PDMFDP)
  2453. ! THIS ROUTINE CALCULATES CUMULUS DOWNDRAFT DESCENT
  2454. ! M.TIEDTKE E.C.M.W.F. 12/86 MODIF. 12/89
  2455. !***PURPOSE.
  2456. ! --------
  2457. ! TO PRODUCE THE VERTICAL PROFILES FOR CUMULUS DOWNDRAFTS
  2458. ! (I.E. T,Q,U AND V AND FLUXES)
  2459. !***INTERFACE
  2460. ! ---------
  2461. ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
  2462. ! INPUT IS T,Q,P,PHI,U,V AT HALF LEVELS.
  2463. ! IT RETURNS FLUXES OF S,Q AND EVAPORATION RATE
  2464. ! AND U,V AT LEVELS WHERE DOWNDRAFT OCCURS
  2465. !***METHOD.
  2466. ! --------
  2467. ! CALCULATE MOIST DESCENT FOR ENTRAINING/DETRAINING PLUME BY
  2468. ! A) MOVING AIR DRY-ADIABATICALLY TO NEXT LEVEL BELOW AND
  2469. ! B) CORRECTING FOR EVAPORATION TO OBTAIN SATURATED STATE.
  2470. !***EXTERNALS
  2471. ! ---------
  2472. ! *CUADJTQ* FOR ADJUSTING T AND Q DUE TO EVAPORATION IN
  2473. ! SATURATED DESCENT
  2474. !***REFERENCE
  2475. ! ---------
  2476. ! (TIEDTKE,1989)
  2477. ! ----------------------------------------------------------------
  2478. !-------------------------------------------------------------------
  2479. IMPLICIT NONE
  2480. !-------------------------------------------------------------------
  2481. INTEGER KLON, KLEV, KLEVP1
  2482. INTEGER JK,IS,JL,ITOPDE, IK, ICALL
  2483. REAL ZENTR,ZSEEN, ZQEEN, ZSDDE, ZQDDE,ZMFDSK, ZMFDQK
  2484. REAL ZBUO, ZDMFDP, ZMFDUK, ZMFDVK
  2485. REAL PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
  2486. PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
  2487. PGEOH(KLON,KLEV), PAPH(KLON,KLEVP1)
  2488. REAL PTD(KLON,KLEV), PQD(KLON,KLEV), &
  2489. PUD(KLON,KLEV), PVD(KLON,KLEV), &
  2490. PMFD(KLON,KLEV), PMFDS(KLON,KLEV), &
  2491. PMFDQ(KLON,KLEV), PDMFDP(KLON,KLEV), &
  2492. PRFL(KLON)
  2493. REAL ZDMFEN(KLON), ZDMFDE(KLON), &
  2494. ZCOND(KLON), ZPH(KLON)
  2495. LOGICAL LDDRAF(KLON), LLO2(KLON)
  2496. !--------------------------------------------------------------
  2497. ! 1. CALCULATE MOIST DESCENT FOR CUMULUS DOWNDRAFT BY
  2498. ! (A) CALCULATING ENTRAINMENT RATES, ASSUMING
  2499. ! LINEAR DECREASE OF MASSFLUX IN PBL
  2500. ! (B) DOING MOIST DESCENT - EVAPORATIVE COOLING
  2501. ! AND MOISTENING IS CALCULATED IN *CUADJTQ*
  2502. ! (C) CHECKING FOR NEGATIVE BUOYANCY AND
  2503. ! SPECIFYING FINAL T,Q,U,V AND DOWNWARD FLUXES
  2504. ! ----------------------------------------------------------------
  2505. 100 CONTINUE
  2506. DO 180 JK=3,KLEV
  2507. IS=0
  2508. DO 110 JL=1,KLON
  2509. ZPH(JL)=PAPH(JL,JK)
  2510. LLO2(JL)=LDDRAF(JL).AND.PMFD(JL,JK-1).LT.0.
  2511. IF(LLO2(JL)) THEN
  2512. IS=IS+1
  2513. ENDIF
  2514. 110 CONTINUE
  2515. IF(IS.EQ.0) GO TO 180
  2516. DO 122 JL=1,KLON
  2517. IF(LLO2(JL)) THEN
  2518. ZENTR=ENTRDD*PMFD(JL,JK-1)*RD*PTENH(JL,JK-1)/ &
  2519. (G*PAPH(JL,JK-1))*(PAPH(JL,JK)-PAPH(JL,JK-1))
  2520. ZDMFEN(JL)=ZENTR
  2521. ZDMFDE(JL)=ZENTR
  2522. END IF
  2523. 122 CONTINUE
  2524. ITOPDE=KLEV-2
  2525. IF(JK.GT.ITOPDE) THEN
  2526. DO 124 JL=1,KLON
  2527. IF(LLO2(JL)) THEN
  2528. ZDMFEN(JL)=0.
  2529. ZDMFDE(JL)=PMFD(JL,ITOPDE)* &
  2530. (PAPH(JL,JK)-PAPH(JL,JK-1))/ &
  2531. (PAPH(JL,KLEVP1)-PAPH(JL,ITOPDE))
  2532. END IF
  2533. 124 CONTINUE
  2534. END IF
  2535. DO 126 JL=1,KLON
  2536. IF(LLO2(JL)) THEN
  2537. PMFD(JL,JK)=PMFD(JL,JK-1)+ZDMFEN(JL)-ZDMFDE(JL)
  2538. ZSEEN=(CPD*PTENH(JL,JK-1)+PGEOH(JL,JK-1))*ZDMFEN(JL)
  2539. ZQEEN=PQENH(JL,JK-1)*ZDMFEN(JL)
  2540. ZSDDE=(CPD*PTD(JL,JK-1)+PGEOH(JL,JK-1))*ZDMFDE(JL)
  2541. ZQDDE=PQD(JL,JK-1)*ZDMFDE(JL)
  2542. ZMFDSK=PMFDS(JL,JK-1)+ZSEEN-ZSDDE
  2543. ZMFDQK=PMFDQ(JL,JK-1)+ZQEEN-ZQDDE
  2544. PQD(JL,JK)=ZMFDQK*(1./MIN(-CMFCMIN,PMFD(JL,JK)))
  2545. PTD(JL,JK)=(ZMFDSK*(1./MIN(-CMFCMIN,PMFD(JL,JK)))- &
  2546. PGEOH(JL,JK))*RCPD
  2547. PTD(JL,JK)=MIN(400.,PTD(JL,JK))
  2548. PTD(JL,JK)=MAX(100.,PTD(JL,JK))
  2549. ZCOND(JL)=PQD(JL,JK)
  2550. END IF
  2551. 126 CONTINUE
  2552. IK=JK
  2553. ICALL=2
  2554. CALL CUADJTQ(KLON,KLEV,IK,ZPH,PTD,PQD,LLO2,ICALL)
  2555. DO 150 JL=1,KLON
  2556. IF(LLO2(JL)) THEN
  2557. ZCOND(JL)=ZCOND(JL)-PQD(JL,JK)
  2558. ZBUO=PTD(JL,JK)*(1.+VTMPC1*PQD(JL,JK))- &
  2559. PTENH(JL,JK)*(1.+VTMPC1*PQENH(JL,JK))
  2560. IF(ZBUO.GE.0..OR.PRFL(JL).LE.(PMFD(JL,JK)*ZCOND(JL))) THEN
  2561. PMFD(JL,JK)=0.
  2562. ENDIF
  2563. PMFDS(JL,JK)=(CPD*PTD(JL,JK)+PGEOH(JL,JK))*PMFD(JL,JK)
  2564. PMFDQ(JL,JK)=PQD(JL,JK)*PMFD(JL,JK)
  2565. ZDMFDP=-PMFD(JL,JK)*ZCOND(JL)
  2566. PDMFDP(JL,JK-1)=ZDMFDP
  2567. PRFL(JL)=PRFL(JL)+ZDMFDP
  2568. END IF
  2569. 150 CONTINUE
  2570. IF(LMFDUDV) THEN
  2571. DO 160 JL=1,KLON
  2572. IF(LLO2(JL).AND.PMFD(JL,JK).LT.0.) THEN
  2573. ZMFDUK=PMFD(JL,JK-1)*PUD(JL,JK-1)+ &
  2574. ZDMFEN(JL)*PUEN(JL,JK-1)-ZDMFDE(JL)*PUD(JL,JK-1)
  2575. ZMFDVK=PMFD(JL,JK-1)*PVD(JL,JK-1)+ &
  2576. ZDMFEN(JL)*PVEN(JL,JK-1)-ZDMFDE(JL)*PVD(JL,JK-1)
  2577. PUD(JL,JK)=ZMFDUK*(1./MIN(-CMFCMIN,PMFD(JL,JK)))
  2578. PVD(JL,JK)=ZMFDVK*(1./MIN(-CMFCMIN,PMFD(JL,JK)))
  2579. END IF
  2580. 160 CONTINUE
  2581. END IF
  2582. 180 CONTINUE
  2583. RETURN
  2584. END SUBROUTINE CUDDRAF
  2585. !
  2586. !**********************************************
  2587. ! SUBROUTINE CUFLX
  2588. !**********************************************
  2589. SUBROUTINE CUFLX &
  2590. (KLON, KLEV, KLEVP1, PQEN, PQSEN, &
  2591. PTENH, PQENH, PAPH, PGEOH, KCBOT, &
  2592. KCTOP, KDTOP, KTYPE, LDDRAF, LDCUM, &
  2593. PMFU, PMFD, PMFUS, PMFDS, PMFUQ, &
  2594. PMFDQ, PMFUL, PLUDE, PDMFUP, PDMFDP, &
  2595. PRFL, PRAIN, PTEN, PSFL, PDPMEL, &
  2596. KTOPM2, ZTMST, sig1)
  2597. ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
  2598. !***PURPOSE
  2599. ! -------
  2600. ! THIS ROUTINE DOES THE FINAL CALCULATION OF CONVECTIVE
  2601. ! FLUXES IN THE CLOUD LAYER AND IN THE SUBCLOUD LAYER
  2602. !***INTERFACE
  2603. ! ---------
  2604. ! THIS ROUTINE IS CALLED FROM *CUMASTR*.
  2605. !***EXTERNALS
  2606. ! ---------
  2607. ! NONE
  2608. ! ----------------------------------------------------------------
  2609. !-------------------------------------------------------------------
  2610. IMPLICIT NONE
  2611. !-------------------------------------------------------------------
  2612. INTEGER KLON, KLEV, KLEVP1
  2613. INTEGER KTOPM2, ITOP, JL, JK, IKB
  2614. REAL ZTMST, ZCONS1, ZCONS2, ZCUCOV, ZTMELP2
  2615. REAL ZZP, ZFAC, ZSNMLT, ZRFL, CEVAPCU, ZRNEW
  2616. REAL ZRMIN, ZRFLN, ZDRFL, ZDPEVAP
  2617. REAL PQEN(KLON,KLEV), PQSEN(KLON,KLEV), &
  2618. PTENH(KLON,KLEV), PQENH(KLON,KLEV), &
  2619. PAPH(KLON,KLEVP1), PGEOH(KLON,KLEV)
  2620. REAL PMFU(KLON,KLEV), PMFD(KLON,KLEV), &
  2621. PMFUS(KLON,KLEV), PMFDS(KLON,KLEV), &
  2622. PMFUQ(KLON,KLEV), PMFDQ(KLON,KLEV), &
  2623. PDMFUP(KLON,KLEV), PDMFDP(KLON,KLEV), &
  2624. PMFUL(KLON,KLEV), PLUDE(KLON,KLEV), &
  2625. PRFL(KLON), PRAIN(KLON)
  2626. REAL PTEN(KLON,KLEV), PDPMEL(KLON,KLEV), &
  2627. PSFL(KLON), ZPSUBCL(KLON)
  2628. REAL sig1(KLEV)
  2629. INTEGER KCBOT(KLON), KCTOP(KLON), &
  2630. KDTOP(KLON), KTYPE(KLON)
  2631. LOGICAL LDDRAF(KLON), LDCUM(KLON)
  2632. !* SPECIFY CONSTANTS
  2633. ZCONS1=CPD/(ALF*G*ZTMST)
  2634. ZCONS2=1./(G*ZTMST)
  2635. ZCUCOV=0.05
  2636. ZTMELP2=TMELT+2.
  2637. !* 1.0 DETERMINE FINAL CONVECTIVE FLUXES
  2638. !---------------------------------------------
  2639. 100 CONTINUE
  2640. ITOP=KLEV
  2641. DO 110 JL=1,KLON
  2642. PRFL(JL)=0.
  2643. PSFL(JL)=0.
  2644. PRAIN(JL)=0.
  2645. ! SWITCH OFF SHALLOW CONVECTION
  2646. IF(.NOT.LMFSCV.AND.KTYPE(JL).EQ.2)THEN
  2647. LDCUM(JL)=.FALSE.
  2648. LDDRAF(JL)=.FALSE.
  2649. ENDIF
  2650. ITOP=MIN(ITOP,KCTOP(JL))
  2651. IF(.NOT.LDCUM(JL).OR.KDTOP(JL).LT.KCTOP(JL)) LDDRAF(JL)=.FALSE.
  2652. IF(.NOT.LDCUM(JL)) KTYPE(JL)=0
  2653. 110 CONTINUE
  2654. KTOPM2=ITOP-2
  2655. DO 120 JK=KTOPM2,KLEV
  2656. DO 115 JL=1,KLON
  2657. IF(LDCUM(JL).AND.JK.GE.KCTOP(JL)-1) THEN
  2658. PMFUS(JL,JK)=PMFUS(JL,JK)-PMFU(JL,JK)* &
  2659. (CPD*PTENH(JL,JK)+PGEOH(JL,JK))
  2660. PMFUQ(JL,JK)=PMFUQ(JL,JK)-PMFU(JL,JK)*PQENH(JL,JK)
  2661. IF(LDDRAF(JL).AND.JK.GE.KDTOP(JL)) THEN
  2662. PMFDS(JL,JK)=PMFDS(JL,JK)-PMFD(JL,JK)* &
  2663. (CPD*PTENH(JL,JK)+PGEOH(JL,JK))
  2664. PMFDQ(JL,JK)=PMFDQ(JL,JK)-PMFD(JL,JK)*PQENH(JL,JK)
  2665. ELSE
  2666. PMFD(JL,JK)=0.
  2667. PMFDS(JL,JK)=0.
  2668. PMFDQ(JL,JK)=0.
  2669. PDMFDP(JL,JK-1)=0.
  2670. END IF
  2671. ELSE
  2672. PMFU(JL,JK)=0.
  2673. PMFD(JL,JK)=0.
  2674. PMFUS(JL,JK)=0.
  2675. PMFDS(JL,JK)=0.
  2676. PMFUQ(JL,JK)=0.
  2677. PMFDQ(JL,JK)=0.
  2678. PMFUL(JL,JK)=0.
  2679. PDMFUP(JL,JK-1)=0.
  2680. PDMFDP(JL,JK-1)=0.
  2681. PLUDE(JL,JK-1)=0.
  2682. END IF
  2683. 115 CONTINUE
  2684. 120 CONTINUE
  2685. DO 130 JK=KTOPM2,KLEV
  2686. DO 125 JL=1,KLON
  2687. IF(LDCUM(JL).AND.JK.GT.KCBOT(JL)) THEN
  2688. IKB=KCBOT(JL)
  2689. ZZP=((PAPH(JL,KLEVP1)-PAPH(JL,JK))/ &
  2690. (PAPH(JL,KLEVP1)-PAPH(JL,IKB)))
  2691. IF(KTYPE(JL).EQ.3) THEN
  2692. ZZP=ZZP**2
  2693. ENDIF
  2694. PMFU(JL,JK)=PMFU(JL,IKB)*ZZP
  2695. PMFUS(JL,JK)=PMFUS(JL,IKB)*ZZP
  2696. PMFUQ(JL,JK)=PMFUQ(JL,IKB)*ZZP
  2697. PMFUL(JL,JK)=PMFUL(JL,IKB)*ZZP
  2698. END IF
  2699. !* 2. CALCULATE RAIN/SNOW FALL RATES
  2700. !* CALCULATE MELTING OF SNOW
  2701. !* CALCULATE EVAPORATION OF PRECIP
  2702. !----------------------------------------------
  2703. IF(LDCUM(JL)) THEN
  2704. PRAIN(JL)=PRAIN(JL)+PDMFUP(JL,JK)
  2705. IF(PTEN(JL,JK).GT.TMELT) THEN
  2706. PRFL(JL)=PRFL(JL)+PDMFUP(JL,JK)+PDMFDP(JL,JK)
  2707. IF(PSFL(JL).GT.0..AND.PTEN(JL,JK).GT.ZTMELP2) THEN
  2708. ZFAC=ZCONS1*(PAPH(JL,JK+1)-PAPH(JL,JK))
  2709. ZSNMLT=MIN(PSFL(JL),ZFAC*(PTEN(JL,JK)-ZTMELP2))
  2710. PDPMEL(JL,JK)=ZSNMLT
  2711. PSFL(JL)=PSFL(JL)-ZSNMLT
  2712. PRFL(JL)=PRFL(JL)+ZSNMLT
  2713. END IF
  2714. ELSE
  2715. PSFL(JL)=PSFL(JL)+PDMFUP(JL,JK)+PDMFDP(JL,JK)
  2716. END IF
  2717. END IF
  2718. 125 CONTINUE
  2719. 130 CONTINUE
  2720. DO 230 JL=1,KLON
  2721. PRFL(JL)=MAX(PRFL(JL),0.)
  2722. PSFL(JL)=MAX(PSFL(JL),0.)
  2723. ZPSUBCL(JL)=PRFL(JL)+PSFL(JL)
  2724. 230 CONTINUE
  2725. DO 240 JK=KTOPM2,KLEV
  2726. DO 235 JL=1,KLON
  2727. IF(LDCUM(JL).AND.JK.GE.KCBOT(JL).AND. &
  2728. ZPSUBCL(JL).GT.1.E-20) THEN
  2729. ZRFL=ZPSUBCL(JL)
  2730. CEVAPCU=CEVAPCU1*SQRT(CEVAPCU2*SQRT(sig1(JK)))
  2731. ZRNEW=(MAX(0.,SQRT(ZRFL/ZCUCOV)- &
  2732. CEVAPCU*(PAPH(JL,JK+1)-PAPH(JL,JK))* &
  2733. MAX(0.,PQSEN(JL,JK)-PQEN(JL,JK))))**2*ZCUCOV
  2734. ZRMIN=ZRFL-ZCUCOV*MAX(0.,0.8*PQSEN(JL,JK)-PQEN(JL,JK)) &
  2735. *ZCONS2*(PAPH(JL,JK+1)-PAPH(JL,JK))
  2736. ZRNEW=MAX(ZRNEW,ZRMIN)
  2737. ZRFLN=MAX(ZRNEW,0.)
  2738. ZDRFL=MIN(0.,ZRFLN-ZRFL)
  2739. PDMFUP(JL,JK)=PDMFUP(JL,JK)+ZDRFL
  2740. ZPSUBCL(JL)=ZRFLN
  2741. END IF
  2742. 235 CONTINUE
  2743. 240 CONTINUE
  2744. DO 250 JL=1,KLON
  2745. ZDPEVAP=ZPSUBCL(JL)-(PRFL(JL)+PSFL(JL))
  2746. PRFL(JL)=PRFL(JL)+ZDPEVAP*PRFL(JL)* &
  2747. (1./MAX(1.E-20,PRFL(JL)+PSFL(JL)))
  2748. PSFL(JL)=PSFL(JL)+ZDPEVAP*PSFL(JL)* &
  2749. (1./MAX(1.E-20,PRFL(JL)+PSFL(JL)))
  2750. 250 CONTINUE
  2751. RETURN
  2752. END SUBROUTINE CUFLX
  2753. !
  2754. !**********************************************
  2755. ! SUBROUTINE CUDTDQ
  2756. !**********************************************
  2757. SUBROUTINE CUDTDQ &
  2758. (KLON, KLEV, KLEVP1, KTOPM2, PAPH, &
  2759. LDCUM, PTEN, PTTE, PQTE, PMFUS, &
  2760. PMFDS, PMFUQ, PMFDQ, PMFUL, PDMFUP, &
  2761. PDMFDP, ZTMST, PDPMEL, PRAIN, PRFL, &
  2762. PSFL, PSRAIN, PSEVAP, PSHEAT, PSMELT, &
  2763. PRSFC, PSSFC, PAPRC, PAPRSM, PAPRS, &
  2764. PQEN, PQSEN, PLUDE, PCTE)
  2765. !**** *CUDTDQ* - UPDATES T AND Q TENDENCIES, PRECIPITATION RATES
  2766. ! DOES GLOBAL DIAGNOSTICS
  2767. ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
  2768. !***INTERFACE.
  2769. ! ----------
  2770. ! *CUDTDQ* IS CALLED FROM *CUMASTR*
  2771. ! ----------------------------------------------------------------
  2772. !-------------------------------------------------------------------
  2773. IMPLICIT NONE
  2774. !-------------------------------------------------------------------
  2775. INTEGER KLON, KLEV, KLEVP1
  2776. INTEGER KTOPM2,JL, JK
  2777. REAL ZTMST, PSRAIN, PSEVAP, PSHEAT, PSMELT, ZDIAGT, ZDIAGW
  2778. REAL ZALV, RHK, RHCOE, PLDFD, ZDTDT, ZDQDT
  2779. REAL PTTE(KLON,KLEV), PQTE(KLON,KLEV), &
  2780. PTEN(KLON,KLEV), PLUDE(KLON,KLEV), &
  2781. PGEO(KLON,KLEV), PAPH(KLON,KLEVP1), &
  2782. PAPRC(KLON), PAPRS(KLON), &
  2783. PAPRSM(KLON), PCTE(KLON,KLEV), &
  2784. PRSFC(KLON), PSSFC(KLON)
  2785. REAL PMFUS(KLON,KLEV), PMFDS(KLON,KLEV), &
  2786. PMFUQ(KLON,KLEV), PMFDQ(KLON,KLEV), &
  2787. PMFUL(KLON,KLEV), PQSEN(KLON,KLEV), &
  2788. PDMFUP(KLON,KLEV), PDMFDP(KLON,KLEV),&
  2789. PRFL(KLON), PRAIN(KLON), &
  2790. PQEN(KLON,KLEV)
  2791. REAL PDPMEL(KLON,KLEV), PSFL(KLON)
  2792. REAL ZSHEAT(KLON), ZMELT(KLON)
  2793. LOGICAL LDCUM(KLON)
  2794. !--------------------------------
  2795. !* 1.0 SPECIFY PARAMETERS
  2796. !--------------------------------
  2797. 100 CONTINUE
  2798. ZDIAGT=ZTMST
  2799. ZDIAGW=ZDIAGT/RHOH2O
  2800. !--------------------------------------------------
  2801. !* 2.0 INCREMENTATION OF T AND Q TENDENCIES
  2802. !--------------------------------------------------
  2803. 200 CONTINUE
  2804. DO 210 JL=1,KLON
  2805. ZMELT(JL)=0.
  2806. ZSHEAT(JL)=0.
  2807. 210 CONTINUE
  2808. DO 250 JK=KTOPM2,KLEV
  2809. IF(JK.LT.KLEV) THEN
  2810. DO 220 JL=1,KLON
  2811. IF(LDCUM(JL)) THEN
  2812. IF(PTEN(JL,JK).GT.TMELT) THEN
  2813. ZALV=ALV
  2814. ELSE
  2815. ZALV=ALS
  2816. ENDIF
  2817. RHK=MIN(1.0,PQEN(JL,JK)/PQSEN(JL,JK))
  2818. RHCOE=MAX(0.0,(RHK-RHC)/(RHM-RHC))
  2819. pldfd=MAX(0.0,RHCOE*fdbk*PLUDE(JL,JK))
  2820. ZDTDT=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*RCPD* &
  2821. (PMFUS(JL,JK+1)-PMFUS(JL,JK)+ &
  2822. PMFDS(JL,JK+1)-PMFDS(JL,JK)-ALF*PDPMEL(JL,JK) &
  2823. -ZALV*(PMFUL(JL,JK+1)-PMFUL(JL,JK)-pldfd- &
  2824. (PDMFUP(JL,JK)+PDMFDP(JL,JK))))
  2825. PTTE(JL,JK)=PTTE(JL,JK)+ZDTDT
  2826. ZDQDT=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*&
  2827. (PMFUQ(JL,JK+1)-PMFUQ(JL,JK)+ &
  2828. PMFDQ(JL,JK+1)-PMFDQ(JL,JK)+ &
  2829. PMFUL(JL,JK+1)-PMFUL(JL,JK)-pldfd- &
  2830. (PDMFUP(JL,JK)+PDMFDP(JL,JK)))
  2831. PQTE(JL,JK)=PQTE(JL,JK)+ZDQDT
  2832. PCTE(JL,JK)=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*pldfd
  2833. ZSHEAT(JL)=ZSHEAT(JL)+ZALV*(PDMFUP(JL,JK)+PDMFDP(JL,JK))
  2834. ZMELT(JL)=ZMELT(JL)+PDPMEL(JL,JK)
  2835. END IF
  2836. 220 CONTINUE
  2837. ELSE
  2838. DO 230 JL=1,KLON
  2839. IF(LDCUM(JL)) THEN
  2840. IF(PTEN(JL,JK).GT.TMELT) THEN
  2841. ZALV=ALV
  2842. ELSE
  2843. ZALV=ALS
  2844. ENDIF
  2845. RHK=MIN(1.0,PQEN(JL,JK)/PQSEN(JL,JK))
  2846. RHCOE=MAX(0.0,(RHK-RHC)/(RHM-RHC))
  2847. pldfd=MAX(0.0,RHCOE*fdbk*PLUDE(JL,JK))
  2848. ZDTDT=-(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*RCPD* &
  2849. (PMFUS(JL,JK)+PMFDS(JL,JK)+ALF*PDPMEL(JL,JK)-ZALV* &
  2850. (PMFUL(JL,JK)+PDMFUP(JL,JK)+PDMFDP(JL,JK)+pldfd))
  2851. PTTE(JL,JK)=PTTE(JL,JK)+ZDTDT
  2852. ZDQDT=-(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
  2853. (PMFUQ(JL,JK)+PMFDQ(JL,JK)+pldfd+ &
  2854. (PMFUL(JL,JK)+PDMFUP(JL,JK)+PDMFDP(JL,JK)))
  2855. PQTE(JL,JK)=PQTE(JL,JK)+ZDQDT
  2856. PCTE(JL,JK)=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))*pldfd
  2857. ZSHEAT(JL)=ZSHEAT(JL)+ZALV*(PDMFUP(JL,JK)+PDMFDP(JL,JK))
  2858. ZMELT(JL)=ZMELT(JL)+PDPMEL(JL,JK)
  2859. END IF
  2860. 230 CONTINUE
  2861. END IF
  2862. 250 CONTINUE
  2863. !---------------------------------------------------------
  2864. ! 3. UPDATE SURFACE FIELDS AND DO GLOBAL BUDGETS
  2865. !---------------------------------------------------------
  2866. 300 CONTINUE
  2867. DO 310 JL=1,KLON
  2868. PRSFC(JL)=PRFL(JL)
  2869. PSSFC(JL)=PSFL(JL)
  2870. PAPRC(JL)=PAPRC(JL)+ZDIAGW*(PRFL(JL)+PSFL(JL))
  2871. PAPRS(JL)=PAPRSM(JL)+ZDIAGW*PSFL(JL)
  2872. PSHEAT=PSHEAT+ZSHEAT(JL)
  2873. PSRAIN=PSRAIN+PRAIN(JL)
  2874. PSEVAP=PSEVAP-(PRFL(JL)+PSFL(JL))
  2875. PSMELT=PSMELT+ZMELT(JL)
  2876. 310 CONTINUE
  2877. PSEVAP=PSEVAP+PSRAIN
  2878. RETURN
  2879. END SUBROUTINE CUDTDQ
  2880. !
  2881. !**********************************************
  2882. ! SUBROUTINE CUDUDV
  2883. !**********************************************
  2884. SUBROUTINE CUDUDV &
  2885. (KLON, KLEV, KLEVP1, KTOPM2, KTYPE, &
  2886. KCBOT, PAPH, LDCUM, PUEN, PVEN, &
  2887. PVOM, PVOL, PUU, PUD, PVU, &
  2888. PVD, PMFU, PMFD, PSDISS)
  2889. !**** *CUDUDV* - UPDATES U AND V TENDENCIES,
  2890. ! DOES GLOBAL DIAGNOSTIC OF DISSIPATION
  2891. ! M.TIEDTKE E.C.M.W.F. 7/86 MODIF. 12/89
  2892. !***INTERFACE.
  2893. ! ----------
  2894. ! *CUDUDV* IS CALLED FROM *CUMASTR*
  2895. ! ----------------------------------------------------------------
  2896. !-------------------------------------------------------------------
  2897. IMPLICIT NONE
  2898. !-------------------------------------------------------------------
  2899. INTEGER KLON, KLEV, KLEVP1
  2900. INTEGER KTOPM2, JK, IK, JL, IKB
  2901. REAL PSDISS,ZZP, ZDUDT ,ZDVDT, ZSUM
  2902. REAL PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
  2903. PVOL(KLON,KLEV), PVOM(KLON,KLEV), &
  2904. PAPH(KLON,KLEVP1)
  2905. REAL PUU(KLON,KLEV), PUD(KLON,KLEV), &
  2906. PVU(KLON,KLEV), PVD(KLON,KLEV), &
  2907. PMFU(KLON,KLEV), PMFD(KLON,KLEV)
  2908. REAL ZMFUU(KLON,KLEV), ZMFDU(KLON,KLEV), &
  2909. ZMFUV(KLON,KLEV), ZMFDV(KLON,KLEV), &
  2910. ZDISS(KLON)
  2911. INTEGER KTYPE(KLON), KCBOT(KLON)
  2912. LOGICAL LDCUM(KLON)
  2913. !------------------------------------------------------------
  2914. !* 1.0 CALCULATE FLUXES AND UPDATE U AND V TENDENCIES
  2915. ! -----------------------------------------------------------
  2916. 100 CONTINUE
  2917. DO 120 JK=KTOPM2,KLEV
  2918. IK=JK-1
  2919. DO 110 JL=1,KLON
  2920. IF(LDCUM(JL)) THEN
  2921. ZMFUU(JL,JK)=PMFU(JL,JK)*(PUU(JL,JK)-PUEN(JL,IK))
  2922. ZMFUV(JL,JK)=PMFU(JL,JK)*(PVU(JL,JK)-PVEN(JL,IK))
  2923. ZMFDU(JL,JK)=PMFD(JL,JK)*(PUD(JL,JK)-PUEN(JL,IK))
  2924. ZMFDV(JL,JK)=PMFD(JL,JK)*(PVD(JL,JK)-PVEN(JL,IK))
  2925. END IF
  2926. 110 CONTINUE
  2927. 120 CONTINUE
  2928. DO 140 JK=KTOPM2,KLEV
  2929. DO 130 JL=1,KLON
  2930. IF(LDCUM(JL).AND.JK.GT.KCBOT(JL)) THEN
  2931. IKB=KCBOT(JL)
  2932. ZZP=((PAPH(JL,KLEVP1)-PAPH(JL,JK))/ &
  2933. (PAPH(JL,KLEVP1)-PAPH(JL,IKB)))
  2934. IF(KTYPE(JL).EQ.3) THEN
  2935. ZZP=ZZP**2
  2936. ENDIF
  2937. ZMFUU(JL,JK)=ZMFUU(JL,IKB)*ZZP
  2938. ZMFUV(JL,JK)=ZMFUV(JL,IKB)*ZZP
  2939. ZMFDU(JL,JK)=ZMFDU(JL,IKB)*ZZP
  2940. ZMFDV(JL,JK)=ZMFDV(JL,IKB)*ZZP
  2941. END IF
  2942. 130 CONTINUE
  2943. 140 CONTINUE
  2944. DO 150 JL=1,KLON
  2945. ZDISS(JL)=0.
  2946. 150 CONTINUE
  2947. DO 190 JK=KTOPM2,KLEV
  2948. IF(JK.LT.KLEV) THEN
  2949. DO 160 JL=1,KLON
  2950. IF(LDCUM(JL)) THEN
  2951. ZDUDT=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
  2952. (ZMFUU(JL,JK+1)-ZMFUU(JL,JK)+ &
  2953. ZMFDU(JL,JK+1)-ZMFDU(JL,JK))
  2954. ZDVDT=(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
  2955. (ZMFUV(JL,JK+1)-ZMFUV(JL,JK)+ &
  2956. ZMFDV(JL,JK+1)-ZMFDV(JL,JK))
  2957. ZDISS(JL)=ZDISS(JL)+ &
  2958. PUEN(JL,JK)*(ZMFUU(JL,JK+1)-ZMFUU(JL,JK)+ &
  2959. ZMFDU(JL,JK+1)-ZMFDU(JL,JK))+ &
  2960. PVEN(JL,JK)*(ZMFUV(JL,JK+1)-ZMFUV(JL,JK)+ &
  2961. ZMFDV(JL,JK+1)-ZMFDV(JL,JK))
  2962. PVOM(JL,JK)=PVOM(JL,JK)+ZDUDT
  2963. PVOL(JL,JK)=PVOL(JL,JK)+ZDVDT
  2964. END IF
  2965. 160 CONTINUE
  2966. ELSE
  2967. DO 170 JL=1,KLON
  2968. IF(LDCUM(JL)) THEN
  2969. ZDUDT=-(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
  2970. (ZMFUU(JL,JK)+ZMFDU(JL,JK))
  2971. ZDVDT=-(G/(PAPH(JL,JK+1)-PAPH(JL,JK)))* &
  2972. (ZMFUV(JL,JK)+ZMFDV(JL,JK))
  2973. ZDISS(JL)=ZDISS(JL)- &
  2974. (PUEN(JL,JK)*(ZMFUU(JL,JK)+ZMFDU(JL,JK))+ &
  2975. PVEN(JL,JK)*(ZMFUV(JL,JK)+ZMFDV(JL,JK)))
  2976. PVOM(JL,JK)=PVOM(JL,JK)+ZDUDT
  2977. PVOL(JL,JK)=PVOL(JL,JK)+ZDVDT
  2978. END IF
  2979. 170 CONTINUE
  2980. END IF
  2981. 190 CONTINUE
  2982. ZSUM=SSUM(KLON,ZDISS(1),1)
  2983. PSDISS=PSDISS+ZSUM
  2984. RETURN
  2985. END SUBROUTINE CUDUDV
  2986. !
  2987. !#################################################################
  2988. !
  2989. ! LEVEL 4 SUBROUTINES
  2990. !
  2991. !#################################################################
  2992. !**************************************************************
  2993. ! SUBROUTINE CUBASMC
  2994. !**************************************************************
  2995. SUBROUTINE CUBASMC &
  2996. (KLON, KLEV, KLEVM1, KK, PTEN, &
  2997. PQEN, PQSEN, PUEN, PVEN, PVERV, &
  2998. PGEO, PGEOH, LDCUM, KTYPE, KLAB, &
  2999. PMFU, PMFUB, PENTR, KCBOT, PTU, &
  3000. PQU, PLU, PUU, PVU, PMFUS, &
  3001. PMFUQ, PMFUL, PDMFUP, PMFUU, PMFUV)
  3002. ! M.TIEDTKE E.C.M.W.F. 12/89
  3003. !***PURPOSE.
  3004. ! --------
  3005. ! THIS ROUTINE CALCULATES CLOUD BASE VALUES
  3006. ! FOR MIDLEVEL CONVECTION
  3007. !***INTERFACE
  3008. ! ---------
  3009. ! THIS ROUTINE IS CALLED FROM *CUASC*.
  3010. ! INPUT ARE ENVIRONMENTAL VALUES T,Q ETC
  3011. ! IT RETURNS CLOUDBASE VALUES FOR MIDLEVEL CONVECTION
  3012. !***METHOD.
  3013. ! -------
  3014. ! S. TIEDTKE (1989)
  3015. !***EXTERNALS
  3016. ! ---------
  3017. ! NONE
  3018. ! ----------------------------------------------------------------
  3019. !-------------------------------------------------------------------
  3020. IMPLICIT NONE
  3021. !-------------------------------------------------------------------
  3022. INTEGER KLON, KLEV, KLEVP1
  3023. INTEGER KLEVM1,KK, JL
  3024. REAL zzzmb
  3025. REAL PTEN(KLON,KLEV), PQEN(KLON,KLEV), &
  3026. PUEN(KLON,KLEV), PVEN(KLON,KLEV), &
  3027. PQSEN(KLON,KLEV), PVERV(KLON,KLEV), &
  3028. PGEO(KLON,KLEV), PGEOH(KLON,KLEV)
  3029. REAL PTU(KLON,KLEV), PQU(KLON,KLEV), &
  3030. PUU(KLON,KLEV), PVU(KLON,KLEV), &
  3031. PLU(KLON,KLEV), PMFU(KLON,KLEV), &
  3032. PMFUB(KLON), PENTR(KLON), &
  3033. PMFUS(KLON,KLEV), PMFUQ(KLON,KLEV), &
  3034. PMFUL(KLON,KLEV), PDMFUP(KLON,KLEV), &
  3035. PMFUU(KLON), PMFUV(KLON)
  3036. INTEGER KTYPE(KLON), KCBOT(KLON), &
  3037. KLAB(KLON,KLEV)
  3038. LOGICAL LDCUM(KLON)
  3039. !--------------------------------------------------------
  3040. !* 1. CALCULATE ENTRAINMENT AND DETRAINMENT RATES
  3041. ! -------------------------------------------------------
  3042. 100 CONTINUE
  3043. DO 150 JL=1,KLON
  3044. IF( .NOT. LDCUM(JL).AND.KLAB(JL,KK+1).EQ.0.0.AND. &
  3045. PQEN(JL,KK).GT.0.80*PQSEN(JL,KK)) THEN
  3046. PTU(JL,KK+1)=(CPD*PTEN(JL,KK)+PGEO(JL,KK)-PGEOH(JL,KK+1)) &
  3047. *RCPD
  3048. PQU(JL,KK+1)=PQEN(JL,KK)
  3049. PLU(JL,KK+1)=0.
  3050. ZZZMB=MAX(CMFCMIN,-PVERV(JL,KK)/G)
  3051. ZZZMB=MIN(ZZZMB,CMFCMAX)
  3052. PMFUB(JL)=ZZZMB
  3053. PMFU(JL,KK+1)=PMFUB(JL)
  3054. PMFUS(JL,KK+1)=PMFUB(JL)*(CPD*PTU(JL,KK+1)+PGEOH(JL,KK+1))
  3055. PMFUQ(JL,KK+1)=PMFUB(JL)*PQU(JL,KK+1)
  3056. PMFUL(JL,KK+1)=0.
  3057. PDMFUP(JL,KK+1)=0.
  3058. KCBOT(JL)=KK
  3059. KLAB(JL,KK+1)=1
  3060. KTYPE(JL)=3
  3061. PENTR(JL)=ENTRMID
  3062. IF(LMFDUDV) THEN
  3063. PUU(JL,KK+1)=PUEN(JL,KK)
  3064. PVU(JL,KK+1)=PVEN(JL,KK)
  3065. PMFUU(JL)=PMFUB(JL)*PUU(JL,KK+1)
  3066. PMFUV(JL)=PMFUB(JL)*PVU(JL,KK+1)
  3067. END IF
  3068. END IF
  3069. 150 CONTINUE
  3070. RETURN
  3071. END SUBROUTINE CUBASMC
  3072. !
  3073. !**************************************************************
  3074. ! SUBROUTINE CUADJTQ
  3075. !**************************************************************
  3076. SUBROUTINE CUADJTQ(KLON,KLEV,KK,PP,PT,PQ,LDFLAG,KCALL)
  3077. ! M.TIEDTKE E.C.M.W.F. 12/89
  3078. ! D.SALMOND CRAY(UK)) 12/8/91
  3079. !***PURPOSE.
  3080. ! --------
  3081. ! TO PRODUCE T,Q AND L VALUES FOR CLOUD ASCENT
  3082. !***INTERFACE
  3083. ! ---------
  3084. ! THIS ROUTINE IS CALLED FROM SUBROUTINES:
  3085. ! *CUBASE* (T AND Q AT CONDENSTION LEVEL)
  3086. ! *CUASC* (T AND Q AT CLOUD LEVELS)
  3087. ! *CUINI* (ENVIRONMENTAL T AND QS VALUES AT HALF LEVELS)
  3088. ! INPUT ARE UNADJUSTED T AND Q VALUES,
  3089. ! IT RETURNS ADJUSTED VALUES OF T AND Q
  3090. ! NOTE: INPUT PARAMETER KCALL DEFINES CALCULATION AS
  3091. ! KCALL=0 ENV. T AND QS IN*CUINI*
  3092. ! KCALL=1 CONDENSATION IN UPDRAFTS (E.G. CUBASE, CUASC)
  3093. ! KCALL=2 EVAPORATION IN DOWNDRAFTS (E.G. CUDLFS,CUDDRAF
  3094. !***EXTERNALS
  3095. ! ---------
  3096. ! 3 LOOKUP TABLES ( TLUCUA, TLUCUB, TLUCUC )
  3097. ! FOR CONDENSATION CALCULATIONS.
  3098. ! THE TABLES ARE INITIALISED IN *SETPHYS*.
  3099. ! ----------------------------------------------------------------
  3100. !-------------------------------------------------------------------
  3101. IMPLICIT NONE
  3102. !-------------------------------------------------------------------
  3103. INTEGER KLON, KLEV
  3104. INTEGER KK, KCALL, ISUM, JL
  3105. REAL ZQSAT, ZCOR, ZCOND1, TT
  3106. REAL PT(KLON,KLEV), PQ(KLON,KLEV), &
  3107. ZCOND(KLON), ZQP(KLON), &
  3108. PP(KLON)
  3109. LOGICAL LDFLAG(KLON)
  3110. !------------------------------------------------------------------
  3111. ! 2. CALCULATE CONDENSATION AND ADJUST T AND Q ACCORDINGLY
  3112. !------------------------------------------------------------------
  3113. 200 CONTINUE
  3114. IF (KCALL.EQ.1 ) THEN
  3115. ISUM=0
  3116. DO 210 JL=1,KLON
  3117. ZCOND(JL)=0.
  3118. IF(LDFLAG(JL)) THEN
  3119. ZQP(JL)=1./PP(JL)
  3120. TT=PT(JL,KK)
  3121. ZQSAT=TLUCUA(TT)*ZQP(JL)
  3122. ZQSAT=MIN(0.5,ZQSAT)
  3123. ZCOR=1./(1.-VTMPC1*ZQSAT)
  3124. ZQSAT=ZQSAT*ZCOR
  3125. ZCOND(JL)=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
  3126. ZCOND(JL)=MAX(ZCOND(JL),0.)
  3127. PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND(JL)
  3128. PQ(JL,KK)=PQ(JL,KK)-ZCOND(JL)
  3129. IF(ZCOND(JL).NE.0.0) ISUM=ISUM+1
  3130. END IF
  3131. 210 CONTINUE
  3132. IF(ISUM.EQ.0) GO TO 230
  3133. DO 220 JL=1,KLON
  3134. IF(LDFLAG(JL).AND.ZCOND(JL).NE.0.) THEN
  3135. TT=PT(JL,KK)
  3136. ZQSAT=TLUCUA(TT)*ZQP(JL)
  3137. ZQSAT=MIN(0.5,ZQSAT)
  3138. ZCOR=1./(1.-VTMPC1*ZQSAT)
  3139. ZQSAT=ZQSAT*ZCOR
  3140. ZCOND1=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
  3141. PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND1
  3142. PQ(JL,KK)=PQ(JL,KK)-ZCOND1
  3143. END IF
  3144. 220 CONTINUE
  3145. 230 CONTINUE
  3146. END IF
  3147. IF(KCALL.EQ.2) THEN
  3148. ISUM=0
  3149. DO 310 JL=1,KLON
  3150. ZCOND(JL)=0.
  3151. IF(LDFLAG(JL)) THEN
  3152. TT=PT(JL,KK)
  3153. ZQP(JL)=1./PP(JL)
  3154. ZQSAT=TLUCUA(TT)*ZQP(JL)
  3155. ZQSAT=MIN(0.5,ZQSAT)
  3156. ZCOR=1./(1.-VTMPC1*ZQSAT)
  3157. ZQSAT=ZQSAT*ZCOR
  3158. ZCOND(JL)=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
  3159. ZCOND(JL)=MIN(ZCOND(JL),0.)
  3160. PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND(JL)
  3161. PQ(JL,KK)=PQ(JL,KK)-ZCOND(JL)
  3162. IF(ZCOND(JL).NE.0.0) ISUM=ISUM+1
  3163. END IF
  3164. 310 CONTINUE
  3165. IF(ISUM.EQ.0) GO TO 330
  3166. DO 320 JL=1,KLON
  3167. IF(LDFLAG(JL).AND.ZCOND(JL).NE.0.) THEN
  3168. TT=PT(JL,KK)
  3169. ZQSAT=TLUCUA(TT)*ZQP(JL)
  3170. ZQSAT=MIN(0.5,ZQSAT)
  3171. ZCOR=1./(1.-VTMPC1*ZQSAT)
  3172. ZQSAT=ZQSAT*ZCOR
  3173. ZCOND1=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
  3174. PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND1
  3175. PQ(JL,KK)=PQ(JL,KK)-ZCOND1
  3176. END IF
  3177. 320 CONTINUE
  3178. 330 CONTINUE
  3179. END IF
  3180. IF(KCALL.EQ.0) THEN
  3181. ISUM=0
  3182. DO 410 JL=1,KLON
  3183. TT=PT(JL,KK)
  3184. ZQP(JL)=1./PP(JL)
  3185. ZQSAT=TLUCUA(TT)*ZQP(JL)
  3186. ZQSAT=MIN(0.5,ZQSAT)
  3187. ZCOR=1./(1.-VTMPC1*ZQSAT)
  3188. ZQSAT=ZQSAT*ZCOR
  3189. ZCOND(JL)=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
  3190. PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND(JL)
  3191. PQ(JL,KK)=PQ(JL,KK)-ZCOND(JL)
  3192. IF(ZCOND(JL).NE.0.0) ISUM=ISUM+1
  3193. 410 CONTINUE
  3194. IF(ISUM.EQ.0) GO TO 430
  3195. DO 420 JL=1,KLON
  3196. TT=PT(JL,KK)
  3197. ZQSAT=TLUCUA(TT)*ZQP(JL)
  3198. ZQSAT=MIN(0.5,ZQSAT)
  3199. ZCOR=1./(1.-VTMPC1*ZQSAT)
  3200. ZQSAT=ZQSAT*ZCOR
  3201. ZCOND1=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
  3202. PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND1
  3203. PQ(JL,KK)=PQ(JL,KK)-ZCOND1
  3204. 420 CONTINUE
  3205. 430 CONTINUE
  3206. END IF
  3207. IF(KCALL.EQ.4) THEN
  3208. DO 510 JL=1,KLON
  3209. TT=PT(JL,KK)
  3210. ZQP(JL)=1./PP(JL)
  3211. ZQSAT=TLUCUA(TT)*ZQP(JL)
  3212. ZQSAT=MIN(0.5,ZQSAT)
  3213. ZCOR=1./(1.-VTMPC1*ZQSAT)
  3214. ZQSAT=ZQSAT*ZCOR
  3215. ZCOND(JL)=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
  3216. PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND(JL)
  3217. PQ(JL,KK)=PQ(JL,KK)-ZCOND(JL)
  3218. 510 CONTINUE
  3219. DO 520 JL=1,KLON
  3220. TT=PT(JL,KK)
  3221. ZQSAT=TLUCUA(TT)*ZQP(JL)
  3222. ZQSAT=MIN(0.5,ZQSAT)
  3223. ZCOR=1./(1.-VTMPC1*ZQSAT)
  3224. ZQSAT=ZQSAT*ZCOR
  3225. ZCOND1=(PQ(JL,KK)-ZQSAT)/(1.+ZQSAT*ZCOR*TLUCUB(TT))
  3226. PT(JL,KK)=PT(JL,KK)+TLUCUC(TT)*ZCOND1
  3227. PQ(JL,KK)=PQ(JL,KK)-ZCOND1
  3228. 520 CONTINUE
  3229. END IF
  3230. RETURN
  3231. END SUBROUTINE CUADJTQ
  3232. !
  3233. !**********************************************************
  3234. ! SUBROUTINE CUENTR_NEW
  3235. !**********************************************************
  3236. SUBROUTINE CUENTR_NEW &
  3237. (KLON, KLEV, KLEVP1, KK, PTENH, &
  3238. PAPH, PAP, PGEOH, KLWMIN, LDCUM, &
  3239. KTYPE, KCBOT, KCTOP0, ZPBASE, PMFU, &
  3240. PENTR, ZDMFEN, ZDMFDE, ZODETR, KHMIN)
  3241. ! M.TIEDTKE E.C.M.W.F. 12/89
  3242. ! Y.WANG IPRC 11/01
  3243. !***PURPOSE.
  3244. ! --------
  3245. ! THIS ROUTINE CALCULATES ENTRAINMENT/DETRAINMENT RATES
  3246. ! FOR UPDRAFTS IN CUMULUS PARAMETERIZATION
  3247. !***INTERFACE
  3248. ! ---------
  3249. ! THIS ROUTINE IS CALLED FROM *CUASC*.
  3250. ! INPUT ARE ENVIRONMENTAL VALUES T,Q ETC
  3251. ! AND UPDRAFT VALUES T,Q ETC
  3252. ! IT RETURNS ENTRAINMENT/DETRAINMENT RATES
  3253. !***METHOD.
  3254. ! --------
  3255. ! S. TIEDTKE (1989), NORDENG(1996)
  3256. !***EXTERNALS
  3257. ! ---------
  3258. ! NONE
  3259. ! ----------------------------------------------------------------
  3260. !-------------------------------------------------------------------
  3261. IMPLICIT NONE
  3262. !-------------------------------------------------------------------
  3263. INTEGER KLON, KLEV, KLEVP1
  3264. INTEGER KK, JL, IKLWMIN,IKB, IKT, IKH
  3265. REAL ZRRHO, ZDPRHO, ZPMID, ZENTR, ZZMZK, ZTMZK, ARG, ZORGDE
  3266. REAL PTENH(KLON,KLEV), &
  3267. PAP(KLON,KLEV), PAPH(KLON,KLEVP1), &
  3268. PMFU(KLON,KLEV), PGEOH(KLON,KLEV), &
  3269. PENTR(KLON), ZPBASE(KLON), &
  3270. ZDMFEN(KLON), ZDMFDE(KLON), &
  3271. ZODETR(KLON,KLEV)
  3272. INTEGER KLWMIN(KLON), KTYPE(KLON), &
  3273. KCBOT(KLON), KCTOP0(KLON), &
  3274. KHMIN(KLON)
  3275. LOGICAL LDCUM(KLON),LLO1,LLO2
  3276. real tt(klon),ttb(klon)
  3277. real zqsat(klon), zqsatb(klon)
  3278. real fscale(klon)
  3279. !---------------------------------------------------------
  3280. !* 1. CALCULATE ENTRAINMENT AND DETRAINMENT RATES
  3281. !---------------------------------------------------------
  3282. !* 1.1 SPECIFY ENTRAINMENT RATES FOR SHALLOW CLOUDS
  3283. !----------------------------------------------------------
  3284. !* 1.2 SPECIFY ENTRAINMENT RATES FOR DEEP CLOUDS
  3285. !-------------------------------------------------------
  3286. DO jl = 1, klon
  3287. zpbase(jl) = paph(jl,kcbot(jl))
  3288. zrrho = (rd*ptenh(jl,kk+1))/paph(jl,kk+1)
  3289. zdprho = (paph(jl,kk+1)-paph(jl,kk))*zrg
  3290. ! old or new choice
  3291. zpmid = 0.5*(zpbase(jl)+paph(jl,kctop0(jl)))
  3292. zentr = pentr(jl)*pmfu(jl,kk+1)*zdprho*zrrho
  3293. llo1 = kk.LT.kcbot(jl).AND.ldcum(jl)
  3294. ! old or new choice
  3295. if(llo1) then
  3296. if(nturben.eq.1) zdmfde(jl) = zentr
  3297. if(nturben.eq.2) zdmfde(jl) = zentr*1.2
  3298. else
  3299. zdmfde(jl) = 0.0
  3300. endif
  3301. ! old or new choice
  3302. if(nturben .eq. 1) then
  3303. fscale(jl) = 1.0
  3304. elseif (nturben .eq. 2) then
  3305. ! defining the facale
  3306. tt(jl) = ptenh(jl,kk+1)
  3307. zqsat(jl) = TLUCUA(tt(jl))/paph(jl,kk+1)
  3308. zqsat(jl) = zqsat(jl)/(1.-VTMPC1*zqsat(jl))
  3309. ttb(jl) = ptenh(jl,kcbot(jl))
  3310. zqsatb(jl) = TLUCUA(ttb(jl))/zpbase(jl)
  3311. zqsatb(jl) = zqsatb(jl)/(1.-VTMPC1*zqsatb(jl))
  3312. fscale(jl) = 4.0*(zqsat(jl)/zqsatb(jl))**2
  3313. end if
  3314. ! end of defining the fscale
  3315. llo2 = llo1.AND.ktype(jl).EQ.2.AND.((zpbase(jl)-paph(jl,kk)) &
  3316. .LT.ZDNOPRC.OR.paph(jl,kk).GT.zpmid)
  3317. if(llo2) then
  3318. zdmfen(jl) = zentr*fscale(jl)
  3319. else
  3320. zdmfen(jl) = 0.0
  3321. endif
  3322. iklwmin = MAX(klwmin(jl),kctop0(jl)+2)
  3323. llo2 = llo1.AND.ktype(jl).EQ.3.AND.(kk.GE.iklwmin.OR.pap(jl,kk) &
  3324. .GT.zpmid)
  3325. IF (llo2) zdmfen(jl) = zentr*fscale(jl)
  3326. llo2 = llo1.AND.ktype(jl).EQ.1
  3327. ! Turbulent entrainment
  3328. IF (llo2) zdmfen(jl) = zentr*fscale(jl)
  3329. ! Organized detrainment, detrainment starts at khmin
  3330. ikb = kcbot(jl)
  3331. zodetr(jl,kk) = 0.
  3332. IF (llo2.AND.kk.LE.khmin(jl).AND.kk.GE.kctop0(jl)) THEN
  3333. ikt = kctop0(jl)
  3334. ikh = khmin(jl)
  3335. IF (ikh.GT.ikt) THEN
  3336. zzmzk = -(pgeoh(jl,ikh)-pgeoh(jl,kk))*zrg
  3337. ztmzk = -(pgeoh(jl,ikh)-pgeoh(jl,ikt))*zrg
  3338. arg = 3.1415*(zzmzk/ztmzk)*0.5
  3339. zorgde = TAN(arg)*3.1415*0.5/ztmzk
  3340. zdprho = (paph(jl,kk+1)-paph(jl,kk))*(zrg*zrrho)
  3341. zodetr(jl,kk) = MIN(zorgde,1.E-3)*pmfu(jl,kk+1)*zdprho
  3342. END IF
  3343. END IF
  3344. ENDDO
  3345. !
  3346. RETURN
  3347. END SUBROUTINE CUENTR_NEW
  3348. !**********************************************************
  3349. ! FUNCTION SSUM, TLUCUA, TLUCUB, TLUCUC
  3350. !**********************************************************
  3351. REAL FUNCTION SSUM ( N, X, IX )
  3352. !
  3353. ! COMPUTES SSUM = SUM OF [X(I)]
  3354. ! FOR N ELEMENTS OF X WITH SKIP INCREMENT IX FOR VECTOR X
  3355. !
  3356. IMPLICIT NONE
  3357. REAL X(*)
  3358. REAL ZSUM
  3359. INTEGER N, IX, JX, JL
  3360. !
  3361. JX = 1
  3362. ZSUM = 0.0
  3363. DO JL = 1, N
  3364. ZSUM = ZSUM + X(JX)
  3365. JX = JX + IX
  3366. enddo
  3367. !
  3368. SSUM=ZSUM
  3369. !
  3370. RETURN
  3371. END FUNCTION SSUM
  3372. REAL FUNCTION TLUCUA(TT)
  3373. !
  3374. ! Set up lookup tables for cloud ascent calculations.
  3375. !
  3376. IMPLICIT NONE
  3377. REAL ZCVM3,ZCVM4,TT
  3378. !
  3379. IF(TT-TMELT.GT.0.) THEN
  3380. ZCVM3=C3LES
  3381. ZCVM4=C4LES
  3382. ELSE
  3383. ZCVM3=C3IES
  3384. ZCVM4=C4IES
  3385. END IF
  3386. TLUCUA=C2ES*EXP(ZCVM3*(TT-TMELT)*(1./(TT-ZCVM4)))
  3387. !
  3388. RETURN
  3389. END FUNCTION TLUCUA
  3390. !
  3391. REAL FUNCTION TLUCUB(TT)
  3392. !
  3393. ! Set up lookup tables for cloud ascent calculations.
  3394. !
  3395. IMPLICIT NONE
  3396. REAL Z5ALVCP,Z5ALSCP,ZCVM4,ZCVM5,TT
  3397. !
  3398. Z5ALVCP=C5LES*ALV/CPD
  3399. Z5ALSCP=C5IES*ALS/CPD
  3400. IF(TT-TMELT.GT.0.) THEN
  3401. ZCVM4=C4LES
  3402. ZCVM5=Z5ALVCP
  3403. ELSE
  3404. ZCVM4=C4IES
  3405. ZCVM5=Z5ALSCP
  3406. END IF
  3407. TLUCUB=ZCVM5*(1./(TT-ZCVM4))**2
  3408. !
  3409. RETURN
  3410. END FUNCTION TLUCUB
  3411. !
  3412. REAL FUNCTION TLUCUC(TT)
  3413. !
  3414. ! Set up lookup tables for cloud ascent calculations.
  3415. !
  3416. IMPLICIT NONE
  3417. REAL ZALVDCP,ZALSDCP,TT,ZLDCP
  3418. !
  3419. ZALVDCP=ALV/CPD
  3420. ZALSDCP=ALS/CPD
  3421. IF(TT-TMELT.GT.0.) THEN
  3422. ZLDCP=ZALVDCP
  3423. ELSE
  3424. ZLDCP=ZALSDCP
  3425. END IF
  3426. TLUCUC=ZLDCP
  3427. !
  3428. RETURN
  3429. END FUNCTION TLUCUC
  3430. !
  3431. END MODULE module_cu_tiedtke