--- title: "Tutorial" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Tutorial} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` # Preparation ## Model Configuration and Network ```{r model-preparation} library(kwb.BerlinWaterModel.public) # read config files ########################################################## config_dir <- system.file("extdata/config/network_complete_mean-start-conc", package = "kwb.BerlinWaterModel.public") config <- kwb.BerlinWaterModel.public::config_read(config_dir = config_dir) config <- kwb.BerlinWaterModel.public::add_rain_direct_and_evaporation(config) config <- kwb.BerlinWaterModel.public::add_tracers(config) #config <- kwb.BerlinWaterModel.public::add_substances(config) network <- kwb.BerlinWaterModel.public::prepare_network(config) ``` ## Visualise Network ```{r visualise-network} ### Network graph net_complex <- kwb.BerlinWaterModel.public::plot_network_complex( network, config, show_labels = TRUE) net_complex ## Export network htmlwidgets::saveWidget(net_complex, file = "water-cycle_complex.html") ``` ## Prepare Simulation ```{r prepare-simulation} temporal_resolution <- "days" # "hours" or "days" col_date_or_datetime <- ifelse(temporal_resolution == "hours", "datetime", "date") inputs <- kwb.BerlinWaterModel.public::add_scenario( config = config, use_scenario = FALSE, # should scaling factors be used (in config$scenarios) or not? debug = TRUE) input_list <- kwb.BerlinWaterModel.public::prepare_input(temporal_resolution = temporal_resolution, config = config, cso = inputs$cso, inflows = inputs$inflows, share_wwtp_sch_to_nordgraben_timeseries = TRUE, rain = inputs$rain, evapo_p = inputs$evapo_p, ww = inputs$ww, wwtp = inputs$wwtp, bfshare_dynamic = FALSE, # use TRUE for dynamic bank filtration share (depending on Q) date_min = "2019-01-01", date_max = "2019-12-31") ``` # Run Simulation ## Water Quantity ```{r simulation-flows} system.time( flows_dynamic <- kwb.BerlinWaterModel.public::calculate_flows_auto( config = config, input_list = input_list, network = network, use_dynamic = TRUE, # FALSE: static values for flow shares at river branchings debug = TRUE) ) ### Analyse Results flows_stats <- kwb.BerlinWaterModel.public::calculate_flow_stats( flows = flows_dynamic) DT::datatable(flows_stats$per_section, caption = "Flow stats (per section)") DT::datatable(flows_stats$per_year, caption = "Flow stats (per year)") DT::datatable(flows_stats$per_month, caption = "Flow stats (per month)") flows_dynamic_neg_flows_stat <- kwb.BerlinWaterModel.public::get_reverse_flows_per_section( flows = flows_dynamic) DT::datatable(flows_dynamic_neg_flows_stat, caption = "Sections with negative flows in 2019") ``` ## Water Quality ```{r simulation-quality} system.time( qualities_00_dynamic_reverse <- kwb.BerlinWaterModel.public::calculate_qualities(input_list = input_list, flows = flows_dynamic, network = network, config = config, branchwise = TRUE, reverse_flow = TRUE, # use FALSE for calculation without considering backflows debug = FALSE) ) ### Save qualities for all sections in XLSX openxlsx::write.xlsx(x = qualities_00_dynamic_reverse$conc, file = "qualities_00_dynamic_reverse_concentrations.xlsx") # save RDS for flows and qualities saveRDS(flows_dynamic, file = "flows_dynamic.Rds") saveRDS(qualities_00_dynamic_reverse, file = "qualities_00_dynamic_reverse_concentrations.Rds") ```