PageRenderTime 60ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/phys/module_sf_pxlsm.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 1703 lines | 900 code | 218 blank | 585 comment | 8 complexity | f2952415ca981168cd0e25858a38680d 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_pxlsm
  2. USE module_model_constants
  3. USE module_sf_pxlsm_data
  4. INTEGER, PARAMETER :: NSOLD=20
  5. REAL, PARAMETER :: RD = 287.04, CPD = 1004.67, &
  6. CPH2O = 4.218E+3, CPICE = 2.106E+3, &
  7. LSUBF = 3.335E+5, SIGMA = 5.67E-8, &
  8. ROVCP = RD / CPD
  9. REAL, PARAMETER :: CRANKP = 0.5 ! CRANK-NIC PARAMETER
  10. REAL, PARAMETER :: RIC = 0.25 ! critical Richardson number
  11. REAL, PARAMETER :: DENW = 1000.0 ! water density in KG/M3
  12. REAL, PARAMETER :: TAUINV = 1.0 / 86400.0 ! 1/1DAY(SEC)
  13. REAL, PARAMETER :: T2TFAC = 1.0 / 10.0 ! Bottom soil temp response factor
  14. REAL, PARAMETER :: PI = 3.1415926
  15. REAL, PARAMETER :: PR0 = 0.95
  16. REAL, PARAMETER :: CZO = 0.032
  17. REAL, PARAMETER :: OZO = 1.E-4
  18. CONTAINS
  19. !
  20. !-------------------------------------------------------------------------
  21. !-------------------------------------------------------------------------
  22. SUBROUTINE pxlsm(U3D, V3D, DZ8W, QV3D,T3D,TH3D, RHO, &
  23. PSFC, GSW, GLW, RAINBL, EMISS, &
  24. ITIMESTEP, NSOIL, DT, ANAL_INTERVAL, &
  25. XLAND, XICE, ALBBCK, ALBEDO, SNOALB, &
  26. SMOIS, TSLB, MAVAIL, TA2, QA2, &
  27. ZS,DZS, PSIH, &
  28. LANDUSEF,SOILCTOP,SOILCBOT,VEGFRA,VEGF_PX, &
  29. ISLTYP,RA,RS,LAI,NLCAT,NSCAT, &
  30. HFX,QFX,LH,TSK,SST,ZNT,CANWAT, &
  31. GRDFLX,SHDMIN,SHDMAX, &
  32. SNOWC,PBLH,RMOL,UST,CAPG,DTBL, &
  33. T2_NDG_OLD, T2_NDG_NEW, &
  34. Q2_NDG_OLD, Q2_NDG_NEW, &
  35. SN_NDG_OLD, SN_NDG_NEW, SNOW, SNOWH,SNOWNCV,&
  36. T2OBS, Q2OBS, PXLSM_SMOIS_INIT, &
  37. PXLSM_SOIL_NUDGE, &
  38. ids,ide, jds,jde, kds,kde, &
  39. ims,ime, jms,jme, kms,kme, &
  40. its,ite, jts,jte, kts,kte )
  41. !-------------------------------------------------------------------------
  42. ! THIS MODULE CONTAINS THE PLEIM-XIU LAND-SURFACE MODEL (PX-LSM).
  43. ! IT IS DESIGNED TO SIMULATE CHARACTERISTICS OF THE LAND SURFACE AND
  44. ! VEGETATION AND EXCHANGE WITH THE PLANETARY BOUNDARY LAYER (PBL). THE
  45. ! SOIL MOISTURE MODEL IS BASED ON THE ISBA SCHEME DEVELOPED BY NOILHAN
  46. ! AND PLANTON (1989) AND JACQUEMIN AND NOILHAN (1990) AND INCLUDES
  47. ! PROGNOSTIC EQUATIONS FOR SOIL MOISTURE AND SOIL TEMPERATURE IN TWO
  48. ! LAYERS (1 CM AND 1 M) AS WELL AS CANOPY WATER CONTENT. SURFACE
  49. ! MOISTURE FLUXES ARE MODELED BY 3 PATHWAYS: SOIL EVAPORATION, CANOPY
  50. ! EVAPORATION, AND VEGETATIVE EVAPOTRANSPIRRATION.
  51. ! EVAPOTRANSPIRATION DIRECTLY FROM THE ROOT ZONE SOIL LAYER IS MODELED
  52. ! VIA A CANOPY RESISTANCE ANALOG ALGORITHM WHERE STOMATAL CONDUCTANCE
  53. ! IS CONTROLLED BY SOLAR RADIATION, AIR TEMPERATURE, AIR HUMIDITY, AND
  54. ! ROOT ZONE SOIL MOISTURE. REQUIRED VEGETATION CHARACTERISTICS DERIVED
  55. ! FROM THE USGS LANDUSE DATA INCLUDE: LEAF AREA INDEX, FRACTIONAL VEGETATION
  56. ! COVERAGE, ROUGHNESS LENGTH, AND MINIMUM STOMATAL RESISTANCE. AN INDIRECT
  57. ! NUDGING SCHEME ADJUSTS SOIL MOISTURE ACCORDING TO DIFFERENCES BETWEEN
  58. ! MODELED TEMPERATURE AND HUMIDITY AND ANALYSED SURFACE FIELDS.
  59. !
  60. ! References:
  61. ! Pleim and Xiu, 1995: Development and testing of a surface flux and planetary
  62. ! boundary layer model for application in mesoscale models.
  63. ! J. Appl. Meteoro., Vol. 34, 16-32.
  64. ! Xiu and Pleim, 2001: Development of a land surface model. Part I: Application
  65. ! in a mesoscale meteorological model. J. Appl. Meteoro.,
  66. ! Vol. 40, 192-209.
  67. ! Pleim and Xiu, 2003: Development of a land surface model. Part II: Data
  68. ! assimilation. J. Appl. Meteoro., Vol. 42, 1811-1822.
  69. !
  70. ! Pleim and Gilliam, 2009: An Indirect Data Assimilation Scheme for Deep Soil Temperature in the
  71. ! PleimXiu Land Surface Model. J. Appl. Meteor. Climatol., 48, 13621376.
  72. !
  73. ! Gilliam and Pleim, 2010: Performance assessment of new land-surface and planetary boundary layer
  74. ! physics in the WRF-ARW. Journal of Applied Meteorology and Climatology, 49, 760-774.
  75. ! REVISION HISTORY:
  76. ! AX 4/2005 - developed the initial WRF version based on the MM5 PX LSM
  77. ! RG 2/2008 - Completed testing of the intial working version of PX LSM, released in WRFV3.0 early 2008
  78. ! DW 8/2011 - Landuse specific versions of PX (USGS/NLCD/MODIS) were unified into a single code with
  79. ! landuse characteristics defined in module_sf_pxsfclay.F.
  80. ! RG 12/2011 - Basic code clean, removed commented out debug statements, lined up columns, etc.
  81. ! RG 01/2012 - Removed FIRSTIME Logic that computes PX Landuse characteristics at first time step only. This resulted
  82. ! in different solutions when OpenMP was used and would not work with moving domains.
  83. !
  84. !--------------------------------------------------------------------------------------------------------------
  85. !--------------------------------------------------------------------------------------------------------------
  86. ! ARGUMENT LIST:
  87. !
  88. !... Inputs:
  89. !-- U3D 3D u-velocity interpolated to theta points (m/s)
  90. !-- V3D 3D v-velocity interpolated to theta points (m/s)
  91. !-- DZ8W dz between full levels (m)
  92. !-- QV3D 3D mixing ratio
  93. !-- T3D Temperature (K)
  94. !-- TH3D Theta (K)
  95. !-- RHO 3D dry air density (kg/m^3)
  96. !-- PSFC surface pressure (Pa)
  97. !-- GSW downward short wave flux at ground surface (W/m^2)
  98. !-- GLW downward long wave flux at ground surface (W/m^2)
  99. !-- RAINBL Timestep rainfall
  100. !-- EMISS surface emissivity (between 0 and 1)
  101. !-- ITIMESTEP time step number
  102. !-- NSOIL number of soil layers
  103. !-- DT time step (second)
  104. !-- ANAL_INTERVAL Interval of analyses used for soil moisture and temperature nudging
  105. !-- XLAND land mask (1 for land, 2 for water)
  106. !-- XICE Sea ice
  107. !-- ALBBCK Background Albedo
  108. !-- ALBEDO surface albedo with snow cover effects
  109. !-- SNOALB Albedo of snow
  110. !-- SMOIS total soil moisture content (volumetric fraction)
  111. !-- TSLB soil temp (k)
  112. !-- MAVAIL Moisture availibility of soil
  113. !-- TA2 2-m temperature
  114. !-- QA2 2-m mixing ratio
  115. !-- SVPT0 constant for saturation vapor pressure (K)
  116. !-- SVP1 constant for saturation vapor pressure (kPa)
  117. !-- SVP2 constant for saturation vapor pressure (dimensionless)
  118. !-- SVP3 constant for saturation vapor pressure (K)
  119. !-- ZS depths of centers of soil layers
  120. !-- DZS thicknesses of soil layers
  121. !-- PSIH similarity stability function for heat
  122. !-- LANDUSEF Landuse fraction
  123. !-- SOILCTOP Top soil fraction
  124. !-- SOILCBOT Bottom soil fraction
  125. !-- VEGFRA Vegetation fraction
  126. !-- VEGF_PX Veg fraction recomputed and used by PX LSM
  127. !-- ISLTYP Soil type
  128. !-- RA Aerodynamic resistence
  129. !-- RS Stomatal resistence
  130. !-- LAI Leaf area index (weighted according to fractional landuse)
  131. !-- NLCAT Number of landuse categories
  132. !-- NSCAT Number of soil categories
  133. !-- HFX net upward heat flux at the surface (W/m^2)
  134. !-- QFX net upward moisture flux at the surface (kg/m^2/s)
  135. !-- LH net upward latent heat flux at surface (W/m^2)
  136. !-- TSK surface skin temperature (K)
  137. !-- SST sea surface temperature
  138. !-- ZNT rougness length
  139. !-- CANWAT Canopy water (mm)
  140. !-- GRDFLX Ground heat flux
  141. !-- SFCEVP Evaportation from surface
  142. !-- SHDMIN Minimum annual vegetation fraction for each grid cell
  143. !-- SHDMAX Maximum annual vegetation fraction for each grid cell
  144. !-- SNOWC flag indicating snow coverage (1 for snow cover)
  145. !-- PBLH PBL height (m)
  146. !-- RMOL 1/L Reciprocal of Monin-Obukhov length
  147. !-- UST u* in similarity theory (m/s)
  148. !-- CAPG heat capacity for soil (J/K/m^3)
  149. !-- DTBL time step of boundary layer calls
  150. !-- T2_NDG_OLD Analysis temperature prior to current time
  151. !-- T2_NDG_NEW Analysis temperature ahead of current time
  152. !-- Q2_NDG_OLD Analysis mixing ratio prior to current time
  153. !-- Q2_NDG_NEW Analysis mixing ratio ahead of current time
  154. !-- SN_NDG_OLD Analysis snow water prior to current time
  155. !-- SN_NDG_NEW Analysis snow water ahead of current time
  156. !-- SNOW Snow water equivalent
  157. !-- SNOWH Physical snow depth
  158. !-- SNOWNCV Time step accumulated snow
  159. !-- T2OBS Analysis temperature interpolated from prior and next in time analysese
  160. !-- Q2OBS Analysis moisture interpolated from prior and next in time analysese
  161. !-- PXLSM_SMOIS_INIT Flag to intialize deep soil moisture to a value derived from moisture availiability.
  162. !-- PXLSM_SOIL_NUDGE Flag to use soil moisture and temperature nudging in the PX LSM
  163. ! This is typically done for the first simulation.
  164. !-- ids start index for i in domain
  165. !-- ide end index for i in domain
  166. !-- jds start index for j in domain
  167. !-- jde end index for j in domain
  168. !-- kds start index for k in domain
  169. !-- kde end index for k in domain
  170. !-- ims start index for i in memory
  171. !-- ime end index for i in memory
  172. !-- jms start index for j in memory
  173. !-- jme end index for j in memory
  174. !-- kms start index for k in memory
  175. !-- kme end index for k in memory
  176. !-- jts start index for j in tile
  177. !-- jte end index for j in tile
  178. !-- kts start index for k in tile
  179. !-- kte end index for k in tile
  180. !... Outputs:
  181. IMPLICIT NONE
  182. !.......Arguments
  183. ! DECLARATIONS - INTEGER
  184. INTEGER, INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
  185. ims,ime, jms,jme, kms,kme, &
  186. its,ite, jts,jte, kts,kte
  187. INTEGER, INTENT(IN) :: NSOIL, ITIMESTEP, NLCAT, NSCAT, &
  188. ANAL_INTERVAL, PXLSM_SMOIS_INIT, PXLSM_SOIL_NUDGE
  189. REAL, INTENT(IN ) :: DT,DTBL
  190. INTEGER, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ISLTYP
  191. ! DECLARATIONS - REAL
  192. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN) :: U3D, V3D, RHO, &
  193. T3D, TH3D, DZ8W, QV3D
  194. REAL, DIMENSION(1:NSOIL), INTENT(IN)::ZS,DZS
  195. REAL, DIMENSION( ims:ime , 1:NSOIL, jms:jme ), INTENT(INOUT) :: SMOIS, TSLB
  196. REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: RA, RS, LAI, ZNT
  197. REAL, DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: GRDFLX, TSK, TA2, QA2
  198. REAL, DIMENSION( ims:ime , 1:NLCAT, jms:jme ), INTENT(IN):: LANDUSEF
  199. REAL, DIMENSION( ims:ime , 1:NSCAT, jms:jme ), INTENT(IN):: SOILCTOP, SOILCBOT
  200. REAL, DIMENSION( ims:ime, jms:jme ), &
  201. INTENT(IN) :: PSFC, GSW, GLW, RAINBL, &
  202. EMISS, SNOALB, &
  203. ALBBCK, SHDMIN, SHDMAX, &
  204. PBLH, RMOL, SNOWNCV, &
  205. UST, MAVAIL, SST
  206. REAL, DIMENSION( ims:ime, jms:jme ), &
  207. INTENT(IN) :: T2_NDG_OLD, T2_NDG_NEW, &
  208. Q2_NDG_OLD, Q2_NDG_NEW, &
  209. SN_NDG_OLD, SN_NDG_NEW
  210. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: T2OBS, Q2OBS
  211. REAL, DIMENSION( ims:ime, jms:jme ), &
  212. INTENT(INOUT) :: CAPG,CANWAT, QFX, HFX, LH, &
  213. PSIH,VEGFRA, VEGF_PX, SNOW, &
  214. SNOWH, SNOWC, ALBEDO, XLAND, XICE
  215. LOGICAL :: radiation
  216. !-------------------------------------------------------------------------
  217. ! ---------- Local Variables --------------------------------
  218. !---- PARAMETERS
  219. INTEGER, PARAMETER :: NSTPS = 11 ! max. soil types
  220. REAL, PARAMETER :: DTPBLX = 40.0 ! Max PX timestep = 40 sec
  221. !---- INTEGERS
  222. INTEGER, DIMENSION( 1: NSTPS ) :: JP
  223. INTEGER:: J, I, NS, NUDGE, ISTI, WEIGHT
  224. INTEGER:: NTSPS, IT
  225. !---- REALS
  226. REAL, DIMENSION( ims:ime, jms:jme ) :: XLAI, XLAIMN, RSTMIN, &
  227. XVEG, XVEGMN, XSNUP, &
  228. XALB
  229. REAL, DIMENSION( ims:ime, jms:jme ) :: RADNET, EG, ER, ETR, QST
  230. REAL:: SFCPRS,TA1,DENS1,QV1,ZLVL,SOLDN,LWDN, &
  231. EMISSI,PRECIP,THETA1,VAPPRS,QSBT, &
  232. WG,W2,WR,TG,T2,USTAR,MOLX,Z0, &
  233. RAIR,CPAIR,IFLAND,ISNOW, &
  234. ES,QSS,BETAP, &
  235. RH2_OLD, RH2_NEW, T2_OLD, T2_NEW, &
  236. CORE, CORB, TIME_BETWEEN_ANALYSIS, &
  237. G1000, ALN10,RH2OBS, HU, SNOBS, &
  238. FWSAT,FWFC,FWWLT,FB,FCGSAT,FJP,FAS, &
  239. FSEAS, T2I, HC_SNOW, SNOW_FRA,SNOWALB, &
  240. QST12,ZFUNC,ZF1,ZA2,QV2, DT_FDDA,CURTIME, &
  241. FC2R,FC1SAT, DTPBL
  242. CHARACTER (LEN = 5) :: LAND_USE_TYPE
  243. !-------------------------------------------------------------------------
  244. !-------------------------------Executable starts here--------------------
  245. !
  246. ! Determine Landuse Dataset by the number of categories
  247. IF (NLCAT == 50) THEN
  248. LAND_USE_TYPE = 'NLCD'
  249. ELSE IF (NLCAT == 20) THEN
  250. LAND_USE_TYPE = 'MODIS'
  251. ELSE IF (NLCAT == 24) THEN
  252. LAND_USE_TYPE = 'USGS'
  253. ELSE
  254. PRINT *, 'Error: Unknown Land Use Category'
  255. STOP
  256. END IF
  257. ALN10 = ALOG(10.0)
  258. G1000 = g*1.0E-3 ! G/1000
  259. WEIGHT = 0
  260. DT_FDDA = ANAL_INTERVAL * 1.0 ! Convert DT of Analysis to real
  261. !-----------------------------------------------------------------------------------
  262. ! Compute vegetation and land-use characteristics by land-use fraction weighting
  263. ! These parameters include LAI, VEGF, ZNT, ALBEDO, RS, etc.
  264. CALL VEGELAND(LANDUSEF, VEGFRA, SHDMIN, SHDMAX, &
  265. SOILCTOP, SOILCBOT, NLCAT, NSCAT, &
  266. ZNT,XLAI,XLAIMN,RSTMIN,XVEG,XVEGMN,XSNUP, &
  267. XLAND, XALB, &
  268. ids,ide, jds,jde, kds,kde, &
  269. ims,ime, jms,jme, kms,kme, &
  270. its,ite, jts,jte, kts,kte, LAND_USE_TYPE )
  271. !-----------------------------------------------------------------------------------
  272. !--- Compute time relatve to old and new analysis time for timestep interpolation
  273. CURTIME = (ITIMESTEP-1) * DT
  274. TIME_BETWEEN_ANALYSIS = MOD(CURTIME,DT_FDDA)
  275. IF (TIME_BETWEEN_ANALYSIS .EQ. 0.0) THEN
  276. CORB = 1.0
  277. CORE = 0.0
  278. ELSE
  279. CORE = TIME_BETWEEN_ANALYSIS / DT_FDDA
  280. CORB = 1.0 - CORE
  281. ENDIF
  282. !-----------------------------------------------------------------------------------
  283. !-----------------------------------------------------------------------------------
  284. ! Main loop over individual grid cells
  285. DO J = jts,jte !-- J LOOP
  286. DO I = its,ite !-- I LOOP
  287. IFLAND = XLAND(I,J)
  288. ! Compute soil properties via weighting of fractional components
  289. IF (IFLAND .LT. 1.5 ) THEN
  290. !---------------------------------------------------------
  291. CALL SOILPROP (SOILCBOT(I,:,J), WEIGHT, &
  292. ITIMESTEP, MAVAIL(I,J), &
  293. PXLSM_SMOIS_INIT, &
  294. FWSAT,FWFC,FWWLT,FB,FCGSAT, &
  295. FJP,FAS,FC2R,FC1SAT,ISTI,SMOIS(I,2,J) )
  296. !----------------------------------------------------------
  297. ISLTYP(I,J) = ISTI
  298. ELSE
  299. ISLTYP(I,J) = 14 ! STATSGO type for water
  300. ENDIF
  301. !-- Variables Sub. SURFPX needs
  302. SFCPRS = PSFC(i,j) / 1000.0 ! surface pressure in cb
  303. TA1 = T3D(i,1,j) ! air temperature at first layer
  304. DENS1 = RHO(I,1,J) ! air density at first layer
  305. QV1 = QV3D(i,1,j) ! water vapor mixing ratio at first layer
  306. QV2 = QV3D(i,2,j)
  307. ZLVL = 0.5 * DZ8W(i,1,j) ! thickness of lowest half level
  308. ZF1 = DZ8W(i,1,j)
  309. ZA2 = ZF1 + 0.5 * DZ8W(i,2,j)
  310. LWDN = GLW(I,J) ! longwave radiation
  311. EMISSI = EMISS(I,J) ! emissivity
  312. PRECIP = MAX ( 1.0E-3*RAINBL(i,j)/DTBL,0.0) ! accumulated precip. rate during DT (=dtpbl)
  313. ! convert RAINBL from mm to m for PXLSM
  314. WR = 1.0E-3*CANWAT(I,J) ! convert CANWAT from mm to m for PXLSM
  315. THETA1 = TH3D(i,1,j) ! potential temp at first layer
  316. SNOBS = SNOW(I,J) ! Set snow cover to existing model value
  317. ! this is overwritten below if snow analysis is availiable
  318. ! otherwise snow cover remains constant through simulation
  319. IF(PXLSM_SOIL_NUDGE .EQ. 1) THEN
  320. !-- 2 m Temp and RH for Nudging
  321. T2_OLD = T2_NDG_OLD(I,J)
  322. T2_NEW = T2_NDG_NEW(I,J)
  323. VAPPRS = SVP1 * EXP(SVP2 * (T2_OLD - SVPT0) / ( T2_OLD - SVP3))
  324. QSBT = EP_2 * VAPPRS / (SFCPRS - VAPPRS)
  325. RH2_OLD = Q2_NDG_OLD(I,J) / QSBT
  326. VAPPRS = SVP1 * EXP(SVP2 * (T2_NEW - SVPT0) / (T2_NEW - SVP3))
  327. QSBT = EP_2 * VAPPRS / (SFCPRS - VAPPRS)
  328. RH2_NEW = Q2_NDG_NEW(I,J) / QSBT
  329. RH2OBS = CORB * RH2_OLD + CORE * RH2_NEW
  330. T2OBS(I,J) = CORB * T2_OLD + CORE * T2_NEW
  331. Q2OBS(I,J) = CORB * Q2_NDG_OLD(I,J) + CORE * Q2_NDG_NEW(I,J)
  332. SNOBS = CORB * SN_NDG_OLD(I,J) + CORE * SN_NDG_NEW(I,J)
  333. ENDIF
  334. USTAR = MAX(UST(I,J),0.005)
  335. IF (IFLAND .GT. 1.5) THEN ! if over water
  336. ZNT(I,J) = CZO * UST(I,J) * UST(I,J) / G + OZO
  337. ENDIF
  338. Z0 = ZNT(I,J)
  339. CPAIR = CPD * (1.0 + 0.84 * QV1) ! J/(K KG)
  340. !-------------------------------------------------------------
  341. ! Compute fractional snow area and snow albedo
  342. CALL PXSNOW (ITIMESTEP, SNOBS, SNOWNCV(I,J), SNOW(I,J), &
  343. SNOWH(I,J), XSNUP(I,J), XALB(i,j), &
  344. SNOALB(I,J),VEGF_PX(I,J), SHDMIN(I,J), &
  345. HC_SNOW, SNOW_FRA, SNOWC(I,J), ALBEDO(I,J) )
  346. !-------------------------------------------------------------
  347. !-------------------------------------------------------------
  348. ! Sea Ice from analysis and water cells that are very cold, but more than 50% water
  349. ! are converted to ice/snow for more reasonable treatment.
  350. IF( (XICE(I,J).GE.0.5) .OR. &
  351. (SST(I,J).LE.270.0.AND.XLAND(I,J).GT.1.50) ) THEN
  352. XLAND(I,J) = 1.0
  353. IFLAND = 1.0
  354. ZNT(I,J) = 0.001 ! Ice
  355. SMOIS(I,1,J) = 1.0 ! FWSAT
  356. SMOIS(I,2,J) = 1.0 ! FWSAT
  357. XICE(I,J) = 1.0
  358. ALBEDO(I,J) = 0.7
  359. SNOWC(I,J) = 1.0
  360. SNOW_FRA = 1.0
  361. VEGF_PX(I,J) = 0.0
  362. LAI(I,J) = 0.0
  363. ENDIF
  364. !-------------------------------------------------------------
  365. !-------------------------------------------------------------
  366. !-- Note that when IFGROW = 0 is selected in Vegeland then max and min
  367. !-- LAI and Veg are the same
  368. T2I = TSLB(I,2,J)
  369. ! FSEAS = AMAX1(1.0 - 0.0016 * (298.0 - T2I) ** 2,0.0) ! BATS
  370. FSEAS = AMAX1(1.0 - 0.015625 * (290.0 - T2I) ** 2,0.0) ! JP97
  371. IF (T2I .GE. 290.0) FSEAS = 1.0
  372. LAI(I,J) = XLAIMN(I,J) + FSEAS*(XLAI(I,J) - XLAIMN(I,J))
  373. VEGF_PX(I,J) = XVEGMN(I,J) + FSEAS*(XVEG(I,J) - XVEGMN(I,J))
  374. ! Ensure veg algorithms not used for water
  375. IF (IFLAND .GT. 1.5) THEN
  376. VEGF_PX(I,J) = 0.0
  377. ENDIF
  378. !-------------------------------------------------------------
  379. SOLDN = GSW(I,J) / (1.0 - ALBEDO(I,J)) ! downward shortwave radiaton
  380. ISNOW = SNOWC(I,J)
  381. NUDGE=PXLSM_SOIL_NUDGE
  382. IF ( J .LE. 2 .OR. J .GE. (jde-1) ) NUDGE=0
  383. IF ( I .LE. 2 .OR. I .GE. (ide-1) ) NUDGE=0
  384. IF ( RMOL(I,J) .GT. 0.0 ) THEN
  385. MOLX = AMIN1(1/RMOL(I,J),1000.0)
  386. ELSE IF ( RMOL(I,J) .LT. 0.0 ) THEN
  387. MOLX = AMAX1(1/RMOL(I,J),-1000.0)
  388. ELSE
  389. MOLX = 1000
  390. ENDIF
  391. ZFUNC = ZF1 * (1.0 - ZF1 / MAX(100.,PBLH(I,J))) ** 2
  392. QST12 = KARMAN * ZFUNC*(QV2-QV1) / (ZA2-ZLVL)
  393. !--- LSM sub-time loop too prevent dt > 40 sec
  394. NTSPS = INT(DT / (DTPBLX + 0.000001) + 1.0)
  395. DTPBL = DT / NTSPS
  396. DO IT=1,NTSPS
  397. !... SATURATION VAPOR PRESSURE (MB)
  398. IF ( TSLB(I,1,J) .LE. SVPT0 ) THEN ! For ground that is below freezing
  399. ES = SVP1 * EXP(22.514 - 6.15E3 / TSLB(I,1,J)) ! cb
  400. ELSE
  401. ES = SVP1 * EXP(SVP2 * (TSLB(I,1,J) - SVPT0) / (TSLB(I,1,J) - SVP3))
  402. ENDIF
  403. QSS = ES * 0.622 / (SFCPRS - ES)
  404. !... beta method, Lee & Pielke (JAM,May1992)
  405. BETAP = 1.0
  406. IF (IFLAND .LT. 1.5 .AND. ISNOW .LT. 0.5 .AND. SMOIS(I,1,J) .LE. FWFC) THEN
  407. BETAP = 0.25 * (1.0 - COS(SMOIS(I,1,J) / FWFC * PI)) ** 2
  408. ENDIF
  409. !-------------------------------------------------------------------------
  410. CALL SURFPX (DTPBL, IFLAND, SNOWC(I,J), NUDGE, XICE(I,J), & !in
  411. SOLDN, GSW(I,J), LWDN, EMISSI, ZLVL, & !in
  412. MOLX, Z0, USTAR, & !in
  413. SFCPRS, DENS1, QV1, QSS, TA1, & !in
  414. THETA1, PRECIP, & !in
  415. CPAIR, PSIH(I,J), & !in
  416. RH2OBS,T2OBS(I,J), & !in
  417. VEGF_PX(I,J), ISTI, LAI(I,J), BETAP, & !in
  418. RSTMIN(I,J), HC_SNOW, SNOW_FRA, & !in
  419. FWWLT, FWFC, FCGSAT, FWSAT, FB, & !in
  420. FC1SAT,FC2R,FAS,FJP,DZS(1),DZS(2),QST12, & !in
  421. RADNET(I,J), GRDFLX(I,J), HFX(I,J), QFX(I,J), LH(I,J), & !out
  422. EG(I,J), ER(I,J), ETR(I,J), & !out
  423. QST(I,J), CAPG(I,J), RS(I,J), RA(I,J), & !out
  424. TSLB(I,1,J), TSLB(I,2,J), & !out
  425. SMOIS(I,1,J), SMOIS(I,2,J), WR, TA2(I,J), QA2(I,J), &
  426. LAND_USE_TYPE )
  427. !-------------------------------------------------------------------------
  428. END DO ! Time internal PX time loop
  429. TSK(I,J) = TSLB(I,1,J) ! Skin temp set to 1 cm soil temperature in PX for now
  430. CANWAT(I,J) = WR * 1000. ! convert WR back to mm for CANWAT
  431. ENDDO ! END MIAN I LOOP
  432. ENDDO ! END MAIN J LOOP
  433. !------------------------------------------------------
  434. END SUBROUTINE pxlsm
  435. !-------------------------------------------------------------------------
  436. !-------------------------------------------------------------------------
  437. !-------------------------------------------------------------------------
  438. !-------------------------------------------------------------------------
  439. SUBROUTINE VEGELAND( landusef, vegfra, &
  440. shdmin, shdmax, &
  441. soilctop, soilcbot, nlcat, nscat, &
  442. znt, xlai, xlaimn, rstmin, xveg, xvegmn, &
  443. xsnup, xland, xalb, &
  444. ids,ide, jds,jde, kds,kde, &
  445. ims,ime, jms,jme, kms,kme, &
  446. its,ite, jts,jte, kts,kte, &
  447. LAND_USE_TYPE )
  448. !-------------------------------------------------------------------------
  449. !
  450. ! CALLED FROM Sub. bl_init in module_physics.init.F
  451. !
  452. ! THIS PROGRAM PROCESSES THE USGS LANDUSE DATA
  453. ! WHICH HAS BEEN GRIDDED BY THE WPS SYSTEM
  454. ! AND PRODUCES 2-D FIELDS OF LU RELATED PARAMETERS
  455. ! FOR USE IN THE PX SURFACE MODEL
  456. !
  457. !
  458. ! REVISION HISTORY:
  459. ! AX Oct 2004 - developed WRF version based on VEGELAND in the MM5 PX LSM
  460. ! RG Dec 2006 - revised for WRFV2.1.2
  461. ! JP Dec 2007 - revised for WRFV3 - removed IFGROW options
  462. !-------------------------------------------------------------------------
  463. !-------------------------------------------------------------------------
  464. IMPLICIT NONE
  465. !...
  466. INTEGER, INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
  467. ims,ime, jms,jme, kms,kme, &
  468. its,ite, jts,jte, kts,kte
  469. INTEGER , INTENT(IN) :: NSCAT, NLCAT
  470. REAL, DIMENSION( ims:ime , 1:NLCAT, jms:jme ), INTENT(IN) :: LANDUSEF
  471. REAL, DIMENSION( ims:ime , 1:NSCAT, jms:jme ), INTENT(IN) :: SOILCTOP, SOILCBOT
  472. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: VEGFRA, SHDMIN, SHDMAX
  473. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ZNT
  474. REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: XLAI, XLAIMN, RSTMIN, XALB, &
  475. XVEG, XVEGMN, XSNUP, XLAND
  476. CHARACTER (LEN = 5), INTENT(IN) :: LAND_USE_TYPE
  477. !... local variables
  478. INTEGER :: itf, jtf, k, j, i
  479. REAL :: SUMLAI, SUMLMN, SUMRSI, SUMLZ0, SUMVEG, SUMVMN, ALAI, VEGF, SUMSNUP
  480. REAL :: VFMX, VFMN, VSEAS, FAREA, FWAT, ZNOTC, SUMALB
  481. REAL, DIMENSION( NLCAT ) :: LAIMX, LAIMN, Z0, VEG, VEGMN, SNUP
  482. REAL, PARAMETER :: ZNOTCMN = 5.0 ! CM, MIN Zo FOR CROPS
  483. REAL, PARAMETER :: ZNOTCMX = 15.0 ! CM, MAX Zo FOR CROPS
  484. REAL, SAVE, DIMENSION(:), POINTER :: RSMIN, Z00, VEG0, VEGMN0, LAI0, LAIMN0, SNUP0, ALBF
  485. !---- INITIALIZE PARAMETERS
  486. INTEGER, SAVE :: KWAT
  487. INTEGER, SAVE :: LIMIT1, LIMIT2
  488. ! Initialize LU characteristics by LU Dataset
  489. IF (LAND_USE_TYPE == 'USGS') THEN
  490. KWAT = 16
  491. RSMIN => RSMIN_USGS
  492. Z00 => Z00_USGS
  493. VEG0 => VEG0_USGS
  494. VEGMN0 => VEGMN0_USGS
  495. LAI0 => LAI0_USGS
  496. LAIMN0 => LAIMN0_USGS
  497. SNUP0 => SNUP0_USGS
  498. ALBF => ALBF_USGS
  499. LIMIT1 = 2
  500. LIMIT1 = 6
  501. ELSE IF (LAND_USE_TYPE == 'NLCD') THEN
  502. KWAT = 1
  503. RSMIN => RSMIN_NLCD
  504. Z00 => Z00_NLCD
  505. VEG0 => VEG0_NLCD
  506. VEGMN0 => VEGMN0_NLCD
  507. LAI0 => LAI0_NLCD
  508. LAIMN0 => LAIMN0_NLCD
  509. SNUP0 => SNUP0_NLCD
  510. ALBF => ALBF_NLCD
  511. LIMIT1 = 20
  512. LIMIT1 = 43
  513. ELSE IF (LAND_USE_TYPE == 'MODIS') THEN
  514. KWAT = 17
  515. RSMIN => RSMIN_MODIS
  516. Z00 => Z00_MODIS
  517. VEG0 => VEG0_MODIS
  518. VEGMN0 => VEGMN0_MODIS
  519. LAI0 => LAI0_MODIS
  520. LAIMN0 => LAIMN0_MODIS
  521. SNUP0 => SNUP0_MODIS
  522. ALBF => ALBF_MODIS
  523. LIMIT1 = 12
  524. LIMIT1 = 14
  525. END IF
  526. !--------------------------------------------------------------------
  527. DO J = jts,jte
  528. DO I = its,ite
  529. XLAI(I,J) = 0.0
  530. XLAIMN(I,J) = 0.0
  531. RSTMIN(I,J) = 9999.0
  532. XVEG(I,J) = 0.0
  533. XVEGMN(I,J) = 0.0
  534. XSNUP(I,J) = 0.0
  535. XALB(I,J) = 0.0
  536. ENDDO ! END LOOP THROUGH GRID CELLS
  537. ENDDO ! END LOOP THROUGH GRID CELLS
  538. !--------------------------------------------------------------------
  539. DO J = jts,jte
  540. DO I = its,ite
  541. !-- Initialize 2 and 3-D veg parameters to be caculated
  542. DO K=1,NLCAT
  543. LAIMX(K) = LAI0(K)
  544. LAIMN(K) = LAIMN0(K)
  545. Z0(K) = Z00(K)
  546. VEG(K) = VEG0(K)
  547. VEGMN(K) = VEGMN0(K)
  548. SNUP(K) = SNUP0(K)
  549. ENDDO
  550. !-- INITIALIZE SUMS
  551. SUMLAI = 0.0
  552. SUMLMN = 0.0
  553. SUMRSI = 0.0
  554. SUMLZ0 = 0.0
  555. SUMVEG = 0.0
  556. SUMVMN = 0.0
  557. ALAI = 0.0
  558. SUMSNUP= 0.0
  559. SUMALB = 0.0
  560. !-- ESTIMATE CROP EMERGANCE DATE FROM VEGFRAC
  561. VFMX = SHDMAX(I,J)
  562. VFMN = SHDMIN(I,J)
  563. VEGF = VEGFRA(I,J)
  564. !-- Computations for VEGETATION CELLS ONLY
  565. IF(VFMX.GT.0.0.AND.LANDUSEF(I,KWAT,J).LT.1.00) THEN
  566. VSEAS = VEGF/VFMX
  567. IF(VSEAS.GT.1.0.OR.VSEAS.LT.0.0) THEN
  568. VSEAS = MIN(VSEAS,1.0)
  569. VSEAS = MAX(VSEAS,0.0)
  570. ENDIF
  571. ZNOTC = ZNOTCMN * (1-VSEAS) + ZNOTCMX * VSEAS ! Zo FOR CROPS
  572. DO K = 1, NLCAT
  573. IF (LAND_USE_TYPE == 'MODIS') THEN
  574. !-- USE THE VEGFRAC DATA ONLY FOR CROPS
  575. IF (K.EQ.12 .OR. K.EQ.14) THEN
  576. LAIMX(K) = LAIMN0(K) * (1-VSEAS) + LAI0(K) * VSEAS
  577. LAIMN(K) = LAIMX(K)
  578. VEG(K) = VEGMN0(K) * (1-VSEAS) + VEG0(K) * VSEAS
  579. VEGMN(K) = VEG(K)
  580. !-- SEASONALLY VARY Zo FOR MODIS DryCrop (k=12)
  581. IF (K .EQ. 12) THEN
  582. Z0(K) = ZNOTC
  583. !-- CrGrM (k=14) USE AVG WITH GRASS AND FOREST
  584. ELSE IF (K .EQ.14) THEN
  585. Z0(K) = 0.5 * (ZNOTC + Z00(K))
  586. ENDIF
  587. ENDIF
  588. ELSE IF (LAND_USE_TYPE == 'NLCD') THEN
  589. !-- USE THE VEGFRAC DATA ONLY FOR CROPS
  590. IF (K.EQ.20 .OR. K.EQ.43 .OR. K.EQ.45) THEN
  591. LAIMX(K) = LAIMN0(K) * (1-VSEAS) + LAI0(K) * VSEAS
  592. LAIMN(K) = LAIMX(K)
  593. VEG(K) = VEGMN0(K) * (1-VSEAS) + VEG0(K) * VSEAS
  594. VEGMN(K) = VEG(K)
  595. !-- SEASONALLY VARY Zo FOR DryCrop (k=20) OR Irigated Crop (k=43) OR Mix Crop (k=4)
  596. IF (K.EQ.20 .OR. K.EQ.43) THEN
  597. Z0(K) = ZNOTC
  598. !-- CrNatM (k=45) USE AVG WITH GRASS AND FOREST
  599. ELSE IF (K.EQ.45) THEN
  600. Z0(K) = 0.5 * (ZNOTC + Z00(K))
  601. ENDIF
  602. ENDIF
  603. ELSE IF (LAND_USE_TYPE == 'USGS') THEN
  604. !-- USE THE VEGFRAC DATA ONLY FOR CROPS
  605. IF (K .GE. 2 .AND. K .LE. 6) THEN
  606. LAIMX(K) = LAIMN0(K) * (1-VSEAS) + LAI0(K) * VSEAS
  607. LAIMN(K) = LAIMX(K)
  608. VEG(K) = VEGMN0(K) * (1-VSEAS) + VEG0(K) * VSEAS
  609. VEGMN(K) = VEG(K)
  610. !-- SEASONALLY VARY Zo FOR DryCrop (k=2) OR Irigated Crop (k=3) OR Mix Crop (k=4)
  611. IF (K .GE. 2 .AND. K .LE. 4) THEN
  612. Z0(K) = ZNOTC
  613. !-- CrGrM (k=5) or CrWdM (k=6) USE AVG WITH GRASS AND FOREST
  614. ELSE IF (K .GE.5 .AND. K .LE. 6) THEN
  615. Z0(K) = 0.5 * (ZNOTC + Z00(K))
  616. ENDIF
  617. ENDIF
  618. END IF
  619. ENDDO
  620. ENDIF !-- IF cell is vegetation
  621. !-------------------------------------
  622. !-- LOOP THROUGH LANDUSE Fraction and compute totals
  623. DO K = 1, NLCAT
  624. FAREA = LANDUSEF(I,K,J)
  625. SUMLAI = SUMLAI + LAIMX(K) * FAREA
  626. SUMLMN = SUMLMN + LAIMN(K) * FAREA
  627. ALAI = ALAI + FAREA
  628. SUMRSI = SUMRSI + FAREA * LAIMX(K) / RSMIN(K)
  629. SUMLZ0 = SUMLZ0 + FAREA * ALOG(Z0(K))
  630. SUMVEG = SUMVEG + FAREA * VEG(K)
  631. SUMVMN = SUMVMN + FAREA * VEGMN(K)
  632. SUMSNUP= SUMSNUP+ FAREA * SNUP(K)
  633. SUMALB = SUMALB + FAREA * ALBF(K)
  634. ENDDO
  635. !-- CHECK FOR WATER
  636. FWAT = LANDUSEF(I,KWAT,J)
  637. IF (FWAT .GT. 0.999) THEN
  638. XLAI(I,J) = LAIMX(KWAT)
  639. XLAIMN(I,J) = LAIMN(KWAT)
  640. RSTMIN(I,J) = RSMIN(KWAT)
  641. ZNT(I,J) = Z0(KWAT)
  642. XVEG(I,J) = VEG(KWAT)
  643. XVEGMN(I,J) = VEGMN(KWAT)
  644. XSNUP(I,J) = SNUP(KWAT)
  645. XALB(I,J) = ALBF(KWAT)
  646. ELSE
  647. IF (FWAT .GT. 0.10) THEN
  648. ALAI = ALAI - FWAT
  649. SUMLZ0 = SUMLZ0 - FWAT * ALOG(Z0(KWAT))
  650. ENDIF
  651. XLAI(I,J) = SUMLAI / ALAI
  652. XLAIMN(I,J) = SUMLMN / ALAI
  653. RSTMIN(I,J) = SUMLAI / SUMRSI
  654. ZNT(I,J) = EXP(SUMLZ0/ALAI)
  655. XVEG(I,J) = SUMVEG / ALAI
  656. XVEGMN(I,J) = SUMVMN / ALAI
  657. XSNUP(I,J) = SUMSNUP/ALAI
  658. XALB(I,J) = SUMALB/ALAI
  659. ENDIF
  660. IF (FWAT .GT. 0.50) THEN
  661. ZNT(I,J) = Z0(KWAT)
  662. XALB(I,J)= ALBF(KWAT)
  663. ENDIF
  664. ZNT(I,J) = ZNT(I,J) * 0.01 !CONVERT TO M
  665. XVEG(I,J) = XVEG(I,J) * 0.01 !CONVERT TO FRAC
  666. XVEGMN(I,J) = XVEGMN(I,J) * 0.01
  667. XLAND(I,J) = 1.0 + FWAT
  668. XALB(I,J) = XALB(I,J) * 0.01
  669. ENDDO ! END LOOP THROUGH GRID CELLS
  670. ENDDO ! END LOOP THROUGH GRID CELLS
  671. !--------------------------------------------------------------------
  672. END SUBROUTINE vegeland
  673. !------------------------------------------------------------------------------
  674. !------------------------------------------------------------------------------
  675. SUBROUTINE SURFPX(DTPBL, IFLAND, ISNOW, NUDGEX, XICE1, & !in
  676. SOLDN, GSW, LWDN, EMISSI, Z1, & !in
  677. MOL, ZNT, UST, & !in
  678. PSURF, DENS1, QV1, QSS, TA1, & !in
  679. THETA1, PRECIP, & !in
  680. CPAIR, PSIH, & !in
  681. RH2OBS, T2OBS, & !in
  682. VEGFRC, ISTI, LAI, BETAP, & !in
  683. RSTMIN, HC_SNOW, SNOW_FRA, & !in
  684. WWLT, WFC, CGSAT, WSAT, B, & !in
  685. C1SAT, C2R, AS, JP, DS1, DS2,QST12, & !in
  686. RADNET, GRDFLX, HFX, QFX, LH, EG, ER, ETR, & !out
  687. QST, CAPG, RS, RA, TG, T2, & !out
  688. WG, W2, WR, TA2, QA2, LAND_USE_TYPE ) !out
  689. !------------------------------------------------------------------------------
  690. !
  691. ! FUNCTION:
  692. ! THIS SUBROUTINE COMPUTES SOIL MOISTURE AND TEMPERATURE TENDENCIES
  693. ! BY SOLVING THE PROGNOSTIC EQUATIONS IN PX95.
  694. !
  695. ! SUBROUTINES CALLED:
  696. ! SUB. QFLUX compute the soil and canopy evaporation, and transpiration
  697. ! SUB. SMASS compute nudging coefficients for soil moisture and temp nudging
  698. !
  699. ! ARGUMENTS:
  700. ! DTPBL: TIME STEP OF THE MINOR LOOP FOR THE LAND-SURFACE/PBL MODEL
  701. ! IFLAND: INDEX WHICH INDICATES THE TYPE OF SURFACE,=1,LAND;=2,SEA
  702. ! ISNOW: SNOW (=1) OR NOT (=0)
  703. ! NUDGE: SWITCH FOR SOIL MOISTURE NUDGING
  704. ! SOLDN: SHORT-WAVE RADIATION
  705. ! LWDN: LONG-WAVE RADIATION
  706. ! EMISSI: EMISSIVITY
  707. ! Z1: HEIGHT OF THE LOWEST HALF LAYER
  708. ! MOL: MONIN-OBUKOV LENGH (M)
  709. ! ZNT: ROUGHNESS LENGTH (M)
  710. ! UST: FRICTION VELOCITY (M/S)
  711. ! TST: Turbulent moisture scale
  712. ! RA: AERODYNAMIC RESISTENCE
  713. ! PSURF: P AT SURFACE (CB)
  714. ! DENS1: AIR DENSITY AT THE FIRST HALF LAYER
  715. ! QV1: Air humidity at first half layer
  716. ! QSS: Saturation mixing ratio at ground
  717. ! TA1: Air temperature at first half layer
  718. ! THETA1: Potential temperature at first half layer
  719. ! PRECIP: Precipitation rate in m/s
  720. ! STBOLT: STEFAN BOLTZMANN'S CONSTANT
  721. ! KARMAN: VON KARMAN CONSTANT
  722. ! CPAIR: Specific heat of moist air (M^2 S^-2 K^-1)
  723. ! TAUINV: 1/1DAY(SEC)
  724. ! VEGFRC: Vegetation coverage
  725. ! ISTI: soil type
  726. ! LAI: Leaf area index
  727. ! BETAP: Coefficient for bare soil evaporation
  728. ! THZ1OB: Observed TEMP FROM ANAL OF OBS TEMPS AT SCREEN HT
  729. ! RHOBS: Observed relative humidity at SCREEN HT
  730. ! RSTMIN Minimum Stomatol resistence
  731. !... Outputs from SURFPX
  732. ! RADNET: Net radiation
  733. ! HFX: SENSIBLE HEAT FLUX (W / M^2)
  734. ! QFX: TOTAL EVAP FLUX (KG / M^2 S)
  735. ! GRDFLX: Ground heat flux (W / M^2)
  736. ! QST: Turbulent moisture scale
  737. ! CAPG: THERMAL CAPACITY OF GROUND SLAB (J/M^2/K)
  738. ! RS: Surface resistence
  739. ! RA: Surface aerodynamic resistence
  740. ! EG: evaporation from ground (bare soil)
  741. ! ER: evaporation from canopy
  742. ! ETR: transpiration from vegetation
  743. ! TA2: diagnostic 2-m temperature from surface layer and lsm
  744. !
  745. !... Updated variables in this subroutine
  746. ! TG: Soil temperature at first soil layer
  747. ! T2: Soil temperature in root zone
  748. ! WG: Soil moisture at first soil layer
  749. ! W2: Soil moisture at root zone
  750. ! WR: Canopy water content in m
  751. !
  752. ! REVISION HISTORY:
  753. ! AX 2/2005 - developed WRF version based on the MM5 PX LSM
  754. !
  755. !------------------------------------------------------------------------------
  756. !------------------------------------------------------------------------------
  757. IMPLICIT NONE
  758. !.......Arguments
  759. !.. Integer
  760. INTEGER , INTENT(IN) :: ISTI, NUDGEX
  761. !... Real
  762. REAL , INTENT(IN) :: DTPBL, DS1, DS2
  763. REAL , INTENT(IN) :: IFLAND, ISNOW, XICE1
  764. REAL , INTENT(IN) :: SOLDN, GSW, LWDN, EMISSI, Z1
  765. REAL , INTENT(IN) :: ZNT
  766. REAL , INTENT(IN) :: PSURF, DENS1, QV1, QSS, TA1, THETA1, PRECIP
  767. REAL , INTENT(IN) :: CPAIR
  768. REAL , INTENT(IN) :: VEGFRC, LAI
  769. REAL , INTENT(IN) :: RSTMIN, HC_SNOW, SNOW_FRA
  770. REAL , INTENT(IN) :: WWLT, WFC, CGSAT, WSAT, B, C1SAT, C2R, AS, JP
  771. REAL , INTENT(IN) :: RH2OBS,T2OBS
  772. REAL , INTENT(IN) :: QST12
  773. REAL , INTENT(OUT) :: RADNET, EG, ER, ETR
  774. REAL , INTENT(OUT) :: QST, CAPG, RS, TA2, QA2
  775. REAL , INTENT(INOUT) :: TG, T2, WG, W2, WR, UST, RA, BETAP
  776. REAL , INTENT(INOUT) :: GRDFLX, QFX, HFX, LH, PSIH, MOL
  777. CHARACTER (LEN = 5), INTENT(IN) :: LAND_USE_TYPE
  778. !... Local Variables
  779. !... Real
  780. REAL :: HF, LV, CQ4
  781. REAL :: RAH, RAW, ET, W2CG, CG, CT, SOILFLX, CPOT, THETAG
  782. REAL :: ZOL, ZOBOL, ZNTOL, Y, Y0, PSIH15, YNT
  783. REAL :: WGNUDG, W2NUDG, ALPH1, ALPH2, BET1, BET2, T1P5
  784. REAL :: CQ1, CQ2, CQ3, COEFFNP1, COEFFN, TSNEW, TSHLF, T2NEW
  785. REAL :: ROFF, WRMAX, PC, DWR, PNET, TENDWR, WRNEW
  786. REAL :: COF1, CFNP1WR, CFNWR, PG, FASS
  787. REAL :: TENDW2, W2NEW, W2HLF, W2REL, C1, C2, WEQ, CFNP1, CFN, WGNEW
  788. REAL :: ALN10, TMP1, TMP2, TMP3, AA, AB, TST, RBH, CTVEG
  789. REAL :: QST1,PHIH,PSIOB
  790. REAL :: T2NUD, T2NUDF
  791. REAL :: VAPPRS, QSBT, RH2MOD
  792. !... Parameters
  793. REAL :: ZOBS, GAMAH, BETAH, SIGF, BH, CT_SNOW
  794. REAL, PARAMETER :: CV = 8.0E-6 ! K-M2/J
  795. PARAMETER (ZOBS = 1.5) ! height for observed screen temp., (m)
  796. PARAMETER (BH = 15.7)
  797. PARAMETER (GAMAH = 16. ) !11.6)
  798. PARAMETER (BETAH = 5.0 ) !8.21)
  799. PARAMETER (SIGF = 0.5) ! rain interception see LSM (can be 0-1)
  800. !PARAMETER (CT_SNOW = 5.54E-5)
  801. ! New value of CT_SNOW calibrated using multilayer soil model where csnow=6.9E5 J/(m3 K)
  802. ! from NCAR CSM
  803. PARAMETER (CT_SNOW = 2.0E-5)
  804. ALN10 = ALOG(10.0)
  805. RADNET = SOLDN - (EMISSI *(STBOLT *TG **4 - LWDN)) ! NET RADIATION
  806. !--------------------------------------------------------------------
  807. CPOT= (100.0 / PSURF) ** ROVCP ! rcp is global constant(module_model_constants)
  808. THETAG = TG * CPOT
  809. ZOL = Z1/MOL
  810. ZOBOL = ZOBS/MOL
  811. ZNTOL = ZNT/MOL
  812. !-----------------------------------------------------------------------------------------
  813. IF (MOL .LT. 0.0) THEN
  814. Y = ( 1.0 - GAMAH * ZOL ) ** 0.5
  815. Y0 = ( 1.0 - GAMAH * ZOBOL ) ** 0.5
  816. YNT = ( 1.0 - GAMAH * ZNTOL ) ** 0.5
  817. PSIH15 = 2.0 * ALOG((Y + 1.0) / (Y0 + 1.0))
  818. PSIH = 2.0 * ALOG((Y + 1.0) / (YNT + 1.0))
  819. PSIOB = 2.0 * ALOG((Y0 + 1.0) / (YNT + 1.0))
  820. PHIH = 1.0 / Y
  821. ELSE
  822. IF((ZOL-ZNTOL).LE.1.0) THEN
  823. PSIH = -BETAH*(ZOL-ZNTOL)
  824. ELSE
  825. PSIH = 1.-BETAH-(ZOL-ZNTOL)
  826. ENDIF
  827. IF ((ZOBOL - ZNTOL) .LE. 1.0) THEN
  828. PSIOB = -BETAH * (ZOBOL - ZNTOL)
  829. ELSE
  830. PSIOB = 1.0 - BETAH - (ZOBOL - ZNTOL)
  831. ENDIF
  832. PSIH15 = PSIH - PSIOB
  833. IF(ZOL.LE.1.0) THEN
  834. PHIH = 1.0 + BETAH * ZOL
  835. ELSE
  836. PHIH = BETAH + ZOL
  837. ENDIF
  838. ENDIF
  839. !-----------------------------------------------------------------------------------------
  840. !-- ADD RA AND RB FOR HEAT AND MOISTURE
  841. !... RB FOR HEAT = 5 /UST
  842. !... RB FOR WATER VAPOR = 5*(0.599/0.709)^2/3 /UST = 4.503/UST
  843. RA=PR0* ( ALOG(Z1/ZNT) - PSIH )/(KARMAN*UST)
  844. RAH = RA + 5.0 / UST
  845. RAW = RA + 4.503 / UST
  846. !--------------------------------------------------------------------
  847. !-- COMPUTE MOISTURE FLUX
  848. CALL QFLUX( DENS1, QV1, TA1, SOLDN, RAW, QSS, &
  849. VEGFRC, ISNOW, ISTI, IFLAND, LAI, BETAP, &
  850. WG, W2, WR, &
  851. RSTMIN, WWLT, WFC, &
  852. EG, ER, ETR, CQ4, RS, FASS)
  853. !--------------------------------------------------------------------
  854. !--------------------------------------------------------------------
  855. !..........Total evaporation (ET)
  856. ET = EG + ER + ETR
  857. QST = -ET / (DENS1 * UST)
  858. LV = 2.83E6 !-- LATENT HEAT OF SUBLIMATION AT 0C FROM STULL(1988)
  859. IF (ISNOW .LT. 0.5.AND.TG.GT.273.15) &
  860. LV = (2.501 - 0.00237 * (TG - 273.15)) * 1.E6 !-- FROM STULL(1988) in J/KG
  861. IF (IFLAND .LT. 1.5 ) QFX = ET !-- Recaculate QFX over land to account for P-X LSM EG, ER and ETR
  862. LH = LV * QFX
  863. !-----------------------------------------------------------------------------------------
  864. !-----------------------------------------------------------------------------------------
  865. ! Surface sensible heat flux
  866. TST = (THETA1 - THETAG ) / (UST*RAH)
  867. HF = UST * TST
  868. HFX = AMAX1(-DENS1 * CPAIR * HF, -250.0) ! using -250. from MM5
  869. !-----------------------------------------------------------------------------------------
  870. !-----------------------------------------------------------------------------------------
  871. ! Compute the diagnosed 2m Q and T consistent with PX LSM
  872. QST1 = 0.5*(QST+QST12/PHIH)
  873. TA2 = (THETAG + TST * (PR0 / KARMAN * (ALOG(ZOBS / ZNT) - PSIOB)+5.))/CPOT
  874. QA2 = QV1 - QST1 * PR0/ KARMAN * (ALOG(Z1 / ZOBS) - PSIH15)
  875. IF ((LAND_USE_TYPE == 'NLCD') .OR. (LAND_USE_TYPE == 'USGS')) THEN
  876. IF (QA2.LE.0.0) QA2 = QV1
  877. END IF
  878. !-- Relative humidity
  879. VAPPRS = SVP1 * EXP(SVP2 * (TA2 - SVPT0) / (TA2 - SVP3))
  880. QSBT = EP_2 * VAPPRS / (PSURF - VAPPRS)
  881. RH2MOD = QA2 / QSBT
  882. !-----------------------------------------------------------------------------------------
  883. IF (IFLAND .LT. 1.5 ) THEN
  884. W2CG = AMAX1(W2,WWLT)
  885. CG = CGSAT * 1.0E-6 * (WSAT/ W2CG) ** &
  886. (0.5 * B / ALN10)
  887. CT = 1./((1-VEGFRC)/CG + VEGFRC/CV)
  888. CT = 1./(SNOW_FRA/CT_SNOW + (1-SNOW_FRA)/CT)
  889. CAPG = 1.0/CT
  890. SOILFLX = 2.0 * PI * TAUINV * (TG - T2)
  891. GRDFLX = SOILFLX / CT
  892. ENDIF
  893. !-----------------------------------------------------------------------------------------
  894. !--------------------------------------------------------------------
  895. !-- ASSIMILATION --- COMPUTE SOIL MOISTURE NUDGING FROM TA2 and RH2
  896. !-------COMPUTE ASSIMILATION COEFFICIENTS FOR ALL I
  897. IF (IFLAND .LT. 1.5) THEN
  898. IF (NUDGEX .EQ. 0) THEN !-- NO NUDGING CASE
  899. WGNUDG = 0.0
  900. W2NUDG = 0.0
  901. T2NUD = 0.0
  902. ELSE !-- NUDGING CASE
  903. CALL SMASS (ISTI, FASS, SOLDN, VEGFRC, RA, WWLT, WFC, &
  904. ALPH1, ALPH2, BET1, BET2, T2NUDF)
  905. !--COMPUTE MODEL RH
  906. WGNUDG = ALPH1 * (T2OBS - TA2) + ALPH2 * (RH2OBS - RH2MOD) * 100
  907. W2NUDG = BET1 * (T2OBS - TA2) + BET

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