PageRenderTime 65ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/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
  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) + BET2 * (RH2OBS - RH2MOD) * 100
  908. IF (W2 .GE. WFC) W2NUDG = AMIN1(W2NUDG,0.0)
  909. IF (W2 .LE. WWLT) W2NUDG = AMAX1(W2NUDG,0.0)
  910. T2NUD = T2NUDF * (T2OBS - TA2)
  911. !print *, 'T2NUD =',T2NUD,T2NUDF
  912. ENDIF
  913. ENDIF
  914. !-----------------------------------------------------------------------------------------
  915. !-----------------------------------------------------------------------------------------
  916. !-- Compute new values for TS,T2,WG,W2 and WR. No change over ice or water (XLAND > 1)
  917. IF (IFLAND .LT. 1.5) THEN
  918. !-- SOLVE BY CRANK-NIC -- TENDTS=CT*(RADNET-HFX-QFX)-SOILFLX
  919. !-- Calculate the coefficients for implicit calculation of TG
  920. CQ1 = (1.0 - 0.622 * LV * CRANKP / (r_d * TG)) * QSS
  921. CQ2 = 0.622 * LV * QSS * CRANKP / (r_d * TG * TG)
  922. CQ3 = DENS1 * BETAP * (1.0 - VEGFRC) / RAW
  923. COEFFNP1 = 1.0 + DTPBL * CRANKP * (4.0 * EMISSI * STBOLT * TG ** 3 &
  924. * CT + DENS1 * CPAIR / RAH * CPOT * CT + 2.0 * PI &
  925. * TAUINV ) + DTPBL * (CT * LV * CQ2 * (CQ3 + CQ4))
  926. COEFFN = CT * (GSW + EMISSI * (STBOLT * (4.0 * CRANKP - 1.0) &
  927. * TG*TG*TG*TG + LWDN) & !NET RAD
  928. + DENS1 * CPAIR / RAH * (THETA1 - (1.0 - CRANKP) * THETAG) &
  929. - LV * (CQ3 * (CQ1 - QV1) + CQ4 * (CQ1 - QV1))) & !SFC HEAT FLUX
  930. - 2.0 * PI * TAUINV * ((1.0 - CRANKP) * TG - T2) !SOIL FLUX
  931. TSNEW = (TG + DTPBL * COEFFN) / COEFFNP1
  932. !-- FOR SNOW COVERED SURFACE TEMPERATURE IS NOT MORE THAN ZERO
  933. IF (XICE1 .GT. 0.5) TSNEW = AMIN1(TSNEW,273.15) ! Re-added Jan 2010 to keep ice surface at or below freezing (J. Pleim)
  934. TSHLF = 0.5 * ( TSNEW + TG)
  935. T2NEW = (T2 + DTPBL * TAUINV * T2TFAC * (TSHLF - (1 - CRANKP) * T2) &
  936. + DTPBL*T2NUD) & ! Added deep temperature nudging
  937. / (1.0 + DTPBL * TAUINV * T2TFAC * CRANKP)
  938. !-- REPLACE OLD with NEW Value
  939. TG = TSNEW
  940. T2 = T2NEW
  941. ENDIF
  942. !-----------------------------------------------------------------------------------------
  943. !-----------------------------------------------------------------------------------------
  944. ! Compute new subsurface soil and canopy moisture values DENS1. No change required over ocean.
  945. IF (IFLAND .LT. 1.5.AND. XICE1.LT.0.5) THEN
  946. !-- Compute WR
  947. ROFF = 0.0
  948. WRMAX = 0.2E-3 * VEGFRC * LAI ! max. WRMAX IN m
  949. IF(WRMAX.GT.0.0) THEN
  950. !-- PC is precip. intercepted by veg.(M/S)
  951. PC = VEGFRC * SIGF * PRECIP
  952. DWR = (WRMAX - WR) / DTPBL !the tendency to reach max.
  953. PNET = PC - ER/ DENW ! residual of precip. and evap.
  954. IF (PNET .GT. DWR) THEN
  955. ROFF = PNET - DWR
  956. PC = PC - ROFF
  957. ENDIF
  958. IF (QSS .LT. QV1) THEN
  959. TENDWR = PC - ER / DENW
  960. WRNEW = WR + DTPBL * TENDWR
  961. ELSE
  962. COF1 = DENS1 / DENW * VEGFRC * (QSS - QV1) / RAW
  963. !-- using delta=wr/wrmax
  964. CFNP1WR = 1.0 + DTPBL * COF1 * CRANKP / WRMAX
  965. CFNWR = PC - COF1 * (1.0 - CRANKP) * WR / WRMAX
  966. WRNEW = (WR + DTPBL * CFNWR) / CFNP1WR
  967. ENDIF
  968. ELSE
  969. PC=0.0
  970. WRNEW=0.0
  971. ENDIF
  972. !---------------------------------------------
  973. !-- Compute W2
  974. PG = DENW * (PRECIP - PC) ! PG is precip. reaching soil (PC already including ROFF)
  975. TENDW2 = 1.0 / (DENW * DS2) * (PG - EG - ETR) &
  976. + (W2NUDG + WGNUDG) / DS2 ! NUDGING
  977. W2NEW = W2 + DTPBL * TENDW2
  978. W2NEW = AMIN1(W2NEW,WSAT)
  979. W2NEW = AMAX1(W2NEW,0.05)
  980. W2HLF = 0.5 * (W2 + W2NEW)
  981. !.. new values
  982. W2 = W2NEW
  983. WR = AMIN1(WRMAX,WRNEW)
  984. ENDIF
  985. !-----------------------------------------------------------------------------------------
  986. !-----------------------------------------------------------------------------------------
  987. ! Compute new surface soil moisture values (WR).
  988. IF (IFLAND .LT. 1.5.AND. XICE1.LT.0.5) THEN ! over ocean no change to wg w2,wr
  989. !-- FOR SNOW COVERED SURFACE, ASSUME SURFACE IS SATURATED AND
  990. ! WG AND W2 ARE NOT CHANGED
  991. IF (ISNOW .GT.0.5) THEN
  992. WG = WSAT
  993. ELSE
  994. W2REL = W2HLF / WSAT
  995. IF (WG .GT. WWLT) THEN
  996. C1 = C1SAT * (WSAT / WG) ** (0.5 * B + 1.0)
  997. ELSE ! elimilate C1 for wg < wilting point
  998. C1 = C1SAT * (WSAT / WWLT) ** (0.5 * B + 1.0)
  999. ENDIF
  1000. C2 = C2R * W2HLF / (WSAT - W2HLF + 1.E-11)
  1001. IF (W2HLF .EQ. WSAT) THEN
  1002. WEQ = WSAT
  1003. ELSE
  1004. WEQ = W2HLF - AS * WSAT * W2REL ** JP * &
  1005. (1.0 - W2REL ** (8.0 * JP))
  1006. ENDIF
  1007. !.... The beta method, Lee & Pielke (JAM, May 1992)
  1008. CFNP1 = 1.0 + DTPBL * C2 * TAUINV * CRANKP
  1009. CFN = C1 / (DENW * DS1) * (PG - EG) - C2 * TAUINV * &
  1010. ((1.0 - CRANKP) * WG - WEQ) + WGNUDG/ DS1
  1011. WGNEW = AMAX1((WG + DTPBL * CFN) / CFNP1,0.001)
  1012. !-- NEW VALUES
  1013. WG = AMIN1(WGNEW,WSAT)
  1014. ENDIF !endif for ISNOW
  1015. ENDIF !endif for XLAND
  1016. END SUBROUTINE surfpx
  1017. !-------------------------------------------------------------------------
  1018. !-------------------------------------------------------------------------
  1019. !-------------------------------------------------------------------------
  1020. !-------------------------------------------------------------------------
  1021. SUBROUTINE QFLUX (DENS1, QV1, TA1, RG, RAW, QSS, & ! in
  1022. VEGFRC, ISNOW, ISTI, IFLAND, LAI, BETAP, & ! in
  1023. WG, W2, WR, & ! in
  1024. RSTMIN, WWLT, WFC, &
  1025. EG, ER, ETR, CQ4, RS, FASS) ! out
  1026. !-------------------------------------------------------------------------
  1027. !
  1028. ! FUNCTION:
  1029. ! THIS SUBROUTINE COMPUTES EVAPORATION FROM BARE SOIL (EG) AND FROM
  1030. ! THE WET PART OF CANOPY (ER) AND TRANSPIRATION FROM THE DRY PART OF
  1031. ! CANOPY (ETR).
  1032. !
  1033. ! REVISION HISTORY:
  1034. ! A. Xiu Oct 2004 - adapted from the PX LSM in MM5 for the WRF system
  1035. ! R. Gilliam Dec 2006 - Completed WRF V2.1.2 implementation
  1036. !
  1037. !-------------------------------------------------------------------------
  1038. ! QFLUX ARGUMENT LIST:
  1039. !-------------------------------------------------------------------------
  1040. ! INPUTS:
  1041. !-- DENS1 air density at first layer
  1042. !-- QV1 air humidity at first layer
  1043. !-- TA1 air temperature at first layer
  1044. !-- RG shortwave radition reaching the ground
  1045. !-- RAW RA+RB for moisture
  1046. !-- QSS saturation mixing ratio at ground
  1047. !-- VEGFRC vegetation coverage
  1048. !-- ISNOW if snow on the ground
  1049. !-- ISTI soil type
  1050. !-- IFLAND if land (=1) or water (=2)
  1051. !-- LAI leaf area index
  1052. !-- BETAP
  1053. !-- WG soil moisture at first soil layer
  1054. !-- W2 soil moisture at root zone
  1055. !-- WR Canopy water
  1056. !
  1057. ! OUTPUTS FROM QFLUX:
  1058. !-- EG evaporation from ground (bare soil)
  1059. !-- ER evaporation from canopy
  1060. !-- ETR transpiration from vegetation
  1061. !-- CQ4
  1062. !-- RS surface resistence
  1063. !-- FASS parameter for soil moisture nudging
  1064. !-------------------------------------------------------------------------
  1065. !-------------------------------------------------------------------------
  1066. IMPLICIT NONE
  1067. ! DECLARATIONS - INTEGER
  1068. INTEGER , INTENT(IN) :: ISTI
  1069. ! DECLARATIONS - REAL
  1070. REAL , INTENT(IN) :: ISNOW, IFLAND
  1071. REAL , INTENT(IN) :: DENS1, QV1, TA1, RG, RAW, QSS, &
  1072. VEGFRC, LAI, &
  1073. WG, W2, WR, RSTMIN
  1074. REAL , INTENT(INOUT) :: BETAP
  1075. REAL, INTENT(IN) :: WWLT, WFC
  1076. REAL , INTENT(OUT) :: EG, ER, ETR, CQ4, RS, FASS
  1077. !... Local Variables
  1078. !... Real
  1079. REAL :: WRMAX, DELTA, SIGG, RADL, RADF, W2AVAIL, W2MXAV
  1080. REAL :: FTOT, F1, F2, F3, F4
  1081. REAL :: FSHELT, GS, GA, FX
  1082. !... Parameters
  1083. REAL, PARAMETER :: RSMAX = 5000.0 ! s/m
  1084. REAL, PARAMETER :: FTMIN = 0.0000001 ! m/s
  1085. REAL, PARAMETER :: F3MIN = 0.25
  1086. !
  1087. !... for water surface, no canopy evaporation and transpiration
  1088. ER = 0.0
  1089. ETR = 0.0
  1090. CQ4 = 0.0
  1091. !... GROUND EVAPORATION (DEPOSITION)
  1092. IF (QSS .LT. QV1) BETAP = 1.0
  1093. EG = DENS1 * (1.0 - VEGFRC) * BETAP * (QSS - QV1) / RAW
  1094. !!---------------------------------------------------------------------
  1095. !... CANOPY
  1096. IF (IFLAND .LT. 1.5 .AND. VEGFRC .GT. 0.0) THEN
  1097. WRMAX = 0.2E-3 * VEGFRC * LAI ! in unit m
  1098. IF (WR .LE. 0.0) THEN
  1099. DELTA = 0.0
  1100. ELSE
  1101. ! DELTA = (WR / WRMAX) ** 0.66667
  1102. DELTA = WR / WRMAX ! referred to SiB model
  1103. ENDIF
  1104. IF (QSS .GE. QV1) THEN
  1105. SIGG = DELTA
  1106. ELSE
  1107. SIGG = 1.0
  1108. ENDIF
  1109. ER = DENS1 * VEGFRC * SIGG * (QSS - QV1) / RAW
  1110. ENDIF
  1111. !!---------------------------------------------------------------------
  1112. !-- TRANSPIRATION
  1113. !!---------------------------------------------------------------------
  1114. IF (IFLAND .LT. 1.5 .AND. VEGFRC .GT. 0.0) THEN
  1115. !!!-RADIATION
  1116. IF (RSTMIN .GT. 130.0) THEN
  1117. RADL = 30.0 ! W/M2
  1118. ELSE
  1119. RADL = 100.0 ! W/M2
  1120. ENDIF
  1121. RADF = 1.1 * RG / (RADL * LAI) ! NP89 - EQN34
  1122. F1 = (RSTMIN / RSMAX + RADF) / (1.0 + RADF)
  1123. !!!-SOIL MOISTURE
  1124. W2AVAIL = W2 - WWLT
  1125. W2MXAV = WFC - WWLT
  1126. F2 = 1.0 / (1.0 + EXP(-5.0 * ( W2AVAIL / W2MXAV - &
  1127. (W2MXAV / 3.0 + WWLT)))) ! according JP, 9/94
  1128. !-AIR TEMP
  1129. !... according to Avissar (1985) and AX 7/95
  1130. IF (TA1 .LE. 302.15) THEN
  1131. F4 = 1.0 / (1.0 + EXP(-0.41 * (TA1 - 282.05)))
  1132. ELSE
  1133. F4 = 1.0 / (1.0 + EXP(0.5 * (TA1 - 314.0)))
  1134. ENDIF
  1135. FTOT = LAI * F1 * F2 * F4
  1136. ENDIF
  1137. !!---------------------------------------------------------------------
  1138. IF (IFLAND .LT. 1.5 .AND. VEGFRC .GT. 0.0) THEN
  1139. FSHELT = 1.0 ! go back to NP89
  1140. GS = FTOT / (RSTMIN * FSHELT)
  1141. GA = 1.0 / RAW
  1142. !-- Compute humidity effect according to RH at leaf surf
  1143. F3 = 0.5 * (GS - GA + SQRT(GA * GA + GA * GS * &
  1144. (4.0 * QV1 / QSS - 2.0) + GS * GS)) / GS
  1145. F3 = AMIN1(AMAX1(F3,F3MIN),1.0)
  1146. RS = 1.0 / (GS * F3)
  1147. !--- Compute Assimilation factor for soil moisture nudging - jp 12/94
  1148. !-- Note that the 30 coef is to result in order 1 factor for max
  1149. IF (RG .LT. 0.00001) THEN ! do not nudge during night
  1150. FX = 0.0
  1151. ELSE
  1152. FX = 30.0 * F1 * F4 * LAI / (RSTMIN * FSHELT)
  1153. ENDIF
  1154. FASS = FX
  1155. ETR = DENS1 * VEGFRC * (1.0 - SIGG) * (QSS - QV1) / (RAW + RS)
  1156. !..... CQ4 is used for the implicit calculation of TG in SURFACE
  1157. CQ4 = DENS1 * VEGFRC * ((1.0 - SIGG) / (RAW + RS) + SIGG / RAW)
  1158. ENDIF
  1159. END SUBROUTINE qflux
  1160. !------------------------------------------------------------------------------------------
  1161. !------------------------------------------------------------------------------------------
  1162. !------------------------------------------------------------------------------------------
  1163. !------------------------------------------------------------------------------------------
  1164. SUBROUTINE SMASS (ISTI, FASS, RG, VEGFRC, RA, & !in
  1165. WWLT, WFC, & !in
  1166. ALPH1, ALPH2, BET1, BET2, T2NUDF ) !out
  1167. !------------------------------------------------------------------------------------------
  1168. !------------------------------------------------------------------------------------------
  1169. IMPLICIT NONE
  1170. !------------------------------------------------------------------------------------------
  1171. ! SMASS COMPUTES SOIL MOISTURE NUDGING COEFFICIENTS
  1172. !------------------------------------------------------------------------------------------
  1173. !
  1174. !.........Arguments
  1175. INTEGER, PARAMETER :: NSCAT = 16 ! max. soil types
  1176. INTEGER, INTENT(IN) :: ISTI
  1177. REAL, INTENT(IN) :: FASS, RG, VEGFRC, RA
  1178. REAL, INTENT(IN) :: WWLT, WFC
  1179. REAL, INTENT(OUT) :: ALPH1, ALPH2, BET1, BET2, T2NUDF
  1180. !........Local variables
  1181. !... Real
  1182. REAL :: FBET, FALPH, FRA, FTEXT
  1183. REAL, DIMENSION( 1: NSCAT ) :: WFCX, WWLTX
  1184. !... Parameters
  1185. REAL, PARAMETER :: A1MAX = -10.E-5, A2MAX = 1.E-5 ! m/K, m for 6hr period
  1186. REAL, PARAMETER :: B1MAX = -10.E-3, B2MAX = 1.E-3 ! m/K, m (Bouttier et al 1993)
  1187. REAL, PARAMETER :: TASSI = 4.6296E-5 ! 1/6hr in 1/sec
  1188. REAL, PARAMETER :: RAMIN = 10.0 ! 0.1 s/cm
  1189. !
  1190. !-- WFC is field capacity (M^3/M^3) (JN90)
  1191. DATA WFCX / 0.135, 0.150, 0.195, 0.255, 0.240, 0.255, 0.322, &
  1192. 0.325, 0.310, 0.370, 0.367, 0.367, 0.367, 0.367, 0.367, 0.367 /
  1193. !
  1194. !-- WWLT is wilting point (M^3/M^3) (JN90)
  1195. DATA WWLTX / 0.068, 0.075, 0.114, 0.179, 0.155, 0.175, 0.218, &
  1196. 0.250, 0.219, 0.283, 0.286, 0.286, 0.286, 0.286, 0.286, 0.286 /
  1197. !
  1198. FBET = FASS
  1199. FALPH = RG / 1370.0
  1200. !--TEXTURE FACTOR NORMALIZED BY LOAM (IST=5)
  1201. FRA = RAMIN / RA ! scale by aerodynamic resistance
  1202. FTEXT = TASSI * (WWLT + WFC) / (WWLTX(5) + WFCX(5)) * FRA
  1203. ! write(6,*) ' ftot, fbet=',ftot, fbet,' ftext=',ftext/tassi
  1204. !
  1205. ALPH1 = A1MAX * FALPH * (1.0 - VEGFRC) * FTEXT
  1206. ALPH2 = A2MAX * FALPH * (1.0 - VEGFRC) * FTEXT
  1207. BET1 = B1MAX * FBET * VEGFRC * FTEXT
  1208. BET2 = B2MAX * FBET * VEGFRC * FTEXT
  1209. T2NUDF = 1.0E-5 * MAX((1.0 - 5.0 * FALPH),0.0) ! T2 Nudging at night
  1210. END SUBROUTINE smass
  1211. !------------------------------------------------------------------------------------------
  1212. !------------------------------------------------------------------------------------------
  1213. !------------------------------------------------------------------------------------------
  1214. !------------------------------------------------------------------------------------------
  1215. SUBROUTINE SOILPROP (SOILCBOT,WEIGHT, ITIMESTEP, MAVAIL, & ! IN
  1216. PXLSM_SMOIS_INIT, & ! IN
  1217. FWSAT,FWFC,FWWLT,FB,FCGSAT, & ! OUT
  1218. FJP,FAS,FC2R,FC1SAT,ISTI, W2 ) ! OUT
  1219. !------------------------------------------------------------------------
  1220. ! SOILPROP COMPUTES SOIL PARAMETERS FOR BOTH BOTTOM AND TOP LAYERS
  1221. ! USING FRACTIONAL SOIL TYPE. A HARD CODED OPTION IS AVAILIABLE
  1222. ! TO COMPUTE THE SOIL PARAMETERS USING FRACTIONAL INFORMATION, OR
  1223. ! TO JUST USE SOIL PARAMETERS OF THE DOMINANT SOIL TYPE
  1224. !------------------------------------------------------------------------
  1225. !-- SOIL PARAMETERS ARE SPECIFIED BY SOIL TYPE:
  1226. ! # SOIL TYPE WSAT WFC WWLT B CGSAT JP AS C2R C1SAT
  1227. ! _ _________ ____ ___ ____ ____ _____ ___ ___ ___ _____
  1228. ! 1 SAND .395 .135 .068 4.05 3.222 4 .387 3.9 .082
  1229. ! 2 LOAMY SAND .410 .150 .075 4.38 3.057 4 .404 3.7 .098
  1230. ! 3 SANDY LOAM .435 .195 .114 4.90 3.560 4 .219 1.8 .132
  1231. ! 4 SILT LOAM .485 .255 .179 5.30 4.418 6 .105 0.8 .153
  1232. ! 4 SILT .485 .255 .179 5.30 4.418 6 .105 0.8 .153 NP89 does not have Silt so mapped to Silt Loam
  1233. ! 5 LOAM .451 .240 .155 5.39 4.111 6 .148 0.8 .191
  1234. ! 6 SND CLY LM .420 .255 .175 7.12 3.670 6 .135 0.8 .213
  1235. ! 7 SLT CLY LM .477 .322 .218 7.75 3.593 8 .127 0.4 .385
  1236. ! 8 CLAY LOAM .476 .325 .250 8.52 3.995 10 .084 0.6 .227
  1237. ! 9 SANDY CLAY .426 .310 .219 10.40 3.058 8 .139 0.3 .421
  1238. ! 10 SILTY CLAY .482 .370 .283 10.40 3.729 10 .075 0.3 .375
  1239. ! 11 CLAY .482 .367 .286 11.40 3.600 12 .083 0.3 .342
  1240. !------------------------------------------------------------------------
  1241. !------------------------------------------------------------------------------------------
  1242. !------------------------------------------------------------------------------------------
  1243. IMPLICIT NONE
  1244. !.........Arguments
  1245. INTEGER, PARAMETER :: NSCAT = 16 ! max. soil types
  1246. INTEGER, PARAMETER :: NSCATMIN = 16 ! min soil types
  1247. INTEGER, INTENT(IN) :: WEIGHT, ITIMESTEP, PXLSM_SMOIS_INIT
  1248. REAL, INTENT(IN) :: MAVAIL
  1249. REAL, DIMENSION(1:NSCAT), INTENT(IN) :: SOILCBOT
  1250. REAL, INTENT(OUT) :: FWSAT,FWFC,FWWLT,FB,FCGSAT, &
  1251. FJP,FAS,FC2R,FC1SAT
  1252. REAL, INTENT(INOUT) :: W2
  1253. INTEGER, INTENT(OUT) :: ISTI
  1254. !........Local variables
  1255. CHARACTER*4, AVCLASS
  1256. CHARACTER*4, DIMENSION( 1: NSCAT ) :: TEXID
  1257. !... Integer
  1258. INTEGER:: S
  1259. !... Real
  1260. REAL:: TFRACBOT, CFRAC, SUMSND, SUMCLY, AVS, AVC, AVSLT
  1261. REAL, DIMENSION( 1: NSCAT ) :: WSAT, WFC, WWLT, B, CGSAT, AS, &
  1262. JP, C2R, C1SAT
  1263. REAL, DIMENSION( 1: NSCATMIN ) :: SAND, CLAY
  1264. !.......... DATA statement for SOIL PARAMETERS for the 11 soil types
  1265. DATA SAND /92.5,80.5,61.1,19.6,4.0,40.0,57.1,11.3,26.8, &
  1266. 52.0,6.5,10.2,1.0,1.0,1.0,1.0/
  1267. DATA CLAY/2.1,4.1,10.9,19.1,7.3,18.8,23.3,32.2,36.6, &
  1268. 43.0,46.2,58.8,1.0,1.0,1.0,1.0/
  1269. DATA TEXID/'Sand','Lsan','Sloa','Sill','Silt','Loam','Sclo', &
  1270. 'Sicl','Cllo','Sacl','Sicy','Clay','Ormt','Wate', &
  1271. 'Bedr','Othe'/
  1272. !
  1273. !-- WSAT is saturated soil moisture (M^3/M^3) (JN90)
  1274. DATA WSAT / 0.395, 0.410, 0.435, 0.485, 0.451, 0.420, 0.477, &
  1275. 0.476, 0.426, 0.482, 0.482, 0.482, 0.482, 0.482, 0.482, 0.482 /
  1276. !
  1277. !-- WFC is field capacity (M^3/M^3) (JN90)
  1278. DATA WFC / 0.135, 0.150, 0.195, 0.255, 0.240, 0.255, 0.322, &
  1279. 0.325, 0.310, 0.370, 0.367, 0.367, 0.367, 0.367, 0.367, 0.367 /
  1280. !
  1281. !-- WWLT is wilting point (M^3/M^3) (JN90)
  1282. DATA WWLT / 0.068, 0.075, 0.114, 0.179, 0.155, 0.175, 0.218, &
  1283. 0.250, 0.219, 0.283, 0.286, 0.286, 0.286, 0.286, 0.286, 0.286 /
  1284. !
  1285. !-- B is slop of the retention curve (NP89)
  1286. DATA B / 4.05, 4.38, 4.90, 5.30, 5.39, 7.12, 7.75, &
  1287. 8.52, 10.40, 10.40, 11.40, 11.40, 11.40, 11.40, 11.40, 11.40 /
  1288. !
  1289. !-- CGSAT is soil thermal coef. at saturation (10^-6 K M^2 J^-1) (NP89)
  1290. DATA CGSAT / 3.222, 3.057, 3.560, 4.418, 4.111, 3.670, 3.593, &
  1291. 3.995, 3.058, 3.729, 3.600, 3.600, 3.600, 3.600, 3.600, 3.600 /
  1292. !
  1293. !-- JP is coefficient of WGEQ formulation (NP89)
  1294. DATA JP / 4, 4, 4, 6, 6, 6, 8, &
  1295. 10, 8, 10, 12, 12, 12, 12, 12, 12 /
  1296. !
  1297. !-- AS is coefficient of WGEQ formulation (NP89)
  1298. DATA AS / 0.387, 0.404, 0.219, 0.105, 0.148, 0.135, 0.127, &
  1299. 0.084, 0.139, 0.075, 0.083, 0.083, 0.083, 0.083, 0.083, 0.083 /
  1300. !
  1301. !-- C2R is the value of C2 for W2=0.5WSAT (NP89)
  1302. DATA C2R / 3.9, 3.7, 1.8, 0.8, 0.8, 0.8, 0.4, &
  1303. 0.6, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3 /
  1304. !
  1305. !-- C1SAT is the value of C1 at saturation (NP89)
  1306. DATA C1SAT / 0.082, 0.098, 0.132, 0.153, 0.191, 0.213, 0.385, &
  1307. 0.227, 0.421, 0.375, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342 /
  1308. !
  1309. !-------------------------------Exicutable starts here--------------------
  1310. IF(WEIGHT.GE.1.0) THEN !Compute soil characteristics using weighting determined by fractional soil content
  1311. FWSAT =0
  1312. FWFC =0
  1313. FWWLT =0
  1314. FB =0
  1315. FCGSAT=0
  1316. FJP =0
  1317. FAS =0
  1318. FC2R =0
  1319. FC1SAT=0
  1320. TFRACBOT =0
  1321. CFRAC=0
  1322. DO S=1,NSCAT
  1323. IF(SOILCBOT(S).GE.CFRAC) THEN
  1324. ISTI=S
  1325. CFRAC=SOILCBOT(S)
  1326. ENDIF
  1327. TFRACBOT=TFRACBOT+SOILCBOT(S)
  1328. FWSAT =FWSAT + WSAT(S) *SOILCBOT(S)
  1329. FWFC =FWFC + WFC(S) *SOILCBOT(S)
  1330. FWWLT =FWWLT + WWLT(S) *SOILCBOT(S)
  1331. FB =FB + B(S) *SOILCBOT(S)
  1332. FCGSAT=FCGSAT + CGSAT(S) *SOILCBOT(S)
  1333. FJP =FJP + JP(S) *SOILCBOT(S)
  1334. FAS =FAS + AS(S) *SOILCBOT(S)
  1335. FC2R =FC2R + C2R(S) *SOILCBOT(S)
  1336. FC1SAT=FC1SAT + C1SAT(S) *SOILCBOT(S)
  1337. ENDDO
  1338. TFRACBOT = 1/TFRACBOT
  1339. FWSAT =FWSAT * TFRACBOT
  1340. FWFC =FWFC * TFRACBOT
  1341. FWWLT =FWWLT * TFRACBOT
  1342. FB =FB * TFRACBOT
  1343. FCGSAT=FCGSAT * TFRACBOT
  1344. FJP =FJP * TFRACBOT
  1345. FAS =FAS * TFRACBOT
  1346. FC2R =FC2R * TFRACBOT
  1347. FC1SAT=FC1SAT * TFRACBOT
  1348. ELSE !Compute soil characteristics by sand and clay fraction
  1349. CFRAC = 0.0
  1350. SUMSND = 0.0
  1351. SUMCLY = 0.0
  1352. TFRACBOT = 0.0
  1353. DO S = 1,12
  1354. TFRACBOT = TFRACBOT + SOILCBOT(S)
  1355. SUMSND = SUMSND + SAND(S) * SOILCBOT(S)
  1356. SUMCLY = SUMCLY + CLAY(S) * SOILCBOT(S)
  1357. IF(SOILCBOT(S).GE.CFRAC) THEN ! Find Dominant Category and fraction
  1358. ISTI=S
  1359. CFRAC=SOILCBOT(S)
  1360. ENDIF
  1361. ENDDO
  1362. IF(TFRACBOT.GT.0.001) THEN
  1363. AVS = SUMSND / TFRACBOT
  1364. AVC = SUMCLY / TFRACBOT
  1365. AVSLT = 100 - AVS - AVC
  1366. IF(AVS.GT.(85.+ 0.5*AVC)) THEN
  1367. AVCLASS= 'Sand'
  1368. ISTI = 1
  1369. ELSE IF(AVS.GT.(70.+ AVC)) THEN
  1370. AVCLASS= 'Lsan'
  1371. ISTI = 2
  1372. ELSE IF((AVC.LT.20..AND.AVS.GT.52.) &
  1373. .OR.(AVC.LE.7.5.AND.AVSLT.LT.50.)) THEN
  1374. AVCLASS= 'Sloa'
  1375. ISTI = 3
  1376. ELSE IF(AVC.LT.35..AND.AVS.GT.45..AND.AVSLT.LT.28.) THEN
  1377. AVCLASS= 'Sclo'
  1378. ISTI = 6
  1379. ELSE IF(AVC.GE.35..AND.AVS.GT.45.) THEN
  1380. AVCLASS = 'Sacl'
  1381. ISTI = 9
  1382. ELSE IF(AVC.LT.27.0.AND.AVSLT.LT.50.) THEN
  1383. AVCLASS= 'Loam'
  1384. ISTI = 5
  1385. ELSE IF(AVC.LT.12..AND.AVSLT.GT.80.) THEN
  1386. AVCLASS = 'Silt'
  1387. ISTI = 4
  1388. ELSE IF(AVC.LT.27.) THEN
  1389. AVCLASS = 'Sill'
  1390. ISTI = 4
  1391. ELSE IF(AVC.LT.40..AND.AVS.GT.20.) THEN
  1392. AVCLASS = 'Cllo'
  1393. ISTI = 8
  1394. ELSE IF(AVC.LT.40.) THEN
  1395. AVCLASS = 'Sicl'
  1396. ISTI = 7
  1397. ELSE IF(AVSLT.GE.40.) THEN
  1398. AVCLASS = 'Sicy'
  1399. ISTI = 10
  1400. ELSE
  1401. AVCLASS = 'Clay'
  1402. ISTI = 11
  1403. ENDIF
  1404. ELSE
  1405. ISTI=5
  1406. AVCLASS = TEXID(ISTI)
  1407. ENDIF
  1408. FWSAT =WSAT(ISTI)
  1409. FWFC =WFC(ISTI)
  1410. FWWLT =WWLT(ISTI)
  1411. FB =B(ISTI)
  1412. FCGSAT=CGSAT(ISTI)
  1413. FJP =JP(ISTI)
  1414. FAS =AS(ISTI)
  1415. FC2R =C2R(ISTI)
  1416. FC1SAT=C1SAT(ISTI)
  1417. ENDIF
  1418. ! Compute W2 using soil moisture availiability if pxlsm_smois_init (in namelist) is not zero
  1419. IF (ITIMESTEP .EQ. 1 .AND. PXLSM_SMOIS_INIT .GT. 0) THEN
  1420. W2 = FWWLT + (0.5*(FWSAT+FWFC) - FWWLT) * MAVAIL
  1421. ENDIF
  1422. END SUBROUTINE soilprop
  1423. !------------------------------------------------------------------------------------------
  1424. !------------------------------------------------------------------------------------------
  1425. !------------------------------------------------------------------------------------------
  1426. !------------------------------------------------------------------------------------------
  1427. SUBROUTINE PXSNOW (ITIMESTEP, ASNOW, CSNOW, SNOW, &
  1428. SNOWH, SNUP, &
  1429. ALB, SNOALB, SHDFAC, SHDMIN, &
  1430. HC_SNOW, SNOW_FRA, SNOWC, SNOWALB)
  1431. !------------------------------------------------------------------------------------------
  1432. !------------------------------------------------------------------------------------------
  1433. ! Pleim-Xiu LSM Simple Snow model
  1434. !---------------------------------------------------------------------------------------------------
  1435. ! ITIMESTEP -- Model time step index
  1436. ! ASNOW -- Analyzed snow water equivalent (mm)
  1437. ! CSNOW -- Current snow water equivalent (mm)
  1438. ! SNOW -- Snow water equivalent in model (mm)
  1439. ! SNOWH -- Physical snow depth (m)
  1440. ! SNUP -- Physical snow depth (landuse dependent) where when below, snow cover is fractional
  1441. !
  1442. ! HC_SNOW -- Heat capacity of snow as a function of depth
  1443. ! SNOW_FRA-- Factional snow area
  1444. ! IFSNOW -- Snow flag
  1445. ! SNOWALB -- Snow albedo
  1446. !---------------------------------------------------------------------------------------------------
  1447. IMPLICIT NONE
  1448. !--- Arguments
  1449. REAL, PARAMETER :: W2SN_CONV = 10.0
  1450. REAL, PARAMETER :: CS_SNOWPACK = 2092.0
  1451. REAL, PARAMETER :: SALP = 2.6
  1452. !-----------------------------------------------
  1453. INTEGER, INTENT(IN) :: ITIMESTEP
  1454. REAL, INTENT(IN) :: ASNOW, CSNOW, SNUP, ALB, SNOALB, SHDFAC, SHDMIN
  1455. REAL, INTENT(INOUT) :: SNOW, SNOWH, SNOWC
  1456. REAL, INTENT(OUT) :: HC_SNOW, SNOW_FRA, SNOWALB
  1457. !------------------------------------------------------------------------------------
  1458. !-----------------------------------------------
  1459. ! Local variables
  1460. !... Real
  1461. REAL:: CONV_WAT2SNOW, CSNOWW, RHO_SNOWPACK, &
  1462. LIQSN_RATIO, SNEQV, RSNOW
  1463. !-----------------------------------------------
  1464. SNEQV=ASNOW*0.001 ! Snow water in meters
  1465. RHO_SNOWPACK = 450 ! Snowpack density (kg/m3), this should be computed in the future
  1466. LIQSN_RATIO = DENW/RHO_SNOWPACK ! Ratio of water density and snowpack density
  1467. CONV_WAT2SNOW = LIQSN_RATIO/1000 ! Conversion factor for snow liquid equiv. (mm) to snowpack (m)
  1468. SNOW = ASNOW ! Set snow water to analysis value for now, implement a nudging scheme later
  1469. SNOWH= SNOW * CONV_WAT2SNOW ! Conversion of snow water (mm) to snow depth (m)
  1470. ! Is snow cover now present. The limit is 0.45 mm of water eqivalent or about 2 inches snow depth
  1471. SNOWC = 0.0
  1472. IF (SNOWH .GT. 0.005) SNOWC = 1.0
  1473. HC_SNOW = RHO_SNOWPACK * CS_SNOWPACK * SNOWH
  1474. IF (SNEQV < SNUP) THEN
  1475. RSNOW = SNEQV / SNUP
  1476. SNOW_FRA = 1. - ( EXP ( - SALP * RSNOW) - RSNOW * EXP ( - SALP))
  1477. ELSE
  1478. SNOW_FRA = 1.0
  1479. END IF
  1480. SNOWC = SNOW_FRA
  1481. SNOWALB = ALB + SNOWC*(SNOALB-ALB)
  1482. END SUBROUTINE pxsnow
  1483. !------------------------------------------------------------------------------------------
  1484. !------------------------------------------------------------------------------------------
  1485. END MODULE module_sf_pxlsm