11# calculate_wabila_roof --------------------------------------------------------
2- calculate_wabila_roof <- function (area , retention_height )
3- {
2+ calculate_wabila_roof <- function (area , retention_height , return_code = TRUE ) {
43 # get climatic parameters from area
5- P <- area $ prec_yr
6- ET_p <- area $ epot_yr
4+ P <- area [" prec_yr" ]
5+ ET_p <- area [" epot_yr" ]
6+ code <- area [" code" ]
77
88 # runoff component
9- a <- 0.9115 + 0.00007063 * P - 0.000007498 * ET_p - 0.2063 *
10- log(retention_height + 1 )
9+ a <- 0.9115 + 0.00007063 * P - 0.000007498 * ET_p - 0.2063 * log(retention_height + 1 )
1110
1211 # infiltration component
13- g <- 0
12+ g <- rep( 0 , length( P )) # if P is a vector, g will be a vector of zeros with the same length
1413
15- # evaporation component
14+ # evaporation component
1615 v <- 1 - a
1716
18- c(a , g , v )
17+ result <- setNames(c(a , g , v ),
18+ c(" surface_runoff" , " infiltration" , " evaporation" ))
19+
20+ if (return_code ){
21+ return (cbind(code , result ))
22+ }
23+
24+ result
25+
1926}
2027
2128# calculate_wabila_green_roof --------------------------------------------------
22- calculate_wabila_green_roof <- function (area , height , kf , w_diff )
29+ calculate_wabila_green_roof <- function (area , height , kf , w_diff , return_code = TRUE )
2330{
2431 # h: depth, in cm
2532 # kf: permeability of soil, in mm/h
2633 # w_diff: difference between water holding capacity and wilting point, unitless
2734
2835 # get climatic parameters from area
29- P <- area $ prec_yr
30- ET_p <- area $ epot_yr
36+ P <- area [" prec_yr" ]
37+ ET_p <- area [" epot_yr" ]
38+ code <- area [" code" ]
3139
3240 # runoff component
3341 a = - 2.182 + 0.4293 * log(P ) - 0.0001092 * P + 236.1 / ET_p +
@@ -40,7 +48,14 @@ calculate_wabila_green_roof <- function(area, height, kf, w_diff)
4048 # evaporation component
4149 v <- 1 - a
4250
43- c(a , g , v )
51+ result <- setNames(c(a , g , v ),
52+ c(" surface_runoff" , " infiltration" , " evaporation" ))
53+
54+ if (return_code ){
55+ return (cbind(code , result ))
56+ }
57+
58+ result
4459}
4560
4661# calculate_wabila_paved -------------------------------------------------------
@@ -131,7 +146,7 @@ estimate_swale_area <- function(kf)
131146
132147
133148# calculate_delta_mod ----------------------------------------------------------
134- calculate_delta_mod <- function (results_mod_1 , results_mod_2 ,
149+ calculate_delta_mod_v0 <- function (results_mod_1 , results_mod_2 ,
135150 has_codes = TRUE ,
136151 var_names = c(" surface_runoff" ,
137152 " infiltration" ,
@@ -171,3 +186,45 @@ calculate_delta_mod <- function(results_mod_1, results_mod_2,
171186 return (delta_mod )
172187
173188}
189+
190+ calculate_delta_mod <- function (results_mod_1 , results_mod_2 ,
191+ has_codes = TRUE ,
192+ col_patterns = c(" runoff|infiltration|evaporation" ),
193+ codes_name = " code" ){
194+
195+ # force result objects to be data.frames
196+ if (is.vector(results_mod_1 )){
197+ results_mod_1 <- as.data.frame(t(results_mod_1 ))
198+ result_mod_2 <- as.data.frame(t(results_mod_2 ))
199+ } else {
200+ results_mod_1 <- as.data.frame(results_mod_1 )
201+ results_mod_2 <- as.data.frame(results_mod_2 )
202+ }
203+
204+ stopifnot(nrow(results_mod_1 ) == nrow(results_mod_2 ))
205+
206+ var_names_1 <- grep(pattern = col_patterns , x = names(results_mod_1 ), value = TRUE )
207+ var_names_2 <- grep(pattern = col_patterns , x = names(results_mod_2 ), value = TRUE )
208+
209+ precipitation_1 <- rowSums(results_mod_1 [var_names_1 ])
210+ precipitation_2 <- rowSums(results_mod_2 [var_names_2 ])
211+ tolerance <- 1e-6
212+ stopifnot(all(abs(precipitation_1 - precipitation_2 ) < tolerance ))
213+
214+ delta_mod <- data.frame (
215+ delta_mod = rowSums(
216+ abs(results_mod_1 [var_names_1 ] - results_mod_2 [var_names_2 ])
217+ ) * 0.5 / precipitation_1
218+ )
219+
220+ if (has_codes ){
221+ stopifnot(
222+ identical(results_mod_1 [[codes_name ]], results_mod_2 [[codes_name ]])
223+ )
224+ codes <- results_mod_1 [[codes_name ]]
225+ return (cbind(code = codes , delta_mod = delta_mod ))
226+ }
227+
228+ delta_mod
229+
230+ }
0 commit comments