14 USE mo_kind,
ONLY : dp
74 SUBROUTINE runoff_unsat_zone(k1, kp, k0, alpha, karst_loss, pefec_soil, unsat_thresh, sat_storage, unsat_storage, &
75 slow_interflow, fast_interflow, perc)
79 REAL(dp),
INTENT(IN) :: k1
82 REAL(dp),
INTENT(IN) :: kp
85 REAL(dp),
INTENT(IN) :: k0
88 REAL(dp),
INTENT(IN) :: alpha
91 REAL(dp),
INTENT(IN) :: karst_loss
94 REAL(dp),
INTENT(IN) :: pefec_soil
97 REAL(dp),
INTENT(IN) :: unsat_thresh
100 REAL(dp),
INTENT(INOUT) :: sat_storage
103 REAL(dp),
INTENT(INOUT) :: unsat_storage
106 REAL(dp),
INTENT(OUT) :: slow_interflow
109 REAL(dp),
INTENT(OUT) :: fast_interflow
112 REAL(dp),
INTENT(OUT) :: perc
120 unsat_storage = unsat_storage + pefec_soil
123 fast_interflow = 0.0_dp
124 if(unsat_storage > unsat_thresh)
then
125 fast_interflow = min((k0 * (unsat_storage - unsat_thresh)), &
128 unsat_storage = unsat_storage - fast_interflow
131 slow_interflow = 0.0_dp
133 if(unsat_storage >
eps_dp)
then
134 slow_interflow = min((k1 * (unsat_storage**(1.0_dp + alpha))), &
137 unsat_storage = unsat_storage - slow_interflow
142 perc = kp * unsat_storage
146 if(unsat_storage > perc)
then
147 unsat_storage = unsat_storage - perc
148 sat_storage = sat_storage + perc * karst_loss
150 sat_storage = sat_storage + unsat_storage * karst_loss
151 unsat_storage = 0.0_dp
195 REAL(dp),
INTENT(IN) :: k2
198 REAL(dp),
INTENT(INOUT) :: sat_storage
201 REAL(dp),
INTENT(OUT) :: baseflow
204 if (sat_storage > 0.0_dp)
then
205 baseflow = k2 * sat_storage
206 sat_storage = sat_storage - baseflow
248 SUBROUTINE l1_total_runoff(fSealed_area_fraction, fast_interflow, slow_interflow, baseflow, direct_runoff, &
253 REAL(dp),
INTENT(IN) :: fsealed_area_fraction
256 REAL(dp),
INTENT(IN) :: fast_interflow
259 REAL(dp),
INTENT(IN) :: slow_interflow
262 REAL(dp),
INTENT(IN) :: baseflow
265 REAL(dp),
INTENT(IN) :: direct_runoff
268 REAL(dp),
INTENT(OUT) :: total_runoff
271 total_runoff = ((baseflow + slow_interflow + fast_interflow) * (1.0_dp - fsealed_area_fraction)) + &
272 (direct_runoff * fsealed_area_fraction)
Provides constants commonly used by mHM, mRM and MPR.
real(dp), parameter, public eps_dp
epsilon(1.0) in double precision
subroutine, public runoff_unsat_zone(k1, kp, k0, alpha, karst_loss, pefec_soil, unsat_thresh, sat_storage, unsat_storage, slow_interflow, fast_interflow, perc)
Runoff generation for the saturated zone.
subroutine, public runoff_sat_zone(k2, sat_storage, baseflow)
Runoff generation for the saturated zone.
subroutine, public l1_total_runoff(fsealed_area_fraction, fast_interflow, slow_interflow, baseflow, direct_runoff, total_runoff)
total runoff accumulation at level 1