PageRenderTime 53ms CodeModel.GetById 45ms RepoModel.GetById 0ms app.codeStats 1ms

/wrfv2_fire/phys/module_sf_noahlsm.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 4386 lines | 1824 code | 407 blank | 2155 comment | 16 complexity | 10a90af5021bbb5054ddb7df958396ba MD5 | raw file
Possible License(s): AGPL-1.0
  1. MODULE module_sf_noahlsm
  2. USE module_model_constants, only : CP, R_D, XLF, XLV, RHOWATER, STBOLT, KARMAN
  3. ! REAL, PARAMETER :: CP = 1004.5
  4. REAL, PARAMETER :: RD = 287.04, SIGMA = 5.67E-8, &
  5. CPH2O = 4.218E+3,CPICE = 2.106E+3, &
  6. LSUBF = 3.335E+5, &
  7. EMISSI_S = 0.95
  8. ! VEGETATION PARAMETERS
  9. INTEGER :: LUCATS , BARE
  10. INTEGER :: NATURAL
  11. integer, PARAMETER :: NLUS=50
  12. CHARACTER(LEN=256) LUTYPE
  13. INTEGER, DIMENSION(1:NLUS) :: NROTBL
  14. real, dimension(1:NLUS) :: SNUPTBL, RSTBL, RGLTBL, HSTBL, &
  15. SHDTBL, MAXALB, &
  16. EMISSMINTBL, EMISSMAXTBL, &
  17. LAIMINTBL, LAIMAXTBL, &
  18. Z0MINTBL, Z0MAXTBL, &
  19. ALBEDOMINTBL, ALBEDOMAXTBL
  20. REAL :: TOPT_DATA,CMCMAX_DATA,CFACTR_DATA,RSMAX_DATA
  21. ! SOIL PARAMETERS
  22. INTEGER :: SLCATS
  23. INTEGER, PARAMETER :: NSLTYPE=30
  24. CHARACTER(LEN=256) SLTYPE
  25. REAL, DIMENSION (1:NSLTYPE) :: BB,DRYSMC,F11, &
  26. MAXSMC, REFSMC,SATPSI,SATDK,SATDW, WLTSMC,QTZ
  27. ! LSM GENERAL PARAMETERS
  28. INTEGER :: SLPCATS
  29. INTEGER, PARAMETER :: NSLOPE=30
  30. REAL, DIMENSION (1:NSLOPE) :: SLOPE_DATA
  31. REAL :: SBETA_DATA,FXEXP_DATA,CSOIL_DATA,SALP_DATA,REFDK_DATA, &
  32. REFKDT_DATA,FRZK_DATA,ZBOT_DATA, SMLOW_DATA,SMHIGH_DATA, &
  33. CZIL_DATA
  34. REAL :: LVCOEF_DATA
  35. CHARACTER*256 :: err_message
  36. integer, private :: iloc, jloc
  37. !
  38. CONTAINS
  39. !
  40. SUBROUTINE SFLX (IILOC,JJLOC,ICE,FFROZP,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C
  41. LOCAL, & !L
  42. LLANDUSE, LSOIL, & !CL
  43. LWDN,SOLDN,SOLNET,SFCPRS,PRCP,SFCTMP,Q2,SFCSPD, & !F
  44. COSZ,PRCPRAIN, SOLARDIRECT, & !F
  45. TH2,Q2SAT,DQSDT2, & !I
  46. VEGTYP,SOILTYP,SLOPETYP,SHDFAC,SHDMIN,SHDMAX, & !I
  47. ALB, SNOALB,TBOT, Z0BRD, Z0, EMISSI, EMBRD, & !S
  48. CMC,T1,STC,SMC,SH2O,SNOWH,SNEQV,ALBEDO,CH,CM, & !H
  49. ! ----------------------------------------------------------------------
  50. ! OUTPUTS, DIAGNOSTICS, PARAMETERS BELOW GENERALLY NOT NECESSARY WHEN
  51. ! COUPLED WITH E.G. A NWP MODEL (SUCH AS THE NOAA/NWS/NCEP MESOSCALE ETA
  52. ! MODEL). OTHER APPLICATIONS MAY REQUIRE DIFFERENT OUTPUT VARIABLES.
  53. ! ----------------------------------------------------------------------
  54. ETA,SHEAT, ETA_KINEMATIC,FDOWN, & !O
  55. EC,EDIR,ET,ETT,ESNOW,DRIP,DEW, & !O
  56. BETA,ETP,SSOIL, & !O
  57. FLX1,FLX2,FLX3, & !O
  58. SNOMLT,SNCOVR, & !O
  59. RUNOFF1,RUNOFF2,RUNOFF3, & !O
  60. RC,PC,RSMIN,XLAI,RCS,RCT,RCQ,RCSOIL, & !O
  61. SOILW,SOILM,Q1,SMAV, & !D
  62. RDLAI2D,USEMONALB, &
  63. SNOTIME1, &
  64. RIBB, &
  65. SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT) !P
  66. ! ----------------------------------------------------------------------
  67. ! SUBROUTINE SFLX - UNIFIED NOAHLSM VERSION 1.0 JULY 2007
  68. ! ----------------------------------------------------------------------
  69. ! SUB-DRIVER FOR "Noah LSM" FAMILY OF PHYSICS SUBROUTINES FOR A
  70. ! SOIL/VEG/SNOWPACK LAND-SURFACE MODEL TO UPDATE SOIL MOISTURE, SOIL
  71. ! ICE, SOIL TEMPERATURE, SKIN TEMPERATURE, SNOWPACK WATER CONTENT,
  72. ! SNOWDEPTH, AND ALL TERMS OF THE SURFACE ENERGY BALANCE AND SURFACE
  73. ! WATER BALANCE (EXCLUDING INPUT ATMOSPHERIC FORCINGS OF DOWNWARD
  74. ! RADIATION AND PRECIP)
  75. ! ----------------------------------------------------------------------
  76. ! SFLX ARGUMENT LIST KEY:
  77. ! ----------------------------------------------------------------------
  78. ! C CONFIGURATION INFORMATION
  79. ! L LOGICAL
  80. ! CL 4-string character bearing logical meaning
  81. ! F FORCING DATA
  82. ! I OTHER (INPUT) FORCING DATA
  83. ! S SURFACE CHARACTERISTICS
  84. ! H HISTORY (STATE) VARIABLES
  85. ! O OUTPUT VARIABLES
  86. ! D DIAGNOSTIC OUTPUT
  87. ! P Parameters
  88. ! Msic Miscellaneous terms passed from gridded driver
  89. ! ----------------------------------------------------------------------
  90. ! 1. CONFIGURATION INFORMATION (C):
  91. ! ----------------------------------------------------------------------
  92. ! ICE SEA-ICE FLAG (=1: SEA-ICE, =0: LAND (NO ICE), =-1 LAND-ICE).
  93. ! DT TIMESTEP (SEC) (DT SHOULD NOT EXCEED 3600 SECS, RECOMMEND
  94. ! 1800 SECS OR LESS)
  95. ! ZLVL HEIGHT (M) ABOVE GROUND OF ATMOSPHERIC FORCING VARIABLES
  96. ! NSOIL NUMBER OF SOIL LAYERS (AT LEAST 2, AND NOT GREATER THAN
  97. ! PARAMETER NSOLD SET BELOW)
  98. ! SLDPTH THE THICKNESS OF EACH SOIL LAYER (M)
  99. ! ----------------------------------------------------------------------
  100. ! 2. LOGICAL:
  101. ! ----------------------------------------------------------------------
  102. ! LCH Exchange coefficient (Ch) calculation flag (false: using
  103. ! ch-routine SFCDIF; true: Ch is brought in)
  104. ! LOCAL Flag for local-site simulation (where there is no
  105. ! maps for albedo, veg fraction, and roughness
  106. ! true: all LSM parameters (inluding albedo, veg fraction and
  107. ! roughness length) will be defined by three tables
  108. ! LLANDUSE (=USGS, using USGS landuse classification)
  109. ! LSOIL (=STAS, using FAO/STATSGO soil texture classification)
  110. ! ----------------------------------------------------------------------
  111. ! 3. FORCING DATA (F):
  112. ! ----------------------------------------------------------------------
  113. ! LWDN LW DOWNWARD RADIATION (W M-2; POSITIVE, NOT NET LONGWAVE)
  114. ! SOLDN SOLAR DOWNWARD RADIATION (W M-2; POSITIVE, NOT NET SOLAR)
  115. ! SOLNET NET DOWNWARD SOLAR RADIATION ((W M-2; POSITIVE)
  116. ! SFCPRS PRESSURE AT HEIGHT ZLVL ABOVE GROUND (PASCALS)
  117. ! PRCP PRECIP RATE (KG M-2 S-1) (NOTE, THIS IS A RATE)
  118. ! SFCTMP AIR TEMPERATURE (K) AT HEIGHT ZLVL ABOVE GROUND
  119. ! TH2 AIR POTENTIAL TEMPERATURE (K) AT HEIGHT ZLVL ABOVE GROUND
  120. ! Q2 MIXING RATIO AT HEIGHT ZLVL ABOVE GROUND (KG KG-1)
  121. ! COSZ Solar zenith angle (not used for now)
  122. ! PRCPRAIN Liquid-precipitation rate (KG M-2 S-1) (not used)
  123. ! SOLARDIRECT Direct component of downward solar radiation (W M-2) (not used)
  124. ! FFROZP FRACTION OF FROZEN PRECIPITATION
  125. ! ----------------------------------------------------------------------
  126. ! 4. OTHER FORCING (INPUT) DATA (I):
  127. ! ----------------------------------------------------------------------
  128. ! SFCSPD WIND SPEED (M S-1) AT HEIGHT ZLVL ABOVE GROUND
  129. ! Q2SAT SAT SPECIFIC HUMIDITY AT HEIGHT ZLVL ABOVE GROUND (KG KG-1)
  130. ! DQSDT2 SLOPE OF SAT SPECIFIC HUMIDITY CURVE AT T=SFCTMP
  131. ! (KG KG-1 K-1)
  132. ! ----------------------------------------------------------------------
  133. ! 5. CANOPY/SOIL CHARACTERISTICS (S):
  134. ! ----------------------------------------------------------------------
  135. ! VEGTYP VEGETATION TYPE (INTEGER INDEX)
  136. ! SOILTYP SOIL TYPE (INTEGER INDEX)
  137. ! SLOPETYP CLASS OF SFC SLOPE (INTEGER INDEX)
  138. ! SHDFAC AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
  139. ! (FRACTION= 0.0-1.0)
  140. ! SHDMIN MINIMUM AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
  141. ! (FRACTION= 0.0-1.0) <= SHDFAC
  142. ! PTU PHOTO THERMAL UNIT (PLANT PHENOLOGY FOR ANNUALS/CROPS)
  143. ! (NOT YET USED, BUT PASSED TO REDPRM FOR FUTURE USE IN
  144. ! VEG PARMS)
  145. ! ALB BACKROUND SNOW-FREE SURFACE ALBEDO (FRACTION), FOR JULIAN
  146. ! DAY OF YEAR (USUALLY FROM TEMPORAL INTERPOLATION OF
  147. ! MONTHLY MEAN VALUES' CALLING PROG MAY OR MAY NOT
  148. ! INCLUDE DIURNAL SUN ANGLE EFFECT)
  149. ! SNOALB UPPER BOUND ON MAXIMUM ALBEDO OVER DEEP SNOW (E.G. FROM
  150. ! ROBINSON AND KUKLA, 1985, J. CLIM. & APPL. METEOR.)
  151. ! TBOT BOTTOM SOIL TEMPERATURE (LOCAL YEARLY-MEAN SFC AIR
  152. ! TEMPERATURE)
  153. ! Z0BRD Background fixed roughness length (M)
  154. ! Z0 Time varying roughness length (M) as function of snow depth
  155. !
  156. ! EMBRD Background surface emissivity (between 0 and 1)
  157. ! EMISSI Surface emissivity (between 0 and 1)
  158. ! ----------------------------------------------------------------------
  159. ! 6. HISTORY (STATE) VARIABLES (H):
  160. ! ----------------------------------------------------------------------
  161. ! CMC CANOPY MOISTURE CONTENT (M)
  162. ! T1 GROUND/CANOPY/SNOWPACK) EFFECTIVE SKIN TEMPERATURE (K)
  163. ! STC(NSOIL) SOIL TEMP (K)
  164. ! SMC(NSOIL) TOTAL SOIL MOISTURE CONTENT (VOLUMETRIC FRACTION)
  165. ! SH2O(NSOIL) UNFROZEN SOIL MOISTURE CONTENT (VOLUMETRIC FRACTION)
  166. ! NOTE: FROZEN SOIL MOISTURE = SMC - SH2O
  167. ! SNOWH ACTUAL SNOW DEPTH (M)
  168. ! SNEQV LIQUID WATER-EQUIVALENT SNOW DEPTH (M)
  169. ! NOTE: SNOW DENSITY = SNEQV/SNOWH
  170. ! ALBEDO SURFACE ALBEDO INCLUDING SNOW EFFECT (UNITLESS FRACTION)
  171. ! =SNOW-FREE ALBEDO (ALB) WHEN SNEQV=0, OR
  172. ! =FCT(MSNOALB,ALB,VEGTYP,SHDFAC,SHDMIN) WHEN SNEQV>0
  173. ! CH SURFACE EXCHANGE COEFFICIENT FOR HEAT AND MOISTURE
  174. ! (M S-1); NOTE: CH IS TECHNICALLY A CONDUCTANCE SINCE
  175. ! IT HAS BEEN MULTIPLIED BY WIND SPEED.
  176. ! CM SURFACE EXCHANGE COEFFICIENT FOR MOMENTUM (M S-1); NOTE:
  177. ! CM IS TECHNICALLY A CONDUCTANCE SINCE IT HAS BEEN
  178. ! MULTIPLIED BY WIND SPEED.
  179. ! ----------------------------------------------------------------------
  180. ! 7. OUTPUT (O):
  181. ! ----------------------------------------------------------------------
  182. ! OUTPUT VARIABLES NECESSARY FOR A COUPLED NUMERICAL WEATHER PREDICTION
  183. ! MODEL, E.G. NOAA/NWS/NCEP MESOSCALE ETA MODEL. FOR THIS APPLICATION,
  184. ! THE REMAINING OUTPUT/DIAGNOSTIC/PARAMETER BLOCKS BELOW ARE NOT
  185. ! NECESSARY. OTHER APPLICATIONS MAY REQUIRE DIFFERENT OUTPUT VARIABLES.
  186. ! ETA ACTUAL LATENT HEAT FLUX (W m-2: NEGATIVE, IF UP FROM
  187. ! SURFACE)
  188. ! ETA_KINEMATIC atctual latent heat flux in Kg m-2 s-1
  189. ! SHEAT SENSIBLE HEAT FLUX (W M-2: NEGATIVE, IF UPWARD FROM
  190. ! SURFACE)
  191. ! FDOWN Radiation forcing at the surface (W m-2) = SOLDN*(1-alb)+LWDN
  192. ! ----------------------------------------------------------------------
  193. ! EC CANOPY WATER EVAPORATION (W m-2)
  194. ! EDIR DIRECT SOIL EVAPORATION (W m-2)
  195. ! ET(NSOIL) PLANT TRANSPIRATION FROM A PARTICULAR ROOT (SOIL) LAYER
  196. ! (W m-2)
  197. ! ETT TOTAL PLANT TRANSPIRATION (W m-2)
  198. ! ESNOW SUBLIMATION FROM (OR DEPOSITION TO IF <0) SNOWPACK
  199. ! (W m-2)
  200. ! DRIP THROUGH-FALL OF PRECIP AND/OR DEW IN EXCESS OF CANOPY
  201. ! WATER-HOLDING CAPACITY (M)
  202. ! DEW DEWFALL (OR FROSTFALL FOR T<273.15) (M)
  203. ! ----------------------------------------------------------------------
  204. ! BETA RATIO OF ACTUAL/POTENTIAL EVAP (DIMENSIONLESS)
  205. ! ETP POTENTIAL EVAPORATION (W m-2)
  206. ! SSOIL SOIL HEAT FLUX (W M-2: NEGATIVE IF DOWNWARD FROM SURFACE)
  207. ! ----------------------------------------------------------------------
  208. ! FLX1 PRECIP-SNOW SFC (W M-2)
  209. ! FLX2 FREEZING RAIN LATENT HEAT FLUX (W M-2)
  210. ! FLX3 PHASE-CHANGE HEAT FLUX FROM SNOWMELT (W M-2)
  211. ! ----------------------------------------------------------------------
  212. ! SNOMLT SNOW MELT (M) (WATER EQUIVALENT)
  213. ! SNCOVR FRACTIONAL SNOW COVER (UNITLESS FRACTION, 0-1)
  214. ! ----------------------------------------------------------------------
  215. ! RUNOFF1 SURFACE RUNOFF (M S-1), NOT INFILTRATING THE SURFACE
  216. ! RUNOFF2 SUBSURFACE RUNOFF (M S-1), DRAINAGE OUT BOTTOM OF LAST
  217. ! SOIL LAYER (BASEFLOW)
  218. ! RUNOFF3 NUMERICAL TRUNCTATION IN EXCESS OF POROSITY (SMCMAX)
  219. ! FOR A GIVEN SOIL LAYER AT THE END OF A TIME STEP (M S-1).
  220. ! Note: the above RUNOFF2 is actually the sum of RUNOFF2 and RUNOFF3
  221. ! ----------------------------------------------------------------------
  222. ! RC CANOPY RESISTANCE (S M-1)
  223. ! PC PLANT COEFFICIENT (UNITLESS FRACTION, 0-1) WHERE PC*ETP
  224. ! = ACTUAL TRANSP
  225. ! XLAI LEAF AREA INDEX (DIMENSIONLESS)
  226. ! RSMIN MINIMUM CANOPY RESISTANCE (S M-1)
  227. ! RCS INCOMING SOLAR RC FACTOR (DIMENSIONLESS)
  228. ! RCT AIR TEMPERATURE RC FACTOR (DIMENSIONLESS)
  229. ! RCQ ATMOS VAPOR PRESSURE DEFICIT RC FACTOR (DIMENSIONLESS)
  230. ! RCSOIL SOIL MOISTURE RC FACTOR (DIMENSIONLESS)
  231. ! ----------------------------------------------------------------------
  232. ! 8. DIAGNOSTIC OUTPUT (D):
  233. ! ----------------------------------------------------------------------
  234. ! SOILW AVAILABLE SOIL MOISTURE IN ROOT ZONE (UNITLESS FRACTION
  235. ! BETWEEN SMCWLT AND SMCMAX)
  236. ! SOILM TOTAL SOIL COLUMN MOISTURE CONTENT (FROZEN+UNFROZEN) (M)
  237. ! Q1 Effective mixing ratio at surface (kg kg-1), used for
  238. ! diagnosing the mixing ratio at 2 meter for coupled model
  239. ! SMAV Soil Moisture Availability for each layer, as a fraction
  240. ! between SMCWLT and SMCMAX.
  241. ! Documentation for SNOTIME1 and SNOABL2 ?????
  242. ! What categories of arguments do these variables fall into ????
  243. ! Documentation for RIBB ?????
  244. ! What category of argument does RIBB fall into ?????
  245. ! ----------------------------------------------------------------------
  246. ! 9. PARAMETERS (P):
  247. ! ----------------------------------------------------------------------
  248. ! SMCWLT WILTING POINT (VOLUMETRIC)
  249. ! SMCDRY DRY SOIL MOISTURE THRESHOLD WHERE DIRECT EVAP FRM TOP
  250. ! LAYER ENDS (VOLUMETRIC)
  251. ! SMCREF SOIL MOISTURE THRESHOLD WHERE TRANSPIRATION BEGINS TO
  252. ! STRESS (VOLUMETRIC)
  253. ! SMCMAX POROSITY, I.E. SATURATED VALUE OF SOIL MOISTURE
  254. ! (VOLUMETRIC)
  255. ! NROOT NUMBER OF ROOT LAYERS, A FUNCTION OF VEG TYPE, DETERMINED
  256. ! IN SUBROUTINE REDPRM.
  257. ! ----------------------------------------------------------------------
  258. IMPLICIT NONE
  259. ! ----------------------------------------------------------------------
  260. ! DECLARATIONS - LOGICAL AND CHARACTERS
  261. ! ----------------------------------------------------------------------
  262. INTEGER, INTENT(IN) :: IILOC, JJLOC
  263. LOGICAL, INTENT(IN):: LOCAL
  264. LOGICAL :: FRZGRA, SNOWNG
  265. CHARACTER (LEN=256), INTENT(IN):: LLANDUSE, LSOIL
  266. ! ----------------------------------------------------------------------
  267. ! 1. CONFIGURATION INFORMATION (C):
  268. ! ----------------------------------------------------------------------
  269. INTEGER,INTENT(IN) :: ICE,NSOIL,SLOPETYP,SOILTYP,VEGTYP
  270. INTEGER, INTENT(IN) :: ISURBAN
  271. INTEGER,INTENT(OUT):: NROOT
  272. INTEGER KZ, K, iout
  273. ! ----------------------------------------------------------------------
  274. ! 2. LOGICAL:
  275. ! ----------------------------------------------------------------------
  276. LOGICAL, INTENT(IN) :: RDLAI2D
  277. LOGICAL, INTENT(IN) :: USEMONALB
  278. REAL, INTENT(IN) :: SHDMIN,SHDMAX,DT,DQSDT2,LWDN,PRCP,PRCPRAIN, &
  279. Q2,Q2SAT,SFCPRS,SFCSPD,SFCTMP, SNOALB, &
  280. SOLDN,SOLNET,TBOT,TH2,ZLVL, &
  281. FFROZP
  282. REAL, INTENT(OUT) :: EMBRD
  283. REAL, INTENT(OUT) :: ALBEDO
  284. REAL, INTENT(INOUT):: COSZ, SOLARDIRECT,CH,CM, &
  285. CMC,SNEQV,SNCOVR,SNOWH,T1,XLAI,SHDFAC,Z0BRD, &
  286. EMISSI, ALB
  287. REAL, INTENT(INOUT):: SNOTIME1
  288. REAL, INTENT(INOUT):: RIBB
  289. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SLDPTH
  290. REAL, DIMENSION(1:NSOIL), INTENT(OUT):: ET
  291. REAL, DIMENSION(1:NSOIL), INTENT(OUT):: SMAV
  292. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SH2O, SMC, STC
  293. REAL,DIMENSION(1:NSOIL):: RTDIS, ZSOIL
  294. REAL,INTENT(OUT) :: ETA_KINEMATIC,BETA,DEW,DRIP,EC,EDIR,ESNOW,ETA, &
  295. ETP,FLX1,FLX2,FLX3,SHEAT,PC,RUNOFF1,RUNOFF2, &
  296. RUNOFF3,RC,RSMIN,RCQ,RCS,RCSOIL,RCT,SSOIL, &
  297. SMCDRY,SMCMAX,SMCREF,SMCWLT,SNOMLT, SOILM, &
  298. SOILW,FDOWN,Q1
  299. REAL :: BEXP,CFACTR,CMCMAX,CSOIL,CZIL,DF1,DF1H,DF1A,DKSAT,DWSAT, &
  300. DSOIL,DTOT,ETT,FRCSNO,FRCSOI,EPSCA,F1,FXEXP,FRZX,HS, &
  301. KDT,LVH2O,PRCP1,PSISAT,QUARTZ,R,RCH,REFKDT,RR,RGL, &
  302. RSMAX, &
  303. RSNOW,SNDENS,SNCOND,SBETA,SN_NEW,SLOPE,SNUP,SALP,SOILWM, &
  304. SOILWW,T1V,T24,T2V,TH2V,TOPT,TFREEZ,TSNOW,ZBOT,Z0,PRCPF, &
  305. ETNS,PTU,LSUBS
  306. REAL :: LVCOEF
  307. REAL :: INTERP_FRACTION
  308. REAL :: LAIMIN, LAIMAX
  309. REAL :: ALBEDOMIN, ALBEDOMAX
  310. REAL :: EMISSMIN, EMISSMAX
  311. REAL :: Z0MIN, Z0MAX
  312. ! ----------------------------------------------------------------------
  313. ! DECLARATIONS - PARAMETERS
  314. ! ----------------------------------------------------------------------
  315. PARAMETER (TFREEZ = 273.15)
  316. PARAMETER (LVH2O = 2.501E+6)
  317. PARAMETER (LSUBS = 2.83E+6)
  318. PARAMETER (R = 287.04)
  319. ! ----------------------------------------------------------------------
  320. ! INITIALIZATION
  321. ! ----------------------------------------------------------------------
  322. ILOC = IILOC
  323. JLOC = JJLOC
  324. RUNOFF1 = 0.0
  325. RUNOFF2 = 0.0
  326. RUNOFF3 = 0.0
  327. SNOMLT = 0.0
  328. ! ----------------------------------------------------------------------
  329. ! THE VARIABLE "ICE" IS A FLAG DENOTING SEA-ICE / LAND-ICE / ICE-FREE LAND
  330. ! SEA-ICE CASE, ICE = 1
  331. ! NON-GLACIAL LAND, ICE = 0
  332. ! GLACIAL ICE, ICE = -1
  333. IF (ICE == 1) call wrf_error_fatal("Sea-ice point in Noah-LSM")
  334. IF (ICE == -1) SHDFAC = 0.0
  335. ! ----------------------------------------------------------------------
  336. ! CALCULATE DEPTH (NEGATIVE) BELOW GROUND FROM TOP SKIN SFC TO BOTTOM OF
  337. ! EACH SOIL LAYER. NOTE: SIGN OF ZSOIL IS NEGATIVE (DENOTING BELOW
  338. ! GROUND)
  339. ! ----------------------------------------------------------------------
  340. ZSOIL (1) = - SLDPTH (1)
  341. DO KZ = 2,NSOIL
  342. ZSOIL (KZ) = - SLDPTH (KZ) + ZSOIL (KZ -1)
  343. END DO
  344. ! ----------------------------------------------------------------------
  345. ! NEXT IS CRUCIAL CALL TO SET THE LAND-SURFACE PARAMETERS, INCLUDING
  346. ! SOIL-TYPE AND VEG-TYPE DEPENDENT PARAMETERS.
  347. ! ----------------------------------------------------------------------
  348. CALL REDPRM (VEGTYP,SOILTYP,SLOPETYP,CFACTR,CMCMAX,RSMAX,TOPT, &
  349. REFKDT,KDT,SBETA, SHDFAC,RSMIN,RGL,HS,ZBOT,FRZX, &
  350. PSISAT,SLOPE,SNUP,SALP,BEXP,DKSAT,DWSAT, &
  351. SMCMAX,SMCWLT,SMCREF,SMCDRY,F1,QUARTZ,FXEXP, &
  352. RTDIS,SLDPTH,ZSOIL,NROOT,NSOIL,CZIL, &
  353. LAIMIN, LAIMAX, EMISSMIN, EMISSMAX, ALBEDOMIN, &
  354. ALBEDOMAX, Z0MIN, Z0MAX, CSOIL, PTU, LLANDUSE, &
  355. LSOIL,LOCAL,LVCOEF)
  356. !urban
  357. IF(VEGTYP==ISURBAN)THEN
  358. SHDFAC=0.05
  359. RSMIN=400.0
  360. SMCMAX = 0.45
  361. SMCREF = 0.42
  362. SMCWLT = 0.40
  363. SMCDRY = 0.40
  364. ENDIF
  365. IF ( SHDFAC >= SHDMAX ) THEN
  366. EMBRD = EMISSMAX
  367. IF (.NOT. RDLAI2D) THEN
  368. XLAI = LAIMAX
  369. ENDIF
  370. IF (.NOT. USEMONALB) THEN
  371. ALB = ALBEDOMIN
  372. ENDIF
  373. Z0BRD = Z0MAX
  374. ELSE IF ( SHDFAC <= SHDMIN ) THEN
  375. EMBRD = EMISSMIN
  376. IF(.NOT. RDLAI2D) THEN
  377. XLAI = LAIMIN
  378. ENDIF
  379. IF(.NOT. USEMONALB) then
  380. ALB = ALBEDOMAX
  381. ENDIF
  382. Z0BRD = Z0MIN
  383. ELSE
  384. IF ( SHDMAX > SHDMIN ) THEN
  385. INTERP_FRACTION = ( SHDFAC - SHDMIN ) / ( SHDMAX - SHDMIN )
  386. ! Bound INTERP_FRACTION between 0 and 1
  387. INTERP_FRACTION = MIN ( INTERP_FRACTION, 1.0 )
  388. INTERP_FRACTION = MAX ( INTERP_FRACTION, 0.0 )
  389. ! Scale Emissivity and LAI between EMISSMIN and EMISSMAX by INTERP_FRACTION
  390. EMBRD = ( ( 1.0 - INTERP_FRACTION ) * EMISSMIN ) + ( INTERP_FRACTION * EMISSMAX )
  391. IF (.NOT. RDLAI2D) THEN
  392. XLAI = ( ( 1.0 - INTERP_FRACTION ) * LAIMIN ) + ( INTERP_FRACTION * LAIMAX )
  393. ENDIF
  394. if (.not. USEMONALB) then
  395. ALB = ( ( 1.0 - INTERP_FRACTION ) * ALBEDOMAX ) + ( INTERP_FRACTION * ALBEDOMIN )
  396. endif
  397. Z0BRD = ( ( 1.0 - INTERP_FRACTION ) * Z0MIN ) + ( INTERP_FRACTION * Z0MAX )
  398. ELSE
  399. EMBRD = 0.5 * EMISSMIN + 0.5 * EMISSMAX
  400. IF (.NOT. RDLAI2D) THEN
  401. XLAI = 0.5 * LAIMIN + 0.5 * LAIMAX
  402. ENDIF
  403. if (.not. USEMONALB) then
  404. ALB = 0.5 * ALBEDOMIN + 0.5 * ALBEDOMAX
  405. endif
  406. Z0BRD = 0.5 * Z0MIN + 0.5 * Z0MAX
  407. ENDIF
  408. ENDIF
  409. ! ----------------------------------------------------------------------
  410. ! INITIALIZE PRECIPITATION LOGICALS.
  411. ! ----------------------------------------------------------------------
  412. SNOWNG = .FALSE.
  413. FRZGRA = .FALSE.
  414. ! ----------------------------------------------------------------------
  415. IF ( ICE == -1 ) THEN
  416. !
  417. ! FOR GLACIAL ICE, IF S.W.E. (SNEQV) BELOW THRESHOLD LOWER
  418. ! BOUND (0.10 M FOR GLACIAL ICE), THEN SET AT LOWER BOUND.
  419. !
  420. IF ( SNEQV < 0.10 ) THEN
  421. SNEQV = 0.10
  422. SNOWH = 0.50
  423. ENDIF
  424. !
  425. ! FOR GLACIAL ICE, SET SMC AND SH20 VALUES = 1.0
  426. !
  427. DO KZ = 1,NSOIL
  428. SMC(KZ) = 1.0
  429. SH2O(KZ) = 1.0
  430. END DO
  431. ENDIF
  432. ! ----------------------------------------------------------------------
  433. ! IF INPUT SNOWPACK IS NONZERO, THEN COMPUTE SNOW DENSITY "SNDENS" AND
  434. ! SNOW THERMAL CONDUCTIVITY "SNCOND" (NOTE THAT CSNOW IS A FUNCTION
  435. ! SUBROUTINE)
  436. ! ----------------------------------------------------------------------
  437. IF ( SNEQV <= 1.E-7 ) THEN ! safer IF kmh (2008/03/25)
  438. SNEQV = 0.0
  439. SNDENS = 0.0
  440. SNOWH = 0.0
  441. SNCOND = 1.0
  442. ELSE
  443. SNDENS = SNEQV / SNOWH
  444. IF(SNDENS > 1.0) THEN
  445. CALL wrf_error_fatal ( 'Physical snow depth is less than snow water equiv.' )
  446. ENDIF
  447. CALL CSNOW (SNCOND,SNDENS)
  448. END IF
  449. ! ----------------------------------------------------------------------
  450. ! DETERMINE IF IT'S PRECIPITATING AND WHAT KIND OF PRECIP IT IS.
  451. ! IF IT'S PRCPING AND THE AIR TEMP IS COLDER THAN 0 C, IT'S SNOWING!
  452. ! IF IT'S PRCPING AND THE AIR TEMP IS WARMER THAN 0 C, BUT THE GRND
  453. ! TEMP IS COLDER THAN 0 C, FREEZING RAIN IS PRESUMED TO BE FALLING.
  454. ! ----------------------------------------------------------------------
  455. IF (PRCP > 0.0) THEN
  456. ! snow defined when fraction of frozen precip (FFROZP) > 0.5,
  457. ! passed in from model microphysics.
  458. IF (FFROZP .GT. 0.5) THEN
  459. SNOWNG = .TRUE.
  460. ELSE
  461. IF (T1 <= TFREEZ) FRZGRA = .TRUE.
  462. END IF
  463. END IF
  464. ! ----------------------------------------------------------------------
  465. ! IF EITHER PRCP FLAG IS SET, DETERMINE NEW SNOWFALL (CONVERTING PRCP
  466. ! RATE FROM KG M-2 S-1 TO A LIQUID EQUIV SNOW DEPTH IN METERS) AND ADD
  467. ! IT TO THE EXISTING SNOWPACK.
  468. ! NOTE THAT SINCE ALL PRECIP IS ADDED TO SNOWPACK, NO PRECIP INFILTRATES
  469. ! INTO THE SOIL SO THAT PRCP1 IS SET TO ZERO.
  470. ! ----------------------------------------------------------------------
  471. IF ( (SNOWNG) .OR. (FRZGRA) ) THEN
  472. SN_NEW = PRCP * DT * 0.001
  473. SNEQV = SNEQV + SN_NEW
  474. PRCPF = 0.0
  475. ! ----------------------------------------------------------------------
  476. ! UPDATE SNOW DENSITY BASED ON NEW SNOWFALL, USING OLD AND NEW SNOW.
  477. ! UPDATE SNOW THERMAL CONDUCTIVITY
  478. ! ----------------------------------------------------------------------
  479. CALL SNOW_NEW (SFCTMP,SN_NEW,SNOWH,SNDENS)
  480. !
  481. ! kmh 09/04/2006 set Snow Density at 0.2 g/cm**3
  482. ! for "cold permanent ice" or new "dry" snow
  483. !
  484. IF ( (ICE == -1) .and. (SNCOVR .GT. 0.99) ) THEN
  485. ! if soil temperature less than 268.15 K, treat as typical Antarctic/Greenland snow firn
  486. IF ( STC(1) .LT. (TFREEZ - 5.) ) SNDENS = 0.2
  487. IF ( SNOWNG .AND. (T1.LT.273.) .AND. (SFCTMP.LT.273.) ) SNDENS=0.2
  488. ENDIF
  489. !
  490. CALL CSNOW (SNCOND,SNDENS)
  491. ! ----------------------------------------------------------------------
  492. ! PRECIP IS LIQUID (RAIN), HENCE SAVE IN THE PRECIP VARIABLE THAT
  493. ! LATER CAN WHOLELY OR PARTIALLY INFILTRATE THE SOIL (ALONG WITH
  494. ! ANY CANOPY "DRIP" ADDED TO THIS LATER)
  495. ! ----------------------------------------------------------------------
  496. ELSE
  497. PRCPF = PRCP
  498. ENDIF
  499. ! ----------------------------------------------------------------------
  500. ! DETERMINE SNOWCOVER AND ALBEDO OVER LAND.
  501. ! ----------------------------------------------------------------------
  502. ! ----------------------------------------------------------------------
  503. ! IF SNOW DEPTH=0, SET SNOW FRACTION=0, ALBEDO=SNOW FREE ALBEDO.
  504. ! ----------------------------------------------------------------------
  505. IF (SNEQV == 0.0) THEN
  506. SNCOVR = 0.0
  507. ALBEDO = ALB
  508. EMISSI = EMBRD
  509. ELSE
  510. ! ----------------------------------------------------------------------
  511. ! DETERMINE SNOW FRACTIONAL COVERAGE.
  512. ! DETERMINE SURFACE ALBEDO MODIFICATION DUE TO SNOWDEPTH STATE.
  513. ! ----------------------------------------------------------------------
  514. CALL SNFRAC (SNEQV,SNUP,SALP,SNOWH,SNCOVR)
  515. ! kmh 2008/03/25
  516. ! Don't limit snow cover fraction over permanent ice
  517. IF ( ICE == 0 ) SNCOVR = MIN(SNCOVR,0.98)
  518. CALL ALCALC (ALB,SNOALB,EMBRD,SHDFAC,SHDMIN,SNCOVR,T1, &
  519. ALBEDO,EMISSI,DT,SNOWNG,SNOTIME1,LVCOEF)
  520. ENDIF
  521. ! ----------------------------------------------------------------------
  522. ! THERMAL CONDUCTIVITY FOR GLACIAL ICE CASE
  523. ! ----------------------------------------------------------------------
  524. IF ( ICE == -1 ) THEN
  525. DF1 = 2.2
  526. !
  527. ! kmh 09/03/2006
  528. ! kmh 03/25/2008 change SNCOVR threshold to 0.97
  529. !
  530. ! only apply (small) DF1 conductivity for permanent land ice
  531. !
  532. IF ( SNCOVR .GT. 0.97 ) THEN
  533. DF1 = SNCOND
  534. ENDIF
  535. ELSEIF ( ICE == 0 ) THEN
  536. ! ----------------------------------------------------------------------
  537. ! NEXT CALCULATE THE SUBSURFACE HEAT FLUX, WHICH FIRST REQUIRES
  538. ! CALCULATION OF THE THERMAL DIFFUSIVITY. TREATMENT OF THE
  539. ! LATTER FOLLOWS THAT ON PAGES 148-149 FROM "HEAT TRANSFER IN
  540. ! COLD CLIMATES", BY V. J. LUNARDINI (PUBLISHED IN 1981
  541. ! BY VAN NOSTRAND REINHOLD CO.) I.E. TREATMENT OF TWO CONTIGUOUS
  542. ! "PLANE PARALLEL" MEDIUMS (NAMELY HERE THE FIRST SOIL LAYER
  543. ! AND THE SNOWPACK LAYER, IF ANY). THIS DIFFUSIVITY TREATMENT
  544. ! BEHAVES WELL FOR BOTH ZERO AND NONZERO SNOWPACK, INCLUDING THE
  545. ! LIMIT OF VERY THIN SNOWPACK. THIS TREATMENT ALSO ELIMINATES
  546. ! THE NEED TO IMPOSE AN ARBITRARY UPPER BOUND ON SUBSURFACE
  547. ! HEAT FLUX WHEN THE SNOWPACK BECOMES EXTREMELY THIN.
  548. ! ----------------------------------------------------------------------
  549. ! FIRST CALCULATE THERMAL DIFFUSIVITY OF TOP SOIL LAYER, USING
  550. ! BOTH THE FROZEN AND LIQUID SOIL MOISTURE, FOLLOWING THE
  551. ! SOIL THERMAL DIFFUSIVITY FUNCTION OF PETERS-LIDARD ET AL.
  552. ! (1998,JAS, VOL 55, 1209-1224), WHICH REQUIRES THE SPECIFYING
  553. ! THE QUARTZ CONTENT OF THE GIVEN SOIL CLASS (SEE ROUTINE REDPRM)
  554. ! ----------------------------------------------------------------------
  555. ! ----------------------------------------------------------------------
  556. ! NEXT ADD SUBSURFACE HEAT FLUX REDUCTION EFFECT FROM THE
  557. ! OVERLYING GREEN CANOPY, ADAPTED FROM SECTION 2.1.2 OF
  558. ! PETERS-LIDARD ET AL. (1997, JGR, VOL 102(D4))
  559. ! ----------------------------------------------------------------------
  560. CALL TDFCND (DF1,SMC (1),QUARTZ,SMCMAX,SH2O (1))
  561. !urban
  562. IF ( VEGTYP == ISURBAN ) DF1=3.24
  563. DF1 = DF1 * EXP (SBETA * SHDFAC)
  564. !
  565. ! kmh 09/03/2006
  566. ! kmh 03/25/2008 change SNCOVR threshold to 0.97
  567. !
  568. IF ( SNCOVR .GT. 0.97 ) THEN
  569. DF1 = SNCOND
  570. ENDIF
  571. !
  572. ! ----------------------------------------------------------------------
  573. ! FINALLY "PLANE PARALLEL" SNOWPACK EFFECT FOLLOWING
  574. ! V.J. LINARDINI REFERENCE CITED ABOVE. NOTE THAT DTOT IS
  575. ! COMBINED DEPTH OF SNOWDEPTH AND THICKNESS OF FIRST SOIL LAYER
  576. ! ----------------------------------------------------------------------
  577. END IF
  578. DSOIL = - (0.5 * ZSOIL (1))
  579. IF (SNEQV == 0.) THEN
  580. SSOIL = DF1 * (T1- STC (1) ) / DSOIL
  581. ELSE
  582. DTOT = SNOWH + DSOIL
  583. FRCSNO = SNOWH / DTOT
  584. ! 1. HARMONIC MEAN (SERIES FLOW)
  585. ! DF1 = (SNCOND*DF1)/(FRCSOI*SNCOND+FRCSNO*DF1)
  586. FRCSOI = DSOIL / DTOT
  587. ! 2. ARITHMETIC MEAN (PARALLEL FLOW)
  588. ! DF1 = FRCSNO*SNCOND + FRCSOI*DF1
  589. DF1H = (SNCOND * DF1)/ (FRCSOI * SNCOND+ FRCSNO * DF1)
  590. ! 3. GEOMETRIC MEAN (INTERMEDIATE BETWEEN HARMONIC AND ARITHMETIC MEAN)
  591. ! DF1 = (SNCOND**FRCSNO)*(DF1**FRCSOI)
  592. ! weigh DF by snow fraction
  593. ! DF1 = DF1H*SNCOVR + DF1A*(1.0-SNCOVR)
  594. ! DF1 = DF1H*SNCOVR + DF1*(1.0-SNCOVR)
  595. DF1A = FRCSNO * SNCOND+ FRCSOI * DF1
  596. ! ----------------------------------------------------------------------
  597. ! CALCULATE SUBSURFACE HEAT FLUX, SSOIL, FROM FINAL THERMAL DIFFUSIVITY
  598. ! OF SURFACE MEDIUMS, DF1 ABOVE, AND SKIN TEMPERATURE AND TOP
  599. ! MID-LAYER SOIL TEMPERATURE
  600. ! ----------------------------------------------------------------------
  601. DF1 = DF1A * SNCOVR + DF1* (1.0- SNCOVR)
  602. IF ( ICE == -1 ) then
  603. ! kmh 12/15/2005 correct for too deep snow layer
  604. ! kmh 09/03/2006 adjust DTOT
  605. IF ( DTOT .GT. 2.*DSOIL ) then
  606. DTOT = 2.*DSOIL
  607. ENDIF
  608. ENDIF
  609. SSOIL = DF1 * (T1- STC (1) ) / DTOT
  610. END IF
  611. ! ----------------------------------------------------------------------
  612. ! DETERMINE SURFACE ROUGHNESS OVER SNOWPACK USING SNOW CONDITION FROM
  613. ! THE PREVIOUS TIMESTEP.
  614. ! ----------------------------------------------------------------------
  615. IF (SNCOVR > 0. ) THEN
  616. CALL SNOWZ0 (SNCOVR,Z0,Z0BRD,SNOWH)
  617. ELSE
  618. Z0=Z0BRD
  619. END IF
  620. ! ----------------------------------------------------------------------
  621. ! NEXT CALL ROUTINE SFCDIF TO CALCULATE THE SFC EXCHANGE COEF (CH) FOR
  622. ! HEAT AND MOISTURE.
  623. ! NOTE !!!
  624. ! DO NOT CALL SFCDIF UNTIL AFTER ABOVE CALL TO REDPRM, IN CASE
  625. ! ALTERNATIVE VALUES OF ROUGHNESS LENGTH (Z0) AND ZILINTINKEVICH COEF
  626. ! (CZIL) ARE SET THERE VIA NAMELIST I/O.
  627. ! NOTE !!!
  628. ! ROUTINE SFCDIF RETURNS A CH THAT REPRESENTS THE WIND SPD TIMES THE
  629. ! "ORIGINAL" NONDIMENSIONAL "Ch" TYPICAL IN LITERATURE. HENCE THE CH
  630. ! RETURNED FROM SFCDIF HAS UNITS OF M/S. THE IMPORTANT COMPANION
  631. ! COEFFICIENT OF CH, CARRIED HERE AS "RCH", IS THE CH FROM SFCDIF TIMES
  632. ! AIR DENSITY AND PARAMETER "CP". "RCH" IS COMPUTED IN "CALL PENMAN".
  633. ! RCH RATHER THAN CH IS THE COEFF USUALLY INVOKED LATER IN EQNS.
  634. ! NOTE !!!
  635. ! ----------------------------------------------------------------------
  636. ! SFCDIF ALSO RETURNS THE SURFACE EXCHANGE COEFFICIENT FOR MOMENTUM, CM,
  637. ! ALSO KNOWN AS THE SURFACE DRAGE COEFFICIENT. Needed as a state variable
  638. ! for iterative/implicit solution of CH in SFCDIF
  639. ! ----------------------------------------------------------------------
  640. ! IF(.NOT.LCH) THEN
  641. ! T1V = T1 * (1.0+ 0.61 * Q2)
  642. ! TH2V = TH2 * (1.0+ 0.61 * Q2)
  643. ! CALL SFCDIF_off (ZLVL,Z0,T1V,TH2V,SFCSPD,CZIL,CM,CH)
  644. ! ENDIF
  645. ! ----------------------------------------------------------------------
  646. ! CALL PENMAN SUBROUTINE TO CALCULATE POTENTIAL EVAPORATION (ETP), AND
  647. ! OTHER PARTIAL PRODUCTS AND SUMS SAVE IN COMMON/RITE FOR LATER
  648. ! CALCULATIONS.
  649. ! ----------------------------------------------------------------------
  650. ! ----------------------------------------------------------------------
  651. ! CALCULATE TOTAL DOWNWARD RADIATION (SOLAR PLUS LONGWAVE) NEEDED IN
  652. ! PENMAN EP SUBROUTINE THAT FOLLOWS
  653. ! ----------------------------------------------------------------------
  654. ! FDOWN = SOLDN * (1.0- ALBEDO) + LWDN
  655. FDOWN = SOLNET + LWDN
  656. ! ----------------------------------------------------------------------
  657. ! CALC VIRTUAL TEMPS AND VIRTUAL POTENTIAL TEMPS NEEDED BY SUBROUTINES
  658. ! PENMAN.
  659. T2V = SFCTMP * (1.0+ 0.61 * Q2 )
  660. iout=0
  661. if(iout.eq.1) then
  662. print*,'before penman'
  663. print*,' SFCTMP',SFCTMP,'SFCPRS',SFCPRS,'CH',CH,'T2V',T2V, &
  664. 'TH2',TH2,'PRCP',PRCP,'FDOWN',FDOWN,'T24',T24,'SSOIL',SSOIL, &
  665. 'Q2',Q2,'Q2SAT',Q2SAT,'ETP',ETP,'RCH',RCH, &
  666. 'EPSCA',EPSCA,'RR',RR ,'SNOWNG',SNOWNG,'FRZGRA',FRZGRA, &
  667. 'DQSDT2',DQSDT2,'FLX2',FLX2,'SNOWH',SNOWH,'SNEQV',SNEQV, &
  668. ' DSOIL',DSOIL,' FRCSNO',FRCSNO,' SNCOVR',SNCOVR,' DTOT',DTOT, &
  669. ' ZSOIL (1)',ZSOIL(1),' DF1',DF1,'T1',T1,' STC1',STC(1), &
  670. 'ALBEDO',ALBEDO,'SMC',SMC,'STC',STC,'SH2O',SH2O
  671. endif
  672. CALL PENMAN (SFCTMP,SFCPRS,CH,T2V,TH2,PRCP,FDOWN,T24,SSOIL, &
  673. Q2,Q2SAT,ETP,RCH,EPSCA,RR,SNOWNG,FRZGRA, &
  674. !
  675. ! kmh 01/09/2007 add T1,ICE,SNCOVR to call
  676. !
  677. DQSDT2,FLX2,EMISSI,SNEQV,T1,ICE,SNCOVR)
  678. !
  679. ! ----------------------------------------------------------------------
  680. ! CALL CANRES TO CALCULATE THE CANOPY RESISTANCE AND CONVERT IT INTO PC
  681. ! IF NONZERO GREENNESS FRACTION
  682. ! ----------------------------------------------------------------------
  683. ! ----------------------------------------------------------------------
  684. ! FROZEN GROUND EXTENSION: TOTAL SOIL WATER "SMC" WAS REPLACED
  685. ! BY UNFROZEN SOIL WATER "SH2O" IN CALL TO CANRES BELOW
  686. ! ----------------------------------------------------------------------
  687. IF (SHDFAC > 0.) THEN
  688. CALL CANRES (SOLDN,CH,SFCTMP,Q2,SFCPRS,SH2O,ZSOIL,NSOIL, &
  689. SMCWLT,SMCREF,RSMIN,RC,PC,NROOT,Q2SAT,DQSDT2, &
  690. TOPT,RSMAX,RGL,HS,XLAI, &
  691. RCS,RCT,RCQ,RCSOIL,EMISSI)
  692. ELSE
  693. RC = 0.0
  694. END IF
  695. ! ----------------------------------------------------------------------
  696. ! NOW DECIDE MAJOR PATHWAY BRANCH TO TAKE DEPENDING ON WHETHER SNOWPACK
  697. ! EXISTS OR NOT:
  698. ! ----------------------------------------------------------------------
  699. ESNOW = 0.0
  700. IF (SNEQV == 0.0) THEN
  701. CALL NOPAC (ETP,ETA,PRCP,SMC,SMCMAX,SMCWLT, &
  702. SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
  703. SHDFAC, &
  704. SBETA,Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,EMISSI, &
  705. SSOIL, &
  706. STC,EPSCA,BEXP,PC,RCH,RR,CFACTR, &
  707. SH2O,SLOPE,KDT,FRZX,PSISAT,ZSOIL, &
  708. DKSAT,DWSAT,TBOT,ZBOT,RUNOFF1,RUNOFF2, &
  709. RUNOFF3,EDIR,EC,ET,ETT,NROOT,ICE,RTDIS, &
  710. QUARTZ,FXEXP,CSOIL, &
  711. BETA,DRIP,DEW,FLX1,FLX3,VEGTYP,ISURBAN)
  712. ETA_KINEMATIC = ETA
  713. ELSE
  714. CALL SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT, &
  715. SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
  716. SBETA,DF1, &
  717. Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,SSOIL,STC,EPSCA, &
  718. SFCPRS,BEXP,PC,RCH,RR,CFACTR,SNCOVR,SNEQV,SNDENS,&
  719. SNOWH,SH2O,SLOPE,KDT,FRZX,PSISAT, &
  720. ZSOIL,DWSAT,DKSAT,TBOT,ZBOT,SHDFAC,RUNOFF1, &
  721. RUNOFF2,RUNOFF3,EDIR,EC,ET,ETT,NROOT,SNOMLT, &
  722. ICE,RTDIS,QUARTZ,FXEXP,CSOIL, &
  723. BETA,DRIP,DEW,FLX1,FLX2,FLX3,ESNOW,ETNS,EMISSI, &
  724. RIBB,SOLDN, &
  725. ISURBAN, &
  726. VEGTYP)
  727. ETA_KINEMATIC = ESNOW + ETNS
  728. END IF
  729. ! Calculate effective mixing ratio at grnd level (skin)
  730. !
  731. ! Q1=Q2+ETA*CP/RCH
  732. Q1=Q2+ETA_KINEMATIC*CP/RCH
  733. !
  734. ! ----------------------------------------------------------------------
  735. ! DETERMINE SENSIBLE HEAT (H) IN ENERGY UNITS (W M-2)
  736. ! ----------------------------------------------------------------------
  737. SHEAT = - (CH * CP * SFCPRS)/ (R * T2V) * ( TH2- T1 )
  738. ! ----------------------------------------------------------------------
  739. ! CONVERT EVAP TERMS FROM KINEMATIC (KG M-2 S-1) TO ENERGY UNITS (W M-2)
  740. ! ----------------------------------------------------------------------
  741. EDIR = EDIR * LVH2O
  742. EC = EC * LVH2O
  743. DO K=1,4
  744. ET(K) = ET(K) * LVH2O
  745. ENDDO
  746. ETT = ETT * LVH2O
  747. ESNOW = ESNOW * LSUBS
  748. ETP = ETP*((1.-SNCOVR)*LVH2O + SNCOVR*LSUBS)
  749. IF (ETP .GT. 0.) THEN
  750. ETA = EDIR + EC + ETT + ESNOW
  751. ELSE
  752. ETA = ETP
  753. ENDIF
  754. ! ----------------------------------------------------------------------
  755. ! DETERMINE BETA (RATIO OF ACTUAL TO POTENTIAL EVAP)
  756. ! ----------------------------------------------------------------------
  757. IF (ETP == 0.0) THEN
  758. BETA = 0.0
  759. ELSE
  760. BETA = ETA/ETP
  761. ENDIF
  762. ! ----------------------------------------------------------------------
  763. ! CONVERT THE SIGN OF SOIL HEAT FLUX SO THAT:
  764. ! SSOIL>0: WARM THE SURFACE (NIGHT TIME)
  765. ! SSOIL<0: COOL THE SURFACE (DAY TIME)
  766. ! ----------------------------------------------------------------------
  767. SSOIL = -1.0* SSOIL
  768. ! ----------------------------------------------------------------------
  769. ! FOR THE CASE OF LAND (BUT NOT GLACIAL ICE):
  770. ! CONVERT RUNOFF3 (INTERNAL LAYER RUNOFF FROM SUPERSAT) FROM M TO M S-1
  771. ! AND ADD TO SUBSURFACE RUNOFF/DRAINAGE/BASEFLOW. RUNOFF2 IS ALREADY
  772. ! A RATE AT THIS POINT
  773. ! ----------------------------------------------------------------------
  774. IF (ICE == 0) THEN
  775. RUNOFF3 = RUNOFF3/ DT
  776. RUNOFF2 = RUNOFF2+ RUNOFF3
  777. SOILM = -1.0* SMC (1)* ZSOIL (1)
  778. DO K = 2,NSOIL
  779. SOILM = SOILM + SMC (K)* (ZSOIL (K -1) - ZSOIL (K))
  780. END DO
  781. SOILWM = -1.0* (SMCMAX - SMCWLT)* ZSOIL (1)
  782. SOILWW = -1.0* (SMC (1) - SMCWLT)* ZSOIL (1)
  783. !
  784. DO K = 1,NSOIL
  785. SMAV(K)=(SMC(K) - SMCWLT)/(SMCMAX - SMCWLT)
  786. END DO
  787. IF (NROOT >= 2) THEN
  788. DO K = 2,NROOT
  789. SOILWM = SOILWM + (SMCMAX - SMCWLT)* (ZSOIL (K -1) - ZSOIL (K))
  790. SOILWW = SOILWW + (SMC(K) - SMCWLT)* (ZSOIL (K -1) - ZSOIL (K))
  791. END DO
  792. END IF
  793. IF (SOILWM .LT. 1.E-6) THEN
  794. SOILWM = 0.0
  795. SOILW = 0.0
  796. SOILM = 0.0
  797. ELSE
  798. SOILW = SOILWW / SOILWM
  799. END IF
  800. ELSEIF ( ICE == -1 ) THEN
  801. ! ----------------------------------------------------------------------
  802. ! FOR THE CASE OF GLACIAL ICE (ICE == -1), ADD ANY SNOWMELT DIRECTLY TO
  803. ! SURFACE RUNOFF (RUNOFF1) SINCE THERE IS NO SOIL MEDIUM, AND THUS NO
  804. ! CALL TO SUBROUTINE SMFLX (FOR SOIL MOISTURE TENDENCY).
  805. ! ----------------------------------------------------------------------
  806. RUNOFF1 = SNOMLT/DT
  807. SOILWM = 0.0
  808. SOILW = 0.0
  809. SOILM = 0.0
  810. DO K = 1,NSOIL
  811. SMAV(K)= 1.0
  812. END DO
  813. END IF
  814. ! ----------------------------------------------------------------------
  815. END SUBROUTINE SFLX
  816. ! ----------------------------------------------------------------------
  817. SUBROUTINE ALCALC (ALB,SNOALB,EMBRD,SHDFAC,SHDMIN,SNCOVR,TSNOW,ALBEDO,EMISSI, &
  818. DT,SNOWNG,SNOTIME1,LVCOEF)
  819. ! ----------------------------------------------------------------------
  820. ! CALCULATE ALBEDO INCLUDING SNOW EFFECT (0 -> 1)
  821. ! ALB SNOWFREE ALBEDO
  822. ! SNOALB MAXIMUM (DEEP) SNOW ALBEDO
  823. ! SHDFAC AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
  824. ! SHDMIN MINIMUM AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
  825. ! SNCOVR FRACTIONAL SNOW COVER
  826. ! ALBEDO SURFACE ALBEDO INCLUDING SNOW EFFECT
  827. ! TSNOW SNOW SURFACE TEMPERATURE (K)
  828. ! ----------------------------------------------------------------------
  829. IMPLICIT NONE
  830. ! ----------------------------------------------------------------------
  831. ! SNOALB IS ARGUMENT REPRESENTING MAXIMUM ALBEDO OVER DEEP SNOW,
  832. ! AS PASSED INTO SFLX, AND ADAPTED FROM THE SATELLITE-BASED MAXIMUM
  833. ! SNOW ALBEDO FIELDS PROVIDED BY D. ROBINSON AND G. KUKLA
  834. ! (1985, JCAM, VOL 24, 402-411)
  835. ! ----------------------------------------------------------------------
  836. REAL, INTENT(IN) :: ALB, SNOALB, EMBRD, SHDFAC, SHDMIN, SNCOVR, TSNOW
  837. REAL, INTENT(IN) :: DT
  838. LOGICAL, INTENT(IN) :: SNOWNG
  839. REAL, INTENT(INOUT):: SNOTIME1
  840. REAL, INTENT(OUT) :: ALBEDO, EMISSI
  841. REAL :: SNOALB2
  842. REAL :: TM,SNOALB1
  843. REAL, INTENT(IN) :: LVCOEF
  844. REAL, PARAMETER :: SNACCA=0.94,SNACCB=0.58,SNTHWA=0.82,SNTHWB=0.46
  845. ! turn of vegetation effect
  846. ! ALBEDO = ALB + (1.0- (SHDFAC - SHDMIN))* SNCOVR * (SNOALB - ALB)
  847. ! ALBEDO = (1.0-SNCOVR)*ALB + SNCOVR*SNOALB !this is equivalent to below
  848. ALBEDO = ALB + SNCOVR*(SNOALB-ALB)
  849. EMISSI = EMBRD + SNCOVR*(EMISSI_S - EMBRD)
  850. ! BASE FORMULATION (DICKINSON ET AL., 1986, COGLEY ET AL., 1990)
  851. ! IF (TSNOW.LE.263.16) THEN
  852. ! ALBEDO=SNOALB
  853. ! ELSE
  854. ! IF (TSNOW.LT.273.16) THEN
  855. ! TM=0.1*(TSNOW-263.16)
  856. ! SNOALB1=0.5*((0.9-0.2*(TM**3))+(0.8-0.16*(TM**3)))
  857. ! ELSE
  858. ! SNOALB1=0.67
  859. ! IF(SNCOVR.GT.0.95) SNOALB1= 0.6
  860. ! SNOALB1 = ALB + SNCOVR*(SNOALB-ALB)
  861. ! ENDIF
  862. ! ENDIF
  863. ! ALBEDO = ALB + SNCOVR*(SNOALB1-ALB)
  864. ! ISBA FORMULATION (VERSEGHY, 1991; BAKER ET AL., 1990)
  865. ! SNOALB1 = SNOALB+COEF*(0.85-SNOALB)
  866. ! SNOALB2=SNOALB1
  867. !!m LSTSNW=LSTSNW+1
  868. ! SNOTIME1 = SNOTIME1 + DT
  869. ! IF (SNOWNG) THEN
  870. ! SNOALB2=SNOALB
  871. !!m LSTSNW=0
  872. ! SNOTIME1 = 0.0
  873. ! ELSE
  874. ! IF (TSNOW.LT.273.16) THEN
  875. !! SNOALB2=SNOALB-0.008*LSTSNW*DT/86400
  876. !!m SNOALB2=SNOALB-0.008*SNOTIME1/86400
  877. ! SNOALB2=(SNOALB2-0.65)*EXP(-0.05*DT/3600)+0.65
  878. !! SNOALB2=(ALBEDO-0.65)*EXP(-0.01*DT/3600)+0.65
  879. ! ELSE
  880. ! SNOALB2=(SNOALB2-0.5)*EXP(-0.0005*DT/3600)+0.5
  881. !! SNOALB2=(SNOALB-0.5)*EXP(-0.24*LSTSNW*DT/86400)+0.5
  882. !!m SNOALB2=(SNOALB-0.5)*EXP(-0.24*SNOTIME1/86400)+0.5
  883. ! ENDIF
  884. ! ENDIF
  885. !
  886. !! print*,'SNOALB2',SNOALB2,'ALBEDO',ALBEDO,'DT',DT
  887. ! ALBEDO = ALB + SNCOVR*(SNOALB2-ALB)
  888. ! IF (ALBEDO .GT. SNOALB2) ALBEDO=SNOALB2
  889. !!m LSTSNW1=LSTSNW
  890. !! SNOTIME = SNOTIME1
  891. ! formulation by Livneh
  892. ! ----------------------------------------------------------------------
  893. ! SNOALB IS CONSIDERED AS THE MAXIMUM SNOW ALBEDO FOR NEW SNOW, AT
  894. ! A VALUE OF 85%. SNOW ALBEDO CURVE DEFAULTS ARE FROM BRAS P.263. SHOULD
  895. ! NOT BE CHANGED EXCEPT FOR SERIOUS PROBLEMS WITH SNOW MELT.
  896. ! TO IMPLEMENT ACCUMULATIN PARAMETERS, SNACCA AND SNACCB, ASSERT THAT IT
  897. ! IS INDEED ACCUMULATION SEASON. I.E. THAT SNOW SURFACE TEMP IS BELOW
  898. ! ZERO AND THE DATE FALLS BETWEEN OCTOBER AND FEBRUARY
  899. ! ----------------------------------------------------------------------
  900. SNOALB1 = SNOALB+LVCOEF*(0.85-SNOALB)
  901. SNOALB2=SNOALB1
  902. ! ---------------- Initial LSTSNW --------------------------------------
  903. IF (SNOWNG) THEN
  904. SNOTIME1 = 0.
  905. ELSE
  906. SNOTIME1=SNOTIME1+DT
  907. ! IF (TSNOW.LT.273.16) THEN
  908. SNOALB2=SNOALB1*(SNACCA**((SNOTIME1/86400.0)**SNACCB))
  909. ! ELSE
  910. ! SNOALB2 =SNOALB1*(SNTHWA**((SNOTIME1/86400.0)**SNTHWB))
  911. ! ENDIF
  912. ENDIF
  913. !
  914. SNOALB2 = MAX ( SNOALB2, ALB )
  915. ALBEDO = ALB + SNCOVR*(SNOALB2-ALB)
  916. IF (ALBEDO .GT. SNOALB2) ALBEDO=SNOALB2
  917. ! IF (TSNOW.LT.273.16) THEN
  918. ! ALBEDO=SNOALB-0.008*DT/86400
  919. ! ELSE
  920. ! ALBEDO=(SNOALB-0.5)*EXP(-0.24*DT/86400)+0.5
  921. ! ENDIF
  922. ! IF (ALBEDO > SNOALB) ALBEDO = SNOALB
  923. ! ----------------------------------------------------------------------
  924. END SUBROUTINE ALCALC
  925. ! ----------------------------------------------------------------------
  926. SUBROUTINE CANRES (SOLAR,CH,SFCTMP,Q2,SFCPRS,SMC,ZSOIL,NSOIL, &
  927. SMCWLT,SMCREF,RSMIN,RC,PC,NROOT,Q2SAT,DQSDT2, &
  928. TOPT,RSMAX,RGL,HS,XLAI, &
  929. RCS,RCT,RCQ,RCSOIL,EMISSI)
  930. ! ----------------------------------------------------------------------
  931. ! SUBROUTINE CANRES
  932. ! ----------------------------------------------------------------------
  933. ! CALCULATE CANOPY RESISTANCE WHICH DEPENDS ON INCOMING SOLAR RADIATION,
  934. ! AIR TEMPERATURE, ATMOSPHERIC WATER VAPOR PRESSURE DEFICIT AT THE
  935. ! LOWEST MODEL LEVEL, AND SOIL MOISTURE (PREFERABLY UNFROZEN SOIL
  936. ! MOISTURE RATHER THAN TOTAL)
  937. ! ----------------------------------------------------------------------
  938. ! SOURCE: JARVIS (1976), NOILHAN AND PLANTON (1989, MWR), JACQUEMIN AND
  939. ! NOILHAN (1990, BLM)
  940. ! SEE ALSO: CHEN ET AL (1996, JGR, VOL 101(D3), 7251-7268), EQNS 12-14
  941. ! AND TABLE 2 OF SEC. 3.1.2
  942. ! ----------------------------------------------------------------------
  943. ! INPUT:
  944. ! SOLAR INCOMING SOLAR RADIATION
  945. ! CH SURFACE EXCHANGE COEFFICIENT FOR HEAT AND MOISTURE
  946. ! SFCTMP AIR TEMPERATURE AT 1ST LEVEL ABOVE GROUND
  947. ! Q2 AIR HUMIDITY AT 1ST LEVEL ABOVE GROUND
  948. ! Q2SAT SATURATION AIR HUMIDITY AT 1ST LEVEL ABOVE GROUND
  949. ! DQSDT2 SLOPE OF SATURATION HUMIDITY FUNCTION WRT TEMP
  950. ! SFCPRS SURFACE PRESSURE
  951. ! SMC VOLUMETRIC SOIL MOISTURE
  952. ! ZSOIL SOIL DEPTH (NEGATIVE SIGN, AS IT IS BELOW GROUND)
  953. ! NSOIL NO. OF SOIL LAYERS
  954. ! NROOT NO. OF SOIL LAYERS IN ROOT ZONE (1.LE.NROOT.LE.NSOIL)
  955. ! XLAI LEAF AREA INDEX
  956. ! SMCWLT WILTING POINT
  957. ! SMCREF REFERENCE SOIL MOISTURE (WHERE SOIL WATER DEFICIT STRESS
  958. ! SETS IN)
  959. ! RSMIN, RSMAX, TOPT, RGL, HS ARE CANOPY STRESS PARAMETERS SET IN
  960. ! SURBOUTINE REDPRM
  961. ! OUTPUT:
  962. ! PC PLANT COEFFICIENT
  963. ! RC CANOPY RESISTANCE
  964. ! ----------------------------------------------------------------------
  965. IMPLICIT NONE
  966. INTEGER, INTENT(IN) :: NROOT,NSOIL
  967. INTEGER K
  968. REAL, INTENT(IN) :: CH,DQSDT2,HS,Q2,Q2SAT,RSMIN,RGL,RSMAX, &
  969. SFCPRS,SFCTMP,SMCREF,SMCWLT, SOLAR,TOPT,XLAI, &
  970. EMISSI
  971. REAL,DIMENSION(1:NSOIL), INTENT(IN) :: SMC,ZSOIL
  972. REAL, INTENT(OUT):: PC,RC,RCQ,RCS,RCSOIL,RCT
  973. REAL :: DELTA,FF,GX,P,RR
  974. REAL, DIMENSION(1:NSOIL) :: PART
  975. REAL, PARAMETER :: SLV = 2.501000E6
  976. ! ----------------------------------------------------------------------
  977. ! INITIALIZE CANOPY RESISTANCE MULTIPLIER TERMS.
  978. ! ----------------------------------------------------------------------
  979. RCS = 0.0
  980. RCT = 0.0
  981. RCQ = 0.0
  982. RCSOIL = 0.0
  983. ! ----------------------------------------------------------------------
  984. ! CONTRIBUTION DUE TO INCOMING SOLAR RADIATION
  985. ! ----------------------------------------------------------------------
  986. RC = 0.0
  987. FF = 0.55*2.0* SOLAR / (RGL * XLAI)
  988. RCS = (FF + RSMIN / RSMAX) / (1.0+ FF)
  989. ! ----------------------------------------------------------------------
  990. ! CONTRIBUTION DUE TO AIR TEMPERATURE AT FIRST MODEL LEVEL ABOVE GROUND
  991. ! RCT EXPRESSION FROM NOILHAN AND PLANTON (1989, MWR).
  992. ! ----------------------------------------------------------------------
  993. RCS = MAX (RCS,0.0001)
  994. RCT = 1.0- 0.0016* ( (TOPT - SFCTMP)**2.0)
  995. ! ----------------------------------------------------------------------
  996. ! CONTRIBUTION DUE TO VAPOR PRESSURE DEFICIT AT FIRST MODEL LEVEL.
  997. ! RCQ EXPRESSION FROM SSIB
  998. ! ----------------------------------------------------------------------
  999. RCT = MAX (RCT,0.0001)
  1000. RCQ = 1.0/ (1.0+ HS * (Q2SAT - Q2))
  1001. ! ----------------------------------------------------------------------
  1002. ! CONTRIBUTION DUE TO SOIL MOISTURE AVAILABILITY.
  1003. ! DETERMINE CONTRIBUTION FROM EACH SOIL LAYER, THEN ADD THEM UP.
  1004. ! ----------------------------------------------------------------------
  1005. RCQ = MAX (RCQ,0.01)
  1006. GX = (SMC (1) - SMCWLT) / (SMCREF - SMCWLT)
  1007. IF (GX > 1.) GX = 1.
  1008. IF (GX < 0.) GX = 0.
  1009. ! ----------------------------------------------------------------------
  1010. ! USE SOIL DEPTH AS WEIGHTING FACTOR
  1011. ! ----------------------------------------------------------------------
  1012. ! ----------------------------------------------------------------------
  1013. ! USE ROOT DISTRIBUTION AS WEIGHTING FACTOR
  1014. ! PART(1) = RTDIS(1) * GX
  1015. ! ----------------------------------------------------------------------
  1016. PART (1) = (ZSOIL (1)/ ZSOIL (NROOT)) * GX
  1017. DO K = 2,NROOT
  1018. GX = (SMC (K) - SMCWLT) / (SMCREF - SMCWLT)
  1019. IF (GX > 1.) GX = 1.
  1020. IF (GX < 0.) GX = 0.
  1021. ! ----------------------------------------------------------------------
  1022. ! USE SOIL DEPTH AS WEIGHTING FACTOR
  1023. ! ----------------------------------------------------------------------
  1024. ! ----------------------------------------------------------------------
  1025. ! USE ROOT DISTRIBUTION AS WEIGHTING FACTOR
  1026. ! PART(K) = RTDIS(K) * GX
  1027. ! ----------------------------------------------------------------------
  1028. PART (K) = ( (ZSOIL (K) - ZSOIL (K -1))/ ZSOIL (NROOT)) * GX
  1029. END DO
  1030. DO K = 1,NROOT
  1031. RCSOIL = RCSOIL + PART (K)
  1032. END DO
  1033. ! ----------------------------------------------------------------------
  1034. ! DETERMINE CANOPY RESISTANCE DUE TO ALL FACTORS. CONVERT CANOPY
  1035. ! RESISTANCE (RC) TO PLANT COEFFICIENT (PC) TO BE USED WITH POTENTIAL
  1036. ! EVAP IN DETERMINING ACTUAL EVAP. PC IS DETERMINED BY:
  1037. ! PC * LINERIZED PENMAN POTENTIAL EVAP =
  1038. ! PENMAN-MONTEITH ACTUAL EVAPORATION (CONTAINING RC TERM).
  1039. ! ----------------------------------------------------------------------
  1040. RCSOIL = MAX (RCSOIL,0.0001)
  1041. RC = RSMIN / (XLAI * RCS * RCT * RCQ * RCSOIL)
  1042. ! RR = (4.* SIGMA * RD / CP)* (SFCTMP **4.)/ (SFCPRS * CH) + 1.0
  1043. RR = (4.* EMISSI *SIGMA * RD / CP)* (SFCTMP **4.)/ (SFCPRS * CH) &
  1044. + 1.0
  1045. DELTA = (SLV / CP)* DQSDT2
  1046. PC = (RR + DELTA)/ (RR * (1. + RC * CH) + DELTA)
  1047. ! ----------------------------------------------------------------------
  1048. END SUBROUTINE CANRES
  1049. ! ----------------------------------------------------------------------
  1050. SUBROUTINE CSNOW (SNCOND,DSNOW)
  1051. ! ----------------------------------------------------------------------
  1052. ! SUBROUTINE CSNOW
  1053. ! FUNCTION CSNOW
  1054. ! ----------------------------------------------------------------------
  1055. ! CALCULATE SNOW TERMAL CONDUCTIVITY
  1056. ! ----------------------------------------------------------------------
  1057. IMPLICIT NONE
  1058. REAL, INTENT(IN) :: DSNOW
  1059. REAL, INTENT(OUT):: SNCOND
  1060. REAL :: C
  1061. REAL, PARAMETER :: UNIT = 0.11631
  1062. ! ----------------------------------------------------------------------
  1063. ! SNCOND IN UNITS OF CAL/(CM*HR*C), RETURNED IN W/(M*C)
  1064. ! CSNOW IN UNITS OF CAL/(CM*HR*C), RETURNED IN W/(M*C)
  1065. ! BASIC VERSION IS DYACHKOVA EQUATION (1960), FOR RANGE 0.1-0.4
  1066. ! ----------------------------------------------------------------------
  1067. C = 0.328*10** (2.25* DSNOW)
  1068. ! CSNOW=UNIT*C
  1069. ! ----------------------------------------------------------------------
  1070. ! DE VAUX EQUATION (1933), IN RANGE 0.1-0.6
  1071. ! ----------------------------------------------------------------------
  1072. ! SNCOND=0.0293*(1.+100.*DSNOW**2)
  1073. ! CSNOW=0.0293*(1.+100.*DSNOW**2)
  1074. ! ----------------------------------------------------------------------
  1075. ! E. ANDERSEN FROM FLERCHINGER
  1076. ! ----------------------------------------------------------------------
  1077. ! SNCOND=0.021+2.51*DSNOW**2
  1078. ! CSNOW=0.021+2.51*DSNOW**2
  1079. ! SNCOND = UNIT * C
  1080. ! double snow thermal conductivity
  1081. SNCOND = 2.0 * UNIT * C
  1082. ! ----------------------------------------------------------------------
  1083. END SUBROUTINE CSNOW
  1084. ! ----------------------------------------------------------------------
  1085. SUBROUTINE DEVAP (EDIR,ETP1,SMC,ZSOIL,SHDFAC,SMCMAX,BEXP, &
  1086. DKSAT,DWSAT,SMCDRY,SMCREF,SMCWLT,FXEXP)
  1087. ! ----------------------------------------------------------------------
  1088. ! SUBROUTINE DEVAP
  1089. ! FUNCTION DEVAP
  1090. ! ----------------------------------------------------------------------
  1091. ! CALCULATE DIRECT SOIL EVAPORATION
  1092. ! ----------------------------------------------------------------------
  1093. IMPLICIT NONE
  1094. REAL, INTENT(IN) :: ETP1,SMC,BEXP,DKSAT,DWSAT,FXEXP, &
  1095. SHDFAC,SMCDRY,SMCMAX,ZSOIL,SMCREF,SMCWLT
  1096. REAL, INTENT(OUT):: EDIR
  1097. REAL :: FX, SRATIO
  1098. ! ----------------------------------------------------------------------
  1099. ! DIRECT EVAP A FUNCTION OF RELATIVE SOIL MOISTURE AVAILABILITY, LINEAR
  1100. ! WHEN FXEXP=1.
  1101. ! ----------------------------------------------------------------------
  1102. ! ----------------------------------------------------------------------
  1103. ! FX > 1 REPRESENTS DEMAND CONTROL
  1104. ! FX < 1 REPRESENTS FLUX CONTROL
  1105. ! ----------------------------------------------------------------------
  1106. SRATIO = (SMC - SMCDRY) / (SMCMAX - SMCDRY)
  1107. IF (SRATIO > 0.) THEN
  1108. FX = SRATIO**FXEXP
  1109. FX = MAX ( MIN ( FX, 1. ) ,0. )
  1110. ELSE
  1111. FX = 0.
  1112. ENDIF
  1113. ! ----------------------------------------------------------------------
  1114. ! ALLOW FOR THE DIRECT-EVAP-REDUCING EFFECT OF SHADE
  1115. ! ----------------------------------------------------------------------
  1116. EDIR = FX * ( 1.0- SHDFAC ) * ETP1
  1117. ! ----------------------------------------------------------------------
  1118. END SUBROUTINE DEVAP
  1119. ! ----------------------------------------------------------------------
  1120. SUBROUTINE EVAPO (ETA1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL, &
  1121. SH2O, &
  1122. SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
  1123. SMCREF,SHDFAC,CMCMAX, &
  1124. SMCDRY,CFACTR, &
  1125. EDIR,EC,ET,ETT,SFCTMP,Q2,NROOT,RTDIS,FXEXP)
  1126. ! ----------------------------------------------------------------------
  1127. ! SUBROUTINE EVAPO
  1128. ! ----------------------------------------------------------------------
  1129. ! CALCULATE SOIL MOISTURE FLUX. THE SOIL MOISTURE CONTENT (SMC - A PER
  1130. ! UNIT VOLUME MEASUREMENT) IS A DEPENDENT VARIABLE THAT IS UPDATED WITH
  1131. ! PROGNOSTIC EQNS. THE CANOPY MOISTURE CONTENT (CMC) IS ALSO UPDATED.
  1132. ! FROZEN GROUND VERSION: NEW STATES ADDED: SH2O, AND FROZEN GROUND
  1133. ! CORRECTION FACTOR, FRZFACT AND PARAMETER SLOPE.
  1134. ! ----------------------------------------------------------------------
  1135. IMPLICIT NONE
  1136. INTEGER, INTENT(IN) :: NSOIL, NROOT
  1137. INTEGER :: I,K
  1138. REAL, INTENT(IN) :: BEXP, CFACTR,CMC,CMCMAX,DKSAT, &
  1139. DT,DWSAT,ETP1,FXEXP,PC,Q2,SFCTMP, &
  1140. SHDFAC,SMCDRY,SMCMAX,SMCREF,SMCWLT
  1141. REAL, INTENT(OUT) :: EC,EDIR,ETA1,ETT
  1142. REAL :: CMC2MS
  1143. REAL,DIMENSION(1:NSOIL), INTENT(IN) :: RTDIS, SMC, SH2O, ZSOIL
  1144. REAL,DIMENSION(1:NSOIL), INTENT(OUT) :: ET
  1145. ! ----------------------------------------------------------------------
  1146. ! EXECUTABLE CODE BEGINS HERE IF THE POTENTIAL EVAPOTRANSPIRATION IS
  1147. ! GREATER THAN ZERO.
  1148. ! ----------------------------------------------------------------------
  1149. EDIR = 0.
  1150. EC = 0.
  1151. ETT = 0.
  1152. DO K = 1,NSOIL
  1153. ET (K) = 0.
  1154. END DO
  1155. ! ----------------------------------------------------------------------
  1156. ! RETRIEVE DIRECT EVAPORATION FROM SOIL SURFACE. CALL THIS FUNCTION
  1157. ! ONLY IF VEG COVER NOT COMPLETE.
  1158. ! FROZEN GROUND VERSION: SH2O STATES REPLACE SMC STATES.
  1159. ! ----------------------------------------------------------------------
  1160. IF (ETP1 > 0.0) THEN
  1161. IF (SHDFAC < 1.) THEN
  1162. CALL DEVAP (EDIR,ETP1,SMC (1),ZSOIL (1),SHDFAC,SMCMAX, &
  1163. BEXP,DKSAT,DWSAT,SMCDRY,SMCREF,SMCWLT,FXEXP)
  1164. END IF
  1165. ! ----------------------------------------------------------------------
  1166. ! INITIALIZE PLANT TOTAL TRANSPIRATION, RETRIEVE PLANT TRANSPIRATION,
  1167. ! AND ACCUMULATE IT FOR ALL SOIL LAYERS.
  1168. ! ----------------------------------------------------------------------
  1169. IF (SHDFAC > 0.0) THEN
  1170. CALL TRANSP (ET,NSOIL,ETP1,SH2O,CMC,ZSOIL,SHDFAC,SMCWLT, &
  1171. CMCMAX,PC,CFACTR,SMCREF,SFCTMP,Q2,NROOT,RTDIS)
  1172. DO K = 1,NSOIL
  1173. ETT = ETT + ET ( K )
  1174. END DO
  1175. ! ----------------------------------------------------------------------
  1176. ! CALCULATE CANOPY EVAPORATION.
  1177. ! IF STATEMENTS TO AVOID TANGENT LINEAR PROBLEMS NEAR CMC=0.0.
  1178. ! ----------------------------------------------------------------------
  1179. IF (CMC > 0.0) THEN
  1180. EC = SHDFAC * ( ( CMC / CMCMAX ) ** CFACTR ) * ETP1
  1181. ELSE
  1182. EC = 0.0
  1183. END IF
  1184. ! ----------------------------------------------------------------------
  1185. ! EC SHOULD BE LIMITED BY THE TOTAL AMOUNT OF AVAILABLE WATER ON THE
  1186. ! CANOPY. -F.CHEN, 18-OCT-1994
  1187. ! ----------------------------------------------------------------------
  1188. CMC2MS = CMC / DT
  1189. EC = MIN ( CMC2MS, EC )
  1190. END IF
  1191. END IF
  1192. ! ----------------------------------------------------------------------
  1193. ! TOTAL UP EVAP AND TRANSP TYPES TO OBTAIN ACTUAL EVAPOTRANSP
  1194. ! ----------------------------------------------------------------------
  1195. ETA1 = EDIR + ETT + EC
  1196. ! ----------------------------------------------------------------------
  1197. END SUBROUTINE EVAPO
  1198. ! ----------------------------------------------------------------------
  1199. SUBROUTINE FAC2MIT(SMCMAX,FLIMIT)
  1200. IMPLICIT NONE
  1201. REAL, INTENT(IN) :: SMCMAX
  1202. REAL, INTENT(OUT) :: FLIMIT
  1203. FLIMIT = 0.90
  1204. IF ( SMCMAX == 0.395 ) THEN
  1205. FLIMIT = 0.59
  1206. ELSE IF ( ( SMCMAX == 0.434 ) .OR. ( SMCMAX == 0.404 ) ) THEN
  1207. FLIMIT = 0.85
  1208. ELSE IF ( ( SMCMAX == 0.465 ) .OR. ( SMCMAX == 0.406 ) ) THEN
  1209. FLIMIT = 0.86
  1210. ELSE IF ( ( SMCMAX == 0.476 ) .OR. ( SMCMAX == 0.439 ) ) THEN
  1211. FLIMIT = 0.74
  1212. ELSE IF ( ( SMCMAX == 0.200 ) .OR. ( SMCMAX == 0.464 ) ) THEN
  1213. FLIMIT = 0.80
  1214. ENDIF
  1215. ! ----------------------------------------------------------------------
  1216. END SUBROUTINE FAC2MIT
  1217. ! ----------------------------------------------------------------------
  1218. SUBROUTINE FRH2O (FREE,TKELV,SMC,SH2O,SMCMAX,BEXP,PSIS)
  1219. ! ----------------------------------------------------------------------
  1220. ! SUBROUTINE FRH2O
  1221. ! ----------------------------------------------------------------------
  1222. ! CALCULATE AMOUNT OF SUPERCOOLED LIQUID SOIL WATER CONTENT IF
  1223. ! TEMPERATURE IS BELOW 273.15K (T0). REQUIRES NEWTON-TYPE ITERATION TO
  1224. ! SOLVE THE NONLINEAR IMPLICIT EQUATION GIVEN IN EQN 17 OF KOREN ET AL
  1225. ! (1999, JGR, VOL 104(D16), 19569-19585).
  1226. ! ----------------------------------------------------------------------
  1227. ! NEW VERSION (JUNE 2001): MUCH FASTER AND MORE ACCURATE NEWTON
  1228. ! ITERATION ACHIEVED BY FIRST TAKING LOG OF EQN CITED ABOVE -- LESS THAN
  1229. ! 4 (TYPICALLY 1 OR 2) ITERATIONS ACHIEVES CONVERGENCE. ALSO, EXPLICIT
  1230. ! 1-STEP SOLUTION OPTION FOR SPECIAL CASE OF PARAMETER CK=0, WHICH
  1231. ! REDUCES THE ORIGINAL IMPLICIT EQUATION TO A SIMPLER EXPLICIT FORM,
  1232. ! KNOWN AS THE "FLERCHINGER EQN". IMPROVED HANDLING OF SOLUTION IN THE
  1233. ! LIMIT OF FREEZING POINT TEMPERATURE T0.
  1234. ! ----------------------------------------------------------------------
  1235. ! INPUT:
  1236. ! TKELV.........TEMPERATURE (Kelvin)
  1237. ! SMC...........TOTAL SOIL MOISTURE CONTENT (VOLUMETRIC)
  1238. ! SH2O..........LIQUID SOIL MOISTURE CONTENT (VOLUMETRIC)
  1239. ! SMCMAX........SATURATION SOIL MOISTURE CONTENT (FROM REDPRM)
  1240. ! B.............SOIL TYPE "B" PARAMETER (FROM REDPRM)
  1241. ! PSIS..........SATURATED SOIL MATRIC POTENTIAL (FROM REDPRM)
  1242. ! OUTPUT:
  1243. ! FRH2O.........SUPERCOOLED LIQUID WATER CONTENT
  1244. ! FREE..........SUPERCOOLED LIQUID WATER CONTENT
  1245. ! ----------------------------------------------------------------------
  1246. IMPLICIT NONE
  1247. REAL, INTENT(IN) :: BEXP,PSIS,SH2O,SMC,SMCMAX,TKELV
  1248. REAL, INTENT(OUT) :: FREE
  1249. REAL :: BX,DENOM,DF,DSWL,FK,SWL,SWLK
  1250. INTEGER :: NLOG,KCOUNT
  1251. ! PARAMETER(CK = 0.0)
  1252. REAL, PARAMETER :: CK = 8.0, BLIM = 5.5, ERROR = 0.005, &
  1253. HLICE = 3.335E5, GS = 9.81,DICE = 920.0, &
  1254. DH2O = 1000.0, T0 = 273.15
  1255. ! ----------------------------------------------------------------------
  1256. ! LIMITS ON PARAMETER B: B < 5.5 (use parameter BLIM)
  1257. ! SIMULATIONS SHOWED IF B > 5.5 UNFROZEN WATER CONTENT IS
  1258. ! NON-REALISTICALLY HIGH AT VERY LOW TEMPERATURES.
  1259. ! ----------------------------------------------------------------------
  1260. BX = BEXP
  1261. ! ----------------------------------------------------------------------
  1262. ! INITIALIZING ITERATIONS COUNTER AND ITERATIVE SOLUTION FLAG.
  1263. ! ----------------------------------------------------------------------
  1264. IF (BEXP > BLIM) BX = BLIM
  1265. NLOG = 0
  1266. ! ----------------------------------------------------------------------
  1267. ! IF TEMPERATURE NOT SIGNIFICANTLY BELOW FREEZING (T0), SH2O = SMC
  1268. ! ----------------------------------------------------------------------
  1269. KCOUNT = 0
  1270. ! FRH2O = SMC
  1271. IF (TKELV > (T0- 1.E-3)) THEN
  1272. FREE = SMC
  1273. ELSE
  1274. ! ----------------------------------------------------------------------
  1275. ! OPTION 1: ITERATED SOLUTION FOR NONZERO CK
  1276. ! IN KOREN ET AL, JGR, 1999, EQN 17
  1277. ! ----------------------------------------------------------------------
  1278. ! INITIAL GUESS FOR SWL (frozen content)
  1279. ! ----------------------------------------------------------------------
  1280. IF (CK /= 0.0) THEN
  1281. SWL = SMC - SH2O
  1282. ! ----------------------------------------------------------------------
  1283. ! KEEP WITHIN BOUNDS.
  1284. ! ----------------------------------------------------------------------
  1285. IF (SWL > (SMC -0.02)) SWL = SMC -0.02
  1286. ! ----------------------------------------------------------------------
  1287. ! START OF ITERATIONS
  1288. ! ----------------------------------------------------------------------
  1289. IF (SWL < 0.) SWL = 0.
  1290. 1001 Continue
  1291. IF (.NOT.( (NLOG < 10) .AND. (KCOUNT == 0))) goto 1002
  1292. NLOG = NLOG +1
  1293. DF = ALOG ( ( PSIS * GS / HLICE ) * ( ( 1. + CK * SWL )**2.) * &
  1294. ( SMCMAX / (SMC - SWL) )** BX) - ALOG ( - ( &
  1295. TKELV - T0)/ TKELV)
  1296. DENOM = 2. * CK / ( 1. + CK * SWL ) + BX / ( SMC - SWL )
  1297. SWLK = SWL - DF / DENOM
  1298. ! ----------------------------------------------------------------------
  1299. ! BOUNDS USEFUL FOR MATHEMATICAL SOLUTION.
  1300. ! ----------------------------------------------------------------------
  1301. IF (SWLK > (SMC -0.02)) SWLK = SMC - 0.02
  1302. IF (SWLK < 0.) SWLK = 0.
  1303. ! ----------------------------------------------------------------------
  1304. ! MATHEMATICAL SOLUTION BOUNDS APPLIED.
  1305. ! ----------------------------------------------------------------------
  1306. DSWL = ABS (SWLK - SWL)
  1307. ! ----------------------------------------------------------------------
  1308. ! IF MORE THAN 10 ITERATIONS, USE EXPLICIT METHOD (CK=0 APPROX.)
  1309. ! WHEN DSWL LESS OR EQ. ERROR, NO MORE ITERATIONS REQUIRED.
  1310. ! ----------------------------------------------------------------------
  1311. SWL = SWLK
  1312. IF ( DSWL <= ERROR ) THEN
  1313. KCOUNT = KCOUNT +1
  1314. END IF
  1315. ! ----------------------------------------------------------------------
  1316. ! END OF ITERATIONS
  1317. ! ----------------------------------------------------------------------
  1318. ! BOUNDS APPLIED WITHIN DO-BLOCK ARE VALID FOR PHYSICAL SOLUTION.
  1319. ! ----------------------------------------------------------------------
  1320. ! FRH2O = SMC - SWL
  1321. goto 1001
  1322. 1002 continue
  1323. FREE = SMC - SWL
  1324. END IF
  1325. ! ----------------------------------------------------------------------
  1326. ! END OPTION 1
  1327. ! ----------------------------------------------------------------------
  1328. ! ----------------------------------------------------------------------
  1329. ! OPTION 2: EXPLICIT SOLUTION FOR FLERCHINGER EQ. i.e. CK=0
  1330. ! IN KOREN ET AL., JGR, 1999, EQN 17
  1331. ! APPLY PHYSICAL BOUNDS TO FLERCHINGER SOLUTION
  1332. ! ----------------------------------------------------------------------
  1333. IF (KCOUNT == 0) THEN
  1334. PRINT *,'Flerchinger USEd in NEW version. Iterations=',NLOG
  1335. FK = ( ( (HLICE / (GS * ( - PSIS)))* &
  1336. ( (TKELV - T0)/ TKELV))** ( -1/ BX))* SMCMAX
  1337. ! FRH2O = MIN (FK, SMC)
  1338. IF (FK < 0.02) FK = 0.02
  1339. FREE = MIN (FK, SMC)
  1340. ! ----------------------------------------------------------------------
  1341. ! END OPTION 2
  1342. ! ----------------------------------------------------------------------
  1343. END IF
  1344. END IF
  1345. ! ----------------------------------------------------------------------
  1346. END SUBROUTINE FRH2O
  1347. ! ----------------------------------------------------------------------
  1348. SUBROUTINE HRT (RHSTS,STC,SMC,SMCMAX,NSOIL,ZSOIL,YY,ZZ1, &
  1349. TBOT,ZBOT,PSISAT,SH2O,DT,BEXP, &
  1350. F1,DF1,QUARTZ,CSOIL,AI,BI,CI,VEGTYP,ISURBAN)
  1351. ! ----------------------------------------------------------------------
  1352. ! SUBROUTINE HRT
  1353. ! ----------------------------------------------------------------------
  1354. ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
  1355. ! THERMAL DIFFUSION EQUATION. ALSO TO COMPUTE ( PREPARE ) THE MATRIX
  1356. ! COEFFICIENTS FOR THE TRI-DIAGONAL MATRIX OF THE IMPLICIT TIME SCHEME.
  1357. ! ----------------------------------------------------------------------
  1358. IMPLICIT NONE
  1359. LOGICAL :: ITAVG
  1360. INTEGER, INTENT(IN) :: NSOIL, VEGTYP
  1361. INTEGER, INTENT(IN) :: ISURBAN
  1362. INTEGER :: I, K
  1363. REAL, INTENT(IN) :: BEXP, CSOIL, DF1, DT,F1,PSISAT,QUARTZ, &
  1364. SMCMAX ,TBOT,YY,ZZ1, ZBOT
  1365. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SMC,STC,ZSOIL
  1366. REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: SH2O
  1367. REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: RHSTS
  1368. REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: AI, BI,CI
  1369. REAL :: DDZ, DDZ2, DENOM, DF1N, DF1K, DTSDZ, &
  1370. DTSDZ2,HCPCT,QTOT,SSOIL,SICE,TAVG,TBK, &
  1371. TBK1,TSNSR,TSURF,CSOIL_LOC
  1372. REAL, PARAMETER :: T0 = 273.15, CAIR = 1004.0, CICE = 2.106E6,&
  1373. CH2O = 4.2E6
  1374. !urban
  1375. IF( VEGTYP == ISURBAN ) then
  1376. CSOIL_LOC=3.0E6
  1377. ELSE
  1378. CSOIL_LOC=CSOIL
  1379. ENDIF
  1380. ! ----------------------------------------------------------------------
  1381. ! INITIALIZE LOGICAL FOR SOIL LAYER TEMPERATURE AVERAGING.
  1382. ! ----------------------------------------------------------------------
  1383. ITAVG = .TRUE.
  1384. ! ----------------------------------------------------------------------
  1385. ! BEGIN SECTION FOR TOP SOIL LAYER
  1386. ! ----------------------------------------------------------------------
  1387. ! CALC THE HEAT CAPACITY OF THE TOP SOIL LAYER
  1388. ! ----------------------------------------------------------------------
  1389. HCPCT = SH2O (1)* CH2O + (1.0- SMCMAX)* CSOIL_LOC + (SMCMAX - SMC (1))&
  1390. * CAIR &
  1391. + ( SMC (1) - SH2O (1) )* CICE
  1392. ! ----------------------------------------------------------------------
  1393. ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
  1394. ! ----------------------------------------------------------------------
  1395. DDZ = 1.0 / ( -0.5 * ZSOIL (2) )
  1396. AI (1) = 0.0
  1397. CI (1) = (DF1 * DDZ) / (ZSOIL (1) * HCPCT)
  1398. ! ----------------------------------------------------------------------
  1399. ! CALCULATE THE VERTICAL SOIL TEMP GRADIENT BTWN THE 1ST AND 2ND SOIL
  1400. ! LAYERS. THEN CALCULATE THE SUBSURFACE HEAT FLUX. USE THE TEMP
  1401. ! GRADIENT AND SUBSFC HEAT FLUX TO CALC "RIGHT-HAND SIDE TENDENCY
  1402. ! TERMS", OR "RHSTS", FOR TOP SOIL LAYER.
  1403. ! ----------------------------------------------------------------------
  1404. BI (1) = - CI (1) + DF1 / (0.5 * ZSOIL (1) * ZSOIL (1)* HCPCT * &
  1405. ZZ1)
  1406. DTSDZ = (STC (1) - STC (2)) / ( -0.5 * ZSOIL (2))
  1407. SSOIL = DF1 * (STC (1) - YY) / (0.5 * ZSOIL (1) * ZZ1)
  1408. ! RHSTS(1) = (DF1 * DTSDZ - SSOIL) / (ZSOIL(1) * HCPCT)
  1409. DENOM = (ZSOIL (1) * HCPCT)
  1410. ! ----------------------------------------------------------------------
  1411. ! NEXT CAPTURE THE VERTICAL DIFFERENCE OF THE HEAT FLUX AT TOP AND
  1412. ! BOTTOM OF FIRST SOIL LAYER FOR USE IN HEAT FLUX CONSTRAINT APPLIED TO
  1413. ! POTENTIAL SOIL FREEZING/THAWING IN ROUTINE SNKSRC.
  1414. ! ----------------------------------------------------------------------
  1415. ! QTOT = SSOIL - DF1*DTSDZ
  1416. RHSTS (1) = (DF1 * DTSDZ - SSOIL) / DENOM
  1417. ! ----------------------------------------------------------------------
  1418. ! CALCULATE FROZEN WATER CONTENT IN 1ST SOIL LAYER.
  1419. ! ----------------------------------------------------------------------
  1420. QTOT = -1.0* RHSTS (1)* DENOM
  1421. ! ----------------------------------------------------------------------
  1422. ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP):
  1423. ! SET TEMP "TSURF" AT TOP OF SOIL COLUMN (FOR USE IN FREEZING SOIL
  1424. ! PHYSICS LATER IN FUNCTION SUBROUTINE SNKSRC). IF SNOWPACK CONTENT IS
  1425. ! ZERO, THEN TSURF EXPRESSION BELOW GIVES TSURF = SKIN TEMP. IF
  1426. ! SNOWPACK IS NONZERO (HENCE ARGUMENT ZZ1=1), THEN TSURF EXPRESSION
  1427. ! BELOW YIELDS SOIL COLUMN TOP TEMPERATURE UNDER SNOWPACK. THEN
  1428. ! CALCULATE TEMPERATURE AT BOTTOM INTERFACE OF 1ST SOIL LAYER FOR USE
  1429. ! LATER IN FUNCTION SUBROUTINE SNKSRC
  1430. ! ----------------------------------------------------------------------
  1431. SICE = SMC (1) - SH2O (1)
  1432. IF (ITAVG) THEN
  1433. TSURF = (YY + (ZZ1-1) * STC (1)) / ZZ1
  1434. ! ----------------------------------------------------------------------
  1435. ! IF FROZEN WATER PRESENT OR ANY OF LAYER-1 MID-POINT OR BOUNDING
  1436. ! INTERFACE TEMPERATURES BELOW FREEZING, THEN CALL SNKSRC TO
  1437. ! COMPUTE HEAT SOURCE/SINK (AND CHANGE IN FROZEN WATER CONTENT)
  1438. ! DUE TO POSSIBLE SOIL WATER PHASE CHANGE
  1439. ! ----------------------------------------------------------------------
  1440. CALL TBND (STC (1),STC (2),ZSOIL,ZBOT,1,NSOIL,TBK)
  1441. IF ( (SICE > 0.) .OR. (STC (1) < T0) .OR. &
  1442. (TSURF < T0) .OR. (TBK < T0) ) THEN
  1443. ! TSNSR = SNKSRC (TAVG,SMC(1),SH2O(1),
  1444. CALL TMPAVG (TAVG,TSURF,STC (1),TBK,ZSOIL,NSOIL,1)
  1445. CALL SNKSRC (TSNSR,TAVG,SMC (1),SH2O (1), &
  1446. ZSOIL,NSOIL,SMCMAX,PSISAT,BEXP,DT,1,QTOT)
  1447. ! RHSTS(1) = RHSTS(1) - TSNSR / ( ZSOIL(1) * HCPCT )
  1448. RHSTS (1) = RHSTS (1) - TSNSR / DENOM
  1449. END IF
  1450. ELSE
  1451. ! TSNSR = SNKSRC (STC(1),SMC(1),SH2O(1),
  1452. IF ( (SICE > 0.) .OR. (STC (1) < T0) ) THEN
  1453. CALL SNKSRC (TSNSR,STC (1),SMC (1),SH2O (1), &
  1454. ZSOIL,NSOIL,SMCMAX,PSISAT,BEXP,DT,1,QTOT)
  1455. ! RHSTS(1) = RHSTS(1) - TSNSR / ( ZSOIL(1) * HCPCT )
  1456. RHSTS (1) = RHSTS (1) - TSNSR / DENOM
  1457. END IF
  1458. ! ----------------------------------------------------------------------
  1459. ! THIS ENDS SECTION FOR TOP SOIL LAYER.
  1460. ! ----------------------------------------------------------------------
  1461. END IF
  1462. ! INITIALIZE DDZ2
  1463. ! ----------------------------------------------------------------------
  1464. DDZ2 = 0.0
  1465. DF1K = DF1
  1466. ! ----------------------------------------------------------------------
  1467. ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABOVE PROCESS
  1468. ! (EXCEPT SUBSFC OR "GROUND" HEAT FLUX NOT REPEATED IN LOWER LAYERS)
  1469. ! ----------------------------------------------------------------------
  1470. ! CALCULATE HEAT CAPACITY FOR THIS SOIL LAYER.
  1471. ! ----------------------------------------------------------------------
  1472. DO K = 2,NSOIL
  1473. HCPCT = SH2O (K)* CH2O + (1.0- SMCMAX)* CSOIL_LOC + (SMCMAX - SMC ( &
  1474. K))* CAIR + ( SMC (K) - SH2O (K) )* CICE
  1475. ! ----------------------------------------------------------------------
  1476. ! THIS SECTION FOR LAYER 2 OR GREATER, BUT NOT LAST LAYER.
  1477. ! ----------------------------------------------------------------------
  1478. ! CALCULATE THERMAL DIFFUSIVITY FOR THIS LAYER.
  1479. ! ----------------------------------------------------------------------
  1480. IF (K /= NSOIL) THEN
  1481. ! ----------------------------------------------------------------------
  1482. ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THIS LAYER
  1483. ! ----------------------------------------------------------------------
  1484. CALL TDFCND (DF1N,SMC (K),QUARTZ,SMCMAX,SH2O (K))
  1485. !urban
  1486. IF ( VEGTYP == ISURBAN ) DF1N = 3.24
  1487. DENOM = 0.5 * ( ZSOIL (K -1) - ZSOIL (K +1) )
  1488. ! ----------------------------------------------------------------------
  1489. ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT
  1490. ! ----------------------------------------------------------------------
  1491. DTSDZ2 = ( STC (K) - STC (K +1) ) / DENOM
  1492. DDZ2 = 2. / (ZSOIL (K -1) - ZSOIL (K +1))
  1493. ! ----------------------------------------------------------------------
  1494. ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP): CALCULATE
  1495. ! TEMP AT BOTTOM OF LAYER.
  1496. ! ----------------------------------------------------------------------
  1497. CI (K) = - DF1N * DDZ2 / ( (ZSOIL (K -1) - ZSOIL (K)) * &
  1498. HCPCT)
  1499. IF (ITAVG) THEN
  1500. CALL TBND (STC (K),STC (K +1),ZSOIL,ZBOT,K,NSOIL,TBK1)
  1501. END IF
  1502. ELSE
  1503. ! ----------------------------------------------------------------------
  1504. ! SPECIAL CASE OF BOTTOM SOIL LAYER: CALCULATE THERMAL DIFFUSIVITY FOR
  1505. ! BOTTOM LAYER.
  1506. ! ----------------------------------------------------------------------
  1507. ! ----------------------------------------------------------------------
  1508. ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU BOTTOM LAYER.
  1509. ! ----------------------------------------------------------------------
  1510. CALL TDFCND (DF1N,SMC (K),QUARTZ,SMCMAX,SH2O (K))
  1511. !urban
  1512. IF ( VEGTYP == ISURBAN ) DF1N = 3.24
  1513. DENOM = .5 * (ZSOIL (K -1) + ZSOIL (K)) - ZBOT
  1514. ! ----------------------------------------------------------------------
  1515. ! SET MATRIX COEF, CI TO ZERO IF BOTTOM LAYER.
  1516. ! ----------------------------------------------------------------------
  1517. DTSDZ2 = (STC (K) - TBOT) / DENOM
  1518. ! ----------------------------------------------------------------------
  1519. ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP): CALCULATE
  1520. ! TEMP AT BOTTOM OF LAST LAYER.
  1521. ! ----------------------------------------------------------------------
  1522. CI (K) = 0.
  1523. IF (ITAVG) THEN
  1524. CALL TBND (STC (K),TBOT,ZSOIL,ZBOT,K,NSOIL,TBK1)
  1525. END IF
  1526. ! ----------------------------------------------------------------------
  1527. ! THIS ENDS SPECIAL LOOP FOR BOTTOM LAYER.
  1528. END IF
  1529. ! ----------------------------------------------------------------------
  1530. ! CALCULATE RHSTS FOR THIS LAYER AFTER CALC'NG A PARTIAL PRODUCT.
  1531. ! ----------------------------------------------------------------------
  1532. DENOM = ( ZSOIL (K) - ZSOIL (K -1) ) * HCPCT
  1533. RHSTS (K) = ( DF1N * DTSDZ2- DF1K * DTSDZ ) / DENOM
  1534. QTOT = -1.0* DENOM * RHSTS (K)
  1535. SICE = SMC (K) - SH2O (K)
  1536. IF (ITAVG) THEN
  1537. CALL TMPAVG (TAVG,TBK,STC (K),TBK1,ZSOIL,NSOIL,K)
  1538. ! TSNSR = SNKSRC(TAVG,SMC(K),SH2O(K),ZSOIL,NSOIL,
  1539. IF ( (SICE > 0.) .OR. (STC (K) < T0) .OR. &
  1540. (TBK .lt. T0) .OR. (TBK1 .lt. T0) ) THEN
  1541. CALL SNKSRC (TSNSR,TAVG,SMC (K),SH2O (K),ZSOIL,NSOIL, &
  1542. SMCMAX,PSISAT,BEXP,DT,K,QTOT)
  1543. RHSTS (K) = RHSTS (K) - TSNSR / DENOM
  1544. END IF
  1545. ELSE
  1546. ! TSNSR = SNKSRC(STC(K),SMC(K),SH2O(K),ZSOIL,NSOIL,
  1547. IF ( (SICE > 0.) .OR. (STC (K) < T0) ) THEN
  1548. CALL SNKSRC (TSNSR,STC (K),SMC (K),SH2O (K),ZSOIL,NSOIL, &
  1549. SMCMAX,PSISAT,BEXP,DT,K,QTOT)
  1550. RHSTS (K) = RHSTS (K) - TSNSR / DENOM
  1551. END IF
  1552. END IF
  1553. ! ----------------------------------------------------------------------
  1554. ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER.
  1555. ! ----------------------------------------------------------------------
  1556. AI (K) = - DF1K * DDZ / ( (ZSOIL (K -1) - ZSOIL (K)) * HCPCT)
  1557. ! ----------------------------------------------------------------------
  1558. ! RESET VALUES OF DF1, DTSDZ, DDZ, AND TBK FOR LOOP TO NEXT SOIL LAYER.
  1559. ! ----------------------------------------------------------------------
  1560. BI (K) = - (AI (K) + CI (K))
  1561. TBK = TBK1
  1562. DF1K = DF1N
  1563. DTSDZ = DTSDZ2
  1564. DDZ = DDZ2
  1565. END DO
  1566. ! ----------------------------------------------------------------------
  1567. END SUBROUTINE HRT
  1568. ! ----------------------------------------------------------------------
  1569. SUBROUTINE HRTICE_GLACIAL (RHSTS,STC,TBOT,NSOIL,ZSOIL,YY,ZZ1,DF1, &
  1570. AI,BI,CI)
  1571. ! ----------------------------------------------------------------------
  1572. ! SUBROUTINE HRTICE_GLACIAL
  1573. ! ----------------------------------------------------------------------
  1574. ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
  1575. ! THERMAL DIFFUSION EQUATION IN THE CASE OF GLACIAL ICE (ICE == -1).
  1576. ! COMPUTE (PREPARE) THE MATRIX COEFFICIENTS FOR THE TRI-DIAGONAL MATRIX
  1577. ! OF THE IMPLICIT TIME SCHEME.
  1578. !
  1579. ! (NOTE: THIS SUBROUTINE ONLY CALLED FOR GLACIAL ICE (ICE == -1), BUT
  1580. ! NOT FOR NON-GLACIAL LAND (ICE == 0).
  1581. ! ----------------------------------------------------------------------
  1582. IMPLICIT NONE
  1583. INTEGER, INTENT(IN) :: NSOIL
  1584. INTEGER :: K
  1585. REAL, INTENT(IN) :: DF1,YY,ZZ1
  1586. REAL, DIMENSION(1:NSOIL), INTENT(OUT):: AI, BI,CI
  1587. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: STC, ZSOIL
  1588. REAL, DIMENSION(1:NSOIL), INTENT(OUT):: RHSTS
  1589. REAL, INTENT(IN) :: TBOT
  1590. REAL :: DDZ,DDZ2,DENOM,DTSDZ,DTSDZ2,SSOIL, &
  1591. ZBOT
  1592. REAL :: HCPCT
  1593. REAL :: DF1K
  1594. REAL :: DF1N
  1595. REAL :: ZMD
  1596. ! SET A NOMINAL UNIVERSAL VALUE OF GLACIAL ICE SPECIFIC HEAT CAPACITY,
  1597. ! HCPCT = 2100.0*900.0 = 1.89000E+6 (SOURCE: BOB GRUMBINE, 2005)
  1598. ! TBOT PASSED IN AS ARGUMENT, VALUE FROM GLOBAL DATA SET
  1599. !
  1600. ! A least-squares fit for the four points provided by
  1601. ! Keith Hines for the Yen (1981) values for Antarctic
  1602. ! snow firn.
  1603. !
  1604. HCPCT = 1.E6 * (0.8194 - 0.1309*0.5*ZSOIL(1))
  1605. DF1K = DF1
  1606. ! ----------------------------------------------------------------------
  1607. ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
  1608. ! ----------------------------------------------------------------------
  1609. ZBOT = -25.0
  1610. DDZ = 1.0 / ( -0.5 * ZSOIL (2) )
  1611. AI (1) = 0.0
  1612. CI (1) = (DF1 * DDZ) / (ZSOIL (1) * HCPCT)
  1613. ! ----------------------------------------------------------------------
  1614. ! CALC THE VERTICAL SOIL TEMP GRADIENT BTWN THE TOP AND 2ND SOIL LAYERS.
  1615. ! RECALC/ADJUST THE SOIL HEAT FLUX. USE THE GRADIENT AND FLUX TO CALC
  1616. ! RHSTS FOR THE TOP SOIL LAYER.
  1617. ! ----------------------------------------------------------------------
  1618. BI (1) = - CI (1) + DF1/ (0.5 * ZSOIL (1) * ZSOIL (1) * HCPCT * &
  1619. ZZ1)
  1620. DTSDZ = ( STC (1) - STC (2) ) / ( -0.5 * ZSOIL (2) )
  1621. SSOIL = DF1 * ( STC (1) - YY ) / ( 0.5 * ZSOIL (1) * ZZ1 )
  1622. ! ----------------------------------------------------------------------
  1623. ! INITIALIZE DDZ2
  1624. ! ----------------------------------------------------------------------
  1625. RHSTS (1) = ( DF1 * DTSDZ - SSOIL ) / ( ZSOIL (1) * HCPCT )
  1626. ! ----------------------------------------------------------------------
  1627. ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABOVE PROCESS
  1628. ! ----------------------------------------------------------------------
  1629. DDZ2 = 0.0
  1630. DF1K = DF1
  1631. DF1N = DF1
  1632. DO K = 2,NSOIL
  1633. ZMD = 0.5 * (ZSOIL(K)+ZSOIL(K-1))
  1634. ! For the land-ice case
  1635. ! kmh 09/03/2006 use Yen (1981)'s values for Antarctic snow firn
  1636. ! IF ( K .eq. 2 ) HCPCT = 0.855108E6
  1637. ! IF ( K .eq. 3 ) HCPCT = 0.922906E6
  1638. ! IF ( K .eq. 4 ) HCPCT = 1.009986E6
  1639. ! Least squares fit to the four points supplied by Keith Hines
  1640. ! from Yen (1981) for Antarctic snow firn. Not optimal, but
  1641. ! probably better than just a constant.
  1642. HCPCT = 1.E6 * ( 0.8194 - 0.1309*ZMD )
  1643. ! IF ( K .eq. 2 ) DF1N = 0.345356
  1644. ! IF ( K .eq. 3 ) DF1N = 0.398777
  1645. ! IF ( K .eq. 4 ) DF1N = 0.472653
  1646. ! Least squares fit to the three points supplied by Keith Hines
  1647. ! from Yen (1981) for Antarctic snow firn. Not optimal, but
  1648. ! probably better than just a constant.
  1649. DF1N = 0.32333 - ( 0.10073 * ZMD )
  1650. ! ----------------------------------------------------------------------
  1651. ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THIS LAYER.
  1652. ! ----------------------------------------------------------------------
  1653. IF (K /= NSOIL) THEN
  1654. DENOM = 0.5 * ( ZSOIL (K -1) - ZSOIL (K +1) )
  1655. ! ----------------------------------------------------------------------
  1656. ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT.
  1657. ! ----------------------------------------------------------------------
  1658. DTSDZ2 = ( STC (K) - STC (K +1) ) / DENOM
  1659. DDZ2 = 2. / (ZSOIL (K -1) - ZSOIL (K +1))
  1660. CI (K) = - DF1N * DDZ2 / ( (ZSOIL (K -1) - ZSOIL (K))*HCPCT)
  1661. ! ----------------------------------------------------------------------
  1662. ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THE LOWEST LAYER.
  1663. ! ----------------------------------------------------------------------
  1664. ELSE
  1665. ! ----------------------------------------------------------------------
  1666. ! SET MATRIX COEF, CI TO ZERO.
  1667. ! ----------------------------------------------------------------------
  1668. DTSDZ2 = (STC (K) - TBOT)/ (.5 * (ZSOIL (K -1) + ZSOIL (K)) &
  1669. - ZBOT)
  1670. CI (K) = 0.
  1671. ! ----------------------------------------------------------------------
  1672. ! CALC RHSTS FOR THIS LAYER AFTER CALC'NG A PARTIAL PRODUCT.
  1673. ! ----------------------------------------------------------------------
  1674. END IF
  1675. DENOM = ( ZSOIL (K) - ZSOIL (K -1) ) * HCPCT
  1676. ! ----------------------------------------------------------------------
  1677. ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER.
  1678. ! ----------------------------------------------------------------------
  1679. RHSTS (K) = ( DF1N * DTSDZ2- DF1K * DTSDZ ) / DENOM
  1680. AI (K) = - DF1K * DDZ / ( (ZSOIL (K -1) - ZSOIL (K)) * HCPCT)
  1681. ! ----------------------------------------------------------------------
  1682. ! RESET VALUES OF DTSDZ AND DDZ FOR LOOP TO NEXT SOIL LYR.
  1683. ! ----------------------------------------------------------------------
  1684. BI (K) = - (AI (K) + CI (K))
  1685. DF1K = DF1N
  1686. DTSDZ = DTSDZ2
  1687. DDZ = DDZ2
  1688. END DO
  1689. ! ----------------------------------------------------------------------
  1690. END SUBROUTINE HRTICE_GLACIAL
  1691. ! ----------------------------------------------------------------------
  1692. SUBROUTINE HSTEP (STCOUT,STCIN,RHSTS,DT,NSOIL,AI,BI,CI)
  1693. ! ----------------------------------------------------------------------
  1694. ! SUBROUTINE HSTEP
  1695. ! ----------------------------------------------------------------------
  1696. ! CALCULATE/UPDATE THE SOIL TEMPERATURE FIELD.
  1697. ! ----------------------------------------------------------------------
  1698. IMPLICIT NONE
  1699. INTEGER, INTENT(IN) :: NSOIL
  1700. INTEGER :: K
  1701. REAL, DIMENSION(1:NSOIL), INTENT(IN):: STCIN
  1702. REAL, DIMENSION(1:NSOIL), INTENT(OUT):: STCOUT
  1703. REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: RHSTS
  1704. REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: AI,BI,CI
  1705. REAL, DIMENSION(1:NSOIL) :: RHSTSin
  1706. REAL, DIMENSION(1:NSOIL) :: CIin
  1707. REAL :: DT
  1708. ! ----------------------------------------------------------------------
  1709. ! CREATE FINITE DIFFERENCE VALUES FOR USE IN ROSR12 ROUTINE
  1710. ! ----------------------------------------------------------------------
  1711. DO K = 1,NSOIL
  1712. RHSTS (K) = RHSTS (K) * DT
  1713. AI (K) = AI (K) * DT
  1714. BI (K) = 1. + BI (K) * DT
  1715. CI (K) = CI (K) * DT
  1716. END DO
  1717. ! ----------------------------------------------------------------------
  1718. ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
  1719. ! ----------------------------------------------------------------------
  1720. DO K = 1,NSOIL
  1721. RHSTSin (K) = RHSTS (K)
  1722. END DO
  1723. DO K = 1,NSOIL
  1724. CIin (K) = CI (K)
  1725. END DO
  1726. ! ----------------------------------------------------------------------
  1727. ! SOLVE THE TRI-DIAGONAL MATRIX EQUATION
  1728. ! ----------------------------------------------------------------------
  1729. CALL ROSR12 (CI,AI,BI,CIin,RHSTSin,RHSTS,NSOIL)
  1730. ! ----------------------------------------------------------------------
  1731. ! CALC/UPDATE THE SOIL TEMPS USING MATRIX SOLUTION
  1732. ! ----------------------------------------------------------------------
  1733. DO K = 1,NSOIL
  1734. STCOUT (K) = STCIN (K) + CI (K)
  1735. END DO
  1736. ! ----------------------------------------------------------------------
  1737. END SUBROUTINE HSTEP
  1738. ! ----------------------------------------------------------------------
  1739. SUBROUTINE NOPAC (ETP,ETA,PRCP,SMC,SMCMAX,SMCWLT, &
  1740. SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT,SHDFAC, &
  1741. SBETA,Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,EMISSI, &
  1742. SSOIL, &
  1743. STC,EPSCA,BEXP,PC,RCH,RR,CFACTR, &
  1744. SH2O,SLOPE,KDT,FRZFACT,PSISAT,ZSOIL, &
  1745. DKSAT,DWSAT,TBOT,ZBOT,RUNOFF1,RUNOFF2, &
  1746. RUNOFF3,EDIR,EC,ET,ETT,NROOT,ICE,RTDIS, &
  1747. QUARTZ,FXEXP,CSOIL, &
  1748. BETA,DRIP,DEW,FLX1,FLX3,VEGTYP,ISURBAN)
  1749. ! ----------------------------------------------------------------------
  1750. ! SUBROUTINE NOPAC
  1751. ! ----------------------------------------------------------------------
  1752. ! CALCULATE SOIL MOISTURE AND HEAT FLUX VALUES AND UPDATE SOIL MOISTURE
  1753. ! CONTENT AND SOIL HEAT CONTENT VALUES FOR THE CASE WHEN NO SNOW PACK IS
  1754. ! PRESENT.
  1755. ! ----------------------------------------------------------------------
  1756. IMPLICIT NONE
  1757. INTEGER, INTENT(IN) :: ICE, NROOT,NSOIL,VEGTYP
  1758. INTEGER, INTENT(IN) :: ISURBAN
  1759. INTEGER :: K
  1760. REAL, INTENT(IN) :: BEXP,CFACTR, CMCMAX,CSOIL,DKSAT,DT,DWSAT, &
  1761. EPSCA,ETP,FDOWN,F1,FXEXP,FRZFACT,KDT,PC, &
  1762. PRCP,PSISAT,Q2,QUARTZ,RCH,RR,SBETA,SFCTMP,&
  1763. SHDFAC,SLOPE,SMCDRY,SMCMAX,SMCREF,SMCWLT, &
  1764. T24,TBOT,TH2,ZBOT,EMISSI
  1765. REAL, INTENT(INOUT) :: CMC,BETA,T1
  1766. REAL, INTENT(OUT) :: DEW,DRIP,EC,EDIR,ETA,ETT,FLX1,FLX3, &
  1767. RUNOFF1,RUNOFF2,RUNOFF3,SSOIL
  1768. REAL, DIMENSION(1:NSOIL),INTENT(IN) :: RTDIS,ZSOIL
  1769. REAL, DIMENSION(1:NSOIL),INTENT(OUT) :: ET
  1770. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SMC,SH2O,STC
  1771. REAL, DIMENSION(1:NSOIL) :: ET1
  1772. REAL :: EC1,EDIR1,ETT1,DF1,ETA1,ETP1,PRCP1,YY, &
  1773. YYNUM,ZZ1
  1774. ! ----------------------------------------------------------------------
  1775. ! EXECUTABLE CODE BEGINS HERE:
  1776. ! CONVERT ETP Fnd PRCP FROM KG M-2 S-1 TO M S-1 AND INITIALIZE DEW.
  1777. ! ----------------------------------------------------------------------
  1778. PRCP1 = PRCP * 0.001
  1779. ETP1 = ETP * 0.001
  1780. DEW = 0.0
  1781. ! ----------------------------------------------------------------------
  1782. ! INITIALIZE EVAP TERMS.
  1783. ! ----------------------------------------------------------------------
  1784. EDIR = 0.
  1785. EDIR1 = 0.
  1786. EC1 = 0.
  1787. EC = 0.
  1788. DO K = 1,NSOIL
  1789. ET(K) = 0.
  1790. ET1(K) = 0.
  1791. END DO
  1792. ETT = 0.
  1793. ETT1 = 0.
  1794. IF (ETP > 0.0) THEN
  1795. CALL EVAPO (ETA1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL, &
  1796. SH2O, &
  1797. SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
  1798. SMCREF,SHDFAC,CMCMAX, &
  1799. SMCDRY,CFACTR, &
  1800. EDIR1,EC1,ET1,ETT1,SFCTMP,Q2,NROOT,RTDIS,FXEXP)
  1801. CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
  1802. SH2O,SLOPE,KDT,FRZFACT, &
  1803. SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
  1804. SHDFAC,CMCMAX, &
  1805. RUNOFF1,RUNOFF2,RUNOFF3, &
  1806. EDIR1,EC1,ET1, &
  1807. DRIP)
  1808. ! ----------------------------------------------------------------------
  1809. ! CONVERT MODELED EVAPOTRANSPIRATION FROM M S-1 TO KG M-2 S-1.
  1810. ! ----------------------------------------------------------------------
  1811. ETA = ETA1 * 1000.0
  1812. ! ----------------------------------------------------------------------
  1813. ! IF ETP < 0, ASSUME DEW FORMS (TRANSFORM ETP1 INTO DEW AND REINITIALIZE
  1814. ! ETP1 TO ZERO).
  1815. ! ----------------------------------------------------------------------
  1816. ELSE
  1817. DEW = - ETP1
  1818. ! ----------------------------------------------------------------------
  1819. ! CONVERT PRCP FROM 'KG M-2 S-1' TO 'M S-1' AND ADD DEW AMOUNT.
  1820. ! ----------------------------------------------------------------------
  1821. PRCP1 = PRCP1+ DEW
  1822. CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
  1823. SH2O,SLOPE,KDT,FRZFACT, &
  1824. SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
  1825. SHDFAC,CMCMAX, &
  1826. RUNOFF1,RUNOFF2,RUNOFF3, &
  1827. EDIR1,EC1,ET1, &
  1828. DRIP)
  1829. ! ----------------------------------------------------------------------
  1830. ! CONVERT MODELED EVAPOTRANSPIRATION FROM 'M S-1' TO 'KG M-2 S-1'.
  1831. ! ----------------------------------------------------------------------
  1832. ! ETA = ETA1 * 1000.0
  1833. END IF
  1834. ! ----------------------------------------------------------------------
  1835. ! BASED ON ETP AND E VALUES, DETERMINE BETA
  1836. ! ----------------------------------------------------------------------
  1837. IF ( ETP <= 0.0 ) THEN
  1838. BETA = 0.0
  1839. ETA = ETP
  1840. IF ( ETP < 0.0 ) THEN
  1841. BETA = 1.0
  1842. END IF
  1843. ELSE
  1844. BETA = ETA / ETP
  1845. END IF
  1846. ! ----------------------------------------------------------------------
  1847. ! CONVERT MODELED EVAPOTRANSPIRATION COMPONENTS 'M S-1' TO 'KG M-2 S-1'.
  1848. ! ----------------------------------------------------------------------
  1849. EDIR = EDIR1*1000.
  1850. EC = EC1*1000.
  1851. DO K = 1,NSOIL
  1852. ET(K) = ET1(K)*1000.
  1853. END DO
  1854. ETT = ETT1*1000.
  1855. ! ----------------------------------------------------------------------
  1856. ! GET SOIL THERMAL DIFFUXIVITY/CONDUCTIVITY FOR TOP SOIL LYR,
  1857. ! CALC. ADJUSTED TOP LYR SOIL TEMP AND ADJUSTED SOIL FLUX, THEN
  1858. ! CALL SHFLX TO COMPUTE/UPDATE SOIL HEAT FLUX AND SOIL TEMPS.
  1859. ! ----------------------------------------------------------------------
  1860. CALL TDFCND (DF1,SMC (1),QUARTZ,SMCMAX,SH2O (1))
  1861. !urban
  1862. IF ( VEGTYP == ISURBAN ) DF1=3.24
  1863. !
  1864. ! ----------------------------------------------------------------------
  1865. ! VEGETATION GREENNESS FRACTION REDUCTION IN SUBSURFACE HEAT FLUX
  1866. ! VIA REDUCTION FACTOR, WHICH IS CONVENIENT TO APPLY HERE TO THERMAL
  1867. ! DIFFUSIVITY THAT IS LATER USED IN HRT TO COMPUTE SUB SFC HEAT FLUX
  1868. ! (SEE ADDITIONAL COMMENTS ON VEG EFFECT SUB-SFC HEAT FLX IN
  1869. ! ROUTINE SFLX)
  1870. ! ----------------------------------------------------------------------
  1871. DF1 = DF1 * EXP (SBETA * SHDFAC)
  1872. ! ----------------------------------------------------------------------
  1873. ! COMPUTE INTERMEDIATE TERMS PASSED TO ROUTINE HRT (VIA ROUTINE
  1874. ! SHFLX BELOW) FOR USE IN COMPUTING SUBSURFACE HEAT FLUX IN HRT
  1875. ! ----------------------------------------------------------------------
  1876. YYNUM = FDOWN - EMISSI*SIGMA * T24
  1877. YY = SFCTMP + (YYNUM / RCH + TH2- SFCTMP - BETA * EPSCA) / RR
  1878. ZZ1 = DF1 / ( -0.5 * ZSOIL (1) * RCH * RR ) + 1.0
  1879. !urban
  1880. CALL SHFLX (SSOIL,STC,SMC,SMCMAX,NSOIL,T1,DT,YY,ZZ1,ZSOIL, &
  1881. TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE, &
  1882. QUARTZ,CSOIL,VEGTYP,ISURBAN)
  1883. ! ----------------------------------------------------------------------
  1884. ! SET FLX1 AND FLX3 (SNOPACK PHASE CHANGE HEAT FLUXES) TO ZERO SINCE
  1885. ! THEY ARE NOT USED HERE IN SNOPAC. FLX2 (FREEZING RAIN HEAT FLUX) WAS
  1886. ! SIMILARLY INITIALIZED IN THE PENMAN ROUTINE.
  1887. ! ----------------------------------------------------------------------
  1888. FLX1 = CPH2O * PRCP * (T1- SFCTMP)
  1889. FLX3 = 0.0
  1890. ! ----------------------------------------------------------------------
  1891. END SUBROUTINE NOPAC
  1892. ! ----------------------------------------------------------------------
  1893. SUBROUTINE PENMAN (SFCTMP,SFCPRS,CH,T2V,TH2,PRCP,FDOWN,T24,SSOIL, &
  1894. & Q2,Q2SAT,ETP,RCH,EPSCA,RR,SNOWNG,FRZGRA, &
  1895. & DQSDT2,FLX2,EMISSI_IN,SNEQV,T1,ICE,SNCOVR)
  1896. ! ----------------------------------------------------------------------
  1897. ! SUBROUTINE PENMAN
  1898. ! ----------------------------------------------------------------------
  1899. ! CALCULATE POTENTIAL EVAPORATION FOR THE CURRENT POINT. VARIOUS
  1900. ! PARTIAL SUMS/PRODUCTS ARE ALSO CALCULATED AND PASSED BACK TO THE
  1901. ! CALLING ROUTINE FOR LATER USE.
  1902. ! ----------------------------------------------------------------------
  1903. IMPLICIT NONE
  1904. LOGICAL, INTENT(IN) :: SNOWNG, FRZGRA
  1905. REAL, INTENT(IN) :: CH, DQSDT2,FDOWN,PRCP, &
  1906. Q2, Q2SAT,SSOIL, SFCPRS, SFCTMP, &
  1907. T2V, TH2,EMISSI_IN,SNEQV
  1908. REAL, INTENT(IN) :: T1 , SNCOVR
  1909. !
  1910. ! kmh 09/13/2006
  1911. INTEGER, INTENT(IN) :: ICE
  1912. ! kmh 09/03/2006
  1913. !
  1914. REAL, INTENT(OUT) :: EPSCA,ETP,FLX2,RCH,RR,T24
  1915. REAL :: A, DELTA, FNET,RAD,RHO,EMISSI,ELCP1,LVS
  1916. REAL, PARAMETER :: ELCP = 2.4888E+3, LSUBC = 2.501000E+6,CP = 1004.6
  1917. REAL, PARAMETER :: LSUBS = 2.83E+6
  1918. ! ----------------------------------------------------------------------
  1919. ! EXECUTABLE CODE BEGINS HERE:
  1920. ! ----------------------------------------------------------------------
  1921. ! ----------------------------------------------------------------------
  1922. ! PREPARE PARTIAL QUANTITIES FOR PENMAN EQUATION.
  1923. ! ----------------------------------------------------------------------
  1924. EMISSI=EMISSI_IN
  1925. IF ( ICE == 0 ) THEN
  1926. ! Non-glacial land
  1927. ELCP1 = (1.0-SNCOVR)*ELCP + SNCOVR*ELCP*LSUBS/LSUBC
  1928. LVS = (1.0-SNCOVR)*LSUBC + SNCOVR*LSUBS
  1929. ELSEIF ( ICE == -1 ) THEN
  1930. ! Glacial ice
  1931. IF ( T1 > 273.15 ) THEN
  1932. ELCP1=ELCP
  1933. LVS=LSUBC
  1934. ELSE
  1935. ELCP1 = ELCP*LSUBS/LSUBC
  1936. LVS = LSUBS
  1937. ENDIF
  1938. ENDIF
  1939. FLX2 = 0.0
  1940. ! DELTA = ELCP * DQSDT2
  1941. DELTA = ELCP1 * DQSDT2
  1942. T24 = SFCTMP * SFCTMP * SFCTMP * SFCTMP
  1943. ! RR = T24 * 6.48E-8 / (SFCPRS * CH) + 1.0
  1944. RR = EMISSI*T24 * 6.48E-8 / (SFCPRS * CH) + 1.0
  1945. RHO = SFCPRS / (RD * T2V)
  1946. ! ----------------------------------------------------------------------
  1947. ! ADJUST THE PARTIAL SUMS / PRODUCTS WITH THE LATENT HEAT
  1948. ! EFFECTS CAUSED BY FALLING PRECIPITATION.
  1949. ! ----------------------------------------------------------------------
  1950. RCH = RHO * CP * CH
  1951. IF (.NOT. SNOWNG) THEN
  1952. IF (PRCP > 0.0) RR = RR + CPH2O * PRCP / RCH
  1953. ELSE
  1954. RR = RR + CPICE * PRCP / RCH
  1955. END IF
  1956. ! ----------------------------------------------------------------------
  1957. ! INCLUDE THE LATENT HEAT EFFECTS OF FRZNG RAIN CONVERTING TO ICE ON
  1958. ! IMPACT IN THE CALCULATION OF FLX2 AND FNET.
  1959. ! ----------------------------------------------------------------------
  1960. ! FNET = FDOWN - SIGMA * T24- SSOIL
  1961. FNET = FDOWN - EMISSI*SIGMA * T24- SSOIL
  1962. IF (FRZGRA) THEN
  1963. FLX2 = - LSUBF * PRCP
  1964. FNET = FNET - FLX2
  1965. ! ----------------------------------------------------------------------
  1966. ! FINISH PENMAN EQUATION CALCULATIONS.
  1967. ! ----------------------------------------------------------------------
  1968. END IF
  1969. RAD = FNET / RCH + TH2- SFCTMP
  1970. ! A = ELCP * (Q2SAT - Q2)
  1971. A = ELCP1 * (Q2SAT - Q2)
  1972. EPSCA = (A * RR + RAD * DELTA) / (DELTA + RR)
  1973. ! ETP = EPSCA * RCH / LSUBC
  1974. ETP = EPSCA * RCH / LVS
  1975. ! ----------------------------------------------------------------------
  1976. END SUBROUTINE PENMAN
  1977. ! ----------------------------------------------------------------------
  1978. SUBROUTINE REDPRM (VEGTYP,SOILTYP,SLOPETYP,CFACTR,CMCMAX,RSMAX, &
  1979. TOPT, &
  1980. REFKDT,KDT,SBETA, SHDFAC,RSMIN,RGL,HS,ZBOT,FRZX, &
  1981. PSISAT,SLOPE,SNUP,SALP,BEXP,DKSAT,DWSAT, &
  1982. SMCMAX,SMCWLT,SMCREF,SMCDRY,F1,QUARTZ,FXEXP, &
  1983. RTDIS,SLDPTH,ZSOIL, NROOT,NSOIL,CZIL, &
  1984. LAIMIN, LAIMAX, EMISSMIN, EMISSMAX, ALBEDOMIN, &
  1985. ALBEDOMAX, Z0MIN, Z0MAX, CSOIL, PTU, LLANDUSE, &
  1986. LSOIL, LOCAL,LVCOEF)
  1987. IMPLICIT NONE
  1988. ! ----------------------------------------------------------------------
  1989. ! Internally set (default valuess)
  1990. ! all soil and vegetation parameters required for the execusion oF
  1991. ! the Noah lsm are defined in VEGPARM.TBL, SOILPARM.TB, and GENPARM.TBL.
  1992. ! ----------------------------------------------------------------------
  1993. ! Vegetation parameters:
  1994. ! ALBBRD: SFC background snow-free albedo
  1995. ! CMXTBL: MAX CNPY Capacity
  1996. ! Z0BRD: Background roughness length
  1997. ! SHDFAC: Green vegetation fraction
  1998. ! NROOT: Rooting depth
  1999. ! RSMIN: Mimimum stomatal resistance
  2000. ! RSMAX: Max. stomatal resistance
  2001. ! RGL: Parameters used in radiation stress function
  2002. ! HS: Parameter used in vapor pressure deficit functio
  2003. ! TOPT: Optimum transpiration air temperature.
  2004. ! CMCMAX: Maximum canopy water capacity
  2005. ! CFACTR: Parameter used in the canopy inteception calculation
  2006. ! SNUP: Threshold snow depth (in water equivalent m) that
  2007. ! implies 100 percent snow cover
  2008. ! LAI: Leaf area index
  2009. !
  2010. ! ----------------------------------------------------------------------
  2011. ! Soil parameters:
  2012. ! SMCMAX: MAX soil moisture content (porosity)
  2013. ! SMCREF: Reference soil moisture (field capacity)
  2014. ! SMCWLT: Wilting point soil moisture
  2015. ! SMCWLT: Air dry soil moist content limits
  2016. ! SSATPSI: SAT (saturation) soil potential
  2017. ! DKSAT: SAT soil conductivity
  2018. ! BEXP: B parameter
  2019. ! SSATDW: SAT soil diffusivity
  2020. ! F1: Soil thermal diffusivity/conductivity coef.
  2021. ! QUARTZ: Soil quartz content
  2022. ! Modified by F. Chen (12/22/97) to use the STATSGO soil map
  2023. ! Modified By F. Chen (01/22/00) to include PLaya, Lava, and White San
  2024. ! Modified By F. Chen (08/05/02) to include additional parameters for the Noah
  2025. ! NOTE: SATDW = BB*SATDK*(SATPSI/MAXSMC)
  2026. ! F11 = ALOG10(SATPSI) + BB*ALOG10(MAXSMC) + 2.0
  2027. ! REFSMC1=MAXSMC*(5.79E-9/SATDK)**(1/(2*BB+3)) 5.79E-9 m/s= 0.5 mm
  2028. ! REFSMC=REFSMC1+1./3.(MAXSMC-REFSMC1)
  2029. ! WLTSMC1=MAXSMC*(200./SATPSI)**(-1./BB) (Wetzel and Chang, 198
  2030. ! WLTSMC=WLTSMC1-0.5*WLTSMC1
  2031. ! Note: the values for playa is set for it to have a thermal conductivit
  2032. ! as sand and to have a hydrulic conductivity as clay
  2033. !
  2034. ! ----------------------------------------------------------------------
  2035. ! Class parameter 'SLOPETYP' was included to estimate linear reservoir
  2036. ! coefficient 'SLOPE' to the baseflow runoff out of the bottom layer.
  2037. ! lowest class (slopetyp=0) means highest slope parameter = 1.
  2038. ! definition of slopetyp from 'zobler' slope type:
  2039. ! slope class percent slope
  2040. ! 1 0-8
  2041. ! 2 8-30
  2042. ! 3 > 30
  2043. ! 4 0-30
  2044. ! 5 0-8 & > 30
  2045. ! 6 8-30 & > 30
  2046. ! 7 0-8, 8-30, > 30
  2047. ! 9 GLACIAL ICE
  2048. ! BLANK OCEAN/SEA
  2049. ! SLOPE_DATA: linear reservoir coefficient
  2050. ! SBETA_DATA: parameter used to caluculate vegetation effect on soil heat
  2051. ! FXEXP_DAT: soil evaporation exponent used in DEVAP
  2052. ! CSOIL_DATA: soil heat capacity [J M-3 K-1]
  2053. ! SALP_DATA: shape parameter of distribution function of snow cover
  2054. ! REFDK_DATA and REFKDT_DATA: parameters in the surface runoff parameteriz
  2055. ! FRZK_DATA: frozen ground parameter
  2056. ! ZBOT_DATA: depth[M] of lower boundary soil temperature
  2057. ! CZIL_DATA: calculate roughness length of heat
  2058. ! SMLOW_DATA and MHIGH_DATA: two soil moisture wilt, soil moisture referen
  2059. ! parameters
  2060. ! Set maximum number of soil-, veg-, and slopetyp in data statement.
  2061. ! ----------------------------------------------------------------------
  2062. INTEGER, PARAMETER :: MAX_SLOPETYP=30,MAX_SOILTYP=30,MAX_VEGTYP=30
  2063. LOGICAL :: LOCAL
  2064. CHARACTER (LEN=256), INTENT(IN):: LLANDUSE, LSOIL
  2065. ! Veg parameters
  2066. INTEGER, INTENT(IN) :: VEGTYP
  2067. INTEGER, INTENT(OUT) :: NROOT
  2068. REAL, INTENT(INOUT) :: SHDFAC
  2069. REAL, INTENT(OUT) :: HS,RSMIN,RGL,SNUP, &
  2070. CMCMAX,RSMAX,TOPT, &
  2071. EMISSMIN, EMISSMAX, &
  2072. LAIMIN, LAIMAX, &
  2073. Z0MIN, Z0MAX, &
  2074. ALBEDOMIN, ALBEDOMAX
  2075. ! Soil parameters
  2076. INTEGER, INTENT(IN) :: SOILTYP
  2077. REAL, INTENT(OUT) :: BEXP,DKSAT,DWSAT,F1,QUARTZ,SMCDRY, &
  2078. SMCMAX,SMCREF,SMCWLT,PSISAT
  2079. ! General parameters
  2080. INTEGER, INTENT(IN) :: SLOPETYP,NSOIL
  2081. INTEGER :: I
  2082. REAL, INTENT(OUT) :: SLOPE,CZIL,SBETA,FXEXP, &
  2083. CSOIL,SALP,FRZX,KDT,CFACTR, &
  2084. ZBOT,REFKDT,PTU
  2085. REAL, INTENT(OUT) :: LVCOEF
  2086. REAL,DIMENSION(1:NSOIL),INTENT(IN) :: SLDPTH,ZSOIL
  2087. REAL,DIMENSION(1:NSOIL),INTENT(OUT):: RTDIS
  2088. REAL :: FRZFACT,FRZK,REFDK
  2089. ! SAVE
  2090. ! ----------------------------------------------------------------------
  2091. !
  2092. IF (SOILTYP .gt. SLCATS) THEN
  2093. CALL wrf_error_fatal ( 'Warning: too many input soil types' )
  2094. END IF
  2095. IF (VEGTYP .gt. LUCATS) THEN
  2096. CALL wrf_error_fatal ( 'Warning: too many input landuse types' )
  2097. END IF
  2098. IF (SLOPETYP .gt. SLPCATS) THEN
  2099. CALL wrf_error_fatal ( 'Warning: too many input slope types' )
  2100. END IF
  2101. ! ----------------------------------------------------------------------
  2102. ! SET-UP SOIL PARAMETERS
  2103. ! ----------------------------------------------------------------------
  2104. CSOIL = CSOIL_DATA
  2105. BEXP = BB (SOILTYP)
  2106. DKSAT = SATDK (SOILTYP)
  2107. DWSAT = SATDW (SOILTYP)
  2108. F1 = F11 (SOILTYP)
  2109. PSISAT = SATPSI (SOILTYP)
  2110. QUARTZ = QTZ (SOILTYP)
  2111. SMCDRY = DRYSMC (SOILTYP)
  2112. SMCMAX = MAXSMC (SOILTYP)
  2113. SMCREF = REFSMC (SOILTYP)
  2114. SMCWLT = WLTSMC (SOILTYP)
  2115. ! ----------------------------------------------------------------------
  2116. ! Set-up universal parameters (not dependent on SOILTYP, VEGTYP or
  2117. ! SLOPETYP)
  2118. ! ----------------------------------------------------------------------
  2119. ZBOT = ZBOT_DATA
  2120. SALP = SALP_DATA
  2121. SBETA = SBETA_DATA
  2122. REFDK = REFDK_DATA
  2123. FRZK = FRZK_DATA
  2124. FXEXP = FXEXP_DATA
  2125. REFKDT = REFKDT_DATA
  2126. PTU = 0. ! (not used yet) to satisify intent(out)
  2127. KDT = REFKDT * DKSAT / REFDK
  2128. CZIL = CZIL_DATA
  2129. SLOPE = SLOPE_DATA (SLOPETYP)
  2130. LVCOEF = LVCOEF_DATA
  2131. ! ----------------------------------------------------------------------
  2132. ! TO ADJUST FRZK PARAMETER TO ACTUAL SOIL TYPE: FRZK * FRZFACT
  2133. ! ----------------------------------------------------------------------
  2134. FRZFACT = (SMCMAX / SMCREF) * (0.412 / 0.468)
  2135. FRZX = FRZK * FRZFACT
  2136. ! ----------------------------------------------------------------------
  2137. ! SET-UP VEGETATION PARAMETERS
  2138. ! ----------------------------------------------------------------------
  2139. TOPT = TOPT_DATA
  2140. CMCMAX = CMCMAX_DATA
  2141. CFACTR = CFACTR_DATA
  2142. RSMAX = RSMAX_DATA
  2143. NROOT = NROTBL (VEGTYP)
  2144. SNUP = SNUPTBL (VEGTYP)
  2145. RSMIN = RSTBL (VEGTYP)
  2146. RGL = RGLTBL (VEGTYP)
  2147. HS = HSTBL (VEGTYP)
  2148. EMISSMIN = EMISSMINTBL (VEGTYP)
  2149. EMISSMAX = EMISSMAXTBL (VEGTYP)
  2150. LAIMIN = LAIMINTBL (VEGTYP)
  2151. LAIMAX = LAIMAXTBL (VEGTYP)
  2152. Z0MIN = Z0MINTBL (VEGTYP)
  2153. Z0MAX = Z0MAXTBL (VEGTYP)
  2154. ALBEDOMIN = ALBEDOMINTBL (VEGTYP)
  2155. ALBEDOMAX = ALBEDOMAXTBL (VEGTYP)
  2156. IF (VEGTYP .eq. BARE) SHDFAC = 0.0
  2157. IF (NROOT .gt. NSOIL) THEN
  2158. WRITE (err_message,*) 'Error: too many root layers ', &
  2159. NSOIL,NROOT
  2160. CALL wrf_error_fatal ( err_message )
  2161. ! ----------------------------------------------------------------------
  2162. ! CALCULATE ROOT DISTRIBUTION. PRESENT VERSION ASSUMES UNIFORM
  2163. ! DISTRIBUTION BASED ON SOIL LAYER DEPTHS.
  2164. ! ----------------------------------------------------------------------
  2165. END IF
  2166. DO I = 1,NROOT
  2167. RTDIS (I) = - SLDPTH (I)/ ZSOIL (NROOT)
  2168. ! ----------------------------------------------------------------------
  2169. ! SET-UP SLOPE PARAMETER
  2170. ! ----------------------------------------------------------------------
  2171. END DO
  2172. ! print*,'end of PRMRED'
  2173. ! print*,'VEGTYP',VEGTYP,'SOILTYP',SOILTYP,'SLOPETYP',SLOPETYP, &
  2174. ! & 'CFACTR',CFACTR,'CMCMAX',CMCMAX,'RSMAX',RSMAX,'TOPT',TOPT, &
  2175. ! & 'REFKDT',REFKDT,'KDT',KDT,'SBETA',SBETA, 'SHDFAC',SHDFAC, &
  2176. ! & 'RSMIN',RSMIN,'RGL',RGL,'HS',HS,'ZBOT',ZBOT,'FRZX',FRZX, &
  2177. ! & 'PSISAT',PSISAT,'SLOPE',SLOPE,'SNUP',SNUP,'SALP',SALP,'BEXP', &
  2178. ! & BEXP, &
  2179. ! & 'DKSAT',DKSAT,'DWSAT',DWSAT, &
  2180. ! & 'SMCMAX',SMCMAX,'SMCWLT',SMCWLT,'SMCREF',SMCREF,'SMCDRY',SMCDRY, &
  2181. ! & 'F1',F1,'QUARTZ',QUARTZ,'FXEXP',FXEXP, &
  2182. ! & 'RTDIS',RTDIS,'SLDPTH',SLDPTH,'ZSOIL',ZSOIL, 'NROOT',NROOT, &
  2183. ! & 'NSOIL',NSOIL,'Z0',Z0,'CZIL',CZIL,'LAI',LAI, &
  2184. ! & 'CSOIL',CSOIL,'PTU',PTU, &
  2185. ! & 'LOCAL', LOCAL
  2186. END SUBROUTINE REDPRM
  2187. SUBROUTINE ROSR12 (P,A,B,C,D,DELTA,NSOIL)
  2188. ! ----------------------------------------------------------------------
  2189. ! SUBROUTINE ROSR12
  2190. ! ----------------------------------------------------------------------
  2191. ! INVERT (SOLVE) THE TRI-DIAGONAL MATRIX PROBLEM SHOWN BELOW:
  2192. ! ### ### ### ### ### ###
  2193. ! #B(1), C(1), 0 , 0 , 0 , . . . , 0 # # # # #
  2194. ! #A(2), B(2), C(2), 0 , 0 , . . . , 0 # # # # #
  2195. ! # 0 , A(3), B(3), C(3), 0 , . . . , 0 # # # # D(3) #
  2196. ! # 0 , 0 , A(4), B(4), C(4), . . . , 0 # # P(4) # # D(4) #
  2197. ! # 0 , 0 , 0 , A(5), B(5), . . . , 0 # # P(5) # # D(5) #
  2198. ! # . . # # . # = # . #
  2199. ! # . . # # . # # . #
  2200. ! # . . # # . # # . #
  2201. ! # 0 , . . . , 0 , A(M-2), B(M-2), C(M-2), 0 # #P(M-2)# #D(M-2)#
  2202. ! # 0 , . . . , 0 , 0 , A(M-1), B(M-1), C(M-1)# #P(M-1)# #D(M-1)#
  2203. ! # 0 , . . . , 0 , 0 , 0 , A(M) , B(M) # # P(M) # # D(M) #
  2204. ! ### ### ### ### ### ###
  2205. ! ----------------------------------------------------------------------
  2206. IMPLICIT NONE
  2207. INTEGER, INTENT(IN) :: NSOIL
  2208. INTEGER :: K, KK
  2209. REAL, DIMENSION(1:NSOIL), INTENT(IN):: A, B, D
  2210. REAL, DIMENSION(1:NSOIL),INTENT(INOUT):: C,P,DELTA
  2211. ! ----------------------------------------------------------------------
  2212. ! INITIALIZE EQN COEF C FOR THE LOWEST SOIL LAYER
  2213. ! ----------------------------------------------------------------------
  2214. C (NSOIL) = 0.0
  2215. P (1) = - C (1) / B (1)
  2216. ! ----------------------------------------------------------------------
  2217. ! SOLVE THE COEFS FOR THE 1ST SOIL LAYER
  2218. ! ----------------------------------------------------------------------
  2219. ! ----------------------------------------------------------------------
  2220. ! SOLVE THE COEFS FOR SOIL LAYERS 2 THRU NSOIL
  2221. ! ----------------------------------------------------------------------
  2222. DELTA (1) = D (1) / B (1)
  2223. DO K = 2,NSOIL
  2224. P (K) = - C (K) * ( 1.0 / (B (K) + A (K) * P (K -1)) )
  2225. DELTA (K) = (D (K) - A (K)* DELTA (K -1))* (1.0/ (B (K) + A (K)&
  2226. * P (K -1)))
  2227. END DO
  2228. ! ----------------------------------------------------------------------
  2229. ! SET P TO DELTA FOR LOWEST SOIL LAYER
  2230. ! ----------------------------------------------------------------------
  2231. P (NSOIL) = DELTA (NSOIL)
  2232. ! ----------------------------------------------------------------------
  2233. ! ADJUST P FOR SOIL LAYERS 2 THRU NSOIL
  2234. ! ----------------------------------------------------------------------
  2235. DO K = 2,NSOIL
  2236. KK = NSOIL - K + 1
  2237. P (KK) = P (KK) * P (KK +1) + DELTA (KK)
  2238. END DO
  2239. ! ----------------------------------------------------------------------
  2240. END SUBROUTINE ROSR12
  2241. ! ----------------------------------------------------------------------
  2242. SUBROUTINE SHFLX (SSOIL,STC,SMC,SMCMAX,NSOIL,T1,DT,YY,ZZ1,ZSOIL, &
  2243. TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE, &
  2244. QUARTZ,CSOIL,VEGTYP,ISURBAN)
  2245. ! ----------------------------------------------------------------------
  2246. ! SUBROUTINE SHFLX
  2247. ! ----------------------------------------------------------------------
  2248. ! UPDATE THE TEMPERATURE STATE OF THE SOIL COLUMN BASED ON THE THERMAL
  2249. ! DIFFUSION EQUATION AND UPDATE THE FROZEN SOIL MOISTURE CONTENT BASED
  2250. ! ON THE TEMPERATURE.
  2251. ! ----------------------------------------------------------------------
  2252. IMPLICIT NONE
  2253. INTEGER, INTENT(IN) :: ICE, NSOIL, VEGTYP, ISURBAN
  2254. INTEGER :: I
  2255. REAL, INTENT(IN) :: BEXP,CSOIL,DF1,DT,F1,PSISAT,QUARTZ, &
  2256. SMCMAX, SMCWLT, TBOT,YY, ZBOT,ZZ1
  2257. REAL, INTENT(INOUT) :: T1
  2258. REAL, INTENT(OUT) :: SSOIL
  2259. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SMC,ZSOIL
  2260. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SH2O
  2261. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: STC
  2262. REAL, DIMENSION(1:NSOIL) :: AI, BI, CI, STCF,RHSTS
  2263. REAL, PARAMETER :: T0 = 273.15
  2264. ! ----------------------------------------------------------------------
  2265. ! HRT ROUTINE CALCS THE RIGHT HAND SIDE OF THE SOIL TEMP DIF EQN
  2266. ! ----------------------------------------------------------------------
  2267. IF ( ICE == -1 ) THEN
  2268. ! Glacial ice case
  2269. CALL HRTICE_GLACIAL (RHSTS,STC,TBOT,NSOIL,ZSOIL,YY,ZZ1,DF1,&
  2270. AI,BI,CI)
  2271. CALL HSTEP (STCF,STC,RHSTS,DT,NSOIL,AI,BI,CI)
  2272. ELSEIF ( ICE == 0 ) THEN
  2273. ! Non-glacial land case
  2274. CALL HRT (RHSTS,STC,SMC,SMCMAX,NSOIL,ZSOIL,YY,ZZ1,TBOT, &
  2275. ZBOT,PSISAT,SH2O,DT, &
  2276. BEXP,F1,DF1,QUARTZ,CSOIL,AI,BI,CI,VEGTYP,ISURBAN)
  2277. CALL HSTEP (STCF,STC,RHSTS,DT,NSOIL,AI,BI,CI)
  2278. ENDIF
  2279. DO I = 1,NSOIL
  2280. STC (I) = STCF (I)
  2281. ENDDO
  2282. ! ----------------------------------------------------------------------
  2283. ! IN THE NO SNOWPACK CASE (VIA ROUTINE NOPAC BRANCH,) UPDATE THE GRND
  2284. ! (SKIN) TEMPERATURE HERE IN RESPONSE TO THE UPDATED SOIL TEMPERATURE
  2285. ! PROFILE ABOVE. (NOTE: INSPECTION OF ROUTINE SNOPAC SHOWS THAT T1
  2286. ! BELOW IS A DUMMY VARIABLE ONLY, AS SKIN TEMPERATURE IS UPDATED
  2287. ! DIFFERENTLY IN ROUTINE SNOPAC)
  2288. ! ----------------------------------------------------------------------
  2289. ! ----------------------------------------------------------------------
  2290. ! CALCULATE SURFACE SOIL HEAT FLUX
  2291. ! ----------------------------------------------------------------------
  2292. T1 = (YY + (ZZ1- 1.0) * STC (1)) / ZZ1
  2293. SSOIL = DF1 * (STC (1) - T1) / (0.5 * ZSOIL (1))
  2294. ! ----------------------------------------------------------------------
  2295. END SUBROUTINE SHFLX
  2296. ! ----------------------------------------------------------------------
  2297. SUBROUTINE SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
  2298. & SH2O,SLOPE,KDT,FRZFACT, &
  2299. & SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
  2300. & SHDFAC,CMCMAX, &
  2301. & RUNOFF1,RUNOFF2,RUNOFF3, &
  2302. & EDIR,EC,ET, &
  2303. & DRIP)
  2304. ! ----------------------------------------------------------------------
  2305. ! SUBROUTINE SMFLX
  2306. ! ----------------------------------------------------------------------
  2307. ! CALCULATE SOIL MOISTURE FLUX. THE SOIL MOISTURE CONTENT (SMC - A PER
  2308. ! UNIT VOLUME MEASUREMENT) IS A DEPENDENT VARIABLE THAT IS UPDATED WITH
  2309. ! PROGNOSTIC EQNS. THE CANOPY MOISTURE CONTENT (CMC) IS ALSO UPDATED.
  2310. ! FROZEN GROUND VERSION: NEW STATES ADDED: SH2O, AND FROZEN GROUND
  2311. ! CORRECTION FACTOR, FRZFACT AND PARAMETER SLOPE.
  2312. ! ----------------------------------------------------------------------
  2313. IMPLICIT NONE
  2314. INTEGER, INTENT(IN) :: NSOIL
  2315. INTEGER :: I,K
  2316. REAL, INTENT(IN) :: BEXP, CMCMAX, DKSAT,DWSAT, DT, EC, EDIR, &
  2317. KDT, PRCP1, SHDFAC, SLOPE, SMCMAX, SMCWLT
  2318. REAL, INTENT(OUT) :: DRIP, RUNOFF1, RUNOFF2, RUNOFF3
  2319. REAL, INTENT(INOUT) :: CMC
  2320. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ET,ZSOIL
  2321. REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: SMC, SH2O
  2322. REAL, DIMENSION(1:NSOIL) :: AI, BI, CI, STCF,RHSTS, RHSTT, &
  2323. SICE, SH2OA, SH2OFG
  2324. REAL :: DUMMY, EXCESS,FRZFACT,PCPDRP,RHSCT,TRHSCT
  2325. REAL :: FAC2
  2326. REAL :: FLIMIT
  2327. ! ----------------------------------------------------------------------
  2328. ! EXECUTABLE CODE BEGINS HERE.
  2329. ! ----------------------------------------------------------------------
  2330. ! ----------------------------------------------------------------------
  2331. ! COMPUTE THE RIGHT HAND SIDE OF THE CANOPY EQN TERM ( RHSCT )
  2332. ! ----------------------------------------------------------------------
  2333. DUMMY = 0.
  2334. ! ----------------------------------------------------------------------
  2335. ! CONVERT RHSCT (A RATE) TO TRHSCT (AN AMOUNT) AND ADD IT TO EXISTING
  2336. ! CMC. IF RESULTING AMT EXCEEDS MAX CAPACITY, IT BECOMES DRIP AND WILL
  2337. ! FALL TO THE GRND.
  2338. ! ----------------------------------------------------------------------
  2339. RHSCT = SHDFAC * PRCP1- EC
  2340. DRIP = 0.
  2341. TRHSCT = DT * RHSCT
  2342. EXCESS = CMC + TRHSCT
  2343. ! ----------------------------------------------------------------------
  2344. ! PCPDRP IS THE COMBINED PRCP1 AND DRIP (FROM CMC) THAT GOES INTO THE
  2345. ! SOIL
  2346. ! ----------------------------------------------------------------------
  2347. IF (EXCESS > CMCMAX) DRIP = EXCESS - CMCMAX
  2348. PCPDRP = (1. - SHDFAC) * PRCP1+ DRIP / DT
  2349. ! ----------------------------------------------------------------------
  2350. ! STORE ICE CONTENT AT EACH SOIL LAYER BEFORE CALLING SRT and SSTEP
  2351. !
  2352. DO I = 1,NSOIL
  2353. SICE (I) = SMC (I) - SH2O (I)
  2354. END DO
  2355. ! ----------------------------------------------------------------------
  2356. ! CALL SUBROUTINES SRT AND SSTEP TO SOLVE THE SOIL MOISTURE
  2357. ! TENDENCY EQUATIONS.
  2358. ! IF THE INFILTRATING PRECIP RATE IS NONTRIVIAL,
  2359. ! (WE CONSIDER NONTRIVIAL TO BE A PRECIP TOTAL OVER THE TIME STEP
  2360. ! EXCEEDING ONE ONE-THOUSANDTH OF THE WATER HOLDING CAPACITY OF
  2361. ! THE FIRST SOIL LAYER)
  2362. ! THEN CALL THE SRT/SSTEP SUBROUTINE PAIR TWICE IN THE MANNER OF
  2363. ! TIME SCHEME "F" (IMPLICIT STATE, AVERAGED COEFFICIENT)
  2364. ! OF SECTION 2 OF KALNAY AND KANAMITSU (1988, MWR, VOL 116,
  2365. ! PAGES 1945-1958)TO MINIMIZE 2-DELTA-T OSCILLATIONS IN THE
  2366. ! SOIL MOISTURE VALUE OF THE TOP SOIL LAYER THAT CAN ARISE BECAUSE
  2367. ! OF THE EXTREME NONLINEAR DEPENDENCE OF THE SOIL HYDRAULIC
  2368. ! DIFFUSIVITY COEFFICIENT AND THE HYDRAULIC CONDUCTIVITY ON THE
  2369. ! SOIL MOISTURE STATE
  2370. ! OTHERWISE CALL THE SRT/SSTEP SUBROUTINE PAIR ONCE IN THE MANNER OF
  2371. ! TIME SCHEME "D" (IMPLICIT STATE, EXPLICIT COEFFICIENT)
  2372. ! OF SECTION 2 OF KALNAY AND KANAMITSU
  2373. ! PCPDRP IS UNITS OF KG/M**2/S OR MM/S, ZSOIL IS NEGATIVE DEPTH IN M
  2374. ! ----------------------------------------------------------------------
  2375. ! According to Dr. Ken Mitchell's suggestion, add the second contraint
  2376. ! to remove numerical instability of runoff and soil moisture
  2377. ! FLIMIT is a limit value for FAC2
  2378. FAC2=0.0
  2379. DO I=1,NSOIL
  2380. FAC2=MAX(FAC2,SH2O(I)/SMCMAX)
  2381. ENDDO
  2382. CALL FAC2MIT(SMCMAX,FLIMIT)
  2383. ! ----------------------------------------------------------------------
  2384. ! FROZEN GROUND VERSION:
  2385. ! SMC STATES REPLACED BY SH2O STATES IN SRT SUBR. SH2O & SICE STATES
  2386. ! INC&UDED IN SSTEP SUBR. FROZEN GROUND CORRECTION FACTOR, FRZFACT
  2387. ! ADDED. ALL WATER BALANCE CALCULATIONS USING UNFROZEN WATER
  2388. ! ----------------------------------------------------------------------
  2389. IF ( ( (PCPDRP * DT) > (0.0001*1000.0* (- ZSOIL (1))* SMCMAX) ) &
  2390. .OR. (FAC2 > FLIMIT) ) THEN
  2391. CALL SRT (RHSTT,EDIR,ET,SH2O,SH2O,NSOIL,PCPDRP,ZSOIL, &
  2392. DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1, &
  2393. RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
  2394. CALL SSTEP (SH2OFG,SH2O,DUMMY,RHSTT,RHSCT,DT,NSOIL,SMCMAX, &
  2395. CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
  2396. DO K = 1,NSOIL
  2397. SH2OA (K) = (SH2O (K) + SH2OFG (K)) * 0.5
  2398. END DO
  2399. CALL SRT (RHSTT,EDIR,ET,SH2O,SH2OA,NSOIL,PCPDRP,ZSOIL, &
  2400. DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1, &
  2401. RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
  2402. CALL SSTEP (SH2O,SH2O,CMC,RHSTT,RHSCT,DT,NSOIL,SMCMAX, &
  2403. CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
  2404. ELSE
  2405. CALL SRT (RHSTT,EDIR,ET,SH2O,SH2O,NSOIL,PCPDRP,ZSOIL, &
  2406. DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1, &
  2407. RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
  2408. CALL SSTEP (SH2O,SH2O,CMC,RHSTT,RHSCT,DT,NSOIL,SMCMAX, &
  2409. CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
  2410. ! RUNOF = RUNOFF
  2411. END IF
  2412. ! ----------------------------------------------------------------------
  2413. END SUBROUTINE SMFLX
  2414. ! ----------------------------------------------------------------------
  2415. SUBROUTINE SNFRAC (SNEQV,SNUP,SALP,SNOWH,SNCOVR)
  2416. ! ----------------------------------------------------------------------
  2417. ! SUBROUTINE SNFRAC
  2418. ! ----------------------------------------------------------------------
  2419. ! CALCULATE SNOW FRACTION (0 -> 1)
  2420. ! SNEQV SNOW WATER EQUIVALENT (M)
  2421. ! SNUP THRESHOLD SNEQV DEPTH ABOVE WHICH SNCOVR=1
  2422. ! SALP TUNING PARAMETER
  2423. ! SNCOVR FRACTIONAL SNOW COVER
  2424. ! ----------------------------------------------------------------------
  2425. IMPLICIT NONE
  2426. REAL, INTENT(IN) :: SNEQV,SNUP,SALP,SNOWH
  2427. REAL, INTENT(OUT) :: SNCOVR
  2428. REAL :: RSNOW, Z0N
  2429. ! ----------------------------------------------------------------------
  2430. ! SNUP IS VEG-CLASS DEPENDENT SNOWDEPTH THRESHHOLD (SET IN ROUTINE
  2431. ! REDPRM) ABOVE WHICH SNOCVR=1.
  2432. ! ----------------------------------------------------------------------
  2433. IF (SNEQV < SNUP) THEN
  2434. RSNOW = SNEQV / SNUP
  2435. SNCOVR = 1. - ( EXP ( - SALP * RSNOW) - RSNOW * EXP ( - SALP))
  2436. ELSE
  2437. SNCOVR = 1.0
  2438. END IF
  2439. ! FORMULATION OF DICKINSON ET AL. 1986
  2440. ! Z0N = 0.035
  2441. ! SNCOVR=SNOWH/(SNOWH + 5*Z0N)
  2442. ! FORMULATION OF MARSHALL ET AL. 1994
  2443. ! SNCOVR=SNEQV/(SNEQV + 2*Z0N)
  2444. ! ----------------------------------------------------------------------
  2445. END SUBROUTINE SNFRAC
  2446. ! ----------------------------------------------------------------------
  2447. SUBROUTINE SNKSRC (TSNSR,TAVG,SMC,SH2O,ZSOIL,NSOIL, &
  2448. & SMCMAX,PSISAT,BEXP,DT,K,QTOT)
  2449. ! ----------------------------------------------------------------------
  2450. ! SUBROUTINE SNKSRC
  2451. ! ----------------------------------------------------------------------
  2452. ! CALCULATE SINK/SOURCE TERM OF THE TERMAL DIFFUSION EQUATION. (SH2O) IS
  2453. ! AVAILABLE LIQUED WATER.
  2454. ! ----------------------------------------------------------------------
  2455. IMPLICIT NONE
  2456. INTEGER, INTENT(IN) :: K,NSOIL
  2457. REAL, INTENT(IN) :: BEXP, DT, PSISAT, QTOT, SMC, SMCMAX, &
  2458. TAVG
  2459. REAL, INTENT(INOUT) :: SH2O
  2460. REAL, DIMENSION(1:NSOIL), INTENT(IN):: ZSOIL
  2461. REAL :: DF, DZ, DZH, FREE, TSNSR, &
  2462. TDN, TM, TUP, TZ, X0, XDN, XH2O, XUP
  2463. REAL, PARAMETER :: DH2O = 1.0000E3, HLICE = 3.3350E5, &
  2464. T0 = 2.7315E2
  2465. IF (K == 1) THEN
  2466. DZ = - ZSOIL (1)
  2467. ELSE
  2468. DZ = ZSOIL (K -1) - ZSOIL (K)
  2469. END IF
  2470. ! ----------------------------------------------------------------------
  2471. ! VIA FUNCTION FRH2O, COMPUTE POTENTIAL OR 'EQUILIBRIUM' UNFROZEN
  2472. ! SUPERCOOLED FREE WATER FOR GIVEN SOIL TYPE AND SOIL LAYER TEMPERATURE.
  2473. ! FUNCTION FRH20 INVOKES EQN (17) FROM V. KOREN ET AL (1999, JGR, VOL.
  2474. ! 104, PG 19573). (ASIDE: LATTER EQN IN JOURNAL IN CENTIGRADE UNITS.
  2475. ! ROUTINE FRH2O USE FORM OF EQN IN KELVIN UNITS.)
  2476. ! ----------------------------------------------------------------------
  2477. ! FREE = FRH2O(TAVG,SMC,SH2O,SMCMAX,BEXP,PSISAT)
  2478. ! ----------------------------------------------------------------------
  2479. ! IN NEXT BLOCK OF CODE, INVOKE EQN 18 OF V. KOREN ET AL (1999, JGR,
  2480. ! VOL. 104, PG 19573.) THAT IS, FIRST ESTIMATE THE NEW AMOUNTOF LIQUID
  2481. ! WATER, 'XH2O', IMPLIED BY THE SUM OF (1) THE LIQUID WATER AT THE BEGIN
  2482. ! OF CURRENT TIME STEP, AND (2) THE FREEZE OF THAW CHANGE IN LIQUID
  2483. ! WATER IMPLIED BY THE HEAT FLUX 'QTOT' PASSED IN FROM ROUTINE HRT.
  2484. ! SECOND, DETERMINE IF XH2O NEEDS TO BE BOUNDED BY 'FREE' (EQUIL AMT) OR
  2485. ! IF 'FREE' NEEDS TO BE BOUNDED BY XH2O.
  2486. ! ----------------------------------------------------------------------
  2487. CALL FRH2O (FREE,TAVG,SMC,SH2O,SMCMAX,BEXP,PSISAT)
  2488. ! ----------------------------------------------------------------------
  2489. ! FIRST, IF FREEZING AND REMAINING LIQUID LESS THAN LOWER BOUND, THEN
  2490. ! REDUCE EXTENT OF FREEZING, THEREBY LETTING SOME OR ALL OF HEAT FLUX
  2491. ! QTOT COOL THE SOIL TEMP LATER IN ROUTINE HRT.
  2492. ! ----------------------------------------------------------------------
  2493. XH2O = SH2O + QTOT * DT / (DH2O * HLICE * DZ)
  2494. IF ( XH2O < SH2O .AND. XH2O < FREE) THEN
  2495. IF ( FREE > SH2O ) THEN
  2496. XH2O = SH2O
  2497. ELSE
  2498. XH2O = FREE
  2499. END IF
  2500. END IF
  2501. ! ----------------------------------------------------------------------
  2502. ! SECOND, IF THAWING AND THE INCREASE IN LIQUID WATER GREATER THAN UPPER
  2503. ! BOUND, THEN REDUCE EXTENT OF THAW, THEREBY LETTING SOME OR ALL OF HEAT
  2504. ! FLUX QTOT WARM THE SOIL TEMP LATER IN ROUTINE HRT.
  2505. ! ----------------------------------------------------------------------
  2506. IF ( XH2O > SH2O .AND. XH2O > FREE ) THEN
  2507. IF ( FREE < SH2O ) THEN
  2508. XH2O = SH2O
  2509. ELSE
  2510. XH2O = FREE
  2511. END IF
  2512. END IF
  2513. ! ----------------------------------------------------------------------
  2514. ! CALCULATE PHASE-CHANGE HEAT SOURCE/SINK TERM FOR USE IN ROUTINE HRT
  2515. ! AND UPDATE LIQUID WATER TO REFLCET FINAL FREEZE/THAW INCREMENT.
  2516. ! ----------------------------------------------------------------------
  2517. ! SNKSRC = -DH2O*HLICE*DZ*(XH2O-SH2O)/DT
  2518. IF (XH2O < 0.) XH2O = 0.
  2519. IF (XH2O > SMC) XH2O = SMC
  2520. TSNSR = - DH2O * HLICE * DZ * (XH2O - SH2O)/ DT
  2521. SH2O = XH2O
  2522. ! ----------------------------------------------------------------------
  2523. END SUBROUTINE SNKSRC
  2524. ! ----------------------------------------------------------------------
  2525. SUBROUTINE SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT, &
  2526. SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
  2527. SBETA,DF1, &
  2528. Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,SSOIL,STC,EPSCA,&
  2529. SFCPRS,BEXP,PC,RCH,RR,CFACTR,SNCOVR,ESD,SNDENS,&
  2530. SNOWH,SH2O,SLOPE,KDT,FRZFACT,PSISAT, &
  2531. ZSOIL,DWSAT,DKSAT,TBOT,ZBOT,SHDFAC,RUNOFF1, &
  2532. RUNOFF2,RUNOFF3,EDIR,EC,ET,ETT,NROOT,SNOMLT, &
  2533. ICE,RTDIS,QUARTZ,FXEXP,CSOIL, &
  2534. BETA,DRIP,DEW,FLX1,FLX2,FLX3,ESNOW,ETNS,EMISSI,&
  2535. RIBB,SOLDN, &
  2536. ISURBAN, &
  2537. VEGTYP)
  2538. ! ----------------------------------------------------------------------
  2539. ! SUBROUTINE SNOPAC
  2540. ! ----------------------------------------------------------------------
  2541. ! CALCULATE SOIL MOISTURE AND HEAT FLUX VALUES & UPDATE SOIL MOISTURE
  2542. ! CONTENT AND SOIL HEAT CONTENT VALUES FOR THE CASE WHEN A SNOW PACK IS
  2543. ! PRESENT.
  2544. ! ----------------------------------------------------------------------
  2545. IMPLICIT NONE
  2546. INTEGER, INTENT(IN) :: ICE, NROOT, NSOIL,VEGTYP
  2547. INTEGER, INTENT(IN) :: ISURBAN
  2548. INTEGER :: K
  2549. !
  2550. ! kmh 09/03/2006 add IT16 for surface temperature iteration
  2551. !
  2552. INTEGER :: IT16
  2553. LOGICAL, INTENT(IN) :: SNOWNG
  2554. REAL, INTENT(IN) :: BEXP,CFACTR, CMCMAX,CSOIL,DF1,DKSAT, &
  2555. DT,DWSAT, EPSCA,FDOWN,F1,FXEXP, &
  2556. FRZFACT,KDT,PC, PRCP,PSISAT,Q2,QUARTZ, &
  2557. RCH,RR,SBETA,SFCPRS, SFCTMP, SHDFAC, &
  2558. SLOPE,SMCDRY,SMCMAX,SMCREF,SMCWLT, T24, &
  2559. TBOT,TH2,ZBOT,EMISSI,SOLDN
  2560. REAL, INTENT(INOUT) :: CMC, BETA, ESD,FLX2,PRCPF,SNOWH,SNCOVR, &
  2561. SNDENS, T1, RIBB, ETP
  2562. REAL, INTENT(OUT) :: DEW,DRIP,EC,EDIR, ETNS, ESNOW,ETT, &
  2563. FLX1,FLX3, RUNOFF1,RUNOFF2,RUNOFF3, &
  2564. SSOIL,SNOMLT
  2565. REAL, DIMENSION(1:NSOIL),INTENT(IN) :: RTDIS,ZSOIL
  2566. REAL, DIMENSION(1:NSOIL),INTENT(OUT) :: ET
  2567. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SMC,SH2O,STC
  2568. REAL, DIMENSION(1:NSOIL) :: ET1
  2569. REAL :: DENOM,DSOIL,DTOT,EC1,EDIR1,ESDFLX,ETA, &
  2570. ETT1, ESNOW1, ESNOW2, ETA1,ETP1,ETP2, &
  2571. ETP3, ETNS1, ETANRG, ETAX, EX, FLX3X, &
  2572. FRCSNO,FRCSOI, PRCP1, QSAT,RSNOW, SEH, &
  2573. SNCOND,SSOIL1, T11,T12, T12A, T12AX, &
  2574. T12B, T14, YY, ZZ1
  2575. ! T12B, T14, YY, ZZ1,EMISSI_S
  2576. !
  2577. ! kmh 01/11/2007 add T15, T16, and DTOT2 for SFC T iteration and snow heat flux
  2578. !
  2579. REAL :: T15, T16, DTOT2
  2580. REAL, PARAMETER :: ESDMIN = 1.E-6, LSUBC = 2.501000E+6, &
  2581. LSUBS = 2.83E+6, TFREEZ = 273.15, &
  2582. SNOEXP = 2.0
  2583. ! ----------------------------------------------------------------------
  2584. ! EXECUTABLE CODE BEGINS HERE:
  2585. ! ----------------------------------------------------------------------
  2586. ! IF GLACIAL ICE (ICE == -1), SNOWCOVER FRACTION = 1.0,
  2587. ! AND SUBLIMATION IS AT THE POTENTIAL RATE.
  2588. ! FOR NON-GLACIAL LAND (ICE == 0), IF SNOWCOVER FRACTION < 1.0, TOTAL
  2589. ! EVAPORATION < POTENTIAL DUE TO NON-POTENTIAL CONTRIBUTION FROM
  2590. ! NON-SNOW COVERED FRACTION.
  2591. ! ----------------------------------------------------------------------
  2592. ! INITIALIZE EVAP TERMS.
  2593. ! ----------------------------------------------------------------------
  2594. ! conversions:
  2595. ! ESNOW [KG M-2 S-1]
  2596. ! ESDFLX [KG M-2 S-1] .le. ESNOW
  2597. ! ESNOW1 [M S-1]
  2598. ! ESNOW2 [M]
  2599. ! ETP [KG M-2 S-1]
  2600. ! ETP1 [M S-1]
  2601. ! ETP2 [M]
  2602. ! ----------------------------------------------------------------------
  2603. DEW = 0.
  2604. EDIR = 0.
  2605. EDIR1 = 0.
  2606. EC1 = 0.
  2607. EC = 0.
  2608. ! EMISSI_S=0.95 ! For snow
  2609. DO K = 1,NSOIL
  2610. ET (K) = 0.
  2611. ET1 (K) = 0.
  2612. END DO
  2613. ETT = 0.
  2614. ETT1 = 0.
  2615. ETNS = 0.
  2616. ETNS1 = 0.
  2617. ESNOW = 0.
  2618. ESNOW1 = 0.
  2619. ESNOW2 = 0.
  2620. ! ----------------------------------------------------------------------
  2621. ! CONVERT POTENTIAL EVAP (ETP) FROM KG M-2 S-1 TO ETP1 IN M S-1
  2622. ! ----------------------------------------------------------------------
  2623. PRCP1 = PRCPF *0.001
  2624. ! ----------------------------------------------------------------------
  2625. ! IF ETP<0 (DOWNWARD) THEN DEWFALL (=FROSTFALL IN THIS CASE).
  2626. ! ----------------------------------------------------------------------
  2627. BETA = 1.0
  2628. IF (ETP <= 0.0) THEN
  2629. IF ( ( RIBB >= 0.1 ) .AND. ( FDOWN > 150.0 ) ) THEN
  2630. ETP=(MIN(ETP*(1.0-RIBB),0.)*SNCOVR/0.980 + ETP*(0.980-SNCOVR))/0.980
  2631. ENDIF
  2632. IF(ETP == 0.) BETA = 0.0
  2633. ETP1 = ETP * 0.001
  2634. DEW = -ETP1
  2635. ESNOW2 = ETP1*DT
  2636. ETANRG = ETP*((1.-SNCOVR)*LSUBC + SNCOVR*LSUBS)
  2637. ELSE
  2638. ETP1 = ETP * 0.001
  2639. IF ( ICE == -1 ) THEN
  2640. ! GLACIAL ICE CASE
  2641. ESNOW = ETP
  2642. ESNOW1 = ESNOW*0.001
  2643. ESNOW2 = ESNOW1*DT
  2644. ETANRG = ESNOW*LSUBS
  2645. ELSEIF ( ICE == 0) THEN
  2646. ! NON-GLACIAL LAND CASE
  2647. IF (SNCOVR < 1.) THEN
  2648. CALL EVAPO (ETNS1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL, &
  2649. SH2O, &
  2650. SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
  2651. SMCREF,SHDFAC,CMCMAX, &
  2652. SMCDRY,CFACTR, &
  2653. EDIR1,EC1,ET1,ETT1,SFCTMP,Q2,NROOT,RTDIS, &
  2654. FXEXP)
  2655. ! ----------------------------------------------------------------------------
  2656. EDIR1 = EDIR1* (1. - SNCOVR)
  2657. EC1 = EC1* (1. - SNCOVR)
  2658. DO K = 1,NSOIL
  2659. ET1 (K) = ET1 (K)* (1. - SNCOVR)
  2660. END DO
  2661. ETT1 = ETT1*(1.-SNCOVR)
  2662. ! ETNS1 = EDIR1+ EC1+ ETT1
  2663. ETNS1 = ETNS1*(1.-SNCOVR)
  2664. ! ----------------------------------------------------------------------------
  2665. EDIR = EDIR1*1000.
  2666. EC = EC1*1000.
  2667. DO K = 1,NSOIL
  2668. ET (K) = ET1 (K)*1000.
  2669. END DO
  2670. ETT = ETT1*1000.
  2671. ETNS = ETNS1*1000.
  2672. ! ----------------------------------------------------------------------
  2673. ENDIF
  2674. ENDIF
  2675. ESNOW = ETP*SNCOVR
  2676. ESNOW1 = ESNOW*0.001
  2677. ESNOW2 = ESNOW1*DT
  2678. ETANRG = ESNOW*LSUBS + ETNS*LSUBC
  2679. ENDIF
  2680. ! ----------------------------------------------------------------------
  2681. ! IF PRECIP IS FALLING, CALCULATE HEAT FLUX FROM SNOW SFC TO NEWLY
  2682. ! ACCUMULATING PRECIP. NOTE THAT THIS REFLECTS THE FLUX APPROPRIATE FOR
  2683. ! THE NOT-YET-UPDATED SKIN TEMPERATURE (T1). ASSUMES TEMPERATURE OF THE
  2684. ! SNOWFALL STRIKING THE GROUND IS =SFCTMP (LOWEST MODEL LEVEL AIR TEMP).
  2685. ! ----------------------------------------------------------------------
  2686. FLX1 = 0.0
  2687. IF (SNOWNG) THEN
  2688. FLX1 = CPICE * PRCP * (T1- SFCTMP)
  2689. ELSE
  2690. IF (PRCP > 0.0) FLX1 = CPH2O * PRCP * (T1- SFCTMP)
  2691. ! ----------------------------------------------------------------------
  2692. ! CALCULATE AN 'EFFECTIVE SNOW-GRND SFC TEMP' (T12) BASED ON HEAT FLUXES
  2693. ! BETWEEN THE SNOW PACK AND THE SOIL AND ON NET RADIATION.
  2694. ! INCLUDE FLX1 (PRECIP-SNOW SFC) AND FLX2 (FREEZING RAIN LATENT HEAT)
  2695. ! FLUXES. FLX1 FROM ABOVE, FLX2 BROUGHT IN VIA COMMOM BLOCK RITE.
  2696. ! FLX2 REFLECTS FREEZING RAIN LATENT HEAT FLUX USING T1 CALCULATED IN
  2697. ! PENMAN.
  2698. ! ----------------------------------------------------------------------
  2699. END IF
  2700. DSOIL = - (0.5 * ZSOIL (1))
  2701. DTOT = SNOWH + DSOIL
  2702. DENOM = 1.0+ DF1 / (DTOT * RR * RCH)
  2703. ! surface emissivity weighted by snow cover fraction
  2704. ! T12A = ( (FDOWN - FLX1 - FLX2 - &
  2705. ! & ((SNCOVR*EMISSI_S)+EMISSI*(1.0-SNCOVR))*SIGMA *T24)/RCH &
  2706. ! & + TH2 - SFCTMP - ETANRG/RCH ) / RR
  2707. T12A = ( (FDOWN - FLX1- FLX2- EMISSI * SIGMA * T24)/ RCH &
  2708. + TH2- SFCTMP - ETANRG / RCH ) / RR
  2709. T12B = DF1 * STC (1) / (DTOT * RR * RCH)
  2710. ! ----------------------------------------------------------------------
  2711. ! IF THE 'EFFECTIVE SNOW-GRND SFC TEMP' IS AT OR BELOW FREEZING, NO SNOW
  2712. ! MELT WILL OCCUR. SET THE SKIN TEMP TO THIS EFFECTIVE TEMP. REDUCE
  2713. ! (BY SUBLIMINATION ) OR INCREASE (BY FROST) THE DEPTH OF THE SNOWPACK,
  2714. ! DEPENDING ON SIGN OF ETP.
  2715. ! UPDATE SOIL HEAT FLUX (SSOIL) USING NEW SKIN TEMPERATURE (T1)
  2716. ! SINCE NO SNOWMELT, SET ACCUMULATED SNOWMELT TO ZERO, SET 'EFFECTIVE'
  2717. ! PRECIP FROM SNOWMELT TO ZERO, SET PHASE-CHANGE HEAT FLUX FROM SNOWMELT
  2718. ! TO ZERO.
  2719. ! ----------------------------------------------------------------------
  2720. ! SUB-FREEZING BLOCK
  2721. ! ----------------------------------------------------------------------
  2722. T12 = (SFCTMP + T12A + T12B) / DENOM
  2723. IF (T12 <= TFREEZ) THEN
  2724. T1 = T12
  2725. SSOIL = DF1 * (T1- STC (1)) / DTOT
  2726. ! ESD = MAX (0.0, ESD- ETP2)
  2727. ESD = MAX(0.0, ESD-ESNOW2)
  2728. FLX3 = 0.0
  2729. EX = 0.0
  2730. SNOMLT = 0.0
  2731. ! ----------------------------------------------------------------------
  2732. ! IF THE 'EFFECTIVE SNOW-GRND SFC TEMP' IS ABOVE FREEZING, SNOW MELT
  2733. ! WILL OCCUR. CALL THE SNOW MELT RATE,EX AND AMT, SNOMLT. REVISE THE
  2734. ! EFFECTIVE SNOW DEPTH. REVISE THE SKIN TEMP BECAUSE IT WOULD HAVE CHGD
  2735. ! DUE TO THE LATENT HEAT RELEASED BY THE MELTING. CALC THE LATENT HEAT
  2736. ! RELEASED, FLX3. SET THE EFFECTIVE PRECIP, PRCP1 TO THE SNOW MELT RATE,
  2737. ! EX FOR USE IN SMFLX. ADJUSTMENT TO T1 TO ACCOUNT FOR SNOW PATCHES.
  2738. ! CALCULATE QSAT VALID AT FREEZING POINT. NOTE THAT ESAT (SATURATION
  2739. ! VAPOR PRESSURE) VALUE OF 6.11E+2 USED HERE IS THAT VALID AT FRZZING
  2740. ! POINT. NOTE THAT ETP FROM CALL PENMAN IN SFLX IS IGNORED HERE IN
  2741. ! FAVOR OF BULK ETP OVER 'OPEN WATER' AT FREEZING TEMP.
  2742. ! UPDATE SOIL HEAT FLUX (S) USING NEW SKIN TEMPERATURE (T1)
  2743. ! ----------------------------------------------------------------------
  2744. ! ABOVE FREEZING BLOCK
  2745. ! ----------------------------------------------------------------------
  2746. ELSE
  2747. T1 = TFREEZ * SNCOVR ** SNOEXP + T12 * (1.0- SNCOVR ** SNOEXP)
  2748. BETA = 1.0
  2749. ! ----------------------------------------------------------------------
  2750. ! IF POTENTIAL EVAP (SUBLIMATION) GREATER THAN DEPTH OF SNOWPACK.
  2751. ! BETA<1
  2752. ! SNOWPACK HAS SUBLIMATED AWAY, SET DEPTH TO ZERO.
  2753. ! ----------------------------------------------------------------------
  2754. IF ( ICE == -1 ) then
  2755. ! kmh 12/15/2005 modify SSOIL
  2756. ! kmh 09/03/2006 modify DTOT
  2757. IF ( DTOT .GT. 2.0*DSOIL ) THEN
  2758. DTOT = 2.0*DSOIL
  2759. ENDIF
  2760. ENDIF
  2761. SSOIL = DF1 * (T1- STC (1)) / DTOT
  2762. IF (ESD-ESNOW2 <= ESDMIN) THEN
  2763. ESD = 0.0
  2764. EX = 0.0
  2765. SNOMLT = 0.0
  2766. FLX3 = 0.0
  2767. ! ----------------------------------------------------------------------
  2768. ! SUBLIMATION LESS THAN DEPTH OF SNOWPACK
  2769. ! SNOWPACK (ESD) REDUCED BY ESNOW2 (DEPTH OF SUBLIMATED SNOW)
  2770. ! ----------------------------------------------------------------------
  2771. ELSE
  2772. ESD = ESD-ESNOW2
  2773. ETP3 = ETP * LSUBC
  2774. SEH = RCH * (T1- TH2)
  2775. T14 = T1* T1
  2776. T14 = T14* T14
  2777. ! FLX3 = FDOWN - FLX1 - FLX2 - &
  2778. ! ((SNCOVR*EMISSI_S)+EMISSI*(1-SNCOVR))*SIGMA*T14 - &
  2779. ! SSOIL - SEH - ETANRG
  2780. FLX3 = FDOWN - FLX1- FLX2- EMISSI*SIGMA * T14- SSOIL - SEH - ETANRG
  2781. IF (FLX3 <= 0.0) FLX3 = 0.0
  2782. ! ----------------------------------------------------------------------
  2783. ! SNOWMELT REDUCTION DEPENDING ON SNOW COVER
  2784. ! ----------------------------------------------------------------------
  2785. EX = FLX3*0.001/ LSUBF
  2786. ! ----------------------------------------------------------------------
  2787. ! ESDMIN REPRESENTS A SNOWPACK DEPTH THRESHOLD VALUE BELOW WHICH WE
  2788. ! CHOOSE NOT TO RETAIN ANY SNOWPACK, AND INSTEAD INCLUDE IT IN SNOWMELT.
  2789. ! ----------------------------------------------------------------------
  2790. SNOMLT = EX * DT
  2791. IF (ESD- SNOMLT >= ESDMIN) THEN
  2792. ESD = ESD- SNOMLT
  2793. ! ----------------------------------------------------------------------
  2794. ! SNOWMELT EXCEEDS SNOW DEPTH
  2795. ! ----------------------------------------------------------------------
  2796. ELSE
  2797. EX = ESD / DT
  2798. FLX3 = EX *1000.0* LSUBF
  2799. SNOMLT = ESD
  2800. ESD = 0.0
  2801. ! ----------------------------------------------------------------------
  2802. ! END OF 'ESD .LE. ETP2' IF-BLOCK
  2803. ! ----------------------------------------------------------------------
  2804. END IF
  2805. END IF
  2806. ! ----------------------------------------------------------------------
  2807. ! END OF 'T12 .LE. TFREEZ' IF-BLOCK
  2808. ! ----------------------------------------------------------------------
  2809. ! ----------------------------------------------------------------------
  2810. ! IF NON-GLACIAL LAND, ADD SNOWMELT RATE (EX) TO PRECIP RATE TO BE USED
  2811. ! IN SUBROUTINE SMFLX (SOIL MOISTURE EVOLUTION) VIA INFILTRATION.
  2812. !
  2813. ! FOR GLACIAL ICE, THE SNOWMELT WILL BE ADDED TO SUBSURFACE
  2814. ! RUNOFF/BASEFLOW LATER NEAR THE END OF SFLX (AFTER RETURN FROM CALL TO
  2815. ! SUBROUTINE SNOPAC)
  2816. ! ----------------------------------------------------------------------
  2817. IF (ICE == 0) PRCP1 = PRCP1+ EX
  2818. ! ----------------------------------------------------------------------
  2819. ! SET THE EFFECTIVE POTNL EVAPOTRANSP (ETP1) TO ZERO SINCE THIS IS SNOW
  2820. ! CASE, SO SURFACE EVAP NOT CALCULATED FROM EDIR, EC, OR ETT IN SMFLX
  2821. ! (BELOW).
  2822. ! SMFLX RETURNS UPDATED SOIL MOISTURE VALUES FOR NON-GLACIAL LAND.
  2823. ! IF GLACIAL ICE (ICE == -1), SKIP CALL TO SMFLX,
  2824. ! SINCE NO SOIL MEDIUM FOR GLACIAL ICE.
  2825. ! ----------------------------------------------------------------------
  2826. END IF
  2827. IF (ICE == 0) THEN
  2828. CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
  2829. SH2O,SLOPE,KDT,FRZFACT, &
  2830. SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
  2831. SHDFAC,CMCMAX, &
  2832. RUNOFF1,RUNOFF2,RUNOFF3, &
  2833. EDIR1,EC1,ET1, &
  2834. DRIP)
  2835. ! ----------------------------------------------------------------------
  2836. ! BEFORE CALL SHFLX IN THIS SNOWPACK CASE, SET ZZ1 AND YY ARGUMENTS TO
  2837. ! SPECIAL VALUES THAT ENSURE THAT GROUND HEAT FLUX CALCULATED IN SHFLX
  2838. ! MATCHES THAT ALREADY COMPUTER FOR BELOW THE SNOWPACK, THUS THE SFC
  2839. ! HEAT FLUX TO BE COMPUTED IN SHFLX WILL EFFECTIVELY BE THE FLUX AT THE
  2840. ! SNOW TOP SURFACE. T11 IS A DUMMY ARGUEMENT SO WE WILL NOT USE THE
  2841. ! SKIN TEMP VALUE AS REVISED BY SHFLX.
  2842. ! ----------------------------------------------------------------------
  2843. END IF
  2844. ZZ1 = 1.0
  2845. YY = STC (1) -0.5* SSOIL * ZSOIL (1)* ZZ1/ DF1
  2846. ! ----------------------------------------------------------------------
  2847. ! SHFLX WILL CALC/UPDATE THE SOIL TEMPS. NOTE: THE SUB-SFC HEAT FLUX
  2848. ! (SSOIL1) AND THE SKIN TEMP (T11) OUTPUT FROM THIS SHFLX CALL ARE NOT
  2849. ! USED IN ANY SUBSEQUENT CALCULATIONS. RATHER, THEY ARE DUMMY VARIABLES
  2850. ! HERE IN THE SNOPAC CASE, SINCE THE SKIN TEMP AND SUB-SFC HEAT FLUX ARE
  2851. ! UPDATED INSTEAD NEAR THE BEGINNING OF THE CALL TO SNOPAC.
  2852. ! ----------------------------------------------------------------------
  2853. T11 = T1
  2854. CALL SHFLX (SSOIL1,STC,SMC,SMCMAX,NSOIL,T11,DT,YY,ZZ1,ZSOIL, &
  2855. TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE, &
  2856. QUARTZ,CSOIL,VEGTYP,ISURBAN)
  2857. ! ----------------------------------------------------------------------
  2858. ! SNOW DEPTH AND DENSITY ADJUSTMENT BASED ON SNOW COMPACTION. YY IS
  2859. ! ASSUMED TO BE THE SOIL TEMPERTURE AT THE TOP OF THE SOIL COLUMN.
  2860. ! ----------------------------------------------------------------------
  2861. IF (ICE == 0) THEN
  2862. ! NON-GLACIAL LAND
  2863. IF (ESD > 0.) THEN
  2864. CALL SNOWPACK (ESD,DT,SNOWH,SNDENS,T1,YY)
  2865. ELSE
  2866. ESD = 0.
  2867. SNOWH = 0.
  2868. SNDENS = 0.
  2869. SNCOND = 1.
  2870. SNCOVR = 0.
  2871. END IF
  2872. ELSEIF (ICE == -1) THEN
  2873. ! GLACIAL ICE
  2874. IF (ESD .GE. 0.10) THEN
  2875. CALL SNOWPACK (ESD,DT,SNOWH,SNDENS,T1,YY)
  2876. ELSE
  2877. ESD = 0.10
  2878. SNOWH = 0.50
  2879. !KWM???? SNDENS =
  2880. !KWM???? SNCOND =
  2881. SNCOVR = 1.0
  2882. ENDIF
  2883. ENDIF
  2884. ! ----------------------------------------------------------------------
  2885. END SUBROUTINE SNOPAC
  2886. ! ----------------------------------------------------------------------
  2887. SUBROUTINE SNOWPACK (ESD,DTSEC,SNOWH,SNDENS,TSNOW,TSOIL)
  2888. ! ----------------------------------------------------------------------
  2889. ! SUBROUTINE SNOWPACK
  2890. ! ----------------------------------------------------------------------
  2891. ! CALCULATE COMPACTION OF SNOWPACK UNDER CONDITIONS OF INCREASING SNOW
  2892. ! DENSITY, AS OBTAINED FROM AN APPROXIMATE SOLUTION OF E. ANDERSON'S
  2893. ! DIFFERENTIAL EQUATION (3.29), NOAA TECHNICAL REPORT NWS 19, BY VICTOR
  2894. ! KOREN, 03/25/95.
  2895. ! ----------------------------------------------------------------------
  2896. ! ESD WATER EQUIVALENT OF SNOW (M)
  2897. ! DTSEC TIME STEP (SEC)
  2898. ! SNOWH SNOW DEPTH (M)
  2899. ! SNDENS SNOW DENSITY (G/CM3=DIMENSIONLESS FRACTION OF H2O DENSITY)
  2900. ! TSNOW SNOW SURFACE TEMPERATURE (K)
  2901. ! TSOIL SOIL SURFACE TEMPERATURE (K)
  2902. ! SUBROUTINE WILL RETURN NEW VALUES OF SNOWH AND SNDENS
  2903. ! ----------------------------------------------------------------------
  2904. IMPLICIT NONE
  2905. INTEGER :: IPOL, J
  2906. REAL, INTENT(IN) :: ESD, DTSEC,TSNOW,TSOIL
  2907. REAL, INTENT(INOUT) :: SNOWH, SNDENS
  2908. REAL :: BFAC,DSX,DTHR,DW,SNOWHC,PEXP, &
  2909. TAVGC,TSNOWC,TSOILC,ESDC,ESDCX
  2910. REAL, PARAMETER :: C1 = 0.01, C2 = 21.0, G = 9.81, &
  2911. KN = 4000.0
  2912. ! ----------------------------------------------------------------------
  2913. ! CONVERSION INTO SIMULATION UNITS
  2914. ! ----------------------------------------------------------------------
  2915. SNOWHC = SNOWH *100.
  2916. ESDC = ESD *100.
  2917. DTHR = DTSEC /3600.
  2918. TSNOWC = TSNOW -273.15
  2919. TSOILC = TSOIL -273.15
  2920. ! ----------------------------------------------------------------------
  2921. ! CALCULATING OF AVERAGE TEMPERATURE OF SNOW PACK
  2922. ! ----------------------------------------------------------------------
  2923. ! ----------------------------------------------------------------------
  2924. ! CALCULATING OF SNOW DEPTH AND DENSITY AS A RESULT OF COMPACTION
  2925. ! SNDENS=DS0*(EXP(BFAC*ESD)-1.)/(BFAC*ESD)
  2926. ! BFAC=DTHR*C1*EXP(0.08*TAVGC-C2*DS0)
  2927. ! NOTE: BFAC*ESD IN SNDENS EQN ABOVE HAS TO BE CAREFULLY TREATED
  2928. ! NUMERICALLY BELOW:
  2929. ! C1 IS THE FRACTIONAL INCREASE IN DENSITY (1/(CM*HR))
  2930. ! C2 IS A CONSTANT (CM3/G) KOJIMA ESTIMATED AS 21 CMS/G
  2931. ! ----------------------------------------------------------------------
  2932. TAVGC = 0.5* (TSNOWC + TSOILC)
  2933. IF (ESDC > 1.E-2) THEN
  2934. ESDCX = ESDC
  2935. ELSE
  2936. ESDCX = 1.E-2
  2937. END IF
  2938. ! DSX = SNDENS*((DEXP(BFAC*ESDC)-1.)/(BFAC*ESDC))
  2939. ! ----------------------------------------------------------------------
  2940. ! THE FUNCTION OF THE FORM (e**x-1)/x EMBEDDED IN ABOVE EXPRESSION
  2941. ! FOR DSX WAS CAUSING NUMERICAL DIFFICULTIES WHEN THE DENOMINATOR "x"
  2942. ! (I.E. BFAC*ESDC) BECAME ZERO OR APPROACHED ZERO (DESPITE THE FACT THAT
  2943. ! THE ANALYTICAL FUNCTION (e**x-1)/x HAS A WELL DEFINED LIMIT AS
  2944. ! "x" APPROACHES ZERO), HENCE BELOW WE REPLACE THE (e**x-1)/x
  2945. ! EXPRESSION WITH AN EQUIVALENT, NUMERICALLY WELL-BEHAVED
  2946. ! POLYNOMIAL EXPANSION.
  2947. ! NUMBER OF TERMS OF POLYNOMIAL EXPANSION, AND HENCE ITS ACCURACY,
  2948. ! IS GOVERNED BY ITERATION LIMIT "IPOL".
  2949. ! IPOL GREATER THAN 9 ONLY MAKES A DIFFERENCE ON DOUBLE
  2950. ! PRECISION (RELATIVE ERRORS GIVEN IN PERCENT %).
  2951. ! IPOL=9, FOR REL.ERROR <~ 1.6 E-6 % (8 SIGNIFICANT DIGITS)
  2952. ! IPOL=8, FOR REL.ERROR <~ 1.8 E-5 % (7 SIGNIFICANT DIGITS)
  2953. ! IPOL=7, FOR REL.ERROR <~ 1.8 E-4 % ...
  2954. ! ----------------------------------------------------------------------
  2955. BFAC = DTHR * C1* EXP (0.08* TAVGC - C2* SNDENS)
  2956. IPOL = 4
  2957. PEXP = 0.
  2958. ! PEXP = (1. + PEXP)*BFAC*ESDC/REAL(J+1)
  2959. DO J = IPOL,1, -1
  2960. PEXP = (1. + PEXP)* BFAC * ESDCX / REAL (J +1)
  2961. END DO
  2962. PEXP = PEXP + 1.
  2963. ! ----------------------------------------------------------------------
  2964. ! ABOVE LINE ENDS POLYNOMIAL SUBSTITUTION
  2965. ! ----------------------------------------------------------------------
  2966. ! END OF KOREAN FORMULATION
  2967. ! BASE FORMULATION (COGLEY ET AL., 1990)
  2968. ! CONVERT DENSITY FROM G/CM3 TO KG/M3
  2969. ! DSM=SNDENS*1000.0
  2970. ! DSX=DSM+DTSEC*0.5*DSM*G*ESD/
  2971. ! & (1E7*EXP(-0.02*DSM+KN/(TAVGC+273.16)-14.643))
  2972. ! & CONVERT DENSITY FROM KG/M3 TO G/CM3
  2973. ! DSX=DSX/1000.0
  2974. ! END OF COGLEY ET AL. FORMULATION
  2975. ! ----------------------------------------------------------------------
  2976. ! SET UPPER/LOWER LIMIT ON SNOW DENSITY
  2977. ! ----------------------------------------------------------------------
  2978. DSX = SNDENS * (PEXP)
  2979. IF (DSX > 0.40) DSX = 0.40
  2980. IF (DSX < 0.05) DSX = 0.05
  2981. ! ----------------------------------------------------------------------
  2982. ! UPDATE OF SNOW DEPTH AND DENSITY DEPENDING ON LIQUID WATER DURING
  2983. ! SNOWMELT. ASSUMED THAT 13% OF LIQUID WATER CAN BE STORED IN SNOW PER
  2984. ! DAY DURING SNOWMELT TILL SNOW DENSITY 0.40.
  2985. ! ----------------------------------------------------------------------
  2986. SNDENS = DSX
  2987. IF (TSNOWC >= 0.) THEN
  2988. DW = 0.13* DTHR /24.
  2989. SNDENS = SNDENS * (1. - DW) + DW
  2990. IF (SNDENS >= 0.40) SNDENS = 0.40
  2991. ! ----------------------------------------------------------------------
  2992. ! CALCULATE SNOW DEPTH (CM) FROM SNOW WATER EQUIVALENT AND SNOW DENSITY.
  2993. ! CHANGE SNOW DEPTH UNITS TO METERS
  2994. ! ----------------------------------------------------------------------
  2995. END IF
  2996. SNOWHC = ESDC / SNDENS
  2997. SNOWH = SNOWHC *0.01
  2998. ! ----------------------------------------------------------------------
  2999. END SUBROUTINE SNOWPACK
  3000. ! ----------------------------------------------------------------------
  3001. SUBROUTINE SNOWZ0 (SNCOVR,Z0, Z0BRD, SNOWH)
  3002. ! ----------------------------------------------------------------------
  3003. ! SUBROUTINE SNOWZ0
  3004. ! ----------------------------------------------------------------------
  3005. ! CALCULATE TOTAL ROUGHNESS LENGTH OVER SNOW
  3006. ! SNCOVR FRACTIONAL SNOW COVER
  3007. ! Z0 ROUGHNESS LENGTH (m)
  3008. ! Z0S SNOW ROUGHNESS LENGTH:=0.001 (m)
  3009. ! ----------------------------------------------------------------------
  3010. IMPLICIT NONE
  3011. REAL, INTENT(IN) :: SNCOVR, Z0BRD
  3012. REAL, INTENT(OUT) :: Z0
  3013. REAL, PARAMETER :: Z0S=0.001
  3014. REAL, INTENT(IN) :: SNOWH
  3015. REAL :: BURIAL
  3016. REAL :: Z0EFF
  3017. !m Z0 = (1.- SNCOVR)* Z0BRD + SNCOVR * Z0S
  3018. BURIAL = 7.0*Z0BRD - SNOWH
  3019. IF(BURIAL.LE.0.0007) THEN
  3020. Z0EFF = Z0S
  3021. ELSE
  3022. Z0EFF = BURIAL/7.0
  3023. ENDIF
  3024. Z0 = (1.- SNCOVR)* Z0BRD + SNCOVR * Z0EFF
  3025. ! ----------------------------------------------------------------------
  3026. END SUBROUTINE SNOWZ0
  3027. ! ----------------------------------------------------------------------
  3028. SUBROUTINE SNOW_NEW (TEMP,NEWSN,SNOWH,SNDENS)
  3029. ! ----------------------------------------------------------------------
  3030. ! SUBROUTINE SNOW_NEW
  3031. ! ----------------------------------------------------------------------
  3032. ! CALCULATE SNOW DEPTH AND DENSITY TO ACCOUNT FOR THE NEW SNOWFALL.
  3033. ! NEW VALUES OF SNOW DEPTH & DENSITY RETURNED.
  3034. ! TEMP AIR TEMPERATURE (K)
  3035. ! NEWSN NEW SNOWFALL (M)
  3036. ! SNOWH SNOW DEPTH (M)
  3037. ! SNDENS SNOW DENSITY (G/CM3=DIMENSIONLESS FRACTION OF H2O DENSITY)
  3038. ! ----------------------------------------------------------------------
  3039. IMPLICIT NONE
  3040. REAL, INTENT(IN) :: NEWSN, TEMP
  3041. REAL, INTENT(INOUT) :: SNDENS, SNOWH
  3042. REAL :: DSNEW, HNEWC, SNOWHC,NEWSNC,TEMPC
  3043. ! ----------------------------------------------------------------------
  3044. ! CONVERSION INTO SIMULATION UNITS
  3045. ! ----------------------------------------------------------------------
  3046. SNOWHC = SNOWH *100.
  3047. NEWSNC = NEWSN *100.
  3048. ! ----------------------------------------------------------------------
  3049. ! CALCULATING NEW SNOWFALL DENSITY DEPENDING ON TEMPERATURE
  3050. ! EQUATION FROM GOTTLIB L. 'A GENERAL RUNOFF MODEL FOR SNOWCOVERED
  3051. ! AND GLACIERIZED BASIN', 6TH NORDIC HYDROLOGICAL CONFERENCE,
  3052. ! VEMADOLEN, SWEDEN, 1980, 172-177PP.
  3053. !-----------------------------------------------------------------------
  3054. TEMPC = TEMP -273.15
  3055. IF (TEMPC <= -15.) THEN
  3056. DSNEW = 0.05
  3057. ELSE
  3058. DSNEW = 0.05+0.0017* (TEMPC +15.)**1.5
  3059. END IF
  3060. ! ----------------------------------------------------------------------
  3061. ! ADJUSTMENT OF SNOW DENSITY DEPENDING ON NEW SNOWFALL
  3062. ! ----------------------------------------------------------------------
  3063. HNEWC = NEWSNC / DSNEW
  3064. IF (SNOWHC + HNEWC .LT. 1.0E-3) THEN
  3065. SNDENS = MAX(DSNEW,SNDENS)
  3066. ELSE
  3067. SNDENS = (SNOWHC * SNDENS + HNEWC * DSNEW)/ (SNOWHC + HNEWC)
  3068. ENDIF
  3069. SNOWHC = SNOWHC + HNEWC
  3070. SNOWH = SNOWHC *0.01
  3071. ! ----------------------------------------------------------------------
  3072. END SUBROUTINE SNOW_NEW
  3073. ! ----------------------------------------------------------------------
  3074. SUBROUTINE SRT (RHSTT,EDIR,ET,SH2O,SH2OA,NSOIL,PCPDRP, &
  3075. ZSOIL,DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1, &
  3076. RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZX,SICE,AI,BI,CI)
  3077. ! ----------------------------------------------------------------------
  3078. ! SUBROUTINE SRT
  3079. ! ----------------------------------------------------------------------
  3080. ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
  3081. ! WATER DIFFUSION EQUATION. ALSO TO COMPUTE ( PREPARE ) THE MATRIX
  3082. ! COEFFICIENTS FOR THE TRI-DIAGONAL MATRIX OF THE IMPLICIT TIME SCHEME.
  3083. ! ----------------------------------------------------------------------
  3084. IMPLICIT NONE
  3085. INTEGER, INTENT(IN) :: NSOIL
  3086. INTEGER :: IALP1, IOHINF, J, JJ, K, KS
  3087. REAL, INTENT(IN) :: BEXP, DKSAT, DT, DWSAT, EDIR, FRZX, &
  3088. KDT, PCPDRP, SLOPE, SMCMAX, SMCWLT
  3089. REAL, INTENT(OUT) :: RUNOFF1, RUNOFF2
  3090. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ET, SH2O, SH2OA, SICE, &
  3091. ZSOIL
  3092. REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: RHSTT
  3093. REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: AI, BI, CI
  3094. REAL, DIMENSION(1:NSOIL) :: DMAX
  3095. REAL :: ACRT, DD, DDT, DDZ, DDZ2, DENOM, &
  3096. DENOM2,DICE, DSMDZ, DSMDZ2, DT1, &
  3097. FCR,INFMAX,MXSMC,MXSMC2,NUMER,PDDUM, &
  3098. PX, SICEMAX,SLOPX, SMCAV, SSTT, &
  3099. SUM, VAL, WCND, WCND2, WDF, WDF2
  3100. INTEGER, PARAMETER :: CVFRZ = 3
  3101. ! ----------------------------------------------------------------------
  3102. ! FROZEN GROUND VERSION:
  3103. ! REFERENCE FROZEN GROUND PARAMETER, CVFRZ, IS A SHAPE PARAMETER OF
  3104. ! AREAL DISTRIBUTION FUNCTION OF SOIL ICE CONTENT WHICH EQUALS 1/CV.
  3105. ! CV IS A COEFFICIENT OF SPATIAL VARIATION OF SOIL ICE CONTENT. BASED
  3106. ! ON FIELD DATA CV DEPENDS ON AREAL MEAN OF FROZEN DEPTH, AND IT CLOSE
  3107. ! TO CONSTANT = 0.6 IF AREAL MEAN FROZEN DEPTH IS ABOVE 20 CM. THAT IS
  3108. ! WHY PARAMETER CVFRZ = 3 (INT{1/0.6*0.6}).
  3109. ! CURRENT LOGIC DOESN'T ALLOW CVFRZ BE BIGGER THAN 3
  3110. ! ----------------------------------------------------------------------
  3111. ! ----------------------------------------------------------------------
  3112. ! DETERMINE RAINFALL INFILTRATION RATE AND RUNOFF. INCLUDE THE
  3113. ! INFILTRATION FORMULE FROM SCHAAKE AND KOREN MODEL.
  3114. ! MODIFIED BY Q DUAN
  3115. ! ----------------------------------------------------------------------
  3116. ! ----------------------------------------------------------------------
  3117. ! LET SICEMAX BE THE GREATEST, IF ANY, FROZEN WATER CONTENT WITHIN SOIL
  3118. ! LAYERS.
  3119. ! ----------------------------------------------------------------------
  3120. IOHINF = 1
  3121. SICEMAX = 0.0
  3122. DO KS = 1,NSOIL
  3123. IF (SICE (KS) > SICEMAX) SICEMAX = SICE (KS)
  3124. ! ----------------------------------------------------------------------
  3125. ! DETERMINE RAINFALL INFILTRATION RATE AND RUNOFF
  3126. ! ----------------------------------------------------------------------
  3127. END DO
  3128. PDDUM = PCPDRP
  3129. RUNOFF1 = 0.0
  3130. ! ----------------------------------------------------------------------
  3131. ! MODIFIED BY Q. DUAN, 5/16/94
  3132. ! ----------------------------------------------------------------------
  3133. ! IF (IOHINF == 1) THEN
  3134. IF (PCPDRP /= 0.0) THEN
  3135. DT1 = DT /86400.
  3136. SMCAV = SMCMAX - SMCWLT
  3137. ! ----------------------------------------------------------------------
  3138. ! FROZEN GROUND VERSION:
  3139. ! ----------------------------------------------------------------------
  3140. DMAX (1)= - ZSOIL (1)* SMCAV
  3141. DICE = - ZSOIL (1) * SICE (1)
  3142. DMAX (1)= DMAX (1)* (1.0- (SH2OA (1) + SICE (1) - SMCWLT)/ &
  3143. SMCAV)
  3144. DD = DMAX (1)
  3145. ! ----------------------------------------------------------------------
  3146. ! FROZEN GROUND VERSION:
  3147. ! ----------------------------------------------------------------------
  3148. DO KS = 2,NSOIL
  3149. DICE = DICE+ ( ZSOIL (KS -1) - ZSOIL (KS) ) * SICE (KS)
  3150. DMAX (KS) = (ZSOIL (KS -1) - ZSOIL (KS))* SMCAV
  3151. DMAX (KS) = DMAX (KS)* (1.0- (SH2OA (KS) + SICE (KS) &
  3152. - SMCWLT)/ SMCAV)
  3153. DD = DD+ DMAX (KS)
  3154. ! ----------------------------------------------------------------------
  3155. ! VAL = (1.-EXP(-KDT*SQRT(DT1)))
  3156. ! IN BELOW, REMOVE THE SQRT IN ABOVE
  3157. ! ----------------------------------------------------------------------
  3158. END DO
  3159. VAL = (1. - EXP ( - KDT * DT1))
  3160. DDT = DD * VAL
  3161. PX = PCPDRP * DT
  3162. IF (PX < 0.0) PX = 0.0
  3163. ! ----------------------------------------------------------------------
  3164. ! FROZEN GROUND VERSION:
  3165. ! REDUCTION OF INFILTRATION BASED ON FROZEN GROUND PARAMETERS
  3166. ! ----------------------------------------------------------------------
  3167. INFMAX = (PX * (DDT / (PX + DDT)))/ DT
  3168. FCR = 1.
  3169. IF (DICE > 1.E-2) THEN
  3170. ACRT = CVFRZ * FRZX / DICE
  3171. SUM = 1.
  3172. IALP1 = CVFRZ - 1
  3173. DO J = 1,IALP1
  3174. K = 1
  3175. DO JJ = J +1,IALP1
  3176. K = K * JJ
  3177. END DO
  3178. SUM = SUM + (ACRT ** ( CVFRZ - J)) / FLOAT (K)
  3179. END DO
  3180. FCR = 1. - EXP ( - ACRT) * SUM
  3181. END IF
  3182. ! ----------------------------------------------------------------------
  3183. ! CORRECTION OF INFILTRATION LIMITATION:
  3184. ! IF INFMAX .LE. HYDROLIC CONDUCTIVITY ASSIGN INFMAX THE VALUE OF
  3185. ! HYDROLIC CONDUCTIVITY
  3186. ! ----------------------------------------------------------------------
  3187. ! MXSMC = MAX ( SH2OA(1), SH2OA(2) )
  3188. INFMAX = INFMAX * FCR
  3189. MXSMC = SH2OA (1)
  3190. CALL WDFCND (WDF,WCND,MXSMC,SMCMAX,BEXP,DKSAT,DWSAT, &
  3191. SICEMAX)
  3192. INFMAX = MAX (INFMAX,WCND)
  3193. INFMAX = MIN (INFMAX,PX/DT)
  3194. IF (PCPDRP > INFMAX) THEN
  3195. RUNOFF1 = PCPDRP - INFMAX
  3196. PDDUM = INFMAX
  3197. END IF
  3198. ! ----------------------------------------------------------------------
  3199. ! TO AVOID SPURIOUS DRAINAGE BEHAVIOR, 'UPSTREAM DIFFERENCING' IN LINE
  3200. ! BELOW REPLACED WITH NEW APPROACH IN 2ND LINE:
  3201. ! 'MXSMC = MAX(SH2OA(1), SH2OA(2))'
  3202. ! ----------------------------------------------------------------------
  3203. END IF
  3204. MXSMC = SH2OA (1)
  3205. CALL WDFCND (WDF,WCND,MXSMC,SMCMAX,BEXP,DKSAT,DWSAT, &
  3206. SICEMAX)
  3207. ! ----------------------------------------------------------------------
  3208. ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
  3209. ! ----------------------------------------------------------------------
  3210. DDZ = 1. / ( - .5 * ZSOIL (2) )
  3211. AI (1) = 0.0
  3212. BI (1) = WDF * DDZ / ( - ZSOIL (1) )
  3213. ! ----------------------------------------------------------------------
  3214. ! CALC RHSTT FOR THE TOP LAYER AFTER CALC'NG THE VERTICAL SOIL MOISTURE
  3215. ! GRADIENT BTWN THE TOP AND NEXT TO TOP LAYERS.
  3216. ! ----------------------------------------------------------------------
  3217. CI (1) = - BI (1)
  3218. DSMDZ = ( SH2O (1) - SH2O (2) ) / ( - .5 * ZSOIL (2) )
  3219. RHSTT (1) = (WDF * DSMDZ + WCND- PDDUM + EDIR + ET (1))/ ZSOIL (1)
  3220. ! ----------------------------------------------------------------------
  3221. ! INITIALIZE DDZ2
  3222. ! ----------------------------------------------------------------------
  3223. SSTT = WDF * DSMDZ + WCND+ EDIR + ET (1)
  3224. ! ----------------------------------------------------------------------
  3225. ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABV PROCESS
  3226. ! ----------------------------------------------------------------------
  3227. DDZ2 = 0.0
  3228. DO K = 2,NSOIL
  3229. DENOM2 = (ZSOIL (K -1) - ZSOIL (K))
  3230. IF (K /= NSOIL) THEN
  3231. ! ----------------------------------------------------------------------
  3232. ! AGAIN, TO AVOID SPURIOUS DRAINAGE BEHAVIOR, 'UPSTREAM DIFFERENCING' IN
  3233. ! LINE BELOW REPLACED WITH NEW APPROACH IN 2ND LINE:
  3234. ! 'MXSMC2 = MAX (SH2OA(K), SH2OA(K+1))'
  3235. ! ----------------------------------------------------------------------
  3236. SLOPX = 1.
  3237. MXSMC2 = SH2OA (K)
  3238. CALL WDFCND (WDF2,WCND2,MXSMC2,SMCMAX,BEXP,DKSAT,DWSAT, &
  3239. SICEMAX)
  3240. ! -----------------------------------------------------------------------
  3241. ! CALC SOME PARTIAL PRODUCTS FOR LATER USE IN CALC'NG RHSTT
  3242. ! ----------------------------------------------------------------------
  3243. DENOM = (ZSOIL (K -1) - ZSOIL (K +1))
  3244. ! ----------------------------------------------------------------------
  3245. ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT
  3246. ! ----------------------------------------------------------------------
  3247. DSMDZ2 = (SH2O (K) - SH2O (K +1)) / (DENOM * 0.5)
  3248. DDZ2 = 2.0 / DENOM
  3249. CI (K) = - WDF2 * DDZ2 / DENOM2
  3250. ELSE
  3251. ! ----------------------------------------------------------------------
  3252. ! SLOPE OF BOTTOM LAYER IS INTRODUCED
  3253. ! ----------------------------------------------------------------------
  3254. ! ----------------------------------------------------------------------
  3255. ! RETRIEVE THE SOIL WATER DIFFUSIVITY AND HYDRAULIC CONDUCTIVITY FOR
  3256. ! THIS LAYER
  3257. ! ----------------------------------------------------------------------
  3258. SLOPX = SLOPE
  3259. CALL WDFCND (WDF2,WCND2,SH2OA (NSOIL),SMCMAX,BEXP,DKSAT,DWSAT, &
  3260. SICEMAX)
  3261. ! ----------------------------------------------------------------------
  3262. ! CALC A PARTIAL PRODUCT FOR LATER USE IN CALC'NG RHSTT
  3263. ! ----------------------------------------------------------------------
  3264. ! ----------------------------------------------------------------------
  3265. ! SET MATRIX COEF CI TO ZERO
  3266. ! ----------------------------------------------------------------------
  3267. DSMDZ2 = 0.0
  3268. CI (K) = 0.0
  3269. ! ----------------------------------------------------------------------
  3270. ! CALC RHSTT FOR THIS LAYER AFTER CALC'NG ITS NUMERATOR
  3271. ! ----------------------------------------------------------------------
  3272. END IF
  3273. NUMER = (WDF2 * DSMDZ2) + SLOPX * WCND2- (WDF * DSMDZ) &
  3274. - WCND+ ET (K)
  3275. ! ----------------------------------------------------------------------
  3276. ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER
  3277. ! ----------------------------------------------------------------------
  3278. RHSTT (K) = NUMER / ( - DENOM2)
  3279. AI (K) = - WDF * DDZ / DENOM2
  3280. ! ----------------------------------------------------------------------
  3281. ! RESET VALUES OF WDF, WCND, DSMDZ, AND DDZ FOR LOOP TO NEXT LYR
  3282. ! RUNOFF2: SUB-SURFACE OR BASEFLOW RUNOFF
  3283. ! ----------------------------------------------------------------------
  3284. BI (K) = - ( AI (K) + CI (K) )
  3285. IF (K .eq. NSOIL) THEN
  3286. RUNOFF2 = SLOPX * WCND2
  3287. END IF
  3288. IF (K .ne. NSOIL) THEN
  3289. WDF = WDF2
  3290. WCND = WCND2
  3291. DSMDZ = DSMDZ2
  3292. DDZ = DDZ2
  3293. END IF
  3294. END DO
  3295. ! ----------------------------------------------------------------------
  3296. END SUBROUTINE SRT
  3297. ! ----------------------------------------------------------------------
  3298. SUBROUTINE SSTEP (SH2OOUT,SH2OIN,CMC,RHSTT,RHSCT,DT, &
  3299. NSOIL,SMCMAX,CMCMAX,RUNOFF3,ZSOIL,SMC,SICE, &
  3300. AI,BI,CI)
  3301. ! ----------------------------------------------------------------------
  3302. ! SUBROUTINE SSTEP
  3303. ! ----------------------------------------------------------------------
  3304. ! CALCULATE/UPDATE SOIL MOISTURE CONTENT VALUES AND CANOPY MOISTURE
  3305. ! CONTENT VALUES.
  3306. ! ----------------------------------------------------------------------
  3307. IMPLICIT NONE
  3308. INTEGER, INTENT(IN) :: NSOIL
  3309. INTEGER :: I, K, KK11
  3310. REAL, INTENT(IN) :: CMCMAX, DT, SMCMAX
  3311. REAL, INTENT(OUT) :: RUNOFF3
  3312. REAL, INTENT(INOUT) :: CMC
  3313. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SH2OIN, SICE, ZSOIL
  3314. REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: SH2OOUT
  3315. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: RHSTT, SMC
  3316. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: AI, BI, CI
  3317. REAL, DIMENSION(1:NSOIL) :: RHSTTin
  3318. REAL, DIMENSION(1:NSOIL) :: CIin
  3319. REAL :: DDZ, RHSCT, STOT, WPLUS
  3320. ! ----------------------------------------------------------------------
  3321. ! CREATE 'AMOUNT' VALUES OF VARIABLES TO BE INPUT TO THE
  3322. ! TRI-DIAGONAL MATRIX ROUTINE.
  3323. ! ----------------------------------------------------------------------
  3324. DO K = 1,NSOIL
  3325. RHSTT (K) = RHSTT (K) * DT
  3326. AI (K) = AI (K) * DT
  3327. BI (K) = 1. + BI (K) * DT
  3328. CI (K) = CI (K) * DT
  3329. END DO
  3330. ! ----------------------------------------------------------------------
  3331. ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
  3332. ! ----------------------------------------------------------------------
  3333. DO K = 1,NSOIL
  3334. RHSTTin (K) = RHSTT (K)
  3335. END DO
  3336. DO K = 1,NSOIL
  3337. CIin (K) = CI (K)
  3338. END DO
  3339. ! ----------------------------------------------------------------------
  3340. ! CALL ROSR12 TO SOLVE THE TRI-DIAGONAL MATRIX
  3341. ! ----------------------------------------------------------------------
  3342. CALL ROSR12 (CI,AI,BI,CIin,RHSTTin,RHSTT,NSOIL)
  3343. ! ----------------------------------------------------------------------
  3344. ! SUM THE PREVIOUS SMC VALUE AND THE MATRIX SOLUTION TO GET A
  3345. ! NEW VALUE. MIN ALLOWABLE VALUE OF SMC WILL BE 0.02.
  3346. ! RUNOFF3: RUNOFF WITHIN SOIL LAYERS
  3347. ! ----------------------------------------------------------------------
  3348. WPLUS = 0.0
  3349. RUNOFF3 = 0.
  3350. DDZ = - ZSOIL (1)
  3351. DO K = 1,NSOIL
  3352. IF (K /= 1) DDZ = ZSOIL (K - 1) - ZSOIL (K)
  3353. SH2OOUT (K) = SH2OIN (K) + CI (K) + WPLUS / DDZ
  3354. STOT = SH2OOUT (K) + SICE (K)
  3355. IF (STOT > SMCMAX) THEN
  3356. IF (K .eq. 1) THEN
  3357. DDZ = - ZSOIL (1)
  3358. ELSE
  3359. KK11 = K - 1
  3360. DDZ = - ZSOIL (K) + ZSOIL (KK11)
  3361. END IF
  3362. WPLUS = (STOT - SMCMAX) * DDZ
  3363. ELSE
  3364. WPLUS = 0.
  3365. END IF
  3366. SMC (K) = MAX ( MIN (STOT,SMCMAX),0.02 )
  3367. SH2OOUT (K) = MAX ( (SMC (K) - SICE (K)),0.0)
  3368. END DO
  3369. ! ----------------------------------------------------------------------
  3370. ! UPDATE CANOPY WATER CONTENT/INTERCEPTION (CMC). CONVERT RHSCT TO
  3371. ! AN 'AMOUNT' VALUE AND ADD TO PREVIOUS CMC VALUE TO GET NEW CMC.
  3372. ! ----------------------------------------------------------------------
  3373. RUNOFF3 = WPLUS
  3374. CMC = CMC + DT * RHSCT
  3375. IF (CMC < 1.E-20) CMC = 0.0
  3376. CMC = MIN (CMC,CMCMAX)
  3377. ! ----------------------------------------------------------------------
  3378. END SUBROUTINE SSTEP
  3379. ! ----------------------------------------------------------------------
  3380. SUBROUTINE TBND (TU,TB,ZSOIL,ZBOT,K,NSOIL,TBND1)
  3381. ! ----------------------------------------------------------------------
  3382. ! SUBROUTINE TBND
  3383. ! ----------------------------------------------------------------------
  3384. ! CALCULATE TEMPERATURE ON THE BOUNDARY OF THE LAYER BY INTERPOLATION OF
  3385. ! THE MIDDLE LAYER TEMPERATURES
  3386. ! ----------------------------------------------------------------------
  3387. IMPLICIT NONE
  3388. INTEGER, INTENT(IN) :: NSOIL
  3389. INTEGER :: K
  3390. REAL, INTENT(IN) :: TB, TU, ZBOT
  3391. REAL, INTENT(OUT) :: TBND1
  3392. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ZSOIL
  3393. REAL :: ZB, ZUP
  3394. REAL, PARAMETER :: T0 = 273.15
  3395. ! ----------------------------------------------------------------------
  3396. ! USE SURFACE TEMPERATURE ON THE TOP OF THE FIRST LAYER
  3397. ! ----------------------------------------------------------------------
  3398. IF (K == 1) THEN
  3399. ZUP = 0.
  3400. ELSE
  3401. ZUP = ZSOIL (K -1)
  3402. END IF
  3403. ! ----------------------------------------------------------------------
  3404. ! USE DEPTH OF THE CONSTANT BOTTOM TEMPERATURE WHEN INTERPOLATE
  3405. ! TEMPERATURE INTO THE LAST LAYER BOUNDARY
  3406. ! ----------------------------------------------------------------------
  3407. IF (K == NSOIL) THEN
  3408. ZB = 2.* ZBOT - ZSOIL (K)
  3409. ELSE
  3410. ZB = ZSOIL (K +1)
  3411. END IF
  3412. ! ----------------------------------------------------------------------
  3413. ! LINEAR INTERPOLATION BETWEEN THE AVERAGE LAYER TEMPERATURES
  3414. ! ----------------------------------------------------------------------
  3415. TBND1 = TU + (TB - TU)* (ZUP - ZSOIL (K))/ (ZUP - ZB)
  3416. ! ----------------------------------------------------------------------
  3417. END SUBROUTINE TBND
  3418. ! ----------------------------------------------------------------------
  3419. SUBROUTINE TDFCND ( DF, SMC, QZ, SMCMAX, SH2O)
  3420. ! ----------------------------------------------------------------------
  3421. ! SUBROUTINE TDFCND
  3422. ! ----------------------------------------------------------------------
  3423. ! CALCULATE THERMAL DIFFUSIVITY AND CONDUCTIVITY OF THE SOIL FOR A GIVEN
  3424. ! POINT AND TIME.
  3425. ! ----------------------------------------------------------------------
  3426. ! PETERS-LIDARD APPROACH (PETERS-LIDARD et al., 1998)
  3427. ! June 2001 CHANGES: FROZEN SOIL CONDITION.
  3428. ! ----------------------------------------------------------------------
  3429. IMPLICIT NONE
  3430. REAL, INTENT(IN) :: QZ, SMC, SMCMAX, SH2O
  3431. REAL, INTENT(OUT) :: DF
  3432. REAL :: AKE, GAMMD, THKDRY, THKICE, THKO, &
  3433. THKQTZ,THKSAT,THKS,THKW,SATRATIO,XU, &
  3434. XUNFROZ
  3435. ! ----------------------------------------------------------------------
  3436. ! WE NOW GET QUARTZ AS AN INPUT ARGUMENT (SET IN ROUTINE REDPRM):
  3437. ! DATA QUARTZ /0.82, 0.10, 0.25, 0.60, 0.52,
  3438. ! & 0.35, 0.60, 0.40, 0.82/
  3439. ! ----------------------------------------------------------------------
  3440. ! IF THE SOIL HAS ANY MOISTURE CONTENT COMPUTE A PARTIAL SUM/PRODUCT
  3441. ! OTHERWISE USE A CONSTANT VALUE WHICH WORKS WELL WITH MOST SOILS
  3442. ! ----------------------------------------------------------------------
  3443. ! THKW ......WATER THERMAL CONDUCTIVITY
  3444. ! THKQTZ ....THERMAL CONDUCTIVITY FOR QUARTZ
  3445. ! THKO ......THERMAL CONDUCTIVITY FOR OTHER SOIL COMPONENTS
  3446. ! THKS ......THERMAL CONDUCTIVITY FOR THE SOLIDS COMBINED(QUARTZ+OTHER)
  3447. ! THKICE ....ICE THERMAL CONDUCTIVITY
  3448. ! SMCMAX ....POROSITY (= SMCMAX)
  3449. ! QZ .........QUARTZ CONTENT (SOIL TYPE DEPENDENT)
  3450. ! ----------------------------------------------------------------------
  3451. ! USE AS IN PETERS-LIDARD, 1998 (MODIF. FROM JOHANSEN, 1975).
  3452. ! PABLO GRUNMANN, 08/17/98
  3453. ! REFS.:
  3454. ! FAROUKI, O.T.,1986: THERMAL PROPERTIES OF SOILS. SERIES ON ROCK
  3455. ! AND SOIL MECHANICS, VOL. 11, TRANS TECH, 136 PP.
  3456. ! JOHANSEN, O., 1975: THERMAL CONDUCTIVITY OF SOILS. PH.D. THESIS,
  3457. ! UNIVERSITY OF TRONDHEIM,
  3458. ! PETERS-LIDARD, C. D., ET AL., 1998: THE EFFECT OF SOIL THERMAL
  3459. ! CONDUCTIVITY PARAMETERIZATION ON SURFACE ENERGY FLUXES
  3460. ! AND TEMPERATURES. JOURNAL OF THE ATMOSPHERIC SCIENCES,
  3461. ! VOL. 55, PP. 1209-1224.
  3462. ! ----------------------------------------------------------------------
  3463. ! NEEDS PARAMETERS
  3464. ! POROSITY(SOIL TYPE):
  3465. ! POROS = SMCMAX
  3466. ! SATURATION RATIO:
  3467. ! PARAMETERS W/(M.K)
  3468. SATRATIO = SMC / SMCMAX
  3469. ! ICE CONDUCTIVITY:
  3470. THKICE = 2.2
  3471. ! WATER CONDUCTIVITY:
  3472. THKW = 0.57
  3473. ! THERMAL CONDUCTIVITY OF "OTHER" SOIL COMPONENTS
  3474. ! IF (QZ .LE. 0.2) THKO = 3.0
  3475. THKO = 2.0
  3476. ! QUARTZ' CONDUCTIVITY
  3477. THKQTZ = 7.7
  3478. ! SOLIDS' CONDUCTIVITY
  3479. THKS = (THKQTZ ** QZ)* (THKO ** (1. - QZ))
  3480. ! UNFROZEN FRACTION (FROM 1., i.e., 100%LIQUID, TO 0. (100% FROZEN))
  3481. XUNFROZ = SH2O / SMC
  3482. ! UNFROZEN VOLUME FOR SATURATION (POROSITY*XUNFROZ)
  3483. XU = XUNFROZ * SMCMAX
  3484. ! SATURATED THERMAL CONDUCTIVITY
  3485. THKSAT = THKS ** (1. - SMCMAX)* THKICE ** (SMCMAX - XU)* THKW ** &
  3486. (XU)
  3487. ! DRY DENSITY IN KG/M3
  3488. GAMMD = (1. - SMCMAX)*2700.
  3489. ! DRY THERMAL CONDUCTIVITY IN W.M-1.K-1
  3490. THKDRY = (0.135* GAMMD+ 64.7)/ (2700. - 0.947* GAMMD)
  3491. ! FROZEN
  3492. IF ( (SH2O + 0.0005) < SMC ) THEN
  3493. AKE = SATRATIO
  3494. ! UNFROZEN
  3495. ! RANGE OF VALIDITY FOR THE KERSTEN NUMBER (AKE)
  3496. ELSE
  3497. ! KERSTEN NUMBER (USING "FINE" FORMULA, VALID FOR SOILS CONTAINING AT
  3498. ! LEAST 5% OF PARTICLES WITH DIAMETER LESS THAN 2.E-6 METERS.)
  3499. ! (FOR "COARSE" FORMULA, SEE PETERS-LIDARD ET AL., 1998).
  3500. IF ( SATRATIO > 0.1 ) THEN
  3501. AKE = LOG10 (SATRATIO) + 1.0
  3502. ! USE K = KDRY
  3503. ELSE
  3504. AKE = 0.0
  3505. END IF
  3506. ! THERMAL CONDUCTIVITY
  3507. END IF
  3508. DF = AKE * (THKSAT - THKDRY) + THKDRY
  3509. ! ----------------------------------------------------------------------
  3510. END SUBROUTINE TDFCND
  3511. ! ----------------------------------------------------------------------
  3512. SUBROUTINE TMPAVG (TAVG,TUP,TM,TDN,ZSOIL,NSOIL,K)
  3513. ! ----------------------------------------------------------------------
  3514. ! SUBROUTINE TMPAVG
  3515. ! ----------------------------------------------------------------------
  3516. ! CALCULATE SOIL LAYER AVERAGE TEMPERATURE (TAVG) IN FREEZING/THAWING
  3517. ! LAYER USING UP, DOWN, AND MIDDLE LAYER TEMPERATURES (TUP, TDN, TM),
  3518. ! WHERE TUP IS AT TOP BOUNDARY OF LAYER, TDN IS AT BOTTOM BOUNDARY OF
  3519. ! LAYER. TM IS LAYER PROGNOSTIC STATE TEMPERATURE.
  3520. ! ----------------------------------------------------------------------
  3521. IMPLICIT NONE
  3522. INTEGER K
  3523. INTEGER NSOIL
  3524. REAL DZ
  3525. REAL DZH
  3526. REAL T0
  3527. REAL TAVG
  3528. REAL TDN
  3529. REAL TM
  3530. REAL TUP
  3531. REAL X0
  3532. REAL XDN
  3533. REAL XUP
  3534. REAL ZSOIL (NSOIL)
  3535. ! ----------------------------------------------------------------------
  3536. PARAMETER (T0 = 2.7315E2)
  3537. IF (K .eq. 1) THEN
  3538. DZ = - ZSOIL (1)
  3539. ELSE
  3540. DZ = ZSOIL (K -1) - ZSOIL (K)
  3541. END IF
  3542. DZH = DZ *0.5
  3543. IF (TUP .lt. T0) THEN
  3544. IF (TM .lt. T0) THEN
  3545. ! ----------------------------------------------------------------------
  3546. ! TUP, TM, TDN < T0
  3547. ! ----------------------------------------------------------------------
  3548. IF (TDN .lt. T0) THEN
  3549. TAVG = (TUP + 2.0* TM + TDN)/ 4.0
  3550. ! ----------------------------------------------------------------------
  3551. ! TUP & TM < T0, TDN .ge. T0
  3552. ! ----------------------------------------------------------------------
  3553. ELSE
  3554. X0 = (T0- TM) * DZH / (TDN - TM)
  3555. TAVG = 0.5 * (TUP * DZH + TM * (DZH + X0) + T0* ( &
  3556. & 2.* DZH - X0)) / DZ
  3557. END IF
  3558. ELSE
  3559. ! ----------------------------------------------------------------------
  3560. ! TUP < T0, TM .ge. T0, TDN < T0
  3561. ! ----------------------------------------------------------------------
  3562. IF (TDN .lt. T0) THEN
  3563. XUP = (T0- TUP) * DZH / (TM - TUP)
  3564. XDN = DZH - (T0- TM) * DZH / (TDN - TM)
  3565. TAVG = 0.5 * (TUP * XUP + T0* (2.* DZ - XUP - XDN) &
  3566. & + TDN * XDN) / DZ
  3567. ! ----------------------------------------------------------------------
  3568. ! TUP < T0, TM .ge. T0, TDN .ge. T0
  3569. ! ----------------------------------------------------------------------
  3570. ELSE
  3571. XUP = (T0- TUP) * DZH / (TM - TUP)
  3572. TAVG = 0.5 * (TUP * XUP + T0* (2.* DZ - XUP)) / DZ
  3573. END IF
  3574. END IF
  3575. ELSE
  3576. IF (TM .lt. T0) THEN
  3577. ! ----------------------------------------------------------------------
  3578. ! TUP .ge. T0, TM < T0, TDN < T0
  3579. ! ----------------------------------------------------------------------
  3580. IF (TDN .lt. T0) THEN
  3581. XUP = DZH - (T0- TUP) * DZH / (TM - TUP)
  3582. TAVG = 0.5 * (T0* (DZ - XUP) + TM * (DZH + XUP) &
  3583. & + TDN * DZH) / DZ
  3584. ! ----------------------------------------------------------------------
  3585. ! TUP .ge. T0, TM < T0, TDN .ge. T0
  3586. ! ----------------------------------------------------------------------
  3587. ELSE
  3588. XUP = DZH - (T0- TUP) * DZH / (TM - TUP)
  3589. XDN = (T0- TM) * DZH / (TDN - TM)
  3590. TAVG = 0.5 * (T0* (2.* DZ - XUP - XDN) + TM * &
  3591. & (XUP + XDN)) / DZ
  3592. END IF
  3593. ELSE
  3594. ! ----------------------------------------------------------------------
  3595. ! TUP .ge. T0, TM .ge. T0, TDN < T0
  3596. ! ----------------------------------------------------------------------
  3597. IF (TDN .lt. T0) THEN
  3598. XDN = DZH - (T0- TM) * DZH / (TDN - TM)
  3599. TAVG = (T0* (DZ - XDN) +0.5* (T0+ TDN)* XDN) / DZ
  3600. ! ----------------------------------------------------------------------
  3601. ! TUP .ge. T0, TM .ge. T0, TDN .ge. T0
  3602. ! ----------------------------------------------------------------------
  3603. ELSE
  3604. TAVG = (TUP + 2.0* TM + TDN) / 4.0
  3605. END IF
  3606. END IF
  3607. END IF
  3608. ! ----------------------------------------------------------------------
  3609. END SUBROUTINE TMPAVG
  3610. ! ----------------------------------------------------------------------
  3611. SUBROUTINE TRANSP (ET,NSOIL,ETP1,SMC,CMC,ZSOIL,SHDFAC,SMCWLT, &
  3612. & CMCMAX,PC,CFACTR,SMCREF,SFCTMP,Q2,NROOT, &
  3613. & RTDIS)
  3614. ! ----------------------------------------------------------------------
  3615. ! SUBROUTINE TRANSP
  3616. ! ----------------------------------------------------------------------
  3617. ! CALCULATE TRANSPIRATION FOR THE VEG CLASS.
  3618. ! ----------------------------------------------------------------------
  3619. IMPLICIT NONE
  3620. INTEGER I
  3621. INTEGER K
  3622. INTEGER NSOIL
  3623. INTEGER NROOT
  3624. REAL CFACTR
  3625. REAL CMC
  3626. REAL CMCMAX
  3627. REAL DENOM
  3628. REAL ET (NSOIL)
  3629. REAL ETP1
  3630. REAL ETP1A
  3631. !.....REAL PART(NSOIL)
  3632. REAL GX (NROOT)
  3633. REAL PC
  3634. REAL Q2
  3635. REAL RTDIS (NSOIL)
  3636. REAL RTX
  3637. REAL SFCTMP
  3638. REAL SGX
  3639. REAL SHDFAC
  3640. REAL SMC (NSOIL)
  3641. REAL SMCREF
  3642. REAL SMCWLT
  3643. ! ----------------------------------------------------------------------
  3644. ! INITIALIZE PLANT TRANSP TO ZERO FOR ALL SOIL LAYERS.
  3645. ! ----------------------------------------------------------------------
  3646. REAL ZSOIL (NSOIL)
  3647. DO K = 1,NSOIL
  3648. ET (K) = 0.
  3649. ! ----------------------------------------------------------------------
  3650. ! CALCULATE AN 'ADJUSTED' POTENTIAL TRANSPIRATION
  3651. ! IF STATEMENT BELOW TO AVOID TANGENT LINEAR PROBLEMS NEAR ZERO
  3652. ! NOTE: GX AND OTHER TERMS BELOW REDISTRIBUTE TRANSPIRATION BY LAYER,
  3653. ! ET(K), AS A FUNCTION OF SOIL MOISTURE AVAILABILITY, WHILE PRESERVING
  3654. ! TOTAL ETP1A.
  3655. ! ----------------------------------------------------------------------
  3656. END DO
  3657. IF (CMC .ne. 0.0) THEN
  3658. ETP1A = SHDFAC * PC * ETP1 * (1.0- (CMC / CMCMAX) ** CFACTR)
  3659. ELSE
  3660. ETP1A = SHDFAC * PC * ETP1
  3661. END IF
  3662. SGX = 0.0
  3663. DO I = 1,NROOT
  3664. GX (I) = ( SMC (I) - SMCWLT ) / ( SMCREF - SMCWLT )
  3665. GX (I) = MAX ( MIN ( GX (I), 1. ), 0. )
  3666. SGX = SGX + GX (I)
  3667. END DO
  3668. SGX = SGX / NROOT
  3669. DENOM = 0.
  3670. DO I = 1,NROOT
  3671. RTX = RTDIS (I) + GX (I) - SGX
  3672. GX (I) = GX (I) * MAX ( RTX, 0. )
  3673. DENOM = DENOM + GX (I)
  3674. END DO
  3675. IF (DENOM .le. 0.0) DENOM = 1.
  3676. DO I = 1,NROOT
  3677. ET (I) = ETP1A * GX (I) / DENOM
  3678. ! ----------------------------------------------------------------------
  3679. ! ABOVE CODE ASSUMES A VERTICALLY UNIFORM ROOT DISTRIBUTION
  3680. ! CODE BELOW TESTS A VARIABLE ROOT DISTRIBUTION
  3681. ! ----------------------------------------------------------------------
  3682. ! ET(1) = ( ZSOIL(1) / ZSOIL(NROOT) ) * GX * ETP1A
  3683. ! ET(1) = ( ZSOIL(1) / ZSOIL(NROOT) ) * ETP1A
  3684. ! ----------------------------------------------------------------------
  3685. ! USING ROOT DISTRIBUTION AS WEIGHTING FACTOR
  3686. ! ----------------------------------------------------------------------
  3687. ! ET(1) = RTDIS(1) * ETP1A
  3688. ! ET(1) = ETP1A * PART(1)
  3689. ! ----------------------------------------------------------------------
  3690. ! LOOP DOWN THRU THE SOIL LAYERS REPEATING THE OPERATION ABOVE,
  3691. ! BUT USING THE THICKNESS OF THE SOIL LAYER (RATHER THAN THE
  3692. ! ABSOLUTE DEPTH OF EACH LAYER) IN THE FINAL CALCULATION.
  3693. ! ----------------------------------------------------------------------
  3694. ! DO K = 2,NROOT
  3695. ! GX = ( SMC(K) - SMCWLT ) / ( SMCREF - SMCWLT )
  3696. ! GX = MAX ( MIN ( GX, 1. ), 0. )
  3697. ! TEST CANOPY RESISTANCE
  3698. ! GX = 1.0
  3699. ! ET(K) = ((ZSOIL(K)-ZSOIL(K-1))/ZSOIL(NROOT))*GX*ETP1A
  3700. ! ET(K) = ((ZSOIL(K)-ZSOIL(K-1))/ZSOIL(NROOT))*ETP1A
  3701. ! ----------------------------------------------------------------------
  3702. ! USING ROOT DISTRIBUTION AS WEIGHTING FACTOR
  3703. ! ----------------------------------------------------------------------
  3704. ! ET(K) = RTDIS(K) * ETP1A
  3705. ! ET(K) = ETP1A*PART(K)
  3706. ! END DO
  3707. END DO
  3708. ! ----------------------------------------------------------------------
  3709. END SUBROUTINE TRANSP
  3710. ! ----------------------------------------------------------------------
  3711. SUBROUTINE WDFCND (WDF,WCND,SMC,SMCMAX,BEXP,DKSAT,DWSAT, &
  3712. & SICEMAX)
  3713. ! ----------------------------------------------------------------------
  3714. ! SUBROUTINE WDFCND
  3715. ! ----------------------------------------------------------------------
  3716. ! CALCULATE SOIL WATER DIFFUSIVITY AND SOIL HYDRAULIC CONDUCTIVITY.
  3717. ! ----------------------------------------------------------------------
  3718. IMPLICIT NONE
  3719. REAL BEXP
  3720. REAL DKSAT
  3721. REAL DWSAT
  3722. REAL EXPON
  3723. REAL FACTR1
  3724. REAL FACTR2
  3725. REAL SICEMAX
  3726. REAL SMC
  3727. REAL SMCMAX
  3728. REAL VKwgt
  3729. REAL WCND
  3730. ! ----------------------------------------------------------------------
  3731. ! CALC THE RATIO OF THE ACTUAL TO THE MAX PSBL SOIL H2O CONTENT
  3732. ! ----------------------------------------------------------------------
  3733. REAL WDF
  3734. FACTR1 = 0.05 / SMCMAX
  3735. ! ----------------------------------------------------------------------
  3736. ! PREP AN EXPNTL COEF AND CALC THE SOIL WATER DIFFUSIVITY
  3737. ! ----------------------------------------------------------------------
  3738. FACTR2 = SMC / SMCMAX
  3739. FACTR1 = MIN(FACTR1,FACTR2)
  3740. EXPON = BEXP + 2.0
  3741. ! ----------------------------------------------------------------------
  3742. ! FROZEN SOIL HYDRAULIC DIFFUSIVITY. VERY SENSITIVE TO THE VERTICAL
  3743. ! GRADIENT OF UNFROZEN WATER. THE LATTER GRADIENT CAN BECOME VERY
  3744. ! EXTREME IN FREEZING/THAWING SITUATIONS, AND GIVEN THE RELATIVELY
  3745. ! FEW AND THICK SOIL LAYERS, THIS GRADIENT SUFFERES SERIOUS
  3746. ! TRUNCTION ERRORS YIELDING ERRONEOUSLY HIGH VERTICAL TRANSPORTS OF
  3747. ! UNFROZEN WATER IN BOTH DIRECTIONS FROM HUGE HYDRAULIC DIFFUSIVITY.
  3748. ! THEREFORE, WE FOUND WE HAD TO ARBITRARILY CONSTRAIN WDF
  3749. ! --
  3750. ! VERSION D_10CM: ........ FACTR1 = 0.2/SMCMAX
  3751. ! WEIGHTED APPROACH...................... PABLO GRUNMANN, 28_SEP_1999.
  3752. ! ----------------------------------------------------------------------
  3753. WDF = DWSAT * FACTR2 ** EXPON
  3754. IF (SICEMAX .gt. 0.0) THEN
  3755. VKWGT = 1./ (1. + (500.* SICEMAX)**3.)
  3756. WDF = VKWGT * WDF + (1. - VKWGT)* DWSAT * FACTR1** EXPON
  3757. ! ----------------------------------------------------------------------
  3758. ! RESET THE EXPNTL COEF AND CALC THE HYDRAULIC CONDUCTIVITY
  3759. ! ----------------------------------------------------------------------
  3760. END IF
  3761. EXPON = (2.0 * BEXP) + 3.0
  3762. WCND = DKSAT * FACTR2 ** EXPON
  3763. ! ----------------------------------------------------------------------
  3764. END SUBROUTINE WDFCND
  3765. ! ----------------------------------------------------------------------
  3766. SUBROUTINE SFCDIF_off (ZLM,Z0,THZ0,THLM,SFCSPD,CZIL,AKMS,AKHS)
  3767. ! ----------------------------------------------------------------------
  3768. ! SUBROUTINE SFCDIF (renamed SFCDIF_off to avoid clash with Eta PBL)
  3769. ! ----------------------------------------------------------------------
  3770. ! CALCULATE SURFACE LAYER EXCHANGE COEFFICIENTS VIA ITERATIVE PROCESS.
  3771. ! SEE CHEN ET AL (1997, BLM)
  3772. ! ----------------------------------------------------------------------
  3773. IMPLICIT NONE
  3774. REAL WWST, WWST2, G, VKRM, EXCM, BETA, BTG, ELFC, WOLD, WNEW
  3775. REAL PIHF, EPSU2, EPSUST, EPSIT, EPSA, ZTMIN, ZTMAX, HPBL, &
  3776. & SQVISC
  3777. REAL RIC, RRIC, FHNEU, RFC, RFAC, ZZ, PSLMU, PSLMS, PSLHU, &
  3778. & PSLHS
  3779. REAL XX, PSPMU, YY, PSPMS, PSPHU, PSPHS, ZLM, Z0, THZ0, THLM
  3780. REAL SFCSPD, CZIL, AKMS, AKHS, ZILFC, ZU, ZT, RDZ, CXCH
  3781. REAL DTHV, DU2, BTGH, WSTAR2, USTAR, ZSLU, ZSLT, RLOGU, RLOGT
  3782. REAL RLMO, ZETALT, ZETALU, ZETAU, ZETAT, XLU4, XLT4, XU4, XT4
  3783. !CC ......REAL ZTFC
  3784. REAL XLU, XLT, XU, XT, PSMZ, SIMM, PSHZ, SIMH, USTARK, RLMN, &
  3785. & RLMA
  3786. INTEGER ITRMX, ILECH, ITR
  3787. PARAMETER &
  3788. & (WWST = 1.2,WWST2 = WWST * WWST,G = 9.8,VKRM = 0.40, &
  3789. & EXCM = 0.001 &
  3790. & ,BETA = 1./270.,BTG = BETA * G,ELFC = VKRM * BTG &
  3791. & ,WOLD =.15,WNEW = 1. - WOLD,ITRMX = 05, &
  3792. & PIHF = 3.14159265/2.)
  3793. PARAMETER &
  3794. & (EPSU2 = 1.E-4,EPSUST = 0.07,EPSIT = 1.E-4,EPSA = 1.E-8 &
  3795. & ,ZTMIN = -5.,ZTMAX = 1.,HPBL = 1000.0 &
  3796. & ,SQVISC = 258.2)
  3797. PARAMETER &
  3798. & (RIC = 0.183,RRIC = 1.0/ RIC,FHNEU = 0.8,RFC = 0.191 &
  3799. & ,RFAC = RIC / (FHNEU * RFC * RFC))
  3800. ! ----------------------------------------------------------------------
  3801. ! NOTE: THE TWO CODE BLOCKS BELOW DEFINE FUNCTIONS
  3802. ! ----------------------------------------------------------------------
  3803. ! LECH'S SURFACE FUNCTIONS
  3804. ! ----------------------------------------------------------------------
  3805. PSLMU (ZZ)= -0.96* log (1.0-4.5* ZZ)
  3806. PSLMS (ZZ)= ZZ * RRIC -2.076* (1. -1./ (ZZ +1.))
  3807. PSLHU (ZZ)= -0.96* log (1.0-4.5* ZZ)
  3808. ! ----------------------------------------------------------------------
  3809. ! PAULSON'S SURFACE FUNCTIONS
  3810. ! ----------------------------------------------------------------------
  3811. PSLHS (ZZ)= ZZ * RFAC -2.076* (1. -1./ (ZZ +1.))
  3812. PSPMU (XX)= -2.* log ( (XX +1.)*0.5) - log ( (XX * XX +1.)*0.5) &
  3813. & +2.* ATAN (XX) &
  3814. &- PIHF
  3815. PSPMS (YY)= 5.* YY
  3816. PSPHU (XX)= -2.* log ( (XX * XX +1.)*0.5)
  3817. ! ----------------------------------------------------------------------
  3818. ! THIS ROUTINE SFCDIF CAN HANDLE BOTH OVER OPEN WATER (SEA, OCEAN) AND
  3819. ! OVER SOLID SURFACE (LAND, SEA-ICE).
  3820. ! ----------------------------------------------------------------------
  3821. PSPHS (YY)= 5.* YY
  3822. ! ----------------------------------------------------------------------
  3823. ! ZTFC: RATIO OF ZOH/ZOM LESS OR EQUAL THAN 1
  3824. ! C......ZTFC=0.1
  3825. ! CZIL: CONSTANT C IN Zilitinkevich, S. S.1995,:NOTE ABOUT ZT
  3826. ! ----------------------------------------------------------------------
  3827. ILECH = 0
  3828. ! ----------------------------------------------------------------------
  3829. ZILFC = - CZIL * VKRM * SQVISC
  3830. ! C.......ZT=Z0*ZTFC
  3831. ZU = Z0
  3832. RDZ = 1./ ZLM
  3833. CXCH = EXCM * RDZ
  3834. DTHV = THLM - THZ0
  3835. ! ----------------------------------------------------------------------
  3836. ! BELJARS CORRECTION OF USTAR
  3837. ! ----------------------------------------------------------------------
  3838. DU2 = MAX (SFCSPD * SFCSPD,EPSU2)
  3839. !cc If statements to avoid TANGENT LINEAR problems near zero
  3840. BTGH = BTG * HPBL
  3841. IF (BTGH * AKHS * DTHV .ne. 0.0) THEN
  3842. WSTAR2 = WWST2* ABS (BTGH * AKHS * DTHV)** (2./3.)
  3843. ELSE
  3844. WSTAR2 = 0.0
  3845. END IF
  3846. ! ----------------------------------------------------------------------
  3847. ! ZILITINKEVITCH APPROACH FOR ZT
  3848. ! ----------------------------------------------------------------------
  3849. USTAR = MAX (SQRT (AKMS * SQRT (DU2+ WSTAR2)),EPSUST)
  3850. ! ----------------------------------------------------------------------
  3851. ZT = EXP (ZILFC * SQRT (USTAR * Z0))* Z0
  3852. ZSLU = ZLM + ZU
  3853. ! PRINT*,'ZSLT=',ZSLT
  3854. ! PRINT*,'ZLM=',ZLM
  3855. ! PRINT*,'ZT=',ZT
  3856. ZSLT = ZLM + ZT
  3857. RLOGU = log (ZSLU / ZU)
  3858. RLOGT = log (ZSLT / ZT)
  3859. ! PRINT*,'RLMO=',RLMO
  3860. ! PRINT*,'ELFC=',ELFC
  3861. ! PRINT*,'AKHS=',AKHS
  3862. ! PRINT*,'DTHV=',DTHV
  3863. ! PRINT*,'USTAR=',USTAR
  3864. RLMO = ELFC * AKHS * DTHV / USTAR **3
  3865. ! ----------------------------------------------------------------------
  3866. ! 1./MONIN-OBUKKHOV LENGTH-SCALE
  3867. ! ----------------------------------------------------------------------
  3868. DO ITR = 1,ITRMX
  3869. ZETALT = MAX (ZSLT * RLMO,ZTMIN)
  3870. RLMO = ZETALT / ZSLT
  3871. ZETALU = ZSLU * RLMO
  3872. ZETAU = ZU * RLMO
  3873. ZETAT = ZT * RLMO
  3874. IF (ILECH .eq. 0) THEN
  3875. IF (RLMO .lt. 0.)THEN
  3876. XLU4 = 1. -16.* ZETALU
  3877. XLT4 = 1. -16.* ZETALT
  3878. XU4 = 1. -16.* ZETAU
  3879. XT4 = 1. -16.* ZETAT
  3880. XLU = SQRT (SQRT (XLU4))
  3881. XLT = SQRT (SQRT (XLT4))
  3882. XU = SQRT (SQRT (XU4))
  3883. XT = SQRT (SQRT (XT4))
  3884. ! PRINT*,'-----------1------------'
  3885. ! PRINT*,'PSMZ=',PSMZ
  3886. ! PRINT*,'PSPMU(ZETAU)=',PSPMU(ZETAU)
  3887. ! PRINT*,'XU=',XU
  3888. ! PRINT*,'------------------------'
  3889. PSMZ = PSPMU (XU)
  3890. SIMM = PSPMU (XLU) - PSMZ + RLOGU
  3891. PSHZ = PSPHU (XT)
  3892. SIMH = PSPHU (XLT) - PSHZ + RLOGT
  3893. ELSE
  3894. ZETALU = MIN (ZETALU,ZTMAX)
  3895. ZETALT = MIN (ZETALT,ZTMAX)
  3896. ! PRINT*,'-----------2------------'
  3897. ! PRINT*,'PSMZ=',PSMZ
  3898. ! PRINT*,'PSPMS(ZETAU)=',PSPMS(ZETAU)
  3899. ! PRINT*,'ZETAU=',ZETAU
  3900. ! PRINT*,'------------------------'
  3901. PSMZ = PSPMS (ZETAU)
  3902. SIMM = PSPMS (ZETALU) - PSMZ + RLOGU
  3903. PSHZ = PSPHS (ZETAT)
  3904. SIMH = PSPHS (ZETALT) - PSHZ + RLOGT
  3905. END IF
  3906. ! ----------------------------------------------------------------------
  3907. ! LECH'S FUNCTIONS
  3908. ! ----------------------------------------------------------------------
  3909. ELSE
  3910. IF (RLMO .lt. 0.)THEN
  3911. ! PRINT*,'-----------3------------'
  3912. ! PRINT*,'PSMZ=',PSMZ
  3913. ! PRINT*,'PSLMU(ZETAU)=',PSLMU(ZETAU)
  3914. ! PRINT*,'ZETAU=',ZETAU
  3915. ! PRINT*,'------------------------'
  3916. PSMZ = PSLMU (ZETAU)
  3917. SIMM = PSLMU (ZETALU) - PSMZ + RLOGU
  3918. PSHZ = PSLHU (ZETAT)
  3919. SIMH = PSLHU (ZETALT) - PSHZ + RLOGT
  3920. ELSE
  3921. ZETALU = MIN (ZETALU,ZTMAX)
  3922. ZETALT = MIN (ZETALT,ZTMAX)
  3923. ! PRINT*,'-----------4------------'
  3924. ! PRINT*,'PSMZ=',PSMZ
  3925. ! PRINT*,'PSLMS(ZETAU)=',PSLMS(ZETAU)
  3926. ! PRINT*,'ZETAU=',ZETAU
  3927. ! PRINT*,'------------------------'
  3928. PSMZ = PSLMS (ZETAU)
  3929. SIMM = PSLMS (ZETALU) - PSMZ + RLOGU
  3930. PSHZ = PSLHS (ZETAT)
  3931. SIMH = PSLHS (ZETALT) - PSHZ + RLOGT
  3932. END IF
  3933. ! ----------------------------------------------------------------------
  3934. ! BELJAARS CORRECTION FOR USTAR
  3935. ! ----------------------------------------------------------------------
  3936. END IF
  3937. ! ----------------------------------------------------------------------
  3938. ! ZILITINKEVITCH FIX FOR ZT
  3939. ! ----------------------------------------------------------------------
  3940. USTAR = MAX (SQRT (AKMS * SQRT (DU2+ WSTAR2)),EPSUST)
  3941. ZT = EXP (ZILFC * SQRT (USTAR * Z0))* Z0
  3942. ZSLT = ZLM + ZT
  3943. !-----------------------------------------------------------------------
  3944. RLOGT = log (ZSLT / ZT)
  3945. USTARK = USTAR * VKRM
  3946. AKMS = MAX (USTARK / SIMM,CXCH)
  3947. !-----------------------------------------------------------------------
  3948. ! IF STATEMENTS TO AVOID TANGENT LINEAR PROBLEMS NEAR ZERO
  3949. !-----------------------------------------------------------------------
  3950. AKHS = MAX (USTARK / SIMH,CXCH)
  3951. IF (BTGH * AKHS * DTHV .ne. 0.0) THEN
  3952. WSTAR2 = WWST2* ABS (BTGH * AKHS * DTHV)** (2./3.)
  3953. ELSE
  3954. WSTAR2 = 0.0
  3955. END IF
  3956. !-----------------------------------------------------------------------
  3957. RLMN = ELFC * AKHS * DTHV / USTAR **3
  3958. !-----------------------------------------------------------------------
  3959. ! IF(ABS((RLMN-RLMO)/RLMA).LT.EPSIT) GO TO 110
  3960. !-----------------------------------------------------------------------
  3961. RLMA = RLMO * WOLD+ RLMN * WNEW
  3962. !-----------------------------------------------------------------------
  3963. RLMO = RLMA
  3964. ! PRINT*,'----------------------------'
  3965. ! PRINT*,'SFCDIF OUTPUT ! ! ! ! ! ! ! ! ! ! ! !'
  3966. ! PRINT*,'ZLM=',ZLM
  3967. ! PRINT*,'Z0=',Z0
  3968. ! PRINT*,'THZ0=',THZ0
  3969. ! PRINT*,'THLM=',THLM
  3970. ! PRINT*,'SFCSPD=',SFCSPD
  3971. ! PRINT*,'CZIL=',CZIL
  3972. ! PRINT*,'AKMS=',AKMS
  3973. ! PRINT*,'AKHS=',AKHS
  3974. ! PRINT*,'----------------------------'
  3975. END DO
  3976. ! ----------------------------------------------------------------------
  3977. END SUBROUTINE SFCDIF_off
  3978. ! ----------------------------------------------------------------------
  3979. END MODULE module_sf_noahlsm