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)
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)