PageRenderTime 67ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 1ms

/wrfv2_fire/phys/module_sf_noahdrv.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 1834 lines | 1144 code | 180 blank | 510 comment | 22 complexity | afe644bb40ac0e37a1f4953dbdf3283e 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_noahdrv
  2. !-------------------------------
  3. USE module_sf_noahlsm
  4. USE module_sf_urban
  5. USE module_sf_bep
  6. USE module_sf_bep_bem
  7. #ifdef WRF_CHEM
  8. USE module_data_gocart_dust
  9. #endif
  10. !-------------------------------
  11. !
  12. CONTAINS
  13. !
  14. !----------------------------------------------------------------
  15. ! Urban related variable are added to arguments - urban
  16. !----------------------------------------------------------------
  17. SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
  18. HFX,QFX,LH,GRDFLX, QGH,GSW,SWDOWN,GLW,SMSTAV,SMSTOT, &
  19. SFCRUNOFF, UDRUNOFF,IVGTYP,ISLTYP,ISURBAN,ISICE,VEGFRA, &
  20. ALBEDO,ALBBCK,ZNT,Z0,TMN,XLAND,XICE,EMISS,EMBCK, &
  21. SNOWC,QSFC,RAINBL,MMINLU, &
  22. num_soil_layers,DT,DZS,ITIMESTEP, &
  23. SMOIS,TSLB,SNOW,CANWAT, &
  24. CHS,CHS2,CQS2,CPM,ROVCP,SR,chklowq,lai,qz0, & !H
  25. myj,frpcpn, &
  26. SH2O,SNOWH, & !H
  27. U_PHY,V_PHY, & !I
  28. SNOALB,SHDMIN,SHDMAX, & !I
  29. SNOTIME, & !?
  30. ACSNOM,ACSNOW, & !O
  31. SNOPCX, & !O
  32. POTEVP, & !O
  33. SMCREL, & !O
  34. XICE_THRESHOLD, &
  35. RDLAI2D,USEMONALB, &
  36. RIB, & !?
  37. NOAHRES, &
  38. ids,ide, jds,jde, kds,kde, &
  39. ims,ime, jms,jme, kms,kme, &
  40. its,ite, jts,jte, kts,kte, &
  41. sf_urban_physics, &
  42. CMR_SFCDIF,CHR_SFCDIF,CMC_SFCDIF,CHC_SFCDIF, &
  43. !Optional Urban
  44. TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !H urban
  45. UC_URB2D, & !H urban
  46. XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !H urban
  47. TRL_URB3D,TBL_URB3D,TGL_URB3D, & !H urban
  48. SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D,TS_URB2D, & !H urban
  49. PSIM_URB2D,PSIH_URB2D,U10_URB2D,V10_URB2D, & !O urban
  50. GZ1OZ0_URB2D, AKMS_URB2D, & !O urban
  51. TH2_URB2D,Q2_URB2D, UST_URB2D, & !O urban
  52. DECLIN_URB,COSZ_URB2D,OMG_URB2D, & !I urban
  53. XLAT_URB2D, & !I urban
  54. num_roof_layers, num_wall_layers, & !I urban
  55. num_road_layers, DZR, DZB, DZG, & !I urban
  56. FRC_URB2D,UTYPE_URB2D, & !O
  57. num_urban_layers, & !I multi-layer urban
  58. trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d, & !H multi-layer urban
  59. tlev_urb3d,qlev_urb3d, & !H multi-layer urban
  60. tw1lev_urb3d,tw2lev_urb3d, & !H multi-layer urban
  61. tglev_urb3d,tflev_urb3d, & !H multi-layer urban
  62. sf_ac_urb3d,lf_ac_urb3d,cm_ac_urb3d, & !H multi-layer urban
  63. sfvent_urb3d,lfvent_urb3d, & !H multi-layer urban
  64. sfwin1_urb3d,sfwin2_urb3d, & !H multi-layer urban
  65. sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d, & !H multi-layer urban
  66. th_phy,rho,p_phy,ust, & !I multi-layer urban
  67. gmt,julday,xlong,xlat, & !I multi-layer urban
  68. a_u_bep,a_v_bep,a_t_bep,a_q_bep, & !O multi-layer urban
  69. a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban
  70. b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban
  71. dl_u_bep,sf_bep,vl_bep ) !O multi-layer urban
  72. !----------------------------------------------------------------
  73. IMPLICIT NONE
  74. !----------------------------------------------------------------
  75. !----------------------------------------------------------------
  76. ! --- atmospheric (WRF generic) variables
  77. !-- DT time step (seconds)
  78. !-- DZ8W thickness of layers (m)
  79. !-- T3D temperature (K)
  80. !-- QV3D 3D water vapor mixing ratio (Kg/Kg)
  81. !-- P3D 3D pressure (Pa)
  82. !-- FLHC exchange coefficient for heat (m/s)
  83. !-- FLQC exchange coefficient for moisture (m/s)
  84. !-- PSFC surface pressure (Pa)
  85. !-- XLAND land mask (1 for land, 2 for water)
  86. !-- QGH saturated mixing ratio at 2 meter
  87. !-- GSW downward short wave flux at ground surface (W/m^2)
  88. !-- GLW downward long wave flux at ground surface (W/m^2)
  89. !-- History variables
  90. !-- CANWAT canopy moisture content (mm)
  91. !-- TSK surface temperature (K)
  92. !-- TSLB soil temp (k)
  93. !-- SMOIS total soil moisture content (volumetric fraction)
  94. !-- SH2O unfrozen soil moisture content (volumetric fraction)
  95. ! note: frozen soil moisture (i.e., soil ice) = SMOIS - SH2O
  96. !-- SNOWH actual snow depth (m)
  97. !-- SNOW liquid water-equivalent snow depth (m)
  98. !-- ALBEDO time-varying surface albedo including snow effect (unitless fraction)
  99. !-- ALBBCK background surface albedo (unitless fraction)
  100. !-- CHS surface exchange coefficient for heat and moisture (m s-1);
  101. !-- CHS2 2m surface exchange coefficient for heat (m s-1);
  102. !-- CQS2 2m surface exchange coefficient for moisture (m s-1);
  103. ! --- soil variables
  104. !-- num_soil_layers the number of soil layers
  105. !-- ZS depths of centers of soil layers (m)
  106. !-- DZS thicknesses of soil layers (m)
  107. !-- SLDPTH thickness of each soil layer (m, same as DZS)
  108. !-- TMN soil temperature at lower boundary (K)
  109. !-- SMCWLT wilting point (volumetric)
  110. !-- SMCDRY dry soil moisture threshold where direct evap from
  111. ! top soil layer ends (volumetric)
  112. !-- SMCREF soil moisture threshold below which transpiration begins to
  113. ! stress (volumetric)
  114. !-- SMCMAX porosity, i.e. saturated value of soil moisture (volumetric)
  115. !-- NROOT number of root layers, a function of veg type, determined
  116. ! in subroutine redprm.
  117. !-- SMSTAV Soil moisture availability for evapotranspiration (
  118. ! fraction between SMCWLT and SMCMXA)
  119. !-- SMSTOT Total soil moisture content frozen+unfrozen) in the soil column (mm)
  120. ! --- snow variables
  121. !-- SNOWC fraction snow coverage (0-1.0)
  122. ! --- vegetation variables
  123. !-- SNOALB upper bound on maximum albedo over deep snow
  124. !-- SHDMIN minimum areal fractional coverage of annual green vegetation
  125. !-- SHDMAX maximum areal fractional coverage of annual green vegetation
  126. !-- XLAI leaf area index (dimensionless)
  127. !-- Z0BRD Background fixed roughness length (M)
  128. !-- Z0 Background vroughness length (M) as function
  129. !-- ZNT Time varying roughness length (M) as function
  130. !-- ALBD(IVGTPK,ISN) background albedo reading from a table
  131. ! --- LSM output
  132. !-- HFX upward heat flux at the surface (W/m^2)
  133. !-- QFX upward moisture flux at the surface (kg/m^2/s)
  134. !-- LH upward moisture flux at the surface (W m-2)
  135. !-- GRDFLX(I,J) ground heat flux (W m-2)
  136. !-- FDOWN radiation forcing at the surface (W m-2) = SOLDN*(1-alb)+LWDN
  137. !----------------------------------------------------------------------------
  138. !-- EC canopy water evaporation ((W m-2)
  139. !-- EDIR direct soil evaporation (W m-2)
  140. !-- ET plant transpiration from a particular root layer (W m-2)
  141. !-- ETT total plant transpiration (W m-2)
  142. !-- ESNOW sublimation from (or deposition to if <0) snowpack (W m-2)
  143. !-- DRIP through-fall of precip and/or dew in excess of canopy
  144. ! water-holding capacity (m)
  145. !-- DEW dewfall (or frostfall for t<273.15) (M)
  146. !-- SMAV Soil Moisture Availability for each layer, as a fraction
  147. ! between SMCWLT and SMCMAX (dimensionless fraction)
  148. ! ----------------------------------------------------------------------
  149. !-- BETA ratio of actual/potential evap (dimensionless)
  150. !-- ETP potential evaporation (W m-2)
  151. ! ----------------------------------------------------------------------
  152. !-- FLX1 precip-snow sfc (W m-2)
  153. !-- FLX2 freezing rain latent heat flux (W m-2)
  154. !-- FLX3 phase-change heat flux from snowmelt (W m-2)
  155. ! ----------------------------------------------------------------------
  156. !-- ACSNOM snow melt (mm) (water equivalent)
  157. !-- ACSNOW accumulated snow fall (mm) (water equivalent)
  158. !-- SNOPCX snow phase change heat flux (W/m^2)
  159. !-- POTEVP accumulated potential evaporation (W/m^2)
  160. !-- RIB Documentation needed!!!
  161. ! ----------------------------------------------------------------------
  162. !-- RUNOFF1 surface runoff (m s-1), not infiltrating the surface
  163. !-- RUNOFF2 subsurface runoff (m s-1), drainage out bottom of last
  164. ! soil layer (baseflow)
  165. ! important note: here RUNOFF2 is actually the sum of RUNOFF2 and RUNOFF3
  166. !-- RUNOFF3 numerical trunctation in excess of porosity (smcmax)
  167. ! for a given soil layer at the end of a time step (m s-1).
  168. !SFCRUNOFF Surface Runoff (mm)
  169. !UDRUNOFF Total Underground Runoff (mm), which is the sum of RUNOFF2 and RUNOFF3
  170. ! ----------------------------------------------------------------------
  171. !-- RC canopy resistance (s m-1)
  172. !-- PC plant coefficient (unitless fraction, 0-1) where PC*ETP = actual transp
  173. !-- RSMIN minimum canopy resistance (s m-1)
  174. !-- RCS incoming solar rc factor (dimensionless)
  175. !-- RCT air temperature rc factor (dimensionless)
  176. !-- RCQ atmos vapor pressure deficit rc factor (dimensionless)
  177. !-- RCSOIL soil moisture rc factor (dimensionless)
  178. !-- EMISS surface emissivity (between 0 and 1)
  179. !-- EMBCK Background surface emissivity (between 0 and 1)
  180. !-- ROVCP R/CP
  181. ! (R_d/R_v) (dimensionless)
  182. !-- ids start index for i in domain
  183. !-- ide end index for i in domain
  184. !-- jds start index for j in domain
  185. !-- jde end index for j in domain
  186. !-- kds start index for k in domain
  187. !-- kde end index for k in domain
  188. !-- ims start index for i in memory
  189. !-- ime end index for i in memory
  190. !-- jms start index for j in memory
  191. !-- jme end index for j in memory
  192. !-- kms start index for k in memory
  193. !-- kme end index for k in memory
  194. !-- its start index for i in tile
  195. !-- ite end index for i in tile
  196. !-- jts start index for j in tile
  197. !-- jte end index for j in tile
  198. !-- kts start index for k in tile
  199. !-- kte end index for k in tile
  200. !
  201. !-- SR fraction of frozen precip (0.0 to 1.0)
  202. !----------------------------------------------------------------
  203. ! IN only
  204. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
  205. ims,ime, jms,jme, kms,kme, &
  206. its,ite, jts,jte, kts,kte
  207. INTEGER, INTENT(IN ) :: sf_urban_physics !urban
  208. INTEGER, INTENT(IN ) :: isurban
  209. INTEGER, INTENT(IN ) :: isice
  210. REAL, DIMENSION( ims:ime, jms:jme ) , &
  211. INTENT(IN ) :: TMN, &
  212. XLAND, &
  213. XICE, &
  214. VEGFRA, &
  215. SHDMIN, &
  216. SHDMAX, &
  217. SNOALB, &
  218. GSW, &
  219. SWDOWN, & !added 10 jan 2007
  220. GLW, &
  221. RAINBL, &
  222. EMBCK, &
  223. SR
  224. REAL, DIMENSION( ims:ime, jms:jme ) , &
  225. INTENT(INOUT) :: ALBBCK, &
  226. Z0
  227. CHARACTER(LEN=*), INTENT(IN ) :: MMINLU
  228. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  229. INTENT(IN ) :: QV3D, &
  230. p8w3D, &
  231. DZ8W, &
  232. T3D
  233. REAL, DIMENSION( ims:ime, jms:jme ) , &
  234. INTENT(IN ) :: QGH, &
  235. CPM
  236. INTEGER, DIMENSION( ims:ime, jms:jme ) , &
  237. INTENT(IN ) :: IVGTYP, &
  238. ISLTYP
  239. INTEGER, INTENT(IN) :: num_soil_layers,ITIMESTEP
  240. REAL, INTENT(IN ) :: DT,ROVCP
  241. REAL, DIMENSION(1:num_soil_layers), INTENT(IN)::DZS
  242. ! IN and OUT
  243. REAL, DIMENSION( ims:ime , 1:num_soil_layers, jms:jme ), &
  244. INTENT(INOUT) :: SMOIS, & ! total soil moisture
  245. SH2O, & ! new soil liquid
  246. TSLB ! TSLB STEMP
  247. REAL, DIMENSION( ims:ime , 1:num_soil_layers, jms:jme ), &
  248. INTENT(OUT) :: SMCREL
  249. REAL, DIMENSION( ims:ime, jms:jme ) , &
  250. INTENT(INOUT) :: TSK, & !was TGB (temperature)
  251. HFX, &
  252. QFX, &
  253. LH, &
  254. GRDFLX, &
  255. QSFC,&
  256. CQS2,&
  257. CHS, &
  258. CHS2,&
  259. SNOW, &
  260. SNOWC, &
  261. SNOWH, & !new
  262. CANWAT, &
  263. SMSTAV, &
  264. SMSTOT, &
  265. SFCRUNOFF, &
  266. UDRUNOFF, &
  267. ACSNOM, &
  268. ACSNOW, &
  269. SNOTIME, &
  270. SNOPCX, &
  271. EMISS, &
  272. RIB, &
  273. POTEVP, &
  274. ALBEDO, &
  275. ZNT
  276. REAL, DIMENSION( ims:ime, jms:jme ) , &
  277. INTENT(OUT) :: NOAHRES
  278. REAL, DIMENSION( ims:ime, jms:jme ) , &
  279. INTENT(OUT) :: CHKLOWQ
  280. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LAI
  281. REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: QZ0
  282. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CMR_SFCDIF
  283. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CHR_SFCDIF
  284. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CMC_SFCDIF
  285. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CHC_SFCDIF
  286. ! Local variables (moved here from driver to make routine thread safe, 20031007 jm)
  287. REAL, DIMENSION(1:num_soil_layers) :: ET
  288. REAL, DIMENSION(1:num_soil_layers) :: SMAV
  289. REAL :: BETA, ETP, SSOIL,EC, EDIR, ESNOW, ETT, &
  290. FLX1,FLX2,FLX3, DRIP,DEW,FDOWN,RC,PC,RSMIN,XLAI, &
  291. ! RCS,RCT,RCQ,RCSOIL
  292. RCS,RCT,RCQ,RCSOIL,FFROZP
  293. LOGICAL, INTENT(IN ) :: myj,frpcpn
  294. ! DECLARATIONS - LOGICAL
  295. ! ----------------------------------------------------------------------
  296. LOGICAL, PARAMETER :: LOCAL=.false.
  297. LOGICAL :: FRZGRA, SNOWNG
  298. LOGICAL :: IPRINT
  299. ! ----------------------------------------------------------------------
  300. ! DECLARATIONS - INTEGER
  301. ! ----------------------------------------------------------------------
  302. INTEGER :: I,J, ICE,NSOIL,SLOPETYP,SOILTYP,VEGTYP
  303. INTEGER :: NROOT
  304. INTEGER :: KZ ,K
  305. INTEGER :: NS
  306. ! ----------------------------------------------------------------------
  307. ! DECLARATIONS - REAL
  308. ! ----------------------------------------------------------------------
  309. REAL :: SHMIN,SHMAX,DQSDT2,LWDN,PRCP,PRCPRAIN, &
  310. Q2SAT,Q2SATI,SFCPRS,SFCSPD,SFCTMP,SHDFAC,SNOALB1, &
  311. SOLDN,TBOT,ZLVL, Q2K,ALBBRD, ALBEDOK, ETA, ETA_KINEMATIC, &
  312. EMBRD, &
  313. Z0K,RUNOFF1,RUNOFF2,RUNOFF3,SHEAT,SOLNET,E2SAT,SFCTSNO, &
  314. ! mek, WRF testing, expanded diagnostics
  315. SOLUP,LWUP,RNET,RES,Q1SFC,TAIRV,SATFLG
  316. ! MEK MAY 2007
  317. REAL :: FDTLIW
  318. ! MEK JUL2007 for pot. evap.
  319. REAL :: RIBB
  320. REAL :: FDTW
  321. REAL :: EMISSI
  322. REAL :: SNCOVR,SNEQV,SNOWHK,CMC, CHK,TH2
  323. REAL :: SMCDRY,SMCMAX,SMCREF,SMCWLT,SNOMLT,SOILM,SOILW,Q1,T1
  324. REAL :: SNOTIME1 ! LSTSNW1 INITIAL NUMBER OF TIMESTEPS SINCE LAST SNOWFALL
  325. REAL :: DUMMY,Z0BRD
  326. !
  327. REAL :: COSZ, SOLARDIRECT
  328. !
  329. REAL, DIMENSION(1:num_soil_layers):: SLDPTH, STC,SMC,SWC
  330. !
  331. REAL, DIMENSION(1:num_soil_layers) :: ZSOIL, RTDIS
  332. REAL, PARAMETER :: TRESH=.95E0, A2=17.67,A3=273.15,A4=29.65, &
  333. T0=273.16E0, ELWV=2.50E6, A23M4=A2*(A3-A4)
  334. ! MEK MAY 2007
  335. REAL, PARAMETER :: ROW=1.E3,ELIW=XLF,ROWLIW=ROW*ELIW
  336. ! ----------------------------------------------------------------------
  337. ! DECLARATIONS START - urban
  338. ! ----------------------------------------------------------------------
  339. ! input variables surface_driver --> lsm
  340. INTEGER, INTENT(IN) :: num_roof_layers
  341. INTEGER, INTENT(IN) :: num_wall_layers
  342. INTEGER, INTENT(IN) :: num_road_layers
  343. REAL, OPTIONAL, DIMENSION(1:num_roof_layers), INTENT(IN) :: DZR
  344. REAL, OPTIONAL, DIMENSION(1:num_wall_layers), INTENT(IN) :: DZB
  345. REAL, OPTIONAL, DIMENSION(1:num_road_layers), INTENT(IN) :: DZG
  346. REAL, OPTIONAL, INTENT(IN) :: DECLIN_URB
  347. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: COSZ_URB2D
  348. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: OMG_URB2D
  349. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: XLAT_URB2D
  350. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN) :: U_PHY
  351. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN) :: V_PHY
  352. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN) :: TH_PHY
  353. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN) :: P_PHY
  354. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN) :: RHO
  355. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UST
  356. LOGICAL, intent(in) :: rdlai2d
  357. LOGICAL, intent(in) :: USEMONALB
  358. ! input variables lsm --> urban
  359. INTEGER :: UTYPE_URB ! urban type [urban=1, suburban=2, rural=3]
  360. REAL :: TA_URB ! potential temp at 1st atmospheric level [K]
  361. REAL :: QA_URB ! mixing ratio at 1st atmospheric level [kg/kg]
  362. REAL :: UA_URB ! wind speed at 1st atmospheric level [m/s]
  363. REAL :: U1_URB ! u at 1st atmospheric level [m/s]
  364. REAL :: V1_URB ! v at 1st atmospheric level [m/s]
  365. REAL :: SSG_URB ! downward total short wave radiation [W/m/m]
  366. REAL :: LLG_URB ! downward long wave radiation [W/m/m]
  367. REAL :: RAIN_URB ! precipitation [mm/h]
  368. REAL :: RHOO_URB ! air density [kg/m^3]
  369. REAL :: ZA_URB ! first atmospheric level [m]
  370. REAL :: DELT_URB ! time step [s]
  371. REAL :: SSGD_URB ! downward direct short wave radiation [W/m/m]
  372. REAL :: SSGQ_URB ! downward diffuse short wave radiation [W/m/m]
  373. REAL :: XLAT_URB ! latitude [deg]
  374. REAL :: COSZ_URB ! cosz
  375. REAL :: OMG_URB ! hour angle
  376. REAL :: ZNT_URB ! roughness length [m]
  377. REAL :: TR_URB
  378. REAL :: TB_URB
  379. REAL :: TG_URB
  380. REAL :: TC_URB
  381. REAL :: QC_URB
  382. REAL :: UC_URB
  383. REAL :: XXXR_URB
  384. REAL :: XXXB_URB
  385. REAL :: XXXG_URB
  386. REAL :: XXXC_URB
  387. REAL, DIMENSION(1:num_roof_layers) :: TRL_URB ! roof layer temp [K]
  388. REAL, DIMENSION(1:num_wall_layers) :: TBL_URB ! wall layer temp [K]
  389. REAL, DIMENSION(1:num_road_layers) :: TGL_URB ! road layer temp [K]
  390. LOGICAL :: LSOLAR_URB
  391. ! state variable surface_driver <--> lsm <--> urban
  392. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D
  393. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D
  394. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D
  395. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D
  396. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D
  397. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UC_URB2D
  398. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D
  399. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D
  400. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D
  401. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D
  402. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D
  403. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D
  404. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D
  405. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D
  406. !
  407. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D
  408. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D
  409. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D
  410. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D
  411. ! output variable lsm --> surface_driver
  412. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: PSIM_URB2D
  413. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: PSIH_URB2D
  414. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: GZ1OZ0_URB2D
  415. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: U10_URB2D
  416. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: V10_URB2D
  417. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: TH2_URB2D
  418. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: Q2_URB2D
  419. !
  420. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: AKMS_URB2D
  421. !
  422. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: UST_URB2D
  423. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: FRC_URB2D
  424. INTEGER, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: UTYPE_URB2D
  425. ! output variables urban --> lsm
  426. REAL :: TS_URB ! surface radiative temperature [K]
  427. REAL :: QS_URB ! surface humidity [-]
  428. REAL :: SH_URB ! sensible heat flux [W/m/m]
  429. REAL :: LH_URB ! latent heat flux [W/m/m]
  430. REAL :: LH_KINEMATIC_URB ! latent heat flux, kinetic [kg/m/m/s]
  431. REAL :: SW_URB ! upward short wave radiation flux [W/m/m]
  432. REAL :: ALB_URB ! time-varying albedo [fraction]
  433. REAL :: LW_URB ! upward long wave radiation flux [W/m/m]
  434. REAL :: G_URB ! heat flux into the ground [W/m/m]
  435. REAL :: RN_URB ! net radiation [W/m/m]
  436. REAL :: PSIM_URB ! shear f for momentum [-]
  437. REAL :: PSIH_URB ! shear f for heat [-]
  438. REAL :: GZ1OZ0_URB ! shear f for heat [-]
  439. REAL :: U10_URB ! wind u component at 10 m [m/s]
  440. REAL :: V10_URB ! wind v component at 10 m [m/s]
  441. REAL :: TH2_URB ! potential temperature at 2 m [K]
  442. REAL :: Q2_URB ! humidity at 2 m [-]
  443. REAL :: CHS_URB
  444. REAL :: CHS2_URB
  445. REAL :: UST_URB
  446. ! Variables for multi-layer UCM (Martilli et al. 2002)
  447. REAL, OPTIONAL, INTENT(IN ) :: GMT
  448. INTEGER, OPTIONAL, INTENT(IN ) :: JULDAY
  449. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) ::XLAT, XLONG
  450. INTEGER, INTENT(IN ) :: NUM_URBAN_LAYERS
  451. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: trb_urb4d
  452. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: tw1_urb4d
  453. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: tw2_urb4d
  454. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: tgb_urb4d
  455. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: tlev_urb3d
  456. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: qlev_urb3d
  457. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: tw1lev_urb3d
  458. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: tw2lev_urb3d
  459. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: tglev_urb3d
  460. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: tflev_urb3d
  461. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: lf_ac_urb3d
  462. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: sf_ac_urb3d
  463. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: cm_ac_urb3d
  464. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: sfvent_urb3d
  465. REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: lfvent_urb3d
  466. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: sfwin1_urb3d
  467. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: sfwin2_urb3d
  468. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: sfw1_urb3d
  469. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: sfw2_urb3d
  470. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: sfr_urb3d
  471. REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: sfg_urb3d
  472. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::a_u_bep !Implicit momemtum component X-direction
  473. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::a_v_bep !Implicit momemtum component Y-direction
  474. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::a_t_bep !Implicit component pot. temperature
  475. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::a_q_bep !Implicit momemtum component X-direction
  476. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::a_e_bep !Implicit component TKE
  477. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::b_u_bep !Explicit momentum component X-direction
  478. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::b_v_bep !Explicit momentum component Y-direction
  479. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::b_t_bep !Explicit component pot. temperature
  480. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::b_q_bep !Implicit momemtum component Y-direction
  481. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::b_e_bep !Explicit component TKE
  482. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::vl_bep !Fraction air volume in grid cell
  483. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::dlg_bep !Height above ground
  484. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::sf_bep !Fraction air at the face of grid cell
  485. REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) ::dl_u_bep !Length scale
  486. ! Local variables for multi-layer UCM (Martilli et al. 2002)
  487. REAL, DIMENSION( ims:ime, jms:jme ) :: HFX_RURAL,LH_RURAL,GRDFLX_RURAL,RN_RURAL
  488. REAL, DIMENSION( ims:ime, jms:jme ) :: QFX_RURAL,QSFC_RURAL,UMOM_RURAL,VMOM_RURAL
  489. REAL, DIMENSION( ims:ime, jms:jme ) :: ALB_RURAL,EMISS_RURAL,UST_RURAL,TSK_RURAL
  490. ! REAL, DIMENSION( ims:ime, jms:jme ) :: GRDFLX_URB
  491. ! REAL, DIMENSION( ims:ime, jms:jme ) :: QFX_URB,QSFC_URB,UMOM_URB,VMOM_URB
  492. REAL, DIMENSION( ims:ime, jms:jme ) :: HFX_URB,UMOM_URB,VMOM_URB
  493. REAL, DIMENSION( ims:ime, jms:jme ) :: QFX_URB
  494. ! REAL, DIMENSION( ims:ime, jms:jme ) :: ALBEDO_URB,EMISS_URB,UMOM,VMOM,UST
  495. REAL, DIMENSION(ims:ime,jms:jme) ::EMISS_URB
  496. REAL, DIMENSION(ims:ime,jms:jme) :: RL_UP_URB
  497. REAL, DIMENSION(ims:ime,jms:jme) ::RS_ABS_URB
  498. REAL, DIMENSION(ims:ime,jms:jme) ::GRDFLX_URB
  499. REAL :: SIGMA_SB,RL_UP_RURAL,RL_UP_TOT,RS_ABS_TOT,UMOM,VMOM
  500. REAL :: r1,r2,r3
  501. REAL :: CMR_URB, CHR_URB, CMC_URB, CHC_URB
  502. ! ----------------------------------------------------------------------
  503. ! DECLARATIONS END - urban
  504. ! ----------------------------------------------------------------------
  505. REAL, PARAMETER :: CAPA=R_D/CP
  506. REAL :: APELM,APES,SFCTH2,PSFC
  507. real, intent(in) :: xice_threshold
  508. character(len=80) :: message_text
  509. ! MEK MAY 2007
  510. FDTLIW=DT/ROWLIW
  511. ! MEK JUL2007
  512. FDTW=DT/(XLV*RHOWATER)
  513. ! debug printout
  514. IPRINT=.false.
  515. ! SLOPETYP=2
  516. SLOPETYP=1
  517. ! SHDMIN=0.00
  518. NSOIL=num_soil_layers
  519. DO NS=1,NSOIL
  520. SLDPTH(NS)=DZS(NS)
  521. ENDDO
  522. JLOOP : DO J=jts,jte
  523. IF(ITIMESTEP.EQ.1)THEN
  524. DO 50 I=its,ite
  525. !*** initialize soil conditions for IHOP 31 May case
  526. ! IF((XLAND(I,J)-1.5) < 0.)THEN
  527. ! if (I==108.and.j==85) then
  528. ! DO NS=1,NSOIL
  529. ! SMOIS(I,NS,J)=0.10
  530. ! SH2O(I,NS,J)=0.10
  531. ! enddo
  532. ! endif
  533. ! ENDIF
  534. !*** SET ZERO-VALUE FOR SOME OUTPUT DIAGNOSTIC ARRAYS
  535. IF((XLAND(I,J)-1.5).GE.0.)THEN
  536. ! check sea-ice point
  537. #if 0
  538. IF( XICE(I,J).GE. XICE_THRESHOLD .and. IPRINT ) PRINT*, ' sea-ice at water point, I=',I,'J=',J
  539. #endif
  540. !*** Open Water Case
  541. SMSTAV(I,J)=1.0
  542. SMSTOT(I,J)=1.0
  543. DO NS=1,NSOIL
  544. SMOIS(I,NS,J)=1.0
  545. TSLB(I,NS,J)=273.16 !STEMP
  546. SMCREL(I,NS,J)=1.0
  547. ENDDO
  548. ELSE
  549. IF ( XICE(I,J) .GE. XICE_THRESHOLD ) THEN
  550. !*** SEA-ICE CASE
  551. SMSTAV(I,J)=1.0
  552. SMSTOT(I,J)=1.0
  553. DO NS=1,NSOIL
  554. SMOIS(I,NS,J)=1.0
  555. SMCREL(I,NS,J)=1.0
  556. ENDDO
  557. ENDIF
  558. ENDIF
  559. !
  560. 50 CONTINUE
  561. ENDIF ! end of initialization over ocean
  562. !-----------------------------------------------------------------------
  563. ILOOP : DO I=its,ite
  564. ! surface pressure
  565. PSFC=P8w3D(i,1,j)
  566. ! pressure in middle of lowest layer
  567. SFCPRS=(P8W3D(I,KTS+1,j)+P8W3D(i,KTS,j))*0.5
  568. ! convert from mixing ratio to specific humidity
  569. Q2K=QV3D(i,1,j)/(1.0+QV3D(i,1,j))
  570. !
  571. ! Q2SAT=QGH(I,j)
  572. Q2SAT=QGH(I,J)/(1.0+QGH(I,J)) ! Q2SAT is sp humidity
  573. ! add check on myj=.true.
  574. ! IF((Q2K.GE.Q2SAT*TRESH).AND.Q2K.LT.QZ0(I,J))THEN
  575. IF((myj).AND.(Q2K.GE.Q2SAT*TRESH).AND.Q2K.LT.QZ0(I,J))THEN
  576. SATFLG=0.
  577. CHKLOWQ(I,J)=0.
  578. ELSE
  579. SATFLG=1.0
  580. CHKLOWQ(I,J)=1.
  581. ENDIF
  582. SFCTMP=T3D(i,1,j)
  583. ZLVL=0.5*DZ8W(i,1,j)
  584. ! TH2=SFCTMP+(0.0097545*ZLVL)
  585. ! calculate SFCTH2 via Exner function vs lapse-rate (above)
  586. APES=(1.E5/PSFC)**CAPA
  587. APELM=(1.E5/SFCPRS)**CAPA
  588. SFCTH2=SFCTMP*APELM
  589. TH2=SFCTH2/APES
  590. !
  591. EMISSI = EMISS(I,J)
  592. LWDN=GLW(I,J)*EMISSI
  593. ! SOLDN is total incoming solar
  594. SOLDN=SWDOWN(I,J)
  595. ! GSW is net downward solar
  596. ! SOLNET=GSW(I,J)
  597. ! use mid-day albedo to determine net downward solar (no solar zenith angle correction)
  598. SOLNET=SOLDN*(1.-ALBEDO(I,J))
  599. PRCP=RAINBL(i,j)/DT
  600. VEGTYP=IVGTYP(I,J)
  601. SOILTYP=ISLTYP(I,J)
  602. SHDFAC=VEGFRA(I,J)/100.
  603. T1=TSK(I,J)
  604. CHK=CHS(I,J)
  605. SHMIN=SHDMIN(I,J)/100. !NEW
  606. SHMAX=SHDMAX(I,J)/100. !NEW
  607. ! convert snow water equivalent from mm to meter
  608. SNEQV=SNOW(I,J)*0.001
  609. ! snow depth in meters
  610. SNOWHK=SNOWH(I,J)
  611. SNCOVR=SNOWC(I,J)
  612. ! if "SR" present, set frac of frozen precip ("FFROZP") = snow-ratio ("SR", range:0-1)
  613. ! SR from e.g. Ferrier microphysics
  614. ! otherwise define from 1st atmos level temperature
  615. IF(FRPCPN) THEN
  616. FFROZP=SR(I,J)
  617. ELSE
  618. IF (SFCTMP <= 273.15) THEN
  619. FFROZP = 1.0
  620. ELSE
  621. FFROZP = 0.0
  622. ENDIF
  623. ENDIF
  624. !***
  625. IF((XLAND(I,J)-1.5).GE.0.)THEN ! begining of land/sea if block
  626. ! Open water points
  627. TSK_RURAL(I,J)=TSK(I,J)
  628. HFX_RURAL(I,J)=HFX(I,J)
  629. QFX_RURAL(I,J)=QFX(I,J)
  630. LH_RURAL(I,J)=LH(I,J)
  631. EMISS_RURAL(I,J)=EMISS(I,J)
  632. GRDFLX_RURAL(I,J)=GRDFLX(I,J)
  633. ELSE
  634. ! Land or sea-ice case
  635. IF (XICE(I,J) >= XICE_THRESHOLD) THEN
  636. ! Sea-ice point
  637. ICE = 1
  638. ELSE IF ( VEGTYP == ISICE ) THEN
  639. ! Land-ice point
  640. ICE = -1
  641. ELSE
  642. ! Neither sea ice or land ice.
  643. ICE=0
  644. ENDIF
  645. DQSDT2=Q2SAT*A23M4/(SFCTMP-A4)**2
  646. IF(SNOW(I,J).GT.0.0)THEN
  647. ! snow on surface (use ice saturation properties)
  648. SFCTSNO=SFCTMP
  649. E2SAT=611.2*EXP(6174.*(1./273.15 - 1./SFCTSNO))
  650. Q2SATI=0.622*E2SAT/(SFCPRS-E2SAT)
  651. Q2SATI=Q2SATI/(1.0+Q2SATI) ! spec. hum.
  652. IF (T1 .GT. 273.14) THEN
  653. ! warm ground temps, weight the saturation between ice and water according to SNOWC
  654. Q2SAT=Q2SAT*(1.-SNOWC(I,J)) + Q2SATI*SNOWC(I,J)
  655. DQSDT2=DQSDT2*(1.-SNOWC(I,J)) + Q2SATI*6174./(SFCTSNO**2)*SNOWC(I,J)
  656. ELSE
  657. ! cold ground temps, use ice saturation only
  658. Q2SAT=Q2SATI
  659. DQSDT2=Q2SATI*6174./(SFCTSNO**2)
  660. ENDIF
  661. ! for snow cover fraction at 0 C, ground temp will not change, so DQSDT2 effectively zero
  662. IF(T1 .GT. 273. .AND. SNOWC(I,J) .GT. 0.)DQSDT2=DQSDT2*(1.-SNOWC(I,J))
  663. ENDIF
  664. IF(ICE.EQ.1)THEN
  665. ! Sea-ice point has deep-level temperature of -2 C
  666. TBOT=271.16
  667. ELSE
  668. ! Land-ice or land points have the usual deep-soil temperature.
  669. TBOT=TMN(I,J)
  670. ENDIF
  671. IF(VEGTYP.EQ.25) SHDFAC=0.0000
  672. IF(VEGTYP.EQ.26) SHDFAC=0.0000
  673. IF(VEGTYP.EQ.27) SHDFAC=0.0000
  674. IF(SOILTYP.EQ.14.AND.XICE(I,J).EQ.0.)THEN
  675. #if 0
  676. IF(IPRINT)PRINT*,' SOIL TYPE FOUND TO BE WATER AT A LAND-POINT'
  677. IF(IPRINT)PRINT*,i,j,'RESET SOIL in surfce.F'
  678. #endif
  679. SOILTYP=7
  680. ENDIF
  681. SNOALB1 = SNOALB(I,J)
  682. CMC=CANWAT(I,J)
  683. !-------------------------------------------
  684. !*** convert snow depth from mm to meter
  685. !
  686. ! IF(RDMAXALB) THEN
  687. ! SNOALB=ALBMAX(I,J)*0.01
  688. ! ELSE
  689. ! SNOALB=MAXALB(IVGTPK)*0.01
  690. ! ENDIF
  691. ! SNOALB1=0.80
  692. ! SHMIN=0.00
  693. ALBBRD=ALBBCK(I,J)
  694. Z0BRD=Z0(I,J)
  695. EMBRD=EMBCK(I,J)
  696. SNOTIME1 = SNOTIME(I,J)
  697. RIBB=RIB(I,J)
  698. !FEI: temporaray arrays above need to be changed later by using SI
  699. DO NS=1,NSOIL
  700. SMC(NS)=SMOIS(I,NS,J)
  701. STC(NS)=TSLB(I,NS,J) !STEMP
  702. SWC(NS)=SH2O(I,NS,J)
  703. ENDDO
  704. !
  705. if ( (SNEQV.ne.0..AND.SNOWHK.eq.0.).or.(SNOWHK.le.SNEQV) )THEN
  706. SNOWHK= 5.*SNEQV
  707. endif
  708. !
  709. !Fei: urban. for urban surface, if calling UCM, redefine the natural surface in cities as
  710. ! the "NATURAL" category in the VEGPARM.TBL
  711. IF(SF_URBAN_PHYSICS == 1.OR. SF_URBAN_PHYSICS==2.OR.SF_URBAN_PHYSICS==3 ) THEN
  712. IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == 31 .or. &
  713. IVGTYP(I,J) == 32 .or. IVGTYP(I,J) == 33) THEN
  714. VEGTYP = NATURAL
  715. SHDFAC = SHDTBL(NATURAL)
  716. ALBEDOK =0.2 ! 0.2
  717. ALBBRD =0.2 !0.2
  718. EMISSI = 0.98 !for VEGTYP=5
  719. IF ( FRC_URB2D(I,J) < 0.99 ) THEN
  720. if(sf_urban_physics.eq.1)then
  721. T1= ( TSK(I,J) -FRC_URB2D(I,J) * TS_URB2D (I,J) )/ (1-FRC_URB2D(I,J))
  722. elseif((sf_urban_physics.eq.2).OR.(sf_urban_physics.eq.3))then
  723. r1= (tsk(i,j)**4.)
  724. r2= frc_urb2d(i,j)*(ts_urb2d(i,j)**4.)
  725. r3= (1.-frc_urb2d(i,j))
  726. t1= ((r1-r2)/r3)**.25
  727. endif
  728. ELSE
  729. T1 = TSK(I,J)
  730. ENDIF
  731. ENDIF
  732. ELSE
  733. IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == 31 .or. &
  734. IVGTYP(I,J) == 32 .or. IVGTYP(I,J) == 33) THEN
  735. VEGTYP = ISURBAN
  736. ENDIF
  737. ENDIF
  738. #if 0
  739. IF(IPRINT) THEN
  740. !
  741. print*, 'BEFORE SFLX, in Noahlsm_driver'
  742. print*, 'ICE', ICE, 'DT',DT, 'ZLVL',ZLVL, 'NSOIL', NSOIL, &
  743. 'SLDPTH', SLDPTH, 'LOCAL',LOCAL, 'LUTYPE',&
  744. LUTYPE, 'SLTYPE',SLTYPE, 'LWDN',LWDN, 'SOLDN',SOLDN, &
  745. 'SFCPRS',SFCPRS, 'PRCP',PRCP,'SFCTMP',SFCTMP,'Q2K',Q2K, &
  746. 'TH2',TH2,'Q2SAT',Q2SAT,'DQSDT2',DQSDT2,'VEGTYP', VEGTYP,&
  747. 'SOILTYP',SOILTYP, 'SLOPETYP',SLOPETYP, 'SHDFAC',SHDFAC,&
  748. 'SHMIN',SHMIN, 'ALBBRD',ALBBRD,'SNOALB1',SNOALB1,'TBOT',&
  749. TBOT, 'Z0BRD',Z0BRD, 'Z0K',Z0K, 'CMC',CMC, 'T1',T1,'STC',&
  750. STC, 'SMC',SMC, 'SWC',SWC,'SNOWHK',SNOWHK,'SNEQV',SNEQV,&
  751. 'ALBEDOK',ALBEDOK,'CHK',CHK,'ETA',ETA,'SHEAT',SHEAT, &
  752. 'ETA_KINEMATIC',ETA_KINEMATIC, 'FDOWN',FDOWN,'EC',EC, &
  753. 'EDIR',EDIR,'ET',ET,'ETT',ETT,'ESNOW',ESNOW,'DRIP',DRIP,&
  754. 'DEW',DEW,'BETA',BETA,'ETP',ETP,'SSOIL',SSOIL,'FLX1',FLX1,&
  755. 'FLX2',FLX2,'FLX3',FLX3,'SNOMLT',SNOMLT,'SNCOVR',SNCOVR,&
  756. 'RUNOFF1',RUNOFF1,'RUNOFF2',RUNOFF2,'RUNOFF3',RUNOFF3, &
  757. 'RC',RC, 'PC',PC,'RSMIN',RSMIN,'XLAI',XLAI,'RCS',RCS, &
  758. 'RCT',RCT,'RCQ',RCQ,'RCSOIL',RCSOIL,'SOILW',SOILW, &
  759. 'SOILM',SOILM,'Q1',Q1,'SMCWLT',SMCWLT,'SMCDRY',SMCDRY,&
  760. 'SMCREF',SMCREF,'SMCMAX',SMCMAX,'NROOT',NROOT
  761. endif
  762. #endif
  763. IF (rdlai2d) THEN
  764. xlai = lai(i,j)
  765. endif
  766. IF ( XICE(I,J) >= XICE_THRESHOLD ) THEN
  767. ! Sea-ice case
  768. DO NS = 1, NSOIL
  769. SH2O(I,NS,J) = 1.0
  770. ENDDO
  771. LAI(I,J) = 0.01
  772. CYCLE ILOOP
  773. ELSE
  774. ! Land and glacial land.
  775. CALL SFLX (I,J,ICE,FFROZP, ISURBAN, DT,ZLVL,NSOIL,SLDPTH, & !C
  776. LOCAL, & !L
  777. LUTYPE, SLTYPE, & !CL
  778. LWDN,SOLDN,SOLNET,SFCPRS,PRCP,SFCTMP,Q2K,DUMMY, & !F
  779. DUMMY,DUMMY, DUMMY, & !F PRCPRAIN not used
  780. TH2,Q2SAT,DQSDT2, & !I
  781. VEGTYP,SOILTYP,SLOPETYP,SHDFAC,SHMIN,SHMAX, & !I
  782. ALBBRD, SNOALB1,TBOT, Z0BRD, Z0K, EMISSI, EMBRD, & !S
  783. CMC,T1,STC,SMC,SWC,SNOWHK,SNEQV,ALBEDOK,CHK,dummy,& !H
  784. ETA,SHEAT, ETA_KINEMATIC,FDOWN, & !O
  785. EC,EDIR,ET,ETT,ESNOW,DRIP,DEW, & !O
  786. BETA,ETP,SSOIL, & !O
  787. FLX1,FLX2,FLX3, & !O
  788. SNOMLT,SNCOVR, & !O
  789. RUNOFF1,RUNOFF2,RUNOFF3, & !O
  790. RC,PC,RSMIN,XLAI,RCS,RCT,RCQ,RCSOIL, & !O
  791. SOILW,SOILM,Q1,SMAV, & !D
  792. RDLAI2D,USEMONALB, &
  793. SNOTIME1, &
  794. RIBB, &
  795. SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT)
  796. ENDIF
  797. lai(i,j) = xlai
  798. #if 0
  799. IF(IPRINT) THEN
  800. print*, 'AFTER SFLX, in Noahlsm_driver'
  801. print*, 'ICE', ICE, 'DT',DT, 'ZLVL',ZLVL, 'NSOIL', NSOIL, &
  802. 'SLDPTH', SLDPTH, 'LOCAL',LOCAL, 'LUTYPE',&
  803. LUTYPE, 'SLTYPE',SLTYPE, 'LWDN',LWDN, 'SOLDN',SOLDN, &
  804. 'SFCPRS',SFCPRS, 'PRCP',PRCP,'SFCTMP',SFCTMP,'Q2K',Q2K, &
  805. 'TH2',TH2,'Q2SAT',Q2SAT,'DQSDT2',DQSDT2,'VEGTYP', VEGTYP,&
  806. 'SOILTYP',SOILTYP, 'SLOPETYP',SLOPETYP, 'SHDFAC',SHDFAC,&
  807. 'SHDMIN',SHMIN, 'ALBBRD',ALBBRD,'SNOALB',SNOALB1,'TBOT',&
  808. TBOT, 'Z0BRD',Z0BRD, 'Z0K',Z0K, 'CMC',CMC, 'T1',T1,'STC',&
  809. STC, 'SMC',SMC, 'SWc',SWC,'SNOWHK',SNOWHK,'SNEQV',SNEQV,&
  810. 'ALBEDOK',ALBEDOK,'CHK',CHK,'ETA',ETA,'SHEAT',SHEAT, &
  811. 'ETA_KINEMATIC',ETA_KINEMATIC, 'FDOWN',FDOWN,'EC',EC, &
  812. 'EDIR',EDIR,'ET',ET,'ETT',ETT,'ESNOW',ESNOW,'DRIP',DRIP,&
  813. 'DEW',DEW,'BETA',BETA,'ETP',ETP,'SSOIL',SSOIL,'FLX1',FLX1,&
  814. 'FLX2',FLX2,'FLX3',FLX3,'SNOMLT',SNOMLT,'SNCOVR',SNCOVR,&
  815. 'RUNOFF1',RUNOFF1,'RUNOFF2',RUNOFF2,'RUNOFF3',RUNOFF3, &
  816. 'RC',RC, 'PC',PC,'RSMIN',RSMIN,'XLAI',XLAI,'RCS',RCS, &
  817. 'RCT',RCT,'RCQ',RCQ,'RCSOIL',RCSOIL,'SOILW',SOILW, &
  818. 'SOILM',SOILM,'Q1',Q1,'SMCWLT',SMCWLT,'SMCDRY',SMCDRY,&
  819. 'SMCREF',SMCREF,'SMCMAX',SMCMAX,'NROOT',NROOT
  820. endif
  821. #endif
  822. !*** UPDATE STATE VARIABLES
  823. CANWAT(I,J)=CMC
  824. SNOW(I,J)=SNEQV*1000.
  825. ! SNOWH(I,J)=SNOWHK*1000.
  826. SNOWH(I,J)=SNOWHK ! SNOWHK in meters
  827. ALBEDO(I,J)=ALBEDOK
  828. ALB_RURAL(I,J)=ALBEDOK
  829. ALBBCK(I,J)=ALBBRD
  830. Z0(I,J)=Z0BRD
  831. EMISS(I,J) = EMISSI
  832. EMISS_RURAL(I,J) = EMISSI
  833. ! Noah: activate time-varying roughness length (V3.3 Feb 2011)
  834. ZNT(I,J)=Z0K
  835. TSK(I,J)=T1
  836. TSK_RURAL(I,J)=T1
  837. HFX(I,J)=SHEAT
  838. HFX_RURAL(I,J)=SHEAT
  839. ! MEk Jul07 add potential evap accum
  840. POTEVP(I,J)=POTEVP(I,J)+ETP*FDTW
  841. QFX(I,J)=ETA_KINEMATIC
  842. QFX_RURAL(I,J)=ETA_KINEMATIC
  843. LH(I,J)=ETA
  844. LH_RURAL(I,J)=ETA
  845. GRDFLX(I,J)=SSOIL
  846. GRDFLX_RURAL(I,J)=SSOIL
  847. SNOWC(I,J)=SNCOVR
  848. CHS2(I,J)=CQS2(I,J)
  849. SNOTIME(I,J) = SNOTIME1
  850. ! prevent diagnostic ground q (q1) from being greater than qsat(tsk)
  851. ! as happens over snow cover where the cqs2 value also becomes irrelevant
  852. ! by setting cqs2=chs in this situation the 2m q should become just qv(k=1)
  853. IF (Q1 .GT. QSFC(I,J)) THEN
  854. CQS2(I,J) = CHS(I,J)
  855. ENDIF
  856. ! QSFC(I,J)=Q1
  857. ! Convert QSFC back to mixing ratio
  858. QSFC(I,J)= Q1/(1.0-Q1)
  859. !
  860. QSFC_RURAL(I,J)= Q1/(1.0-Q1)
  861. ! Calculate momentum flux from rural surface for use with multi-layer UCM (Martilli et al. 2002)
  862. DO 80 NS=1,NSOIL
  863. SMOIS(I,NS,J)=SMC(NS)
  864. TSLB(I,NS,J)=STC(NS) ! STEMP
  865. SH2O(I,NS,J)=SWC(NS)
  866. 80 CONTINUE
  867. ! ENDIF
  868. !
  869. ! Residual of surface energy balance equation terms
  870. !
  871. noahres(i,j) = ( solnet + lwdn ) - sheat + ssoil - eta - ( emissi * STBOLT * (t1**4) ) - flx1 - flx2 - flx3
  872. IF (SF_URBAN_PHYSICS == 1 ) THEN ! Beginning of UCM CALL if block
  873. !--------------------------------------
  874. ! URBAN CANOPY MODEL START - urban
  875. !--------------------------------------
  876. ! Input variables lsm --> urban
  877. IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == 31 .or. &
  878. IVGTYP(I,J) == 32 .or. IVGTYP(I,J) == 33 ) THEN
  879. ! Call urban
  880. !
  881. UTYPE_URB = UTYPE_URB2D(I,J) !urban type (low, high or industrial)
  882. TA_URB = SFCTMP ! [K]
  883. QA_URB = Q2K ! [kg/kg]
  884. UA_URB = SQRT(U_PHY(I,1,J)**2.+V_PHY(I,1,J)**2.)
  885. U1_URB = U_PHY(I,1,J)
  886. V1_URB = V_PHY(I,1,J)
  887. IF(UA_URB < 1.) UA_URB=1. ! [m/s]
  888. SSG_URB = SOLDN ! [W/m/m]
  889. SSGD_URB = 0.8*SOLDN ! [W/m/m]
  890. SSGQ_URB = SSG_URB-SSGD_URB ! [W/m/m]
  891. LLG_URB = GLW(I,J) ! [W/m/m]
  892. RAIN_URB = RAINBL(I,J) ! [mm]
  893. RHOO_URB = SFCPRS / (287.04 * SFCTMP * (1.0+ 0.61 * Q2K)) ![kg/m/m/m]
  894. ZA_URB = ZLVL ! [m]
  895. DELT_URB = DT ! [sec]
  896. XLAT_URB = XLAT_URB2D(I,J) ! [deg]
  897. COSZ_URB = COSZ_URB2D(I,J) !
  898. OMG_URB = OMG_URB2D(I,J) !
  899. ZNT_URB = ZNT(I,J)
  900. LSOLAR_URB = .FALSE.
  901. TR_URB = TR_URB2D(I,J)
  902. TB_URB = TB_URB2D(I,J)
  903. TG_URB = TG_URB2D(I,J)
  904. TC_URB = TC_URB2D(I,J)
  905. QC_URB = QC_URB2D(I,J)
  906. UC_URB = UC_URB2D(I,J)
  907. DO K = 1,num_roof_layers
  908. TRL_URB(K) = TRL_URB3D(I,K,J)
  909. END DO
  910. DO K = 1,num_wall_layers
  911. TBL_URB(K) = TBL_URB3D(I,K,J)
  912. END DO
  913. DO K = 1,num_road_layers
  914. TGL_URB(K) = TGL_URB3D(I,K,J)
  915. END DO
  916. XXXR_URB = XXXR_URB2D(I,J)
  917. XXXB_URB = XXXB_URB2D(I,J)
  918. XXXG_URB = XXXG_URB2D(I,J)
  919. XXXC_URB = XXXC_URB2D(I,J)
  920. !
  921. !
  922. ! Limits to avoid dividing by small number
  923. if (CHS(I,J) < 1.0E-02) then
  924. CHS(I,J) = 1.0E-02
  925. endif
  926. if (CHS2(I,J) < 1.0E-02) then
  927. CHS2(I,J) = 1.0E-02
  928. endif
  929. if (CQS2(I,J) < 1.0E-02) then
  930. CQS2(I,J) = 1.0E-02
  931. endif
  932. !
  933. CHS_URB = CHS(I,J)
  934. CHS2_URB = CHS2(I,J)
  935. IF (PRESENT(CMR_SFCDIF)) THEN
  936. CMR_URB = CMR_SFCDIF(I,J)
  937. CHR_URB = CHR_SFCDIF(I,J)
  938. CMC_URB = CMC_SFCDIF(I,J)
  939. CHC_URB = CHC_SFCDIF(I,J)
  940. ENDIF
  941. !
  942. ! Call urban
  943. CALL urban(LSOLAR_URB, & ! I
  944. num_roof_layers,num_wall_layers,num_road_layers, & ! C
  945. DZR,DZB,DZG, & ! C
  946. UTYPE_URB,TA_URB,QA_URB,UA_URB,U1_URB,V1_URB,SSG_URB, & ! I
  947. SSGD_URB,SSGQ_URB,LLG_URB,RAIN_URB,RHOO_URB, & ! I
  948. ZA_URB,DECLIN_URB,COSZ_URB,OMG_URB, & ! I
  949. XLAT_URB,DELT_URB,ZNT_URB, & ! I
  950. CHS_URB, CHS2_URB, & ! I
  951. TR_URB, TB_URB, TG_URB, TC_URB, QC_URB,UC_URB, & ! H
  952. TRL_URB,TBL_URB,TGL_URB, & ! H
  953. XXXR_URB, XXXB_URB, XXXG_URB, XXXC_URB, & ! H
  954. TS_URB,QS_URB,SH_URB,LH_URB,LH_KINEMATIC_URB, & ! O
  955. SW_URB,ALB_URB,LW_URB,G_URB,RN_URB,PSIM_URB,PSIH_URB, & ! O
  956. GZ1OZ0_URB, & !O
  957. CMR_URB, CHR_URB, CMC_URB, CHC_URB, &
  958. U10_URB, V10_URB, TH2_URB, Q2_URB, & ! O
  959. UST_URB) !O
  960. #if 0
  961. IF(IPRINT) THEN
  962. print*, 'AFTER CALL URBAN'
  963. print*,'num_roof_layers',num_roof_layers, 'num_wall_layers', &

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