PageRenderTime 65ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/phys/module_sf_noahlsm_glacial_only.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 1269 lines | 456 code | 136 blank | 677 comment | 0 complexity | c9e9a5fd7dad63f4451f1f97ff5e95bf MD5 | raw file
Possible License(s): AGPL-1.0

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

  1. MODULE module_sf_noahlsm_glacial_only
  2. USE module_model_constants
  3. USE module_sf_noahlsm, ONLY : RD, SIGMA, CPH2O, CPICE, LSUBF, EMISSI_S, ERR_MESSAGE, ROSR12
  4. USE module_sf_noahlsm, ONLY : LVCOEF_DATA
  5. PRIVATE :: ALCALC
  6. PRIVATE :: CSNOW
  7. PRIVATE :: HRTICE
  8. PRIVATE :: HSTEP
  9. PRIVATE :: PENMAN
  10. PRIVATE :: SHFLX
  11. PRIVATE :: SNOPAC
  12. PRIVATE :: SNOWPACK
  13. PRIVATE :: SNOWZ0
  14. PRIVATE :: SNOW_NEW
  15. integer, private :: iloc, jloc
  16. CONTAINS
  17. SUBROUTINE SFLX_GLACIAL (IILOC,JJLOC,ISICE,FFROZP,DT,ZLVL,NSOIL,SLDPTH, & !C
  18. & LWDN,SOLNET,SFCPRS,PRCP,SFCTMP,Q2, & !F
  19. & TH2,Q2SAT,DQSDT2, & !I
  20. & ALB, SNOALB,TBOT, Z0BRD, Z0, EMISSI, EMBRD, & !S
  21. & T1,STC,SNOWH,SNEQV,ALBEDO,CH, & !H
  22. ! ----------------------------------------------------------------------
  23. ! OUTPUTS, DIAGNOSTICS, PARAMETERS BELOW GENERALLY NOT NECESSARY WHEN
  24. ! COUPLED WITH E.G. A NWP MODEL (SUCH AS THE NOAA/NWS/NCEP MESOSCALE ETA
  25. ! MODEL). OTHER APPLICATIONS MAY REQUIRE DIFFERENT OUTPUT VARIABLES.
  26. ! ----------------------------------------------------------------------
  27. & ETA,SHEAT, ETA_KINEMATIC,FDOWN, & !O
  28. & ESNOW,DEW, & !O
  29. & ETP,SSOIL, & !O
  30. & FLX1,FLX2,FLX3, & !O
  31. & SNOMLT,SNCOVR, & !O
  32. & RUNOFF1, & !O
  33. & Q1, & !D
  34. & SNOTIME1, &
  35. & RIBB)
  36. ! ----------------------------------------------------------------------
  37. ! SUB-DRIVER FOR "Noah LSM" FAMILY OF PHYSICS SUBROUTINES FOR A
  38. ! SOIL/VEG/SNOWPACK LAND-SURFACE MODEL TO UPDATE ICE TEMPERATURE, SKIN
  39. ! TEMPERATURE, SNOWPACK WATER CONTENT, SNOWDEPTH, AND ALL TERMS OF THE
  40. ! SURFACE ENERGY BALANCE (EXCLUDING INPUT ATMOSPHERIC FORCINGS OF
  41. ! DOWNWARD RADIATION AND PRECIP)
  42. ! ----------------------------------------------------------------------
  43. ! SFLX ARGUMENT LIST KEY:
  44. ! ----------------------------------------------------------------------
  45. ! C CONFIGURATION INFORMATION
  46. ! F FORCING DATA
  47. ! I OTHER (INPUT) FORCING DATA
  48. ! S SURFACE CHARACTERISTICS
  49. ! H HISTORY (STATE) VARIABLES
  50. ! O OUTPUT VARIABLES
  51. ! D DIAGNOSTIC OUTPUT
  52. ! ----------------------------------------------------------------------
  53. ! 1. CONFIGURATION INFORMATION (C):
  54. ! ----------------------------------------------------------------------
  55. ! DT TIMESTEP (SEC) (DT SHOULD NOT EXCEED 3600 SECS, RECOMMEND
  56. ! 1800 SECS OR LESS)
  57. ! ZLVL HEIGHT (M) ABOVE GROUND OF ATMOSPHERIC FORCING VARIABLES
  58. ! NSOIL NUMBER OF SOIL LAYERS (AT LEAST 2, AND NOT GREATER THAN
  59. ! PARAMETER NSOLD SET BELOW)
  60. ! SLDPTH THE THICKNESS OF EACH SOIL LAYER (M)
  61. ! ----------------------------------------------------------------------
  62. ! 3. FORCING DATA (F):
  63. ! ----------------------------------------------------------------------
  64. ! LWDN LW DOWNWARD RADIATION (W M-2; POSITIVE, NOT NET LONGWAVE)
  65. ! SOLNET NET DOWNWARD SOLAR RADIATION ((W M-2; POSITIVE)
  66. ! SFCPRS PRESSURE AT HEIGHT ZLVL ABOVE GROUND (PASCALS)
  67. ! PRCP PRECIP RATE (KG M-2 S-1) (NOTE, THIS IS A RATE)
  68. ! SFCTMP AIR TEMPERATURE (K) AT HEIGHT ZLVL ABOVE GROUND
  69. ! TH2 AIR POTENTIAL TEMPERATURE (K) AT HEIGHT ZLVL ABOVE GROUND
  70. ! Q2 MIXING RATIO AT HEIGHT ZLVL ABOVE GROUND (KG KG-1)
  71. ! FFROZP FRACTION OF FROZEN PRECIPITATION
  72. ! ----------------------------------------------------------------------
  73. ! 4. OTHER FORCING (INPUT) DATA (I):
  74. ! ----------------------------------------------------------------------
  75. ! Q2SAT SAT SPECIFIC HUMIDITY AT HEIGHT ZLVL ABOVE GROUND (KG KG-1)
  76. ! DQSDT2 SLOPE OF SAT SPECIFIC HUMIDITY CURVE AT T=SFCTMP
  77. ! (KG KG-1 K-1)
  78. ! ----------------------------------------------------------------------
  79. ! 5. CANOPY/SOIL CHARACTERISTICS (S):
  80. ! ----------------------------------------------------------------------
  81. ! ALB BACKROUND SNOW-FREE SURFACE ALBEDO (FRACTION), FOR JULIAN
  82. ! DAY OF YEAR (USUALLY FROM TEMPORAL INTERPOLATION OF
  83. ! MONTHLY MEAN VALUES' CALLING PROG MAY OR MAY NOT
  84. ! INCLUDE DIURNAL SUN ANGLE EFFECT)
  85. ! SNOALB UPPER BOUND ON MAXIMUM ALBEDO OVER DEEP SNOW (E.G. FROM
  86. ! ROBINSON AND KUKLA, 1985, J. CLIM. & APPL. METEOR.)
  87. ! TBOT BOTTOM SOIL TEMPERATURE (LOCAL YEARLY-MEAN SFC AIR
  88. ! TEMPERATURE)
  89. ! Z0BRD Background fixed roughness length (M)
  90. ! Z0 Time varying roughness length (M) as function of snow depth
  91. ! EMBRD Background surface emissivity (between 0 and 1)
  92. ! EMISSI Surface emissivity (between 0 and 1)
  93. ! ----------------------------------------------------------------------
  94. ! 6. HISTORY (STATE) VARIABLES (H):
  95. ! ----------------------------------------------------------------------
  96. ! T1 GROUND/CANOPY/SNOWPACK) EFFECTIVE SKIN TEMPERATURE (K)
  97. ! STC(NSOIL) SOIL TEMP (K)
  98. ! SNOWH ACTUAL SNOW DEPTH (M)
  99. ! SNEQV LIQUID WATER-EQUIVALENT SNOW DEPTH (M)
  100. ! NOTE: SNOW DENSITY = SNEQV/SNOWH
  101. ! ALBEDO SURFACE ALBEDO INCLUDING SNOW EFFECT (UNITLESS FRACTION)
  102. ! =SNOW-FREE ALBEDO (ALB) WHEN SNEQV=0, OR
  103. ! =FCT(MSNOALB,ALB,SHDFAC,SHDMIN) WHEN SNEQV>0
  104. ! CH SURFACE EXCHANGE COEFFICIENT FOR HEAT AND MOISTURE
  105. ! (M S-1); NOTE: CH IS TECHNICALLY A CONDUCTANCE SINCE
  106. ! IT HAS BEEN MULTIPLIED BY WIND SPEED.
  107. ! ----------------------------------------------------------------------
  108. ! 7. OUTPUT (O):
  109. ! ----------------------------------------------------------------------
  110. ! OUTPUT VARIABLES NECESSARY FOR A COUPLED NUMERICAL WEATHER PREDICTION
  111. ! MODEL, E.G. NOAA/NWS/NCEP MESOSCALE ETA MODEL. FOR THIS APPLICATION,
  112. ! THE REMAINING OUTPUT/DIAGNOSTIC/PARAMETER BLOCKS BELOW ARE NOT
  113. ! NECESSARY. OTHER APPLICATIONS MAY REQUIRE DIFFERENT OUTPUT VARIABLES.
  114. ! ETA ACTUAL LATENT HEAT FLUX (W m-2: NEGATIVE, IF UP FROM
  115. ! SURFACE)
  116. ! ETA_KINEMATIC atctual latent heat flux in Kg m-2 s-1
  117. ! SHEAT SENSIBLE HEAT FLUX (W M-2: NEGATIVE, IF UPWARD FROM
  118. ! SURFACE)
  119. ! FDOWN Radiation forcing at the surface (W m-2) = SOLDN*(1-alb)+LWDN
  120. ! ----------------------------------------------------------------------
  121. ! ESNOW SUBLIMATION FROM (OR DEPOSITION TO IF <0) SNOWPACK
  122. ! (W m-2)
  123. ! DEW DEWFALL (OR FROSTFALL FOR T<273.15) (M)
  124. ! ----------------------------------------------------------------------
  125. ! ETP POTENTIAL EVAPORATION (W m-2)
  126. ! SSOIL SOIL HEAT FLUX (W M-2: NEGATIVE IF DOWNWARD FROM SURFACE)
  127. ! ----------------------------------------------------------------------
  128. ! FLX1 PRECIP-SNOW SFC (W M-2)
  129. ! FLX2 FREEZING RAIN LATENT HEAT FLUX (W M-2)
  130. ! FLX3 PHASE-CHANGE HEAT FLUX FROM SNOWMELT (W M-2)
  131. ! ----------------------------------------------------------------------
  132. ! SNOMLT SNOW MELT (M) (WATER EQUIVALENT)
  133. ! SNCOVR FRACTIONAL SNOW COVER (UNITLESS FRACTION, 0-1)
  134. ! ----------------------------------------------------------------------
  135. ! RUNOFF1 SURFACE RUNOFF (M S-1), NOT INFILTRATING THE SURFACE
  136. ! ----------------------------------------------------------------------
  137. ! 8. DIAGNOSTIC OUTPUT (D):
  138. ! ----------------------------------------------------------------------
  139. ! Q1 Effective mixing ratio at surface (kg kg-1), used for
  140. ! diagnosing the mixing ratio at 2 meter for coupled model
  141. ! Documentation for SNOTIME1 and SNOABL2 ?????
  142. ! What categories of arguments do these variables fall into ????
  143. ! Documentation for RIBB ?????
  144. ! What category of argument does RIBB fall into ?????
  145. ! ----------------------------------------------------------------------
  146. IMPLICIT NONE
  147. ! ----------------------------------------------------------------------
  148. integer, intent(in) :: iiloc, jjloc
  149. INTEGER, INTENT(IN) :: ISICE
  150. ! ----------------------------------------------------------------------
  151. LOGICAL :: FRZGRA, SNOWNG
  152. ! ----------------------------------------------------------------------
  153. ! 1. CONFIGURATION INFORMATION (C):
  154. ! ----------------------------------------------------------------------
  155. INTEGER, INTENT(IN) :: NSOIL
  156. INTEGER :: KZ
  157. ! ----------------------------------------------------------------------
  158. ! 2. LOGICAL:
  159. ! ----------------------------------------------------------------------
  160. REAL, INTENT(IN) :: DT,DQSDT2,LWDN,PRCP, &
  161. & Q2,Q2SAT,SFCPRS,SFCTMP, SNOALB, &
  162. & SOLNET,TBOT,TH2,ZLVL,FFROZP
  163. REAL, INTENT(OUT) :: EMBRD, ALBEDO
  164. REAL, INTENT(INOUT):: CH,SNEQV,SNCOVR,SNOWH,T1,Z0BRD,EMISSI,ALB
  165. REAL, INTENT(INOUT):: SNOTIME1
  166. REAL, INTENT(INOUT):: RIBB
  167. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SLDPTH
  168. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: STC
  169. REAL, DIMENSION(1:NSOIL) :: ZSOIL
  170. REAL,INTENT(OUT) :: ETA_KINEMATIC,DEW,ESNOW,ETA, &
  171. & ETP,FLX1,FLX2,FLX3,SHEAT,RUNOFF1, &
  172. & SSOIL,SNOMLT,FDOWN,Q1
  173. REAL :: DF1,DSOIL,DTOT,FRCSNO,FRCSOI, &
  174. & PRCP1,RCH,RR,RSNOW,SNDENS,SNCOND,SN_NEW, &
  175. & T1V,T24,T2V,TH2V,TSNOW,Z0,PRCPF,RHO
  176. ! ----------------------------------------------------------------------
  177. ! DECLARATIONS - PARAMETERS
  178. ! ----------------------------------------------------------------------
  179. REAL, PARAMETER :: TFREEZ = 273.15
  180. REAL, PARAMETER :: LVH2O = 2.501E+6
  181. REAL, PARAMETER :: LSUBS = 2.83E+6
  182. REAL, PARAMETER :: R = 287.04
  183. ! ----------------------------------------------------------------------
  184. iloc = iiloc
  185. jloc = jjloc
  186. ! ----------------------------------------------------------------------
  187. ZSOIL (1) = - SLDPTH (1)
  188. DO KZ = 2,NSOIL
  189. ZSOIL (KZ) = - SLDPTH (KZ) + ZSOIL (KZ -1)
  190. END DO
  191. ! ----------------------------------------------------------------------
  192. ! IF S.W.E. (SNEQV) BELOW THRESHOLD LOWER BOUND (0.10 M FOR GLACIAL
  193. ! ICE), THEN SET AT LOWER BOUND
  194. ! ----------------------------------------------------------------------
  195. IF ( SNEQV < 0.10 ) THEN
  196. SNEQV = 0.10
  197. SNOWH = 0.50
  198. ENDIF
  199. ! ----------------------------------------------------------------------
  200. ! IF INPUT SNOWPACK IS NONZERO, THEN COMPUTE SNOW DENSITY "SNDENS" AND
  201. ! SNOW THERMAL CONDUCTIVITY "SNCOND"
  202. ! ----------------------------------------------------------------------
  203. SNDENS = SNEQV / SNOWH
  204. IF(SNDENS > 1.0) THEN
  205. CALL wrf_error_fatal ( 'Physical snow depth is less than snow water equiv.' )
  206. ENDIF
  207. CALL CSNOW (SNCOND,SNDENS)
  208. ! ----------------------------------------------------------------------
  209. ! DETERMINE IF IT'S PRECIPITATING AND WHAT KIND OF PRECIP IT IS.
  210. ! IF IT'S PRCPING AND THE AIR TEMP IS COLDER THAN 0 C, IT'S SNOWING!
  211. ! IF IT'S PRCPING AND THE AIR TEMP IS WARMER THAN 0 C, BUT THE GRND
  212. ! TEMP IS COLDER THAN 0 C, FREEZING RAIN IS PRESUMED TO BE FALLING.
  213. ! ----------------------------------------------------------------------
  214. SNOWNG = .FALSE.
  215. FRZGRA = .FALSE.
  216. IF (PRCP > 0.0) THEN
  217. ! ----------------------------------------------------------------------
  218. ! Snow defined when fraction of frozen precip (FFROZP) > 0.5,
  219. ! passed in from model microphysics.
  220. ! ----------------------------------------------------------------------
  221. IF (FFROZP .GT. 0.5) THEN
  222. SNOWNG = .TRUE.
  223. ELSE
  224. IF (T1 <= TFREEZ) FRZGRA = .TRUE.
  225. END IF
  226. END IF
  227. ! ----------------------------------------------------------------------
  228. ! IF EITHER PRCP FLAG IS SET, DETERMINE NEW SNOWFALL (CONVERTING PRCP
  229. ! RATE FROM KG M-2 S-1 TO A LIQUID EQUIV SNOW DEPTH IN METERS) AND ADD
  230. ! IT TO THE EXISTING SNOWPACK.
  231. ! NOTE THAT SINCE ALL PRECIP IS ADDED TO SNOWPACK, NO PRECIP INFILTRATES
  232. ! INTO THE SOIL SO THAT PRCP1 IS SET TO ZERO.
  233. ! ----------------------------------------------------------------------
  234. IF ( (SNOWNG) .OR. (FRZGRA) ) THEN
  235. SN_NEW = PRCP * DT * 0.001
  236. SNEQV = SNEQV + SN_NEW
  237. PRCPF = 0.0
  238. ! ----------------------------------------------------------------------
  239. ! UPDATE SNOW DENSITY BASED ON NEW SNOWFALL, USING OLD AND NEW SNOW.
  240. ! UPDATE SNOW THERMAL CONDUCTIVITY
  241. ! ----------------------------------------------------------------------
  242. CALL SNOW_NEW (SFCTMP,SN_NEW,SNOWH,SNDENS)
  243. ! ----------------------------------------------------------------------
  244. ! kmh 09/04/2006 set Snow Density at 0.2 g/cm**3
  245. ! for "cold permanent ice" or new "dry" snow
  246. ! if soil temperature less than 268.15 K, treat as typical
  247. ! Antarctic/Greenland snow firn
  248. ! ----------------------------------------------------------------------
  249. IF ( SNCOVR .GT. 0.99 ) THEN
  250. IF ( STC(1) .LT. (TFREEZ - 5.) ) SNDENS = 0.2
  251. IF ( SNOWNG .AND. (T1.LT.273.) .AND. (SFCTMP.LT.273.) ) SNDENS=0.2
  252. ENDIF
  253. CALL CSNOW (SNCOND,SNDENS)
  254. ! ----------------------------------------------------------------------
  255. ! PRECIP IS LIQUID (RAIN), HENCE SAVE IN THE PRECIP VARIABLE THAT
  256. ! LATER CAN WHOLELY OR PARTIALLY INFILTRATE THE SOIL
  257. ! ----------------------------------------------------------------------
  258. ELSE
  259. PRCPF = PRCP
  260. ENDIF
  261. ! ----------------------------------------------------------------------
  262. ! DETERMINE SNOW FRACTIONAL COVERAGE.
  263. ! KWM: Set SNCOVR to 1.0 because SNUP is set small in VEGPARM.TBL,
  264. ! and SNEQV is at least 0.1 (as set above)
  265. ! ----------------------------------------------------------------------
  266. SNCOVR = 1.0
  267. ! ----------------------------------------------------------------------
  268. ! DETERMINE SURFACE ALBEDO MODIFICATION DUE TO SNOWDEPTH STATE.
  269. ! ----------------------------------------------------------------------
  270. CALL ALCALC (ALB,SNOALB,EMBRD,T1,ALBEDO,EMISSI, &
  271. & DT,SNOWNG,SNOTIME1)
  272. ! ----------------------------------------------------------------------
  273. ! THERMAL CONDUCTIVITY
  274. ! ----------------------------------------------------------------------
  275. DF1 = SNCOND
  276. DSOIL = - (0.5 * ZSOIL (1))
  277. DTOT = SNOWH + DSOIL
  278. FRCSNO = SNOWH / DTOT
  279. ! 1. HARMONIC MEAN (SERIES FLOW)
  280. ! DF1 = (SNCOND*DF1)/(FRCSOI*SNCOND+FRCSNO*DF1)
  281. FRCSOI = DSOIL / DTOT
  282. ! 3. GEOMETRIC MEAN (INTERMEDIATE BETWEEN HARMONIC AND ARITHMETIC MEAN)
  283. ! DF1 = (SNCOND**FRCSNO)*(DF1**FRCSOI)
  284. DF1 = FRCSNO * SNCOND + FRCSOI * DF1
  285. ! ----------------------------------------------------------------------
  286. ! CALCULATE SUBSURFACE HEAT FLUX, SSOIL, FROM FINAL THERMAL DIFFUSIVITY
  287. ! OF SURFACE MEDIUMS, DF1 ABOVE, AND SKIN TEMPERATURE AND TOP
  288. ! MID-LAYER SOIL TEMPERATURE
  289. ! ----------------------------------------------------------------------
  290. IF ( DTOT .GT. 2.*DSOIL ) then
  291. DTOT = 2.*DSOIL
  292. ENDIF
  293. SSOIL = DF1 * ( T1 - STC(1) ) / DTOT
  294. ! ----------------------------------------------------------------------
  295. ! DETERMINE SURFACE ROUGHNESS OVER SNOWPACK USING SNOW CONDITION FROM
  296. ! THE PREVIOUS TIMESTEP.
  297. ! ----------------------------------------------------------------------
  298. CALL SNOWZ0 (Z0,Z0BRD,SNOWH)
  299. ! ----------------------------------------------------------------------
  300. ! CALCULATE TOTAL DOWNWARD RADIATION (SOLAR PLUS LONGWAVE) NEEDED IN
  301. ! PENMAN EP SUBROUTINE THAT FOLLOWS
  302. ! ----------------------------------------------------------------------
  303. FDOWN = SOLNET + LWDN
  304. ! ----------------------------------------------------------------------
  305. ! CALC VIRTUAL TEMPS AND VIRTUAL POTENTIAL TEMPS NEEDED BY SUBROUTINES
  306. ! PENMAN.
  307. ! ----------------------------------------------------------------------
  308. T2V = SFCTMP * (1.0+ 0.61 * Q2 )
  309. RHO = SFCPRS / (RD * T2V)
  310. RCH = RHO * 1004.6 * CH
  311. T24 = SFCTMP * SFCTMP * SFCTMP * SFCTMP
  312. ! ----------------------------------------------------------------------
  313. ! CALL PENMAN SUBROUTINE TO CALCULATE POTENTIAL EVAPORATION (ETP), AND
  314. ! OTHER PARTIAL PRODUCTS AND SUMS SAVE IN COMMON/RITE FOR LATER
  315. ! CALCULATIONS.
  316. ! ----------------------------------------------------------------------
  317. ! PENMAN returns ETP, FLX2, and RR
  318. CALL PENMAN (SFCTMP,SFCPRS,CH,TH2,PRCP,FDOWN,T24,SSOIL, &
  319. & Q2,Q2SAT,ETP,RCH,RR,SNOWNG,FRZGRA, &
  320. & DQSDT2,FLX2,EMISSI,T1)
  321. CALL SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,NSOIL,DT,DF1, &
  322. & Q2,T1,SFCTMP,T24,TH2,FDOWN,SSOIL,STC, &
  323. & SFCPRS,RCH,RR,SNEQV,SNDENS,SNOWH,ZSOIL,TBOT, &
  324. & SNOMLT,DEW,FLX1,FLX2,FLX3,ESNOW,EMISSI,RIBB)
  325. ETA_KINEMATIC = ESNOW
  326. ! ----------------------------------------------------------------------
  327. ! Effective mixing ratio at grnd level (skin)
  328. ! ----------------------------------------------------------------------
  329. Q1=Q2+ETA_KINEMATIC*CP/RCH
  330. ! ----------------------------------------------------------------------
  331. ! DETERMINE SENSIBLE HEAT (H) IN ENERGY UNITS (W M-2)
  332. ! ----------------------------------------------------------------------
  333. SHEAT = - (CH * CP * SFCPRS)/ (R * T2V) * ( TH2- T1 )
  334. ! ----------------------------------------------------------------------
  335. ! CONVERT EVAP TERMS FROM KINEMATIC (KG M-2 S-1) TO ENERGY UNITS (W M-2)
  336. ! ----------------------------------------------------------------------
  337. ESNOW = ESNOW * LSUBS
  338. ETP = ETP * LSUBS
  339. IF (ETP .GT. 0.) THEN
  340. ETA = ESNOW
  341. ELSE
  342. ETA = ETP
  343. ENDIF
  344. ! ----------------------------------------------------------------------
  345. ! CONVERT THE SIGN OF SOIL HEAT FLUX SO THAT:
  346. ! SSOIL>0: WARM THE SURFACE (NIGHT TIME)
  347. ! SSOIL<0: COOL THE SURFACE (DAY TIME)
  348. ! ----------------------------------------------------------------------
  349. SSOIL = -1.0* SSOIL
  350. ! ----------------------------------------------------------------------
  351. ! FOR THE CASE OF GLACIAL-ICE, ADD ANY SNOWMELT DIRECTLY TO SURFACE
  352. ! RUNOFF (RUNOFF1) SINCE THERE IS NO SOIL MEDIUM
  353. ! ----------------------------------------------------------------------
  354. RUNOFF1 = SNOMLT / DT
  355. ! ----------------------------------------------------------------------
  356. END SUBROUTINE SFLX_GLACIAL
  357. ! ----------------------------------------------------------------------
  358. SUBROUTINE ALCALC (ALB,SNOALB,EMBRD,TSNOW,ALBEDO,EMISSI, &
  359. & DT,SNOWNG,SNOTIME1)
  360. ! ----------------------------------------------------------------------
  361. ! CALCULATE ALBEDO INCLUDING SNOW EFFECT (0 -> 1)
  362. ! ALB SNOWFREE ALBEDO
  363. ! SNOALB MAXIMUM (DEEP) SNOW ALBEDO
  364. ! ALBEDO SURFACE ALBEDO INCLUDING SNOW EFFECT
  365. ! TSNOW SNOW SURFACE TEMPERATURE (K)
  366. ! ----------------------------------------------------------------------
  367. IMPLICIT NONE
  368. ! ----------------------------------------------------------------------
  369. ! SNOALB IS ARGUMENT REPRESENTING MAXIMUM ALBEDO OVER DEEP SNOW,
  370. ! AS PASSED INTO SFLX, AND ADAPTED FROM THE SATELLITE-BASED MAXIMUM
  371. ! SNOW ALBEDO FIELDS PROVIDED BY D. ROBINSON AND G. KUKLA
  372. ! (1985, JCAM, VOL 24, 402-411)
  373. ! ----------------------------------------------------------------------
  374. REAL, INTENT(IN) :: ALB, SNOALB, EMBRD, TSNOW
  375. REAL, INTENT(IN) :: DT
  376. LOGICAL, INTENT(IN) :: SNOWNG
  377. REAL, INTENT(INOUT) :: SNOTIME1
  378. REAL, INTENT(OUT) :: ALBEDO, EMISSI
  379. REAL :: SNOALB2
  380. REAL :: TM,SNOALB1
  381. REAL, PARAMETER :: SNACCA=0.94,SNACCB=0.58,SNTHWA=0.82,SNTHWB=0.46
  382. ! turn off vegetation effect
  383. ! ALBEDO = ALB + (1.0- (SHDFAC - SHDMIN))* SNCOVR * (SNOALB - ALB)
  384. ! ALBEDO = (1.0-SNCOVR)*ALB + SNCOVR*SNOALB !this is equivalent to below
  385. ALBEDO = ALB + (SNOALB-ALB)
  386. EMISSI = EMBRD + (EMISSI_S - EMBRD)
  387. ! BASE FORMULATION (DICKINSON ET AL., 1986, COGLEY ET AL., 1990)
  388. ! IF (TSNOW.LE.263.16) THEN
  389. ! ALBEDO=SNOALB
  390. ! ELSE
  391. ! IF (TSNOW.LT.273.16) THEN
  392. ! TM=0.1*(TSNOW-263.16)
  393. ! SNOALB1=0.5*((0.9-0.2*(TM**3))+(0.8-0.16*(TM**3)))
  394. ! ELSE
  395. ! SNOALB1=0.67
  396. ! IF(SNCOVR.GT.0.95) SNOALB1= 0.6
  397. ! SNOALB1 = ALB + SNCOVR*(SNOALB-ALB)
  398. ! ENDIF
  399. ! ENDIF
  400. ! ALBEDO = ALB + SNCOVR*(SNOALB1-ALB)
  401. ! ISBA FORMULATION (VERSEGHY, 1991; BAKER ET AL., 1990)
  402. ! SNOALB1 = SNOALB+COEF*(0.85-SNOALB)
  403. ! SNOALB2=SNOALB1
  404. !!m LSTSNW=LSTSNW+1
  405. ! SNOTIME1 = SNOTIME1 + DT
  406. ! IF (SNOWNG) THEN
  407. ! SNOALB2=SNOALB
  408. !!m LSTSNW=0
  409. ! SNOTIME1 = 0.0
  410. ! ELSE
  411. ! IF (TSNOW.LT.273.16) THEN
  412. !! SNOALB2=SNOALB-0.008*LSTSNW*DT/86400
  413. !!m SNOALB2=SNOALB-0.008*SNOTIME1/86400
  414. ! SNOALB2=(SNOALB2-0.65)*EXP(-0.05*DT/3600)+0.65
  415. !! SNOALB2=(ALBEDO-0.65)*EXP(-0.01*DT/3600)+0.65
  416. ! ELSE
  417. ! SNOALB2=(SNOALB2-0.5)*EXP(-0.0005*DT/3600)+0.5
  418. !! SNOALB2=(SNOALB-0.5)*EXP(-0.24*LSTSNW*DT/86400)+0.5
  419. !!m SNOALB2=(SNOALB-0.5)*EXP(-0.24*SNOTIME1/86400)+0.5
  420. ! ENDIF
  421. ! ENDIF
  422. !
  423. !! print*,'SNOALB2',SNOALB2,'ALBEDO',ALBEDO,'DT',DT
  424. ! ALBEDO = ALB + SNCOVR*(SNOALB2-ALB)
  425. ! IF (ALBEDO .GT. SNOALB2) ALBEDO=SNOALB2
  426. !!m LSTSNW1=LSTSNW
  427. !! SNOTIME = SNOTIME1
  428. ! formulation by Livneh
  429. ! ----------------------------------------------------------------------
  430. ! SNOALB IS CONSIDERED AS THE MAXIMUM SNOW ALBEDO FOR NEW SNOW, AT
  431. ! A VALUE OF 85%. SNOW ALBEDO CURVE DEFAULTS ARE FROM BRAS P.263. SHOULD
  432. ! NOT BE CHANGED EXCEPT FOR SERIOUS PROBLEMS WITH SNOW MELT.
  433. ! TO IMPLEMENT ACCUMULATIN PARAMETERS, SNACCA AND SNACCB, ASSERT THAT IT
  434. ! IS INDEED ACCUMULATION SEASON. I.E. THAT SNOW SURFACE TEMP IS BELOW
  435. ! ZERO AND THE DATE FALLS BETWEEN OCTOBER AND FEBRUARY
  436. ! ----------------------------------------------------------------------
  437. SNOALB1 = SNOALB+LVCOEF_DATA*(0.85-SNOALB)
  438. SNOALB2=SNOALB1
  439. ! ---------------- Initial LSTSNW --------------------------------------
  440. IF (SNOWNG) THEN
  441. SNOTIME1 = 0.
  442. ELSE
  443. SNOTIME1=SNOTIME1+DT
  444. ! IF (TSNOW.LT.273.16) THEN
  445. SNOALB2=SNOALB1*(SNACCA**((SNOTIME1/86400.0)**SNACCB))
  446. ! ELSE
  447. ! SNOALB2 =SNOALB1*(SNTHWA**((SNOTIME1/86400.0)**SNTHWB))
  448. ! ENDIF
  449. ENDIF
  450. SNOALB2 = MAX ( SNOALB2, ALB )
  451. ALBEDO = ALB + (SNOALB2-ALB)
  452. IF (ALBEDO .GT. SNOALB2) ALBEDO=SNOALB2
  453. ! IF (TSNOW.LT.273.16) THEN
  454. ! ALBEDO=SNOALB-0.008*DT/86400
  455. ! ELSE
  456. ! ALBEDO=(SNOALB-0.5)*EXP(-0.24*DT/86400)+0.5
  457. ! ENDIF
  458. ! IF (ALBEDO > SNOALB) ALBEDO = SNOALB
  459. ! ----------------------------------------------------------------------
  460. END SUBROUTINE ALCALC
  461. ! ----------------------------------------------------------------------
  462. SUBROUTINE CSNOW (SNCOND,DSNOW)
  463. ! ----------------------------------------------------------------------
  464. ! CALCULATE SNOW TERMAL CONDUCTIVITY
  465. ! ----------------------------------------------------------------------
  466. IMPLICIT NONE
  467. REAL, INTENT(IN) :: DSNOW
  468. REAL, INTENT(OUT) :: SNCOND
  469. REAL :: C
  470. REAL, PARAMETER :: UNIT = 0.11631
  471. ! ----------------------------------------------------------------------
  472. ! SNCOND IN UNITS OF CAL/(CM*HR*C), RETURNED IN W/(M*C)
  473. ! CSNOW IN UNITS OF CAL/(CM*HR*C), RETURNED IN W/(M*C)
  474. ! BASIC VERSION IS DYACHKOVA EQUATION (1960), FOR RANGE 0.1-0.4
  475. ! ----------------------------------------------------------------------
  476. C = 0.328*10** (2.25* DSNOW)
  477. ! CSNOW=UNIT*C
  478. ! ----------------------------------------------------------------------
  479. ! DE VAUX EQUATION (1933), IN RANGE 0.1-0.6
  480. ! ----------------------------------------------------------------------
  481. ! SNCOND=0.0293*(1.+100.*DSNOW**2)
  482. ! CSNOW=0.0293*(1.+100.*DSNOW**2)
  483. ! ----------------------------------------------------------------------
  484. ! E. ANDERSEN FROM FLERCHINGER
  485. ! ----------------------------------------------------------------------
  486. ! SNCOND=0.021+2.51*DSNOW**2
  487. ! CSNOW=0.021+2.51*DSNOW**2
  488. ! SNCOND = UNIT * C
  489. ! double snow thermal conductivity
  490. SNCOND = 2.0 * UNIT * C
  491. ! ----------------------------------------------------------------------
  492. END SUBROUTINE CSNOW
  493. ! ----------------------------------------------------------------------
  494. SUBROUTINE HRTICE (RHSTS,STC,TBOT,NSOIL,ZSOIL,YY,ZZ1,DF1,AI,BI,CI)
  495. ! ----------------------------------------------------------------------
  496. ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
  497. ! THERMAL DIFFUSION EQUATION IN THE CASE OF SEA-ICE (ICE=1) OR GLACIAL
  498. ! ICE (ICE=-1). COMPUTE (PREPARE) THE MATRIX COEFFICIENTS FOR THE
  499. ! TRI-DIAGONAL MATRIX OF THE IMPLICIT TIME SCHEME.
  500. !
  501. ! (NOTE: THIS SUBROUTINE ONLY CALLED FOR SEA-ICE OR GLACIAL ICE, BUT
  502. ! NOT FOR NON-GLACIAL LAND (ICE = 0).
  503. ! ----------------------------------------------------------------------
  504. IMPLICIT NONE
  505. INTEGER, INTENT(IN) :: NSOIL
  506. REAL, INTENT(IN) :: DF1,YY,ZZ1
  507. REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: AI, BI,CI
  508. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: STC, ZSOIL
  509. REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: RHSTS
  510. REAL, INTENT(IN) :: TBOT
  511. INTEGER :: K
  512. REAL :: DDZ,DDZ2,DENOM,DTSDZ,DTSDZ2,SSOIL,HCPCT
  513. REAL :: DF1K,DF1N
  514. REAL :: ZMD
  515. REAL, PARAMETER :: ZBOT = -25.0
  516. ! ----------------------------------------------------------------------
  517. ! SET A NOMINAL UNIVERSAL VALUE OF GLACIAL-ICE SPECIFIC HEAT CAPACITY,
  518. ! HCPCT = 2100.0*900.0 = 1.89000E+6 (SOURCE: BOB GRUMBINE, 2005)
  519. ! TBOT PASSED IN AS ARGUMENT, VALUE FROM GLOBAL DATA SET
  520. !
  521. ! A least-squares fit for the four points provided by
  522. ! Keith Hines for the Yen (1981) values for Antarctic
  523. ! snow firn.
  524. !
  525. HCPCT = 1.E6 * (0.8194 - 0.1309*0.5*ZSOIL(1))
  526. DF1K = DF1
  527. ! ----------------------------------------------------------------------
  528. ! THE INPUT ARGUMENT DF1 IS A UNIVERSALLY CONSTANT VALUE OF SEA-ICE
  529. ! THERMAL DIFFUSIVITY, SET IN ROUTINE SNOPAC AS DF1 = 2.2.
  530. ! ----------------------------------------------------------------------
  531. ! SET ICE PACK DEPTH. USE TBOT AS ICE PACK LOWER BOUNDARY TEMPERATURE
  532. ! (THAT OF UNFROZEN SEA WATER AT BOTTOM OF SEA ICE PACK). ASSUME ICE
  533. ! PACK IS OF N=NSOIL LAYERS SPANNING A UNIFORM CONSTANT ICE PACK
  534. ! THICKNESS AS DEFINED BY ZSOIL(NSOIL) IN ROUTINE SFLX.
  535. ! ----------------------------------------------------------------------
  536. ! ----------------------------------------------------------------------
  537. ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
  538. ! ----------------------------------------------------------------------
  539. DDZ = 1.0 / ( -0.5 * ZSOIL (2) )
  540. AI (1) = 0.0
  541. CI (1) = (DF1 * DDZ) / (ZSOIL (1) * HCPCT)
  542. ! ----------------------------------------------------------------------
  543. ! CALC THE VERTICAL SOIL TEMP GRADIENT BTWN THE TOP AND 2ND SOIL LAYERS.
  544. ! RECALC/ADJUST THE SOIL HEAT FLUX. USE THE GRADIENT AND FLUX TO CALC
  545. ! RHSTS FOR THE TOP SOIL LAYER.
  546. ! ----------------------------------------------------------------------
  547. BI (1) = - CI (1) + DF1/ (0.5 * ZSOIL (1) * ZSOIL (1) * HCPCT * &
  548. & ZZ1)
  549. DTSDZ = ( STC (1) - STC (2) ) / ( -0.5 * ZSOIL (2) )
  550. SSOIL = DF1 * ( STC (1) - YY ) / ( 0.5 * ZSOIL (1) * ZZ1 )
  551. ! ----------------------------------------------------------------------
  552. ! INITIALIZE DDZ2
  553. ! ----------------------------------------------------------------------
  554. RHSTS (1) = ( DF1 * DTSDZ - SSOIL ) / ( ZSOIL (1) * HCPCT )
  555. ! ----------------------------------------------------------------------
  556. ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABOVE PROCESS
  557. ! ----------------------------------------------------------------------
  558. DDZ2 = 0.0
  559. DF1K = DF1
  560. DF1N = DF1
  561. DO K = 2,NSOIL
  562. ZMD = 0.5 * (ZSOIL(K)+ZSOIL(K-1))
  563. ! For the land-ice case
  564. ! kmh 09/03/2006 use Yen (1981)'s values for Antarctic snow firn
  565. ! IF ( K .eq. 2 ) HCPCT = 0.855108E6
  566. ! IF ( K .eq. 3 ) HCPCT = 0.922906E6
  567. ! IF ( K .eq. 4 ) HCPCT = 1.009986E6
  568. ! Least squares fit to the four points supplied by Keith Hines
  569. ! from Yen (1981) for Antarctic snow firn. Not optimal, but
  570. ! probably better than just a constant.
  571. HCPCT = 1.E6 * ( 0.8194 - 0.1309*ZMD )
  572. ! IF ( K .eq. 2 ) DF1N = 0.345356
  573. ! IF ( K .eq. 3 ) DF1N = 0.398777
  574. ! IF ( K .eq. 4 ) DF1N = 0.472653
  575. ! Least squares fit to the three points supplied by Keith Hines
  576. ! from Yen (1981) for Antarctic snow firn. Not optimal, but
  577. ! probably better than just a constant.
  578. DF1N = 0.32333 - ( 0.10073 * ZMD )
  579. ! ----------------------------------------------------------------------
  580. ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THIS LAYER.
  581. ! ----------------------------------------------------------------------
  582. IF (K /= NSOIL) THEN
  583. DENOM = 0.5 * ( ZSOIL (K -1) - ZSOIL (K +1) )
  584. ! ----------------------------------------------------------------------
  585. ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT.
  586. ! ----------------------------------------------------------------------
  587. DTSDZ2 = ( STC (K) - STC (K +1) ) / DENOM
  588. DDZ2 = 2. / (ZSOIL (K -1) - ZSOIL (K +1))
  589. CI (K) = - DF1N * DDZ2 / ( (ZSOIL (K -1) - ZSOIL (K))*HCPCT)
  590. ! ----------------------------------------------------------------------
  591. ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THE LOWEST LAYER.
  592. ! ----------------------------------------------------------------------
  593. ELSE
  594. ! ----------------------------------------------------------------------
  595. ! SET MATRIX COEF, CI TO ZERO.
  596. ! ----------------------------------------------------------------------
  597. DTSDZ2 = (STC (K) - TBOT)/ (.5 * (ZSOIL (K -1) + ZSOIL (K)) &
  598. & - ZBOT)
  599. CI (K) = 0.
  600. ! ----------------------------------------------------------------------
  601. ! CALC RHSTS FOR THIS LAYER AFTER CALC'NG A PARTIAL PRODUCT.
  602. ! ----------------------------------------------------------------------
  603. END IF
  604. DENOM = ( ZSOIL (K) - ZSOIL (K -1) ) * HCPCT
  605. ! ----------------------------------------------------------------------
  606. ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER.
  607. ! ----------------------------------------------------------------------
  608. RHSTS (K) = ( DF1N * DTSDZ2- DF1K * DTSDZ ) / DENOM
  609. AI (K) = - DF1K * DDZ / ( (ZSOIL (K -1) - ZSOIL (K)) * HCPCT)
  610. ! ----------------------------------------------------------------------
  611. ! RESET VALUES OF DTSDZ AND DDZ FOR LOOP TO NEXT SOIL LYR.
  612. ! ----------------------------------------------------------------------
  613. BI (K) = - (AI (K) + CI (K))
  614. DF1K = DF1N
  615. DTSDZ = DTSDZ2
  616. DDZ = DDZ2
  617. END DO
  618. ! ----------------------------------------------------------------------
  619. END SUBROUTINE HRTICE
  620. ! ----------------------------------------------------------------------
  621. SUBROUTINE HSTEP (STCOUT,STCIN,RHSTS,DT,NSOIL,AI,BI,CI)
  622. ! ----------------------------------------------------------------------
  623. ! CALCULATE/UPDATE THE SOIL TEMPERATURE FIELD.
  624. ! ----------------------------------------------------------------------
  625. IMPLICIT NONE
  626. INTEGER, INTENT(IN) :: NSOIL
  627. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: STCIN
  628. REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: STCOUT
  629. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: RHSTS
  630. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: AI,BI,CI
  631. REAL, DIMENSION(1:NSOIL) :: RHSTSin
  632. REAL, DIMENSION(1:NSOIL) :: CIin
  633. REAL :: DT
  634. INTEGER :: K
  635. ! ----------------------------------------------------------------------
  636. ! CREATE FINITE DIFFERENCE VALUES FOR USE IN ROSR12 ROUTINE
  637. ! ----------------------------------------------------------------------
  638. DO K = 1,NSOIL
  639. RHSTS (K) = RHSTS (K) * DT
  640. AI (K) = AI (K) * DT
  641. BI (K) = 1. + BI (K) * DT
  642. CI (K) = CI (K) * DT
  643. END DO
  644. ! ----------------------------------------------------------------------
  645. ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
  646. ! ----------------------------------------------------------------------
  647. DO K = 1,NSOIL
  648. RHSTSin (K) = RHSTS (K)
  649. END DO
  650. DO K = 1,NSOIL
  651. CIin (K) = CI (K)
  652. END DO
  653. ! ----------------------------------------------------------------------
  654. ! SOLVE THE TRI-DIAGONAL MATRIX EQUATION
  655. ! ----------------------------------------------------------------------
  656. CALL ROSR12 (CI,AI,BI,CIin,RHSTSin,RHSTS,NSOIL)
  657. ! ----------------------------------------------------------------------
  658. ! CALC/UPDATE THE SOIL TEMPS USING MATRIX SOLUTION
  659. ! ----------------------------------------------------------------------
  660. DO K = 1,NSOIL
  661. STCOUT (K) = STCIN (K) + CI (K)
  662. END DO
  663. ! ----------------------------------------------------------------------
  664. END SUBROUTINE HSTEP
  665. ! ----------------------------------------------------------------------
  666. SUBROUTINE PENMAN (SFCTMP,SFCPRS,CH,TH2,PRCP,FDOWN,T24,SSOIL, &
  667. & Q2,Q2SAT,ETP,RCH,RR,SNOWNG,FRZGRA, &
  668. & DQSDT2,FLX2,EMISSI,T1)
  669. ! ----------------------------------------------------------------------
  670. ! CALCULATE POTENTIAL EVAPORATION FOR THE CURRENT POINT. VARIOUS
  671. ! PARTIAL SUMS/PRODUCTS ARE ALSO CALCULATED AND PASSED BACK TO THE
  672. ! CALLING ROUTINE FOR LATER USE.
  673. ! ----------------------------------------------------------------------
  674. IMPLICIT NONE
  675. LOGICAL, INTENT(IN) :: SNOWNG, FRZGRA
  676. REAL, INTENT(IN) :: CH, DQSDT2,FDOWN,PRCP,Q2,Q2SAT,SSOIL,SFCPRS, &
  677. & SFCTMP,TH2,EMISSI,T1,RCH,T24
  678. REAL, INTENT(OUT) :: ETP,FLX2,RR
  679. REAL :: A, DELTA, FNET,RAD,ELCP1,LVS,EPSCA
  680. REAL, PARAMETER :: ELCP = 2.4888E+3, LSUBC = 2.501000E+6
  681. REAL, PARAMETER :: LSUBS = 2.83E+6
  682. ! ----------------------------------------------------------------------
  683. ! PREPARE PARTIAL QUANTITIES FOR PENMAN EQUATION.
  684. ! ----------------------------------------------------------------------
  685. IF ( T1 > 273.15 ) THEN
  686. ELCP1 = ELCP
  687. LVS = LSUBC
  688. ELSE
  689. ELCP1 = ELCP*LSUBS/LSUBC
  690. LVS = LSUBS
  691. ENDIF
  692. DELTA = ELCP1 * DQSDT2
  693. A = ELCP1 * (Q2SAT - Q2)
  694. RR = EMISSI*T24 * 6.48E-8 / (SFCPRS * CH) + 1.0
  695. ! ----------------------------------------------------------------------
  696. ! ADJUST THE PARTIAL SUMS / PRODUCTS WITH THE LATENT HEAT
  697. ! EFFECTS CAUSED BY FALLING PRECIPITATION.
  698. ! ----------------------------------------------------------------------
  699. IF (.NOT. SNOWNG) THEN
  700. IF (PRCP > 0.0) RR = RR + CPH2O * PRCP / RCH
  701. ELSE
  702. RR = RR + CPICE * PRCP / RCH
  703. END IF
  704. ! ----------------------------------------------------------------------
  705. ! INCLUDE THE LATENT HEAT EFFECTS OF FREEZING RAIN CONVERTING TO ICE ON
  706. ! IMPACT IN THE CALCULATION OF FLX2 AND FNET.
  707. ! ----------------------------------------------------------------------
  708. IF (FRZGRA) THEN
  709. FLX2 = - LSUBF * PRCP
  710. ELSE
  711. FLX2 = 0.0
  712. ENDIF
  713. FNET = FDOWN - ( EMISSI * SIGMA * T24 ) - SSOIL - FLX2
  714. ! ----------------------------------------------------------------------
  715. ! FINISH PENMAN EQUATION CALCULATIONS.
  716. ! ----------------------------------------------------------------------
  717. RAD = FNET / RCH + TH2 - SFCTMP
  718. EPSCA = (A * RR + RAD * DELTA) / (DELTA + RR)
  719. ETP = EPSCA * RCH / LVS
  720. ! ----------------------------------------------------------------------
  721. END SUBROUTINE PENMAN
  722. ! ----------------------------------------------------------------------
  723. SUBROUTINE SHFLX (STC,NSOIL,DT,YY,ZZ1,ZSOIL,TBOT,DF1)
  724. ! ----------------------------------------------------------------------
  725. ! UPDATE THE TEMPERATURE STATE OF THE SOIL COLUMN BASED ON THE THERMAL
  726. ! DIFFUSION EQUATION AND UPDATE THE FROZEN SOIL MOISTURE CONTENT BASED
  727. ! ON THE TEMPERATURE.
  728. ! ----------------------------------------------------------------------
  729. IMPLICIT NONE
  730. INTEGER, INTENT(IN) :: NSOIL
  731. REAL, INTENT(IN) :: DF1,DT,TBOT,YY, ZZ1
  732. REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ZSOIL
  733. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: STC
  734. REAL, DIMENSION(1:NSOIL) :: AI, BI, CI, STCF,RHSTS
  735. INTEGER :: I
  736. REAL, PARAMETER :: T0 = 273.15
  737. ! ----------------------------------------------------------------------
  738. ! HRT ROUTINE CALCS THE RIGHT HAND SIDE OF THE SOIL TEMP DIF EQN
  739. ! ----------------------------------------------------------------------
  740. CALL HRTICE (RHSTS,STC,TBOT, NSOIL,ZSOIL,YY,ZZ1,DF1,AI,BI,CI)
  741. CALL HSTEP (STCF,STC,RHSTS,DT,NSOIL,AI,BI,CI)
  742. DO I = 1,NSOIL
  743. STC (I) = STCF (I)
  744. END DO
  745. ! ----------------------------------------------------------------------
  746. END SUBROUTINE SHFLX
  747. ! ----------------------------------------------------------------------
  748. SUBROUTINE SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,NSOIL,DT,DF1, &
  749. & Q2,T1,SFCTMP,T24,TH2,FDOWN,SSOIL,STC, &
  750. & SFCPRS,RCH,RR,SNEQV,SNDENS,SNOWH,ZSOIL,TBOT, &
  751. & SNOMLT,DEW,FLX1,FLX2,FLX3,ESNOW,EMISSI,RIBB)
  752. ! ----------------------------------------------------------------------
  753. ! CALCULATE SOIL MOISTURE AND HEAT FLUX VALUES & UPDATE SOIL MOISTURE
  754. ! CONTENT AND SOIL HEAT CONTENT VALUES FOR THE CASE WHEN A SNOW PACK IS
  755. ! PRESENT.
  756. ! ----------------------------------------------------------------------
  757. IMPLICIT NONE
  758. INTEGER, INTENT(IN) :: NSOIL
  759. LOGICAL, INTENT(IN) :: SNOWNG
  760. REAL, INTENT(IN) :: DF1,DT,FDOWN,PRCP,Q2,RCH,RR,SFCPRS,SFCTMP, &
  761. & T24,TBOT,TH2,EMISSI
  762. REAL, INTENT(INOUT) :: SNEQV,FLX2,PRCPF,SNOWH,SNDENS,T1,RIBB,ETP
  763. REAL, INTENT(OUT) :: DEW,ESNOW,FLX1,FLX3,SSOIL,SNOMLT
  764. REAL, DIMENSION(1:NSOIL),INTENT(IN) :: ZSOIL
  765. REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: STC
  766. REAL, DIMENSION(1:NSOIL) :: ET1
  767. INTEGER :: K
  768. REAL :: DENOM,DSOIL,DTOT,ESDFLX,ETA, &
  769. & ESNOW1,ESNOW2,ETA1,ETP1,ETP2, &
  770. & ETP3,ETANRG,EX, &
  771. & FRCSNO,FRCSOI,PRCP1,QSAT,RSNOW,SEH, &
  772. & SNCOND,T12,T12A,T12B,T14,YY,ZZ1
  773. REAL, PARAMETER :: ESDMIN = 1.E-6, LSUBC = 2.501000E+6, &
  774. & LSUBS = 2.83E+6, TFREEZ = 273.15, &
  775. & SNOEXP = 2.0
  776. ! ----------------------------------------------------------------------
  777. ! FOR GLACIAL-ICE, SNOWCOVER FRACTION = 1.0, AND SUBLIMATION IS AT THE
  778. ! POTENTIAL RATE.
  779. ! ----------------------------------------------------------------------
  780. ! INITIALIZE EVAP TERMS.
  781. ! ----------------------------------------------------------------------
  782. ! conversions:
  783. ! ESNOW [KG M-2 S-1]
  784. ! ESDFLX [KG M-2 S-1] .le. ESNOW
  785. ! ESNOW1 [M S-1]
  786. ! ESNOW2 [M]
  787. ! ETP [KG M-2 S-1]
  788. ! ETP1 [M S-1]
  789. ! ETP2 [M]
  790. ! ----------------------------------------------------------------------
  791. SNOMLT = 0.0
  792. DEW = 0.
  793. ESNOW = 0.
  794. ESNOW1 = 0.
  795. ESNOW2 = 0.
  796. ! ----------------------------------------------------------------------
  797. ! CONVERT POTENTIAL EVAP (ETP) FROM KG M-2 S-1 TO ETP1 IN M S-1
  798. ! ----------------------------------------------------------------------
  799. PRCP1 = PRCPF *0.001
  800. ! ----------------------------------------------------------------------
  801. ! IF ETP<0 (DOWNWARD) THEN DEWFALL (=FROSTFALL IN THIS CASE).
  802. ! ----------------------------------------------------------------------
  803. IF (ETP <= 0.0) THEN
  804. IF ( ( RIBB >= 0.1 ) .AND. ( FDOWN > 150.0 ) ) THEN
  805. ETP=(MIN(ETP*(1.0-RIBB),0.)/0.980 + ETP*(0.980-1.0))/0.980
  806. ENDIF
  807. ETP1 = ETP * 0.001
  808. DEW = -ETP1
  809. ESNOW2 = ETP1*DT
  810. ETANRG = ETP*LSUBS
  811. ELSE
  812. ETP1 = ETP * 0.001
  813. ESNOW = ETP
  814. ESNOW1 = ESNOW*0.001
  815. ESNOW2 = ESNOW1*DT
  816. ETANRG = ESNOW*LSUBS
  817. END IF
  818. ! ----------------------------------------------------------------------
  819. ! IF PRECIP IS FALLING, CALCULATE HEAT FLUX FROM SNOW SFC TO NEWLY
  820. ! ACCUMULATING PRECIP. NOTE THAT THIS REFLECTS THE FLUX APPROPRIATE FOR
  821. ! THE NOT-YET-UPDATED SKIN TEMPERATURE (T1). ASSUMES TEMPERATURE OF THE
  822. ! SNOWFALL STRIKING THE GROUND IS =SFCTMP (LOWEST MODEL LEVEL AIR TEMP).
  823. ! ----------------------------------------------------------------------
  824. FLX1 = 0.0
  825. IF (SNOWNG) THEN
  826. FLX1 = CPICE * PRCP * (T1- SFCTMP)
  827. ELSE
  828. IF (PRCP > 0.0) FLX1 = CPH2O * PRCP * (T1- SFCTMP)
  829. END IF
  830. ! ----------------------------------------------------------------------
  831. ! CALCULATE AN 'EFFECTIVE SNOW-GRND SFC TEMP' (T12) BASED ON HEAT FLUXES
  832. ! BETWEEN THE SNOW PACK AND THE SOIL AND ON NET RADIATION.
  833. ! INCLUDE FLX1 (PRECIP-SNOW SFC) AND FLX2 (FREEZING RAIN LATENT HEAT)
  834. ! FLUXES. FLX1 FROM ABOVE, FLX2 BROUGHT IN VIA COMMOM BLOCK RITE.
  835. ! FLX2 REFLECTS FREEZING RAIN LATENT HEAT FLUX USING T1 CALCULATED IN
  836. ! PENMAN.
  837. ! ----------------------------------------------------------------------
  838. DSOIL = - (0.5 * ZSOIL (1))
  839. DTOT = SNOWH + DSOIL
  840. DENOM = 1.0+ DF1 / (DTOT * RR * RCH)
  841. T12A = ( (FDOWN - FLX1- FLX2- EMISSI * SIGMA * T24)/ RCH &
  842. + TH2- SFCTMP - ETANRG / RCH ) / RR
  843. T12B = DF1 * STC (1) / (DTOT * RR * RCH)
  844. T12 = (SFCTMP + T12A + T12B) / DENOM
  845. IF (T12 <= TFREEZ) THEN
  846. ! ----------------------------------------------------------------------
  847. ! SUB-FREEZING BLOCK
  848. ! ----------------------------------------------------------------------
  849. ! ----------------------------------------------------------------------
  850. ! IF THE 'EFFECTIVE SNOW-GRND SFC TEMP' IS AT OR BELOW FREEZING, NO SNOW
  851. ! MELT WILL OCCUR. SET THE SKIN TEMP TO THIS EFFECTIVE TEMP. REDUCE
  852. ! (BY SUBLIMINATION ) OR INCREASE (BY FROST) THE DEPTH OF THE SNOWPACK,
  853. ! DEPENDING ON SIGN OF ETP.
  854. ! UPDATE SOIL HEAT FLUX (SSOIL) USING NEW SKIN TEMPERATURE (T1)
  855. ! SINCE NO SNOWMELT, SET ACCUMULATED SNOWMELT TO ZERO, SET 'EFFECTIVE'
  856. ! PRECIP FROM SNOWMELT TO ZERO, SET PHASE-CHANGE HEAT FLUX FROM SNOWMELT
  857. ! TO ZERO.
  858. ! ----------------------------------------------------------------------
  859. T1 = T12
  860. SSOIL = DF1 * (T1- STC (1)) / DTOT
  861. SNEQV = MAX(0.0, SNEQV-ESNOW2)
  862. FLX3 = 0.0
  863. EX = 0.0
  864. SNOMLT = 0.0
  865. ELSE
  866. ! ----------------------------------------------------------------------
  867. ! ABOVE FREEZING BLOCK
  868. ! ----------------------------------------------------------------------
  869. ! IF THE 'EFFECTIVE SNOW-GRND SFC TEMP' IS ABOVE FREEZING, SNOW MELT
  870. ! WILL OCCUR. CALL THE SNOW MELT RATE,EX AND AMT, SNOMLT. REVISE THE
  871. ! EFFECTIVE SNOW DEPTH. REVISE THE SKIN TEMP BECAUSE IT WOULD HAVE CHGD
  872. ! DUE TO THE LATENT HEAT RELEASED BY THE MELTING. CALC THE LATENT HEAT
  873. ! RELEASED, FLX3. SET THE EFFECTIVE PRECIP, PRCP1 TO THE SNOW MELT RATE,
  874. ! EX FOR USE IN SMFLX. ADJUSTMENT TO T1 TO ACCOUNT FOR SNOW PATCHES.
  875. ! CALCULATE QSAT VALID AT FREEZING POINT. NOTE THAT ESAT (SATURATION
  876. ! VAPOR PRESSURE) VALUE OF 6.11E+2 USED HERE IS THAT VALID AT FRZZING
  877. ! POINT. NOTE THAT ETP FROM CALL PENMAN IN SFLX IS IGNORED HERE IN
  878. ! FAVOR OF BULK ETP OVER 'OPEN WATER' AT FREEZING TEMP.
  879. ! UPDATE SOIL HEAT FLUX (S) USING NEW SKIN TEMPERATURE (T1)
  880. ! ----------------------------------------------------------------------
  881. T1 = TFREEZ
  882. IF ( DTOT .GT. 2.0*DSOIL ) THEN
  883. DTOT = 2.0*DSOIL
  884. ENDIF
  885. SSOIL = DF1 * (T1- STC (1)) / DTOT
  886. IF (SNEQV-ESNOW2 <= ESDMIN) THEN
  887. SNEQV = 0.0
  888. EX = 0.0
  889. SNOMLT = 0.0
  890. FLX3 = 0.0
  891. ! ----------------------------------------------------------------------
  892. ! SUBLIMATION LESS THAN DEPTH OF SNOWPACK
  893. ! SNOWPACK (SNEQV) REDUCED BY ESNOW2 (DEPTH OF SUBLIMATED SNOW)
  894. ! ----------------------------------------------------------------------
  895. ELSE
  896. SNEQV = SNEQV-ESNOW2
  897. ETP3 = ETP * LSUBC
  898. SEH = RCH * (T1- TH2)
  899. T14 = ( T1 * T1 ) * ( T1 * T1 )
  900. FLX3 = FDOWN - FLX1- FLX2- EMISSI*SIGMA * T14- SSOIL - SEH - ETANRG
  901. IF (FLX3 <= 0.0) FLX3 = 0.0
  902. EX = FLX3*0.001/ LSUBF
  903. SNOMLT = EX * DT
  904. ! ----------------------------------------------------------------------
  905. ! ESDMIN REPRESENTS A SNOWPACK DEPTH THRESHOLD VALUE BELOW WHICH WE
  906. ! CHOOSE NOT TO RETAIN ANY SNOWPACK, AND INSTEAD INCLUDE IT IN SNOWMELT.
  907. ! ----------------------------------------------------------------------
  908. IF (SNEQV- SNOMLT >= ESDMIN) THEN
  909. SNEQV = SNEQV- SNOMLT
  910. ELSE
  911. ! ----------------------------------------------------------------------
  912. ! SNOWMELT EXCEEDS SNOW DEPTH
  913. ! ----------------------------------------------------------------------
  914. EX = SNEQV / DT
  915. FLX3 = EX *1000.0* LSUBF
  916. SNOMLT = SNEQV
  917. SNEQV = 0.0
  918. ENDIF
  919. ENDIF
  920. ! ----------------------------------------------------------------------
  921. ! FOR GLACIAL ICE, THE SNOWMELT WILL BE ADDED TO SUBSURFACE
  922. ! RUNOFF/BASEFLOW LATER NEAR THE END OF SFLX (AFTER RETURN FROM CALL TO
  923. ! SUBROUTINE SNOPAC)
  924. ! ----------------------------------------------------------------------
  925. ENDIF
  926. ! ----------------------------------------------------------------------
  927. ! BEFORE CALL SHFLX IN THIS SNOWPACK CASE, SET ZZ1 AND YY ARGUMENTS TO
  928. ! SPECIAL VALUES THAT ENSURE THAT GROUND HEAT FLUX CALCULATED IN SHFLX
  929. ! MATCHES THAT ALREADY COMPUTED FOR BELOW THE SNOWPACK, THUS THE SFC
  930. ! HEAT FLUX TO BE COMPUTED IN SHFLX WILL EFFECTIVELY BE THE FLUX AT THE
  931. ! SNOW TOP SURFACE.
  932. ! ----------------------------------------------------------------------
  933. ZZ1 = 1.0
  934. YY = STC (1) -0.5* SSOIL * ZSOIL (1)* ZZ1/ DF1
  935. ! ----------------------------------------------------------------------
  936. ! SHFLX WILL CALC/UPDATE THE SOIL TEMPS.
  937. ! ----------------------------------------------------------------------
  938. CALL SHFLX (STC,NSOIL,DT,YY,ZZ1,ZSOIL,TBOT,DF1)
  939. ! ----------------------------------------------------------------------
  940. ! SNOW DEPTH AND DENSITY ADJUSTMENT BASED ON SNOW COMPACTION. YY IS
  941. ! ASSUMED TO BE THE SOIL TEMPERTURE AT THE TOP OF THE SOIL COLUMN.
  942. ! ----------------------------------------------------------------------
  943. IF (SNEQV .GE. 0.10) THEN
  944. CALL SNOWPACK (SNEQV,DT,SNOWH,SNDENS,T1,YY)
  945. ELSE
  946. SNEQV = 0.10
  947. SNOWH = 0.50
  948. !KWM???? SNDENS =
  949. !KWM???? SNCOND =
  950. ENDIF
  951. ! ----------------------------------------------------------------------
  952. END SUBROUTINE SNOPAC
  953. ! ----------------------------------------------------------------------
  954. SUBROUTINE SNOWPACK (SNEQV,DTSEC,SNOWH,SNDENS,TSNOW,TSOIL)
  955. ! ----------------------------------------------------------------------
  956. ! CALCULATE COMPACTION OF SNOWPACK UNDER CONDITIONS OF INCREASING SNOW
  957. ! DENSITY, AS OBTAINED FROM AN APPROXIMATE SOLUTION OF E. ANDERSON'S
  958. ! DIFFERENTIAL EQUATION (3.29), NOAA TECHNICAL REPORT NWS 19, BY VICTOR
  959. ! KOREN, 03/25/95.
  960. ! ----------------------------------------------------------------------
  961. ! SNEQV WATER EQUIVALENT OF SNOW (M)
  962. ! DTSEC TIME STEP (SEC)
  963. ! SNOWH SNOW DEPTH (M)
  964. ! SNDENS SNOW DENSITY (G/CM3=DIMENSIONLESS FRACTION OF H2O DENSITY)
  965. ! TSNOW SNOW SURFACE TEMPERATURE (K)
  966. ! TSOIL SOIL SURFACE TEMPERATURE (K)
  967. ! SUBROUTINE WILL RETURN NEW VALUES OF SNOWH AND SNDENS
  968. ! ----------------------------------------------------------------------
  969. IMPLICIT NONE
  970. INTEGER :: IPOL, J
  971. REAL, INTENT(IN) :: SNEQV, DTSEC,TSNOW,TSOIL
  972. REAL, INTENT(INOUT) :: SNOWH, SNDENS
  973. REAL :: BFAC,DSX,DTHR,DW,SNOWHC,PEXP, &
  974. TAVGC,TSNOWC,TSOILC,ESDC,ESDCX
  975. REAL, PARAMETER :: C1 = 0.01, C2 = 21.0, G = 9.81, &
  976. KN = 4000.0
  977. ! ----------------------------------------------------------------------
  978. ! CONVERSION INTO SIMULATION UNITS
  979. ! ----------------------------------------------------------------------
  980. SNOWHC = SNOWH *100.
  981. ESDC = SNEQV *100.
  982. DTHR = DTSEC /3600.
  983. TSNOWC = TSNOW -273.15
  984. TSOILC = TSOIL -273.15
  985. ! ----------------------------------------------------------------------
  986. ! CALCULATING OF AVERAGE TEMPERATURE OF SNOW PACK
  987. ! ----------------------------------------------------------------------
  988. ! ----------------------------------------------------------------------
  989. ! CALCULATING OF SNOW DEPTH AND DENSITY AS A RESULT OF COMPACTION
  990. ! SNDENS=DS0*(EXP(BFAC*SNEQV)-1.)/(BFAC*SNEQV)
  991. ! BFAC=DTHR*C1*EXP(0.08*TAVGC-C2*DS0)
  992. ! NOTE: BFAC*SNEQV IN SNDENS EQN ABOVE HAS TO BE CAREFULLY TREATED
  993. ! NUMERICALLY BELOW:
  994. ! C1 IS THE FRACTIONAL INCREASE IN DENSITY (1/(CM*HR))
  995. ! C2 IS A CONSTANT (CM3/G) KOJIMA ESTIMATED AS 21 CMS/G
  996. ! ----------------------------------------------------------------------
  997. TAVGC = 0.5* (TSNOWC + TSOILC)
  998. IF (ESDC > 1.E-2) THEN
  999. ESDCX = ESDC
  1000. ELSE
  1001. ESDCX = 1.E-2
  1002. END IF
  1003. ! DSX = SNDENS*((DEXP(BFAC*ESDC)-1.)/(BFAC*ESDC))
  1004. ! ----------------------------------------------------------------------
  1005. ! THE FUNCTION OF THE FORM (e**x-1)/x IMBEDDED IN ABOVE EXPRESSION
  1006. ! FOR DSX WAS CAUSING NUMERICAL DIFFICULTIES WHEN THE DENOMINATOR "x"
  1007. ! (I.E. BFAC*ESDC) BECAME ZERO OR APPROACHED ZERO (DESPITE THE FACT THAT
  1008. ! THE ANALYTICAL FUNCTION (e**x-1)/x HAS A WELL DEFINED LIMIT AS
  1009. ! "x" APPROACHES ZERO), HENCE BELOW WE REPLACE THE (e**x-1)/x
  1010. ! EXPRESSION WIT

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