PageRenderTime 72ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/phys/module_bl_qnsepbl.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 1373 lines | 694 code | 16 blank | 663 comment | 0 complexity | 1806040aee7f37c687c0588477da0147 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. MODULE MODULE_BL_QNSEPBL
  4. !
  5. !-----------------------------------------------------------------------
  6. !
  7. USE MODULE_MODEL_CONSTANTS
  8. !
  9. !-----------------------------------------------------------------------
  10. !
  11. ! REFERENCES: Janjic (2002), NCEP Office Note 437
  12. ! Mellor and Yamada (1982), Rev. Geophys. Space Phys.
  13. !
  14. ! ABSTRACT:
  15. ! MYJ UPDATES THE TURBULENT KINETIC ENERGY WITH THE PRODUCTION/
  16. ! DISSIPATION TERM AND THE VERTICAL DIFFUSION TERM
  17. ! (USING AN IMPLICIT FORMULATION) FROM MELLOR-YAMADA
  18. ! LEVEL 2.5 AS EXTENDED BY JANJIC. EXCHANGE COEFFICIENTS FOR
  19. ! THE SURFACE AND FOR ALL LAYER INTERFACES ARE COMPUTED FROM
  20. ! MONIN-OBUKHOV THEORY.
  21. ! THE TURBULENT VERTICAL EXCHANGE IS THEN EXECUTED.
  22. !
  23. !-----------------------------------------------------------------------
  24. !
  25. INTEGER :: ITRMX=5 ! Iteration count for mixing length computation
  26. !
  27. ! REAL,PARAMETER :: G=9.81,PI=3.1415926,R_D=287.04,R_V=461.6 &
  28. ! & ,VKARMAN=0.4
  29. REAL,PARAMETER :: PI=3.1415926,VKARMAN=0.4
  30. !
  31. !-----------------------------------------------------------------------
  32. !*** QNSE MODEL CONSTANTS
  33. !-----------------------------------------------------------------------
  34. !
  35. REAL,PARAMETER :: EPSQ2L=0.01
  36. REAL,PARAMETER :: C0=0.55,CEPS=C0**3,BLCKDR=0.0063,CN=0.75 &
  37. & ,AM1=8.0,AM2=2.3,AM3=35.0,AH1=1.4,AH2=-0.01 &
  38. & ,AH3=1.29,AH4=2.44,AH5=19.8 &
  39. & ,ARIMIN=0.127,BM1=2.88,BM2=16.0,BH1=3.6,BH2=16.0 &
  40. & ,BH3=720.0,EPSKM=1.E-3
  41. !
  42. REAL,PARAMETER :: CAPA=R_D/CP
  43. REAL,PARAMETER :: RLIVWV=XLS/XLV,ELOCP=2.72E6/CP
  44. REAL,PARAMETER :: EPS1=1.E-12,EPS2=0.
  45. REAL,PARAMETER :: EPSL=0.32,EPSRU=1.E-7,EPSRS=1.E-7 &
  46. & ,EPSTRB=1.E-24
  47. REAL,PARAMETER :: EPSA=1.E-8,EPSIT=1.E-4,EPSU2=1.E-4,EPSUST=0.07 &
  48. & ,FH=1.01
  49. REAL,PARAMETER :: ALPH=0.30,BETA=1./273.,EL0MAX=1000.,EL0MIN=1. &
  50. & ,ELFC=0.23*0.5,GAM1=0.2222222222222222222 &
  51. & ,PRT=1.
  52. REAL,PARAMETER :: A1=0.659888514560862645 &
  53. & ,A2x=0.6574209922667784586 &
  54. & ,B1=11.87799326209552761 &
  55. & ,B2=7.226971804046074028 &
  56. & ,C1=0.000830955950095854396
  57. REAL,PARAMETER :: A2S=17.2693882,A3S=273.16,A4S=35.86
  58. REAL,PARAMETER :: ELZ0=0.,ESQ=5.0,EXCM=0.001 &
  59. & ,FHNEU=0.8,GLKBR=10.,GLKBS=30. &
  60. & ,QVISC=2.1E-5,RFC=0.191,RIC=0.505,SMALL=0.35 &
  61. & ,SQPR=0.84,SQSC=0.84,SQVISC=258.2,TVISC=2.1E-5 &
  62. & ,USTC=0.7,USTR=0.225,VISC=1.5E-5 &
  63. & ,WOLD=0.15,WWST=1.2,ZTMAX=1.,ZTFC=1.,ZTMIN=-5.
  64. !
  65. REAL,PARAMETER :: SEAFC=0.98,PQ0SEA=PQ0*SEAFC
  66. !
  67. REAL,PARAMETER :: BTG=BETA*G,CZIV=SMALL*GLKBS &
  68. ! & ,EP_1=R_V/R_D-1.,ESQHF=0.5*5.0,GRRS=GLKBR/GLKBS &
  69. & ,ESQHF=0.5*5.0,GRRS=GLKBR/GLKBS &
  70. & ,RB1=1./B1,RTVISC=1./TVISC,RVISC=1./VISC &
  71. & ,ZQRZT=SQSC/SQPR
  72. !
  73. REAL,PARAMETER :: ADNH= 9.*A1*A2x*A2x*(12.*A1+3.*B2)*BTG*BTG &
  74. & ,ADNM=18.*A1*A1*A2x*(B2-3.*A2x)*BTG &
  75. & ,ANMH=-9.*A1*A2x*A2x*BTG*BTG &
  76. & ,ANMM=-3.*A1*A2x*(3.*A2x+3.*B2*C1+18.*A1*C1-B2) &
  77. & *BTG &
  78. & ,BDNH= 3.*A2x*(7.*A1+B2)*BTG &
  79. & ,BDNM= 6.*A1*A1 &
  80. & ,BEQH= A2x*B1*BTG+3.*A2x*(7.*A1+B2)*BTG &
  81. & ,BEQM=-A1*B1*(1.-3.*C1)+6.*A1*A1 &
  82. & ,BNMH=-A2x*BTG &
  83. & ,BNMM=A1*(1.-3.*C1) &
  84. & ,BSHH=9.*A1*A2x*A2x*BTG &
  85. & ,BSHM=18.*A1*A1*A2x*C1 &
  86. & ,BSMH=-3.*A1*A2x*(3.*A2x+3.*B2*C1+12.*A1*C1-B2) &
  87. & *BTG &
  88. & ,CESH=A2x &
  89. & ,CESM=A1*(1.-3.*C1) &
  90. & ,CNV=EP_1*G/BTG &
  91. & ,ELFCS=VKARMAN*BTG &
  92. & ,FZQ1=RTVISC*QVISC*ZQRZT &
  93. & ,FZQ2=RTVISC*QVISC*ZQRZT &
  94. & ,FZT1=RVISC *TVISC*SQPR &
  95. & ,FZT2=CZIV*GRRS*TVISC*SQPR &
  96. & ,FZU1=CZIV*VISC &
  97. & ,PIHF=0.5*PI &
  98. & ,RFAC=RIC/(FHNEU*RFC*RFC) &
  99. & ,RQVISC=1./QVISC &
  100. & ,RRIC=1./RIC &
  101. & ,USTFC=0.018/G &
  102. & ,WNEW=1.-WOLD &
  103. & ,WWST2=WWST*WWST
  104. !
  105. !-----------------------------------------------------------------------
  106. !*** FREE TERM IN THE EQUILIBRIUM EQUATION FOR (L/Q)**2
  107. !-----------------------------------------------------------------------
  108. !
  109. REAL,PARAMETER :: AEQH=9.*A1*A2x*A2x*B1*BTG*BTG &
  110. & +9.*A1*A2x*A2x*(12.*A1+3.*B2)*BTG*BTG &
  111. & ,AEQM=3.*A1*A2x*B1*(3.*A2x+3.*B2*C1+18.*A1*C1-B2)&
  112. & *BTG+18.*A1*A1*A2x*(B2-3.*A2x)*BTG
  113. !
  114. !-----------------------------------------------------------------------
  115. !*** FORBIDDEN TURBULENCE AREA
  116. !-----------------------------------------------------------------------
  117. !
  118. REAL,PARAMETER :: REQU=-AEQH/AEQM &
  119. & ,EPSGH=1.E-9,EPSGM=REQU*EPSGH
  120. !
  121. !-----------------------------------------------------------------------
  122. !*** NEAR ISOTROPY FOR SHEAR TURBULENCE, WW/Q2 LOWER LIMIT
  123. !-----------------------------------------------------------------------
  124. !
  125. REAL,PARAMETER :: UBRYL=(18.*REQU*A1*A1*A2x*B2*C1*BTG &
  126. & +9.*A1*A2x*A2x*B2*BTG*BTG) &
  127. & /(REQU*ADNM+ADNH) &
  128. & ,UBRY=(1.+EPSRS)*UBRYL,UBRY3=3.*UBRY
  129. !
  130. REAL,PARAMETER :: AUBH=27.*A1*A2x*A2x*B2*BTG*BTG-ADNH*UBRY3 &
  131. & ,AUBM=54.*A1*A1*A2x*B2*C1*BTG -ADNM*UBRY3 &
  132. & ,BUBH=(9.*A1*A2x+3.*A2x*B2)*BTG-BDNH*UBRY3 &
  133. & ,BUBM=18.*A1*A1*C1 -BDNM*UBRY3 &
  134. & ,CUBR=1. - UBRY3 &
  135. & ,RCUBR=1./CUBR
  136. !
  137. !-----------------------------------------------------------------------
  138. !
  139. CONTAINS
  140. !
  141. !----------------------------------------------------------------------
  142. SUBROUTINE QNSEPBL(DT,STEPBL,HT,DZ &
  143. & ,PMID,PINT,TH,T,EXNER,QV,CWM,U,V,RHO &
  144. & ,TSK,QSFC,CHKLOWQ,THZ0,QZ0,UZ0,VZ0,CORF &
  145. & ,LOWLYR,XLAND,SICE,SNOW &
  146. & ,TKE,EXCH_H,EXCH_M,USTAR,ZNT,EL_MYJ,PBLH,KPBL,CT &
  147. & ,AKHS,AKMS,ELFLX,HFX & !JP HFX
  148. & ,LM_BL89,WTHV_MF &
  149. & ,RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN &
  150. & ,IDS,IDE,JDS,JDE,KDS,KDE &
  151. & ,IMS,IME,JMS,JME,KMS,KME &
  152. & ,ITS,ITE,JTS,JTE,KTS,KTE)
  153. !----------------------------------------------------------------------
  154. !
  155. IMPLICIT NONE
  156. !
  157. !----------------------------------------------------------------------
  158. INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
  159. & ,IMS,IME,JMS,JME,KMS,KME &
  160. & ,ITS,ITE,JTS,JTE,KTS,KTE
  161. !
  162. INTEGER,INTENT(IN) :: STEPBL
  163. INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: LOWLYR
  164. !
  165. INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: KPBL
  166. !
  167. REAL,INTENT(IN) :: DT
  168. !
  169. REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: HT,SICE,SNOW &
  170. & ,TSK,XLAND,HFX
  171. !
  172. REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: CWM,DZ &
  173. & ,EXNER &
  174. & ,PMID,PINT &
  175. & ,QV,RHO &
  176. & ,T,TH,U,V
  177. REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN),OPTIONAL :: &
  178. & WTHV_MF &
  179. & ,LM_BL89
  180. !
  181. REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: PBLH
  182. !
  183. REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: AKHS,AKMS
  184. !
  185. REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME) &
  186. & ,INTENT(OUT) :: EL_MYJ
  187. REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME) &
  188. & ,INTENT(INOUT) :: RQCBLTEN,RQVBLTEN &
  189. & ,RTHBLTEN &
  190. & ,RUBLTEN,RVBLTEN
  191. !
  192. REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: CT,QSFC,QZ0 &
  193. & ,THZ0,USTAR &
  194. & ,UZ0,VZ0,ZNT
  195. !
  196. REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME) &
  197. & ,INTENT(INOUT) :: EXCH_H,EXCH_M,TKE
  198. !
  199. REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: CHKLOWQ,ELFLX,CORF
  200. !
  201. !----------------------------------------------------------------------
  202. !***
  203. !*** LOCAL VARIABLES
  204. !***
  205. INTEGER :: I,J,K,KFLIP,LLOW,LMH,LMXL
  206. !
  207. INTEGER,DIMENSION(ITS:ITE,JTS:JTE) :: LPBL
  208. !
  209. REAL :: AKHS_DENS,AKMS_DENS,APEX,DCDT,DELTAZ,DQDT,DTDIF,DTDT &
  210. & ,DTTURBL,DUDT,DVDT,EXNSFC,PSFC,PTOP,QFC1,QLOW,QOLD &
  211. & ,RATIOMX,RDTTURBL,RG,RWMSK,SEAMASK,THNEW,THOLD,TX &
  212. & ,ULOW,VLOW,WMSK,RLOW
  213. !
  214. REAL,DIMENSION(KTS:KTE) :: CWMK,PK,Q2K,QK,THEK,TK,UK,VK,&
  215. WTHV_MFK,LM_BL89K
  216. !
  217. REAL,DIMENSION(KTS:KTE-1) :: AKHK,AKMK,EL,RI,GH,S2
  218. !
  219. REAL,DIMENSION(KTS:KTE+1) :: ZHK
  220. !
  221. REAL,DIMENSION(ITS:ITE,JTS:JTE) :: THSK
  222. !
  223. REAL,DIMENSION(KTS:KTE,ITS:ITE) :: RHOK
  224. !
  225. REAL,DIMENSION(ITS:ITE,KTS:KTE,JTS:JTE) :: APE,THE
  226. !
  227. REAL,DIMENSION(ITS:ITE,KTS:KTE-1,JTS:JTE) :: AKH,AKM
  228. !
  229. REAL,DIMENSION(ITS:ITE,KTS:KTE+1,JTS:JTE) :: ZINT
  230. !
  231. !*** Begin debugging
  232. REAL :: ZSL_DIAG
  233. INTEGER :: IMD,JMD,PRINT_DIAG
  234. !*** End debugging
  235. !
  236. !----------------------------------------------------------------------
  237. !**********************************************************************
  238. !----------------------------------------------------------------------
  239. !
  240. !*** Begin debugging
  241. IMD=(IMS+IME)/2
  242. JMD=(JMS+JME)/2
  243. !*** End debugging
  244. !
  245. !*** MAKE PREPARATIONS
  246. !
  247. !----------------------------------------------------------------------
  248. DTTURBL=DT*STEPBL
  249. RDTTURBL=1./DTTURBL
  250. DTDIF=DTTURBL
  251. RG=1./G
  252. !
  253. DO J=JTS,JTE
  254. DO K=KTS,KTE-1
  255. DO I=ITS,ITE
  256. AKM(I,K,J)=0.
  257. ENDDO
  258. ENDDO
  259. ENDDO
  260. !
  261. DO J=JTS,JTE
  262. DO K=KTS,KTE+1
  263. DO I=ITS,ITE
  264. ZINT(I,K,J)=0.
  265. ENDDO
  266. ENDDO
  267. ENDDO
  268. !
  269. DO J=JTS,JTE
  270. DO I=ITS,ITE
  271. ZINT(I,KTE+1,J)=HT(I,J) ! Z at bottom of lowest sigma layer
  272. !
  273. !!!!!!!!!
  274. !!!!!! UNCOMMENT THESE LINES IF USING ETA COORDINATES
  275. !!!!!!!!!
  276. !!!!!! ZINT(I,KTE+1,J)=1.E-4 ! Z of bottom of lowest eta layer
  277. !!!!!! ZHK(KTE+1)=1.E-4 ! Z of bottom of lowest eta layer
  278. !
  279. ENDDO
  280. ENDDO
  281. !
  282. DO J=JTS,JTE
  283. DO K=KTE,KTS,-1
  284. KFLIP=KTE+1-K
  285. DO I=ITS,ITE
  286. ZINT(I,K,J)=ZINT(I,K+1,J)+DZ(I,KFLIP,J)
  287. APEX=1./EXNER(I,K,J)
  288. APE(I,K,J)=APEX
  289. TX=T(I,K,J)
  290. THE(I,K,J)=(CWM(I,K,J)*(-ELOCP/TX)+1.)*TH(I,K,J)
  291. ENDDO
  292. ENDDO
  293. ENDDO
  294. !
  295. EL_MYJ(its:ite,:,jts:jte) = 0.
  296. !
  297. !----------------------------------------------------------------------
  298. setup_integration: DO J=JTS,JTE
  299. !----------------------------------------------------------------------
  300. !
  301. DO I=ITS,ITE
  302. !
  303. !*** LOWEST LAYER ABOVE GROUND MUST BE FLIPPED
  304. !
  305. LMH=KTE-LOWLYR(I,J)+1
  306. !
  307. PTOP=PINT(I,KTE+1,J) ! KTE+1=KME
  308. PSFC=PINT(I,LOWLYR(I,J),J)
  309. !
  310. !*** CONVERT LAND MASK (1 FOR SEA; 0 FOR LAND)
  311. !
  312. SEAMASK=XLAND(I,J)-1.
  313. !
  314. !*** FILL 1-D VERTICAL ARRAYS
  315. !*** AND FLIP DIRECTION SINCE MYJ SCHEME
  316. !*** COUNTS DOWNWARD FROM THE DOMAIN'S TOP
  317. !
  318. DO K=KTE,KTS,-1
  319. KFLIP=KTE+1-K
  320. TK(K)=T(I,KFLIP,J)
  321. THEK(K)=THE(I,KFLIP,J)
  322. RATIOMX=QV(I,KFLIP,J)
  323. QK(K)=RATIOMX/(1.+RATIOMX)
  324. CWMK(K)=CWM(I,KFLIP,J)
  325. PK(K)=PMID(I,KFLIP,J)
  326. UK(K)=U(I,KFLIP,J)
  327. VK(K)=V(I,KFLIP,J)
  328. !
  329. !*** TKE=0.5*(q**2) ==> q**2=2.*TKE
  330. !
  331. Q2K(K)=2.*TKE(I,KFLIP,J)
  332. !**** buoyancy flux of mass flux shallow convection scheme
  333. !
  334. IF ( PRESENT (WTHV_MF) .AND. PRESENT (LM_BL89) ) THEN
  335. WTHV_MFK(K)=WTHV_MF(I,KFLIP,J)
  336. LM_BL89K(K)=LM_BL89(I,KFLIP,J)
  337. ELSE
  338. WTHV_MFK(K)=0.
  339. LM_BL89K(K)=0.
  340. ENDIF
  341. !*** COMPUTE THE HEIGHTS OF THE LAYER INTERFACES
  342. !
  343. ZHK(K)=ZINT(I,K,J)
  344. !
  345. ENDDO
  346. ZHK(KTE+1)=HT(I,J) ! Z at bottom of lowest sigma layer
  347. !
  348. !*** Begin debugging
  349. ! IF(I==IMD.AND.J==JMD)THEN
  350. ! PRINT_DIAG=1
  351. ! ELSE
  352. ! PRINT_DIAG=0
  353. ! ENDIF
  354. ! IF(I==227.AND.J==363)PRINT_DIAG=2
  355. !*** End debugging
  356. !
  357. !----------------------------------------------------------------------
  358. !***
  359. !*** FIND THE MIXING LENGTH
  360. !***
  361. CALL MIXLEN(LMH,UK,VK,TK,THEK,QK,CWMK &
  362. & ,Q2K,ZHK,USTAR(I,J),CORF(I,J),S2,GH,RI,EL &
  363. & ,PBLH(I,J),LPBL(I,J),LMXL,CT(I,J),LM_BL89K &
  364. & ,IDS,IDE,JDS,JDE,KDS,KDE &
  365. & ,IMS,IME,JMS,JME,KMS,KME &
  366. & ,ITS,ITE,JTS,JTE,KTS,KTE)
  367. !
  368. !----------------------------------------------------------------------
  369. !*** THE MODEL LAYER (COUNTING UPWARD) CONTAINING THE TOP OF THE PBL
  370. !----------------------------------------------------------------------
  371. !
  372. KPBL(I,J)=KTE-LPBL(I,J)+1
  373. !
  374. !----------------------------------------------------------------------
  375. !***
  376. !*** FIND THE QNSE EXCHANGE COEFFICIENTS
  377. !***
  378. CALL DIFCOF(LMH,EL,RI,Q2K,ZHK,AKMK,AKHK &
  379. & ,IDS,IDE,JDS,JDE,KDS,KDE &
  380. & ,IMS,IME,JMS,JME,KMS,KME &
  381. & ,ITS,ITE,JTS,JTE,KTS,KTE,PRINT_DIAG) ! debug
  382. !
  383. !----------------------------------------------------------------------
  384. !*** COUNTING DOWNWARD FROM THE TOP, THE EXCHANGE COEFFICIENTS AKH
  385. !*** ARE DEFINED ON THE BOTTOMS OF THE LAYERS KTS TO KTE-1. COUNTING
  386. !*** COUNTING UPWARD FROM THE BOTTOM, THOSE SAME COEFFICIENTS EXCH_H
  387. !*** ARE DEFINED ON THE TOPS OF THE LAYERS KTS TO KTE-1.
  388. !
  389. DO K=KTS,KTE-1
  390. KFLIP=KTE-K
  391. AKH(I,K,J)=AKHK(K)
  392. AKM(I,K,J)=AKMK(K)
  393. DELTAZ=0.5*(ZHK(KFLIP)-ZHK(KFLIP+2))
  394. EXCH_H(I,K+1,J)=AKHK(KFLIP)*DELTAZ
  395. EXCH_M(I,K+1,J)=AKMK(KFLIP)*DELTAZ
  396. ENDDO
  397. !
  398. !----------------------------------------------------------------------
  399. !***
  400. !*** SOLVE FOR THE PRODUCTION/DISSIPATION OF
  401. !*** THE TURBULENT KINETIC ENERGY
  402. !***
  403. !
  404. CALL PRODQ2(LMH,DTTURBL,USTAR(I,J),S2,RI,Q2K,EL,ZHK,AKMK,AKHK &
  405. & ,WTHV_MFK,IDS,IDE,JDS,JDE,KDS,KDE &
  406. & ,IMS,IME,JMS,JME,KMS,KME &
  407. & ,ITS,ITE,JTS,JTE,KTS,KTE)
  408. !
  409. !----------------------------------------------------------------------
  410. !***
  411. !*** CARRY OUT THE VERTICAL DIFFUSION OF
  412. !*** TURBULENT KINETIC ENERGY
  413. !***
  414. !
  415. CALL VDIFQ(LMH,DTDIF,Q2K,EL,ZHK &
  416. & ,IDS,IDE,JDS,JDE,KDS,KDE &
  417. & ,IMS,IME,JMS,JME,KMS,KME &
  418. & ,ITS,ITE,JTS,JTE,KTS,KTE)
  419. !
  420. !*** SAVE THE NEW TKE AND MIXING LENGTH.
  421. !
  422. DO K=KTS,KTE
  423. KFLIP=KTE+1-K
  424. Q2K(KFLIP)=AMAX1(Q2K(KFLIP),EPSQ2L)
  425. TKE(I,K,J)=0.5*Q2K(KFLIP)
  426. IF(KFLIP/=KTE)EL_MYJ(I,K,J)=EL(KFLIP) ! EL IS NOT DEFINED AT KTE
  427. ENDDO
  428. !
  429. ENDDO
  430. !
  431. !----------------------------------------------------------------------
  432. ENDDO setup_integration
  433. !----------------------------------------------------------------------
  434. !
  435. !*** CONVERT SURFACE SENSIBLE TEMPERATURE TO POTENTIAL TEMPERATURE.
  436. !
  437. DO J=JTS,JTE
  438. DO I=ITS,ITE
  439. PSFC=PINT(I,LOWLYR(I,J),J)
  440. RLOW=PSFC/(R_D*T(I,1,J))
  441. THSK(I,J)=THZ0(I,J)
  442. THSK(I,J)=HFX(I,J)/(AKHS(I,J)*RLOW*CP)+TH(I,1,J)
  443. ENDDO
  444. ENDDO
  445. !
  446. !----------------------------------------------------------------------
  447. !
  448. !----------------------------------------------------------------------
  449. main_integration: DO J=JTS,JTE
  450. !----------------------------------------------------------------------
  451. !
  452. DO I=ITS,ITE
  453. !
  454. !*** FILL 1-D VERTICAL ARRAYS
  455. !*** AND FLIP DIRECTION SINCE MYJ SCHEME
  456. !*** COUNTS DOWNWARD FROM THE DOMAIN'S TOP
  457. !
  458. DO K=KTE,KTS,-1
  459. KFLIP=KTE+1-K
  460. THEK(K)=THE(I,KFLIP,J)
  461. RATIOMX=QV(I,KFLIP,J)
  462. QK(K)=RATIOMX/(1.+RATIOMX)
  463. CWMK(K)=CWM(I,KFLIP,J)
  464. ZHK(K)=ZINT(I,K,J)
  465. RHOK(K,I)=PMID(I,KFLIP,J)/(R_D*T(I,KFLIP,J)* &
  466. & (1.+P608*QK(K)-CWMK(K)))
  467. ENDDO
  468. !
  469. !*** COUNTING DOWNWARD FROM THE TOP, THE EXCHANGE COEFFICIENTS AKH
  470. !*** ARE DEFINED ON THE BOTTOMS OF THE LAYERS KTS TO KTE-1. THESE COEFFICIENTS
  471. !*** ARE ALSO MULTIPLIED BY THE DENSITY AT THE BOTTOM INTERFACE LEVEL.
  472. !
  473. DO K=KTS,KTE-1
  474. AKHK(K)=AKH(I,K,J)*0.5*(RHOK(K,I)+RHOK(K+1,I))
  475. ENDDO
  476. !
  477. ZHK(KTE+1)=ZINT(I,KTE+1,J)
  478. !
  479. SEAMASK=XLAND(I,J)-1.
  480. THZ0(I,J)=(1.-SEAMASK)*THSK(I,J)+SEAMASK*THZ0(I,J)
  481. !
  482. LLOW=LOWLYR(I,J)
  483. AKHS_DENS=AKHS(I,J)*RHOK(KTE+1-LLOW,I)
  484. !
  485. IF(SEAMASK<0.5)THEN
  486. QFC1=XLV*CHKLOWQ(I,J)*AKHS_DENS
  487. !
  488. IF(SNOW(I,J)>0..OR.SICE(I,J)>0.5)THEN
  489. QFC1=QFC1*RLIVWV
  490. ENDIF
  491. !
  492. IF(QFC1>0.)THEN
  493. QLOW=QK(KTE+1-LLOW)
  494. QSFC(I,J)=QLOW+ELFLX(I,J)/QFC1
  495. ENDIF
  496. !
  497. ELSE
  498. PSFC=PINT(I,LOWLYR(I,J),J)
  499. EXNSFC=(1.E5/PSFC)**CAPA
  500. QSFC(I,J)=PQ0SEA/PSFC &
  501. & *EXP(A2*(THSK(I,J)-A3*EXNSFC)/(THSK(I,J)-A4*EXNSFC))
  502. ENDIF
  503. !
  504. QZ0 (I,J)=(1.-SEAMASK)*QSFC(I,J)+SEAMASK*QZ0 (I,J)
  505. !
  506. !*** LOWEST LAYER ABOVE GROUND MUST BE FLIPPED
  507. !
  508. LMH=KTE-LOWLYR(I,J)+1
  509. !
  510. !----------------------------------------------------------------------
  511. !*** CARRY OUT THE VERTICAL DIFFUSION OF
  512. !*** TEMPERATURE AND WATER VAPOR
  513. !----------------------------------------------------------------------
  514. !
  515. CALL VDIFH(DTDIF,LMH,THZ0(I,J),QZ0(I,J) &
  516. & ,AKHS_DENS,CHKLOWQ(I,J),CT(I,J) &
  517. & ,THEK,QK,CWMK,AKHK,ZHK,RHOK(KTS,I) &
  518. & ,IDS,IDE,JDS,JDE,KDS,KDE &
  519. & ,IMS,IME,JMS,JME,KMS,KME &
  520. & ,ITS,ITE,JTS,JTE,KTS,KTE,I,J)
  521. !----------------------------------------------------------------------
  522. !***
  523. !*** COMPUTE PRIMARY VARIABLE TENDENCIES
  524. !***
  525. DO K=KTS,KTE
  526. KFLIP=KTE+1-K
  527. THOLD=TH(I,K,J)
  528. THNEW=THEK(KFLIP)+CWMK(KFLIP)*ELOCP*APE(I,K,J)
  529. DTDT=(THNEW-THOLD)*RDTTURBL
  530. QOLD=QV(I,K,J)/(1.+QV(I,K,J))
  531. DQDT=(QK(KFLIP)-QOLD)*RDTTURBL
  532. DCDT=(CWMK(KFLIP)-CWM(I,K,J))*RDTTURBL
  533. !
  534. RTHBLTEN(I,K,J)=DTDT + RTHBLTEN(I,K,J)
  535. RQVBLTEN(I,K,J)=DQDT/(1.-QK(KFLIP))**2 + RQVBLTEN(I,K,J)
  536. RQCBLTEN(I,K,J)=DCDT + RQCBLTEN(I,K,J)
  537. ENDDO
  538. !
  539. !*** Begin debugging
  540. ! IF(I==IMD.AND.J==JMD)THEN
  541. ! PRINT_DIAG=0
  542. ! ELSE
  543. ! PRINT_DIAG=0
  544. ! ENDIF
  545. ! IF(I==227.AND.J==363)PRINT_DIAG=0
  546. !*** End debugging
  547. !
  548. PSFC=.01*PINT(I,LOWLYR(I,J),J)
  549. ZSL_DIAG=0.5*DZ(I,1,J)
  550. !
  551. !*** Begin debugging
  552. ! IF(PRINT_DIAG==1)THEN
  553. !
  554. ! write(6,"(a, 2i5, 2i3, 2f8.2, f6.2, 2f8.2)") &
  555. ! '{turb4 i,j, Kpbl, Kmxl, Psfc, Zsfc, Zsl, Zpbl, Zmxl = ' &
  556. ! , i, j, KPBL(i,j), KTE-LMXL+1, PSFC, ZHK(LMH+1), ZSL_diag &
  557. ! , PBLH(i,j), ZHK(LMXL)-ZHK(LMH+1)
  558. ! write(6,"(a, 2f7.2, f7.3, 3e11.4)") &
  559. ! '{turb4 tsk, thsk, qz0, q**2_0, akhs, exch_0 = ' &
  560. ! , tsk(i,j)-273.15, thsk(i,j), 1000.*qz0(i,j) &
  561. ! , 2.*tke_myj(i,1,j), akhs(i,j), akhs(i,j)*ZSL_diag
  562. ! write(6,"(a)") &
  563. ! '{turb5 k, Pmid, Pint_1, Tc, TH, DTH, GH, S2, EL, Q**2, Akh, EXCH_h, Dz, Dp'
  564. ! do k=kts,kte/2
  565. ! KFLIP=KTE-K !-- Includes the KFLIP-1 in earlier versions
  566. ! write(6,"(a,i3, 2f8.2, 2f8.3, 3e12.4, 4e11.4, f7.2, f6.2)") &
  567. ! '{turb5 ', k, .01*pmid(i,k,j),.01*pint(i,k,j), T(i,k,j)-273.15 &
  568. ! , th(i,k,j), DTTURBL*rthblten(i,k,j), GH(KFLIP), S2(KFLIP) &
  569. ! , el_myj(i,KFLIP,j), 2.*tke_myj(i,k+1,j), akh(i,KFLIP,j) &
  570. ! , exch_h(i,k,j), dz(i,k,j), .01*(pint(i,k,j)-pint(i,k+1,j))
  571. ! enddo
  572. !
  573. ! ELSEIF(PRINT_DIAG==2)THEN
  574. !
  575. ! write(6,"(a, 2i5, 2i3, 2f8.2, f6.2, 2f8.2)") &
  576. ! '}turb4 i,j, Kpbl, Kmxl, Psfc, Zsfc, Zsl, Zpbl, Zmxl = ' &
  577. ! , i, j, KPBL(i,j), KTE-LMXL+1, PSFC, ZHK(LMH+1), ZSL_diag &
  578. ! , PBLH(i,j), ZHK(LMXL)-ZHK(LMH+1)
  579. ! write(6,"(a, 2f7.2, f7.3, 3e11.4)") &
  580. ! '}turb4 tsk, thsk, qz0, q**2_0, akhs, exch_0 = ' &
  581. ! , tsk(i,j)-273.15, thsk(i,j), 1000.*qz0(i,j) &
  582. ! , 2.*tke_myj(i,1,j), akhs(i,j), akhs(i,j)*ZSL_diag
  583. ! write(6,"(a)") &
  584. ! '}turb5 k, Pmid, Pint_1, Tc, TH, DTH, GH, S2, EL, Q**2, Akh, EXCH_h, Dz, Dp'
  585. ! do k=kts,kte/2
  586. ! KFLIP=KTE-K !-- Includes the KFLIP-1 in earlier versions
  587. ! write(6,"(a,i3, 2f8.2, 2f8.3, 3e12.4, 4e11.4, f7.2, f6.2)") &
  588. ! '}turb5 ', k, .01*pmid(i,k,j),.01*pint(i,k,j), T(i,k,j)-273.15 &
  589. ! , th(i,k,j), DTTURBL*rthblten(i,k,j), GH(KFLIP), S2(KFLIP) &
  590. ! , el_myj(i,KFLIP,j), 2.*tke_myj(i,k+1,j), akh(i,KFLIP,j) &
  591. ! , exch_h(i,k,j), dz(i,k,j), .01*(pint(i,k,j)-pint(i,k+1,j))
  592. ! enddo
  593. ! ENDIF
  594. !*** End debugging
  595. !
  596. !----------------------------------------------------------------------
  597. ENDDO
  598. !----------------------------------------------------------------------
  599. DO I=ITS,ITE
  600. !
  601. !*** FILL 1-D VERTICAL ARRAYS
  602. !*** AND FLIP DIRECTION SINCE MYJ SCHEME
  603. !*** COUNTS DOWNWARD FROM THE DOMAIN'S TOP
  604. !
  605. DO K=KTS,KTE-1
  606. AKMK(K)=AKM(I,K,J)
  607. AKMK(K)=AKMK(K)*(RHOK(K,I)+RHOK(K+1,I))*0.5
  608. ENDDO
  609. !
  610. LLOW=LOWLYR(I,J)
  611. AKMS_DENS=AKMS(I,J)*RHOK(KTE+1-LLOW,I)
  612. !
  613. DO K=KTE,KTS,-1
  614. KFLIP=KTE+1-K
  615. UK(K)=U(I,KFLIP,J)
  616. VK(K)=V(I,KFLIP,J)
  617. ZHK(K)=ZINT(I,K,J)
  618. ENDDO
  619. ZHK(KTE+1)=ZINT(I,KTE+1,J)
  620. !
  621. !----------------------------------------------------------------------
  622. !*** CARRY OUT THE VERTICAL DIFFUSION OF
  623. !*** VELOCITY COMPONENTS
  624. !----------------------------------------------------------------------
  625. !
  626. CALL VDIFV(LMH,DTDIF,UZ0(I,J),VZ0(I,J) &
  627. & ,AKMS_DENS,UK,VK,AKMK,ZHK,RHOK(KTS,I) &
  628. & ,IDS,IDE,JDS,JDE,KDS,KDE &
  629. & ,IMS,IME,JMS,JME,KMS,KME &
  630. & ,ITS,ITE,JTS,JTE,KTS,KTE,I,J)
  631. !
  632. !----------------------------------------------------------------------
  633. !***
  634. !*** COMPUTE PRIMARY VARIABLE TENDENCIES
  635. !***
  636. DO K=KTS,KTE
  637. KFLIP=KTE+1-K
  638. DUDT=(UK(KFLIP)-U(I,K,J))*RDTTURBL
  639. DVDT=(VK(KFLIP)-V(I,K,J))*RDTTURBL
  640. RUBLTEN(I,K,J)=DUDT + RUBLTEN(I,K,J)
  641. RVBLTEN(I,K,J)=DVDT + RVBLTEN(I,K,J)
  642. ENDDO
  643. !
  644. ENDDO
  645. !----------------------------------------------------------------------
  646. !
  647. ENDDO main_integration
  648. !
  649. !----------------------------------------------------------------------
  650. !
  651. END SUBROUTINE QNSEPBL
  652. !
  653. !----------------------------------------------------------------------
  654. !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  655. !----------------------------------------------------------------------
  656. SUBROUTINE MIXLEN &
  657. !----------------------------------------------------------------------
  658. ! ******************************************************************
  659. ! * *
  660. ! * LEVEL 2.5 MIXING LENGTH *
  661. ! * *
  662. ! ******************************************************************
  663. !
  664. &(LMH,U,V,T,THE,Q,CWM,Q2,Z,USTAR,CORF &
  665. &,S2,GH,RI,EL,PBLH,LPBL,LMXL,CT,LM_BL89 &
  666. &,IDS,IDE,JDS,JDE,KDS,KDE &
  667. &,IMS,IME,JMS,JME,KMS,KME &
  668. &,ITS,ITE,JTS,JTE,KTS,KTE)
  669. !----------------------------------------------------------------------
  670. !
  671. IMPLICIT NONE
  672. !
  673. !----------------------------------------------------------------------
  674. INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
  675. & ,IMS,IME,JMS,JME,KMS,KME &
  676. & ,ITS,ITE,JTS,JTE,KTS,KTE
  677. !
  678. INTEGER,INTENT(IN) :: LMH
  679. !
  680. INTEGER,INTENT(OUT) :: LMXL,LPBL
  681. !
  682. REAL,DIMENSION(KTS:KTE),INTENT(IN) :: CWM,Q,Q2,T,THE,U,V,LM_BL89
  683. !
  684. REAL,DIMENSION(KTS:KTE+1),INTENT(IN) :: Z
  685. !
  686. REAL,INTENT(OUT) :: PBLH
  687. !
  688. REAL,DIMENSION(KTS:KTE-1),INTENT(OUT) :: EL,RI,GH,S2
  689. !
  690. REAL,INTENT(INOUT) :: CT
  691. !
  692. REAL,INTENT(IN) :: CORF,USTAR
  693. !----------------------------------------------------------------------
  694. !***
  695. !*** LOCAL VARIABLES
  696. !***
  697. INTEGER :: K,LPBLM
  698. !
  699. REAL :: A,ADEN,B,BDEN,AUBR,BUBR,BLMX,EL0,ELOQ2X,GHL,S2L &
  700. & ,QOL2ST,QOL2UN,QDZL,RDZ,SQ,SREL,SZQ,TEM,THM,VKRMZ,RLAMBDA &
  701. & ,RLB,RLN,F
  702. !
  703. REAL,DIMENSION(KTS:KTE) :: Q1,EN2
  704. !
  705. REAL,DIMENSION(KTS:KTE-1) :: DTH,ELM,REL
  706. !
  707. !----------------------------------------------------------------------
  708. !**********************************************************************
  709. !--------------FIND THE HEIGHT OF THE PBL-------------------------------
  710. LPBL=LMH
  711. !
  712. DO K=LMH-1,1,-1
  713. IF(Q2(K)<=EPSQ2L*FH)THEN
  714. LPBL=K
  715. GO TO 110
  716. ENDIF
  717. ENDDO
  718. !
  719. LPBL=1
  720. !
  721. !--------------THE HEIGHT OF THE PBL------------------------------------
  722. !
  723. 110 PBLH=Z(LPBL)-Z(LMH+1)
  724. !
  725. !-----------------------------------------------------------------------
  726. DO K=KTS,LMH
  727. Q1(K)=0.
  728. ENDDO
  729. !
  730. DO K=1,LMH-1
  731. DTH(K)=THE(K)-THE(K+1)
  732. ENDDO
  733. !
  734. DO K=LMH-2,1,-1
  735. IF(DTH(K)>0..AND.DTH(K+1)<=0.)THEN
  736. DTH(K)=DTH(K)+CT
  737. EXIT
  738. ENDIF
  739. ENDDO
  740. !
  741. CT=0.
  742. !----------------------------------------------------------------------
  743. !*** COMPUTE LOCAL GRADIENT RICHARDSON NUMBER
  744. !----------------------------------------------------------------------
  745. DO K=KTS,LMH-1
  746. RDZ=2./(Z(K)-Z(K+2))
  747. S2L=((U(K)-U(K+1))**2+(V(K)-V(K+1))**2)*RDZ*RDZ ! S**2
  748. S2L=MAX(S2L,EPSGM)
  749. S2(K)=S2L
  750. !
  751. TEM=(T(K)+T(K+1))*0.5
  752. THM=(THE(K)+THE(K+1))*0.5
  753. !
  754. A=THM*P608
  755. B=(ELOCP/TEM-1.-P608)*THM
  756. !
  757. GHL=(DTH(K)*((Q(K)+Q(K+1)+CWM(K)+CWM(K+1))*(0.5*P608)+1.) &
  758. & +(Q(K)-Q(K+1)+CWM(K)-CWM(K+1))*A &
  759. & +(CWM(K)-CWM(K+1))*B)*RDZ ! dTheta/dz
  760. !
  761. IF(ABS(GHL)<=EPSGH)GHL=EPSGH
  762. !
  763. EN2(K)=GHL*G/THM ! N**2
  764. !
  765. GH(K)=GHL
  766. RI(K)=EN2(K)/S2L
  767. ENDDO
  768. !
  769. !----------------------------------------------------------------------
  770. !*** FIND MAXIMUM MIXING LENGTHS AND THE LEVEL OF THE PBL TOP
  771. !----------------------------------------------------------------------
  772. !
  773. LMXL=LMH
  774. !
  775. DO K=KTS,LMH-1
  776. S2L=S2(K)
  777. GHL=GH(K)
  778. !
  779. IF(GHL>=EPSGH)THEN
  780. IF(S2L/GHL<=REQU)THEN
  781. ELM(K)=EPSL
  782. LMXL=K
  783. ELSE
  784. AUBR=(AUBM*S2L+AUBH*GHL)*GHL
  785. BUBR= BUBM*S2L+BUBH*GHL
  786. QOL2ST=(-0.5*BUBR+SQRT(BUBR*BUBR*0.25-AUBR*CUBR))*RCUBR
  787. ELOQ2X=1./QOL2ST
  788. ELM(K)=MAX(SQRT(ELOQ2X*Q2(K)),EPSL)
  789. ENDIF
  790. ELSE
  791. ADEN=(ADNM*S2L+ADNH*GHL)*GHL
  792. BDEN= BDNM*S2L+BDNH*GHL
  793. QOL2UN=-0.5*BDEN+SQRT(BDEN*BDEN*0.25-ADEN)
  794. ELOQ2X=1./(QOL2UN+EPSRU) ! repsr1/qol2un
  795. ELM(K)=MAX(SQRT(ELOQ2X*Q2(K)),EPSL)
  796. ENDIF
  797. ENDDO
  798. !
  799. IF(ELM(LMH-1)==EPSL)LMXL=LMH
  800. !
  801. !----------------------------------------------------------------------
  802. !*** THE HEIGHT OF THE MIXED LAYER
  803. !----------------------------------------------------------------------
  804. !
  805. BLMX=Z(LMXL)-Z(LMH+1)
  806. !
  807. !----------------------------------------------------------------------
  808. DO K=LPBL,LMH
  809. Q1(K)=SQRT(Q2(K))
  810. ENDDO
  811. !----------------------------------------------------------------------
  812. SZQ=0.
  813. SQ =0.
  814. !
  815. DO K=KTS,LMH-1
  816. QDZL=(Q1(K)+Q1(K+1))*(Z(K+1)-Z(K+2))
  817. SZQ=(Z(K+1)+Z(K+2)-Z(LMH+1)-Z(LMH+1))*QDZL+SZQ
  818. SQ=QDZL+SQ
  819. ENDDO
  820. !
  821. !----------------------------------------------------------------------
  822. !*** COMPUTATION OF ASYMPTOTIC L IN BLACKADAR FORMULA
  823. !----------------------------------------------------------------------
  824. !
  825. EL0=MIN(ALPH*SZQ*0.5/SQ,EL0MAX)
  826. EL0=MAX(EL0 ,EL0MIN)
  827. !
  828. !----------------------------------------------------------------------
  829. !*** ABOVE THE PBL TOP
  830. !----------------------------------------------------------------------
  831. !
  832. LPBLM=MAX(LPBL-1,1)
  833. !
  834. DO K=KTS,LPBLM
  835. EL(K)=MIN((Z(K)-Z(K+2))*ELFC,ELM(K))
  836. REL(K)=EL(K)/ELM(K)
  837. ENDDO
  838. !
  839. !----------------------------------------------------------------------
  840. !*** INSIDE THE PBL
  841. !----------------------------------------------------------------------
  842. !
  843. IF(LPBL<LMH)THEN
  844. DO K=LPBL,LMH-1
  845. VKRMZ=(Z(K+1)-Z(LMH+1))*VKARMAN
  846. EL(K)=MIN(VKRMZ/(VKRMZ/EL0+1.),ELM(K))
  847. REL(K)=EL(K)/ELM(K)
  848. ENDDO
  849. ENDIF
  850. !
  851. DO K=LPBL+1,LMH-2
  852. SREL=MIN(((REL(K-1)+REL(K+1))*0.5+REL(K))*0.5,REL(K))
  853. EL(K)=MAX(SREL*ELM(K),EPSL)
  854. ENDDO
  855. !
  856. !----------------------------------------------------------------------
  857. !*** MIXING LENGTH FOR THE QNSE MODEL IN STABLE CASE
  858. !----------------------------------------------------------------------
  859. !
  860. F=MAX(CORF,EPS1)
  861. RLAMBDA=F/(BLCKDR*USTAR)
  862. DO K=KTS,LMH-1
  863. IF(EN2(K)>=0.0)THEN ! Stable case
  864. VKRMZ=(Z(K+1)-Z(LMH+1))*VKARMAN
  865. RLB=RLAMBDA+1./VKRMZ
  866. RLN=SQRT(2.*EN2(K)/Q2(K))/CN
  867. ! EL(K)=MIN(1./(RLB+RLN),ELM(K))
  868. EL(K)=1./(RLB+RLN)
  869. ENDIF
  870. ENDDO
  871. !
  872. !----------------------------------------------------------------------
  873. END SUBROUTINE MIXLEN
  874. !----------------------------------------------------------------------
  875. !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  876. !----------------------------------------------------------------------
  877. SUBROUTINE PRODQ2 &
  878. !----------------------------------------------------------------------
  879. ! ******************************************************************
  880. ! * *
  881. ! * LEVEL 2.5 Q2 PRODUCTION/DISSIPATION *
  882. ! * *
  883. ! ******************************************************************
  884. !
  885. &(LMH,DTTURBL,USTAR,S2,RI,Q2,EL,Z,AKM,AKH,WTHV_MF &
  886. &,IDS,IDE,JDS,JDE,KDS,KDE &
  887. &,IMS,IME,JMS,JME,KMS,KME &
  888. &,ITS,ITE,JTS,JTE,KTS,KTE)
  889. !----------------------------------------------------------------------
  890. !
  891. IMPLICIT NONE
  892. !
  893. !----------------------------------------------------------------------
  894. INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
  895. & ,IMS,IME,JMS,JME,KMS,KME &
  896. & ,ITS,ITE,JTS,JTE,KTS,KTE
  897. !
  898. INTEGER,INTENT(IN) :: LMH
  899. !
  900. REAL,INTENT(IN) :: DTTURBL,USTAR
  901. !
  902. REAL,DIMENSION(KTS:KTE-1),INTENT(IN) :: S2,RI,AKM,AKH,EL
  903. !
  904. REAL,DIMENSION(KTS:KTE+1),INTENT(IN) :: Z
  905. !
  906. REAL,DIMENSION(KTS:KTE),INTENT(IN) :: WTHV_MF
  907. REAL,DIMENSION(KTS:KTE),INTENT(INOUT) :: Q2
  908. !----------------------------------------------------------------------
  909. !***
  910. !*** LOCAL VARIABLES
  911. !***
  912. INTEGER :: K
  913. !
  914. REAL :: S2L,Q2L,DELTAZ,AKML,AKHL,EN2,PR,BPR,DIS,RC02
  915. !
  916. !----------------------------------------------------------------------
  917. !**********************************************************************
  918. !----------------------------------------------------------------------
  919. !
  920. RC02=2.0/(C0*C0)
  921. main_integration: DO K=1,LMH-1
  922. S2L=S2(K)
  923. Q2L=Q2(K)
  924. DELTAZ=0.5*(Z(K)-Z(K+2))
  925. AKML=AKM(K)*DELTAZ
  926. AKHL=AKH(K)*DELTAZ
  927. EN2=RI(K)*S2L !N**2
  928. !
  929. !*** TURBULENCE PRODUCTION TERM
  930. !
  931. PR=AKML*S2L
  932. !
  933. !*** BUOYANCY PRODUCTION
  934. !
  935. BPR=AKHL*EN2
  936. ! BPR=BPR-WTHV_MF(K)
  937. !*** DISSIPATION
  938. !
  939. DIS=CEPS*(0.5*Q2L)**1.5/EL(K)
  940. !
  941. Q2L=Q2L+2.0*(PR-BPR-DIS)*DTTURBL
  942. Q2(K)=AMAX1(Q2L,EPSQ2L)
  943. !----------------------------------------------------------------------
  944. !*** END OF PRODUCTION/DISSIPATION LOOP
  945. !----------------------------------------------------------------------
  946. !
  947. ENDDO main_integration
  948. !
  949. !----------------------------------------------------------------------
  950. !*** LOWER BOUNDARY CONDITION FOR Q2
  951. !----------------------------------------------------------------------
  952. !
  953. Q2(LMH)=AMAX1(RC02*USTAR*USTAR,EPSQ2L)
  954. !----------------------------------------------------------------------
  955. !
  956. END SUBROUTINE PRODQ2
  957. !
  958. !----------------------------------------------------------------------
  959. !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  960. !----------------------------------------------------------------------
  961. SUBROUTINE DIFCOF &
  962. ! ******************************************************************
  963. ! * *
  964. ! * DIFFUSION COEFFICIENTS KM, KH BASED ON THE QNSE THEORY *
  965. ! * *
  966. ! ******************************************************************
  967. &(LMH,EL,RI,Q2,Z,AKM,AKH &
  968. &,IDS,IDE,JDS,JDE,KDS,KDE &
  969. &,IMS,IME,JMS,JME,KMS,KME &
  970. &,ITS,ITE,JTS,JTE,KTS,KTE,PRINT_DIAG) ! debug
  971. !----------------------------------------------------------------------
  972. !
  973. IMPLICIT NONE
  974. !
  975. !----------------------------------------------------------------------
  976. INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
  977. & ,IMS,IME,JMS,JME,KMS,KME &
  978. & ,ITS,ITE,JTS,JTE,KTS,KTE
  979. !
  980. INTEGER,INTENT(IN) :: LMH
  981. !
  982. REAL,DIMENSION(KTS:KTE),INTENT(IN) :: Q2
  983. REAL,DIMENSION(KTS:KTE-1),INTENT(IN) :: EL,RI
  984. REAL,DIMENSION(KTS:KTE+1),INTENT(IN) :: Z
  985. !
  986. REAL,DIMENSION(KTS:KTE-1),INTENT(OUT) :: AKH,AKM
  987. !----------------------------------------------------------------------
  988. !***
  989. !*** LOCAL VARIABLES
  990. !***
  991. INTEGER :: K
  992. !
  993. REAL :: AK0,ALPHAM,ALPHAH,RIL,RIL2,ARIL,ARIL2,ARIL4,ELL,Q1L,RDZ &
  994. & ,AK0DZ,AKMIN
  995. !
  996. !*** Begin debugging
  997. INTEGER,INTENT(IN) :: PRINT_DIAG
  998. ! REAL :: D2Tmin
  999. !*** End debugging
  1000. !
  1001. !----------------------------------------------------------------------
  1002. !**********************************************************************
  1003. !----------------------------------------------------------------------
  1004. !
  1005. DO K=1,LMH-1
  1006. ELL=EL(K)
  1007. Q1L=SQRT(0.5*Q2(K)) !Note that Q1L is SQRT(TKE)
  1008. RIL=RI(K)
  1009. AK0=C0*ELL*Q1L !KM in neutral case
  1010. !
  1011. !----------------------------------------------------------------------
  1012. !*** STABILITY FUNCTIONS ALPHAM AND ALPHAH
  1013. !----------------------------------------------------------------------
  1014. !
  1015. !!! UNSTABLE CASE
  1016. !
  1017. IF(RIL<=0) THEN
  1018. ARIL=MIN(ABS(RIL),2.*ARIMIN)
  1019. ARIL2=ARIL*ARIL
  1020. ARIL4=ARIL2*ARIL2
  1021. ALPHAM=1.0+BM1*ARIL+BM2*ARIL2
  1022. ALPHAH=AH1+BH1*ARIL+BH2*ARIL2+BH3*ARIL4
  1023. !
  1024. !!! STABLE CASE
  1025. !
  1026. ELSE
  1027. RIL2=RIL*RIL
  1028. ALPHAM=(1.0+AM1*RIL2)/(1.0+AM2*RIL+AM3*RIL2)
  1029. ALPHAH=(AH1+AH2*RIL+AH3*RIL2)/(1.0+AH4*RIL+AH5*RIL2)
  1030. ENDIF
  1031. !
  1032. !-----------------------------------------------------------------------
  1033. !*** END OF STABILITY FUNCTIONS COMPUTATIONS
  1034. !-----------------------------------------------------------------------
  1035. !
  1036. !----------------------------------------------------------------------
  1037. !*** DIFFUSION COEFFICIENTS
  1038. !----------------------------------------------------------------------
  1039. !
  1040. RDZ=2./(Z(K)-Z(K+2))
  1041. AK0DZ=AK0*RDZ
  1042. AKMIN=EPSKM*RDZ
  1043. AKM(K)=MAX(AK0DZ*ALPHAM,AKMIN)
  1044. AKH(K)=MAX(AK0DZ*ALPHAH,AKMIN)
  1045. !----------------------------------------------------------------------
  1046. ENDDO
  1047. !----------------------------------------------------------------------
  1048. !
  1049. END SUBROUTINE DIFCOF
  1050. !
  1051. !----------------------------------------------------------------------
  1052. !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  1053. !----------------------------------------------------------------------
  1054. SUBROUTINE VDIFQ &
  1055. ! ******************************************************************
  1056. ! * *
  1057. ! * VERTICAL DIFFUSION OF Q2 (TKE) *
  1058. ! * *
  1059. ! ******************************************************************
  1060. &(LMH,DTDIF,Q2,EL,Z &
  1061. &,IDS,IDE,JDS,JDE,KDS,KDE &
  1062. &,IMS,IME,JMS,JME,KMS,KME &
  1063. &,ITS,ITE,JTS,JTE,KTS,KTE)
  1064. !----------------------------------------------------------------------
  1065. !
  1066. IMPLICIT NONE
  1067. !
  1068. !----------------------------------------------------------------------
  1069. INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
  1070. & ,IMS,IME,JMS,JME,KMS,KME &
  1071. & ,ITS,ITE,JTS,JTE,KTS,KTE
  1072. !
  1073. INTEGER,INTENT(IN) :: LMH
  1074. !
  1075. REAL,INTENT(IN) :: DTDIF
  1076. !
  1077. REAL,DIMENSION(KTS:KTE-1),INTENT(IN) :: EL
  1078. REAL,DIMENSION(KTS:KTE+1),INTENT(IN) :: Z
  1079. !
  1080. REAL,DIMENSION(KTS:KTE),INTENT(INOUT) :: Q2
  1081. !----------------------------------------------------------------------
  1082. !***
  1083. !*** LOCAL VARIABLES
  1084. !***
  1085. INTEGER :: K
  1086. !
  1087. REAL :: ADEN,AKQS,BDEN,BESH,BESM,CDEN,CF,DTOZS,ELL,ELOQ2,ELOQ4 &
  1088. & ,ELQDZ,ESH,ESM,ESQHF,GHL,GML,Q1L,RDEN,RDZ
  1089. !
  1090. REAL,DIMENSION(KTS:KTE-2) :: AKQ,CM,CR,DTOZ,RSQ2
  1091. !----------------------------------------------------------------------
  1092. !**********************************************************************
  1093. !----------------------------------------------------------------------
  1094. !***
  1095. !*** VERTICAL TURBULENT DIFFUSION
  1096. !***
  1097. !----------------------------------------------------------------------
  1098. ESQHF=0.5*ESQ
  1099. !
  1100. DO K=KTS,LMH-2
  1101. DTOZ(K)=(DTDIF+DTDIF)/(Z(K)-Z(K+2))
  1102. AKQ(K)=SQRT((Q2(K)+Q2(K+1))*0.5)*(EL(K)+EL(K+1))*ESQHF &
  1103. & /(Z(K+1)-Z(K+2))
  1104. CR(K)=-DTOZ(K)*AKQ(K)
  1105. ENDDO
  1106. !
  1107. CM(1)=DTOZ(1)*AKQ(1)+1.
  1108. RSQ2(1)=Q2(1)
  1109. !
  1110. DO K=KTS+1,LMH-2
  1111. CF=-DTOZ(K)*AKQ(K-1)/CM(K-1)
  1112. CM(K)=-CR(K-1)*CF+(AKQ(K-1)+AKQ(K))*DTOZ(K)+1.
  1113. RSQ2(K)=-RSQ2(K-1)*CF+Q2(K)
  1114. ENDDO
  1115. !
  1116. DTOZS=(DTDIF+DTDIF)/(Z(LMH-1)-Z(LMH+1))
  1117. AKQS=SQRT((Q2(LMH-1)+Q2(LMH))*0.5)*(EL(LMH-1)+ELZ0)*ESQHF &
  1118. & /(Z(LMH)-Z(LMH+1))
  1119. !
  1120. CF=-DTOZS*AKQ(LMH-2)/CM(LMH-2)
  1121. !
  1122. Q2(LMH-1)=(DTOZS*AKQS*Q2(LMH)-RSQ2(LMH-2)*CF+Q2(LMH-1)) &
  1123. & /((AKQ(LMH-2)+AKQS)*DTOZS-CR(LMH-2)*CF+1.)
  1124. !
  1125. DO K=LMH-2,KTS,-1
  1126. Q2(K)=(-CR(K)*Q2(K+1)+RSQ2(K))/CM(K)
  1127. ENDDO
  1128. !----------------------------------------------------------------------
  1129. !
  1130. END SUBROUTINE VDIFQ
  1131. !
  1132. !----------------------------------------------------------------------
  1133. !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  1134. !---------------------------------------------------------------------
  1135. SUBROUTINE VDIFH(DTDIF,LMH,THZ0,QZ0,RKHS,CHKLOWQ,CT &
  1136. & ,THE,Q,CWM,RKH,Z,RHO &
  1137. & ,IDS,IDE,JDS,JDE,KDS,KDE &
  1138. & ,IMS,IME,JMS,JME,KMS,KME &
  1139. & ,ITS,ITE,JTS,JTE,KTS,KTE,I,J)
  1140. ! ***************************************************************
  1141. ! * *
  1142. ! * VERTICAL DIFFUSION OF MASS VARIABLES *
  1143. ! * *
  1144. ! ***************************************************************
  1145. !---------------------------------------------------------------------
  1146. !
  1147. IMPLICIT NONE
  1148. !
  1149. !---------------------------------------------------------------------
  1150. INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
  1151. & ,IMS,IME,JMS,JME,KMS,KME &
  1152. & ,ITS,ITE,JTS,JTE,KTS,KTE,I,J
  1153. !
  1154. INTEGER,INTENT(IN) :: LMH
  1155. !
  1156. REAL,INTENT(IN) :: CHKLOWQ,CT,DTDIF,QZ0,RKHS,THZ0
  1157. !
  1158. REAL,DIMENSION(KTS:KTE-1),INTENT(IN) :: RKH
  1159. REAL,DIMENSION(KTS:KTE),INTENT(IN) :: RHO
  1160. REAL,DIMENSION(KTS:KTE+1),INTENT(IN) :: Z
  1161. REAL,DIMENSION(KTS:KTE),INTENT(INOUT) :: CWM,Q,THE
  1162. !
  1163. !----------------------------------------------------------------------
  1164. !***
  1165. !*** LOCAL VARIABLES
  1166. !***
  1167. INTEGER :: K
  1168. !
  1169. REAL :: CF,CMB,CMCB,CMQB,CMTB,CTHF,DTOZL,DTOZS &
  1170. & ,RCML,RKHH,RKQS,RSCB,RSQB,RSTB
  1171. !
  1172. REAL,DIMENSION(KTS:KTE-1) :: CM,CR,DTOZ,RKCT,RSC,RSQ,RST
  1173. !
  1174. !----------------------------------------------------------------------
  1175. !**********************************************************************
  1176. !----------------------------------------------------------------------
  1177. CTHF=0.5*CT
  1178. !
  1179. DO K=KTS,LMH-1
  1180. DTOZ(K)=DTDIF/(Z(K)-Z(K+1))
  1181. CR(K)=-DTOZ(K)*RKH(K)
  1182. RKCT(K)=RKH(K)*(Z(K)-Z(K+2))*CTHF
  1183. ENDDO
  1184. !
  1185. CM(KTS)=DTOZ(KTS)*RKH(KTS)+RHO(KTS)
  1186. !----------------------------------------------------------------------
  1187. RST(KTS)=-RKCT(KTS)*DTOZ(KTS) &
  1188. & +THE(KTS)*RHO(KTS)
  1189. RSQ(KTS)=Q(KTS) *RHO(KTS)
  1190. RSC(KTS)=CWM(KTS)*RHO(KTS)
  1191. !----------------------------------------------------------------------
  1192. DO K=KTS+1,LMH-1
  1193. DTOZL=DTOZ(K)
  1194. CF=-DTOZL*RKH(K-1)/CM(K-1)
  1195. CM(K)=-CR(K-1)*CF+(RKH(K-1)+RKH(K))*DTOZL+RHO(K)
  1196. RST(K)=-RST(K-1)*CF+(RKCT(K-1)-RKCT(K))*DTOZL+THE(K)*RHO(K)
  1197. RSQ(K)=-RSQ(K-1)*CF+Q(K) *RHO(K)
  1198. RSC(K)=-RSC(K-1)*CF+CWM(K)*RHO(K)
  1199. ENDDO
  1200. !
  1201. DTOZS=DTDIF/(Z(LMH)-Z(LMH+1))
  1202. RKHH=RKH(LMH-1)
  1203. !
  1204. CF=-DTOZS*RKHH/CM(LMH-1)
  1205. RKQS=RKHS*CHKLOWQ
  1206. !
  1207. CMB=CR(LMH-1)*CF
  1208. CMTB=-CMB+(RKHH+RKHS)*DTOZS+RHO(LMH)
  1209. CMQB=-CMB+(RKHH+RKQS)*DTOZS+RHO(LMH)
  1210. CMCB=-CMB+(RKHH )*DTOZS+RHO(LMH)
  1211. !
  1212. RSTB=-RST(LMH-1)*CF+RKCT(LMH-1)*DTOZS+THE(LMH)*RHO(LMH)
  1213. RSQB=-RSQ(LMH-1)*CF+Q(LMH) *RHO(LMH)
  1214. RSCB=-RSC(LMH-1)*CF+CWM(LMH)*RHO(LMH)
  1215. !----------------------------------------------------------------------
  1216. THE(LMH)=(DTOZS*RKHS*THZ0+RSTB)/CMTB
  1217. Q(LMH) =(DTOZS*RKQS*QZ0 +RSQB)/CMQB
  1218. CWM(LMH)=( RSCB)/CMCB
  1219. !----------------------------------------------------------------------
  1220. DO K=LMH-1,KTS,-1
  1221. RCML=1./CM(K)
  1222. THE(K)=(-CR(K)*THE(K+1)+RST(K))*RCML
  1223. Q(K) =(-CR(K)* Q(K+1)+RSQ(K))*RCML
  1224. CWM(K)=(-CR(K)*CWM(K+1)+RSC(K))*RCML
  1225. ENDDO
  1226. !----------------------------------------------------------------------
  1227. !
  1228. END SUBROUTINE VDIFH
  1229. !
  1230. !---------------------------------------------------------------------
  1231. !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  1232. !---------------------------------------------------------------------
  1233. SUBROUTINE VDIFV(LMH,DTDIF,UZ0,VZ0,RKMS,U,V,RKM,Z,RHO &
  1234. & ,IDS,IDE,JDS,JDE,KDS,KDE &
  1235. & ,IMS,IME,JMS,JME,KMS,KME &
  1236. ,ITS,ITE,JTS,JTE,KTS,KTE,I,J)
  1237. ! ***************************************************************
  1238. ! * *
  1239. ! * VERTICAL DIFFUSION OF VELOCITY COMPONENTS *
  1240. ! * *
  1241. ! ***************************************************************
  1242. !---------------------------------------------------------------------
  1243. !
  1244. IMPLICIT NONE
  1245. !
  1246. !---------------------------------------------------------------------
  1247. INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
  1248. & ,IMS,IME,JMS,JME,KMS,KME &
  1249. & ,ITS,ITE,JTS,JTE,KTS,KTE,I,J
  1250. !
  1251. INTEGER,INTENT(IN) :: LMH
  1252. !
  1253. REAL,INTENT(IN) :: RKMS,DTDIF,UZ0,VZ0
  1254. !
  1255. REAL,DIMENSION(KTS:KTE-1),INTENT(IN) :: RKM
  1256. REAL,DIMENSION(KTS:KTE),INTENT(IN) :: RHO
  1257. REAL,DIMENSION(KTS:KTE+1),INTENT(IN) :: Z
  1258. !
  1259. REAL,DIMENSION(KTS:KTE),INTENT(INOUT) :: U,V
  1260. !----------------------------------------------------------------------
  1261. !***
  1262. !*** LOCAL VARIABLES
  1263. !***
  1264. INTEGER :: K
  1265. !
  1266. REAL :: CF,DTOZAK,DTOZL,DTOZS,RCML,RCMVB,RHOK,RKMH
  1267. !
  1268. REAL,DIMENSION(KTS:KTE-1) :: CM,CR,DTOZ,RSU,RSV
  1269. !----------------------------------------------------------------------
  1270. !**********************************************************************
  1271. !----------------------------------------------------------------------
  1272. DO K=1,LMH-1
  1273. DTOZ(K)=DTDIF/(Z(K)-Z(K+1))
  1274. CR(K)=-DTOZ(K)*RKM(K)
  1275. ENDDO
  1276. !
  1277. RHOK=RHO(1)
  1278. CM(1)=DTOZ(1)*RKM(1)+RHOK
  1279. RSU(1)=U(1)*RHOK
  1280. RSV(1)=V(1)*RHOK
  1281. !----------------------------------------------------------------------
  1282. DO K=2,LMH-1
  1283. DTOZL=DTOZ(K)
  1284. CF=-DTOZL*RKM(K-1)/CM(K-1)
  1285. RHOK=RHO(K)
  1286. CM(K)=-CR(K-1)*CF+(RKM(K-1)+RKM(K))*DTOZL+RHOK
  1287. RSU(K)=-RSU(K-1)*CF+U(K)*RHOK
  1288. RSV(K)=-RSV(K-1)*CF+V(K)*RHOK
  1289. ENDDO
  1290. !----------------------------------------------------------------------
  1291. DTOZS=DTDIF/(Z(LMH)-Z(LMH+1))
  1292. RKMH=RKM(LMH-1)
  1293. !
  1294. CF=-DTOZS*RKMH/CM(LMH-1)
  1295. RHOK=RHO(LMH)
  1296. RCMVB=1./((RKMH+RKMS)*DTOZS-CR(LMH-1)*CF+RHOK)
  1297. DTOZAK=DTOZS*RKMS
  1298. !----------------------------------------------------------------------
  1299. U(LMH)=(DTOZAK*UZ0-RSU(LMH-1)*CF+U(LMH)*RHOK)*RCMVB
  1300. V(LMH)=(DTOZAK*VZ0-RSV(LMH-1)*CF+V(LMH)*RHOK)*RCMVB
  1301. !----------------------------------------------------------------------
  1302. DO K=LMH-1,1,-1
  1303. RCML=1./CM(K)
  1304. U(K)=(-CR(K)*U(K+1)+RSU(K))*RCML
  1305. V(K)=(-CR(K)*V(K+1)+RSV(K))*RCML
  1306. ENDDO
  1307. !----------------------------------------------------------------------
  1308. !

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