42 INTEGER,
INTENT(in) :: is
44 REAL(KIND(1D0)),
INTENT(in) :: state_is
45 REAL(KIND(1D0)),
INTENT(in) :: StorCap
46 REAL(KIND(1D0)),
INTENT(in) :: DrainCoef1
47 REAL(KIND(1D0)),
INTENT(in) :: DrainCoef2
48 REAL(KIND(1D0)),
INTENT(in) :: DrainEq
49 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
50 REAL(KIND(1D0)),
INTENT(out) :: drain_is
53 IF (state_is < 0.000000001)
THEN
56 IF (int(draineq) == 1)
THEN
58 IF (state_is < storcap)
THEN
61 drain_is = (draincoef1*(state_is - storcap)**draincoef2)/nsh_real
64 ELSEIF (int(draineq) == 2)
THEN
65 drain_is = (draincoef1*(exp(draincoef2*state_is) - 1))/nsh_real
68 ELSEIF (int(draineq) == 3)
THEN
69 drain_is = (draincoef1*(state_is**draincoef2))/nsh_real
77 IF (drain_is > state_is)
THEN
79 CALL errorhint(61,
'SUEWS_drain: drain_is > state_is for surface is ', drain_is, state_is, is)
81 ELSEIF (drain_is < 0.0001)
THEN
93 is, sfr_surf, PipeCapacity, RunoffToWater, pin, & ! input:
95 drain_surf, AddWater, addImpervious, nsh_real, state_in, frac_water2runoff, &
96 PervFraction, addVeg, SoilStoreCap, addWaterBody, FlowChange, StateLimit, &
97 runoffAGimpervious, runoffAGveg, runoffPipes, ev, soilstore_id, & ! inout:
98 surplusWaterBody, SurplusEvap, runoffWaterBody, & ! inout:
143 INTEGER,
INTENT(in) :: is
145 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
146 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: AddWater
147 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: state_in
148 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: frac_water2runoff
149 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SoilStoreCap
150 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: StateLimit
151 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: drain_surf
152 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: WU_surf
154 REAL(KIND(1D0)),
INTENT(in) :: PipeCapacity
155 REAL(KIND(1D0)),
INTENT(in) :: RunoffToWater
156 REAL(KIND(1D0)),
INTENT(in) :: pin
157 REAL(KIND(1D0)),
INTENT(in) :: addImpervious
158 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
159 REAL(KIND(1D0)),
INTENT(in) :: PervFraction
160 REAL(KIND(1D0)),
INTENT(in) :: addVeg
161 REAL(KIND(1D0)),
INTENT(in) :: addWaterBody
162 REAL(KIND(1D0)),
INTENT(in) :: FlowChange
164 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: soilstore_id
165 REAL(KIND(1D0)),
DIMENSION(2),
INTENT(inout) :: SurplusEvap
167 REAL(KIND(1D0)),
DIMENSION(nsurf) :: chang
168 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: runoff
169 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: state_out
175 REAL(KIND(1D0)),
INTENT(inout) :: surplusWaterBody
176 REAL(KIND(1D0)),
INTENT(inout) :: runoffAGimpervious
177 REAL(KIND(1D0)),
INTENT(inout) :: runoffAGveg
178 REAL(KIND(1D0)),
INTENT(inout) :: runoffPipes
179 REAL(KIND(1D0)),
INTENT(inout) :: ev
180 REAL(KIND(1D0)),
INTENT(inout) :: runoffWaterBody
182 REAL(KIND(1D0)) :: p_mm
185 REAL(KIND(1D0)) :: EvPart
186 REAL(KIND(1D0)),
PARAMETER :: NotUsed = -55.5
189 REAL(KIND(1D0)),
PARAMETER :: IPThreshold_mmhr = 10
202 p_mm = pin + wu_surf(is)
207 p_mm = p_mm + addwater(is)
217 IF (sfr_surf(
pavsurf) /= 0)
THEN
218 p_mm = p_mm + addimpervious/sfr_surf(
pavsurf)
223 chang(is) = p_mm - (drain_surf(is) + ev)
227 IF (p_mm > ipthreshold_mmhr/nsh_real)
THEN
228 runoff(is) = runoff(is) + (p_mm - ipthreshold_mmhr/nsh_real)
229 chang(is) = ipthreshold_mmhr/nsh_real - (drain_surf(is) + ev)
233 state_out(is) = state_in(is) + chang(is)
236 IF (state_out(is) < 0.0)
THEN
239 surplusevap(is) = abs(state_out(is))
240 ev = ev - surplusevap(is)
250 chang(is) = state_out(is) - state_in(is)
254 runoff(is) = runoff(is) + drain_surf(is)*frac_water2runoff(is)
281 chang(is) = p_mm - (drain_surf(is) + ev)
285 IF (p_mm > ipthreshold_mmhr/nsh_real)
THEN
286 runoff(is) = runoff(is) + (p_mm - ipthreshold_mmhr/nsh_real)
287 chang(is) = ipthreshold_mmhr/nsh_real - (drain_surf(is) + ev)
291 state_out(is) = state_in(is) + chang(is)
294 IF (state_out(is) < 0.0)
THEN
297 IF ((soilstore_id(is) + state_out(is)) >= 0)
THEN
298 soilstore_id(is) = soilstore_id(is) + state_out(is)
302 ev = ev - abs(state_out(is))
314 chang(is) = state_out(is) - state_in(is)
320 soilstore_id(is) = soilstore_id(is) + drain_surf(is)*frac_water2runoff(is)
323 IF (soilstore_id(is) > soilstorecap(is))
THEN
324 runoff(is) = runoff(is) + (soilstore_id(is) - soilstorecap(is))
325 soilstore_id(is) = soilstorecap(is)
326 ELSEIF (soilstore_id(is) < 0)
THEN
327 CALL errorhint(62,
'SUEWS_store: soilstore_id(is) < 0 ', soilstore_id(is), notused, is)
336 p_mm = p_mm + addwaterbody/sfr_surf(
watersurf)
341 chang(is) = p_mm + flowchange/nsh_real - ev
344 state_out(is) = state_in(is) + chang(is)
347 IF (state_out(is) < 0.0)
THEN
349 ev = ev - abs(state_out(is))
359 chang(is) = state_out(is) - state_in(is)
375 chang(is) = state_out(is) - state_in(is)
390 sfr_surf, pipecapacity, runofftowater, &
391 runoffagimpervious, surpluswaterbody, runoffagveg, runoffpipes)
399 pin, nsh_real, & ! input:
400 PipeCapacity, RunoffToWater, &
401 addImpervious, addVeg, addWaterBody, FlowChange, &
402 SoilStoreCap_surf, StateLimit_surf, &
404 sfr_surf, drain_surf, AddWater_surf, frac_water2runoff_surf, WU_surf, &
405 ev_surf_in, state_surf_in, soilstore_surf_in, &
406 ev_surf_out, state_surf_out, soilstore_surf_out, & ! output:
408 runoffAGimpervious_grid, runoffAGveg_grid, runoffPipes_grid, runoffWaterBody_grid & ! output
415 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
416 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: AddWater_surf
417 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: state_surf_in
418 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: frac_water2runoff_surf
419 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SoilStoreCap_surf
420 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: StateLimit_surf
421 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: drain_surf
422 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: WU_surf
423 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: ev_surf_in
424 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: soilstore_surf_in
427 REAL(KIND(1D0)),
INTENT(in) :: PipeCapacity
428 REAL(KIND(1D0)),
INTENT(in) :: RunoffToWater
429 REAL(KIND(1D0)),
INTENT(in) :: pin
430 REAL(KIND(1D0)),
INTENT(in) :: addImpervious
431 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
432 REAL(KIND(1D0)),
INTENT(in) :: PervFraction
433 REAL(KIND(1D0)),
INTENT(in) :: addVeg
434 REAL(KIND(1D0)),
INTENT(in) :: addWaterBody
435 REAL(KIND(1D0)),
INTENT(in) :: FlowChange
441 REAL(KIND(1D0)),
INTENT(out) :: runoffAGimpervious_grid
442 REAL(KIND(1D0)),
INTENT(out) :: runoffAGveg_grid
443 REAL(KIND(1D0)),
INTENT(out) :: runoffPipes_grid
444 REAL(KIND(1D0)),
INTENT(out) :: runoffWaterBody_grid
447 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: ev_surf_out
448 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: state_surf_out
449 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: soilstore_surf_out
451 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: runoff_surf
452 REAL(KIND(1D0)),
DIMENSION(nsurf) :: soilstore
454 REAL(KIND(1D0)),
DIMENSION(2) :: SurplusEvap
460 REAL(KIND(1D0)) :: surplusWaterBody
464 REAL(KIND(1D0)),
DIMENSION(nsurf) :: ev_surf
468 REAL(KIND(1D0)),
PARAMETER :: NotUsed = -55.5
471 REAL(KIND(1D0)),
PARAMETER :: IPThreshold_mmhr = 10
474 soilstore = soilstore_surf_in
479 runoffagimpervious_grid = 0
480 runoffwaterbody_grid = 0
492 IF (sfr_surf(is) > 0)
THEN
496 is, sfr_surf, pipecapacity, runofftowater, pin, &
498 drain_surf, addwater_surf, addimpervious, nsh_real, state_surf_in, frac_water2runoff_surf, &
499 pervfraction, addveg, soilstorecap_surf, addwaterbody, flowchange, statelimit_surf, &
500 runoffagimpervious_grid, runoffagveg_grid, runoffpipes_grid, ev_surf(is), soilstore, &
501 surpluswaterbody, surplusevap, runoffwaterbody_grid, &
502 runoff_surf, state_surf_out)
508 soilstore_surf_out = soilstore
511 ev_surf_out = ev_surf
517 pin, nsh_real, nlayer, &
518 sfr_roof, StateLimit_roof, SoilStoreCap_roof, WetThresh_roof, & ! input:
519 ev_roof_in, state_roof_in, soilstore_roof_in, & ! input:
520 sfr_wall, StateLimit_wall, SoilStoreCap_wall, WetThresh_wall, & ! input:
521 ev_wall_in, state_wall_in, soilstore_wall_in, & ! input:
522 ev_roof_out, state_roof_out, soilstore_roof_out, runoff_roof, & ! general output:
523 ev_wall_out, state_wall_out, soilstore_wall_out, runoff_wall, & ! general output:
524 state_building, soilstore_building, runoff_building, SoilStoreCap_building)
528 INTEGER,
INTENT(in) :: nlayer
529 REAL(KIND(1D0)),
INTENT(in) :: pin
530 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
533 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: sfr_roof
534 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: StateLimit_roof
535 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: WetThresh_roof
536 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: SoilStoreCap_roof
537 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: state_roof_in
538 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: soilstore_roof_in
539 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: ev_roof_in
542 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: sfr_wall
543 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: StateLimit_wall
544 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: WetThresh_wall
545 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: SoilStoreCap_wall
546 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: state_wall_in
547 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: soilstore_wall_in
548 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(in) :: ev_wall_in
551 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(out) :: ev_roof_out
552 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(out) :: state_roof_out
553 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(out) :: soilstore_roof_out
554 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(out) :: runoff_roof
557 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(out) :: ev_wall_out
558 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(out) :: state_wall_out
559 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(out) :: soilstore_wall_out
560 REAL(KIND(1D0)),
DIMENSION(nlayer),
INTENT(out) :: runoff_wall
562 REAL(KIND(1D0)),
INTENT(out) :: state_building
563 REAL(KIND(1D0)),
INTENT(out) :: soilstore_building
564 REAL(KIND(1D0)),
INTENT(out) :: runoff_building
565 REAL(KIND(1D0)),
INTENT(out) :: SoilStoreCap_building
567 REAL(KIND(1D0)) :: precip_excess_roof
568 REAL(KIND(1D0)) :: precip_excess_wall
569 REAL(KIND(1D0)) :: pin_wall
571 REAL(KIND(1D0)),
DIMENSION(nlayer) :: chang_roof
572 REAL(KIND(1D0)),
DIMENSION(nlayer) :: chang_wall
573 REAL(KIND(1D0)),
DIMENSION(nlayer) :: drain_roof
574 REAL(KIND(1D0)),
DIMENSION(nlayer) :: drain_wall
575 REAL(KIND(1D0)),
DIMENSION(nlayer) :: infil_roof
576 REAL(KIND(1D0)),
DIMENSION(nlayer) :: infil_wall
577 REAL(KIND(1D0)),
DIMENSION(nlayer) :: evap_roof
578 REAL(KIND(1D0)),
DIMENSION(nlayer) :: evap_wall
584 REAL(KIND(1D0)),
PARAMETER :: IPThreshold_mmhr = 10
585 REAL(KIND(1D0)) :: IPThreshold
587 INTEGER :: n_layer, i_layer
590 ipthreshold = ipthreshold_mmhr/nsh_real
593 precip_excess_roof = pin - ipthreshold
596 DO i_layer = 1, nlayer
600 runoff_roof(i_layer) = 0.0
601 chang_roof(i_layer) = 0.0
605 drain_roof(i_layer) = state_roof_in(i_layer)*.0
608 infil_roof(i_layer) = state_roof_in(i_layer)*.3
610 IF (precip_excess_roof > 0)
THEN
612 runoff_roof(i_layer) = precip_excess_roof
613 chang_roof(i_layer) = ipthreshold - ev_roof_in(i_layer) - drain_roof(i_layer) - infil_roof(i_layer)
615 chang_roof(i_layer) = pin - ev_roof_in(i_layer) - drain_roof(i_layer) - infil_roof(i_layer)
619 state_roof_out(i_layer) = state_roof_in(i_layer) + chang_roof(i_layer)
622 IF (state_roof_out(i_layer) < 0.0)
THEN
625 IF ((soilstore_roof_in(i_layer) + state_roof_out(i_layer)) >= 0)
THEN
627 soilstore_roof_out(i_layer) = soilstore_roof_in(i_layer) + state_roof_out(i_layer)
630 ev_roof_out(i_layer) = ev_roof_in(i_layer) - abs(state_roof_out(i_layer))
633 state_roof_out(i_layer) = 0.0
636 IF (soilstore_roof_in(i_layer) + infil_roof(i_layer) > soilstorecap_roof(i_layer))
THEN
638 soilstore_roof_out(i_layer) = soilstorecap_roof(i_layer)
641 runoff_roof = runoff_roof + (soilstore_roof_in(i_layer) + infil_roof(i_layer) - soilstorecap_roof(i_layer))
643 soilstore_roof_out(i_layer) = soilstore_roof_in(i_layer) + infil_roof(i_layer)
650 runoff_wall(i_layer) = 0.0
651 chang_wall(i_layer) = 0.0
656 pin_wall = runoff_roof(i_layer) + pin*.2
657 precip_excess_wall = pin_wall - statelimit_wall(i_layer)
661 drain_wall(i_layer) = state_wall_in(i_layer)*.0
664 infil_wall(i_layer) = state_wall_in(i_layer)*.1
666 IF (precip_excess_wall > 0)
THEN
668 runoff_wall(i_layer) = precip_excess_wall
669 chang_wall(i_layer) = statelimit_wall(i_layer) - ev_wall_in(i_layer) - drain_wall(i_layer) - infil_wall(i_layer)
671 chang_wall(i_layer) = pin_wall - ev_wall_in(i_layer) - drain_wall(i_layer) - infil_wall(i_layer)
675 state_wall_out(i_layer) = state_wall_in(i_layer) + chang_wall(i_layer)
678 IF (state_wall_out(i_layer) < 0.0)
THEN
681 IF ((soilstore_wall_in(i_layer) + state_wall_out(i_layer)) >= 0)
THEN
683 soilstore_wall_out(i_layer) = soilstore_wall_in(i_layer) + state_wall_out(i_layer)
686 ev_wall_out(i_layer) = ev_wall_in(i_layer) - abs(state_wall_out(i_layer))
689 state_wall_out(i_layer) = 0.0
692 IF (soilstore_wall_in(i_layer) + infil_wall(i_layer) > soilstorecap_wall(i_layer))
THEN
694 soilstore_wall_out(i_layer) = soilstorecap_wall(i_layer)
697 runoff_wall(i_layer) = &
698 runoff_wall(i_layer) + &
699 (soilstore_wall_in(i_layer) + infil_wall(i_layer) - soilstorecap_wall(i_layer))
701 soilstore_wall_out(i_layer) = soilstore_wall_in(i_layer) + infil_wall(i_layer)
715 state_building = dot_product(state_roof_out, sfr_roof) + dot_product(state_wall_out, sfr_wall)
716 soilstore_building = dot_product(soilstore_roof_out, sfr_roof) + dot_product(soilstore_wall_out, sfr_wall)
717 soilstorecap_building = dot_product(soilstorecap_roof, sfr_roof) + dot_product(soilstorecap_wall, sfr_wall)
719 runoff_building = dot_product(runoff_wall, sfr_wall)
725 is, runoff, & ! input:
726 sfr_surf, PipeCapacity, RunoffToWater, &
727 runoffAGimpervious, surplusWaterBody, runoffAGveg, runoffPipes)
731 INTEGER,
INTENT(in) :: is
732 REAL(KIND(1D0)),
INTENT(in) :: sfr_surf(nsurf), runoff(nsurf), PipeCapacity, RunoffToWater
733 REAL(KIND(1D0)),
INTENT(inout) :: runoffAGimpervious, surplusWaterBody, runoffAGveg, runoffPipes
736 runoffpipes = runoffpipes + (runoff(is)*sfr_surf(is))
740 IF (runoffpipes > pipecapacity)
THEN
744 IF (sfr_surf(
watersurf) > 0.0000001)
THEN
747 runoffagimpervious = runoffagimpervious + (runoffpipes - pipecapacity)*(1 - runofftowater)
748 surpluswaterbody = surpluswaterbody + (runoffpipes - pipecapacity)*runofftowater
751 runoffagimpervious = runoffagimpervious + (runoffpipes - pipecapacity)
755 IF (sfr_surf(
watersurf) > 0.0000001)
THEN
757 runoffagveg = runoffagveg + (runoffpipes - pipecapacity)*(1 - runofftowater)
758 surpluswaterbody = surpluswaterbody + (runoffpipes - pipecapacity)*runofftowater
761 runoffagveg = runoffagveg + (runoffpipes - pipecapacity)
765 runoffpipes = pipecapacity
774 SnowUse, WaterDist, sfr_surf, Drain, & ! input:
775 AddWaterRunoff, AddWater)
782 INTEGER,
INTENT(in) :: SnowUse
784 REAL(KIND(1D0)),
INTENT(in) :: WaterDist(nsurf + 1, nsurf - 1)
785 REAL(KIND(1D0)),
INTENT(in) :: sfr_surf(nsurf)
786 REAL(KIND(1D0)),
INTENT(in) :: Drain(nsurf)
788 REAL(KIND(1D0)),
INTENT(out) :: AddWaterRunoff(nsurf)
789 REAL(KIND(1D0)),
INTENT(out) :: AddWater(nsurf)
792 INTEGER :: NSurfDoNotReceiveDrainage = 0
796 addwaterrunoff(ii) = waterdist(8, ii)
801 DO ii = 1, nsurf - nsurfdonotreceivedrainage
802 DO jj = 1, nsurf - (nsurfdonotreceivedrainage + 1)
804 IF (sfr_surf(ii) /= 0)
THEN
807 IF (snowuse == 0)
THEN
808 addwater(ii) = addwater(ii) + (drain(jj)*sfr_surf(jj)/sfr_surf(ii))*waterdist(ii, jj)
812 addwaterrunoff(jj) = addwaterrunoff(jj) + waterdist(ii, jj)
816 addwaterrunoff(jj) = addwaterrunoff(jj) + waterdist(ii, jj)
827 NonWaterFraction, & !input
828 SoilStoreCap, sfr_surf, soilstore_id, &
829 SoilMoistCap, SoilState, & !output
834 REAL(KIND(1D0)),
INTENT(in) :: NonWaterFraction
835 REAL(KIND(1D0)),
INTENT(in),
DIMENSION(nsurf) :: SoilStoreCap, sfr_surf, soilstore_id
837 REAL(KIND(1D0)),
INTENT(out) :: SoilMoistCap, SoilState
838 REAL(KIND(1D0)),
INTENT(out) :: vsmd, smd
841 REAL(KIND(1D0)) :: fveg
846 IF (nonwaterfraction /= 0)
THEN
848 soilmoistcap = soilmoistcap + (soilstorecap(is)*sfr_surf(is)/nonwaterfraction)
849 soilstate = soilstate + (soilstore_id(is)*sfr_surf(is)/nonwaterfraction)
855 smd = soilmoistcap - soilstate
875 vsmd =
cal_smd_veg(soilstorecap, soilstore_id, sfr_surf)
881 sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, & !input
882 SoilStoreCap_paved, SoilStoreCap_bldg, SoilStoreCap_evetr, &
883 SoilStoreCap_dectr, SoilStoreCap_grass, SoilStoreCap_bsoil, SoilStoreCap_water, &
885 SoilMoistCap, SoilState, & !output
890 REAL(KIND(1D0)),
INTENT(in) :: NonWaterFraction
891 REAL(KIND(1D0)),
INTENT(in),
DIMENSION(nsurf) :: soilstore_id
893 REAL(KIND(1D0)),
INTENT(IN) :: sfr_paved
894 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bldg
895 REAL(KIND(1D0)),
INTENT(IN) :: sfr_evetr
896 REAL(KIND(1D0)),
INTENT(IN) :: sfr_dectr
897 REAL(KIND(1D0)),
INTENT(IN) :: sfr_grass
898 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bsoil
899 REAL(KIND(1D0)),
INTENT(IN) :: sfr_water
900 REAL(KIND(1D0)),
DIMENSION(nsurf) :: sfr_surf
902 REAL(KIND(1D0)),
INTENT(IN) :: SoilStoreCap_paved
903 REAL(KIND(1D0)),
INTENT(IN) :: SoilStoreCap_bldg
904 REAL(KIND(1D0)),
INTENT(IN) :: SoilStoreCap_evetr
905 REAL(KIND(1D0)),
INTENT(IN) :: SoilStoreCap_dectr
906 REAL(KIND(1D0)),
INTENT(IN) :: SoilStoreCap_grass
907 REAL(KIND(1D0)),
INTENT(IN) :: SoilStoreCap_bsoil
908 REAL(KIND(1D0)),
INTENT(IN) :: SoilStoreCap_water
909 REAL(KIND(1D0)),
DIMENSION(nsurf) :: SoilStoreCap
911 REAL(KIND(1D0)),
INTENT(out) :: SoilMoistCap, SoilState
912 REAL(KIND(1D0)),
INTENT(out) :: vsmd, smd
915 REAL(KIND(1D0)) :: fveg
917 sfr_surf = [sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water]
918 soilstorecap(1) = soilstorecap_paved
919 soilstorecap(2) = soilstorecap_bldg
920 soilstorecap(3) = soilstorecap_evetr
921 soilstorecap(4) = soilstorecap_dectr
922 soilstorecap(5) = soilstorecap_grass
923 soilstorecap(6) = soilstorecap_bsoil
924 soilstorecap(7) = soilstorecap_water
929 IF (nonwaterfraction /= 0)
THEN
931 soilmoistcap = soilmoistcap + (soilstorecap(is)*sfr_surf(is)/nonwaterfraction)
932 soilstate = soilstate + (soilstore_id(is)*sfr_surf(is)/nonwaterfraction)
938 smd = soilmoistcap - soilstate
958 vsmd =
cal_smd_veg(soilstorecap, soilstore_id, sfr_surf)
964 FUNCTION cal_smd_veg(SoilStoreCap, soilstore_id, sfr_surf)
RESULT(vsmd)
967 REAL(kind(1d0)),
INTENT(in),
DIMENSION(nsurf) :: soilstorecap, soilstore_id,
sfr_surf
968 REAL(kind(1d0)) :: vsmd
970 REAL(kind(1d0)),
DIMENSION(nsurf) :: smd_surf
971 REAL(kind(1d0)),
DIMENSION(3) :: surf_veg, smd_veg
977 smd_surf = soilstorecap - soilstore_id
982 surf_veg = surf_veg/sum(surf_veg)
985 vsmd = dot_product(smd_veg, surf_veg)
991 SMDMethod, xsmd, NonWaterFraction, SoilMoistCap, & !input
992 SoilStoreCap, surf_chang_per_tstep, &
993 soilstore_id, soilstoreOld, sfr_surf, &
994 smd, smd_nsurf, tot_chang_per_tstep, SoilState)
999 INTEGER,
INTENT(in) :: SMDMethod
1000 REAL(KIND(1D0)),
INTENT(in) :: xsmd
1001 REAL(KIND(1D0)),
INTENT(in) :: NonWaterFraction
1002 REAL(KIND(1D0)),
INTENT(in) :: SoilMoistCap
1004 REAL(KIND(1D0)),
INTENT(in) :: surf_chang_per_tstep
1005 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: soilstore_id
1006 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: soilstoreOld
1007 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
1008 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SoilStoreCap
1010 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: smd_nsurf
1011 REAL(KIND(1D0)),
INTENT(out) :: SoilState
1012 REAL(KIND(1D0)),
INTENT(out) :: smd
1013 REAL(KIND(1D0)),
INTENT(out) :: tot_chang_per_tstep
1015 REAL(KIND(1D0)),
PARAMETER :: NotUsed = -999
1016 REAL(KIND(1D0)),
PARAMETER :: NAN = -999
1020 IF (nonwaterfraction /= 0)
THEN
1021 DO is = 1,
nsurf - 1
1022 soilstate = soilstate + (soilstore_id(is)*sfr_surf(is)/nonwaterfraction)
1023 IF (soilstate < 0)
THEN
1024 CALL errorhint(62,
'SUEWS_Calculations: total SoilState < 0 (just added surface is) ', soilstate, notused, is)
1025 ELSEIF (soilstate > soilmoistcap)
THEN
1026 CALL errorhint(62,
'SUEWS_Calculations: total SoilState > capacity (just added surface is) ', soilstate, notused, is)
1040 smd = soilmoistcap - soilstate
1041 smd_nsurf = soilstorecap - soilstore_id
1045 tot_chang_per_tstep = surf_chang_per_tstep
1046 DO is = 1, (
nsurf - 1)
1047 tot_chang_per_tstep = tot_chang_per_tstep + ((soilstore_id(is) - soilstoreold(is))*sfr_surf(is))
1050 IF (smdmethod > 0)
THEN
1059 SMDMethod, xsmd, NonWaterFraction, SoilMoistCap, & !input
1060 SoilStoreCap_paved, SoilStoreCap_bldg, SoilStoreCap_evetr, &
1061 SoilStoreCap_dectr, SoilStoreCap_grass, SoilStoreCap_bsoil, SoilStoreCap_water, &
1062 surf_chang_per_tstep, &
1063 soilstore_id, soilstoreOld, &
1064 sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, &
1065 smd, smd_nsurf, tot_chang_per_tstep, SoilState)
1070 INTEGER,
INTENT(in) :: SMDMethod
1071 REAL(KIND(1D0)),
INTENT(in) :: xsmd
1072 REAL(KIND(1D0)),
INTENT(in) :: NonWaterFraction
1073 REAL(KIND(1D0)),
INTENT(in) :: SoilMoistCap
1075 REAL(KIND(1D0)),
INTENT(in) :: surf_chang_per_tstep
1076 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: soilstore_id
1077 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: soilstoreOld
1079 REAL(KIND(1D0)),
INTENT(IN) :: sfr_paved
1080 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bldg
1081 REAL(KIND(1D0)),
INTENT(IN) :: sfr_evetr
1082 REAL(KIND(1D0)),
INTENT(IN) :: sfr_dectr
1083 REAL(KIND(1D0)),
INTENT(IN) :: sfr_grass
1084 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bsoil
1085 REAL(KIND(1D0)),
INTENT(IN) :: sfr_water
1086 REAL(KIND(1D0)),
DIMENSION(NSURF) :: sfr_surf
1088 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_paved
1089 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_bldg
1090 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_evetr
1091 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_dectr
1092 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_grass
1093 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_bsoil
1094 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_water
1095 REAL(KIND(1D0)),
DIMENSION(nsurf) :: SoilStoreCap
1097 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: smd_nsurf
1098 REAL(KIND(1D0)),
INTENT(out) :: SoilState
1099 REAL(KIND(1D0)),
INTENT(out) :: smd
1100 REAL(KIND(1D0)),
INTENT(out) :: tot_chang_per_tstep
1102 REAL(KIND(1D0)),
PARAMETER :: NotUsed = -999
1103 REAL(KIND(1D0)),
PARAMETER :: NAN = -999
1106 sfr_surf = [sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water]
1107 soilstorecap(1) = soilstorecap_paved
1108 soilstorecap(2) = soilstorecap_bldg
1109 soilstorecap(3) = soilstorecap_evetr
1110 soilstorecap(4) = soilstorecap_dectr
1111 soilstorecap(5) = soilstorecap_grass
1112 soilstorecap(6) = soilstorecap_bsoil
1113 soilstorecap(7) = soilstorecap_water
1116 IF (nonwaterfraction /= 0)
THEN
1117 DO is = 1,
nsurf - 1
1118 soilstate = soilstate + (soilstore_id(is)*sfr_surf(is)/nonwaterfraction)
1119 IF (soilstate < 0)
THEN
1120 CALL errorhint(62,
'SUEWS_Calculations: total SoilState < 0 (just added surface is) ', soilstate, notused, is)
1121 ELSEIF (soilstate > soilmoistcap)
THEN
1122 CALL errorhint(62,
'SUEWS_Calculations: total SoilState > capacity (just added surface is) ', soilstate, notused, is)
1136 smd = soilmoistcap - soilstate
1137 smd_nsurf = soilstorecap - soilstore_id
1141 tot_chang_per_tstep = surf_chang_per_tstep
1142 DO is = 1, (
nsurf - 1)
1143 tot_chang_per_tstep = tot_chang_per_tstep + ((soilstore_id(is) - soilstoreold(is))*sfr_surf(is))
1146 IF (smdmethod > 0)
THEN
1156 sfr_surf, & ! input: ! surface fractions
1157 SoilStoreCap, & !Capacity of soil store for each surface [mm]
1158 SoilDepth, & !Depth of sub-surface soil store for each surface [mm]
1159 SatHydraulicConduct, & !Saturated hydraulic conductivity for each soil subsurface [mm s-1]
1160 SurfaceArea, & !Surface area of the study area [m2]
1161 NonWaterFraction, & ! sum of surface cover fractions for all except water surfaces
1162 tstep_real, & !tstep cast as a real for use in calculations
1163 soilstore_id, & ! inout: !Soil moisture of each surface type [mm]
1164 runoffSoil, & !Soil runoff from each soil sub-surface [mm]
1165 runoffSoil_per_tstep & ! output:!Runoff to deep soil per timestep [mm] (for whole surface, excluding water body)
1188 REAL(KIND(1D0)),
INTENT(in) :: sfr_surf(nsurf)
1189 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap(nsurf)
1190 REAL(KIND(1D0)),
INTENT(in) :: SoilDepth(nsurf)
1191 REAL(KIND(1D0)),
INTENT(in) :: SatHydraulicConduct(nsurf)
1192 REAL(KIND(1D0)),
INTENT(in) :: SurfaceArea
1193 REAL(KIND(1D0)),
INTENT(in) :: NonWaterFraction
1194 REAL(KIND(1D0)),
INTENT(in) :: tstep_real
1196 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: soilstore_id
1197 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: runoffSoil
1199 REAL(KIND(1D0)),
INTENT(out) :: runoffSoil_per_tstep
1202 REAL(KIND(1D0)) :: &
1203 DimenWaterCon1, DimenWaterCon2, &
1204 SoilMoistCap_Vol1, &
1206 SoilMoistCap_Vol2, &
1208 B_r1, MatPot1, Km1, &
1209 B_r2, MatPot2, Km2, &
1210 Distance, KmWeight, dI, &
1213 REAL(KIND(1D0)),
PARAMETER :: &
1230 runoffsoil_per_tstep = 0
1232 DO is = 1, nsurf - 1
1234 IF (sfr_surf(is) /= 0 .AND. soilstorecap(is) > 0)
THEN
1236 DO jj = is + 1, nsurf - 1
1238 IF (sfr_surf(jj) /= 0 .AND. soilstorecap(jj) > 0)
THEN
1243 soilmoistcap_vol1 = soilstorecap(is)/soildepth(is)
1244 soilmoist_vol1 = soilstore_id(is)/soildepth(is)
1253 IF (b_r1 >= soilmoist_vol1)
THEN
1258 dimenwatercon1 = (soilmoist_vol1 - b_r1)/(soilmoistcap_vol1 - b_r1)
1261 IF (dimenwatercon1 > 0.99999)
THEN
1262 dimenwatercon1 = dimenwatercon1 - 0.0001
1265 IF (dimenwatercon1 < 0.00000005)
THEN
1266 dimenwatercon1 = dimenwatercon1 + 0.0000001
1271 matpot1 = sqrt(1/dimenwatercon1**2 - 1)/alphavg
1274 km1 = sathydraulicconduct(is)*sqrt(dimenwatercon1)*(1 - (1 - dimenwatercon1**2)**0.5)**2
1277 IF (matpot1 > 100000)
THEN
1286 soilmoistcap_vol2 = soilstorecap(jj)/soildepth(jj)
1287 soilmoist_vol2 = soilstore_id(jj)/soildepth(jj)
1295 IF (b_r2 >= soilmoist_vol2)
THEN
1299 dimenwatercon2 = (soilmoist_vol2 - b_r2)/(soilmoistcap_vol2 - b_r2)
1301 IF (dimenwatercon2 > 0.99999)
THEN
1302 dimenwatercon2 = dimenwatercon2 - 0.0001
1305 IF (dimenwatercon2 < 0.00000005)
THEN
1306 dimenwatercon2 = dimenwatercon2 + 0.0000001
1316 matpot2 = sqrt(1/dimenwatercon2**2 - 1)/alphavg
1319 km2 = sathydraulicconduct(jj)*sqrt(dimenwatercon2)*(1 - (1 - dimenwatercon2**2)**0.5)**2
1321 IF ((matpot2) > 100000)
THEN
1332 distance = (sqrt(sfr_surf(is)*surfacearea/nunits) + sqrt(sfr_surf(jj)*surfacearea/nunits))/2
1335 kmweight = (sfr_surf(is)*km1 + sfr_surf(jj)*km2)/(sfr_surf(is) + sfr_surf(jj))
1339 di_dt = -(kmweight)*(-matpot1 + matpot2)/(distance*1000)
1343 di = di_dt*tstep_real
1349 IF ((soilstore_id(jj) >= di*sfr_surf(is)/sfr_surf(jj)) .AND. ((soilstore_id(is) + di) >= 0))
THEN
1350 soilstore_id(is) = soilstore_id(is) + di
1351 soilstore_id(jj) = soilstore_id(jj) - di*sfr_surf(is)/sfr_surf(jj)
1354 ELSEIF ((soilstore_id(is) + di) < 0)
THEN
1355 soilstore_id(jj) = soilstore_id(jj) + soilstore_id(is)*sfr_surf(is)/sfr_surf(jj)
1356 soilstore_id(is) = 0
1360 soilstore_id(is) = soilstore_id(is) + soilstore_id(jj)*sfr_surf(jj)/sfr_surf(is)
1361 soilstore_id(jj) = 0
1365 IF (soilstore_id(is) > soilstorecap(is))
THEN
1366 runoffsoil(is) = runoffsoil(is) + (soilstore_id(is) - soilstorecap(is))
1367 soilstore_id(is) = soilstorecap(is)
1373 IF (soilstore_id(jj) > soilstorecap(jj))
THEN
1374 runoffsoil(jj) = runoffsoil(jj) + (soilstore_id(jj) - soilstorecap(jj))
1375 soilstore_id(jj) = soilstorecap(jj)
1384 runoffsoil_per_tstep = runoffsoil_per_tstep + (runoffsoil(is)*sfr_surf(is)/nonwaterfraction)
1395 sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, & ! input: ! surface fractions
1396 SoilStoreCap_paved, SoilStoreCap_bldg, SoilStoreCap_evetr, &
1397 SoilStoreCap_dectr, SoilStoreCap_grass, SoilStoreCap_bsoil, SoilStoreCap_water, & !Capacity of soil store for each surface [mm]
1398 SoilDepth_paved, SoilDepth_bldg, SoilDepth_evetr, SoilDepth_dectr, SoilDepth_grass, SoilDepth_bsoil, SoilDepth_water, & !Depth of sub-surface soil store for each surface [mm]
1399 SatHydraulicConduct_paved, SatHydraulicConduct_bldg, &
1400 SatHydraulicConduct_evetr, SatHydraulicConduct_dectr, &
1401 SatHydraulicConduct_grass, SatHydraulicConduct_bsoil, SatHydraulicConduct_water, & !Saturated hydraulic conductivity for each soil subsurface [mm s-1]
1402 SurfaceArea, & !Surface area of the study area [m2]
1403 NonWaterFraction, & ! sum of surface cover fractions for all except water surfaces
1404 tstep_real, & !tstep cast as a real for use in calculations
1405 soilstore_id, & ! inout: !Soil moisture of each surface type [mm]
1406 runoffSoil, & !Soil runoff from each soil sub-surface [mm]
1407 runoffSoil_per_tstep & ! output:!Runoff to deep soil per timestep [mm] (for whole surface, excluding water body)
1430 REAL(KIND(1D0)),
INTENT(IN) :: sfr_paved
1431 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bldg
1432 REAL(KIND(1D0)),
INTENT(IN) :: sfr_evetr
1433 REAL(KIND(1D0)),
INTENT(IN) :: sfr_dectr
1434 REAL(KIND(1D0)),
INTENT(IN) :: sfr_grass
1435 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bsoil
1436 REAL(KIND(1D0)),
INTENT(IN) :: sfr_water
1437 REAL(KIND(1D0)),
DIMENSION(NSURF) :: sfr_surf
1439 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_paved
1440 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_bldg
1441 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_evetr
1442 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_dectr
1443 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_grass
1444 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_bsoil
1445 REAL(KIND(1D0)),
INTENT(in) :: SoilStoreCap_water
1446 REAL(KIND(1D0)),
DIMENSION(nsurf) :: SoilStoreCap
1448 REAL(KIND(1D0)),
INTENT(in) :: SoilDepth_paved
1449 REAL(KIND(1D0)),
INTENT(in) :: SoilDepth_bldg
1450 REAL(KIND(1D0)),
INTENT(in) :: SoilDepth_evetr
1451 REAL(KIND(1D0)),
INTENT(in) :: SoilDepth_dectr
1452 REAL(KIND(1D0)),
INTENT(in) :: SoilDepth_grass
1453 REAL(KIND(1D0)),
INTENT(in) :: SoilDepth_bsoil
1454 REAL(KIND(1D0)),
INTENT(in) :: SoilDepth_water
1455 REAL(KIND(1D0)),
DIMENSION(nsurf) :: SoilDepth
1457 REAL(KIND(1D0)),
INTENT(in) :: SatHydraulicConduct_paved
1458 REAL(KIND(1D0)),
INTENT(in) :: SatHydraulicConduct_bldg
1459 REAL(KIND(1D0)),
INTENT(in) :: SatHydraulicConduct_evetr
1460 REAL(KIND(1D0)),
INTENT(in) :: SatHydraulicConduct_dectr
1461 REAL(KIND(1D0)),
INTENT(in) :: SatHydraulicConduct_grass
1462 REAL(KIND(1D0)),
INTENT(in) :: SatHydraulicConduct_bsoil
1463 REAL(KIND(1D0)),
INTENT(in) :: SatHydraulicConduct_water
1464 REAL(KIND(1D0)),
DIMENSION(nsurf) :: SatHydraulicConduct
1466 REAL(KIND(1D0)),
INTENT(in) :: SurfaceArea
1467 REAL(KIND(1D0)),
INTENT(in) :: NonWaterFraction
1468 REAL(KIND(1D0)),
INTENT(in) :: tstep_real
1470 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(inout) :: soilstore_id
1471 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: runoffSoil
1473 REAL(KIND(1D0)),
INTENT(out) :: runoffSoil_per_tstep
1476 REAL(KIND(1D0)) :: &
1477 DimenWaterCon1, DimenWaterCon2, &
1478 SoilMoistCap_Vol1, &
1480 SoilMoistCap_Vol2, &
1482 B_r1, MatPot1, Km1, &
1483 B_r2, MatPot2, Km2, &
1484 Distance, KmWeight, dI, &
1487 REAL(KIND(1D0)),
PARAMETER :: &
1504 runoffsoil_per_tstep = 0
1506 sfr_surf = [sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water]
1507 soilstorecap(1) = soilstorecap_paved
1508 soilstorecap(2) = soilstorecap_bldg
1509 soilstorecap(3) = soilstorecap_evetr
1510 soilstorecap(4) = soilstorecap_dectr
1511 soilstorecap(5) = soilstorecap_grass
1512 soilstorecap(6) = soilstorecap_bsoil
1513 soilstorecap(7) = soilstorecap_water
1515 soildepth(1) = soildepth_paved
1516 soildepth(2) = soildepth_bldg
1517 soildepth(3) = soildepth_evetr
1518 soildepth(4) = soildepth_dectr
1519 soildepth(5) = soildepth_grass
1520 soildepth(6) = soildepth_bsoil
1521 soildepth(7) = soildepth_water
1523 sathydraulicconduct(1) = sathydraulicconduct_paved
1524 sathydraulicconduct(2) = sathydraulicconduct_bldg
1525 sathydraulicconduct(3) = sathydraulicconduct_evetr
1526 sathydraulicconduct(4) = sathydraulicconduct_dectr
1527 sathydraulicconduct(5) = sathydraulicconduct_grass
1528 sathydraulicconduct(6) = sathydraulicconduct_bsoil
1529 sathydraulicconduct(7) = sathydraulicconduct_water
1531 DO is = 1,
nsurf - 1
1533 IF (sfr_surf(is) /= 0 .AND. soilstorecap(is) > 0)
THEN
1535 DO jj = is + 1,
nsurf - 1
1537 IF (sfr_surf(jj) /= 0 .AND. soilstorecap(jj) > 0)
THEN
1542 soilmoistcap_vol1 = soilstorecap(is)/soildepth(is)
1543 soilmoist_vol1 = soilstore_id(is)/soildepth(is)
1552 IF (b_r1 >= soilmoist_vol1)
THEN
1557 dimenwatercon1 = (soilmoist_vol1 - b_r1)/(soilmoistcap_vol1 - b_r1)
1560 IF (dimenwatercon1 > 0.99999)
THEN
1561 dimenwatercon1 = dimenwatercon1 - 0.0001
1564 IF (dimenwatercon1 < 0.00000005)
THEN
1565 dimenwatercon1 = dimenwatercon1 + 0.0000001
1570 matpot1 = sqrt(1/dimenwatercon1**2 - 1)/alphavg
1573 km1 = sathydraulicconduct(is)*sqrt(dimenwatercon1)*(1 - (1 - dimenwatercon1**2)**0.5)**2
1576 IF (matpot1 > 100000)
THEN
1585 soilmoistcap_vol2 = soilstorecap(jj)/soildepth(jj)
1586 soilmoist_vol2 = soilstore_id(jj)/soildepth(jj)
1594 IF (b_r2 >= soilmoist_vol2)
THEN
1598 dimenwatercon2 = (soilmoist_vol2 - b_r2)/(soilmoistcap_vol2 - b_r2)
1600 IF (dimenwatercon2 > 0.99999)
THEN
1601 dimenwatercon2 = dimenwatercon2 - 0.0001
1604 IF (dimenwatercon2 < 0.00000005)
THEN
1605 dimenwatercon2 = dimenwatercon2 + 0.0000001
1615 matpot2 = sqrt(1/dimenwatercon2**2 - 1)/alphavg
1618 km2 = sathydraulicconduct(jj)*sqrt(dimenwatercon2)*(1 - (1 - dimenwatercon2**2)**0.5)**2
1620 IF ((matpot2) > 100000)
THEN
1631 distance = (sqrt(sfr_surf(is)*surfacearea/nunits) + sqrt(sfr_surf(jj)*surfacearea/nunits))/2
1634 kmweight = (sfr_surf(is)*km1 + sfr_surf(jj)*km2)/(sfr_surf(is) + sfr_surf(jj))
1638 di_dt = -(kmweight)*(-matpot1 + matpot2)/(distance*1000)
1642 di = di_dt*tstep_real
1648 IF ((soilstore_id(jj) >= di*sfr_surf(is)/sfr_surf(jj)) .AND. ((soilstore_id(is) + di) >= 0))
THEN
1649 soilstore_id(is) = soilstore_id(is) + di
1650 soilstore_id(jj) = soilstore_id(jj) - di*sfr_surf(is)/sfr_surf(jj)
1653 ELSEIF ((soilstore_id(is) + di) < 0)
THEN
1654 soilstore_id(jj) = soilstore_id(jj) + soilstore_id(is)*sfr_surf(is)/sfr_surf(jj)
1655 soilstore_id(is) = 0
1659 soilstore_id(is) = soilstore_id(is) + soilstore_id(jj)*sfr_surf(jj)/sfr_surf(is)
1660 soilstore_id(jj) = 0
1664 IF (soilstore_id(is) > soilstorecap(is))
THEN
1665 runoffsoil(is) = runoffsoil(is) + (soilstore_id(is) - soilstorecap(is))
1666 soilstore_id(is) = soilstorecap(is)
1672 IF (soilstore_id(jj) > soilstorecap(jj))
THEN
1673 runoffsoil(jj) = runoffsoil(jj) + (soilstore_id(jj) - soilstorecap(jj))
1674 soilstore_id(jj) = soilstorecap(jj)
1683 runoffsoil_per_tstep = runoffsoil_per_tstep + (runoffsoil(is)*sfr_surf(is)/nonwaterfraction)
1696 nsh_real, & ! input:
1697 wu_m3, SurfaceArea, sfr_surf, &
1698 IrrFracPaved, IrrFracBldgs, &
1699 IrrFracEveTr, IrrFracDecTr, IrrFracGrass, &
1700 IrrFracBSoil, IrrFracWater, &
1701 DayofWeek_id, WUProfA_24hr, WUProfM_24hr, &
1702 InternalWaterUse_h, HDD_id, WUDay_id, &
1703 WaterUseMethod, NSH, it, imin, DLS, &
1704 wu_surf, wu_int, wu_ext)
1725 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
1726 REAL(KIND(1D0)),
INTENT(in) :: wu_m3
1727 REAL(KIND(1D0)),
INTENT(in) :: SurfaceArea
1728 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracPaved
1729 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracBldgs
1730 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracEveTr
1731 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracDecTr
1732 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracGrass
1733 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracBSoil
1734 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracWater
1735 REAL(KIND(1D0)),
INTENT(in) :: InternalWaterUse_h
1736 REAL(KIND(1D0)),
DIMENSION(0:23, 2),
INTENT(in) :: WUProfA_24hr
1737 REAL(KIND(1D0)),
DIMENSION(0:23, 2),
INTENT(in) :: WUProfM_24hr
1738 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
1740 REAL(KIND(1D0)),
DIMENSION(12),
INTENT(in) :: HDD_id
1741 REAL(KIND(1D0)),
DIMENSION(9),
INTENT(in) :: WUDay_id
1743 INTEGER,
INTENT(in) :: DayofWeek_id(3)
1744 INTEGER,
INTENT(in) :: WaterUseMethod
1745 INTEGER,
INTENT(in) :: NSH
1746 INTEGER,
INTENT(in) :: it
1747 INTEGER,
INTENT(in) :: imin
1748 INTEGER,
INTENT(in) :: DLS
1750 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: wu_surf
1751 REAL(KIND(1D0)),
INTENT(out) :: wu_int
1752 REAL(KIND(1D0)),
INTENT(out) :: wu_ext
1754 REAL(KIND(1D0)) :: wu_EveTr
1755 REAL(KIND(1D0)) :: wu_DecTr
1756 REAL(KIND(1D0)) :: wu_Grass
1758 REAL(KIND(1D0)),
DIMENSION(nsurf) :: WUDay_A_id
1759 REAL(KIND(1D0)),
DIMENSION(nsurf) :: WUDay_M_id
1760 REAL(KIND(1D0)),
DIMENSION(nsurf) :: IrrFrac
1761 REAL(KIND(1D0)),
DIMENSION(nsurf) :: WUArea
1763 REAL(KIND(1D0)) :: WUAreaTotal_m2
1764 REAL(KIND(1D0)) :: InternalWaterUse
1765 REAL(KIND(1D0)) :: flag_WuM = 1
1766 REAL(KIND(1D0)) :: wu
1770 REAL(KIND(1D0)),
PARAMETER :: NAN = -999.
1771 REAL(KIND(1D0)) :: OverUse
1772 REAL(KIND(1D0)) :: rain_cum_daily
1774 REAL(KIND(1D0)) :: get_Prof_SpecTime_sum
1776 REAL(KIND(1D0)) :: WUProfA_tstep
1777 REAL(KIND(1D0)) :: WUProfM_tstep
1787 tstep = int(3600/nsh)
1790 rain_cum_daily = hdd_id(11)
1797 irrfrac = [irrfracpaved, irrfracbldgs, &
1798 irrfracevetr, irrfracdectr, irrfracgrass, &
1799 irrfracbsoil, irrfracwater]
1804 IF (waterusemethod == 1)
THEN
1807 wuarea = irrfrac*sfr_surf*surfacearea
1808 wuareatotal_m2 = sum(wuarea)
1816 IF (wu_m3 == nan .OR. wu_m3 == 0)
THEN
1820 IF (wuareatotal_m2 > 0)
THEN
1821 wu = (wu_m3/wuareatotal_m2*1000)
1823 wu_surf = wu*irrfrac
1825 wu = (wu_m3/surfacearea*1000)
1831 ELSEIF (waterusemethod == 0)
THEN
1840 IF (dayofweek_id(1) == 1 .OR. dayofweek_id(1) == 7)
THEN
1856 wuprofa_tstep = get_prof_spectime_sum(ih, imin, 0, wuprofa_24hr(:, iu), tstep)
1861 IF (rain_cum_daily > 2)
THEN
1866 wuprofm_tstep = get_prof_spectime_sum(ih, imin, 0, wuprofm_24hr(:, iu), tstep)
1869 wu_surf = wuprofa_tstep*wuday_a_id + wuprofm_tstep*wuday_m_id*flag_wum
1871 wu_surf = wu_surf*irrfrac
1875 wu = dot_product(wu_surf, sfr_surf)
1882 internalwateruse = internalwateruse_h/nsh_real
1885 wu_ext = wu - (internalwateruse + overuse)
1887 IF (wu_ext < 0)
THEN
1888 overuse = abs(wu_ext)
1894 wu_int = wu - wu_ext
1897 IF (wu_ext /= 0 .AND. wu /= 0)
THEN
1898 wu_surf = wu_surf*wu_ext/wu
1904 nsh_real, & ! input:
1905 wu_m3, SurfaceArea, &
1906 sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, &
1907 IrrFracPaved, IrrFracBldgs, &
1908 IrrFracEveTr, IrrFracDecTr, IrrFracGrass, &
1909 IrrFracBSoil, IrrFracWater, &
1911 WUProfA_24hr_working, WUProfA_24hr_holiday, &
1912 wuprofm_24hr_working, wuprofm_24hr_holiday, &
1913 InternalWaterUse_h, HDD_id, WUDay_id, &
1914 WaterUseMethod, NSH, it, imin, DLS, &
1915 wu_surf, wu_int, wu_ext)
1936 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
1937 REAL(KIND(1D0)),
INTENT(in) :: wu_m3
1938 REAL(KIND(1D0)),
INTENT(in) :: SurfaceArea
1939 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracPaved
1940 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracBldgs
1941 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracEveTr
1942 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracDecTr
1943 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracGrass
1944 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracBSoil
1945 REAL(KIND(1D0)),
INTENT(IN) :: IrrFracWater
1946 REAL(KIND(1D0)),
INTENT(in) :: InternalWaterUse_h
1948 REAL(KIND(1D0)),
DIMENSION(0:23),
INTENT(in) :: WUProfA_24hr_working
1949 REAL(KIND(1D0)),
DIMENSION(0:23),
INTENT(in) :: WUProfA_24hr_holiday
1950 REAL(KIND(1D0)),
DIMENSION(0:23, 2) :: WUProfA_24hr
1951 REAL(KIND(1D0)),
DIMENSION(0:23),
INTENT(in) :: WUProfM_24hr_working
1952 REAL(KIND(1D0)),
DIMENSION(0:23),
INTENT(in) :: WUProfM_24hr_holiday
1953 REAL(KIND(1D0)),
DIMENSION(0:23, 2) :: WUProfM_24hr
1955 REAL(KIND(1D0)),
INTENT(IN) :: sfr_paved
1956 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bldg
1957 REAL(KIND(1D0)),
INTENT(IN) :: sfr_evetr
1958 REAL(KIND(1D0)),
INTENT(IN) :: sfr_dectr
1959 REAL(KIND(1D0)),
INTENT(IN) :: sfr_grass
1960 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bsoil
1961 REAL(KIND(1D0)),
INTENT(IN) :: sfr_water
1962 REAL(KIND(1D0)),
DIMENSION(nsurf) :: sfr_surf
1964 REAL(KIND(1D0)),
DIMENSION(12),
INTENT(in) :: HDD_id
1965 REAL(KIND(1D0)),
DIMENSION(9),
INTENT(in) :: WUDay_id
1967 INTEGER,
INTENT(in) :: DayofWeek_id(3)
1968 INTEGER,
INTENT(in) :: WaterUseMethod
1969 INTEGER,
INTENT(in) :: NSH
1970 INTEGER,
INTENT(in) :: it
1971 INTEGER,
INTENT(in) :: imin
1972 INTEGER,
INTENT(in) :: DLS
1974 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(out) :: wu_surf
1975 REAL(KIND(1D0)),
INTENT(out) :: wu_int
1976 REAL(KIND(1D0)),
INTENT(out) :: wu_ext
1978 REAL(KIND(1D0)) :: wu_EveTr
1979 REAL(KIND(1D0)) :: wu_DecTr
1980 REAL(KIND(1D0)) :: wu_Grass
1982 REAL(KIND(1D0)),
DIMENSION(nsurf) :: WUDay_A_id
1983 REAL(KIND(1D0)),
DIMENSION(nsurf) :: WUDay_M_id
1984 REAL(KIND(1D0)),
DIMENSION(nsurf) :: IrrFrac
1985 REAL(KIND(1D0)),
DIMENSION(nsurf) :: WUArea
1987 REAL(KIND(1D0)) :: WUAreaTotal_m2
1988 REAL(KIND(1D0)) :: InternalWaterUse
1989 REAL(KIND(1D0)) :: flag_WuM = 1
1990 REAL(KIND(1D0)) :: wu
1994 REAL(KIND(1D0)),
PARAMETER :: NAN = -999.
1995 REAL(KIND(1D0)) :: OverUse
1996 REAL(KIND(1D0)) :: rain_cum_daily
1998 REAL(KIND(1D0)) :: get_Prof_SpecTime_sum
2000 REAL(KIND(1D0)) :: WUProfA_tstep
2001 REAL(KIND(1D0)) :: WUProfM_tstep
2003 sfr_surf = [sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water]
2004 wuprofa_24hr(:, 1) = wuprofa_24hr_working
2005 wuprofa_24hr(:, 2) = wuprofa_24hr_holiday
2006 wuprofm_24hr(:, 1) = wuprofm_24hr_working
2007 wuprofm_24hr(:, 2) = wuprofm_24hr_holiday
2016 tstep = int(3600/nsh)
2019 rain_cum_daily = hdd_id(11)
2026 irrfrac = [irrfracpaved, irrfracbldgs, &
2027 irrfracevetr, irrfracdectr, irrfracgrass, &
2028 irrfracbsoil, irrfracwater]
2033 IF (waterusemethod == 1)
THEN
2036 wuarea = irrfrac*sfr_surf*surfacearea
2037 wuareatotal_m2 = sum(wuarea)
2045 IF (wu_m3 == nan .OR. wu_m3 == 0)
THEN
2049 IF (wuareatotal_m2 > 0)
THEN
2050 wu = (wu_m3/wuareatotal_m2*1000)
2052 wu_surf = wu*irrfrac
2054 wu = (wu_m3/surfacearea*1000)
2060 ELSEIF (waterusemethod == 0)
THEN
2069 IF (dayofweek_id(1) == 1 .OR. dayofweek_id(1) == 7)
THEN
2085 wuprofa_tstep = get_prof_spectime_sum(ih, imin, 0, wuprofa_24hr(:, iu), tstep)
2090 IF (rain_cum_daily > 2)
THEN
2095 wuprofm_tstep = get_prof_spectime_sum(ih, imin, 0, wuprofm_24hr(:, iu), tstep)
2098 wu_surf = wuprofa_tstep*wuday_a_id + wuprofm_tstep*wuday_m_id*flag_wum
2100 wu_surf = wu_surf*irrfrac
2104 wu = dot_product(wu_surf, sfr_surf)
2111 internalwateruse = internalwateruse_h/nsh_real
2114 wu_ext = wu - (internalwateruse + overuse)
2116 IF (wu_ext < 0)
THEN
2117 overuse = abs(wu_ext)
2123 wu_int = wu - wu_ext
2126 IF (wu_ext /= 0 .AND. wu /= 0)
THEN
2127 wu_surf = wu_surf*wu_ext/wu
integer, parameter bldgsurf
integer, parameter conifsurf
real(kind(1d0)), dimension(nsurf) sfr_surf
integer, parameter watersurf
integer, parameter grasssurf
integer, parameter bsoilsurf
integer, parameter pavsurf
integer, parameter excesssurf
integer, parameter decidsurf
subroutine updateflood(is, runoff, sfr_surf, pipecapacity, runofftowater, runoffagimpervious, surpluswaterbody, runoffagveg, runoffpipes)
subroutine suews_cal_wateruse(nsh_real, wu_m3, surfacearea, sfr_surf, irrfracpaved, irrfracbldgs, irrfracevetr, irrfracdectr, irrfracgrass, irrfracbsoil, irrfracwater, dayofweek_id, wuprofa_24hr, wuprofm_24hr, internalwateruse_h, hdd_id, wuday_id, waterusemethod, nsh, it, imin, dls, wu_surf, wu_int, wu_ext)
subroutine suews_update_soilmoist(nonwaterfraction, soilstorecap, sfr_surf, soilstore_id, soilmoistcap, soilstate, vsmd, smd)
subroutine suews_update_soilmoist_dts(nonwaterfraction, sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, soilstorecap_paved, soilstorecap_bldg, soilstorecap_evetr, soilstorecap_dectr, soilstorecap_grass, soilstorecap_bsoil, soilstorecap_water, soilstore_id, soilmoistcap, soilstate, vsmd, smd)
subroutine cal_water_storage_building(pin, nsh_real, nlayer, sfr_roof, statelimit_roof, soilstorecap_roof, wetthresh_roof, ev_roof_in, state_roof_in, soilstore_roof_in, sfr_wall, statelimit_wall, soilstorecap_wall, wetthresh_wall, ev_wall_in, state_wall_in, soilstore_wall_in, ev_roof_out, state_roof_out, soilstore_roof_out, runoff_roof, ev_wall_out, state_wall_out, soilstore_wall_out, runoff_wall, state_building, soilstore_building, runoff_building, soilstorecap_building)
subroutine suews_cal_horizontalsoilwater(sfr_surf, soilstorecap, soildepth, sathydraulicconduct, surfacearea, nonwaterfraction, tstep_real, soilstore_id, runoffsoil, runoffsoil_per_tstep)
subroutine cal_water_storage_surf(pin, nsh_real, pipecapacity, runofftowater, addimpervious, addveg, addwaterbody, flowchange, soilstorecap_surf, statelimit_surf, pervfraction, sfr_surf, drain_surf, addwater_surf, frac_water2runoff_surf, wu_surf, ev_surf_in, state_surf_in, soilstore_surf_in, ev_surf_out, state_surf_out, soilstore_surf_out, runoff_surf, runoffagimpervious_grid, runoffagveg_grid, runoffpipes_grid, runoffwaterbody_grid)
subroutine suews_cal_soilstate(smdmethod, xsmd, nonwaterfraction, soilmoistcap, soilstorecap, surf_chang_per_tstep, soilstore_id, soilstoreold, sfr_surf, smd, smd_nsurf, tot_chang_per_tstep, soilstate)
subroutine suews_cal_horizontalsoilwater_dts(sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, soilstorecap_paved, soilstorecap_bldg, soilstorecap_evetr, soilstorecap_dectr, soilstorecap_grass, soilstorecap_bsoil, soilstorecap_water, soildepth_paved, soildepth_bldg, soildepth_evetr, soildepth_dectr, soildepth_grass, soildepth_bsoil, soildepth_water, sathydraulicconduct_paved, sathydraulicconduct_bldg, sathydraulicconduct_evetr, sathydraulicconduct_dectr, sathydraulicconduct_grass, sathydraulicconduct_bsoil, sathydraulicconduct_water, surfacearea, nonwaterfraction, tstep_real, soilstore_id, runoffsoil, runoffsoil_per_tstep)
subroutine suews_cal_soilstate_dts(smdmethod, xsmd, nonwaterfraction, soilmoistcap, soilstorecap_paved, soilstorecap_bldg, soilstorecap_evetr, soilstorecap_dectr, soilstorecap_grass, soilstorecap_bsoil, soilstorecap_water, surf_chang_per_tstep, soilstore_id, soilstoreold, sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, smd, smd_nsurf, tot_chang_per_tstep, soilstate)
subroutine drainage(is, state_is, storcap, draineq, draincoef1, draincoef2, nsh_real, drain_is)
subroutine cal_water_storage(is, sfr_surf, pipecapacity, runofftowater, pin, wu_surf, drain_surf, addwater, addimpervious, nsh_real, state_in, frac_water2runoff, pervfraction, addveg, soilstorecap, addwaterbody, flowchange, statelimit, runoffagimpervious, runoffagveg, runoffpipes, ev, soilstore_id, surpluswaterbody, surplusevap, runoffwaterbody, runoff, state_out)
real(kind(1d0)) function cal_smd_veg(soilstorecap, soilstore_id, sfr_surf)
subroutine suews_cal_wateruse_dts(nsh_real, wu_m3, surfacearea, sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, irrfracpaved, irrfracbldgs, irrfracevetr, irrfracdectr, irrfracgrass, irrfracbsoil, irrfracwater, dayofweek_id, wuprofa_24hr_working, wuprofa_24hr_holiday, wuprofm_24hr_working, wuprofm_24hr_holiday, internalwateruse_h, hdd_id, wuday_id, waterusemethod, nsh, it, imin, dls, wu_surf, wu_int, wu_ext)
subroutine redistributewater(snowuse, waterdist, sfr_surf, drain, addwaterrunoff, addwater)
subroutine errorhint(errh, problemfile, value, value2, valuei)