4 use iso_c_binding,
only : c_short, c_int, c_float, c_double
17 actual_et_impervious, &
19 surface_storage_max, &
20 storm_drain_capture, &
21 storm_drain_capture_fraction, &
30 real (c_double),
intent(inout) :: surface_storage
31 real (c_double),
intent(inout) :: actual_et_impervious
32 real (c_float),
intent(inout) :: paved_to_unpaved
34 real (c_float),
intent(in) :: storm_drain_capture_fraction
35 real (c_float),
intent(in) :: surface_storage_max
36 real (c_float),
intent(in) :: net_rainfall
37 real (c_float),
intent(in) :: snowmelt
38 real (c_float),
intent(in) :: runon
39 real (c_float),
intent(in) :: runoff
40 real (c_float),
intent(in) :: fog
41 real (c_double),
intent(in) :: reference_et0
42 real (c_float),
intent(in) :: pervious_fraction
45 real (c_float) :: surface_storage_excess
46 real (c_float) :: impervious_fraction
47 real (c_float) :: surface_storage_l
61 impervious_fraction = 1.0_c_float - pervious_fraction
63 surface_storage = surface_storage &
70 surface_storage_excess = max( 0.0_c_float, &
71 ( surface_storage - surface_storage_max ) &
72 * impervious_fraction )
74 surface_storage = min( surface_storage, surface_storage_max )
78 paved_to_unpaved = max( 0.0_c_float, &
82 actual_et_impervious = min( reference_et0, surface_storage )
83 surface_storage = max( surface_storage - actual_et_impervious, 0.0_c_double )
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)