PageRenderTime 841ms CodeModel.GetById 44ms RepoModel.GetById 2ms app.codeStats 1ms

/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

Large files files are truncated, but you can click here to view the full file

  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, &

Large files files are truncated, but you can click here to view the full file