PageRenderTime 81ms CodeModel.GetById 39ms RepoModel.GetById 1ms app.codeStats 0ms

/wrfv2_fire/phys/module_sf_mynn.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 1595 lines | 759 code | 294 blank | 542 comment | 5 complexity | 517833b1cd11f840640a0c9b4bc8f439 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. MODULE module_sf_mynn
  2. !-------------------------------------------------------------------
  3. !Modifications implemented by Joseph Olson NOAA/GSD/AMB - CU/CIRES
  4. !for WRFv3.4:
  5. !
  6. ! BOTH LAND AND WATER:
  7. !1) Calculation of stability parameter (z/L) taken from Li et al. (2010 BLM)
  8. !2) Fixed isfflx=0 option to turn off scalar fluxes, but keep momentum
  9. ! fluxes for idealized studies (credit: Anna Fitch).
  10. !3) Kinematic viscosity now varies with temperature
  11. !4) Uses Monin-Obukhov flux-profile relationships more consistent with
  12. ! those used in the MYNN PBL code.
  13. !5) Allows negative QFX, similar to MYJ scheme
  14. !
  15. ! LAND only:
  16. !1) Scalar roughness length parameterization of Yang et al. (2002 QJRMS,
  17. ! 2008 JAMC) and Chen et al. (2010 J. of Hydromet), with modifications.
  18. !2) Relaxed u* minimum from 0.1 to 0.01
  19. !
  20. ! WATER only:
  21. !1) Charnock relationship with varying Charnock parameter is taken from
  22. ! the COARE3.0 bulk algorithm (Fairall et al 2003). A formulation for
  23. ! the aerodynamic roughness length was also taken from Davis et al (2008)
  24. ! and Donelan et al. (2004), but this formulation seems to result in a
  25. ! hign surface wind speed bias for low/moderate wind speeds, so the
  26. ! varying Charnock relationship is default.
  27. !2) Scalar roughness length is taken from the COARE3.0 bulk algorithm
  28. ! (Fairall et al 2003). A formulation for the scalar roughness length
  29. ! was also taken from Garrat (1992), but since this formula makes zt
  30. ! proportional to zo, heat and moisture fluxes are dependent
  31. ! upon which formulation for aerodynamic roughness length is used.
  32. ! Therefore, the COARE3.0 formulation (with slight modifications) is
  33. ! used as default instead.
  34. !-------------------------------------------------------------------
  35. USE module_model_constants, only: &
  36. &p1000mb, cp, xlv, ep_2
  37. USE module_sf_sfclay, ONLY: sfclayinit
  38. USE module_bl_mynn, only: tv0, mym_condensation
  39. !-------------------------------------------------------------------
  40. IMPLICIT NONE
  41. !-------------------------------------------------------------------
  42. REAL, PARAMETER :: xlvcp=xlv/cp, ep_3=1.-ep_2
  43. REAL, PARAMETER :: wmin=0.1 ! Minimum wind speed
  44. REAL, PARAMETER :: zm2h=7.4 ! = z_0m/z_0h
  45. REAL, PARAMETER :: charnock=0.016, bvisc=1.5e-5, z0hsea=5.e-5
  46. REAL, PARAMETER :: VCONVC=1.0
  47. REAL, PARAMETER :: CZ0=charnock
  48. REAL, DIMENSION(0:1000 ),SAVE :: PSIMTB,PSIHTB
  49. CONTAINS
  50. !-------------------------------------------------------------------
  51. SUBROUTINE mynn_sf_init_driver(allowed_to_read)
  52. LOGICAL, INTENT(in) :: allowed_to_read
  53. !Fill the PSIM and PSIH tables. The subroutine "sfclayinit"
  54. !can be found in module_sf_sfclay.F. This subroutine returns
  55. !the forms from Dyer and Hicks (1974) or Paulson (1970)???.
  56. CALL sfclayinit(allowed_to_read)
  57. END SUBROUTINE mynn_sf_init_driver
  58. !-------------------------------------------------------------------
  59. SUBROUTINE SFCLAY_mynn(U3D,V3D,T3D,QV3D,P3D,dz8w, &
  60. CP,G,ROVCP,R,XLV,PSFC,CHS,CHS2,CQS2,CPM, &
  61. ZNT,UST,PBLH,MAVAIL,ZOL,MOL,REGIME,PSIM,PSIH, &
  62. XLAND,HFX,QFX,LH,TSK,FLHC,FLQC,QGH,QSFC,RMOL, &
  63. U10,V10,TH2,T2,Q2, &
  64. GZ1OZ0,WSPD,BR,ISFFLX,DX, &
  65. SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
  66. KARMAN,EOMEG,STBOLT, &
  67. itimestep,ch,th3d,pi3d,qc3d, &
  68. tsq,qsq,cov,qcg, &
  69. !JOE-add zo/zt
  70. ! z0zt_ratio,BulkRi,wstar,&
  71. !JOE-end z0/zt
  72. ids,ide, jds,jde, kds,kde, &
  73. ims,ime, jms,jme, kms,kme, &
  74. its,ite, jts,jte, kts,kte )
  75. !-------------------------------------------------------------------
  76. IMPLICIT NONE
  77. !-------------------------------------------------------------------
  78. !-- U3D 3D u-velocity interpolated to theta points (m/s)
  79. !-- V3D 3D v-velocity interpolated to theta points (m/s)
  80. !-- T3D temperature (K)
  81. !-- QV3D 3D water vapor mixing ratio (Kg/Kg)
  82. !-- P3D 3D pressure (Pa)
  83. !-- dz8w dz between full levels (m)
  84. !-- CP heat capacity at constant pressure for dry air (J/kg/K)
  85. !-- G acceleration due to gravity (m/s^2)
  86. !-- ROVCP R/CP
  87. !-- R gas constant for dry air (J/kg/K)
  88. !-- XLV latent heat of vaporization for water (J/kg)
  89. !-- PSFC surface pressure (Pa)
  90. !-- ZNT roughness length (m)
  91. !-- UST u* in similarity theory (m/s)
  92. !-- PBLH PBL height from previous time (m)
  93. !-- MAVAIL surface moisture availability (between 0 and 1)
  94. !-- ZOL z/L height over Monin-Obukhov length
  95. !-- MOL T* (similarity theory) (K)
  96. !-- REGIME flag indicating PBL regime (stable, unstable, etc.)
  97. !-- PSIM similarity stability function for momentum
  98. !-- PSIH similarity stability function for heat
  99. !-- XLAND land mask (1 for land, 2 for water)
  100. !-- HFX upward heat flux at the surface (W/m^2)
  101. !-- QFX upward moisture flux at the surface (kg/m^2/s)
  102. !-- LH net upward latent heat flux at surface (W/m^2)
  103. !-- TSK surface temperature (K)
  104. !-- FLHC exchange coefficient for heat (W/m^2/K)
  105. !-- FLQC exchange coefficient for moisture (kg/m^2/s)
  106. !-- CHS heat/moisture exchange coefficient for LSM (m/s)
  107. !-- QGH lowest-level saturated mixing ratio
  108. !-- U10 diagnostic 10m u wind
  109. !-- V10 diagnostic 10m v wind
  110. !-- TH2 diagnostic 2m theta (K)
  111. !-- T2 diagnostic 2m temperature (K)
  112. !-- Q2 diagnostic 2m mixing ratio (kg/kg)
  113. !-- GZ1OZ0 log(z/z0) where z0 is roughness length
  114. !-- WSPD wind speed at lowest model level (m/s)
  115. !-- BR bulk Richardson number in surface layer
  116. !-- ISFFLX isfflx=1 for surface heat and moisture fluxes
  117. !-- DX horizontal grid size (m)
  118. !-- SVP1 constant for saturation vapor pressure (kPa)
  119. !-- SVP2 constant for saturation vapor pressure (dimensionless)
  120. !-- SVP3 constant for saturation vapor pressure (K)
  121. !-- SVPT0 constant for saturation vapor pressure (K)
  122. !-- EP1 constant for virtual temperature (R_v/R_d - 1) (dimensionless)
  123. !-- EP2 constant for specific humidity calculation
  124. ! (R_d/R_v) (dimensionless)
  125. !-- KARMAN Von Karman constant
  126. !-- EOMEG angular velocity of earth's rotation (rad/s)
  127. !-- STBOLT Stefan-Boltzmann constant (W/m^2/K^4)
  128. !-- ids start index for i in domain
  129. !-- ide end index for i in domain
  130. !-- jds start index for j in domain
  131. !-- jde end index for j in domain
  132. !-- kds start index for k in domain
  133. !-- kde end index for k in domain
  134. !-- ims start index for i in memory
  135. !-- ime end index for i in memory
  136. !-- jms start index for j in memory
  137. !-- jme end index for j in memory
  138. !-- kms start index for k in memory
  139. !-- kme end index for k in memory
  140. !-- its start index for i in tile
  141. !-- ite end index for i in tile
  142. !-- jts start index for j in tile
  143. !-- jte end index for j in tile
  144. !-- kts start index for k in tile
  145. !-- kte end index for k in tile
  146. !-------------------------------------------------------------------
  147. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
  148. ims,ime, jms,jme, kms,kme, &
  149. its,ite, jts,jte, kts,kte
  150. !
  151. INTEGER, INTENT(IN ) :: ISFFLX
  152. REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
  153. REAL, INTENT(IN ) :: EP1,EP2,KARMAN,EOMEG,STBOLT
  154. !
  155. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  156. INTENT(IN ) :: dz8w
  157. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  158. INTENT(IN ) :: QV3D, &
  159. P3D, &
  160. T3D, &
  161. QC3D,&
  162. th3d,pi3d,tsq,qsq,cov
  163. INTEGER, INTENT(in) :: itimestep
  164. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) ::&
  165. & qcg
  166. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) ::&
  167. & ch
  168. REAL, DIMENSION( ims:ime, jms:jme ) , &
  169. INTENT(IN ) :: MAVAIL, &
  170. PBLH, &
  171. XLAND, &
  172. TSK
  173. REAL, DIMENSION( ims:ime, jms:jme ) , &
  174. INTENT(OUT ) :: U10, &
  175. V10, &
  176. TH2, &
  177. T2, &
  178. !JOE-use value from LSM Q2, &
  179. Q2
  180. !JOE-moved down below QSFC
  181. !
  182. REAL, DIMENSION( ims:ime, jms:jme ) , &
  183. INTENT(INOUT) :: REGIME, &
  184. HFX, &
  185. QFX, &
  186. LH, &
  187. MOL,RMOL,QSFC
  188. !m the following 5 are change to memory size
  189. !
  190. REAL, DIMENSION( ims:ime, jms:jme ) , &
  191. INTENT(INOUT) :: GZ1OZ0,WSPD,BR, &
  192. PSIM,PSIH
  193. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  194. INTENT(IN ) :: U3D, &
  195. V3D
  196. REAL, DIMENSION( ims:ime, jms:jme ) , &
  197. INTENT(IN ) :: PSFC
  198. REAL, DIMENSION( ims:ime, jms:jme ) , &
  199. INTENT(INOUT) :: ZNT, &
  200. ZOL, &
  201. UST, &
  202. CPM, &
  203. CHS2, &
  204. CQS2, &
  205. CHS
  206. REAL, DIMENSION( ims:ime, jms:jme ) , &
  207. INTENT(INOUT) :: FLHC,FLQC
  208. REAL, DIMENSION( ims:ime, jms:jme ) , &
  209. INTENT(INOUT) :: QGH
  210. !JOE-begin
  211. ! REAL, DIMENSION( ims:ime, jms:jme ) , &
  212. ! INTENT(OUT) :: z0zt_ratio, &
  213. ! BulkRi,wstar
  214. !JOE-end
  215. REAL, INTENT(IN ) :: CP,G,ROVCP,R,XLV,DX
  216. !----------- LOCAL VARS -----------------------------------
  217. REAL, DIMENSION( its:ite ) :: U1D, &
  218. V1D, &
  219. QV1D, &
  220. P1D, &
  221. T1D,qc1d
  222. REAL, DIMENSION( its:ite ) :: dz8w1d
  223. REAL, DIMENSION( its:ite ) :: vt1,vq1
  224. REAL, DIMENSION(kts:kts+1) :: thl, qw, vt, vq
  225. REAL :: ql
  226. INTEGER :: I,J,K
  227. !-----------------------------------------------------------
  228. DO J=jts,jte
  229. DO i=its,ite
  230. dz8w1d(I) = dz8w(i,kts,j)
  231. ENDDO
  232. DO i=its,ite
  233. U1D(i) =U3D(i,kts,j)
  234. V1D(i) =V3D(i,kts,j)
  235. QV1D(i)=QV3D(i,kts,j)
  236. QC1D(i)=QC3D(i,kts,j)
  237. P1D(i) =P3D(i,kts,j)
  238. T1D(i) =T3D(i,kts,j)
  239. ENDDO
  240. IF (itimestep==1) THEN
  241. DO i=its,ite
  242. vt1(i)=0.
  243. vq1(i)=0.
  244. UST(i,j)=0.02*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i))
  245. MOL(i,j)=0. ! Tstar
  246. ENDDO
  247. ELSE
  248. DO i=its,ite
  249. do k = kts,kts+1
  250. ql = qc3d(i,k,j)/(1.+qc3d(i,k,j))
  251. qw(k) = qv3d(i,k,j)/(1.+qv3d(i,k,j)) + ql
  252. thl(k) = th3d(i,k,j)-xlvcp*ql/pi3d(i,k,j)
  253. end do
  254. ! NOTE: The last grid number is kts+1 instead of kte.
  255. CALL mym_condensation (kts,kts+1, &
  256. & dz8w(i,kts:kts+1,j), &
  257. & thl(kts:kts+1), qw(kts:kts+1), &
  258. & p3d(i,kts:kts+1,j),&
  259. & pi3d(i,kts:kts+1,j), &
  260. & tsq(i,kts:kts+1,j), &
  261. & qsq(i,kts:kts+1,j), &
  262. & cov(i,kts:kts+1,j), &
  263. & vt(kts:kts+1), vq(kts:kts+1))
  264. vt1(i) = vt(kts)
  265. vq1(i) = vq(kts)
  266. ENDDO
  267. ENDIF
  268. CALL SFCLAY1D_mynn(J,U1D,V1D,T1D,QV1D,P1D,dz8w1d, &
  269. CP,G,ROVCP,R,XLV,PSFC(ims,j),CHS(ims,j),CHS2(ims,j),&
  270. CQS2(ims,j),CPM(ims,j),PBLH(ims,j), RMOL(ims,j), &
  271. ZNT(ims,j),UST(ims,j),MAVAIL(ims,j),ZOL(ims,j), &
  272. MOL(ims,j),REGIME(ims,j),PSIM(ims,j),PSIH(ims,j), &
  273. XLAND(ims,j),HFX(ims,j),QFX(ims,j),TSK(ims,j), &
  274. U10(ims,j),V10(ims,j),TH2(ims,j),T2(ims,j), &
  275. Q2(ims,j),FLHC(ims,j),FLQC(ims,j),QGH(ims,j), &
  276. QSFC(ims,j),LH(ims,j), &
  277. GZ1OZ0(ims,j),WSPD(ims,j),BR(ims,j),ISFFLX,DX, &
  278. SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN,EOMEG,STBOLT, &
  279. ch(ims,j),vt1,vq1,qc1d,qcg(ims,j),&
  280. !JOE-begin
  281. ! z0zt_ratio(ims,j),BulkRi(ims,j),wstar(ims,j), &
  282. itimestep,&
  283. !JOE-end
  284. ids,ide, jds,jde, kds,kde, &
  285. ims,ime, jms,jme, kms,kme, &
  286. its,ite, jts,jte, kts,kte )
  287. ENDDO
  288. END SUBROUTINE SFCLAY_MYNN
  289. !-------------------------------------------------------------------
  290. SUBROUTINE SFCLAY1D_mynn(J,UX,VX,T1D,QV1D,P1D,dz8w1d, &
  291. CP,G,ROVCP,R,XLV,PSFCPA,CHS,CHS2,CQS2,CPM,PBLH,RMOL, &
  292. ZNT,UST,MAVAIL,ZOL,MOL,REGIME,PSIM,PSIH, &
  293. XLAND,HFX,QFX,TSK, &
  294. U10,V10,TH2,T2,Q2,FLHC,FLQC,QGH, &
  295. QSFC,LH,GZ1OZ0,WSPD,BR,ISFFLX,DX, &
  296. SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
  297. KARMAN,EOMEG,STBOLT, &
  298. ch,vt1,vq1,qc1d,qcg,&
  299. !JOE-add
  300. ! zratio,BRi,wstar,itimestep, &
  301. itimestep, &
  302. !JOE-end
  303. ids,ide, jds,jde, kds,kde, &
  304. ims,ime, jms,jme, kms,kme, &
  305. its,ite, jts,jte, kts,kte )
  306. !-------------------------------------------------------------------
  307. IMPLICIT NONE
  308. !-------------------------------------------------------------------
  309. REAL, PARAMETER :: XKA=2.4E-5 !molecular diffusivity
  310. REAL, PARAMETER :: PRT=1. !prandlt number
  311. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
  312. ims,ime, jms,jme, kms,kme, &
  313. its,ite, jts,jte, kts,kte, &
  314. J
  315. !
  316. INTEGER, INTENT(in) :: itimestep
  317. INTEGER, INTENT(IN ) :: ISFFLX
  318. REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
  319. REAL, INTENT(IN ) :: EP1,EP2,KARMAN,EOMEG,STBOLT
  320. !
  321. REAL, DIMENSION( ims:ime ) , &
  322. INTENT(IN ) :: MAVAIL, &
  323. PBLH, &
  324. XLAND, &
  325. TSK
  326. !
  327. REAL, DIMENSION( ims:ime ) , &
  328. INTENT(IN ) :: PSFCPA
  329. REAL, DIMENSION( ims:ime ) , &
  330. INTENT(INOUT) :: REGIME, &
  331. HFX, &
  332. QFX, &
  333. MOL,RMOL
  334. !m the following 5 are changed to memory size---
  335. !
  336. REAL, DIMENSION( ims:ime ) , &
  337. INTENT(INOUT) :: GZ1OZ0,WSPD,BR, &
  338. PSIM,PSIH
  339. REAL, DIMENSION( ims:ime ) , &
  340. INTENT(INOUT) :: ZNT, &
  341. ZOL, &
  342. UST, &
  343. CPM, &
  344. CHS2, &
  345. CQS2, &
  346. CHS
  347. !JOE-add
  348. ! REAL, DIMENSION( ims:ime ) , &
  349. ! INTENT(OUT) :: zratio,BRi,wstar
  350. REAL, DIMENSION( ims:ime ) :: zratio,BRi,wstar
  351. !JOE-end
  352. REAL, DIMENSION( ims:ime ) , &
  353. INTENT(INOUT) :: FLHC,FLQC
  354. REAL, DIMENSION( ims:ime ) , &
  355. INTENT(INOUT) :: QGH,QSFC
  356. REAL, DIMENSION( ims:ime ) , &
  357. INTENT(OUT) :: U10,V10, &
  358. !JOE-make qsfc inout (moved up) TH2,T2,Q2,QSFC,LH
  359. TH2,T2,Q2,LH
  360. REAL, INTENT(IN) :: CP,G,ROVCP,R,XLV,DX
  361. ! MODULE-LOCAL VARIABLES, DEFINED IN SUBROUTINE SFCLAY
  362. REAL, DIMENSION( its:ite ), INTENT(IN ) :: dz8w1d
  363. REAL, DIMENSION( its:ite ), INTENT(IN ) :: UX, &
  364. VX, &
  365. QV1D, &
  366. P1D, &
  367. T1D,qc1d
  368. REAL, DIMENSION( ims:ime ), INTENT(IN) :: qcg
  369. REAL, DIMENSION( ims:ime ), INTENT(INOUT) :: ch
  370. REAL, DIMENSION( its:ite ), INTENT(IN) :: vt1,vq1
  371. ! LOCAL VARS
  372. REAL, DIMENSION( its:ite ) :: z_t,z_q
  373. REAL :: thl1,sqv1,sqc1,exner1,sqvg,sqcg,vv,ww
  374. REAL, DIMENSION( its:ite ) :: ZA, &
  375. THVX,ZQKL, &
  376. THX,QX, &
  377. PSIH2, &
  378. PSIM2, &
  379. PSIH10, &
  380. PSIM10, &
  381. GZ2OZ0, &
  382. GZ10OZ0
  383. !
  384. REAL, DIMENSION( its:ite ) :: RHOX,GOVRTH
  385. !
  386. REAL, DIMENSION( its:ite) :: SCR4
  387. REAL, DIMENSION( its:ite ) :: THGB, PSFC
  388. REAL, DIMENSION( its:ite ) :: GZ2OZt,GZ10OZt,GZ1OZt
  389. !
  390. INTEGER :: N,I,K,KK,L,NZOL,NK,NZOL2,NZOL10
  391. REAL :: PL,THCON,TVCON,E1
  392. REAL :: ZL,TSKV,DTHVDZ,DTHVM,VCONV,RZOL,RZOL2,RZOL10,ZOL2,ZOL10
  393. REAL :: DTG,PSIX,USTM,DTTHX,PSIX10,PSIT,PSIT2,PSIQ,PSIQ2
  394. REAL :: FLUXC,VSGD
  395. real :: restar,VISC,psilim
  396. !-------------------------------------------------------------------
  397. !----CONVERT GROUND TEMPERATURE TO POTENTIAL TEMPERATURE:
  398. DO I=its,ite
  399. ! PSFC cmb
  400. PSFC(I)=PSFCPA(I)/1000.
  401. THGB(I)=TSK(I)*(100./PSFC(I))**ROVCP
  402. ENDDO
  403. !
  404. ! SCR4(I,K) STORES EITHER TEMPERATURE OR VIRTUAL TEMPERATURE,
  405. ! DEPENDING ON IFDRY (CURRENTLY NOT USED, SO SCR4 == TVX).
  406. DO 30 I=its,ite
  407. ! PL cmb
  408. PL=P1D(I)/1000.
  409. THCON=(100./PL)**ROVCP
  410. THX(I)=T1D(I)*THCON
  411. SCR4(I)=T1D(I)
  412. THVX(I)=THX(I)
  413. QX(I)=0.
  414. 30 CONTINUE
  415. ! INITIALIZE SOME VARIABLES HERE:
  416. DO I=its,ite
  417. QGH(I)=0.
  418. FLHC(I)=0.
  419. FLQC(I)=0.
  420. CPM(I)=CP
  421. ENDDO
  422. ! IF(IDRY.EQ.1)GOTO 80
  423. DO 50 I=its,ite
  424. QX(I)=QV1D(I)/(1.+QV1D(I)) !CONVERT TO SPEC HUM
  425. TVCON=(1.+EP1*QX(I))
  426. THVX(I)=THX(I)*TVCON
  427. SCR4(I)=T1D(I)*TVCON
  428. 50 CONTINUE
  429. !
  430. DO 60 I=its,ite
  431. IF (TSK(I) .LT. 273.15) THEN
  432. !SATURATION VAPOR PRESSURE WRT ICE
  433. E1=SVP1*EXP(4648*(1./273.15 - 1./TSK(I)) - &
  434. 11.64*LOG(273.15/TSK(I)) + 0.02265*(273.15 - TSK(I)))
  435. ELSE
  436. !SATURATION VAPOR PRESSURE WRT WATER
  437. E1=SVP1*EXP(SVP2*(TSK(I)-SVPT0)/(TSK(I)-SVP3))
  438. ENDIF
  439. QSFC(I)=EP2*E1/(PSFC(I)-ep_3*E1) !specific humidity
  440. !QSFC(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio
  441. !FOR LAND POINTS, QSFC can come from previous time step (in LSM)
  442. !if(xland(i).gt.1.5 .or. QSFC(i).le.0.0) QSFC(I)=EP2*E1/(PSFC(I)-ep_3*E1)
  443. ! QGH CHANGED TO USE LOWEST-LEVEL AIR TEMP CONSISTENT WITH MYJSFC CHANGE
  444. ! Q2SAT = QGH IN LSM
  445. E1=SVP1*EXP(SVP2*(T1D(I)-SVPT0)/(T1D(I)-SVP3))
  446. PL=P1D(I)/1000.
  447. QGH(I)=EP2*E1/(PL-ep_3*E1) !specific humidity
  448. !QGH(I)=EP2*E1/(PL-E1) !mixing ratio
  449. CPM(I)=CP*(1.+0.84*QX(I)/(1.-qx(i)))
  450. 60 CONTINUE
  451. 80 CONTINUE
  452. !-----COMPUTE THE HEIGHT OF FULL- AND HALF-SIGMA LEVELS ABOVE GROUND
  453. ! LEVEL, AND THE LAYER THICKNESSES.
  454. DO I=its,ite
  455. RHOX(I)=PSFC(I)*1000./(R*SCR4(I))
  456. ZQKL(I)=dz8w1d(I) !first full-sigma level
  457. ZA(I)=0.5*ZQKL(I) !first half-sigma level
  458. GOVRTH(I)=G/THX(I)
  459. ENDDO
  460. !-----CALCULATE BULK RICHARDSON NO. OF SURFACE LAYER, ACCORDING TO
  461. ! AKB(1976), EQ(12).
  462. DO 260 I=its,ite
  463. WSPD(I)=SQRT(UX(I)*UX(I)+VX(I)*VX(I))
  464. IF((XLAND(I)-1.5).GE.0)THEN
  465. !COMPUTE KINEMATIC VISCOSITY
  466. VISC=(1.32+0.009*(T1D(I)-273.15))*1.E-5
  467. !--------------------------------------
  468. ! WATER
  469. !--------------------------------------
  470. !GET ZNT
  471. !--------------------------------------
  472. !CALL davis_etal_2008(ZNT(i),UST(i))
  473. !CALL Taylor_Yelland_2001(ZNT(i),UST(i),WSPD(i))
  474. CALL charnock_1955(ZNT(i),UST(i),WSPD(i),visc)
  475. !COMPUTE ROUGHNESS REYNOLDS NUMBER (restar) USING NEW ZNT
  476. ! AHW: Garratt formula: Calculate roughness Reynolds number
  477. ! Kinematic viscosity of air (linear approx to
  478. ! temp dependence at sea level)
  479. restar=MAX(ust(i)*ZNT(i)/visc, 0.1)
  480. !--------------------------------------
  481. !GET z_t and z_q
  482. !--------------------------------------
  483. !CALL zilitinkevich_1995(ZNT(i),z_t(i),z_q(i),restar,UST(I),KARMAN,XLAND(I))
  484. !CALL garrat_1992(z_t(i),z_q(i),ZNT(i),restar,XLAND(I))
  485. CALL fairall_2001(z_t(i),z_q(i),restar,UST(i),visc)
  486. zratio(i)=znt(i)/z_t(i)
  487. ELSE
  488. !--------------------------------------
  489. ! LAND
  490. !--------------------------------------
  491. !COMPUTE ROUGHNESS REYNOLDS NUMBER (restar) USING DEFAULT ZNT
  492. !restar=MAX(ust(i)*ZNT(i)/bvisc, 1.0)
  493. VISC=(1.32+0.009*(T1D(I)-273.15))*1.E-5
  494. restar=MAX(ust(i)*ZNT(i)/visc, 0.1)
  495. !--------------------------------------
  496. !GET z_t and z_q
  497. !--------------------------------------
  498. !CALL zilitinkevich_1995(ZNT(i),z_t(i),z_q(i),restar,UST(I),KARMAN,XLAND(I))
  499. !CALL garrat_1992(z_t(i),z_q(i),ZNT(i),restar,XLAND(I))
  500. CALL Yang_2008(ZNT(i),z_t(i),z_q(i),UST(i),MOL(I),restar,visc,XLAND(I))
  501. zratio(i)=znt(i)/z_t(i)
  502. ENDIF
  503. GZ1OZ0(I)= LOG(ZA(I)/ZNT(I))
  504. GZ1OZt(I)= LOG(ZA(I)/z_t(i))
  505. GZ2OZ0(I)= LOG(2./ZNT(I))
  506. GZ2OZt(I)= LOG(2./z_t(i))
  507. GZ10OZ0(I)=LOG(10./ZNT(I))
  508. GZ10OZt(I)=LOG(10./z_t(i))
  509. !account for partial condensation
  510. exner1=(p1d(i)/p1000mb)**ROVCP
  511. sqc1=qc1d(i)/(1.+qc1d(i)) !convert to spec hum.
  512. sqv1=qx(i)
  513. thl1=THX(I)-xlvcp/exner1*sqc1
  514. sqvg=qsfc(i)
  515. sqcg=qcg(i)/(1.+qcg(i)) !convert to specific humidity
  516. vv = thl1-THGB(I)
  517. ww = mavail(i)*(sqv1-sqvg) + (sqc1-sqcg)
  518. TSKV=THGB(I)*(1.+EP1*QSFC(I)*MAVAIL(I))
  519. !TSKV=THGB(I)*(1.+EP1*QSFC(I))
  520. !DTHVDZ=(THVX(I)-TSKV)
  521. DTHVDZ= (vt1(i) + 1.0)*vv + (vq1(i) + tv0)*ww
  522. !--------------------------------------------------------
  523. ! Calculate the convective velocity scale (WSTAR) and
  524. ! subgrid-scale velocity (VSGD) following Beljaars (1995, QJRMS)
  525. ! and Mahrt and Sun (1995, MWR), respectively
  526. !-------------------------------------------------------
  527. ! VCONV = 0.25*sqrt(g/tskv*pblh(i)*dthvm)
  528. ! Use Beljaars over land, old MM5 (Wyngaard) formula over water
  529. if (xland(i).lt.1.5) then !LAND (xland == 1)
  530. fluxc = max(hfx(i)/rhox(i)/cp &
  531. + ep1*tskv*qfx(i)/rhox(i),0.)
  532. !JOE:VCONV = vconvc*(g/TSK(i)*pblh(i)*fluxc)**.33
  533. WSTAR(I) = vconvc*(g/TSK(i)*pblh(i)*fluxc)**.33
  534. else !WATER (xland == 2)
  535. IF(-DTHVDZ.GE.0)THEN
  536. DTHVM=-DTHVDZ
  537. ELSE
  538. DTHVM=0.
  539. ENDIF
  540. !JOE-the Wyngaard formula is 2-3 times larger than the Beljaars
  541. !formula, so switch to Beljaars for water, but use VCONVC = 1.25,
  542. !as in the COARE3.0 bulk parameterizations.
  543. !WSTAR(I) = 2.*SQRT(DTHVM)
  544. fluxc = max(hfx(i)/rhox(i)/cp &
  545. + ep1*tskv*qfx(i)/rhox(i),0.)
  546. WSTAR(I) = 1.25*(g/TSK(i)*pblh(i)*fluxc)**.33
  547. endif
  548. !--------------------------------------------------------
  549. ! Mahrt and Sun low-res correction
  550. ! (for 13 km ~ 0.37 m/s; for 3 km == 0 m/s)
  551. !--------------------------------------------------------
  552. VSGD = 0.32 * (max(dx/5000.-1.,0.))**.33
  553. WSPD(I)=SQRT(WSPD(I)*WSPD(I)+WSTAR(I)*WSTAR(I)+vsgd*vsgd)
  554. WSPD(I)=AMAX1(WSPD(I),wmin)
  555. !--------------------------------------------------------
  556. ! CALCULATE THE BULK RICHARDSON NUMBER OF SURFACE LAYER,
  557. ! ACCORDING TO AKB(1976), EQ(12).
  558. !--------------------------------------------------------
  559. BR(I)=GOVRTH(I)*ZA(I)*DTHVDZ/(WSPD(I)*WSPD(I))
  560. !SET LIMITS ACCORDING TO Li et al. (2010) Boundary-Layer Meteorol (p.158)
  561. BR(I)=MAX(BR(I),-2.0)
  562. BR(I)=MIN(BR(I),1.0)
  563. BRi(I)=BR(I) !new variable for output - BR is not a "state" variable.
  564. ! IF PREVIOUSLY UNSTABLE, DO NOT LET INTO REGIMES 1 AND 2 (STABLE)
  565. if (itimestep .GT. 1) THEN
  566. IF(MOL(I).LT.0.)BR(I)=AMIN1(BR(I),0.0)
  567. ENDIF
  568. !jdf
  569. RMOL(I)=-GOVRTH(I)*DTHVDZ*ZA(I)*KARMAN
  570. !jdf
  571. !JOE-begin
  572. ! IF(I .eq. 2)THEN
  573. ! write(*,1006)"BR:",BR(I)," fluxc:",fluxc," vt1:",vt1(i)," vq1:",vq1(i)
  574. ! write(*,1007)"XLAND:",XLAND(I)," WSPD:",WSPD(I)," DTHVDZ:",DTHVDZ," WSTAR:",WSTAR(I)
  575. ! ENDIF
  576. !JOE-end
  577. 260 CONTINUE
  578. 1006 format(A,F7.3,A,f9.4,A,f9.5,A,f9.4)
  579. 1007 format(A,F2.0,A,f6.2,A,f7.3,A,f7.2)
  580. !--------------------------------------------------------------------
  581. !--- DIAGNOSE BASIC PARAMETERS FOR THE APPROPRIATED STABILITY CLASS:
  582. !
  583. !
  584. ! THE STABILITY CLASSES ARE DETERMINED BY BR (BULK RICHARDSON NO.)
  585. ! AND HOL (HEIGHT OF PBL/MONIN-OBUKHOV LENGTH).
  586. !
  587. ! CRITERIA FOR THE CLASSES ARE AS FOLLOWS:
  588. !
  589. ! 1. BR .GE. 0.2;
  590. ! REPRESENTS NIGHTTIME STABLE CONDITIONS (REGIME=1),
  591. !
  592. ! 2. BR .LT. 0.2 .AND. BR .GT. 0.0;
  593. ! REPRESENTS DAMPED MECHANICAL TURBULENT CONDITIONS
  594. ! (REGIME=2),
  595. !
  596. ! 3. BR .EQ. 0.0
  597. ! REPRESENTS FORCED CONVECTION CONDITIONS (REGIME=3),
  598. !
  599. ! 4. BR .LT. 0.0
  600. ! REPRESENTS FREE CONVECTION CONDITIONS (REGIME=4).
  601. !
  602. !--------------------------------------------------------------------
  603. DO 320 I=its,ite
  604. IF (BR(I) .GT. 0.2) THEN
  605. !===================================================
  606. !---CLASS 1; STABLE (NIGHTTIME) CONDITIONS:
  607. !===================================================
  608. REGIME(I)=1.
  609. !COMPUTE z/L
  610. CALL Li_etal_2010(ZOL(I),BR(I),ZA(I)/ZNT(I),zratio(I))
  611. !COMPUTE PSIM and PSIH
  612. IF((XLAND(I)-1.5).GE.0)THEN
  613. ! WATER
  614. !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I)) !produces neg TKE
  615. !CALL PSI_Beljaars_Holtslag_1991(PSIM(I),PSIH(I),ZOL(I))
  616. !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I))
  617. CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I), z_t(I), ZNT(I), ZA(I))
  618. !LOWER LIMIT ON PSI IN STABLE CONDITIONS
  619. psilim = -20.
  620. ELSE
  621. ! LAND
  622. !CALL PSI_Beljaars_Holtslag_1991(PSIM(I),PSIH(I),ZOL(I))
  623. !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I))
  624. !CALL PSI_Zilitinkevich_Esau_2007(PSIM(I),PSIH(I),ZOL(I))
  625. CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I), z_t(I), ZNT(I), ZA(I))
  626. !LOWER LIMIT ON PSI IN STABLE CONDITIONS
  627. psilim = -20. !JOE: relaxed from -10 to -20.
  628. ENDIF
  629. PSIM(I)=AMAX1(PSIM(I),psilim)
  630. PSIH(I)=AMAX1(PSIH(I),psilim)
  631. PSIM10(I)=10./ZA(I)*PSIM(I)
  632. PSIM10(I)=AMAX1(PSIM10(I),psilim)
  633. PSIH10(I)=PSIM10(I)
  634. PSIM2(I)=2./ZA(I)*PSIM(I)
  635. PSIM2(I)=AMAX1(PSIM2(I),psilim)
  636. PSIH2(I)=PSIM2(I)
  637. RMOL(I) = ZOL(I)/ZA(I) !1.0/L
  638. ELSEIF(BR(I) .GT. 0. .AND. BR(I) .LE. 0.2) THEN
  639. !========================================================
  640. !---CLASS 2; DAMPED MECHANICAL TURBULENCE:
  641. !========================================================
  642. REGIME(I)=2.
  643. !COMPUTE z/L
  644. CALL Li_etal_2010(ZOL(I),BR(I),ZA(I)/ZNT(I),zratio(I))
  645. !COMPUTE PSIM and PSIH
  646. IF((XLAND(I)-1.5).GE.0)THEN
  647. ! WATER
  648. !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I))
  649. !CALL PSI_Beljaars_Holtslag_1991(PSIM(I),PSIH(I),ZOL(I))
  650. !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I))
  651. CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I), z_t(I), ZNT(I), ZA(I))
  652. !LOWER LIMIT ON PSI IN STABLE CONDITIONS
  653. psilim = -10. !JOE: This limit is never hit.
  654. ELSE
  655. ! LAND
  656. !CALL PSI_Beljaars_Holtslag_1991(PSIM(I),PSIH(I),ZOL(I))
  657. !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I))
  658. !CALL PSI_Zilitinkevich_Esau_2007(PSIM(I),PSIH(I),ZOL(I))
  659. CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I), z_t(I), ZNT(I), ZA(I))
  660. !LOWER LIMIT ON PSI IN STABLE CONDITIONS
  661. psilim = -10. !JOE: This limit is never hit.
  662. ENDIF
  663. ! LOWER LIMIT ON PSI IN STABLE CONDITIONS
  664. PSIM(I)=AMAX1(PSIM(I),psilim)
  665. PSIH(I)=AMAX1(PSIH(I),psilim)
  666. PSIM10(I)=10./ZA(I)*PSIM(I)
  667. PSIM10(I)=AMAX1(PSIM10(I),psilim)
  668. PSIH10(I)=PSIM10(I)
  669. PSIM2(I)=2./ZA(I)*PSIM(I)
  670. PSIM2(I)=AMAX1(PSIM2(I),psilim)
  671. PSIH2(I)=PSIM2(I)
  672. ! 1.0 over Monin-Obukhov length
  673. RMOL(I)= ZOL(I)/ZA(I)
  674. ELSEIF(BR(I) .EQ. 0.) THEN
  675. !=========================================================
  676. !-----CLASS 3; FORCED CONVECTION/NEUTRAL:
  677. !=========================================================
  678. REGIME(I)=3.
  679. PSIM(I)=0.0
  680. PSIH(I)=PSIM(I)
  681. PSIM10(I)=0.
  682. PSIH10(I)=PSIM10(I)
  683. PSIM2(I)=0.
  684. PSIH2(I)=PSIM2(I)
  685. !ZOL(I)=0.
  686. IF(UST(I) .LT. 0.01)THEN
  687. ZOL(I)=BR(I)*GZ1OZ0(I)
  688. ELSE
  689. ZOL(I)=KARMAN*GOVRTH(I)*ZA(I)*MOL(I)/(UST(I)*UST(I))
  690. ENDIF
  691. RMOL(I) = ZOL(I)/ZA(I)
  692. ELSEIF(BR(I) .LT. 0.)THEN
  693. !==========================================================
  694. !-----CLASS 4; FREE CONVECTION:
  695. !==========================================================
  696. REGIME(I)=4.
  697. !COMPUTE z/L
  698. CALL Li_etal_2010(ZOL(I),BR(I),ZA(I)/ZNT(I),zratio(I))
  699. ZOL10=10./ZA(I)*ZOL(I)
  700. ZOL2=2./ZA(I)*ZOL(I)
  701. ZOL(I)=AMIN1(ZOL(I),0.)
  702. ZOL(I)=AMAX1(ZOL(I),-9.9999)
  703. ZOL10=AMIN1(ZOL10,0.)
  704. ZOL10=AMAX1(ZOL10,-9.9999)
  705. ZOL2=AMIN1(ZOL2,0.)
  706. ZOL2=AMAX1(ZOL2,-9.9999)
  707. NZOL=INT(-ZOL(I)*100.)
  708. RZOL=-ZOL(I)*100.-NZOL
  709. NZOL10=INT(-ZOL10*100.)
  710. RZOL10=-ZOL10*100.-NZOL10
  711. NZOL2=INT(-ZOL2*100.)
  712. RZOL2=-ZOL2*100.-NZOL2
  713. !COMPUTE PSIM and PSIH
  714. IF((XLAND(I)-1.5).GE.0)THEN
  715. ! WATER
  716. !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I))
  717. !CALL PSI_Hogstrom_1996(PSIM(I),PSIH(I),ZOL(I), z_t(I), ZNT(I), ZA(I))
  718. !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I))
  719. CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I), z_t(I), ZNT(I), ZA(I))
  720. ELSE
  721. ! LAND
  722. !CALL PSI_Hogstrom_1996(PSIM(I),PSIH(I),ZOL(I), z_t(I), ZNT(I), ZA(I))
  723. !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I))
  724. CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I), z_t(I), ZNT(I), ZA(I))
  725. ENDIF
  726. PSIM10(I)=PSIMTB(NZOL10)+RZOL10*(PSIMTB(NZOL10+1)-PSIMTB(NZOL10))
  727. PSIH10(I)=PSIHTB(NZOL10)+RZOL10*(PSIHTB(NZOL10+1)-PSIHTB(NZOL10))
  728. PSIM2(I)=PSIMTB(NZOL2)+RZOL2*(PSIMTB(NZOL2+1)-PSIMTB(NZOL2))
  729. PSIH2(I)=PSIHTB(NZOL2)+RZOL2*(PSIHTB(NZOL2+1)-PSIHTB(NZOL2))
  730. !---LIMIT PSIH AND PSIM IN THE CASE OF THIN LAYERS AND
  731. !---HIGH ROUGHNESS. THIS PREVENTS DENOMINATOR IN FLUXES
  732. !---FROM GETTING TOO SMALL
  733. PSIH(I)=AMIN1(PSIH(I),0.85*GZ1OZ0(I))
  734. PSIM(I)=AMIN1(PSIM(I),0.85*GZ1OZ0(I))
  735. PSIH2(I)=AMIN1(PSIH2(I),0.85*GZ2OZ0(I))
  736. PSIM10(I)=AMIN1(PSIM10(I),0.85*GZ10OZ0(I))
  737. RMOL(I) = ZOL(I)/ZA(I)
  738. ENDIF
  739. 320 CONTINUE
  740. !-----------------------------------------------------------
  741. !-----COMPUTE U*, T*, AND SURFACE DIAGNOSTICS:
  742. !-----------------------------------------------------------
  743. DO 330 I=its,ite
  744. !------------------------------------------------------------
  745. !-----COMPUTE THE FRICTIONAL VELOCITY:
  746. ! ZA(1982) EQS(2.60),(2.61).
  747. !------------------------------------------------------------
  748. DTG=THX(I)-THGB(I)
  749. PSIX=GZ1OZ0(I)-PSIM(I)
  750. PSIX10=GZ10OZ0(I)-PSIM10(I)
  751. ! TO PREVENT OSCILLATIONS AVERAGE WITH OLD VALUE
  752. UST(I)=0.5*UST(I)+0.5*KARMAN*WSPD(I)/PSIX
  753. IF((XLAND(I)-1.5).LT.0.)THEN !LAND
  754. !JOE: UST(I)=AMAX1(UST(I),0.1)
  755. UST(I)=AMAX1(UST(I),0.01) !Relaxing this limit
  756. ENDIF
  757. !------------------------------------------------------------
  758. !-----COMPUTE THE RESISTANCE (PSIQ AND PSIT):
  759. !------------------------------------------------------------
  760. ! LOWER LIMIT ADDED TO PREVENT LARGE FLHC IN SOIL MODEL
  761. ! ACTIVATES IN UNSTABLE CONDITIONS WITH THIN LAYERS OR HIGH Z0
  762. !PSIT=AMAX1(GZ1OZ0(I)-PSIH(I),2.)
  763. PSIT=AMAX1(GZ1OZt(I)-PSIH(I),2.)
  764. PSIT2=MAX(GZ2OZt(I)-PSIH2(I),2.)
  765. IF((XLAND(I)-1.5).GE.0)THEN
  766. PSIQ=MAX(LOG(za(i)/z_q(I))-PSIH(I),2.)
  767. PSIQ2=MAX(LOG(2./z_q(I))-PSIH2(I),2.)
  768. ELSE
  769. !CARLSON AND BOLAND (1978)(independent of zq):
  770. ZL=0.01
  771. PSIQ=MAX(LOG(KARMAN*UST(I)*ZA(I)/XKA + ZA(I)/ZL)-PSIH(I),2.0)
  772. PSIQ2=MAX(LOG(KARMAN*UST(I)*2./XKA + 2./ZL)-PSIH2(I),2.0)
  773. ENDIF
  774. !------------------------------------------------------------
  775. !COMPUTE THE TEMPERATURE SCALE (or FRICTION TEMPERATURE, T*)
  776. !------------------------------------------------------------
  777. MOL(I)=KARMAN*DTG/PSIT/PRT
  778. !t_star(I) = -HFX(I)/(UST(I)*CPM(I)*RHOX(I))
  779. !t_star(I) = MOL(I)
  780. !-----------------------------------------------------
  781. !COMPUTE 10 M WNDS
  782. ! If the lowest model level is close to 10-m, use it
  783. ! instead of the flux-based formula.
  784. if (ZA(i) .gt. 7.0 .and. ZA(i) .lt. 13.0) then
  785. U10(I)=UX(I)
  786. V10(I)=VX(I)
  787. else
  788. U10(I)=UX(I)*PSIX10/PSIX
  789. V10(I)=VX(I)*PSIX10/PSIX
  790. endif
  791. !-----------------------------------------------------
  792. !GET 2 M T, TH, AND Q
  793. !THESE WILL BE OVERWRITTEN FOR LAND POINTS IN THE LSM
  794. TH2(I)=THGB(I)+DTG*PSIT2/PSIT
  795. Q2(I)=QSFC(I)+(QX(I)-QSFC(I))*PSIQ2/PSIQ
  796. T2(I) = TH2(I)*(PSFC(I)/100.)**ROVCP
  797. 330 CONTINUE
  798. !-----------------------------------------------------------
  799. !-----COMPUTE THE SURFACE SENSIBLE AND LATENT HEAT FLUXES:
  800. !-----------------------------------------------------------
  801. DO i=its,ite
  802. QFX(i) =0.
  803. HFX(i) =0.
  804. ENDDO
  805. !-----------------------------------------------------
  806. !-- BUT FIRST, RECALCULATE ROUGHNESS LENGTHS (ZNT, Z_T, Z_Q).
  807. !-- USING AN UPDATED U*.
  808. !-----------------------------------------------------
  809. DO 360 I=its,ite
  810. IF((XLAND(I)-1.5).GE.0)THEN
  811. !COMPUTE KINEMATIC VISCOSITY
  812. ! AHW: Garratt formula: Calculate kinematic viscosity
  813. ! of air (linear approc to temp dependence at sea lev)
  814. VISC=(1.32+0.009*(T1D(I)-273.15))*1.E-5
  815. !--------------------------------------
  816. ! WATER
  817. !--------------------------------------
  818. ! GET ZNT
  819. !--------------------------------------
  820. !CALL davis_etal_2008(ZNT(i),UST(i))
  821. !CALL Taylor_Yelland_2001(ZNT(i),UST(i),WSPD(i))
  822. CALL charnock_1955(ZNT(i),UST(i),WSPD(i),visc)
  823. !COMPUTE ROUGHNESS REYNOLDS NUMBER WITH NEW ZNT
  824. restar=MAX(ust(i)*ZNT(i)/visc, 0.1)
  825. !--------------------------------------
  826. ! GET z_t and z_q
  827. !--------------------------------------
  828. !CALL zilitinkevich_1995(ZNT(i),z_t(i),z_q(i),restar,UST(I),KARMAN,XLAND(I))
  829. !CALL garrat_1992(z_t(i),z_q(i),ZNT(i),restar,XLAND(I))
  830. CALL fairall_2001(z_t(i),z_q(i),restar,UST(i),visc)
  831. zratio(i)=znt(i)/z_t(i)
  832. ELSE
  833. !--------------------------------------
  834. ! LAND
  835. !--------------------------------------
  836. !COMPUTE ROUGHNESS REYNOLDS NUMBER (restar)
  837. VISC=(1.32+0.009*(T1D(I)-273.15))*1.E-5
  838. restar=MAX(ust(i)*ZNT(i)/visc, 0.1)
  839. !--------------------------------------
  840. ! GET z_t and z_q
  841. !--------------------------------------
  842. !CALL zilitinkevich_1995(ZNT(i),z_t(i),z_q(i),restar,UST(I),KARMAN,XLAND(I))
  843. !CALL garrat_1992(z_t(i),z_q(i),ZNT(i),restar,XLAND(I))
  844. CALL Yang_2008(ZNT(i),z_t(i),z_q(i),UST(i),MOL(I),restar,visc,XLAND(I))
  845. zratio(i)=znt(i)/z_t(i)
  846. ENDIF
  847. !------------------------------------------
  848. ! CALCULATE THE EXCHANGE COEFFICIENTS FOR HEAT (FLHC)
  849. ! AND MOISTURE (FLQC)
  850. !------------------------------------------
  851. IF (ISFFLX.GT.0) THEN
  852. IF((XLAND(I)-1.5).GE.0)THEN
  853. PSIQ=MAX(LOG(za(i)/z_q(I))-PSIH(I),2.)
  854. ELSE
  855. !CARLSON AND BOLAND (1978)(independent of zq):
  856. ZL=0.01
  857. PSIQ=MAX(LOG(KARMAN*UST(I)*ZA(I)/XKA + ZA(I)/ZL)-PSIH(I),2.0)
  858. ENDIF
  859. !FLQC(I)=RHOX(I)*MAVAIL(I)*UST(I)*KARMAN/( &
  860. ! ALOG(KARMAN*UST(I)*ZA(I)/XKA+ZA(I)/ZL)-PSIH(I))
  861. !FLQC(I)=RHOX(I)*MAVAIL(I)*UST(I)*KARMAN/( &
  862. ! & ALOG(za(i)/z_q(i))-PSIH(I))
  863. FLQC(I)=RHOX(I)*MAVAIL(I)*UST(I)*KARMAN/PSIQ
  864. DTTHX=ABS(THX(I)-THGB(I))
  865. IF(DTTHX.GT.1.E-5)THEN
  866. FLHC(I)=CPM(I)*RHOX(I)*UST(I)*MOL(I)/(THX(I)-THGB(I))
  867. ELSE
  868. FLHC(I)=0.
  869. ENDIF
  870. ENDIF
  871. ! IF (I .eq. 2) THEN
  872. ! write(*,1001)"REGIME:",REGIME(I)," z/L:",ZOL(I)," UST:",UST(I)," Tstar:",MOL(I)
  873. ! write(*,1002)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," FLHC:",FLHC(I)," FLQC:",FLQC(I)
  874. ! write(*,1003)"CPM:",CPM(I)," RHOX:",RHOX(I)," L:",ZOL(I)/ZA(I)," DTHV:",THX(I)-THGB(I)
  875. ! write(*,1004)"Z0/Zt:",zratio(I)," Z0:",ZNT(I)," Zt:",z_t(I)," za:",za(I)
  876. ! write(*,1005)"Re:",restar," MAVAIL:",MAVAIL(I)," QSFC(I):",QSFC(I)," QX(I):",QX(I)
  877. ! print*,"VISC=",VISC," Z0:",ZNT(I)," T1D(i):",T1D(i)
  878. ! write(*,*)"============================================="
  879. ! ENDIF
  880. 360 CONTINUE
  881. 1001 format(A,F2.0, A,f10.4,A,f5.3, A,f11.5)
  882. 1002 format(A,f7.2, A,f7.2, A,f9.2, A,f10.6)
  883. 1003 format(A,f7.2, A,f7.2, A,f10.3,A,f10.3)
  884. 1004 format(A,f11.3,A,f9.7, A,f9.7, A,f6.2, A,f10.3)
  885. 1005 format(A,f9.2,A,f6.4,A,f7.4,A,f7.4)
  886. IF (ISFFLX .GT. 0) THEN
  887. !----------------------------------
  888. !-----COMPUTE SURFACE MOISTURE FLUX:
  889. !
  890. !IF(IDRY .EQ. 1)GOTO 390
  891. DO I=its,ite
  892. QFX(I)=FLQC(I)*(QSFC(I)-QX(I))
  893. !JOE: QFX(I)=AMAX1(QFX(I),0.) !does not allows neg QFX

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