PageRenderTime 54ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/wrfv2_fire/phys/module_sf_noah_seaice.F

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

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