PageRenderTime 57ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/wrfv2_fire/phys/module_sf_pxsfclay.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 528 lines | 306 code | 61 blank | 161 comment | 0 complexity | 36971520013eeb1ad037a87d74cd94a4 MD5 | raw file
Possible License(s): AGPL-1.0
  1. !WRF:MODEL_LAYER:PHYSICS
  2. !
  3. MODULE module_sf_pxsfclay
  4. REAL , PARAMETER :: RICRIT = 0.25 !critical Richardson number
  5. REAL , PARAMETER :: BETAH = 5.0 ! 8.21
  6. REAL , PARAMETER :: BETAM = 5.0 ! 6.0
  7. REAL , PARAMETER :: BM = 13.0
  8. REAL , PARAMETER :: BH = 15.7
  9. REAL , PARAMETER :: GAMAM = 19.3
  10. REAL , PARAMETER :: GAMAH = 11.6
  11. REAL , PARAMETER :: PR0 = 0.95
  12. REAL , PARAMETER :: CZO = 0.032
  13. REAL , PARAMETER :: OZO = 1.E-4
  14. REAL , PARAMETER :: VCONVC = 1.0
  15. CONTAINS
  16. !-------------------------------------------------------------------
  17. SUBROUTINE PXSFCLAY(U3D,V3D,T3D,TH3D,QV3D,P3D,dz8w, &
  18. CP,G,ROVCP,R,XLV,PSFC,CHS,CHS2,CQS2,CPM, &
  19. ZNT,UST,PBLH,MAVAIL,ZOL,MOL,REGIME,PSIM,PSIH, &
  20. XLAND,HFX,QFX,LH,TSK,FLHC,FLQC,QGH,QSFC,RMOL, &
  21. U10,V10, &
  22. GZ1OZ0,WSPD,BR,ISFFLX,DX, &
  23. SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN, &
  24. ids,ide, jds,jde, kds,kde, &
  25. ims,ime, jms,jme, kms,kme, &
  26. its,ite, jts,jte, kts,kte )
  27. !-------------------------------------------------------------------
  28. IMPLICIT NONE
  29. !-------------------------------------------------------------------
  30. ! THIS MODULE COMPUTES SFC RELATED PARAMETERS (U*, RA, REGIME, etc.)
  31. ! USING A MODIFIED RICHARDSON NUMBER PARAMETERIZATIONS.
  32. !
  33. ! THE PARAMETERIZATIONS OF THE PSI FUNCTIONS FOR UNSTABLE CONDITIONS
  34. ! HAVE BEEN REPLACED WITH EMPIRICAL EXPRESSIONS WHICH RELATE RB DIRECTLY
  35. ! TO PSIH AND PSIM. THESE EXPRESSIONS ARE FIT TO THE DYER (1974) FUNCTIONS
  36. ! WITH HOGSTROM (1988) REVISED COEFFICIENTS. ALSO, THESE EXPERESSIONS
  37. ! ASSUME A LAMINAR SUBLAYER RESISTANCE FOR HEAT (Rb = 5/U*) - JP 8/01
  38. !
  39. ! Reference: Pleim (2006): JAMC, 45, 341-347
  40. !
  41. ! REVISION HISTORY:
  42. ! A. Xiu 2/2005 - developed WRF version based on the MM5 PX LSM
  43. ! R. Gilliam 7/2006 - completed implementation into WRF model
  44. !***********************************************************************
  45. !-------------------------------------------------------------------
  46. !-- U3D 3D u-velocity interpolated to theta points (m/s)
  47. !-- V3D 3D v-velocity interpolated to theta points (m/s)
  48. !-- T3D temperature (K)
  49. !-- TH3D potential temperature (K)
  50. !-- QV3D 3D water vapor mixing ratio (Kg/Kg)
  51. !-- P3D 3D pressure (Pa)
  52. !-- dz8w dz between full levels (m)
  53. !-- CP heat capacity at constant pressure for dry air (J/kg/K)
  54. !-- G acceleration due to gravity (m/s^2)
  55. !-- ROVCP R/CP
  56. !-- R gas constant for dry air (j/kg/k)
  57. !-- XLV latent heat of vaporization (j/kg)
  58. !-- PSFC surface pressure (Pa)
  59. !-- CHS exchange coefficient for heat (m/s)
  60. !-- CHS2 exchange coefficient for heat at 2 m (m/s)
  61. !-- CQS2 exchange coefficient for moisture at 2 m (m/s)
  62. !-- CPM heat capacity at constant pressure for moist air (J/kg/K)
  63. !-- ZNT roughness length (m)
  64. !-- UST u* in similarity theory (m/s)
  65. !-- PBLH PBL height from previous time (m)
  66. !-- MAVAIL surface moisture availability (between 0 and 1)
  67. !-- ZOL z/L height over Monin-Obukhov length
  68. !-- MOL T* (similarity theory) (K)
  69. !-- REGIME flag indicating PBL regime (stable, unstable, etc.)
  70. !-- PSIM similarity stability function for momentum
  71. !-- PSIH similarity stability function for heat
  72. !-- XLAND land mask (1 for land, 2 for water)
  73. !-- HFX upward heat flux at the surface (W/m^2)
  74. !-- QFX upward moisture flux at the surface (kg/m^2/s)
  75. !-- LH net upward latent heat flux at surface (W/m^2)
  76. !-- TSK surface temperature (K)
  77. !-- FLHC exchange coefficient for heat (m/s)
  78. !-- FLQC exchange coefficient for moisture (m/s)
  79. !-- QGH lowest-level saturated mixing ratio
  80. !-- QSFC SPECIFIC HUMIDITY AT LOWER BOUNDARY
  81. !-- RMOL inverse Monin-Obukhov length (1/m)
  82. !-- U10 diagnostic 10m u wind
  83. !-- V10 diagnostic 10m v wind
  84. !-- GZ1OZ0 log(z/z0) where z0 is roughness length
  85. !-- WSPD wind speed at lowest model level (m/s)
  86. !-- BR bulk Richardson number in surface layer
  87. !-- ISFFLX isfflx=1 for surface heat and moisture fluxes
  88. !-- DX horizontal grid size (m)
  89. !-- SVP1 constant for saturation vapor pressure (kPa)
  90. !-- SVP2 constant for saturation vapor pressure (dimensionless)
  91. !-- SVP3 constant for saturation vapor pressure (K)
  92. !-- SVPT0 constant for saturation vapor pressure (K)
  93. !-- EP1 constant for virtual temperature (R_v/R_d - 1) (dimensionless)
  94. !-- EP2 constant for specific humidity calculation
  95. ! (R_d/R_v) (dimensionless)
  96. !-- KARMAN Von Karman constant
  97. !-- ids start index for i in domain
  98. !-- ide end index for i in domain
  99. !-- jds start index for j in domain
  100. !-- jde end index for j in domain
  101. !-- kds start index for k in domain
  102. !-- kde end index for k in domain
  103. !-- ims start index for i in memory
  104. !-- ime end index for i in memory
  105. !-- jms start index for j in memory
  106. !-- jme end index for j in memory
  107. !-- kms start index for k in memory
  108. !-- kme end index for k in memory
  109. !-- its start index for i in tile
  110. !-- ite end index for i in tile
  111. !-- jts start index for j in tile
  112. !-- jte end index for j in tile
  113. !-- kts start index for k in tile
  114. !-- kte end index for k in tile
  115. !-------------------------------------------------------------------
  116. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
  117. ims,ime, jms,jme, kms,kme, &
  118. its,ite, jts,jte, kts,kte
  119. !
  120. INTEGER, INTENT(IN ) :: ISFFLX
  121. REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
  122. REAL, INTENT(IN ) :: EP1,EP2,KARMAN
  123. !
  124. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  125. INTENT(IN ) :: dz8w
  126. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  127. INTENT(IN ) :: QV3D, &
  128. P3D, &
  129. T3D, &
  130. TH3D
  131. REAL, DIMENSION( ims:ime, jms:jme ) , &
  132. INTENT(IN ) :: MAVAIL, &
  133. PBLH, &
  134. XLAND, &
  135. TSK
  136. REAL, DIMENSION( ims:ime, jms:jme ) , &
  137. INTENT(OUT ) :: U10, &
  138. V10, &
  139. QSFC
  140. !
  141. REAL, DIMENSION( ims:ime, jms:jme ) , &
  142. INTENT(INOUT) :: REGIME, &
  143. HFX, &
  144. QFX, &
  145. LH, &
  146. MOL,RMOL
  147. !m the following 5 are change to memory size
  148. !
  149. REAL, DIMENSION( ims:ime, jms:jme ) , &
  150. INTENT(INOUT) :: GZ1OZ0,WSPD,BR, &
  151. PSIM,PSIH
  152. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  153. INTENT(IN ) :: U3D, &
  154. V3D
  155. REAL, DIMENSION( ims:ime, jms:jme ) , &
  156. INTENT(IN ) :: PSFC
  157. REAL, DIMENSION( ims:ime, jms:jme ) , &
  158. INTENT(INOUT) :: ZNT, &
  159. ZOL, &
  160. UST, &
  161. CPM, &
  162. CHS2, &
  163. CQS2, &
  164. CHS
  165. REAL, DIMENSION( ims:ime, jms:jme ) , &
  166. INTENT(INOUT) :: FLHC,FLQC
  167. REAL, DIMENSION( ims:ime, jms:jme ) , &
  168. INTENT(INOUT) :: &
  169. QGH
  170. REAL, INTENT(IN ) :: CP,G,ROVCP,R,XLV,DX
  171. ! LOCAL VARS
  172. REAL, DIMENSION( its:ite ) :: U1D, &
  173. V1D, &
  174. QV1D, &
  175. P1D, &
  176. T1D, &
  177. TH1D
  178. REAL, DIMENSION( its:ite ) :: dz8w1d
  179. INTEGER :: I,J
  180. DO J=jts,jte
  181. DO i=its,ite
  182. dz8w1d(i) =dz8w(i,1,j)
  183. U1D(i) =U3D(i,1,j)
  184. V1D(i) =V3D(i,1,j)
  185. QV1D(i) =QV3D(i,1,j)
  186. P1D(i) =P3D(i,1,j)
  187. T1D(i) =T3D(i,1,j)
  188. TH1D(i) =TH3D(i,1,j)
  189. ENDDO
  190. ! TST, WST, MOLENGTH, USTM need to be recaculated or passed in
  191. CALL PXSFCLAY1D(J,U1D,V1D,T1D,TH1D,QV1D,P1D,dz8w1d, &
  192. CP,G,ROVCP,R,XLV,PSFC(ims,j),CHS(ims,j),CHS2(ims,j), &
  193. CQS2(ims,j),CPM(ims,j),PBLH(ims,j), RMOL(ims,j), &
  194. ZNT(ims,j),UST(ims,j),MAVAIL(ims,j),ZOL(ims,j), &
  195. MOL(ims,j),REGIME(ims,j),PSIM(ims,j),PSIH(ims,j), &
  196. XLAND(ims,j),HFX(ims,j),QFX(ims,j),TSK(ims,j), &
  197. U10(ims,j),V10(ims,j), &
  198. FLHC(ims,j),FLQC(ims,j),QGH(ims,j), &
  199. QSFC(ims,j),LH(ims,j), &
  200. GZ1OZ0(ims,j),WSPD(ims,j),BR(ims,j),ISFFLX,DX, &
  201. SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN, &
  202. ids,ide, jds,jde, kds,kde, &
  203. ims,ime, jms,jme, kms,kme, &
  204. its,ite, jts,jte, kts,kte )
  205. ENDDO
  206. END SUBROUTINE PXSFCLAY
  207. !====================================================================
  208. SUBROUTINE PXSFCLAY1D(J,US,VS,T1D,THETA1,QV1D,P1D,dz8w1d, &
  209. CP,G,ROVCP,R,XLV,PSFCPA,CHS,CHS2,CQS2,CPM,PBLH,RMOL, &
  210. ZNT,UST,MAVAIL,ZOL,MOL,REGIME,PSIM,PSIH, &
  211. XLAND,HFX,QFX,TG, &
  212. U10,V10,FLHC,FLQC,QGH, &
  213. QSFC,LH,GZ1OZ0,WSPD,BR,ISFFLX,DX, &
  214. SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN, &
  215. ids,ide, jds,jde, kds,kde, &
  216. ims,ime, jms,jme, kms,kme, &
  217. its,ite, jts,jte, kts,kte )
  218. !-------------------------------------------------------------------
  219. IMPLICIT NONE
  220. !-------------------------------------------------------------------
  221. REAL, PARAMETER :: XKA=2.4E-5
  222. REAL, PARAMETER :: PRT=1.
  223. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
  224. ims,ime, jms,jme, kms,kme, &
  225. its,ite, jts,jte, kts,kte, &
  226. J
  227. !
  228. INTEGER, INTENT(IN ) :: ISFFLX
  229. REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
  230. REAL, INTENT(IN ) :: EP1,EP2,KARMAN
  231. !
  232. REAL, DIMENSION( ims:ime ) , &
  233. INTENT(IN ) :: MAVAIL, &
  234. PBLH, &
  235. XLAND, &
  236. TG
  237. !
  238. REAL, DIMENSION( ims:ime ) , &
  239. INTENT(IN ) :: PSFCPA
  240. REAL, DIMENSION( ims:ime ) , &
  241. INTENT(INOUT) :: REGIME, &
  242. HFX, &
  243. QFX, &
  244. MOL,RMOL
  245. !m the following 5 are changed to memory size---
  246. !
  247. REAL, DIMENSION( ims:ime ) , &
  248. INTENT(INOUT) :: GZ1OZ0,WSPD,BR, &
  249. PSIM,PSIH
  250. REAL, DIMENSION( ims:ime ) , &
  251. INTENT(INOUT) :: ZNT, &
  252. ZOL, &
  253. UST, &
  254. CPM, &
  255. CHS2, &
  256. CQS2, &
  257. CHS
  258. REAL, DIMENSION( ims:ime ) , &
  259. INTENT(INOUT) :: FLHC,FLQC
  260. REAL, DIMENSION( ims:ime ) , &
  261. INTENT(INOUT) :: &
  262. QGH
  263. REAL, DIMENSION( ims:ime ) , &
  264. INTENT(OUT) :: U10,V10, &
  265. QSFC,LH
  266. REAL, INTENT(IN ) :: CP,G,ROVCP,XLV,DX,R
  267. ! MODULE-LOCAL VARIABLES, DEFINED IN SUBROUTINE SFCLAY
  268. REAL, DIMENSION( its:ite ), INTENT(IN ) :: dz8w1d
  269. REAL, DIMENSION( its:ite ), INTENT(IN ) :: US, &
  270. VS, &
  271. QV1D, &
  272. P1D, &
  273. T1D, &
  274. THETA1
  275. ! LOCAL VARS
  276. REAL, DIMENSION( its:ite ) :: ZA, &
  277. TH0, &
  278. THETAG, &
  279. WS, &
  280. RICUT, &
  281. USTM, &
  282. RA, &
  283. THETAV1, &
  284. MOLENGTH
  285. !
  286. REAL, DIMENSION( its:ite ) :: &
  287. RHOX,GOVRTH
  288. !
  289. REAL, DIMENSION( its:ite ) :: PSFC
  290. !
  291. INTEGER :: KL
  292. INTEGER :: N,I,K,KK,L,NZOL,NK,NZOL2,NZOL10
  293. REAL :: PL,THCON,TVCON,E1
  294. REAL :: ZL,TSKV,DTHVDZ,DTHVM,VCONV,RZOL,RZOL2,RZOL10,ZOL2,ZOL10
  295. REAL :: DTG,PSIX,DTTHX,PSIX10,PSIT,PSIT2,PSIQ,PSIQ2
  296. REAL :: FLUXC,VSGD
  297. REAL :: XMOL,ZOBOL,Z10OL,ZNTOL,YNT,YOB,X1,X2
  298. REAL :: G2OZ0,G10OZ0,RA2,ZOLL
  299. REAL :: TV0,CPOT,RICRITI,AM,AH,SQLNZZ0,RBH,RBW,TSTV
  300. REAL :: PSIH2, PSIM2, PSIH10, PSIM10, CQS
  301. !-------------------------------Exicutable starts here--------------------
  302. DO i = its,ite
  303. ! PSFC cb
  304. PSFC(I) = PSFCPA(I)/1000.
  305. TVCON = 1.0 + EP1 * QV1D(I)
  306. THETAV1(I)= THETA1(I) * TVCON
  307. RHOX(I) = PSFCPA(I)/(R*T1D(I)*TVCON)
  308. ENDDO
  309. !
  310. !-----Compute virtual potential temperature at surface
  311. !
  312. DO I=its,ite
  313. E1=SVP1*EXP( SVP2*(TG(I)-SVPT0)/(TG(I)-SVP3) )
  314. QSFC(I)=EP2*E1/(PSFC(I)-E1)
  315. ! QGH CHANGED TO USE LOWEST-LEVEL AIR TEMP CONSISTENT WITH MYJSFC CHANGE
  316. ! Q2SAT = QGH IN LSM
  317. E1=SVP1*EXP(SVP2*(T1D(I)-SVPT0)/(T1D(I)-SVP3))
  318. PL = P1D(I)/1000.
  319. QGH(I)=EP2*E1/(PL-E1)
  320. CPM(I)=CP*(1.+0.8*QV1D(I))
  321. ENDDO
  322. !.......... compute the thetav at ground
  323. DO I = its, ite
  324. TV0 = TG(I) * (1.0 + EP1 * QSFC(I)*MAVAIL(I))
  325. CPOT = (100./PSFC(I))**ROVCP
  326. TH0(I) = TV0 * (100./PSFC(I))**ROVCP
  327. THETAG(I) = CPOT * TG(I)
  328. ENDDO
  329. !
  330. !-----COMPUTE THE HEIGHT OF FULL- AND HALF-SIGMA LEVELS ABOVE GROUND
  331. ! LEVEL, AND THE LAYER THICKNESSES.
  332. !
  333. !... DZ8W1D is DZ between full sigma levels and Z0 is the height of the first
  334. ! half sigma level
  335. DO I = its,ite
  336. ZA(I) = 0.5 * DZ8W1D(I)
  337. WS(I) = SQRT(US(I) * US(I) + VS(I) * VS(I))
  338. ENDDO
  339. !
  340. !-----CALCULATE BULK RICHARDSON NO. OF SURFACE LAYER, ACCORDING TO
  341. ! AKB(1976), EQ(12).
  342. RICRITI = 1.0 / RICRIT
  343. DO i = its,ite
  344. GZ1OZ0(I) = ALOG(ZA(I) / ZNT(I))
  345. DTHVDZ = THETAV1(I) - TH0(I)
  346. fluxc = max(hfx(i)/rhox(i)/cp &
  347. + ep1*TH0(I)*qfx(i)/rhox(i),0.)
  348. VCONV = vconvc*(g/tg(i)*pblh(i)*fluxc)**.33
  349. VSGD = 0.32 * (max(dx/5000.-1.,0.))**.33
  350. WSPD(I)=SQRT(WS(I)*WS(I)+VCONV*VCONV+vsgd*vsgd)
  351. WSPD(I) = AMAX1(WSPD(I),0.1)
  352. GOVRTH(I) = G / THETA1(I)
  353. BR(I) = GOVRTH(I) * ZA(I) * DTHVDZ / (WSPD(I) * WSPD(I))
  354. RICUT(I) = 1.0 / (RICRITI + GZ1OZ0(I))
  355. ENDDO
  356. DO I = its,ite
  357. ! -- NOTE THAT THE REGIMES USED IN HIRPBL HAVE BEEN CHANGED:
  358. ZOLL = 0.0
  359. IF (BR(I) .GE. RICUT(I)) THEN
  360. ! -----CLASS 1; VERY STABLE CONDITIONS: Z/L > 1
  361. REGIME(I) = 1.0
  362. ZOLL = BR(I) * GZ1OZ0(I) / (1.0 - RICRITI * RICUT(I))
  363. PSIM(I) = 1.0 - BETAM - ZOLL
  364. PSIH(I) = 1.0 - BETAH - ZOLL
  365. ELSE IF (BR(I) .GE. 0.0) THEN
  366. ! -----CLASS 2; STABLE: for 1 > Z/L >0
  367. REGIME(I) = 2.0
  368. ZOLL = BR(I) * GZ1OZ0(I) / (1.0 - RICRITI * BR(I))
  369. PSIM(I) = -BETAM * ZOLL
  370. PSIH(I) = -BETAH * ZOLL
  371. ELSE
  372. ! ----- CLASS 3 or 4; UNSTABLE:
  373. ! ----- CLASS 4 IS FOR ACM NON-LOCAL CONVECTION (H/L < -3)
  374. REGIME(I) = 3.0 ! Regime will be reset to 4 if ACM is used
  375. AM = 0.031 + 0.276 * ALOG(GZ1OZ0(I))
  376. AH = 0.04 + 0.355 * ALOG(GZ1OZ0(I))
  377. SQLNZZ0 = SQRT(GZ1OZ0(I))
  378. PSIM(I) = AM * ALOG(1.0 - BM * SQLNZZ0 * BR(I))
  379. PSIH(I) = AH * ALOG(1.0 - BH * SQLNZZ0 * BR(I))
  380. ENDIF
  381. ENDDO
  382. !
  383. ! -------- COMPUTE THE FRICTIONAL VELOCITY AND SURFACE FLUXES:
  384. DO I = its,ite
  385. DTG = THETA1(I) - THETAG(I)
  386. PSIX = GZ1OZ0(I) - PSIM(I)
  387. UST(I)=0.5*UST(I)+0.5*KARMAN*WSPD(I)/PSIX
  388. USTM(I) = UST(I)
  389. ! ------- OVER WATER, ALTER ROUGHNESS LENGTH (Z0) ACCORDING TO WIND (UST).
  390. !
  391. IF ((XLAND(I)-1.5) .GE. 0.0) THEN
  392. ZNT(I) = CZO * USTM(I) * USTM(I) / G + OZO
  393. GZ1OZ0(I) = ALOG(ZA(I) / ZNT(I))
  394. PSIX = GZ1OZ0(I) - PSIM(I)
  395. UST(I) = KARMAN * WSPD(I) / PSIX
  396. USTM(I) = UST(I)
  397. ENDIF
  398. RA(I) = PR0 * (GZ1OZ0(I) - PSIH(I)) / (KARMAN * UST(I))
  399. RBH = 5.0 / UST(I) ! 5/U* ! WESELY AND HICKS (1977)
  400. ! ------- RB FOR WATER VAPOR = 5*(0.599/0.709)^2/3 /UST = 4.47/UST hi
  401. RBW = 4.47/UST(I)
  402. CHS(I) = 1./(RA(I) + RBH)
  403. CQS = 1./(RA(I) + RBW)
  404. MOL(I) = DTG * CHS(I) / UST(I) ! This is really TST
  405. TSTV = (THETAV1(I) - TH0(I)) * CHS(I) / UST(I)
  406. IF (ABS(TSTV) .LT. 1.E-5) TSTV = 1.E-5
  407. MOLENGTH(I) = THETAV1(I) * UST(I) * UST(I) / (KARMAN * &
  408. G * TSTV)
  409. !
  410. ! ---Compute 2m surface exchange coefficients for heat and moisture
  411. XMOL = MOLENGTH(I)
  412. IF(MOLENGTH(I).GT.0.0) XMOL = AMAX1(MOLENGTH(I),2.0)
  413. RMOL(I) = 1/XMOL
  414. ZOL(I) = ZA(I)*RMOL(I)
  415. ZOBOL = 1.5*RMOL(I)
  416. Z10OL = 10.0*RMOL(I)
  417. ZNTOL = ZNT(I)*RMOL(I)
  418. IF(XMOL.LT.0.0) THEN
  419. YNT = ( 1.0 - GAMAH * ZNTOL )**0.5
  420. YOB = ( 1.0 - GAMAH * ZOBOL )**0.5
  421. PSIH2 = 2. * ALOG((YOB+1.0)/(YNT+1.0))
  422. x1 = (1.0 - gamam * z10ol)**0.25
  423. x2 = (1.0 - gamam * zntol)**0.25
  424. psim10 = 2.0 * ALOG( (1.0+x1) / (1.0+x2) ) + &
  425. ALOG( (1.0+x1*x1) / (1.0+x2*x2)) - &
  426. 2.0 * ATAN(x1) + 2.0 * ATAN(x2)
  427. ELSE
  428. IF((ZOBOL-ZNTOL).LE.1.0) THEN
  429. PSIH2 = -BETAH*(ZOBOL-ZNTOL)
  430. ELSE
  431. PSIH2 = 1.-BETAH-(ZOBOL-ZNTOL)
  432. ENDIF
  433. IF((Z10OL-ZNTOL).LE.1.0) THEN
  434. PSIM10 = -BETAM*(Z10OL-ZNTOL)
  435. ELSE
  436. PSIM10 = 1.-BETAM-(Z10OL-ZNTOL)
  437. ENDIF
  438. ENDIF
  439. G2OZ0 = ALOG(1.5 / ZNT(I))
  440. G10OZ0 = ALOG(10.0 / ZNT(I))
  441. RA2 = PR0 * (G2OZ0 - PSIH2) / (KARMAN * UST(I))
  442. CHS2(I) = 1.0/(RA2 + RBH)
  443. CQS2(I) = 1.0/(RA2 + RBW)
  444. U10(I) = US(I)*(G10OZ0-PSIM10)/PSIX
  445. V10(I) = VS(I)*(G10OZ0-PSIM10)/PSIX
  446. ! -----COMPUTE SURFACE HEAT AND MOIST FLUX:
  447. FLHC(i)=CPM(I)*RHOX(I)*CHS(I)
  448. FLQC(i)=RHOX(I)*CQS*MAVAIL(I)
  449. QFX(I)=FLQC(I)*(QSFC(I)-QV1D(I))
  450. QFX(I)=AMAX1(QFX(I),0.)
  451. LH(I)=XLV*QFX(I)
  452. IF(XLAND(I)-1.5.GT.0.)THEN
  453. HFX(I)=-FLHC(I)*DTG
  454. ELSEIF(XLAND(I)-1.5.LT.0.)THEN
  455. HFX(I)=-FLHC(I)*DTG
  456. HFX(I)=AMAX1(HFX(I),-250.)
  457. ENDIF
  458. ENDDO
  459. END SUBROUTINE PXSFCLAY1D
  460. !====================================================================
  461. SUBROUTINE pxsfclayinit( allowed_to_read )
  462. LOGICAL , INTENT(IN) :: allowed_to_read
  463. INTEGER :: N
  464. REAL :: ZOLN,X,Y
  465. END SUBROUTINE pxsfclayinit
  466. !-------------------------------------------------------------------
  467. END MODULE module_sf_pxsfclay