Soil Water Balance (SWB2)
Loading...
Searching...
No Matches
mass_balance__impervious_surface.F90
Go to the documentation of this file.
2
4 use iso_c_binding, only : c_short, c_int, c_float, c_double
5 implicit none
6
7 private
8
10
11contains
12
14 surface_storage, &
15 actual_et_impervious, &
16 paved_to_unpaved, &
17 surface_storage_max, &
18 storm_drain_capture, &
19 storm_drain_capture_fraction, &
20 net_rainfall, &
21 snowmelt, &
22 runon, &
23 runoff, &
24 fog, &
25 reference_et0, &
26 pervious_fraction )
27
28 real (c_double), intent(inout) :: surface_storage
29 real (c_double), intent(inout) :: actual_et_impervious
30 real (c_float), intent(inout) :: paved_to_unpaved ! 'wadd' in HWB
31 real (c_float), intent(inout) :: storm_drain_capture
32 real (c_float), intent(in) :: storm_drain_capture_fraction
33 real (c_float), intent(in) :: surface_storage_max
34 real (c_float), intent(in) :: net_rainfall
35 real (c_float), intent(in) :: snowmelt
36 real (c_float), intent(in) :: runon
37 real (c_float), intent(in) :: runoff
38 real (c_float), intent(in) :: fog
39 real (c_double), intent(in) :: reference_et0
40 real (c_float), intent(in) :: pervious_fraction
41
42 ! [ LOCALS ]
43 real (c_float) :: surface_storage_excess
44 real (c_float) :: impervious_fraction
45
46! if ( storm_drain_capture_fraction >= 0.0_c_float ) then
47
48
49 ! NOTE: removed this conditional 16 May 2018: it appears that
50 ! testing of this sort will underrepresent water in a cell
51 ! because although the surface storage may be zero, the
52 ! fraction impervious area may be nonzero and therefore will
53 ! intercept water that should be shunted to the pervious area of
54 ! the cell.
55
56! if ( surface_storage_max > NEAR_ZERO ) then
57
58 impervious_fraction = 1.0_c_float - pervious_fraction
59
60 surface_storage = surface_storage &
61 + net_rainfall &
62 + fog &
63 + snowmelt &
64 - runoff
65
66 ! **amount is reduced proportional to amount of impervious surface present**
67 surface_storage_excess = real(max( 0.0_c_double, &
68 ( surface_storage - surface_storage_max ) &
69 * impervious_fraction ), c_float)
70
71 surface_storage = min( surface_storage, real(surface_storage_max, c_double) )
72
73 storm_drain_capture = surface_storage_excess * storm_drain_capture_fraction
74
75 paved_to_unpaved = max( 0.0_c_float, &
76 surface_storage_excess - storm_drain_capture )
77
78 ! now allow for evaporation
79 actual_et_impervious = min( reference_et0, surface_storage )
80 surface_storage = max( surface_storage - actual_et_impervious, 0.0_c_double )
81
83
This module contains physical constants and convenience functions aimed at performing unit conversion...
elemental subroutine, public calculate_impervious_surface_mass_balance(surface_storage, actual_et_impervious, paved_to_unpaved, surface_storage_max, storm_drain_capture, storm_drain_capture_fraction, net_rainfall, snowmelt, runon, runoff, fog, reference_et0, pervious_fraction)