241 REAL(KIND(1D0)),
PARAMETER :: waterDens = 999.8395
243 REAL(KIND(1D0)),
INTENT(in) :: lvS_J_kg
244 REAL(KIND(1D0)),
INTENT(in) :: lv_J_kg
245 REAL(KIND(1D0)),
INTENT(in) :: tstep_real
246 REAL(KIND(1D0)),
INTENT(in) :: RadMeltFact
247 REAL(KIND(1D0)),
INTENT(in) :: TempMeltFact
248 REAL(KIND(1D0)),
INTENT(in) :: SnowAlbMax
249 REAL(KIND(1D0)),
INTENT(in) :: SnowDensMin
250 REAL(KIND(1D0)),
INTENT(in) :: Temp_C
251 REAL(KIND(1D0)),
INTENT(in) :: Precip
252 REAL(KIND(1D0)),
INTENT(in) :: PrecipLimit
253 REAL(KIND(1D0)),
INTENT(in) :: PrecipLimitAlb
254 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
256 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
257 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: Tsurf_ind
258 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: state_id
259 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: qn1_ind_snow
260 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SnowWater
261 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: deltaQi
264 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: SnowPack
265 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: SnowFrac
266 REAL(KIND(1D0)),
INTENT(inout) :: SnowAlb
267 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: SnowDens
268 REAL(KIND(1D0)),
INTENT(inout) :: SnowfallCum
271 REAL(KIND(1D0)),
INTENT(out) :: mwh
272 REAL(KIND(1D0)),
INTENT(out) :: fwh
273 REAL(KIND(1D0)),
INTENT(out) :: Qm
274 REAL(KIND(1D0)),
INTENT(out) :: QmFreez
275 REAL(KIND(1D0)),
INTENT(out) :: QmRain
278 INTEGER,
DIMENSION(nsurf),
INTENT(out) :: snowCalcSwitch
280 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: Qm_melt
281 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: Qm_freezState
282 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: Qm_rain
283 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: FreezMelt
284 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: FreezState
285 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: FreezStateVol
286 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: rainOnSnow
287 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: SnowDepth
288 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: mw_ind
291 REAL(KIND(1D0)) :: AdjMeltFact
292 REAL(KIND(1D0)) :: Watfreeze
294 REAL(KIND(1D0)),
PARAMETER :: cw = 4190
322 IF (sfr_surf(is) /= 0)
THEN
324 IF (snowpack(is) > 0)
THEN
326 snowdepth(is) = (snowpack(is)/1000)*waterdens/snowdens(is)
331 IF (temp_c >= 0)
THEN
332 IF (qn1_ind_snow(is) < 0)
THEN
333 mw_ind(is) = tempmeltfact*temp_c
335 mw_ind(is) = radmeltfact*(qn1_ind_snow(is))
340 mw_ind(is) = tempmeltfact*temp_c*adjmeltfact
343 mw_ind(is) = mw_ind(is)/nsh_real
345 IF (mw_ind(is) > snowpack(is)) mw_ind(is) = snowpack(is)
350 qm_melt(is) = waterdens*((mw_ind(is)/tstep_real)/1000)*(lvs_j_kg - lv_j_kg)
353 IF (mw_ind(is) < 0)
THEN
355 freezmelt(is) = -mw_ind(is)
359 IF (freezmelt(is) > snowwater(is)) freezmelt(is) = snowwater(is)
362 qm_melt(is) = waterdens*((-freezmelt(is)/tstep_real)/1000)*(lvs_j_kg - lv_j_kg)
369 IF (temp_c >= preciplimit .AND. precip > 0)
THEN
370 qm_rain(is) = waterdens*cw*(temp_c - preciplimit)*(precip*0.001/tstep_real)
371 IF (qm_rain(is) < 0)
THEN
374 rainonsnow(is) = precip
383 IF (tsurf_ind(is) < 0 .AND. state_id(is) > 0)
THEN
385 snowcalcswitch(is) = 1
393 freezstate(is) = -tempmeltfact*tsurf_ind(is)/nsh_real
396 IF (freezstate(is) > state_id(is)) freezstate(is) = state_id(is)
398 IF (snowpack(is) == 0 .OR. snowfrac(is) == 0)
THEN
399 freezstatevol(is) = freezstate(is)
401 freezstatevol(is) = freezstate(is)*(1 - snowfrac(is))/snowfrac(is)
406 IF (freezstatevol(is) < 0.00000000001 .AND. freezstate(is) < state_id(is))
THEN
408 freezstatevol(is) = 0
412 qm_freezstate(is) = -waterdens*(freezstate(is)/tstep_real/1000)*(lvs_j_kg - lv_j_kg)
421 watfreeze = 100*(0 - temp_c)/(waterdens*(lvs_j_kg - lv_j_kg))
422 freezstate(is) = watfreeze
423 qm_freezstate(is) = -waterdens*(watfreeze/tstep_real/1000)*(lvs_j_kg - lv_j_kg)
432 IF (snowpack(is) > 0 .OR. (precip > 0 .AND. tsurf_ind(is) < 0))
THEN
433 snowcalcswitch(is) = 1
442 IF (precip > 0 .AND. tsurf_ind(is) < 0 .AND. snowpack(is) > 0)
THEN
443 snowdens(is) = snowdens(is)*snowpack(is)/(snowpack(is) + precip) + snowdensmin*precip/(snowpack(is) + precip)
447 mwh = mwh + mw_ind(is)*sfr_surf(is)*snowfrac(is)
448 fwh = fwh + freezmelt(is)*sfr_surf(is)*snowfrac(is)
449 qm = qm + qm_melt(is)*sfr_surf(is)*snowfrac(is)
450 qmrain = qmrain + qm_rain(is)*sfr_surf(is)*snowfrac(is)
451 qmfreez = qmfreez + deltaqi(is)*sfr_surf(is)*snowfrac(is) + qm_freezstate(is)*sfr_surf(is)*(1 - snowfrac(is))
457 IF (precip > 0 .AND. sum(snowpack) > 0 .AND. temp_c < 0)
THEN
459 snowfallcum = snowfallcum + precip
461 IF (snowfallcum > preciplimitalb)
THEN
476 tstep, imin, it, dectime, is, & !input
477 snowCalcSwitch, & !input
478 EvapMethod, CRWmin, CRWmax, nsh_real, lvS_J_kg, avdens, &
479 avRh, Press_hPa, Temp_C, RAsnow, psyc_hPa, avcp, sIce_hPa, &
480 PervFraction, vegfraction, addimpervious, &
481 vpd_hPa, qn_e, s_hPa, ResistSurf, RA, rb, tlv, snowdensmin, SnowProf_24hr, precip, &
482 PipeCapacity, RunoffToWater, &
483 addVeg, SnowLimPaved, SnowLimBldg, FlowChange, drain, &
484 WetThresh, stateOld, mw_ind, SoilStoreCap, rainonsnow, &
485 freezmelt, freezstate, freezstatevol, &
486 Qm_Melt, Qm_rain, Tsurf_ind, sfr_surf, dayofWeek_id, StoreDrainPrm, SnowPackLimit, &
487 AddWater, addwaterrunoff, &
488 soilstore_id, SnowPack, SurplusEvap, & !inout
489 SnowFrac, SnowWater, iceFrac, SnowDens, &
490 runoffAGimpervious, runoffAGveg, surplusWaterBody, &
491 ev_tot, qe_tot, runoff_tot, surf_chang_tot, chSnow_tot, & ! output
493 runoff_snowfree, chang, changSnow, SnowToSurf, state_id, ev_snow, &
495 runoffPipes, mwstore, runoffwaterbody)
517 INTEGER,
PARAMETER :: snowfractionchoice = 2
518 REAL(KIND(1D0)),
PARAMETER :: waterDens = 999.8395
522 INTEGER,
INTENT(in) :: tstep
523 INTEGER,
INTENT(in) :: imin
524 INTEGER,
INTENT(in) :: it
525 INTEGER,
INTENT(in) :: is
527 INTEGER,
DIMENSION(nsurf),
INTENT(in) :: snowCalcSwitch
534 INTEGER,
INTENT(in) :: EvapMethod
535 INTEGER,
DIMENSION(3),
INTENT(in) :: DayofWeek_id
537 REAL(KIND(1D0)),
INTENT(in) :: dectime
538 REAL(KIND(1D0)),
INTENT(in) :: CRWmin
539 REAL(KIND(1D0)),
INTENT(in) :: CRWmax
540 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
541 REAL(KIND(1D0)),
INTENT(in) :: lvS_J_kg
543 REAL(KIND(1D0)),
INTENT(in) :: avdens
544 REAL(KIND(1D0)),
INTENT(in) :: vpd_hPa
545 REAL(KIND(1D0)),
INTENT(in) :: qn_e
546 REAL(KIND(1D0)),
INTENT(in) :: avRh
547 REAL(KIND(1D0)),
INTENT(in) :: Press_hPa
548 REAL(KIND(1D0)),
INTENT(in) :: Temp_C
549 REAL(KIND(1D0)),
INTENT(in) :: RAsnow
550 REAL(KIND(1D0)),
INTENT(in) :: psyc_hPa
551 REAL(KIND(1D0)),
INTENT(in) :: avcp
552 REAL(KIND(1D0)),
INTENT(in) :: sIce_hPa
553 REAL(KIND(1D0)),
INTENT(in) :: PervFraction
554 REAL(KIND(1D0)),
INTENT(in) :: vegfraction
555 REAL(KIND(1D0)),
INTENT(in) :: addimpervious
557 REAL(KIND(1D0)),
INTENT(in) :: s_hPa
558 REAL(KIND(1D0)),
INTENT(in) :: ResistSurf
560 REAL(KIND(1D0)),
INTENT(in) :: RA
561 REAL(KIND(1D0)),
INTENT(in) :: rb
562 REAL(KIND(1D0)),
INTENT(in) :: tlv
563 REAL(KIND(1D0)),
INTENT(in) :: snowdensmin
564 REAL(KIND(1D0)),
INTENT(in) :: precip
565 REAL(KIND(1D0)),
INTENT(in) :: PipeCapacity
566 REAL(KIND(1D0)),
INTENT(in) :: RunoffToWater
567 REAL(KIND(1D0)),
INTENT(in) :: addVeg
568 REAL(KIND(1D0)),
INTENT(in) :: SnowLimPaved
569 REAL(KIND(1D0)),
INTENT(in) :: SnowLimBldg
570 REAL(KIND(1D0)),
INTENT(in) :: FlowChange
572 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: drain
573 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: WetThresh
574 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: stateOld
575 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: mw_ind
576 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SoilStoreCap
577 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: rainonsnow
578 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: freezmelt
579 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: freezstate
580 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: freezstatevol
581 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: Qm_Melt
582 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: Qm_rain
583 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: Tsurf_ind
584 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
585 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SnowPackLimit
586 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: AddWater
587 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: addwaterrunoff
588 REAL(KIND(1D0)),
DIMENSION(6, nsurf),
INTENT(in) :: StoreDrainPrm
589 REAL(KIND(1D0)),
DIMENSION(0:23, 2),
INTENT(in) :: SnowProf_24hr
592 REAL(KIND(1D0)),
INTENT(inout) :: runoffAGveg
593 REAL(KIND(1D0)),
INTENT(inout) :: runoffAGimpervious
594 REAL(KIND(1D0)),
INTENT(inout) :: surplusWaterBody
596 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: soilstore_id
597 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: SnowPack
598 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: SnowFrac
599 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: SnowWater
600 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: iceFrac
601 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: SnowDens
602 REAL(KIND(1D0)),
DIMENSION(2),
INTENT(inout) :: SurplusEvap
604 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: rss_surf
605 REAL(KIND(1D0)),
DIMENSION(nsurf) :: runoffSnow_surf
606 REAL(KIND(1D0)),
DIMENSION(nsurf) :: runoff_snowfree
608 REAL(KIND(1D0)),
DIMENSION(nsurf) :: chang
609 REAL(KIND(1D0)),
DIMENSION(nsurf) :: changSnow
610 REAL(KIND(1D0)),
DIMENSION(nsurf) :: SnowToSurf
611 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: state_id
612 REAL(KIND(1D0)),
DIMENSION(nsurf) :: SnowDepth
613 REAL(KIND(1D0)),
DIMENSION(nsurf) :: ev_snow
614 REAL(KIND(1D0)),
DIMENSION(2),
INTENT(out) :: SnowRemoval
616 REAL(KIND(1D0)),
INTENT(out) :: swe
617 REAL(KIND(1D0)) :: ev_snowfree
618 REAL(KIND(1D0)),
INTENT(out) :: ev_tot
619 REAL(KIND(1D0)),
INTENT(out) :: chSnow_tot
620 REAL(KIND(1D0)),
INTENT(out) :: qe_tot
621 REAL(KIND(1D0)),
INTENT(out) :: runoff_tot
622 REAL(KIND(1D0)),
INTENT(out) :: surf_chang_tot
623 REAL(KIND(1D0)),
INTENT(out) :: runoffPipes
624 REAL(KIND(1D0)),
INTENT(out) :: mwstore
625 REAL(KIND(1D0)),
INTENT(out) :: runoffwaterbody
627 REAL(KIND(1D0)) :: qe
630 REAL(KIND(1D0)) :: MeltExcess
631 REAL(KIND(1D0)) :: snowTotInit
632 REAL(KIND(1D0)) :: EvPart
633 REAL(KIND(1D0)) :: runoffTest
634 REAL(KIND(1D0)) :: snowFracFresh1
635 REAL(KIND(1D0)) :: snowFracFresh2
636 REAL(KIND(1D0)) :: snowFracOld
637 REAL(KIND(1D0)) :: WaterHoldCapFrac
638 REAL(KIND(1D0)) :: FWC
639 REAL(KIND(1D0)) :: tlv_sub
643 REAL(KIND(1D0)),
PARAMETER :: IPThreshold_mmhr = 10
645 REAL(KIND(1D0)),
DIMENSION(7) :: capStore
668 IF (dayofweek_id(1) == 1 .OR. dayofweek_id(1) == 7) iu = 2
671 runoffsnow_surf(is) = 0
672 runoff_snowfree(is) = 0
685 snowtotinit = snowpack(is) + snowwater(is)
688 IF (snowdens(is) >= 200)
THEN
689 waterholdcapfrac = crwmin
691 waterholdcapfrac = crwmin + (crwmax - crwmin)*(200 - snowdens(is))/200
697 capstore(is) = storedrainprm(6, is)
698 IF (snowfrac(is) < 1)
CALL cal_evap( &
699 evapmethod, state_id(is), wetthresh(is), capstore(is), &
700 vpd_hpa, avdens, avcp, qn_e, s_hpa, psyc_hpa, resistsurf, ra, rb, tlv, &
701 rss_surf(is), ev_snowfree, qe)
703 IF (snowfrac(is) > 0 .AND. snowcalcswitch(is) > 0)
THEN
704 CALL evap_suews_snow(qm_melt(is), qm_rain(is), lvs_j_kg, avdens, avrh, press_hpa, temp_c, rasnow, &
705 psyc_hpa, tstep, avcp, sice_hpa, dectime, ev_snow(is), tlv_sub)
711 IF (pervfraction /= 0)
THEN
727 IF (snowcalcswitch(is) > 0)
THEN
728 IF (snowpack(is) > 0 .AND. snowfrac(is) == 1)
THEN
730 ev_snow(is) = ev_snow(is) + evpart
733 changsnow(is) = (precip + freezmelt(is)) - (mw_ind(is) + ev_snow(is))
736 IF (rainonsnow(is) > 0)
THEN
737 changsnow(is) = changsnow(is) - precip
738 snowwater(is) = snowwater(is) + rainonsnow(is)
741 snowpack(is) = snowpack(is) + changsnow(is)
744 IF (snowpack(is) > 0)
THEN
747 snowwater(is) = snowwater(is) + mw_ind(is) - freezmelt(is)
750 fwc = waterholdcapfrac*snowpack(is)
753 IF (snowwater(is) >= fwc)
THEN
755 meltexcess = snowwater(is) - fwc
757 runoffsnow_surf(is) = runoffsnow_surf(is) + meltexcess
761 IF (snowprof_24hr(it, iu) == 1 .AND. is < 3 .AND. (imin == (nsh_real - 1)/nsh_real*60)) &
764 snowfrac, sfr_surf, &
765 snowpack, snowremoval, &
766 snowlimpaved, snowlimbldg)
768 ELSEIF (snowpack(is) < 0)
THEN
771 snowwater(is) = snowwater(is) - freezmelt(is) + mw_ind(is) + snowpack(is)
777 IF (snowwater(is) < 0)
THEN
778 ev_snow(is) = ev_snow(is) + snowwater(is)
779 IF (ev_snow(is) < 0) ev_snow(is) = 0
780 changsnow(is) = changsnow(is) + snowwater(is)
783 chang(is) = snowwater(is)
784 state_id(is) = state_id(is) + chang(is)
791 ELSEIF (snowfrac(is) < 1)
THEN
794 IF (snowpack(is) > 0)
THEN
795 ev_snow(is) = ev_snow(is) + evpart
799 changsnow(is) = (precip + freezmelt(is) + freezstatevol(is)) - (mw_ind(is) + ev_snow(is))
802 IF (rainonsnow(is) > 0)
THEN
803 changsnow(is) = changsnow(is) - precip
804 snowwater(is) = snowwater(is) + rainonsnow(is)
806 snowpack(is) = snowpack(is) + changsnow(is)
813 IF (precip > 0 .AND. freezstate(is) == state_id(is))
THEN
815 ELSEIF (precip == 0 .AND. freezstate(is) > 0 .AND. freezstate(is) == state_id(is))
THEN
820 ELSEIF (freezstate(is) > 0 .AND. freezstate(is) < state_id(is))
THEN
821 snowfracfresh1 = 0.95
832 ELSEIF (snowpack(is) == 0 .AND. tsurf_ind(is) < 0)
THEN
837 IF ((precip > 0 .AND. state_id(is) == 0) .OR. (precip == 0 .AND. freezstate(is) == state_id(is)) .OR. &
838 (precip > 0 .AND. freezstate(is) == state_id(is)))
THEN
841 changsnow(is) = precip + freezstatevol(is)
842 snowpack(is) = snowpack(is) + changsnow(is)
845 icefrac(is) = freezstate(is)/(freezstate(is) + precip)
846 snowdens(is) = snowdensmin
849 IF (freezstate(is) > 0 .AND. freezstate(is) < state_id(is))
THEN
851 changsnow(is) = precip + freezstatevol(is)
852 snowpack(is) = snowpack(is) + changsnow(is)
853 snowfracfresh2 = 0.95
858 snowdens(is) = snowdensmin
866 IF (snowpack(is) > 0)
THEN
869 snowwater(is) = snowwater(is) + mw_ind(is) - freezmelt(is)
872 fwc = waterholdcapfrac*snowpack(is)
875 IF (snowwater(is) >= fwc)
THEN
877 meltexcess = snowwater(is) - fwc
884 runoffsnow_surf(is) = runoffsnow_surf(is) + meltexcess
886 snowtosurf(is) = snowtosurf(is) + meltexcess*snowfrac(is)/(1 - snowfrac(is))
891 IF (snowprof_24hr(it, iu) == 1 .AND. is < 3 .AND. (imin == (nsh_real - 1)/nsh_real*60)) &
894 snowfrac, sfr_surf, &
895 snowpack, snowremoval, &
896 snowlimpaved, snowlimbldg)
899 ELSEIF (snowpack(is) < 0)
THEN
902 snowwater(is) = snowwater(is) - freezmelt(is) + mw_ind(is) + snowpack(is)
909 IF (snowwater(is) < 0)
THEN
910 ev_snow(is) = ev_snow(is) + snowwater(is)
911 IF (ev_snow(is) < 0) ev_snow(is) = 0
912 changsnow(is) = changsnow(is) + snowwater(is)
915 snowtosurf(is) = snowtosurf(is) + snowwater(is)*snowfrac(is)/(1 - snowfrac(is))
926 IF (precip > ipthreshold_mmhr/nsh_real)
THEN
928 runoff_snowfree(is) = runoff_snowfree(is) + (precip + snowtosurf(is) + addwater(is) - ipthreshold_mmhr/nsh_real)
929 chang(is) = ipthreshold_mmhr/nsh_real - (drain(is) + ev_snowfree + freezstate(is))
932 chang(is) = precip + snowtosurf(is) + addwater(is) - (drain(is) + ev_snowfree + freezstate(is))
935 state_id(is) = state_id(is) + chang(is)
939 IF (is ==
pavsurf .AND. sfr_surf(
pavsurf) > 0) state_id(is) = state_id(is) + (addimpervious)/sfr_surf(
pavsurf)
941 runoff_snowfree(is) = runoff_snowfree(is) + drain(is)*addwaterrunoff(is)
943 IF (state_id(is) < 0.0)
THEN
944 surplusevap(is) = abs(state_id(is))
945 ev_snowfree = ev_snowfree - surplusevap(is)
949 ELSEIF (is >= 3 .AND. snowfrac(is) < 1)
THEN
951 ev_snowfree = ev_snowfree + evpart
954 IF (vegfraction > 0)
THEN
955 IF (precip + addveg*(sfr_surf(is)/vegfraction) > (ipthreshold_mmhr/nsh_real))
THEN
956 runoff_snowfree(is) = runoff_snowfree(is) + (precip + addveg*(sfr_surf(is)/vegfraction) + &
957 snowtosurf(is) + addwater(is) - (ipthreshold_mmhr/nsh_real))
958 chang(is) = (ipthreshold_mmhr/nsh_real) - (drain(is) + ev_snowfree + freezstate(is))
960 chang(is) = precip + addveg*(sfr_surf(is)/vegfraction) + snowtosurf(is) + &
961 addwater(is) - (drain(is) + ev_snowfree + freezstate(is))
964 chang(is) = precip + snowtosurf(is) + addwater(is) - (drain(is) + ev_snowfree + freezstate(is))
967 state_id(is) = state_id(is) + chang(is)
971 soilstore_id(is) = soilstore_id(is) + drain(is)*addwaterrunoff(is)*(1 - snowfrac(is))
973 runoff_snowfree(is) = runoff_snowfree(is) + drain(is)*addwaterrunoff(is)
977 IF (state_id(is) < 0.0)
THEN
979 IF ((soilstore_id(is) + state_id(is)) >= 0 .AND. temp_c > 0)
THEN
981 soilstore_id(is) = soilstore_id(is) + state_id(is)*(1 - snowfrac(is))
985 chang(is) = chang(is) + state_id(is)
986 ev_snowfree = ev_snowfree + state_id(is)
992 IF (soilstore_id(is) > soilstorecap(is))
THEN
993 runofftest = runofftest + (soilstore_id(is) - soilstorecap(is))
994 soilstore_id(is) = soilstorecap(is)
995 ELSEIF (soilstore_id(is) < 0)
THEN
1006 IF (snowfracfresh2 > 0)
THEN
1007 surf_chang_tot = (state_id(is) - stateold(is))*sfr_surf(is)*(1 - snowfrac(is)) &
1008 - precip*sfr_surf(is)*(1 - snowfracfresh2)
1009 chsnow_tot = ((snowpack(is) + snowwater(is)) - snowtotinit)*sfr_surf(is)*(1 - snowfrac(is)) &
1010 - precip*sfr_surf(is)*snowfracfresh2
1012 surf_chang_tot = (state_id(is) - stateold(is))*sfr_surf(is)*(1 - snowfrac(is))
1013 chsnow_tot = ((snowpack(is) + snowwater(is)) - snowtotinit)*sfr_surf(is)*max(snowfrac(is), snowfracold)
1017 IF (snowdens(is) /= 0)
THEN
1018 snowdepth(is) = snowpack(is)*waterdens/snowdens(is)
1022 swe = swe + snowpack(is)*sfr_surf(is)*max(snowfrac(is), snowfracold)
1023 mwstore = mwstore + snowwater(is)*sfr_surf(is)*max(snowfrac(is), snowfracold)
1041 IF (snowfracfresh1 > 0) snowfrac(is) = snowfracfresh1
1042 IF (snowfracfresh2 > 0) snowfrac(is) = snowfracfresh2
1050 IF (snowfractionchoice == 2)
THEN
1051 IF (snowpack(is) > 0 .AND. mw_ind(is) > 0)
THEN
1053 IF (snowfrac(is) < 0.001) snowfrac(is) = 0.001
1054 ELSEIF (snowpack(is) == 0)
THEN
1062 ev_tot = ev_snowfree*sfr_surf(is)*(1 - snowfrac(is)) + ev_snow(is)*sfr_surf(is)*max(snowfrac(is), snowfracold)
1063 qe_tot = ev_snow(is)*tlv_sub*sfr_surf(is)*snowfrac(is) + ev_snowfree*tlv*sfr_surf(is)*(1 - snowfrac(is))
1065 ev_tot = ev_snowfree*sfr_surf(is)*(1 - snowfrac(is)) + ev_snow(is)*sfr_surf(is)*max(snowfrac(is), snowfracold)
1066 qe_tot = ev_snow(is)*tlv_sub*sfr_surf(is)*max(snowfrac(is), snowfracold) + ev_snowfree*tlv*sfr_surf(is)*(1 - snowfrac(is))
1072 runoffpipes = runoffpipes &
1073 + runoffsnow_surf(is)*sfr_surf(is)*max(snowfrac(is), snowfracold) &
1074 + runoff_snowfree(is)*sfr_surf(is)*(1 - snowfrac(is)) &
1075 + runofftest*sfr_surf(is)
1077 is, runoff_snowfree, &
1078 sfr_surf, pipecapacity, runofftowater, &
1079 runoffagimpervious, surpluswaterbody, runoffagveg, runoffpipes)
1081 runoff_tot = runoffsnow_surf(is)*sfr_surf(is)*max(snowfrac(is), snowfracold) &
1082 + runoff_snowfree(is)*sfr_surf(is)*(1 - snowfrac(is)) &
1083 + runofftest*sfr_surf(is)
1146 fwc = waterholdcapfrac*snowpack(
watersurf)
1149 IF (snowwater(
watersurf) >= fwc .AND. temp_c >= 0)
THEN
1155 ELSEIF (snowpack(is) < 0)
THEN
1190 runoff_tot = runoff_snowfree(is)
1204 SUBROUTINE evap_suews_snow(Qm, QP, lvS_J_kg, avdens, avRh, Press_hPa, Temp_C, RAsnow, psyc_hPa, &
1205 tstep, avcp, sIce_hPa, dectime, ev_snow, tlv_sub)
1212 REAL(KIND(1D0)),
INTENT(in) :: Qm
1213 REAL(KIND(1D0)),
INTENT(in) :: QP
1214 REAL(KIND(1D0)),
INTENT(in) :: lvS_J_kg
1215 REAL(KIND(1D0)),
INTENT(in) :: avdens
1216 REAL(KIND(1D0)),
INTENT(in) :: avRh
1217 REAL(KIND(1D0)),
INTENT(in) :: Press_hPa
1218 REAL(KIND(1D0)),
INTENT(in) :: Temp_C
1219 REAL(KIND(1D0)),
INTENT(in) :: RAsnow
1220 REAL(KIND(1D0)),
INTENT(in) :: psyc_hPa
1221 REAL(KIND(1D0)),
INTENT(in) :: avcp
1222 REAL(KIND(1D0)),
INTENT(in) :: sIce_hPa
1223 REAL(KIND(1D0)),
INTENT(in) :: dectime
1224 INTEGER,
INTENT(in) :: tstep
1226 REAL(KIND(1D0)),
INTENT(out) :: ev_snow
1227 REAL(KIND(1D0)),
INTENT(out) :: tlv_sub
1230 REAL(KIND(1D0)) :: e_snow, &
1241 tstep_real = real(tstep, kind(1d0))
1243 sae_snow = sice_hpa*(qp - qm)
1246 eaice_hpa = avrh/100*esice_hpa
1247 vdrcice = (esice_hpa - eaice_hpa)*avdens*avcp
1248 tlv_sub = lvs_j_kg/tstep_real
1249 e_snow = sae_snow + vdrcice/rasnow
1250 qe_snow = e_snow/(sice_hpa + psyc_hpa)
1251 ev_snow = qe_snow/tlv_sub
1262 SnowFrac, sfr_surf, &
1263 SnowPack, SnowRemoval, &
1264 SnowLimPaved, SnowLimBldg)
1267 INTEGER,
INTENT(in) :: is
1268 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SnowFrac, sfr_surf
1269 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: SnowPack
1270 REAL(KIND(1D0)),
DIMENSION(2),
INTENT(out) :: SnowRemoval
1271 REAL(KIND(1D0)),
INTENT(in) :: SnowLimPaved, SnowLimBldg
1275 IF (snowpack(
pavsurf) > snowlimpaved)
THEN
1277 snowpack(
pavsurf) = snowlimpaved
1282 IF (snowpack(
bldgsurf) > snowlimbldg)
THEN
1306 REAL(kind(1d0)) :: asc, swed, swe
1313 IF (swe <= swed)
THEN
1314 asc = ((swe/swed))**2
1322 IF (swe <= swed)
THEN
1323 IF ((swe/swed) < 0.9)
THEN
1324 asc = (swe/swed)*0.5
1332 IF (swe > 0) asc = 1
1336 IF (swe <= swed)
THEN
1338 asc = 1 - ((1/3.1416)*acos(2*(swe/swed) - 1))**1.7
1351 sfr_surf, SnowFrac, & !input
1356 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
1357 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SnowFrac
1359 REAL(KIND(1D0)),
INTENT(out) :: veg_fr
1361 veg_fr = dot_product(sfr_surf(3:7), 1 - snowfrac(3:7))
1385 SnowPack_prev, SnowAlb_prev, SnowDens_prev, &
1386 SnowAlb_next, SnowDens_next & ! output
1392 INTEGER,
INTENT(in) :: tstep
1394 REAL(KIND(1D0)),
INTENT(in) :: Temp_C
1395 REAL(KIND(1D0)),
INTENT(in) :: tau_a
1396 REAL(KIND(1D0)),
INTENT(in) :: tau_f
1397 REAL(KIND(1D0)),
INTENT(in) :: tau_r
1398 REAL(KIND(1D0)),
INTENT(in) :: SnowDensMax
1399 REAL(KIND(1D0)),
INTENT(in) :: SnowDensMin
1400 REAL(KIND(1D0)),
INTENT(in) :: SnowAlbMax
1401 REAL(KIND(1D0)),
INTENT(in) :: SnowAlbMin
1403 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SnowPack_prev
1405 REAL(KIND(1D0)),
INTENT(in) :: SnowAlb_prev
1406 REAL(KIND(1D0)),
INTENT(out) :: SnowAlb_next
1408 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SnowDens_prev
1409 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: SnowDens_next
1412 REAL(KIND(1D0)) :: alb_change
1413 REAL(KIND(1D0)) :: dens_change
1414 REAL(KIND(1D0)),
PARAMETER :: tau_1 = 24*60*60
1441 tstep, snowpack_prev, snowalb_prev, temp_c, &
1442 tau_a, tau_f, snowalbmax, snowalbmin)
1457 tstep, snowpack_prev, snowdens_prev, &
1458 tau_r, snowdensmax, snowdensmin)
1463 tstep, SnowPack_prev, SnowAlb_prev, Temp_C, &
1464 tau_a, tau_f, SnowAlbMax, SnowAlbMin) &
1465 result(snowalb_next)
1467 INTEGER,
INTENT(in) :: tstep
1469 REAL(kind(1d0)),
DIMENSION(7),
INTENT(in) :: snowpack_prev
1470 REAL(kind(1d0)),
INTENT(in) :: temp_c
1471 REAL(kind(1d0)),
INTENT(in) :: snowalb_prev
1472 REAL(kind(1d0)),
INTENT(in) :: tau_a
1473 REAL(kind(1d0)),
INTENT(in) :: tau_f
1474 REAL(kind(1d0)),
INTENT(in) :: snowalbmax
1475 REAL(kind(1d0)),
INTENT(in) :: snowalbmin
1477 REAL(kind(1d0)) :: snowalb_next
1479 REAL(kind(1d0)) :: alb_change
1480 REAL(kind(1d0)),
PARAMETER :: tau_1 = 24*60*60
1485 IF (sum(snowpack_prev) > 0)
THEN
1486 IF (temp_c < 0)
THEN
1488 alb_change = tau_a*(tstep)/tau_1
1489 snowalb_next = snowalb_prev - alb_change
1492 alb_change = exp(-tau_f*(tstep)/tau_1)
1493 snowalb_next = (snowalb_prev - snowalbmin)*alb_change + snowalbmin
1495 IF (snowalb_next < snowalbmin) snowalb_next = snowalbmin
1496 IF (snowalb_next > snowalbmax) snowalb_next = snowalbmax
1497 IF (snowalb_next < 0) print *,
'SnowAlbMin/max in SnowUpdate', snowalbmin, snowalbmax, snowalb_next
1501 IF (snowalb_next < 0) print *,
'SnowAlb in SnowUpdate', snowalb_next
1506 tstep, SnowPack_prev, SnowDens_prev, &
1507 tau_r, SnowDensMax, SnowDensMin) &
1508 result(snowdens_next)
1510 REAL(kind(1d0)),
DIMENSION(nsurf),
INTENT(in) :: snowpack_prev
1511 REAL(kind(1d0)),
DIMENSION(nsurf),
INTENT(in) :: snowdens_prev
1512 REAL(kind(1d0)),
INTENT(in) :: snowdensmax
1513 REAL(kind(1d0)),
INTENT(in) :: snowdensmin
1514 REAL(kind(1d0)),
INTENT(in) :: tau_r
1515 INTEGER,
INTENT(in) :: tstep
1519 REAL(kind(1d0)),
DIMENSION(nsurf) :: snowdens_next
1520 REAL(kind(1d0)) :: dens_change
1524 REAL(kind(1d0)),
PARAMETER :: tau_1 = 24*60*60
1531 IF (snowpack_prev(is) > 0)
THEN
1532 dens_change = exp(-tau_r*(tstep)/tau_1)
1533 IF (snowpack_prev(is) > 0) snowdens_next(is) = (snowdens_prev(is) - snowdensmax)*dens_change + snowdensmax
1534 IF (snowdens_next(is) > snowdensmax) snowdens_next(is) = snowdensmax
1536 snowdens_next(is) = snowdensmin
integer, parameter bldgsurf
integer, parameter conifsurf
integer, parameter ncolumnsdataoutsnow
integer, parameter watersurf
integer, parameter bsoilsurf
integer, parameter pavsurf
subroutine cal_evap(EvapMethod, state_is, WetThresh_is, capStore_is, vpd_hPa, avdens, avcp, qn_e, s_hPa, psyc_hPa, RS, RA, RB, tlv, RSS, ev, qe)
real(kind(1d0)) function sat_vap_pressice(Temp_c, PRESS_hPa, from, dectime)
subroutine snowupdate(tstep, Temp_C, tau_a, tau_f, tau_r, SnowDensMax, SnowDensMin, SnowAlbMax, SnowAlbMin, SnowPack_prev, SnowAlb_prev, SnowDens_prev, SnowAlb_next, SnowDens_next)
subroutine snowcalc(tstep, imin, it, dectime, is, snowCalcSwitch, EvapMethod, CRWmin, CRWmax, nsh_real, lvS_J_kg, avdens, avRh, Press_hPa, Temp_C, RAsnow, psyc_hPa, avcp, sIce_hPa, PervFraction, vegfraction, addimpervious, vpd_hPa, qn_e, s_hPa, ResistSurf, RA, rb, tlv, snowdensmin, SnowProf_24hr, precip, PipeCapacity, RunoffToWater, addVeg, SnowLimPaved, SnowLimBldg, FlowChange, drain, WetThresh, stateOld, mw_ind, SoilStoreCap, rainonsnow, freezmelt, freezstate, freezstatevol, Qm_Melt, Qm_rain, Tsurf_ind, sfr_surf, dayofWeek_id, StoreDrainPrm, SnowPackLimit, AddWater, addwaterrunoff, soilstore_id, SnowPack, SurplusEvap, SnowFrac, SnowWater, iceFrac, SnowDens, runoffAGimpervious, runoffAGveg, surplusWaterBody, ev_tot, qe_tot, runoff_tot, surf_chang_tot, chSnow_tot, rss_surf, runoff_snowfree, chang, changSnow, SnowToSurf, state_id, ev_snow, SnowRemoval, swe, runoffPipes, mwstore, runoffwaterbody)
real(kind(1d0)) function snowdepletioncurve(is, swe, sweD)
real(kind(1d0)) function, dimension(nsurf) update_snow_dens(tstep, SnowPack_prev, SnowDens_prev, tau_r, SnowDensMax, SnowDensMin)
subroutine evap_suews_snow(Qm, QP, lvS_J_kg, avdens, avRh, Press_hPa, Temp_C, RAsnow, psyc_hPa, tstep, avcp, sIce_hPa, dectime, ev_snow, tlv_sub)
real(kind(1d0)) function update_snow_albedo(tstep, SnowPack_prev, SnowAlb_prev, Temp_C, tau_a, tau_f, SnowAlbMax, SnowAlbMin)
subroutine veg_fr_snow(sfr_surf, SnowFrac, veg_fr)
subroutine snow_removal(is, SnowFrac, sfr_surf, SnowPack, SnowRemoval, SnowLimPaved, SnowLimBldg)
subroutine meltheat(lvS_J_kg, lv_J_kg, tstep_real, RadMeltFact, TempMeltFact, SnowAlbMax, SnowDensMin, Temp_C, Precip, PrecipLimit, PrecipLimitAlb, nsh_real, sfr_surf, Tsurf_ind, state_id, qn1_ind_snow, SnowWater, deltaQi, SnowPack, SnowFrac, SnowAlb, SnowDens, SnowfallCum, mwh, fwh, Qm, QmFreez, QmRain, snowCalcSwitch, Qm_melt, Qm_freezState, Qm_rain, FreezMelt, FreezState, FreezStateVol, rainOnSnow, SnowDepth, mw_ind)
subroutine updateflood(is, runoff, sfr_surf, PipeCapacity, RunoffToWater, runoffAGimpervious, surplusWaterBody, runoffAGveg, runoffPipes)