PageRenderTime 73ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 3ms

/wrfv2_fire/phys/module_sf_noahmplsm.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 8875 lines | 5630 code | 1321 blank | 1924 comment | 120 complexity | 9bdab95b1e3a0cc9ff0a5e1b9fd0b8d3 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 noahmp_globals
  2. ! Maybe most of these can be moved to a REDPRM use statement?
  3. use module_sf_noahlsm, only: &
  4. & SLCATS, &
  5. & LUCATS, &
  6. & CSOIL_DATA, &
  7. & BB, &
  8. & SATDK, &
  9. & SATDW, &
  10. & F11, &
  11. & SATPSI, &
  12. & QTZ, &
  13. & DRYSMC, &
  14. & MAXSMC, &
  15. & REFSMC, &
  16. & WLTSMC, &
  17. & RSTBL, &
  18. & RGLTBL, &
  19. & HSTBL, &
  20. & NROTBL, &
  21. & TOPT_DATA, &
  22. & RSMAX_DATA, &
  23. & ZBOT_DATA, &
  24. & CZIL_DATA, &
  25. & FRZK_DATA, &
  26. & SLOPE_DATA, &
  27. & REFDK_DATA, &
  28. & REFKDT_DATA
  29. implicit none
  30. ! ==================================================================================================
  31. !------------------------------------------------------------------------------------------!
  32. ! Physical Constants: !
  33. !------------------------------------------------------------------------------------------!
  34. REAL, PARAMETER :: GRAV = 9.80616 !acceleration due to gravity (m/s2)
  35. REAL, PARAMETER :: SB = 5.67E-08 !Stefan-Boltzmann constant (w/m2/k4)
  36. REAL, PARAMETER :: VKC = 0.40 !von Karman constant
  37. REAL, PARAMETER :: TFRZ = 273.16 !freezing/melting point (k)
  38. REAL, PARAMETER :: HSUB = 2.8440E06 !latent heat of sublimation (j/kg)
  39. REAL, PARAMETER :: HVAP = 2.5104E06 !latent heat of vaporization (j/kg)
  40. REAL, PARAMETER :: HFUS = 0.3336E06 !latent heat of fusion (j/kg)
  41. REAL, PARAMETER :: CWAT = 4.188E06 !specific heat capacity of water (j/m3/k)
  42. REAL, PARAMETER :: CICE = 2.094E06 !specific heat capacity of ice (j/m3/k)
  43. REAL, PARAMETER :: CPAIR = 1004.64 !heat capacity dry air at const pres (j/kg/k)
  44. REAL, PARAMETER :: TKWAT = 0.6 !thermal conductivity of water (w/m/k)
  45. REAL, PARAMETER :: TKICE = 2.2 !thermal conductivity of ice (w/m/k)
  46. REAL, PARAMETER :: TKAIR = 0.023 !thermal conductivity of air (w/m/k)
  47. REAL, PARAMETER :: RAIR = 287.04 !gas constant for dry air (j/kg/k)
  48. REAL, PARAMETER :: RW = 461.269 !gas constant for water vapor (j/kg/k)
  49. REAL, PARAMETER :: DENH2O = 1000. !density of water (kg/m3)
  50. REAL, PARAMETER :: DENICE = 917. !density of ice (kg/m3)
  51. !------------------------------------------------------------------------------------------!
  52. ! From the VEGPARM.TBL tables, as functions of vegetation category.
  53. !------------------------------------------------------------------------------------------!
  54. INTEGER :: NROOT !rooting depth [as the number of layers] ( Assigned in REDPRM )
  55. REAL :: RGL !parameter used in radiation stress function ( Assigned in REDPRM )
  56. REAL :: RSMIN !minimum Canopy Resistance [s/m] ( Assigned in REDPRM )
  57. REAL :: HS !parameter used in vapor pressure deficit function ( Assigned in REDPRM )
  58. REAL :: RSMAX !maximum stomatal resistance ( Assigned in REDPRM )
  59. REAL :: TOPT !optimum transpiration air temperature.
  60. !KWM CHARACTER(LEN=256) :: LUTYPE
  61. !KWM INTEGER :: LUCATS, BARE
  62. !KWM INTEGER, PARAMETER :: NLUS=50
  63. !KWM INTEGER, DIMENSION(1:NLUS) :: NROTBL
  64. !KWM REAL, DIMENSION(1:NLUS) :: RSTBL, RGLTBL, HSTBL
  65. !KWM REAL :: TOPT_DATA,RSMAX_DATA
  66. ! not further used in this version (niu):
  67. !KWM REAL, DIMENSION(1:NLUS) :: SNUPTBL, LAITBL, &
  68. !KWM ALBTBL, SHDTBL, MAXALB
  69. !KWM REAL :: CMCMAX_DATA,CFACTR_DATA,SBETA_DATA,&
  70. !KWM SALP_DATA ,SMLOW_DATA ,SMHIGH_DATA
  71. !KWM REAL, DIMENSION(NLUS) :: LAIMINTBL !KWM
  72. !KWM REAL, DIMENSION(NLUS) :: LAIMAXTBL !KWM
  73. !KWM REAL, DIMENSION(NLUS) :: EMISSMINTBL !KWM
  74. !KWM REAL, DIMENSION(NLUS) :: EMISSMAXTBL !KWM
  75. !KWM REAL, DIMENSION(NLUS) :: ALBEDOMINTBL !KWM
  76. !KWM REAL, DIMENSION(NLUS) :: ALBEDOMAXTBL !KWM
  77. !KWM REAL, DIMENSION(NLUS) :: Z0MINTBL !KWM
  78. !KWM REAL, DIMENSION(NLUS) :: Z0MAXTBL !KWM
  79. !------------------------------------------------------------------------------------------!
  80. ! From the SOILPARM.TBL tables, as functions of soil category.
  81. !------------------------------------------------------------------------------------------!
  82. REAL :: BEXP !B parameter ( Assigned in REDPRM )
  83. REAL :: SMCDRY !dry soil moisture threshold where direct evap from top
  84. !layer ends (volumetric) ( Assigned in REDPRM )
  85. REAL :: F1 !soil thermal diffusivity/conductivity coef ( Assigned in REDPRM )
  86. REAL :: SMCMAX !porosity, saturated value of soil moisture (volumetric)
  87. REAL :: SMCREF !reference soil moisture (field capacity) (volumetric) ( Assigned in REDPRM )
  88. REAL :: PSISAT !saturated soil matric potential ( Assigned in REDPRM )
  89. REAL :: DKSAT !saturated soil hydraulic conductivity ( Assigned in REDPRM )
  90. REAL :: DWSAT !saturated soil hydraulic diffusivity ( Assigned in REDPRM )
  91. REAL :: SMCWLT !wilting point soil moisture (volumetric) ( Assigned in REDPRM )
  92. REAL :: QUARTZ !soil quartz content ( Assigned in REDPRM )
  93. !KWM CHARACTER*4 SLTYPE
  94. !KWM INTEGER :: SLCATS
  95. !KWM INTEGER, PARAMETER :: NSLTYPE=30
  96. !KWM REAL, DIMENSION (1:NSLTYPE) :: BB,DRYSMC,F11, &
  97. !KWM MAXSMC, REFSMC,SATPSI,SATDK,SATDW, WLTSMC,QTZ
  98. !------------------------------------------------------------------------------------------!
  99. ! From the GENPARM.TBL file
  100. !------------------------------------------------------------------------------------------!
  101. REAL :: SLOPE !slope index (0 - 1) ( Assigned in REDPRM )
  102. REAL :: CSOIL !vol. soil heat capacity [j/m3/K] ( Assigned in REDPRM )
  103. REAL :: ZBOT !Depth (m) of lower boundary soil temperature ( Assigned in REDPRM )
  104. REAL :: CZIL !Calculate roughness length of heat ( Assigned in REDPRM )
  105. REAL :: KDT !used in compute maximum infiltration rate (in INFIL) ( Assigned in REDPRM )
  106. REAL :: FRZX !used in compute maximum infiltration rate (in INFIL) ( Assigned in REDPRM )
  107. ! LSM GENERAL PARAMETERS
  108. !KWM INTEGER :: SLPCATS
  109. !KWM INTEGER, PARAMETER :: NSLOPE=30
  110. !KWM REAL, DIMENSION (1:NSLOPE) :: SLOPE_DATA
  111. !KWM REAL :: FXEXP_DATA,CSOIL_DATA,REFDK_DATA , &
  112. !KWM REFKDT_DATA,FRZK_DATA ,ZBOT_DATA ,CZIL_DATA
  113. ! =====================================options for different schemes================================
  114. ! options for dynamic vegetation:
  115. ! 1 -> off (use table LAI; use FVEG = SHDFAC from input)
  116. ! 2 -> on (together with OPT_CRS = 1)
  117. ! 3 -> off (use table LAI; calculate FVEG)
  118. ! 4 -> off (use table LAI; use maximum vegetation fraction)
  119. INTEGER :: DVEG != 2 !
  120. ! options for canopy stomatal resistance
  121. ! 1-> Ball-Berry; 2->Jarvis
  122. INTEGER :: OPT_CRS != 1 !(must 1 when DVEG = 2)
  123. ! options for soil moisture factor for stomatal resistance
  124. ! 1-> Noah (soil moisture)
  125. ! 2-> CLM (matric potential)
  126. ! 3-> SSiB (matric potential)
  127. INTEGER :: OPT_BTR != 1 !(suggested 1)
  128. ! options for runoff and groundwater
  129. ! 1 -> TOPMODEL with groundwater (Niu et al. 2007 JGR) ;
  130. ! 2 -> TOPMODEL with an equilibrium water table (Niu et al. 2005 JGR) ;
  131. ! 3 -> original surface and subsurface runoff (free drainage)
  132. ! 4 -> BATS surface and subsurface runoff (free drainage)
  133. INTEGER :: OPT_RUN != 1 !(suggested 1)
  134. ! options for surface layer drag coeff (CH & CM)
  135. ! 1->M-O ; 2->original Noah (Chen97); 3->MYJ consistent; 4->YSU consistent.
  136. INTEGER :: OPT_SFC != 1 !(1 or 2 or 3 or 4)
  137. ! options for supercooled liquid water (or ice fraction)
  138. ! 1-> no iteration (Niu and Yang, 2006 JHM); 2: Koren's iteration
  139. INTEGER :: OPT_FRZ != 1 !(1 or 2)
  140. ! options for frozen soil permeability
  141. ! 1 -> linear effects, more permeable (Niu and Yang, 2006, JHM)
  142. ! 2 -> nonlinear effects, less permeable (old)
  143. INTEGER :: OPT_INF != 1 !(suggested 1)
  144. ! options for radiation transfer
  145. ! 1 -> modified two-stream (gap = F(solar angle, 3D structure ...)<1-FVEG)
  146. ! 2 -> two-stream applied to grid-cell (gap = 0)
  147. ! 3 -> two-stream applied to vegetated fraction (gap=1-FVEG)
  148. INTEGER :: OPT_RAD != 1 !(suggested 1)
  149. ! options for ground snow surface albedo
  150. ! 1-> BATS; 2 -> CLASS
  151. INTEGER :: OPT_ALB != 2 !(suggested 2)
  152. ! options for partitioning precipitation into rainfall & snowfall
  153. ! 1 -> Jordan (1991); 2 -> BATS: when SFCTMP<TFRZ+2.2 ; 3-> SFCTMP<TFRZ
  154. INTEGER :: OPT_SNF != 1 !(suggested 1)
  155. ! options for lower boundary condition of soil temperature
  156. ! 1 -> zero heat flux from bottom (ZBOT and TBOT not used)
  157. ! 2 -> TBOT at ZBOT (8m) read from a file (original Noah)
  158. INTEGER :: OPT_TBOT != 2 !(suggested 2)
  159. ! options for snow/soil temperature time scheme (only layer 1)
  160. ! 1 -> semi-implicit; 2 -> full implicit (original Noah)
  161. INTEGER :: OPT_STC != 1 !(suggested 1)
  162. ! ==================================================================================================
  163. ! runoff parameters used for SIMTOP and SIMGM:
  164. REAL, PARAMETER :: TIMEAN = 10.5 !gridcell mean topgraphic index (global mean)
  165. REAL, PARAMETER :: FSATMX = 0.38 !maximum surface saturated fraction (global mean)
  166. ! adjustable parameters for snow processes
  167. REAL, PARAMETER :: M = 1.0 ! 2.50 !melting factor (-)
  168. REAL, PARAMETER :: Z0SNO = 0.002 !snow surface roughness length (m) (0.002)
  169. REAL, PARAMETER :: SSI = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03)
  170. REAL, PARAMETER :: SWEMX = 1.00 !new snow mass to fully cover old snow (mm)
  171. !equivalent to 10mm depth (density = 100 kg/m3)
  172. ! NOTES: things to add or improve
  173. ! 1. lake model: explicit representation of lake water storage, sunlight through lake
  174. ! with different purity, turbulent mixing of surface laker water, snow on frozen lake, etc.
  175. ! 2. shallow snow wihtout a layer: melting energy
  176. ! 3. urban model to be added.
  177. ! 4. irrigation
  178. !------------------------------------------------------------------------------------------!
  179. END MODULE NOAHMP_GLOBALS
  180. !------------------------------------------------------------------------------------------!
  181. !------------------------------------------------------------------------------------------!
  182. MODULE NOAHMP_VEG_PARAMETERS
  183. IMPLICIT NONE
  184. INTEGER, PARAMETER :: MAX_VEG_PARAMS = 33
  185. INTEGER, PARAMETER :: MVT = 27
  186. INTEGER, PARAMETER :: MBAND = 2
  187. INTEGER, PRIVATE :: ISURBAN
  188. INTEGER :: ISWATER
  189. INTEGER :: ISBARREN
  190. INTEGER :: ISSNOW
  191. INTEGER :: EBLFOREST
  192. REAL :: CH2OP(MVT) !maximum intercepted h2o per unit lai+sai (mm)
  193. REAL :: DLEAF(MVT) !characteristic leaf dimension (m)
  194. REAL :: Z0MVT(MVT) !momentum roughness length (m)
  195. REAL :: HVT(MVT) !top of canopy (m)
  196. REAL :: HVB(MVT) !bottom of canopy (m)
  197. REAL :: DEN(MVT) !tree density (no. of trunks per m2)
  198. REAL :: RC(MVT) !tree crown radius (m)
  199. REAL :: SAIM(MVT,12) !monthly stem area index, one-sided
  200. REAL :: LAIM(MVT,12) !monthly leaf area index, one-sided
  201. REAL :: SLA(MVT) !single-side leaf area per Kg [m2/kg]
  202. REAL :: DILEFC(MVT) !coeficient for leaf stress death [1/s]
  203. REAL :: DILEFW(MVT) !coeficient for leaf stress death [1/s]
  204. REAL :: FRAGR(MVT) !fraction of growth respiration !original was 0.3
  205. REAL :: LTOVRC(MVT) !leaf turnover [1/s]
  206. REAL :: C3PSN(MVT) !photosynthetic pathway: 0. = c4, 1. = c3
  207. REAL :: KC25(MVT) !co2 michaelis-menten constant at 25c (pa)
  208. REAL :: AKC(MVT) !q10 for kc25
  209. REAL :: KO25(MVT) !o2 michaelis-menten constant at 25c (pa)
  210. REAL :: AKO(MVT) !q10 for ko25
  211. REAL :: VCMX25(MVT) !maximum rate of carboxylation at 25c (umol co2/m**2/s)
  212. REAL :: AVCMX(MVT) !q10 for vcmx25
  213. REAL :: BP(MVT) !minimum leaf conductance (umol/m**2/s)
  214. REAL :: MP(MVT) !slope of conductance-to-photosynthesis relationship
  215. REAL :: QE25(MVT) !quantum efficiency at 25c (umol co2 / umol photon)
  216. REAL :: AQE(MVT) !q10 for qe25
  217. REAL :: RMF25(MVT) !leaf maintenance respiration at 25c (umol co2/m**2/s)
  218. REAL :: RMS25(MVT) !stem maintenance respiration at 25c (umol co2/kg bio/s)
  219. REAL :: RMR25(MVT) !root maintenance respiration at 25c (umol co2/kg bio/s)
  220. REAL :: ARM(MVT) !q10 for maintenance respiration
  221. REAL :: FOLNMX(MVT) !foliage nitrogen concentration when f(n)=1 (%)
  222. REAL :: TMIN(MVT) !minimum temperature for photosynthesis (k)
  223. REAL :: XL(MVT) !leaf/stem orientation index
  224. REAL :: RHOL(MVT,MBAND) !leaf reflectance: 1=vis, 2=nir
  225. REAL :: RHOS(MVT,MBAND) !stem reflectance: 1=vis, 2=nir
  226. REAL :: TAUL(MVT,MBAND) !leaf transmittance: 1=vis, 2=nir
  227. REAL :: TAUS(MVT,MBAND) !stem transmittance: 1=vis, 2=nir
  228. REAL :: MRP(MVT) !microbial respiration parameter (umol co2 /kg c/ s)
  229. REAL :: CWPVT(MVT) !empirical canopy wind parameter
  230. REAL :: WRRAT(MVT) !wood to non-wood ratio
  231. REAL :: WDPOOL(MVT) !wood pool (switch 1 or 0) depending on woody or not [-]
  232. REAL :: TDLEF(MVT) !characteristic T for leaf freezing [K]
  233. INTEGER :: IK,IM
  234. REAL :: TMP10(MVT*MBAND)
  235. REAL :: TMP11(MVT*MBAND)
  236. REAL :: TMP12(MVT*MBAND)
  237. REAL :: TMP13(MVT*MBAND)
  238. REAL :: TMP14(MVT*12)
  239. REAL :: TMP15(MVT*12)
  240. REAL :: TMP16(MVT*5)
  241. real slarea(MVT)
  242. real eps(MVT,5)
  243. CONTAINS
  244. subroutine read_mp_veg_parameters(DATASET_IDENTIFIER)
  245. implicit none
  246. character(len=*), intent(in) :: DATASET_IDENTIFIER
  247. integer :: ierr
  248. ! Temporary arrays used in reshaping namelist arrays
  249. REAL :: TMP10(MVT*MBAND)
  250. REAL :: TMP11(MVT*MBAND)
  251. REAL :: TMP12(MVT*MBAND)
  252. REAL :: TMP13(MVT*MBAND)
  253. REAL :: TMP14(MVT*12)
  254. REAL :: TMP15(MVT*12)
  255. REAL :: TMP16(MVT*5)
  256. integer :: NVEG
  257. character(len=256) :: VEG_DATASET_DESCRIPTION
  258. NAMELIST / noah_mp_usgs_veg_categories / VEG_DATASET_DESCRIPTION, NVEG
  259. NAMELIST / noah_mp_usgs_parameters / ISURBAN, ISWATER, ISBARREN, ISSNOW, EBLFOREST, &
  260. CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, RHOL, RHOS, TAUL, TAUS, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, &
  261. LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , BP, MP, QE25, RMS25, RMR25, ARM, FOLNMX, WDPOOL, WRRAT, MRP, &
  262. SAIM, LAIM, SLAREA, EPS
  263. NAMELIST / noah_mp_modis_veg_categories / VEG_DATASET_DESCRIPTION, NVEG
  264. NAMELIST / noah_mp_modis_parameters / ISURBAN, ISWATER, ISBARREN, ISSNOW, EBLFOREST, &
  265. CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, RHOL, RHOS, TAUL, TAUS, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, &
  266. LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , BP, MP, QE25, RMS25, RMR25, ARM, FOLNMX, WDPOOL, WRRAT, MRP, &
  267. SAIM, LAIM, SLAREA, EPS
  268. ! Initialize our variables to bad values, so that if the namelist read fails, we come to a screeching halt as soon as we try to use anything.
  269. CH2OP = -1.E36
  270. DLEAF = -1.E36
  271. Z0MVT = -1.E36
  272. HVT = -1.E36
  273. HVB = -1.E36
  274. DEN = -1.E36
  275. RC = -1.E36
  276. RHOL = -1.E36
  277. RHOS = -1.E36
  278. TAUL = -1.E36
  279. TAUS = -1.E36
  280. XL = -1.E36
  281. CWPVT = -1.E36
  282. C3PSN = -1.E36
  283. KC25 = -1.E36
  284. AKC = -1.E36
  285. KO25 = -1.E36
  286. AKO = -1.E36
  287. AVCMX = -1.E36
  288. AQE = -1.E36
  289. LTOVRC = -1.E36
  290. DILEFC = -1.E36
  291. DILEFW = -1.E36
  292. RMF25 = -1.E36
  293. SLA = -1.E36
  294. FRAGR = -1.E36
  295. TMIN = -1.E36
  296. VCMX25 = -1.E36
  297. TDLEF = -1.E36
  298. BP = -1.E36
  299. MP = -1.E36
  300. QE25 = -1.E36
  301. RMS25 = -1.E36
  302. RMR25 = -1.E36
  303. ARM = -1.E36
  304. FOLNMX = -1.E36
  305. WDPOOL = -1.E36
  306. WRRAT = -1.E36
  307. MRP = -1.E36
  308. SAIM = -1.E36
  309. LAIM = -1.E36
  310. SLAREA = -1.E36
  311. EPS = -1.E36
  312. open(15, file="MPTABLE.TBL", status='old', form='formatted', action='read', iostat=ierr)
  313. if (ierr /= 0) then
  314. write(*,'("****** Error ******************************************************")')
  315. write(*,'("Cannot find file MPTABLE.TBL")')
  316. write(*,'("STOP")')
  317. write(*,'("*******************************************************************")')
  318. call wrf_error_fatal("STOP in Noah-MP read_mp_veg_parameters")
  319. endif
  320. if ( trim(DATASET_IDENTIFIER) == "USGS" ) then
  321. read(15,noah_mp_usgs_veg_categories)
  322. read(15,noah_mp_usgs_parameters)
  323. else if ( trim(DATASET_IDENTIFIER) == "MODIFIED_IGBP_MODIS_NOAH" ) then
  324. read(15,noah_mp_modis_veg_categories)
  325. read(15,noah_mp_modis_parameters)
  326. else
  327. write(*,'("Unrecognized DATASET_IDENTIFIER in subroutine READ_MP_VEG_PARAMETERS")')
  328. write(*,'("DATASET_IDENTIFIER = ''", A, "''")') trim(DATASET_IDENTIFIER)
  329. call wrf_error_fatal("STOP in Noah-MP read_mp_veg_parameters")
  330. endif
  331. close(15)
  332. ! Problem. Namelist reading of 2-d arrays doesn't work well when the arrays are declared with larger dimension than the
  333. ! variables in the provided namelist. So we need to reshape the 2-d arrays after we've read them.
  334. if ( MVT > NVEG ) then
  335. !
  336. ! Reshape the 2-d arrays:
  337. !
  338. TMP10 = reshape( RHOL, (/ MVT*size(RHOL,2) /))
  339. TMP11 = reshape( RHOS, (/ MVT*size(RHOS,2) /))
  340. TMP12 = reshape( TAUL, (/ MVT*size(TAUL,2) /))
  341. TMP13 = reshape( TAUS, (/ MVT*size(TAUS,2) /))
  342. TMP14 = reshape( SAIM, (/ MVT*size(SAIM,2) /))
  343. TMP15 = reshape( LAIM, (/ MVT*size(LAIM,2) /))
  344. TMP16 = reshape( EPS, (/ MVT*size(EPS ,2) /))
  345. RHOL(1:NVEG,:) = reshape( TMP10, (/ NVEG, size(RHOL,2) /))
  346. RHOS(1:NVEG,:) = reshape( TMP11, (/ NVEG, size(RHOS,2) /))
  347. TAUL(1:NVEG,:) = reshape( TMP12, (/ NVEG, size(TAUL,2) /))
  348. TAUS(1:NVEG,:) = reshape( TMP13, (/ NVEG, size(TAUS,2) /))
  349. SAIM(1:NVEG,:) = reshape( TMP14, (/ NVEG, size(SAIM,2) /))
  350. LAIM(1:NVEG,:) = reshape( TMP15, (/ NVEG, size(LAIM,2) /))
  351. EPS(1:NVEG,:) = reshape( TMP16, (/ NVEG, size(EPS,2) /))
  352. RHOL(NVEG+1:MVT,:) = -1.E36
  353. RHOS(NVEG+1:MVT,:) = -1.E36
  354. TAUL(NVEG+1:MVT,:) = -1.E36
  355. TAUS(NVEG+1:MVT,:) = -1.E36
  356. SAIM(NVEG+1:MVT,:) = -1.E36
  357. LAIM(NVEG+1:MVT,:) = -1.E36
  358. EPS( NVEG+1:MVT,:) = -1.E36
  359. endif
  360. end subroutine read_mp_veg_parameters
  361. END MODULE NOAHMP_VEG_PARAMETERS
  362. ! ==================================================================================================
  363. ! ==================================================================================================
  364. MODULE NOAHMP_RAD_PARAMETERS
  365. IMPLICIT NONE
  366. INTEGER I ! loop index
  367. INTEGER, PARAMETER :: MSC = 9
  368. INTEGER, PARAMETER :: MBAND = 2
  369. REAL :: ALBSAT(MSC,MBAND) !saturated soil albedos: 1=vis, 2=nir
  370. REAL :: ALBDRY(MSC,MBAND) !dry soil albedos: 1=vis, 2=nir
  371. REAL :: ALBICE(MBAND) !albedo land ice: 1=vis, 2=nir
  372. REAL :: ALBLAK(MBAND) !albedo frozen lakes: 1=vis, 2=nir
  373. REAL :: OMEGAS(MBAND) !two-stream parameter omega for snow
  374. REAL :: BETADS !two-stream parameter betad for snow
  375. REAL :: BETAIS !two-stream parameter betad for snow
  376. REAL :: EG(2) !emissivity
  377. ! saturated soil albedos: 1=vis, 2=nir
  378. DATA(ALBSAT(I,1),I=1,8)/0.15,0.11,0.10,0.09,0.08,0.07,0.06,0.05/
  379. DATA(ALBSAT(I,2),I=1,8)/0.30,0.22,0.20,0.18,0.16,0.14,0.12,0.10/
  380. ! dry soil albedos: 1=vis, 2=nir
  381. DATA(ALBDRY(I,1),I=1,8)/0.27,0.22,0.20,0.18,0.16,0.14,0.12,0.10/
  382. DATA(ALBDRY(I,2),I=1,8)/0.54,0.44,0.40,0.36,0.32,0.28,0.24,0.20/
  383. ! albedo land ice: 1=vis, 2=nir
  384. DATA (ALBICE(I),I=1,MBAND) /0.80, 0.55/
  385. ! albedo frozen lakes: 1=vis, 2=nir
  386. DATA (ALBLAK(I),I=1,MBAND) /0.60, 0.40/
  387. ! omega,betad,betai for snow
  388. DATA (OMEGAS(I),I=1,MBAND) /0.8, 0.4/
  389. DATA BETADS, BETAIS /0.5, 0.5/
  390. ! emissivity ground surface
  391. DATA EG /0.97, 0.98/ ! 1-soil;2-lake
  392. END MODULE NOAHMP_RAD_PARAMETERS
  393. ! ==================================================================================================
  394. MODULE NOAHMP_ROUTINES
  395. USE NOAHMP_GLOBALS
  396. IMPLICIT NONE
  397. public :: noahmp_options
  398. public :: NOAHMP_SFLX
  399. public :: REDPRM
  400. public :: FRH2O
  401. private :: ATM
  402. private :: PHENOLOGY
  403. private :: ENERGY
  404. private :: THERMOPROP
  405. private :: CSNOW
  406. private :: TDFCND
  407. private :: RADIATION
  408. private :: ALBEDO
  409. private :: SNOW_AGE
  410. private :: SNOWALB_BATS
  411. private :: SNOWALB_CLASS
  412. private :: GROUNDALB
  413. private :: TWOSTREAM
  414. private :: SURRAD
  415. private :: VEGE_FLUX
  416. private :: SFCDIF1
  417. private :: SFCDIF2
  418. private :: STOMATA
  419. private :: CANRES
  420. private :: ESAT
  421. private :: RAGRB
  422. private :: BARE_FLUX
  423. private :: TSNOSOI
  424. private :: HRT
  425. private :: HSTEP
  426. private :: ROSR12
  427. private :: PHASECHANGE
  428. private :: WATER
  429. private :: CANWATER
  430. private :: SNOWWATER
  431. private :: SNOWFALL
  432. private :: COMBINE
  433. private :: DIVIDE
  434. private :: COMBO
  435. private :: COMPACT
  436. private :: SNOWH2O
  437. private :: SOILWATER
  438. private :: ZWTEQ
  439. private :: INFIL
  440. private :: SRT
  441. private :: WDFCND1
  442. private :: WDFCND2
  443. ! private :: INFIL
  444. private :: SSTEP
  445. private :: GROUNDWATER
  446. private :: CARBON
  447. private :: CO2FLUX
  448. ! private :: BVOCFLUX
  449. ! private :: CH4FLUX
  450. private :: ERROR
  451. contains
  452. !
  453. ! ==================================================================================================
  454. SUBROUTINE NOAHMP_SFLX (&
  455. & ILOC , JLOC , LAT , YEARLEN , JULIAN , COSZ , & ! IN : Time/Space-related
  456. & DT , DX , DZ8W , NSOIL , ZSOIL , NSNOW , & ! IN : Model configuration
  457. & SHDFAC , SHDMAX , VEGTYP , ISURBAN , ICE , IST , & ! IN : Vegetation/Soil characteristics
  458. & ISC , & ! IN : Vegetation/Soil characteristics
  459. & IZ0TLND , & ! IN : User options
  460. & SFCTMP , SFCPRS , PSFC , UU , VV , Q2 , & ! IN : Forcing
  461. & QC , SOLDN , LWDN , PRCP , TBOT , CO2AIR , & ! IN : Forcing
  462. & O2AIR , FOLN , FICEOLD , PBLH , & ! IN : Forcing
  463. & ZLVL , ALBOLD , SNEQVO , & ! IN/OUT :
  464. & STC , SH2O , SMC , TAH , EAH , FWET , & ! IN/OUT :
  465. & CANLIQ , CANICE , TV , TG , QSFC , QSNOW , & ! IN/OUT :
  466. & ISNOW , ZSNSO , SNOWH , SNEQV , SNICE , SNLIQ , & ! IN/OUT :
  467. & ZWT , WA , WT , WSLAKE , LFMASS , RTMASS , & ! IN/OUT :
  468. & STMASS , WOOD , STBLCP , FASTCP , LAI , SAI , & ! IN/OUT :
  469. & CM , CH , CHSTAR , & ! IN/OUT :
  470. & FSA , FSR , FIRA , FSH , SSOIL , FCEV , & ! OUT :
  471. & FGEV , FCTR , ECAN , ETRAN , EDIR , TRAD , & ! OUT :
  472. & TS , TGB , TGV , T2MV , T2MB , TSTAR , & ! OUT :
  473. & Q1 , Q2V , Q2B , RUNSRF , RUNSUB , APAR , & ! OUT :
  474. & PSN , SAV , SAG , FSNO , NEE , GPP , & ! OUT :
  475. & NPP , FVEG , ALBEDO , QMELT , PONDING , PONDING1, & ! OUT :
  476. & PONDING2, RSSUN , RSSHA , BGAP , WGAP , GAP , & ! OUT :
  477. & ERRWAT , CHV , CHB , EMISSI) ! OUT :
  478. ! --------------------------------------------------------------------------------------------------
  479. ! Initial code: Guo-Yue Niu, Oct. 2007
  480. ! --------------------------------------------------------------------------------------------------
  481. USE NOAHMP_VEG_PARAMETERS
  482. USE NOAHMP_RAD_PARAMETERS
  483. ! --------------------------------------------------------------------------------------------------
  484. implicit none
  485. ! --------------------------------------------------------------------------------------------------
  486. ! input
  487. INTEGER , INTENT(IN) :: ICE !ice (ice = 1)
  488. INTEGER , INTENT(IN) :: IST !surface type 1->soil; 2->lake
  489. INTEGER , INTENT(IN) :: VEGTYP !vegetation type
  490. INTEGER , INTENT(IN) :: ISC !soil color type (1-lighest; 8-darkest)
  491. INTEGER , INTENT(IN) :: NSNOW !maximum no. of snow layers
  492. INTEGER , INTENT(IN) :: NSOIL !no. of soil layers
  493. INTEGER , INTENT(IN) :: ILOC !grid index
  494. INTEGER , INTENT(IN) :: JLOC !grid index
  495. REAL , INTENT(IN) :: DT !time step [sec]
  496. REAL, DIMENSION( 1:NSOIL), INTENT(IN) :: ZSOIL !layer-bottom depth from soil surf (m)
  497. REAL , INTENT(IN) :: Q2 !mixing ratio (kg/kg) lowest model layer
  498. REAL , INTENT(IN) :: SFCTMP !surface air temperature [K]
  499. REAL , INTENT(IN) :: UU !wind speed in eastward dir (m/s)
  500. REAL , INTENT(IN) :: VV !wind speed in northward dir (m/s)
  501. REAL , INTENT(IN) :: SOLDN !downward shortwave radiation (w/m2)
  502. REAL , INTENT(IN) :: PRCP !precipitation rate (kg m-2 s-1)
  503. REAL , INTENT(IN) :: LWDN !downward longwave radiation (w/m2)
  504. REAL , INTENT(IN) :: SFCPRS !pressure (pa)
  505. REAL , INTENT(INOUT) :: ZLVL !reference height (m)
  506. REAL , INTENT(IN) :: COSZ !cosine solar zenith angle [0-1]
  507. REAL , INTENT(IN) :: TBOT !bottom condition for soil temp. [K]
  508. REAL , INTENT(IN) :: FOLN !foliage nitrogen (%) [1-saturated]
  509. REAL , INTENT(IN) :: SHDFAC !green vegetation fraction [0.0-1.0]
  510. INTEGER , INTENT(IN) :: YEARLEN!Number of days in the particular year.
  511. REAL , INTENT(IN) :: JULIAN !Julian day of year (floating point)
  512. REAL , INTENT(IN) :: LAT !latitude (radians)
  513. REAL, DIMENSION(-NSNOW+1: 0), INTENT(IN) :: FICEOLD!ice fraction at last timestep
  514. !jref:start; in
  515. INTEGER , INTENT(IN) :: ISURBAN
  516. INTEGER , INTENT(IN) :: IZ0TLND
  517. REAL , INTENT(IN) :: QC !cloud water mixing ratio
  518. REAL , INTENT(IN) :: PBLH !planetary boundary layer height
  519. REAL , INTENT(INOUT) :: QSFC !mixing ratio at lowest model layer
  520. REAL , INTENT(IN) :: PSFC !pressure at lowest model layer
  521. REAL , INTENT(IN) :: DZ8W !thickness of lowest layer
  522. REAL , INTENT(IN) :: DX
  523. REAL , INTENT(IN) :: SHDMAX !yearly max vegetation fraction
  524. !jref:end
  525. ! input/output : need arbitary intial values
  526. REAL , INTENT(INOUT) :: QSNOW !snowfall [mm/s]
  527. REAL , INTENT(INOUT) :: FWET !wetted or snowed fraction of canopy (-)
  528. REAL , INTENT(INOUT) :: SNEQVO !snow mass at last time step (mm)
  529. REAL , INTENT(INOUT) :: EAH !canopy air vapor pressure (pa)
  530. REAL , INTENT(INOUT) :: TAH !canopy air tmeperature (k)
  531. REAL , INTENT(INOUT) :: ALBOLD !snow albedo at last time step (CLASS type)
  532. REAL , INTENT(INOUT) :: CM !momentum drag coefficient
  533. REAL , INTENT(INOUT) :: CH !sensible heat exchange coefficient
  534. ! prognostic variables
  535. INTEGER , INTENT(INOUT) :: ISNOW !actual no. of snow layers [-]
  536. REAL , INTENT(INOUT) :: CANLIQ !intercepted liquid water (mm)
  537. REAL , INTENT(INOUT) :: CANICE !intercepted ice mass (mm)
  538. REAL , INTENT(INOUT) :: SNEQV !snow water eqv. [mm]
  539. REAL, DIMENSION( 1:NSOIL), INTENT(INOUT) :: SMC !soil moisture (ice + liq.) [m3/m3]
  540. REAL, DIMENSION(-NSNOW+1:NSOIL), INTENT(INOUT) :: ZSNSO !layer-bottom depth from snow surf [m]
  541. REAL , INTENT(INOUT) :: SNOWH !snow height [m]
  542. REAL, DIMENSION(-NSNOW+1: 0), INTENT(INOUT) :: SNICE !snow layer ice [mm]
  543. REAL, DIMENSION(-NSNOW+1: 0), INTENT(INOUT) :: SNLIQ !snow layer liquid water [mm]
  544. REAL , INTENT(INOUT) :: TV !vegetation temperature (k)
  545. REAL , INTENT(INOUT) :: TG !ground temperature (k)
  546. REAL, DIMENSION(-NSNOW+1:NSOIL), INTENT(INOUT) :: STC !snow/soil temperature [k]
  547. REAL, DIMENSION( 1:NSOIL), INTENT(INOUT) :: SH2O !liquid soil moisture [m3/m3]
  548. REAL , INTENT(INOUT) :: ZWT !depth to water table [m]
  549. REAL , INTENT(INOUT) :: WA !water storage in aquifer [mm]
  550. REAL , INTENT(INOUT) :: WT !water in aquifer&saturated soil [mm]
  551. REAL , INTENT(INOUT) :: WSLAKE !lake water storage (can be neg.) (mm)
  552. ! output
  553. REAL , INTENT(OUT) :: FSA !total absorbed solar radiation (w/m2)
  554. REAL , INTENT(OUT) :: FSR !total reflected solar radiation (w/m2)
  555. REAL , INTENT(OUT) :: FIRA !total net LW rad (w/m2) [+ to atm]
  556. REAL , INTENT(OUT) :: FSH !total sensible heat (w/m2) [+ to atm]
  557. REAL , INTENT(OUT) :: FCEV !canopy evap heat (w/m2) [+ to atm]
  558. REAL , INTENT(OUT) :: FGEV !ground evap heat (w/m2) [+ to atm]
  559. REAL , INTENT(OUT) :: FCTR !transpiration heat (w/m2) [+ to atm]
  560. REAL , INTENT(OUT) :: SSOIL !ground heat flux (w/m2) [+ to soil]
  561. REAL , INTENT(OUT) :: TRAD !surface radiative temperature (k)
  562. REAL , INTENT(OUT) :: TS !surface temperature (k)
  563. REAL , INTENT(OUT) :: ECAN !evaporation of intercepted water (mm/s)
  564. REAL , INTENT(OUT) :: ETRAN !transpiration rate (mm/s)
  565. REAL , INTENT(OUT) :: EDIR !soil surface evaporation rate (mm/s]
  566. REAL , INTENT(OUT) :: RUNSRF !surface runoff [mm/s]
  567. REAL , INTENT(OUT) :: RUNSUB !baseflow (saturation excess) [mm/s]
  568. REAL , INTENT(OUT) :: PSN !total photosynthesis (umol co2/m2/s) [+]
  569. REAL , INTENT(OUT) :: APAR !photosyn active energy by canopy (w/m2)
  570. REAL , INTENT(OUT) :: SAV !solar rad absorbed by veg. (w/m2)
  571. REAL , INTENT(OUT) :: SAG !solar rad absorbed by ground (w/m2)
  572. REAL , INTENT(OUT) :: FSNO !snow cover fraction on the ground (-)
  573. REAL , INTENT(OUT) :: FVEG !green vegetation fraction [0.0-1.0]
  574. REAL , INTENT(OUT) :: ALBEDO !surface albedo [-]
  575. REAL , INTENT(OUT) :: ERRWAT !water error [kg m{-2}]
  576. REAL , INTENT(OUT) :: QMELT !snowmelt [mm/s]
  577. REAL , INTENT(OUT) :: PONDING!surface ponding [mm]
  578. REAL , INTENT(OUT) :: PONDING1!surface ponding [mm]
  579. REAL , INTENT(OUT) :: PONDING2!surface ponding [mm]
  580. !jref:start; output
  581. REAL , INTENT(OUT) :: CHSTAR !effective exchange coefficient
  582. REAL , INTENT(OUT) :: TSTAR !effective skin temperature
  583. REAL , INTENT(OUT) :: T2MV !2-m air temperature over vegetated part [k]
  584. REAL , INTENT(OUT) :: T2MB !2-m air temperature over bare ground part [k]
  585. REAL, INTENT(OUT) :: RSSUN !sunlit leaf stomatal resistance (s/m)
  586. REAL, INTENT(OUT) :: RSSHA !shaded leaf stomatal resistance (s/m)
  587. REAL, INTENT(OUT) :: BGAP
  588. REAL, INTENT(OUT) :: WGAP
  589. REAL, INTENT(OUT) :: GAP
  590. REAL, INTENT(OUT) :: TGV
  591. REAL, INTENT(OUT) :: TGB
  592. REAL, INTENT(OUT) :: Q1
  593. REAL, INTENT(OUT) :: EMISSI
  594. !jref:end
  595. ! local
  596. INTEGER :: IZ !do-loop index
  597. INTEGER, DIMENSION(-NSNOW+1:NSOIL) :: IMELT !phase change index [1-melt; 2-freeze]
  598. REAL :: CMC !intercepted water (CANICE+CANLIQ) (mm)
  599. REAL :: TAUX !wind stress: e-w (n/m2)
  600. REAL :: TAUY !wind stress: n-s (n/m2)
  601. REAL :: RHOAIR !density air (kg/m3)
  602. ! REAL, DIMENSION( 1: 5) :: VOCFLX !voc fluxes [ug C m-2 h-1]
  603. REAL, DIMENSION(-NSNOW+1:NSOIL) :: DZSNSO !snow/soil layer thickness [m]
  604. REAL :: THAIR !potential temperature (k)
  605. REAL :: QAIR !specific humidity (kg/kg) (q2/(1+q2))
  606. REAL :: EAIR !vapor pressure air (pa)
  607. REAL, DIMENSION( 1: 2) :: SOLAD !incoming direct solar rad (w/m2)
  608. REAL, DIMENSION( 1: 2) :: SOLAI !incoming diffuse solar rad (w/m2)
  609. REAL :: QPRECC !convective precipitation (mm/s)
  610. REAL :: QPRECL !large-scale precipitation (mm/s)
  611. REAL :: IGS !growing season index (0=off, 1=on)
  612. REAL :: ELAI !leaf area index, after burying by snow
  613. REAL :: ESAI !stem area index, after burying by snow
  614. REAL :: BEVAP !soil water evaporation factor (0 - 1)
  615. REAL, DIMENSION( 1:NSOIL) :: BTRANI !Soil water transpiration factor (0 - 1)
  616. REAL :: BTRAN !soil water transpiration factor (0 - 1)
  617. REAL :: HTOP !top of canopy layer (m)
  618. REAL :: QIN !groundwater recharge [mm/s]
  619. REAL :: QDIS !groundwater discharge [mm/s]
  620. REAL, DIMENSION( 1:NSOIL) :: SICE !soil ice content (m3/m3)
  621. REAL, DIMENSION(-NSNOW+1: 0) :: SNICEV !partial volume ice of snow [m3/m3]
  622. REAL, DIMENSION(-NSNOW+1: 0) :: SNLIQV !partial volume liq of snow [m3/m3]
  623. REAL, DIMENSION(-NSNOW+1: 0) :: EPORE !effective porosity [m3/m3]
  624. REAL :: TOTSC !total soil carbon (g/m2)
  625. REAL :: TOTLB !total living carbon (g/m2)
  626. REAL :: T2M !2-meter air temperature (k)
  627. REAL :: QDEW !ground surface dew rate [mm/s]
  628. REAL :: QVAP !ground surface evap. rate [mm/s]
  629. REAL :: LATHEA !latent heat [j/kg]
  630. REAL :: SWDOWN !downward solar [w/m2]
  631. REAL :: BEG_WB !water storage at begin of a step [mm]
  632. !jref:start
  633. REAL :: FSRV
  634. REAL :: FSRG
  635. REAL,INTENT(OUT) :: Q2V
  636. REAL,INTENT(OUT) :: Q2B
  637. REAL :: Q2E
  638. REAL :: QFX
  639. REAL,INTENT(OUT) :: CHV !sensible heat exchange coefficient over vegetated fraction
  640. REAL,INTENT(OUT) :: CHB !sensible heat exchange coefficient over bare-ground
  641. !jref:end
  642. ! carbon
  643. ! inputs
  644. REAL , INTENT(IN) :: CO2AIR !atmospheric co2 concentration (pa)
  645. REAL , INTENT(IN) :: O2AIR !atmospheric o2 concentration (pa)
  646. ! inputs and outputs : prognostic variables
  647. REAL , INTENT(INOUT) :: LFMASS !leaf mass [g/m2]
  648. REAL , INTENT(INOUT) :: RTMASS !mass of fine roots [g/m2]
  649. REAL , INTENT(INOUT) :: STMASS !stem mass [g/m2]
  650. REAL , INTENT(INOUT) :: WOOD !mass of wood (incl. woody roots) [g/m2]
  651. REAL , INTENT(INOUT) :: STBLCP !stable carbon in deep soil [g/m2]
  652. REAL , INTENT(INOUT) :: FASTCP !short-lived carbon, shallow soil [g/m2]
  653. REAL , INTENT(INOUT) :: LAI !leaf area index [-]
  654. REAL , INTENT(INOUT) :: SAI !stem area index [-]
  655. ! outputs
  656. REAL , INTENT(OUT) :: NEE !net ecosys exchange (g/m2/s CO2)
  657. REAL , INTENT(OUT) :: GPP !net instantaneous assimilation [g/m2/s C]
  658. REAL , INTENT(OUT) :: NPP !net primary productivity [g/m2/s C]
  659. REAL :: AUTORS !net ecosystem respiration (g/m2/s C)
  660. REAL :: HETERS !organic respiration (g/m2/s C)
  661. REAL :: TROOT !root-zone averaged temperature (k)
  662. ! INTENT (OUT) variables need to be assigned a value. These normally get assigned values
  663. ! only if DVEG == 2.
  664. nee = 0.0
  665. npp = 0.0
  666. gpp = 0.0
  667. ! --------------------------------------------------------------------------------------------------
  668. ! re-process atmospheric forcing
  669. CALL ATM (SFCPRS ,SFCTMP ,Q2 ,PRCP ,SOLDN ,COSZ ,THAIR , &
  670. QAIR ,EAIR ,RHOAIR ,QPRECC ,QPRECL ,SOLAD ,SOLAI , &
  671. SWDOWN )
  672. ! snow/soil layer thickness (m)
  673. DO IZ = ISNOW+1, NSOIL
  674. IF(IZ == ISNOW+1) THEN
  675. DZSNSO(IZ) = - ZSNSO(IZ)
  676. ELSE
  677. DZSNSO(IZ) = ZSNSO(IZ-1) - ZSNSO(IZ)
  678. END IF
  679. END DO
  680. ! root-zone temperature
  681. TROOT = 0.
  682. DO IZ=1,NROOT
  683. TROOT = TROOT + STC(IZ)*DZSNSO(IZ)/(-ZSOIL(NROOT))
  684. ENDDO
  685. ! total water storage for water balance check
  686. IF(IST == 1) THEN
  687. BEG_WB = CANLIQ + CANICE + SNEQV + WA
  688. DO IZ = 1,NSOIL
  689. BEG_WB = BEG_WB + SMC(IZ) * DZSNSO(IZ) * 1000.
  690. END DO
  691. END IF
  692. ! vegetation phenology
  693. CALL PHENOLOGY (VEGTYP , SNOWH , TV , LAT , YEARLEN , JULIAN , & !in
  694. LAI , SAI , TROOT , HTOP , ELAI , ESAI ,IGS)
  695. !input GVF should be consistent with LAI
  696. IF(DVEG == 1) THEN
  697. FVEG = SHDFAC
  698. IF(FVEG <= 0.05) FVEG = 0.05
  699. ELSE IF (DVEG == 2 .or. DVEG == 3) THEN
  700. FVEG = 1.-EXP(-0.52*(LAI+SAI))
  701. IF(FVEG <= 0.05) FVEG = 0.05
  702. ELSE IF (DVEG == 4) THEN
  703. FVEG = SHDMAX
  704. IF(FVEG <= 0.05) FVEG = 0.05
  705. ELSE
  706. WRITE(*,*) "-------- FATAL CALLED IN SFLX -----------"
  707. CALL wrf_error_fatal("Namelist parameter DVEG unknown")
  708. ENDIF
  709. ! CALL PHENOLOGY (VEGTYP,IMONTH ,IDAY ,SNOWH ,TV ,LAT , & !in
  710. ! LAI ,SAI ,TROOT , & !in
  711. ! HTOP ,ELAI ,ESAI ,IGS ) !out
  712. ! compute energy budget (momentum & energy fluxes and phase changes)
  713. CALL ENERGY (ICE ,VEGTYP ,IST ,ISC ,NSNOW ,NSOIL , & !in
  714. ISNOW ,NROOT ,DT ,RHOAIR ,SFCPRS ,QAIR , & !in
  715. SFCTMP ,THAIR ,LWDN ,UU ,VV ,ZLVL , & !in
  716. CO2AIR ,O2AIR ,SOLAD ,SOLAI ,COSZ ,IGS , & !in
  717. EAIR ,HTOP ,TBOT ,ZBOT ,ZSNSO ,ZSOIL , & !in
  718. ELAI ,ESAI ,CSOIL ,FWET ,FOLN , & !in
  719. FVEG , & !in
  720. QSNOW ,DZSNSO ,LAT ,CANLIQ ,CANICE ,iloc, jloc , & !in
  721. IMELT ,SNICEV ,SNLIQV ,EPORE ,T2M ,FSNO , & !out
  722. SAV ,SAG ,QMELT ,FSA ,FSR ,TAUX , & !out
  723. TAUY ,FIRA ,FSH ,FCEV ,FGEV ,FCTR , & !out
  724. TRAD ,PSN ,APAR ,SSOIL ,BTRANI ,BTRAN , & !out
  725. PONDING,TS ,LATHEA , & !out
  726. TV ,TG ,STC ,SNOWH ,EAH ,TAH , & !inout
  727. SNEQVO ,SNEQV ,SH2O ,SMC ,SNICE ,SNLIQ , & !inout
  728. ALBOLD ,CM ,CH ,DX ,DZ8W ,Q2 , & !inout
  729. !jref:start
  730. QC ,PBLH ,QSFC ,PSFC ,ISURBAN,IZ0TLND, & !in
  731. CHSTAR ,TSTAR ,T2MV ,T2MB ,FSRV , &
  732. FSRG ,RSSUN ,RSSHA ,BGAP ,WGAP, GAP,TGV,TGB,&
  733. Q1 ,Q2V ,Q2B ,Q2E ,CHV ,CHB , & !out
  734. EMISSI) !out
  735. !jref:end
  736. SICE(:) = MAX(0.0, SMC(:) - SH2O(:))
  737. SNEQVO = SNEQV
  738. QVAP = MAX( FGEV/LATHEA, 0.) ! positive part of fgev
  739. QDEW = ABS( MIN(FGEV/LATHEA, 0.)) ! negative part of fgev
  740. EDIR = QVAP - QDEW
  741. ! compute water budgets (water storages, ET components, and runoff)
  742. CALL WATER (VEGTYP ,NSNOW ,NSOIL ,IMELT ,DT ,UU , & !in
  743. VV ,FCEV ,FCTR ,QPRECC ,QPRECL ,ELAI , & !in
  744. ESAI ,SFCTMP ,QVAP ,QDEW ,ZSOIL ,BTRANI , & !in
  745. FICEOLD,PONDING,TG ,IST ,FVEG ,iloc,jloc , & !in
  746. ISNOW ,CANLIQ ,CANICE ,TV ,SNOWH ,SNEQV , & !inout
  747. SNICE ,SNLIQ ,STC ,ZSNSO ,SH2O ,SMC , & !inout
  748. SICE ,ZWT ,WA ,WT ,DZSNSO ,WSLAKE , & !inout
  749. CMC ,ECAN ,ETRAN ,FWET ,RUNSRF ,RUNSUB , & !out
  750. QIN ,QDIS ,QSNOW ,PONDING1 ,PONDING2,&
  751. ISURBAN) !out
  752. ! write(*,'(a20,10F15.5)') 'SFLX:RUNOFF=',RUNSRF*DT,RUNSUB*DT,EDIR*DT
  753. ! compute carbon budgets (carbon storages and co2 & bvoc fluxes)
  754. IF (DVEG == 2) THEN
  755. CALL CARBON (NSNOW ,NSOIL ,VEGTYP ,NROOT ,DT ,ZSOIL , & !in
  756. DZSNSO ,STC ,SMC ,TV ,TG ,PSN , & !in
  757. FOLN ,SMCMAX ,BTRAN ,APAR ,FVEG ,IGS , & !in
  758. TROOT ,IST ,LAT ,iloc ,jloc , & !in
  759. LFMASS ,RTMASS ,STMASS ,WOOD ,STBLCP ,FASTCP , & !inout
  760. GPP ,NPP ,NEE ,AUTORS ,HETERS ,TOTSC , & !out
  761. TOTLB ,LAI ,SAI ) !out
  762. END IF
  763. ! water and energy balance check
  764. CALL ERROR (SWDOWN ,FSA ,FSR ,FIRA ,FSH ,FCEV , & !in
  765. FGEV ,FCTR ,SSOIL ,BEG_WB ,CANLIQ ,CANICE , & !in
  766. SNEQV ,WA ,SMC ,DZSNSO ,PRCP ,ECAN , & !in
  767. ETRAN ,EDIR ,RUNSRF ,RUNSUB ,DT ,NSOIL , & !in
  768. NSNOW ,IST ,ERRWAT ,ILOC , JLOC ,FVEG , &
  769. SAV ,SAG ,FSRV ,FSRG) !in ( Except ERRWAT, which is out )
  770. ! urban - jref
  771. QFX = ETRAN + ECAN + EDIR
  772. IF ( VEGTYP == ISURBAN ) THEN
  773. QSFC = (QFX/RHOAIR*CHSTAR) + QAIR
  774. Q2B = QSFC
  775. END IF
  776. IF(SWDOWN.NE.0.) THEN
  777. ALBEDO = FSR / SWDOWN
  778. ELSE
  779. ALBEDO = -999.9
  780. END IF
  781. END SUBROUTINE NOAHMP_SFLX
  782. ! ==================================================================================================
  783. SUBROUTINE ATM (SFCPRS ,SFCTMP ,Q2 ,PRCP ,SOLDN ,COSZ ,THAIR , &
  784. QAIR ,EAIR ,RHOAIR ,QPRECC ,QPRECL ,SOLAD ,SOLAI , &
  785. SWDOWN )
  786. ! --------------------------------------------------------------------------------------------------
  787. ! re-process atmospheric forcing
  788. ! --------------------------------------------------------------------------------------------------
  789. IMPLICIT NONE
  790. ! --------------------------------------------------------------------------------------------------
  791. ! inputs
  792. REAL , INTENT(IN) :: SFCPRS !pressure (pa)
  793. REAL , INTENT(IN) :: SFCTMP !surface air temperature [k]
  794. REAL , INTENT(IN) :: Q2 !mixing ratio (kg/kg)
  795. REAL , INTENT(IN) :: SOLDN !downward shortwave radiation (w/m2)
  796. REAL , INTENT(IN) :: PRCP !precipitation rate (kg m-2 s-1)
  797. REAL , INTENT(IN) :: COSZ !cosine solar zenith angle [0-1]
  798. ! outputs
  799. REAL , INTENT(OUT) :: THAIR !potential temperature (k)
  800. REAL , INTENT(OUT) :: QAIR !specific humidity (kg/kg) (q2/(1+q2))
  801. REAL , INTENT(OUT) :: EAIR !vapor pressure air (pa)
  802. REAL, DIMENSION( 1: 2), INTENT(OUT) :: SOLAD !incoming direct solar radiation (w/m2)
  803. REAL, DIMENSION( 1: 2), INTENT(OUT) :: SOLAI !incoming diffuse solar radiation (w/m2)
  804. REAL , INTENT(OUT) :: QPRECC !convective precipitation (mm/s)
  805. REAL , INTENT(OUT) :: QPRECL !large-scale precipitation (mm/s)
  806. REAL , INTENT(OUT) :: RHOAIR !density air (kg/m3)
  807. REAL , INTENT(OUT) :: SWDOWN !downward solar filtered by sun angle [w/m2]
  808. !locals
  809. REAL :: PAIR !atm bottom level pressure (pa)
  810. ! --------------------------------------------------------------------------------------------------
  811. !jref: seems like PAIR should be P1000mb??
  812. PAIR = SFCPRS ! atm bottom level pressure (pa)
  813. THAIR = SFCTMP * (SFCPRS/PAIR)**(RAIR/CPAIR)
  814. !jref: mixing ratio to specific
  815. QAIR = Q2 / (1.0+Q2) ! mixing ratio to specific humidity [kg/kg]
  816. ! QAIR = Q2 ! GLDAS forcing: Q2 = specific humidity [kg/kg]
  817. EAIR = QAIR*SFCPRS / (0.622+0.378*QAIR)
  818. RHOAIR = (SFCPRS-0.378*EAIR) / (RAIR*SFCTMP)
  819. QPRECC = 0.10 * PRCP ! should be from the atmospheric model
  820. QPRECL = 0.90 * PRCP ! should be from the atmospheric model
  821. IF(COSZ <= 0.) THEN
  822. SWDOWN = 0.
  823. ELSE
  824. SWDOWN = SOLDN
  825. END IF
  826. SOLAD(1) = SWDOWN*0.7*0.5 ! direct vis
  827. SOLAD(2) = SWDOWN*0.7*0.5 ! direct nir
  828. SOLAI(1) = SWDOWN*0.3*0.5 ! diffuse vis
  829. SOLAI(2) = SWDOWN*0.3*0.5 ! diffuse nir
  830. END SUBROUTINE ATM
  831. ! ==================================================================================================
  832. ! --------------------------------------------------------------------------------------------------
  833. SUBROUTINE PHENOLOGY (VEGTYP , SNOWH , TV , LAT , YEARLEN , JULIAN , & !in
  834. LAI , SAI , TROOT , HTOP , ELAI , ESAI , IGS)
  835. ! --------------------------------------------------------------------------------------------------
  836. ! vegetation phenology considering vegeation canopy being buries by snow and evolution in time
  837. ! --------------------------------------------------------------------------------------------------
  838. USE NOAHMP_VEG_PARAMETERS
  839. ! --------------------------------------------------------------------------------------------------
  840. IMPLICIT NONE
  841. ! --------------------------------------------------------------------------------------------------
  842. ! inputs
  843. INTEGER , INTENT(IN ) :: VEGTYP !vegetation type
  844. REAL , INTENT(IN ) :: SNOWH !snow height [m]
  845. REAL , INTENT(IN ) :: TV

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