From 9aabc0c0da0a0d5ec70a0df448dae65ac8663218 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Wed, 21 Oct 2020 12:30:20 +0200 Subject: [PATCH 01/89] multiple in and outflows for GLM --- DESCRIPTION | 2 +- R/export_flow.R | 787 ++++ R/export_inflow.R | 454 -- R/{format_inflow.R => format_flow.R} | 83 +- R/helper_flow.R | 106 + inst/extdata/feeagh/.Rhistory | 447 ++ inst/extdata/feeagh/LakeEnsemblR.yaml | 15 +- .../feeagh/LakeEnsemblR_outflow_standard.csv | 3878 +++++++++++++++++ 8 files changed, 5302 insertions(+), 470 deletions(-) create mode 100644 R/export_flow.R delete mode 100644 R/export_inflow.R rename R/{format_inflow.R => format_flow.R} (61%) create mode 100644 R/helper_flow.R create mode 100644 inst/extdata/feeagh/.Rhistory create mode 100644 inst/extdata/feeagh/LakeEnsemblR_outflow_standard.csv diff --git a/DESCRIPTION b/DESCRIPTION index 4cc1444b..8c7cc3a0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: LakeEnsemblR Type: Package Title: Run Ensemble of Lake Models -Version: 0.5.9 +Version: 0.6.0 Date: 2020-09-09 URL: https://github.com/aemon-j/LakeEnsemblR Author: Authors@R: c(person("Tadhg", "Moore", role = c("aut","cre"), diff --git a/R/export_flow.R b/R/export_flow.R new file mode 100644 index 00000000..0b677166 --- /dev/null +++ b/R/export_flow.R @@ -0,0 +1,787 @@ +#' Export LakeEnsemblR standardised flow files to model specific driver format +#' +#' Export in- anbd out-flow driver files for each model +#' +#' @param config_file filepath; to LakeEnsemblr yaml master config file +#' @param model vector; model to export driving data. Options include +#' c("GOTM", "GLM", "Simstrat", "FLake", "MyLake") +#' @param folder filepath; to folder which contains the model folders generated by export_config() +#' +#' @examples +#' \dontrun{ +#' export_inflow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) +#' } +#' @importFrom gotmtools get_yaml_value calc_cc input_yaml +#' @importFrom glmtools read_nml set_nml write_nml +#' +#' @export +export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), + folder = "."){ + + # It's advisable to set timezone to GMT in order to avoid errors when reading time + original_tz <- Sys.getenv("TZ") + Sys.setenv(TZ = "UTC") + + # Set working directory + oldwd <- getwd() + setwd(folder) + + # this way if the function exits for any reason, success or failure, these are reset: + on.exit({ + setwd(oldwd) + Sys.setenv(TZ = original_tz) + }) + + # check model input + model <- check_models(model) + +##-------------Read settings--------------- + # Use inflows + use_inflows <- get_yaml_value(config_file, "inflows", "use") + # Use outflows + use_outflows <- get_yaml_value(config_file, "outflows", "use") + if(!use_outflows) { + # Use counter outflows + use_c_outflows <- get_yaml_value(config_file, "inflows", "mass-balance") + num_outflows <- 0 + } else { + use_c_outflows <- FALSE + # number of outflows + num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") + # outflow depths + lvl_outflows <- get_yaml_value(config_file, "outflows", "outflow_lvl") + # Get scaling parameter + scale_param_out <- get_yaml_value(config_file, "outflows", "scale_param") + } + + # Get start & stop dates + start_date <- get_yaml_value(config_file, "time", "start") + stop_date <- get_yaml_value(config_file, "time", "stop") + + if(use_inflows) { + # Get scaling parameter + scale_param_inf <- get_yaml_value(config_file, "inflows", "scale_param") + # number of inflows + num_inflows <- get_yaml_value(config_file, "inflows", "number_inflows") + } + + +##---------------FLake------------- + + if("FLake" %in% model){ + fla_fil <- file.path(folder, get_yaml_value(config_file, "config_files", "FLake")) + + if(!use_inflows){ + input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".false.") + }else{ + input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".true.") + } + } + +##---------------GLM------------- + + if("GLM" %in% model){ + glm_nml <- file.path(folder, get_yaml_value(config_file, "config_files", "GLM")) + + # Read in nml and input parameters + nml <- read_nml(glm_nml) + # if no inflow or outflow is used this list is keep otherwise it is changed + inp_list <- list("num_inflows" = 0, "num_outlet" = 0) + # set inflow + if (use_inflows) { + inp_list$num_inflows <- num_inflows + inp_list <- c(inp_list, list("names_of_strms" = paste0("inflow_", 1:num_inflows), + "strm_hf_angle" = rep(65, num_inflows), + "strmbd_slope" = rep(2, num_inflows), + "strmbd_drag" = rep(0.016, num_inflows), + "inflow_factor"= rep(1, num_inflows), + "inflow_fl" = paste0("inflow_", 1:num_inflows,".csv"))) + } + # if used set inflow balancing outflow + if (use_c_outflows) { + max_elv <- get_nml_value(nml, "H") + inp_list$num_outlet <- 1 + inp_list <- c(inp_list, list("outflow_fl" = "outflow.csv", + "outl_elvs" = max(max_elv))) + } + # set outflows + if (use_outflows){ + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + lvl_outflows[lvl_outflows == -1] <- 0 + inp_list$num_outlet <- num_outflows + inp_list <- c(inp_list, list("flt_off_sw" = outf_surf, + "outl_elvs" = lvl_outflows, + "outflow_fl" = paste0("outflow_", 1:num_outflows, ".csv"), + "outflow_factor" = rep(1, num_outflows))) + } + + nml <- glmtools::set_nml(nml, arg_list = inp_list) + write_nml(nml, glm_nml) + + } + +##---------------GOTM------------- + + if("GOTM" %in% model){ + got_yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) + + ## Switch off streams + if(!use_inflows){ + # streams_switch(file = got_yaml, method = "off") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "flow", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "salt", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = + "method", value = 0) + }else{ + + # add additional inflows + if(num_inflows > 1) { + + for (i in num_inflows:2) { + doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) + } + + } + # add additional outflows + if(num_inflows > 1) { + + for (i in num_outflows:2) { + doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) + } + + } + + for (i in 1:num_inflows) { + + if(i == 1) { + inf_sec <- "inflow" + } else { + inf_sec <- paste0("inflow_", i) + } + + # streams_switch(file = got_yaml, method = "on") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + "method", value = 2) + + } + + for (i in 1:num_outflows) { + + if(i == 1) { + outf_sec <- "outflow" + } else { + outf_sec <- paste0("outflow_", i) + } + + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = + "method", value = 0) + } + } + + } + +##---------------Simstrat------------- + + if("Simstrat" %in% model){ + sim_par <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) + + # Turn off inflow + if(!use_inflows){ + ## Set Qin and Qout to 0 inflow + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + # In case Kw is a single value for the whole simulation: + inflow_line_2 <- "1" + inflow_line_3 <- "-1 0.00" + start_sim <- get_json_value(sim_par, "Simulation", "Start d") + end_sim <- get_json_value(sim_par, "Simulation", "End d") + inflow_line_4 <- paste(start_sim, 0.000) + inflow_line_5 <- paste(end_sim, 0.000) + + file_connection <- file("Simstrat/Qin.dat") + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), + file_connection) + close(file_connection) + file_connection <- file("Simstrat/Qout.dat") + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), + file_connection) + close(file_connection) + }else{ + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + # In case Kw is a single value for the whole simulation: + inflow_line_2 <- "1" + inflow_line_3 <- "-1 0.00" + start_sim <- get_json_value(sim_par, "Simulation", "Start d") + end_sim <- get_json_value(sim_par, "Simulation", "End d") + inflow_line_4 <- paste(start_sim, 0.000) + inflow_line_5 <- paste(end_sim, 0.000) + + file_connection <- file("Simstrat/Qout.dat") + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), + file_connection) + close(file_connection) + } + + } + +##---------------MyLake------------- + + if("MyLake" %in% model){ + # Load config file MyLake + load(get_yaml_value(config_file, "config_files", "MyLake")) + + if(!use_inflows){ + mylake_config[["Inflw"]] <- matrix(rep(0, 8 * length(seq.POSIXt(from = as.POSIXct(start_date), + to = as.POSIXct(stop_date), + by = "day"))), + ncol = 8) + + # save lake-specific config file for MyLake + temp_fil <- gsub(".*/", "", get_yaml_value(config_file, "config_files", "MyLake")) + save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) + } + } + +##-------------If inflow == TRUE--------------- + + if(use_inflows == TRUE){ + + inflow_file <- get_yaml_value(file = config_file, label = "inflows", key = "file") + # Check if file exists + if(!file.exists(inflow_file)){ + stop(inflow_file, " does not exist. Check filepath in ", config_file) + } + + ### Import data + message("Loading inflow data...") + inflow <- read.csv(file.path(folder, inflow_file), stringsAsFactors = FALSE) + inflow[, 1] <- as.POSIXct(inflow[, 1]) + # Check time step + tstep <- diff(as.numeric(inflow[, 1])) + + start_date <- get_yaml_value(config_file, "time", "start") + # Stop date + stop_date <- get_yaml_value(config_file, "time", "stop") + + inflow_start <- which(inflow$datetime == as.POSIXct(start_date)) + inflow_stop <- which(inflow$datetime == as.POSIXct(stop_date)) + + inflow <- inflow[inflow_start:inflow_stop, ] + + ### Naming conventions standard input + # remove numbers if multiple inflows are present + cln_inf <- colnames(inflow) + if(num_inflows > 1) { + cln_inf <- gsub("(\\w+)\\_\\d+\\>", "\\1", cln_inf) + } + # test if names are right + chck_inflow <- sapply(list(cln_inf), function(x) x %in% lake_var_dic$standard_name) + if(any(!chck_inflow)){ + chck_inflow[which(chck_inflow == FALSE)] <- sapply(list(cln_inf[which( + chck_inflow == FALSE)]), function(x) x %in% met_var_dic$standard_name) + + if(any(!chck_inflow)){ + stop("Colnames of inflow file are not in standard notation! ", + "They should be one of: \ndatetime\nFlow_metersCubedPerSecond\n", + "Water_Temperature_celsius\nSalinity_practicalSalinityUnits") + } + } + + ### Apply scaling + if(num_inflows == 1) { + inflow[["Flow_metersCubedPerSecond"]] <- inflow[["Flow_metersCubedPerSecond"]] * + scale_param_inf + } else if(num_inflows > 1) { + for (i in 1:num_inflows) { + inflow[[paste0("Flow_metersCubedPerSecond_", i)]] <- + inflow[[paste0("Flow_metersCubedPerSecond_", i)]] * scale_param_inf[i] + } + } + # if multiple inflows are present put them in a list + if(num_inflows > 1) { + inflow_ls <- list() + for (i in 1:num_inflows) { + inflow_ls[[paste0("inflow_", i)]] <- + data.frame(datetime = inflow$datetime, + Flow_metersCubedPerSecond = inflow[[paste0("Flow_metersCubedPerSecond_", i)]], + Water_Temperature_celsius = inflow[[paste0("Water_Temperature_celsius_", i)]], + Salinity_practicalSalinityUnits = + inflow[[paste0("Salinity_practicalSalinityUnits_", i)]] + ) + } + inflow <- inflow_ls + rm(inflow_ls) + } + + ##### FLake + if("FLake" %in% model){ + + if(num_inflows > 1) { + # flake_inflow <- average inflows from list + } else { + flake_inflow <- inflow + } + flake_inflow <- format_inflow(inflow = flake_inflow, model = "FLake", config_file = config_file) + + flake_outfile <- "Tinflow" + + flake_outfpath <- file.path(folder, "FLake", flake_outfile) + + write.table(flake_inflow, flake_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = FALSE) + + + temp_fil <- get_yaml_value(config_file, "config_files", "FLake") + input_nml(temp_fil, label = "inflow", key = "time_step_number", nrow(flake_inflow)) + + message("FLake: Created file ", file.path(folder, "FLake", flake_outfile)) + + if(use_outflows){ + message("FLake does not need outflows, as mass fluxes are not considered.") + } + + } + + ###### GLM + if("GLM" %in% model){ + if(num_inflows == 1) { + glm_inflow <- format_inflow(inflow = inflow, model = "GLM", config_file = config_file) + + inflow_outfile <- file.path("GLM", "inflow_1.csv") + write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", "inflow_file.csv")) + } else if (num_inflows > 1) { + for (i in 1:num_inflows) { + glm_inflow <- format_inflow(inflow = inflow[[i]], model = "GLM", + config_file = config_file) + + inflow_outfile <- file.path("GLM", paste0("inflow_", i, ".csv")) + write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", paste0("inflow_", i, ".csv"))) + } + } + + if(use_c_outflows) { + + glm_outflow <- glm_inflow[, c("Time", "FLOW")] + outflow_outfile <- file.path("GLM", "outflow.csv") + write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created outflow file ", file.path(folder, "GLM", "outflow.csv")) + } + } + + ##### GOTM + if("GOTM" %in% model){ + + yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) + + gotm_outfile <- "inflow_file.dat" + + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) + + gotm_inflow <- format_inflow(inflow, model = "GOTM", config_file = config_file) + + #Scale met + if(!is.null(scale_param_inf)){ + scale_met(gotm_inflow, pars = scale_param_inf, model = "GOTM", out_file = gotm_outfpath) + }else{ + # Write to file + write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = TRUE) + } + + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) + + if(use_c_outflows){ + temp_fil <- get_yaml_value(config_file, "config_files", "GOTM") + got_yaml <- file.path(folder, temp_fil) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = + "method", value = 0) + + gotm_outflow <- gotm_inflow[, c(1:2)] + gotm_outflow[,2] <- gotm_outflow[,2] * -1 + gotm_outflowfile <- "outflow_file.dat" + gotm_outflowfpath <- file.path(folder, "GOTM", gotm_outflowfile) + + write.table(gotm_outflow, gotm_outflowfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = TRUE) + + message("GOTM: Created outflow file ", file.path(folder, "GOTM", gotm_outflowfile)) + } + + } + + ## Simstrat + if("Simstrat" %in% model){ + + inflow_outfile <- "Qin.dat" + temp_outfile <- "Tin.dat" + salt_outfile <- "Sin.dat" + par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) + + inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) + temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) + salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) + + sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) + + ## Set Qin and Qout to 0 inflow + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + inflow_line_2 <- "1" + inflow_line_3 <- "-1 0.00" + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) + file_connection <- file(inflow_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + inflow_line_1 <- "Time [d]\tT_in [degC]" + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Water_Temperature_celsius) + file_connection <- file(temp_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + inflow_line_1 <- "Time [d]\tS_in [perMille]" + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Salinity_practicalSalinityUnits) + file_connection <- file(salt_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + + message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) + + if(use_c_outflows){ + outflow_outfile <- "Qout.dat" + par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) + + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) + + sim_inflow$Flow_metersCubedPerSecond <- sim_inflow$Flow_metersCubedPerSecond * (- 1) + + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + inflow_line_2 <- "1" + inflow_line_3 <- "-1 0.00" + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) + file_connection <- file(outflow_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) + } + } + + ## MyLake + if("MyLake" %in% model){ + + temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") + load(temp_fil) + + if(num_inflows > 1) { + # mylake_inflow <- average inflows from list + } else { + mylake_inflow <- inflow + } + + mylake_inflow <- format_inflow(inflow = mylake_inflow, model = "MyLake", config_file = config_file) + + # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive + # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] + dummy_inflow <- matrix(rep(1e-10, 8 * + length(seq.POSIXt(from = as.POSIXct(start_date), + to = as.POSIXct(stop_date), + by = "day"))), + ncol = 8) + dummy_inflow[, 1] <- mylake_inflow$Flow_metersCubedPerDay + dummy_inflow[, 2] <- mylake_inflow$Water_Temperature_celsius + dummy_inflow[, 5] <- dummy_inflow[, 5] * 1e7 + dummy_inflow[, 6] <- dummy_inflow[, 6] * 1e1 + + + mylake_config[["Inflw"]] <- dummy_inflow + + temp_fil <- gsub(".*/", "", temp_fil) + # save lake-specific config file for MyLake + save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) + + message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) + + if(use_outflows){ + message("MyLake does not need specific outflows, as it employs automatic overflow.") + } + } + } + + ##-------------If outflow == TRUE--------------- + + if(use_outflows == TRUE){ + + outflow_file <- get_yaml_value(file = config_file, label = "outflows", key = "file") + # Check if file exists + if(!file.exists(outflow_file)){ + stop(outflow_file, " does not exist. Check filepath in ", config_file) + } + + ### Import data + message("Loading outflow data...") + outflow <- read.csv(file.path(folder, outflow_file), stringsAsFactors = FALSE) + outflow[, 1] <- as.POSIXct(outflow[, 1]) + # Check time step + tstep <- diff(as.numeric(outflow[, 1])) + + start_date <- get_yaml_value(config_file, "time", "start") + # Stop date + stop_date <- get_yaml_value(config_file, "time", "stop") + + outflow_start <- which(outflow$datetime == as.POSIXct(start_date)) + outflow_stop <- which(outflow$datetime == as.POSIXct(stop_date)) + + outflow <- outflow[outflow_start:outflow_stop, ] + + ### Naming conventions standard input + # remove numbers if multiple inflows are present + cln_outf <- colnames(outflow) + if(num_outflows > 1) { + cln_outf <- gsub("(\\w+)\\_\\d+\\>", "\\1", cln_outf) + } + # test if names are right + chck_outflow <- sapply(list(cln_outf), function(x) x %in% lake_var_dic$standard_name) + if(any(!chck_outflow)){ + chck_outflow[which(chck_outflow == FALSE)] <- sapply(list(cln_outf[which( + chck_outflow == FALSE)]), function(x) x %in% met_var_dic$standard_name) + + if(any(!chck_outflow)){ + stop("Colnames of outflow file are not in standard notation! ", + "They should be one of: \ndatetime\nFlow_metersCubedPerSecond\n", + "Water_Temperature_celsius\nSalinity_practicalSalinityUnits") + } + } + ## appy scaling + if(num_outflows == 1) { + outflow[["Flow_metersCubedPerSecond"]] <- outflow[["Flow_metersCubedPerSecond"]] * + scale_param_out + } else if(num_outflows > 1) { + for (i in 1:num_outflows) { + outflow[[paste0("Flow_metersCubedPerSecond_", i)]] <- + outflow[[paste0("Flow_metersCubedPerSecond_", i)]] * scale_param_out[i] + } + } + + # if multiple outflows are present put them in a list + if(num_outflows > 1) { + outflow_ls <- list() + for (i in 1:num_outflows) { + outflow_ls[[paste0("outflow_", i)]] <- + data.frame(datetime = inflow$datetime, + Flow_metersCubedPerSecond = outflow[[paste0("Flow_metersCubedPerSecond_", i)]]) + } + outflow <- outflow_ls + rm(outflow_ls) + } + + # FLake + ##### + if("FLake" %in% model){ + message("FLake does not need outflows, as mass fluxes are not considered.") + } + + # GLM + ##### + if("GLM" %in% model){ + if(num_outflows == 1) { + glm_outflow <- format_outflow(outflow = outflow, model = "GLM", config_file = config_file) + + outflow_outfile <- file.path("GLM", "outflow.csv") + write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", "outflow_file.csv")) + } else if (num_outflows > 1) { + for (i in 1:num_outflows) { + glm_outflow <- format_outflow(outflow = outflow[[i]], model = "GLM", + config_file = config_file) + + outflow_outfile <- file.path("GLM", paste0("outflow_", i, ".csv")) + write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", paste0("outflow_", i, ".csv"))) + } + } + } + + ## GOTM + if("GOTM" %in% model){ + + yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) + + gotm_outfile <- "inflow_file.dat" + + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) + + gotm_inflow <- format_inflow(inflow, model = "GOTM", config_file = config_file) + + #Scale met + if(!is.null(scale_param_inf)){ + scale_met(gotm_inflow, pars = scale_param_inf, model = "GOTM", out_file = gotm_outfpath) + }else{ + # Write to file + write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = TRUE) + } + + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) + + if(use_c_outflows){ + temp_fil <- get_yaml_value(config_file, "config_files", "GOTM") + got_yaml <- file.path(folder, temp_fil) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = + "method", value = 0) + + gotm_outflow <- gotm_inflow[, c(1:2)] + gotm_outflow[,2] <- gotm_outflow[,2] * -1 + gotm_outflowfile <- "outflow_file.dat" + gotm_outflowfpath <- file.path(folder, "GOTM", gotm_outflowfile) + + write.table(gotm_outflow, gotm_outflowfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = TRUE) + + message("GOTM: Created outflow file ", file.path(folder, "GOTM", gotm_outflowfile)) + } + + } + + ## Simstrat + if("Simstrat" %in% model){ + + inflow_outfile <- "Qin.dat" + temp_outfile <- "Tin.dat" + salt_outfile <- "Sin.dat" + par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) + + inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) + temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) + salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) + + sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) + + ## Set Qin and Qout to 0 inflow + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + inflow_line_2 <- "1" + inflow_line_3 <- "-1 0.00" + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) + file_connection <- file(inflow_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + inflow_line_1 <- "Time [d]\tT_in [degC]" + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Water_Temperature_celsius) + file_connection <- file(temp_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + inflow_line_1 <- "Time [d]\tS_in [perMille]" + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Salinity_practicalSalinityUnits) + file_connection <- file(salt_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + # #Scale met + # if(!is.null(scale_param_inf)){ + # scale_met(sim_met, pars = scale_param_inf, model = "Simstrat", out_file = met_outfpath) + # } else { + # # Write to file + # write.table(sim_met, met_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + # col.names = TRUE) + # } + + ### Write the table in the present working directory + # input_json(file = par_file, label = "Input", key = "Forcing", "\"meteo_file.dat\"") + + message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) + + if(use_c_outflows){ + outflow_outfile <- "Qout.dat" + par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) + + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) + + sim_inflow$Flow_metersCubedPerSecond <- sim_inflow$Flow_metersCubedPerSecond * (- 1) + + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + inflow_line_2 <- "1" + inflow_line_3 <- "-1 0.00" + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) + file_connection <- file(outflow_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) + } + } + + ## MyLake + if("MyLake" %in% model){ + + temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") + load(temp_fil) + + mylake_inflow <- format_inflow(inflow = inflow, model = "MyLake", config_file = config_file) + + # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive + # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] + dummy_inflow <- matrix(rep(1e-10, 8 * + length(seq.POSIXt(from = as.POSIXct(start_date), + to = as.POSIXct(stop_date), + by = "day"))), + ncol = 8) + dummy_inflow[, 1] <- mylake_inflow$Flow_metersCubedPerDay + dummy_inflow[, 2] <- mylake_inflow$Water_Temperature_celsius + dummy_inflow[, 5] <- dummy_inflow[, 5] * 1e7 + dummy_inflow[, 6] <- dummy_inflow[, 6] * 1e1 + + + mylake_config[["Inflw"]] <- dummy_inflow + + temp_fil <- gsub(".*/", "", temp_fil) + # save lake-specific config file for MyLake + save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) + + message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) + + if(use_outflows){ + message("MyLake does not need specific outflows, as it employs automatic overflow.") + } + } + } + + + + message("export_inflow complete!") +} diff --git a/R/export_inflow.R b/R/export_inflow.R deleted file mode 100644 index 92b1ae0c..00000000 --- a/R/export_inflow.R +++ /dev/null @@ -1,454 +0,0 @@ -#' Export LakeEnsemblR standardised inflow files to model specific driver format -#' -#' Export inflow driver files for each model -#' -#' @param config_file filepath; to LakeEnsemblr yaml master config file -#' @param model vector; model to export driving data. Options include -#' c("GOTM", "GLM", "Simstrat", "FLake", "MyLake") -#' @param folder filepath; to folder which contains the model folders generated by export_config() -#' -#' @examples -#' \dontrun{ -#' export_inflow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) -#' } -#' @importFrom gotmtools get_yaml_value calc_cc input_yaml -#' @importFrom glmtools read_nml set_nml write_nml -#' -#' @export -export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), - folder = "."){ - - # It's advisable to set timezone to GMT in order to avoid errors when reading time - original_tz <- Sys.getenv("TZ") - Sys.setenv(TZ = "UTC") - - # Set working directory - oldwd <- getwd() - setwd(folder) - - # this way if the function exits for any reason, success or failure, these are reset: - on.exit({ - setwd(oldwd) - Sys.setenv(TZ = original_tz) - }) - - # check model input - model <- check_models(model) - -##-------------Read settings--------------- - # Use inflows - use_inflows <- get_yaml_value(config_file, "inflows", "use") - # Use counter outflows - use_outflows <- get_yaml_value(config_file, "inflows", "mass-balance") - - # Get start & stop dates - start_date <- get_yaml_value(config_file, "time", "start") - stop_date <- get_yaml_value(config_file, "time", "stop") - - # Get scaling parameter - scale_param <- get_yaml_value(config_file, "inflows", "scale_param") - -##---------------FLake------------- - - if("FLake" %in% model){ - fla_fil <- file.path(folder, get_yaml_value(config_file, "config_files", "FLake")) - - if(!use_inflows){ - input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".false.") - }else{ - input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".true.") - } - } - -##---------------GLM------------- - - if("GLM" %in% model){ - glm_nml <- file.path(folder, get_yaml_value(config_file, "config_files", "GLM")) - - # Read in nml and input parameters - nml <- read_nml(glm_nml) - - if(!use_inflows){ - inp_list <- list("num_inflows" = 0, - "num_outlet" = 0) - }else{ - inp_list <- list("num_inflows" = 1, - "num_outlet" = 0) - } - - nml <- glmtools::set_nml(nml, arg_list = inp_list) - write_nml(nml, glm_nml) - - } - -##---------------GOTM------------- - - if("GOTM" %in% model){ - got_yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) - - ## Switch off streams - if(!use_inflows){ - # streams_switch(file = got_yaml, method = "off") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "flow", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "salt", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = - "method", value = 0) - }else{ - # streams_switch(file = got_yaml, method = "on") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "temp", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "salt", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = - "method", value = 0) - } - - } - -##---------------Simstrat------------- - - if("Simstrat" %in% model){ - sim_par <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - - # Turn off inflow - if(!use_inflows){ - ## Set Qin and Qout to 0 inflow - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - # In case Kw is a single value for the whole simulation: - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - start_sim <- get_json_value(sim_par, "Simulation", "Start d") - end_sim <- get_json_value(sim_par, "Simulation", "End d") - inflow_line_4 <- paste(start_sim, 0.000) - inflow_line_5 <- paste(end_sim, 0.000) - - file_connection <- file("Simstrat/Qin.dat") - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), - file_connection) - close(file_connection) - file_connection <- file("Simstrat/Qout.dat") - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), - file_connection) - close(file_connection) - }else{ - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - # In case Kw is a single value for the whole simulation: - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - start_sim <- get_json_value(sim_par, "Simulation", "Start d") - end_sim <- get_json_value(sim_par, "Simulation", "End d") - inflow_line_4 <- paste(start_sim, 0.000) - inflow_line_5 <- paste(end_sim, 0.000) - - file_connection <- file("Simstrat/Qout.dat") - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), - file_connection) - close(file_connection) - } - - } - -##---------------MyLake------------- - - if("MyLake" %in% model){ - # Load config file MyLake - load(get_yaml_value(config_file, "config_files", "MyLake")) - - if(!use_inflows){ - mylake_config[["Inflw"]] <- matrix(rep(0, 8 * length(seq.POSIXt(from = as.POSIXct(start_date), - to = as.POSIXct(stop_date), - by = "day"))), - ncol = 8) - - # save lake-specific config file for MyLake - temp_fil <- gsub(".*/", "", get_yaml_value(config_file, "config_files", "MyLake")) - save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) - } - } - -##-------------If inflow == TRUE--------------- - - if(use_inflows == TRUE){ - - inflow_file <- get_yaml_value(file = config_file, label = "inflows", key = "file") - # Check if file exists - if(!file.exists(inflow_file)){ - stop(inflow_file, " does not exist. Check filepath in ", config_file) - } - - ### Import data - message("Loading inflow data...") - inflow <- read.csv(file.path(folder, inflow_file), stringsAsFactors = FALSE) - inflow[, 1] <- as.POSIXct(inflow[, 1]) - # Check time step - tstep <- diff(as.numeric(inflow[, 1])) - - start_date <- get_yaml_value(config_file, "time", "start") - # Stop date - stop_date <- get_yaml_value(config_file, "time", "stop") - - inflow_start <- which(inflow$datetime == as.POSIXct(start_date)) - inflow_stop <- which(inflow$datetime == as.POSIXct(stop_date)) - - inflow <- inflow[inflow_start:inflow_stop, ] - - ### Naming conventions standard input - # test if names are right - chck_inflow <- sapply(list(colnames(inflow)), function(x) x %in% lake_var_dic$standard_name) - if(any(!chck_inflow)){ - chck_inflow[which(chck_inflow == FALSE)] <- sapply(list(colnames(inflow[which( - chck_inflow == FALSE)])), function(x) x %in% met_var_dic$standard_name) - - if(any(!chck_inflow)){ - stop("Colnames of inflow file are not in standard notation! ", - "They should be one of: \ndatetime\nFlow_metersCubedPerSecond\n", - "Water_Temperature_celsius\nSalinity_practicalSalinityUnits") - } - } - - ### Apply scaling - inflow[["Flow_metersCubedPerSecond"]] <- inflow[["Flow_metersCubedPerSecond"]] * scale_param - - # FLake - ##### - if("FLake" %in% model){ - - flake_inflow <- format_inflow(inflow = inflow, model = "FLake", config_file = config_file) - - flake_outfile <- "Tinflow" - - flake_outfpath <- file.path(folder, "FLake", flake_outfile) - - - #Scale met - if(!is.null(scale_param)){ - scale_met(flake_inflow, pars = scale_param, model = "FLake", out_file = flake_outfpath) - }else{ - # Write to file - write.table(flake_inflow, flake_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = FALSE) - } - - temp_fil <- get_yaml_value(config_file, "config_files", "FLake") - input_nml(temp_fil, label = "inflow", key = "time_step_number", nrow(flake_inflow)) - - message("FLake: Created file ", file.path(folder, "FLake", flake_outfile)) - - if(use_outflows){ - message("FLake does not need outflows, as mass fluxes are not considered.") - } - - } - - # GLM - ##### - if("GLM" %in% model){ - glm_inflow <- format_inflow(inflow = inflow, model = "GLM", config_file = config_file) - - inflow_outfile <- file.path("GLM", "inflow_file.csv") - - #Scale met - if(!is.null(scale_param)){ - scale_met(glm_inflow, pars = scale_param, model = "GLM", out_file = inflow_outfile) - } else { - # Write to file - write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) - } - - # Input to nml file - nml_path <- file.path(folder, get_yaml_value(config_file, "config_files", "GLM")) - nml <- glmtools::read_nml(nml_path) - - nml_list <- list("inflow_fl" = "inflow_file.csv") - nml <- glmtools::set_nml(nml, arg_list = nml_list) - - glmtools::write_nml(nml, nml_path) - message("GLM: Created file ", file.path(folder, "GLM", "inflow_file.csv")) - - if(use_outflows){ - nml_list <- list("num_outlet" = 1, "outflow_fl" = "outflow.csv") - nml <- glmtools::set_nml(nml, arg_list = nml_list) - glmtools::write_nml(nml, nml_path) - - max_elv <- get_nml_value(nml, "H") - nml <- glmtools::set_nml(nml, arg_list = list("outl_elvs" = max(max_elv))) - glmtools::write_nml(nml, nml_path) - - glm_outflow <- glm_inflow[, c("Time", "FLOW")] - outflow_outfile <- file.path("GLM", "outflow.csv") - write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) - - message("GLM: Created outflow file ", file.path(folder, "GLM", "outflow.csv")) - } - - } - - ## GOTM - if("GOTM" %in% model){ - - yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) - - gotm_outfile <- "inflow_file.dat" - - gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - - gotm_inflow <- format_inflow(inflow, model = "GOTM", config_file = config_file) - - #Scale met - if(!is.null(scale_param)){ - scale_met(gotm_inflow, pars = scale_param, model = "GOTM", out_file = gotm_outfpath) - }else{ - # Write to file - write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = TRUE) - } - - message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) - - if(use_outflows){ - temp_fil <- get_yaml_value(config_file, "config_files", "GOTM") - got_yaml <- file.path(folder, temp_fil) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = - "method", value = 0) - - gotm_outflow <- gotm_inflow[, c(1:2)] - gotm_outflow[,2] <- gotm_outflow[,2] * -1 - gotm_outflowfile <- "outflow_file.dat" - gotm_outflowfpath <- file.path(folder, "GOTM", gotm_outflowfile) - - write.table(gotm_outflow, gotm_outflowfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = TRUE) - - message("GOTM: Created outflow file ", file.path(folder, "GOTM", gotm_outflowfile)) - } - - } - - ## Simstrat - if("Simstrat" %in% model){ - - inflow_outfile <- "Qin.dat" - temp_outfile <- "Tin.dat" - salt_outfile <- "Sin.dat" - par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - - inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) - temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) - salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) - - sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) - - ## Set Qin and Qout to 0 inflow - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) - file_connection <- file(inflow_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - inflow_line_1 <- "Time [d]\tT_in [degC]" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Water_Temperature_celsius) - file_connection <- file(temp_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - inflow_line_1 <- "Time [d]\tS_in [perMille]" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Salinity_practicalSalinityUnits) - file_connection <- file(salt_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - # #Scale met - # if(!is.null(scale_param)){ - # scale_met(sim_met, pars = scale_param, model = "Simstrat", out_file = met_outfpath) - # } else { - # # Write to file - # write.table(sim_met, met_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - # col.names = TRUE) - # } - - ### Write the table in the present working directory - # input_json(file = par_file, label = "Input", key = "Forcing", "\"meteo_file.dat\"") - - message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) - - if(use_outflows){ - outflow_outfile <- "Qout.dat" - par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - - outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) - - sim_inflow$Flow_metersCubedPerSecond <- sim_inflow$Flow_metersCubedPerSecond * (- 1) - - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) - file_connection <- file(outflow_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) - } - } - - ## MyLake - if("MyLake" %in% model){ - - temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") - load(temp_fil) - - mylake_inflow <- format_inflow(inflow = inflow, model = "MyLake", config_file = config_file) - - # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive - # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] - dummy_inflow <- matrix(rep(1e-10, 8 * - length(seq.POSIXt(from = as.POSIXct(start_date), - to = as.POSIXct(stop_date), - by = "day"))), - ncol = 8) - dummy_inflow[, 1] <- mylake_inflow$Flow_metersCubedPerDay - dummy_inflow[, 2] <- mylake_inflow$Water_Temperature_celsius - dummy_inflow[, 5] <- dummy_inflow[, 5] * 1e7 - dummy_inflow[, 6] <- dummy_inflow[, 6] * 1e1 - - - mylake_config[["Inflw"]] <- dummy_inflow - - temp_fil <- gsub(".*/", "", temp_fil) - # save lake-specific config file for MyLake - save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) - - message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) - - if(use_outflows){ - message("MyLake does not need specific outflows, as it employs automatic overflow.") - } - } - } - - message("export_inflow complete!") -} diff --git a/R/format_inflow.R b/R/format_flow.R similarity index 61% rename from R/format_inflow.R rename to R/format_flow.R index d94f495b..a18bd555 100644 --- a/R/format_inflow.R +++ b/R/format_flow.R @@ -13,18 +13,6 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ - lat <- get_yaml_value(file = config_file, label = "location", key = "latitude") - lon <- get_yaml_value(file = config_file, label = "location", key = "longitude") - elev <- get_yaml_value(file = config_file, label = "location", key = "elevation") - - ### Check what inflow data is available, as this determines what model forcing option to use - chck_inflow <- sapply(lake_var_dic$standard_name, function(x) x %in% colnames(inflow)) - names(chck_inflow) <- lake_var_dic$short_name - - ## list with long standard names - l_names <- as.list(lake_var_dic$standard_name) - names(l_names) <- lake_var_dic$short_name - hyp_file <- get_yaml_value(config_file, "location", "hypsograph") if(!file.exists(hyp_file)){ stop(hyp_file, " does not exist. Check filepath in ", config_file) @@ -40,7 +28,7 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ colnames(flake_inflow) <- c("FLOW", "TEMP") - flake_inflow[, 1] <- (flake_inflow[, 1]) / max(hyp) + flake_inflow[, 1] <- (flake_inflow[, 1]) / max(hyp$Area_meterSquared) #Reduce number of digits flake_inflow <- signif(flake_inflow, digits = 8) @@ -117,3 +105,72 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ return(mylake_inflow) } } + + +#' Format outflow data for each model +#'@description +#' Format dataframe into shape for the specified model +#' +#' @name format_outflow +#' @param outflow dataframe; as read.csv() from standardised input. +#' @param model character; Model for which scaling parameters will be applied. Options include +#' c('GOTM', 'GLM', 'Simstrat', 'FLake') +#' @param config_file filepath; To LER config yaml file. Only used if model = 'GOTM' +#' @param folder filepath; to folder which contains the model folders generated by export_config() +#' @return dataframe of met data in the model format +#' @export +format_outflow <- function(outflow, model, config_file, folder = "."){ + + + if("FLake" %in% model){ + stop("FLake does not need outflows, as mass fluxes are not considered.") + } + + if("GLM" %in% model){ + + glm_outflow <- outflow + + glm_outflow <- glm_outflow[, c("datetime", "Flow_metersCubedPerSecond")] + + colnames(glm_outflow) <- c("Time", "FLOW") + glm_outflow[, 1] <- format(glm_outflow[, 1], format = "%Y-%m-%d %H:%M:%S") + + #Reduce number of digits + glm_outflow[, -1] <- signif(glm_outflow[, -1], digits = 8) + + return(glm_outflow) + } + + if("GOTM" %in% model){ + + gotm_outflow <- outflow + + gotm_outflow <- gotm_outflow[, c("datetime", "Flow_metersCubedPerSecond")] + + colnames(gotm_outflow)[1] <- paste0("!", colnames(gotm_outflow)[1]) + gotm_outflow[, 1] <- format(gotm_outflow[, 1], "%Y-%m-%d %H:%M:%S") + + #Reduce number of digits + gotm_outflow[, -1] <- signif(gotm_outflow[, -1], digits = 8) + + return(gotm_outflow) + } + + if("Simstrat" %in% model){ + + simstrat_outflow <- outflow + + simstrat_outflow <- simstrat_outflow[, c("datetime", "Flow_metersCubedPerSecond")] + + simstrat_outflow[, 1] <- format(simstrat_outflow[, 1], "%Y-%m-%d %H:%M:%S") + + #Reduce number of digits + simstrat_outflow[, -1] <- signif(simstrat_outflow[, -1], digits = 8) + + return(simstrat_outflow) + } + + if("MyLake" %in% model) { + stop("MyLake does not need specific outflows, as it employs automatic overflow.") + } +} \ No newline at end of file diff --git a/R/helper_flow.R b/R/helper_flow.R new file mode 100644 index 00000000..4a3fcf65 --- /dev/null +++ b/R/helper_flow.R @@ -0,0 +1,106 @@ +#' douplicate section in gotm.yaml +#'@description +#' doublicate a section in the gotm.yaml file. typically used for in- or outflow +#' +#' @name doubl_yaml_sec +#' @param yaml_file filepath; to gotm.yaml +#' @param sec_name name of the section to doublicate +#' @param ap appendix for the name of the section +#' @noRd + + +doubl_yaml_sec <- function(yaml_file, sec_name, ap) { + + # read yaml file + yml <- readLines(yaml_file) + + # Prevent from finding labels/keys in comments + yml_no_comments <- unname(sapply(yml, function(x) strsplit(x, "#")[[1]][1])) + + #Find index of section + sec_id <- paste0(sec_name,":") + ind_sec <- grep(paste0("\\b", sec_id), yml_no_comments) + + if(length(ind_sec) == 0){ + stop(sec_name, " not found in ", yaml_file) + } + + # find index of next section + find <- TRUE + # index + i <- 1 + # number of whitespace in section + lws <- nchar(strsplit(yml_no_comments[ind_sec], sec_id)[[1]][1]) + while(find) { + + ws <- nchar(strsplit(yml_no_comments[ind_sec + i], "\\w+\\:")[[1]][1]) + if(ws > lws) { + i <- i +1 + } else { + find <- FALSE + } + + } + + # whole sdction + sec_yml <- yml[ind_sec:(ind_sec + i - 1)] + # change name by adding a number + sec_yml[1] <- gsub(pattern = sec_name, replacement = paste0(sec_name, ap), sec_yml[1]) + + # insert section + yml_out <- c(yml[1:(ind_sec + i -1)], sec_yml, yml[(ind_sec + i):length(yml)]) + + #Write to file + writeLines(yml_out, yaml_file) +} + + +#' remove section in gotm.yaml +#'@description +#' remove a section in the gotm.yaml file. typically used for in- or outflow +#' +#' @name doubl_yaml_sec +#' @param yaml_file filepath; to gotm.yaml +#' @param sec_name name of the section to be removed +#' @noRd + + +rm_yaml_sec <- function(yaml_file, sec_name) { + + # read yaml file + yml <- readLines(yaml_file) + + # Prevent from finding labels/keys in comments + yml_no_comments <- unname(sapply(yml, function(x) strsplit(x, "#")[[1]][1])) + + #Find index of section + sec_id <- paste0(sec_name,":") + ind_sec <- grep(paste0("\\b", sec_id), yml_no_comments) + + if(length(ind_sec) == 0){ + stop(sec_name, " not found in ", yaml_file) + } + + # find index of next section + find <- TRUE + # index + i <- 1 + # number of whitespace in section + lws <- nchar(strsplit(yml_no_comments[ind_sec], sec_id)[[1]][1]) + while(find) { + + ws <- nchar(strsplit(yml_no_comments[ind_sec + i], "\\w+\\:")[[1]][1]) + if(ws > lws) { + i <- i +1 + } else { + find <- FALSE + } + + } + + # remove section + yml_out <- yml[c(1:(ind_sec-1),(ind_sec + i):length(yml))] + + #Write to file + writeLines(yml_out, yaml_file) +} diff --git a/inst/extdata/feeagh/.Rhistory b/inst/extdata/feeagh/.Rhistory new file mode 100644 index 00000000..8668bf97 --- /dev/null +++ b/inst/extdata/feeagh/.Rhistory @@ -0,0 +1,447 @@ +install.packages("FME") +install.packages("deSolve") +library(devtools) +rprofile_path = file.path(Sys.getenv("HOME"), +".Rprofile") +write(’\noptions(repos=c(getOption(\’repos\’), +CRAN=\’https://cloud.r-project.org\’, +USGS=\’https://owi.usgs.gov/R\’))\n’, +rprofile_path, +append = TRUE) +cat(’Your Rprofile has been updated to include GRAN. +Please restart R for changes to take effect.’) +install.packages("glmtools") +rprofile_path = file.path(Sys.getenv("HOME"), +".Rprofile") +write('\noptions(repos=c(getOption(\'repos\'), +CRAN=\'https://cloud.r-project.org\', +USGS=\'https://owi.usgs.gov/R\'))\n', +rprofile_path, +append = TRUE) +cat('Your Rprofile has been updated to include GRAN. +Please restart R for changes to take effect.') +install.packages("glmtools") +install.packages("glmtools") +library(GLMr) +glm_version() +glm_version() +library(GLMr) +?run_glm +?system +?system2 +shiny::runApp('Documents/R/shiny/simple_1') +runApp('Documents/R/shiny/simple_1') +install.packages("RPostgreSQL") +require("RPostgreSQL") +install.packages("RPostgreSQL") +require("RPostgreSQL") +# create a connection +# save the password that we can "hide" it as best as we can by collapsing it +pw <- { +"rasberryMSQL" +} +# loads the PostgreSQL driver +drv <- dbDriver("PostgreSQL") +# creates a connection to the postgres database +# note that "con" will be used later in each connection to the database +con <- dbConnect(drv, dbname = "pi", +host = "192.168.2.139", port = 5432, +user = "pi", password = pw) +rm(pw) # removes the password +# check for the cartable +dbExistsTable(con, "cartable") +# TRUE +# creates df, a data.frame with the necessary columns +data(mtcars) +df <- data.frame(carname = rownames(mtcars), +mtcars, +row.names = NULL) +df$carname <- as.character(df$carname) +rm(mtcars) +# writes df to the PostgreSQL database "postgres", table "cartable" +dbWriteTable(con, "cartable", +value = df, append = TRUE, row.names = FALSE) +# query the data from postgreSQL +df_postgres <- dbGetQuery(con, "SELECT * from cartable") +df_postgres +# compares the two data.frames +identical(df, df_postgres) +# Basic Graph of the Data +require(ggplot2) +ggplot(df_postgres, aes(x = as.factor(cyl), y = mpg, fill = as.factor(cyl))) + +geom_boxplot() + theme_bw() +install.packages("ggplot2") +# get info from db +dbGetInfo(con) +# list available tables +dbListTables(con) +# Basic Graph of the Data +require(ggplot2) +# Basic Graph of the Data +ggplot(df_postgres, aes(x = as.factor(cyl), y = mpg, fill = as.factor(cyl))) + +geom_boxplot() + theme_bw() +# query the data from postgreSQL +df_postgres <- dbGetQuery(con, "SELECT * from einkaufslite") +df_postgres +# add entry to table +dbAppendTable(con,"einlkauslite",data.frame(name = "Hannes", +item = "Test item 2", +price = 13.4, +date = as.Date("2019-05-12"))) +# add entry to table +dbAppendTable(con,"einkaufslite",data.frame(name = "Hannes", +item = "Test item 2", +price = 13.4, +date = as.Date("2019-05-12"))) +data.frame(name = "Hannes", +item = "Test item 2", +price = 13.4, +date = as.Date("2019-05-12") +) +item2 <- df_postgres +item2$item <- "item 2" +item2$price <- 12.34 +# add entry to table +dbAppendTable(con,"einkaufslite",item2) +# add entry to table +dbWriteTable(con,"einkaufslite",item2,append = TRUE) +item2 +# add entry to table +dbWriteTable(con,"einkaufslite",data.frame(name = "Hannes", +item = "Test item 2", +price = 13.4, +date = as.Date("2019-05-12"), +row.names = FALSE),append = TRUE) +# add entry to table +dbWriteTable(con,"einkaufslite",data.frame(name = "Hannes", +item = "Test item 2", +price = 13.4, +date = as.Date("2019-05-12")), +row.names = FALSE,append = TRUE) +# list available tables +dbListTables(con) +# query the data from postgreSQL +dbGetQuery(con, "SELECT * from einkaufslite") +shiny::runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +today_ch <- as.POSIXct(date()) +date() +today_ch <- as.POSIXct(date(),format="%a %b %d %H %Y") +today_ch +as.POSIXct(date(),format="%a %b %d %H %Y") +format(as.POSIXct("2019-02-03"),format="%a %b %d %H %Y") +today_ch <- as.POSIXct(date(),format="%a %b %d %T %Y") +today_ch +format(as.POSIXct("2019-02-03"),format="%a %b %d %T %Y") +format(as.POSIXct("2019-05-14"),format="%a %b %d %T %Y") +Sys.Date() +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +# create a connection +# save the password that we can "hide" it as best as we can by collapsing it +pw <- { +"rasberryMSQL" +} +# loads the PostgreSQL driver +drv <- dbDriver("PostgreSQL") +# creates a connection to the postgres database +# note that "con" will be used later in each connection to the database +con <- dbConnect(drv, dbname = "pi", +host = "192.168.2.139", port = 5432, +user = "pi", password = pw) +rm(pw) # removes the password +# create a connection +# save the password that we can "hide" it as best as we can by collapsing it +pw <- { +"rasberryMSQL" +} +# loads the PostgreSQL driver +drv <- dbDriver("PostgreSQL") +# creates a connection to the postgres database +# note that "con" will be used later in each connection to the database +con <- dbConnect(drv, dbname = "pi", +host = "192.168.2.138", port = 5432, +user = "pi", password = pw) +rm(pw) # removes the password +# check for the cartable +dbExistsTable(con, "cartable") +# get info from db +dbGetInfo(con) +# list available tables +dbListTables(con) +# query the data from postgreSQL +dbGetQuery(con, "SELECT * from einkaufslite") +# close the connection +dbDisconnect(con) +dbUnloadDriver(drv) +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +runApp('ownCloud/shiny_ekl') +library(rLakeAnalyzer) +citation("GLM3r") +Iopt <- 17 +mu <- (I/Iopt) * exp(1 - (I/Iopt)) +mu_mon <- I/(I + 17) +plot(I, mu_mon, "l") +I <- seq(0, 350, by = 0.1) +mu <- (I/Iopt) * exp(1 - (I/Iopt)) +mu_mon <- I/(I + 17) +plot(I, mu_mon, "l") +mu <- (I/Iopt) * exp(1 - (I/Iopt)) +lines(I, mu, col = 2) +Iopt <- 40 +plot(I, mu_mon, "l") +lines(I, mu, col = 2) +Iopt <- 60 +mu <- (I/Iopt) * exp(1 - (I/Iopt)) +mu_mon <- I/(I + 17) +plot(I, mu_mon, "l") +lines(I, mu, col = 2) +Iopt <- 70 +mu <- (I/Iopt) * exp(1 - (I/Iopt)) +mu_mon <- I/(I + 17) +plot(I, mu_mon, "l") +lines(I, mu, col = 2) +vignette(LakeEnsemblR) +vignette() +library(devtools) +install_github("aemon-j/LakeEnsemblR", build_vignettes = T) +vignette() +vignette(LakeEnsemblR_vignette) +vignette("LakeEnsemblR_vignette") +citation(MyLakeR) +citation("MyLakeR") +citation("SimstratR") +citation("FLakeR") +citation("GOTMr") +setwd("~/Documents/Promotion/AEMONj/Software_projects/lakeensemblr/Test_LakeEnsemblR/example/feeagh") +config_file <- "LakeEnsemblR.yaml" +##-------------Read settings--------------- +# Use inflows +use_inflows <- get_yaml_value(config_file, "inflows", "use_inflows") +library(gotmtools) +library(LakeEnsemblR) +##-------------Read settings--------------- +# Use inflows +use_inflows <- get_yaml_value(config_file, "inflows", "use_inflows") +get_template() +get_template("LakeEnsemblR_config") +setwd("/mnt/5784eed2-67de-4788-8545-c30359ba5445/Documents/Promotion/AEMONj/Software_projects/lakeensemblr/LakeEnsemblR/inst/extdata/feeagh") +detach("package:LakeEnsemblR", unload = TRUE) +detach("package:gotmtools", unload = TRUE) +library(gotmtools) +library(LakeEnsemblR) +setwd("/mnt/5784eed2-67de-4788-8545-c30359ba5445/Documents/Promotion/AEMONj/Software_projects/lakeensemblr/Test_LakeEnsemblR") +#initial clean up +rm(list = ls()) +graphics.off() +cat("\f") +# set working directory +setwd(dirname(rstudioapi::getSourceEditorContext()$path)) +library(devtools) +#install_github("aemon-j/lakeensemblr", build_vignette = TRUE, ref = "devel") +#install_github("aemon-j/FLakeR", ref = "inflow") +#install_github("aemon-j/gotmr") +#install_github("gleon/glm3r") +#install_github("aemon-j/simstratr") +#install_github("aemon-j/mylaker") +# Load libraries +#library(gotmtools) +library(LakeEnsemblR) +library(ggpubr) +library(ggplot2) +#library(reshape2)# Copy template folder +template_folder <- system.file("extdata/feeagh", package= 'LakeEnsemblR') +dir.create('example') # Create example folder +file.copy(from = template_folder, to = 'example', recursive = TRUE) +setwd('example/feeagh') # Change working directory to example folder +# Set config file +config_file <- 'LakeEnsemblR.yaml' +model <- c("FLake", "GLM", "GOTM", "Simstrat", "MyLake") +# 1. Example - creates directories with all model setup +export_config(config_file = config_file, model = c("FLake", "GLM", "GOTM", "Simstrat", "MyLake"), +folder = ".") +label <- "location" +key <- "depth" +yml <- readLines(file) +file <- "LakeEnsemblR.yaml" +yml <- readLines(file) +# Prevent from finding labels/keys in comments +yml_no_comments <- unname(sapply(yml, function(x) strsplit(x, "#")[[1]][1])) +#Find index of label +if(is.null(label)){ +ind_label = 0 +}else{ +label_id <- paste0(label,':') +ind_label <- grep(paste0("\\b", label_id, "\\b"), yml_no_comments) +if(length(ind_label) == 0){ +stop(label, ' not found in ', file) +} +} +#Find index of key to replace +key_id <- paste0(' ',key, ':') +ind_key = grep(paste0("\\b", key_id, "\\b"), yml_no_comments) +ind_key +#Find index of key to replace +key_id <- paste0(' ',key, ':') +key_id +label_id +ind_label +#Find index of key to replace +key_id <- paste0(key, ':') +key_id +ind_key = grep(paste0("\\b", key_id, "\\b"), yml_no_comments) +ind_key +yml_no_comments +key_id +paste0("\\b", key_id, "\\b") +grep(paste0("\\b", key_id, "\\b"), yml_no_comments) +#Find index of key to replace +key_id <- paste0(' ',key, ':') +ind_key = grep(paste0("\\b", key_id, "\\b"), yml_no_comments) +ind_key +#Find index of key to replace +key_id <- paste0(' ',key, ':') +ind_key = grep(paste0("\\b", key_id, "\\b"), yml_no_comments) +ind_key = grep(paste0("\\b", key_id, "\\b"), yml_no_comments) +#Find index of key to replace +key_id <- paste0(' ',key, ':') +key_id +#Find index of key to replace +key_id <- paste0(' ',key, ':') +ind_key <- grep(key_id, yml_no_comments) +ind_key +ind_key <- ind_key[ind_key > ind_label] +ind_map <- ind_key[which.min(ind_key - ind_label)] +ind_map +ind_key +detach("package:LakeEnsemblR", unload = TRUE) +detach("package:gotmtools", unload = TRUE) +#initial clean up +rm(list = ls()) +graphics.off() +cat("\f") +# set working directory +setwd(dirname(rstudioapi::getSourceEditorContext()$path)) +library(devtools) +#install_github("aemon-j/lakeensemblr", build_vignette = TRUE, ref = "devel") +#install_github("aemon-j/FLakeR", ref = "inflow") +#install_github("aemon-j/gotmr") +#install_github("gleon/glm3r") +#install_github("aemon-j/simstratr") +#install_github("aemon-j/mylaker") +# Load libraries +#library(gotmtools) +library(LakeEnsemblR) +library(ggpubr) +library(ggplot2) +#library(reshape2)# Copy template folder +template_folder <- system.file("extdata/feeagh", package= 'LakeEnsemblR') +dir.create('example') # Create example folder +file.copy(from = template_folder, to = 'example', recursive = TRUE) +setwd('example/feeagh') # Change working directory to example folder +# Set config file +config_file <- 'LakeEnsemblR.yaml' +model <- c("FLake", "GLM", "GOTM", "Simstrat", "MyLake") +# 1. Example - creates directories with all model setup +export_config(config_file = config_file, model = c("FLake", "GLM", "GOTM", "Simstrat", "MyLake"), +folder = ".") +# 2. Run ensemble lake models +wtemp_list <- run_ensemble(config_file = config_file, +model = c("FLake", "GLM", "GOTM", "Simstrat", "MyLake"), +return_list = TRUE, parallel = TRUE) +## Plot model output using gotmtools/ggplot2 +# Extract names of all the variables in netCDF +ncdf <- 'output/ensemble_output.nc' +vars <- gotmtools::list_vars(ncdf) +vars # Print variables +p1 <- plot_heatmap(ncdf) + +scale_colour_gradientn(limits = c(0, 21), +colours = rev(RColorBrewer::brewer.pal(11, "Spectral"))) +p1 +# Plot ensemble mean at 0.9m +plot_ensemble(ncdf = ncdf, model = model, var = 'temp', depth = 0.9, boxwhisker = T, +residuals = T) +setwd("/mnt/5784eed2-67de-4788-8545-c30359ba5445/Documents/Promotion/AEMONj/Software_projects/lakeensemblr/LakeEnsemblR/inst/extdata/feeagh") +##-------------Read settings--------------- +# Use inflows +use_inflows <- get_yaml_value(config_file, "inflows", "use") +library(gotmtools) +##-------------Read settings--------------- +# Use inflows +use_inflows <- get_yaml_value(config_file, "inflows", "use") +# Use outflows +use_outflows <- get_yaml_value(config_file, "outflows", "use") +use_inflows +use_outflows +# number of outflows +num_outflows <- get_yaml_value(config_file, "ouflows", "number_outflows") +# Use outflows +use_outflows <- get_yaml_value(config_file, "outflows", "use") +use_outflows +# number of outflows +num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") +num_outflows +# outflow depths +lvl_outflows <- get_yaml_value(config_file, "outflows", "outflow_lvl") +lvl_outflows +# number of outflows +num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") +num_outflows +# outflow depths +lvl_outflows <- get_yaml_value(config_file, "outflows", "outflow_lvl") +lvl_outflows +# Get scaling parameter +scale_param_out <- get_yaml_value(config_file, "outflows", "scale_param") +scale_param_out +infl <- read.csv("LakeEnsemblR_inflow_standard.csv") +View(infl) +outfl <- infl +outfl <- outfl[, 1:2] +outfl$Flow_metersCubedPerSecond <- outfl$Flow_metersCubedPerSecond/2 +outfl$Flow_metersCubedPerSecond_2 <- outfl$Flow_metersCubedPerSecond +nms <- colnames(outfl) +colnames(outfl) +colnames(outfl)[2] +colnames(outfl)[2] <- "Flow_metersCubedPerSecond_1" +View(outfl) +data(LakeEnsemblR) +var_names_dic +lake_var_dic +scale_param_out +# Get start & stop dates +start_date <- get_yaml_value(config_file, "time", "start") +stop_date <- get_yaml_value(config_file, "time", "stop") +# Get scaling parameter +scale_param_inf <- get_yaml_value(config_file, "inflows", "scale_param") +fla_fil <- file.path(folder, get_yaml_value(config_file, "config_files", "FLake")) +fla_fil +folder <- "." +fla_fil <- file.path(folder, get_yaml_value(config_file, "config_files", "FLake")) +fla_fil +glm_nml <- file.path(folder, get_yaml_value(config_file, "config_files", "GLM")) +glm_nml +# number of inflows +num_inflows <- get_yaml_value(config_file, "inflows", "number_inflows") +num_inflows +outflow_file <- get_yaml_value(file = config_file, label = "outflows", key = "file") +outflow_file diff --git a/inst/extdata/feeagh/LakeEnsemblR.yaml b/inst/extdata/feeagh/LakeEnsemblR.yaml index 9053facd..5bc91066 100644 --- a/inst/extdata/feeagh/LakeEnsemblR.yaml +++ b/inst/extdata/feeagh/LakeEnsemblR.yaml @@ -33,8 +33,19 @@ input: inflows: use: true # use in- and outflows? [true/false] file: LakeEnsemblR_inflow_standard.csv # file with inflow data, with column headers according to LakeEnsemblR vocabulary [csv file; must be provided if inflows -> use is true] - scale_param: 1.0 # scaling factor for discharge in inflow, for example to correct for the percentage of catchment area drained by the inflow - mass-balance: true # enforce pseudo mass-balance by adding an artifical outflow for every inflow [true/false] + number_inflows: 1 # number of inflows in the inflow file + scale_param: 1.0 # scaling factor for discharge in inflow, for example to correct for the percentage of catchment area drained by the inflow. If there are more than one inflow in the inflow file, this must be a list with one value per inflow + mass-balance: true # enforce pseudo mass-balance by adding an artifical outflow for every inflow [true/false] only used if now outflows are given +outflows: + use: true # use outflows? [true/false] + file: LakeEnsemblR_outflow_standard.csv # file with inflow data, with column headers according to LakeEnsemblR vocabulary [csv file; must be provided if inflows -> use is true] + number_outflows: 2 # number of outflows in the outflow file + scale_param: # scaling factor for discharge in outflows. If there are more than one outflow in the outflow file, this must be a list with one value per outflow + - 1 + - 1 + outflow_lvl: # height of the outflow above the ground. If the outflow is a surface outflow use "-1". If there are more than one outflow in the outflow file, this must be a list with one value per outflow + - -1 + - 15 output: file: ensemble_output # name of output file, excluding extension format: netcdf # format [text/netcdf] diff --git a/inst/extdata/feeagh/LakeEnsemblR_outflow_standard.csv b/inst/extdata/feeagh/LakeEnsemblR_outflow_standard.csv new file mode 100644 index 00000000..4958d8dd --- /dev/null +++ b/inst/extdata/feeagh/LakeEnsemblR_outflow_standard.csv @@ -0,0 +1,3878 @@ +datetime,Flow_metersCubedPerSecond_1,Flow_metersCubedPerSecond_2 +2005-01-01 00:00:00,2.8123267395,2.8123267395 +2005-01-02 00:00:00,1.163358949,1.163358949 +2005-01-03 00:00:00,0.8894846005,0.8894846005 +2005-01-04 00:00:00,2.3222290545,2.3222290545 +2005-01-05 00:00:00,4.49579456,4.49579456 +2005-01-06 00:00:00,7.51912264,7.51912264 +2005-01-07 00:00:00,13.18521296,13.18521296 +2005-01-08 00:00:00,8.53353413,8.53353413 +2005-01-09 00:00:00,5.48555763,5.48555763 +2005-01-10 00:00:00,2.2854705495,2.2854705495 +2005-01-11 00:00:00,1.2669765235,1.2669765235 +2005-01-12 00:00:00,2.149357652,2.149357652 +2005-01-13 00:00:00,0.7765796375,0.7765796375 +2005-01-14 00:00:00,4.349865915,4.349865915 +2005-01-15 00:00:00,7.18996744,7.18996744 +2005-01-16 00:00:00,3.3991556595,3.3991556595 +2005-01-17 00:00:00,2.083804475,2.083804475 +2005-01-18 00:00:00,1.648626913,1.648626913 +2005-01-19 00:00:00,4.4090197155,4.4090197155 +2005-01-20 00:00:00,7.741300165,7.741300165 +2005-01-21 00:00:00,2.065233509,2.065233509 +2005-01-22 00:00:00,3.380044609,3.380044609 +2005-01-23 00:00:00,0.875066658,0.875066658 +2005-01-24 00:00:00,0.5091788515,0.5091788515 +2005-01-25 00:00:00,0.4514750415,0.4514750415 +2005-01-26 00:00:00,0.501106862,0.501106862 +2005-01-27 00:00:00,0.521888245,0.521888245 +2005-01-28 00:00:00,0.5442642405,0.5442642405 +2005-01-29 00:00:00,0.457541346,0.457541346 +2005-01-30 00:00:00,0.498992531,0.498992531 +2005-01-31 00:00:00,0.4713963405,0.4713963405 +2005-02-01 00:00:00,0.3979193215,0.3979193215 +2005-02-02 00:00:00,0.3475808975,0.3475808975 +2005-02-03 00:00:00,0.7856451925,0.7856451925 +2005-02-04 00:00:00,5.05232129,5.05232129 +2005-02-05 00:00:00,1.2240361635,1.2240361635 +2005-02-06 00:00:00,1.253197175,1.253197175 +2005-02-07 00:00:00,1.0169172895,1.0169172895 +2005-02-08 00:00:00,1.0743453455,1.0743453455 +2005-02-09 00:00:00,1.582017993,1.582017993 +2005-02-10 00:00:00,1.348894346,1.348894346 +2005-02-11 00:00:00,4.437957387,4.437957387 +2005-02-12 00:00:00,3.436603505,3.436603505 +2005-02-13 00:00:00,0.9069474685,0.9069474685 +2005-02-14 00:00:00,0.455811844,0.455811844 +2005-02-15 00:00:00,0.4166729865,0.4166729865 +2005-02-16 00:00:00,0.489764527,0.489764527 +2005-02-17 00:00:00,0.540680622,0.540680622 +2005-02-18 00:00:00,0.714597133,0.714597133 +2005-02-19 00:00:00,0.4130583025,0.4130583025 +2005-02-20 00:00:00,0.519824584,0.519824584 +2005-02-21 00:00:00,1.303698022,1.303698022 +2005-02-22 00:00:00,0.541475279,0.541475279 +2005-02-23 00:00:00,0.3687308425,0.3687308425 +2005-02-24 00:00:00,0.3050786945,0.3050786945 +2005-02-25 00:00:00,0.2772441375,0.2772441375 +2005-02-26 00:00:00,0.2663057715,0.2663057715 +2005-02-27 00:00:00,0.250368432,0.250368432 +2005-02-28 00:00:00,0.27267008,0.27267008 +2005-03-01 00:00:00,1.390370155,1.390370155 +2005-03-02 00:00:00,0.7390063715,0.7390063715 +2005-03-03 00:00:00,0.4090568345,0.4090568345 +2005-03-04 00:00:00,1.013834276,1.013834276 +2005-03-05 00:00:00,0.6329799065,0.6329799065 +2005-03-06 00:00:00,0.3628489055,0.3628489055 +2005-03-07 00:00:00,0.31020677,0.31020677 +2005-03-08 00:00:00,0.2894514695,0.2894514695 +2005-03-09 00:00:00,0.2765511865,0.2765511865 +2005-03-10 00:00:00,0.268614125,0.268614125 +2005-03-11 00:00:00,0.3504876665,0.3504876665 +2005-03-12 00:00:00,0.345992778,0.345992778 +2005-03-13 00:00:00,0.283603136,0.283603136 +2005-03-14 00:00:00,2.158500928,2.158500928 +2005-03-15 00:00:00,2.9923574625,2.9923574625 +2005-03-16 00:00:00,0.927500389,0.927500389 +2005-03-17 00:00:00,1.651187812,1.651187812 +2005-03-18 00:00:00,1.5582343975,1.5582343975 +2005-03-19 00:00:00,0.5016496045,0.5016496045 +2005-03-20 00:00:00,0.346058943,0.346058943 +2005-03-21 00:00:00,0.4239959655,0.4239959655 +2005-03-22 00:00:00,0.844696761,0.844696761 +2005-03-23 00:00:00,0.6827769565,0.6827769565 +2005-03-24 00:00:00,0.754739293,0.754739293 +2005-03-25 00:00:00,0.590510172,0.590510172 +2005-06-25 00:00:00,0.2772722235,0.2772722235 +2005-06-26 00:00:00,0.2403804235,0.2403804235 +2005-06-27 00:00:00,0.2252995505,0.2252995505 +2005-06-28 00:00:00,0.2154696265,0.2154696265 +2005-06-29 00:00:00,0.2114779145,0.2114779145 +2005-06-30 00:00:00,0.219416622,0.219416622 +2005-07-01 00:00:00,0.2162447825,0.2162447825 +2005-07-02 00:00:00,0.244752765,0.244752765 +2005-07-03 00:00:00,0.324615862,0.324615862 +2005-07-04 00:00:00,0.25683984,0.25683984 +2005-07-05 00:00:00,2.5330446065,2.5330446065 +2005-07-06 00:00:00,0.826288442,0.826288442 +2005-07-07 00:00:00,0.8768061955,0.8768061955 +2005-07-08 00:00:00,0.99799509,0.99799509 +2005-07-09 00:00:00,0.3665230495,0.3665230495 +2005-07-10 00:00:00,0.2659903225,0.2659903225 +2005-07-11 00:00:00,0.228004001,0.228004001 +2005-07-12 00:00:00,0.2109154265,0.2109154265 +2005-07-13 00:00:00,0.201119527,0.201119527 +2005-07-14 00:00:00,0.192440172,0.192440172 +2005-07-15 00:00:00,0.1868577415,0.1868577415 +2005-07-16 00:00:00,0.178916832,0.178916832 +2005-07-17 00:00:00,0.202657975,0.202657975 +2005-07-18 00:00:00,0.243732866,0.243732866 +2005-07-19 00:00:00,0.20402632,0.20402632 +2005-07-20 00:00:00,0.305626855,0.305626855 +2005-07-21 00:00:00,0.4105271295,0.4105271295 +2005-07-22 00:00:00,0.3003243315,0.3003243315 +2005-07-23 00:00:00,0.3618503535,0.3618503535 +2005-07-24 00:00:00,0.2623736385,0.2623736385 +2005-07-25 00:00:00,0.208321866,0.208321866 +2005-07-26 00:00:00,0.1881229945,0.1881229945 +2005-07-27 00:00:00,0.1790302925,0.1790302925 +2005-07-28 00:00:00,0.1702749325,0.1702749325 +2005-07-29 00:00:00,0.169718015,0.169718015 +2005-07-30 00:00:00,0.1682573225,0.1682573225 +2005-07-31 00:00:00,0.167549365,0.167549365 +2005-08-01 00:00:00,0.1600156,0.1600156 +2005-08-02 00:00:00,0.4281782235,0.4281782235 +2005-08-03 00:00:00,0.213068622,0.213068622 +2005-08-04 00:00:00,0.61075787,0.61075787 +2005-08-05 00:00:00,0.3398440155,0.3398440155 +2005-08-06 00:00:00,0.264029492,0.264029492 +2005-08-07 00:00:00,0.230396983,0.230396983 +2005-08-08 00:00:00,0.199282981,0.199282981 +2005-08-09 00:00:00,0.18583743,0.18583743 +2005-08-10 00:00:00,0.1758415495,0.1758415495 +2005-08-11 00:00:00,0.176698844,0.176698844 +2005-08-12 00:00:00,0.472128386,0.472128386 +2005-08-13 00:00:00,0.599591761,0.599591761 +2005-08-14 00:00:00,0.2462456935,0.2462456935 +2005-08-15 00:00:00,0.2268577215,0.2268577215 +2005-08-16 00:00:00,0.203287429,0.203287429 +2005-08-17 00:00:00,5.83195539,5.83195539 +2005-08-18 00:00:00,0.7451345335,0.7451345335 +2005-08-19 00:00:00,0.3756835035,0.3756835035 +2005-08-20 00:00:00,1.643218982,1.643218982 +2005-08-21 00:00:00,3.9954495425,3.9954495425 +2005-08-22 00:00:00,0.5366011535,0.5366011535 +2005-08-23 00:00:00,6.21940142,6.21940142 +2005-08-24 00:00:00,1.576622761,1.576622761 +2005-08-25 00:00:00,0.8178255735,0.8178255735 +2005-08-26 00:00:00,0.410133269,0.410133269 +2005-08-27 00:00:00,0.3052025435,0.3052025435 +2005-08-28 00:00:00,6.24455472,6.24455472 +2005-08-29 00:00:00,0.922032303,0.922032303 +2005-08-30 00:00:00,0.374391552,0.374391552 +2005-08-31 00:00:00,0.3238994695,0.3238994695 +2005-09-01 00:00:00,0.3368879875,0.3368879875 +2005-09-02 00:00:00,0.3546834645,0.3546834645 +2005-09-03 00:00:00,0.2539826665,0.2539826665 +2005-09-04 00:00:00,0.2241744135,0.2241744135 +2005-09-05 00:00:00,0.213505215,0.213505215 +2005-09-06 00:00:00,0.242156916,0.242156916 +2005-09-07 00:00:00,3.149129564,3.149129564 +2005-09-08 00:00:00,0.713130683,0.713130683 +2005-09-09 00:00:00,1.5691257125,1.5691257125 +2005-09-10 00:00:00,0.7029834815,0.7029834815 +2005-09-11 00:00:00,0.3458159335,0.3458159335 +2005-09-12 00:00:00,0.5335555455,0.5335555455 +2005-09-13 00:00:00,3.5541668175,3.5541668175 +2005-09-14 00:00:00,0.9037992775,0.9037992775 +2005-09-15 00:00:00,1.1629861995,1.1629861995 +2005-09-16 00:00:00,0.4436894985,0.4436894985 +2005-09-17 00:00:00,0.3093996975,0.3093996975 +2005-09-18 00:00:00,0.260863427,0.260863427 +2005-09-19 00:00:00,3.5437613355,3.5437613355 +2005-09-20 00:00:00,0.4589693715,0.4589693715 +2005-09-21 00:00:00,1.228996993,1.228996993 +2005-09-22 00:00:00,1.765278589,1.765278589 +2005-09-23 00:00:00,1.161682719,1.161682719 +2005-09-24 00:00:00,3.371322448,3.371322448 +2005-09-25 00:00:00,1.479783216,1.479783216 +2005-09-26 00:00:00,5.21844611,5.21844611 +2005-09-27 00:00:00,1.009568269,1.009568269 +2005-09-28 00:00:00,3.6227314705,3.6227314705 +2005-09-29 00:00:00,2.967736335,2.967736335 +2005-09-30 00:00:00,2.609158505,2.609158505 +2005-10-01 00:00:00,0.953888013,0.953888013 +2005-10-02 00:00:00,0.439992881,0.439992881 +2005-10-03 00:00:00,0.332314432,0.332314432 +2005-10-04 00:00:00,0.318231279,0.318231279 +2005-10-05 00:00:00,0.2775859275,0.2775859275 +2005-10-06 00:00:00,0.255183091,0.255183091 +2005-10-07 00:00:00,0.8536836415,0.8536836415 +2005-10-08 00:00:00,0.7038270235,0.7038270235 +2005-10-09 00:00:00,1.4269225315,1.4269225315 +2005-10-10 00:00:00,3.763472241,3.763472241 +2005-10-11 00:00:00,0.7480947285,0.7480947285 +2005-10-12 00:00:00,0.394303326,0.394303326 +2005-10-13 00:00:00,0.3059373665,0.3059373665 +2005-10-14 00:00:00,0.267860188,0.267860188 +2005-10-15 00:00:00,0.256063744,0.256063744 +2005-10-16 00:00:00,0.2458721335,0.2458721335 +2005-10-17 00:00:00,0.2643159755,0.2643159755 +2005-10-18 00:00:00,0.491743572,0.491743572 +2005-10-19 00:00:00,0.4737811745,0.4737811745 +2005-10-20 00:00:00,0.6959795775,0.6959795775 +2005-10-21 00:00:00,1.5584429325,1.5584429325 +2005-10-22 00:00:00,0.769876923,0.769876923 +2005-10-23 00:00:00,2.495682548,2.495682548 +2005-10-24 00:00:00,2.696505451,2.696505451 +2005-10-25 00:00:00,1.190867008,1.190867008 +2005-10-26 00:00:00,2.287006567,2.287006567 +2005-10-27 00:00:00,3.896109574,3.896109574 +2005-10-28 00:00:00,1.055927178,1.055927178 +2005-10-29 00:00:00,2.269884099,2.269884099 +2005-10-30 00:00:00,0.9165657865,0.9165657865 +2005-10-31 00:00:00,1.8147638295,1.8147638295 +2005-11-01 00:00:00,0.749372213,0.749372213 +2005-11-02 00:00:00,4.85908718,4.85908718 +2005-11-03 00:00:00,5.43250872,5.43250872 +2005-11-04 00:00:00,2.5410918595,2.5410918595 +2005-11-05 00:00:00,3.6000925835,3.6000925835 +2005-11-06 00:00:00,1.856852258,1.856852258 +2005-11-07 00:00:00,3.611512095,3.611512095 +2005-11-08 00:00:00,1.370260174,1.370260174 +2005-11-09 00:00:00,6.529559145,6.529559145 +2005-11-10 00:00:00,4.2134927195,4.2134927195 +2005-11-11 00:00:00,2.9502879125,2.9502879125 +2005-11-23 00:00:00,0.2466215165,0.2466215165 +2005-11-24 00:00:00,0.2982100795,0.2982100795 +2005-11-29 00:00:00,4.81120117,4.81120117 +2005-11-30 00:00:00,1.8048029575,1.8048029575 +2005-12-01 00:00:00,2.1401858485,2.1401858485 +2005-12-02 00:00:00,3.2919710625,3.2919710625 +2005-12-03 00:00:00,1.9356510375,1.9356510375 +2005-12-04 00:00:00,2.0822410715,2.0822410715 +2005-12-05 00:00:00,0.753128724,0.753128724 +2005-12-06 00:00:00,1.290439469,1.290439469 +2005-12-07 00:00:00,3.9593066265,3.9593066265 +2005-12-08 00:00:00,1.6555802615,1.6555802615 +2005-12-09 00:00:00,6.762831405,6.762831405 +2005-12-10 00:00:00,1.543701081,1.543701081 +2005-12-11 00:00:00,0.852000874,0.852000874 +2005-12-12 00:00:00,0.5769781425,0.5769781425 +2005-12-13 00:00:00,0.4060257,0.4060257 +2005-12-14 00:00:00,0.505717898,0.505717898 +2005-12-15 00:00:00,0.448586224,0.448586224 +2005-12-16 00:00:00,2.26556092,2.26556092 +2005-12-17 00:00:00,0.635712466,0.635712466 +2005-12-18 00:00:00,2.757585174,2.757585174 +2005-12-19 00:00:00,0.888208381,0.888208381 +2005-12-20 00:00:00,1.7527455255,1.7527455255 +2005-12-21 00:00:00,1.8387862065,1.8387862065 +2005-12-22 00:00:00,1.598629687,1.598629687 +2005-12-23 00:00:00,3.582907714,3.582907714 +2005-12-24 00:00:00,1.1575473065,1.1575473065 +2005-12-25 00:00:00,0.5768493035,0.5768493035 +2005-12-26 00:00:00,0.4124484185,0.4124484185 +2005-12-27 00:00:00,0.347898887,0.347898887 +2005-12-28 00:00:00,0.309199777,0.309199777 +2005-12-29 00:00:00,1.5830558265,1.5830558265 +2005-12-30 00:00:00,4.2574125705,4.2574125705 +2005-12-31 00:00:00,2.8115408725,2.8115408725 +2006-01-01 00:00:00,2.0415303555,2.0415303555 +2006-01-02 00:00:00,2.950742732,2.950742732 +2006-01-03 00:00:00,1.469252726,1.469252726 +2006-01-04 00:00:00,0.611734601,0.611734601 +2006-01-05 00:00:00,2.29939461,2.29939461 +2006-01-10 00:00:00,4.1049677455,4.1049677455 +2006-01-11 00:00:00,2.417147148,2.417147148 +2006-01-12 00:00:00,1.303540371,1.303540371 +2006-01-13 00:00:00,3.364597077,3.364597077 +2006-01-14 00:00:00,0.9826408995,0.9826408995 +2006-01-18 00:00:00,1.5752574465,1.5752574465 +2006-01-19 00:00:00,4.7059680495,4.7059680495 +2006-01-20 00:00:00,4.0073244525,4.0073244525 +2006-01-21 00:00:00,0.699781943,0.699781943 +2006-01-22 00:00:00,0.4573893795,0.4573893795 +2006-01-23 00:00:00,0.377256803,0.377256803 +2006-01-24 00:00:00,0.3307445785,0.3307445785 +2006-01-25 00:00:00,0.30209075,0.30209075 +2006-01-26 00:00:00,0.2795901015,0.2795901015 +2006-01-28 00:00:00,0.2556187655,0.2556187655 +2006-01-29 00:00:00,0.2488835475,0.2488835475 +2006-01-30 00:00:00,0.2425499085,0.2425499085 +2006-01-31 00:00:00,0.240643158,0.240643158 +2006-02-01 00:00:00,0.23293569,0.23293569 +2006-02-02 00:00:00,0.234828558,0.234828558 +2006-02-03 00:00:00,0.232368514,0.232368514 +2006-02-04 00:00:00,0.2298000985,0.2298000985 +2006-02-05 00:00:00,0.226002761,0.226002761 +2006-02-06 00:00:00,0.2184080865,0.2184080865 +2006-02-07 00:00:00,0.503571837,0.503571837 +2006-02-08 00:00:00,0.5461780905,0.5461780905 +2006-02-09 00:00:00,0.374617415,0.374617415 +2006-02-10 00:00:00,0.281411719,0.281411719 +2006-02-11 00:00:00,0.654040811,0.654040811 +2006-02-12 00:00:00,5.43257411,5.43257411 +2006-02-13 00:00:00,4.2904327825,4.2904327825 +2006-02-14 00:00:00,2.893535293,2.893535293 +2006-02-15 00:00:00,2.4072290535,2.4072290535 +2006-02-16 00:00:00,3.1699546165,3.1699546165 +2006-02-17 00:00:00,1.2972452495,1.2972452495 +2006-02-18 00:00:00,0.892329689,0.892329689 +2006-02-19 00:00:00,0.54202148,0.54202148 +2006-02-20 00:00:00,0.3787921305,0.3787921305 +2006-02-21 00:00:00,0.3434458065,0.3434458065 +2006-02-22 00:00:00,0.306474918,0.306474918 +2006-02-23 00:00:00,0.273320119,0.273320119 +2006-02-24 00:00:00,0.266450728,0.266450728 +2006-02-25 00:00:00,0.2484292905,0.2484292905 +2006-02-26 00:00:00,0.2335305085,0.2335305085 +2006-02-27 00:00:00,0.236442997,0.236442997 +2006-02-28 00:00:00,0.299782861,0.299782861 +2006-03-01 00:00:00,0.411048065,0.411048065 +2006-03-02 00:00:00,0.4194149865,0.4194149865 +2006-03-03 00:00:00,0.38085587,0.38085587 +2006-03-04 00:00:00,0.4367412355,0.4367412355 +2006-03-05 00:00:00,0.723307923,0.723307923 +2006-03-06 00:00:00,0.6493637005,0.6493637005 +2006-03-07 00:00:00,2.091932849,2.091932849 +2006-03-08 00:00:00,2.7917104855,2.7917104855 +2006-03-09 00:00:00,2.3876839925,2.3876839925 +2006-03-10 00:00:00,1.022731678,1.022731678 +2006-03-11 00:00:00,2.1232649825,2.1232649825 +2006-03-12 00:00:00,1.787867191,1.787867191 +2006-03-13 00:00:00,2.6932588515,2.6932588515 +2006-03-14 00:00:00,1.449066447,1.449066447 +2006-03-15 00:00:00,0.5126887765,0.5126887765 +2006-03-16 00:00:00,0.368697728,0.368697728 +2006-03-17 00:00:00,0.3034585775,0.3034585775 +2006-03-18 00:00:00,0.27131125,0.27131125 +2006-03-19 00:00:00,0.2542652245,0.2542652245 +2006-03-20 00:00:00,0.242667394,0.242667394 +2006-03-21 00:00:00,0.231351769,0.231351769 +2006-03-22 00:00:00,0.22145691,0.22145691 +2006-03-23 00:00:00,0.218267444,0.218267444 +2006-03-24 00:00:00,0.2209396445,0.2209396445 +2006-03-25 00:00:00,0.231825566,0.231825566 +2006-03-26 00:00:00,3.411764524,3.411764524 +2006-03-27 00:00:00,3.072108994,3.072108994 +2006-03-28 00:00:00,1.1936766995,1.1936766995 +2006-03-30 00:00:00,1.605802944,1.605802944 +2006-03-31 00:00:00,1.031796967,1.031796967 +2006-04-01 00:00:00,0.8459886955,0.8459886955 +2006-04-02 00:00:00,2.780915168,2.780915168 +2006-04-03 00:00:00,0.527708504,0.527708504 +2006-04-04 00:00:00,0.3488436175,0.3488436175 +2006-04-05 00:00:00,0.2947057835,0.2947057835 +2006-04-06 00:00:00,0.7377668585,0.7377668585 +2006-04-07 00:00:00,0.920569444,0.920569444 +2006-04-08 00:00:00,0.834345306,0.834345306 +2006-04-09 00:00:00,0.5228273075,0.5228273075 +2006-04-10 00:00:00,0.364929165,0.364929165 +2006-04-11 00:00:00,4.3974246755,4.3974246755 +2006-04-12 00:00:00,0.626809711,0.626809711 +2006-04-13 00:00:00,0.4832635745,0.4832635745 +2006-04-14 00:00:00,0.414336056,0.414336056 +2006-04-15 00:00:00,0.335016791,0.335016791 +2006-04-16 00:00:00,0.3208269325,0.3208269325 +2006-04-17 00:00:00,0.6374817625,0.6374817625 +2006-04-18 00:00:00,1.6991765215,1.6991765215 +2006-04-19 00:00:00,0.568072564,0.568072564 +2006-04-20 00:00:00,0.4234525315,0.4234525315 +2006-04-21 00:00:00,0.3228240155,0.3228240155 +2006-04-22 00:00:00,1.412112699,1.412112699 +2006-04-23 00:00:00,0.710691345,0.710691345 +2006-04-24 00:00:00,1.150089516,1.150089516 +2006-04-25 00:00:00,1.5866591215,1.5866591215 +2006-04-26 00:00:00,0.4324808365,0.4324808365 +2006-04-27 00:00:00,0.336413784,0.336413784 +2006-04-28 00:00:00,0.283158218,0.283158218 +2006-04-29 00:00:00,0.258311893,0.258311893 +2006-04-30 00:00:00,1.388950953,1.388950953 +2006-05-01 00:00:00,0.699515938,0.699515938 +2006-05-02 00:00:00,2.6039200865,2.6039200865 +2006-05-03 00:00:00,1.0598937035,1.0598937035 +2006-05-04 00:00:00,0.4140725735,0.4140725735 +2006-05-05 00:00:00,0.3513551485,0.3513551485 +2006-05-06 00:00:00,0.5292988015,0.5292988015 +2006-05-07 00:00:00,0.3987397285,0.3987397285 +2006-05-08 00:00:00,0.3176427835,0.3176427835 +2006-05-09 00:00:00,0.342801151,0.342801151 +2006-05-10 00:00:00,0.290217847,0.290217847 +2006-05-11 00:00:00,0.3611082425,0.3611082425 +2006-05-12 00:00:00,0.3023206365,0.3023206365 +2006-05-13 00:00:00,0.252176206,0.252176206 +2006-05-14 00:00:00,0.6557412975,0.6557412975 +2006-05-15 00:00:00,0.976248379,0.976248379 +2006-05-16 00:00:00,2.540259603,2.540259603 +2006-05-17 00:00:00,3.191633104,3.191633104 +2006-05-18 00:00:00,4.1627146565,4.1627146565 +2006-05-19 00:00:00,1.8067713955,1.8067713955 +2006-05-20 00:00:00,2.0069114455,2.0069114455 +2006-05-21 00:00:00,0.878019789,0.878019789 +2006-05-22 00:00:00,0.9024345505,0.9024345505 +2006-05-23 00:00:00,0.811137734,0.811137734 +2006-05-24 00:00:00,0.8176457165,0.8176457165 +2006-05-25 00:00:00,0.3705979335,0.3705979335 +2006-05-26 00:00:00,1.2739641995,1.2739641995 +2006-05-27 00:00:00,0.5414851775,0.5414851775 +2006-05-28 00:00:00,0.3643647205,0.3643647205 +2006-05-29 00:00:00,0.308381361,0.308381361 +2006-05-30 00:00:00,0.262849037,0.262849037 +2006-05-31 00:00:00,0.242812643,0.242812643 +2006-06-01 00:00:00,0.2313609835,0.2313609835 +2006-06-02 00:00:00,0.225721477,0.225721477 +2006-06-03 00:00:00,0.218126802,0.218126802 +2006-06-04 00:00:00,0.2178546745,0.2178546745 +2006-06-05 00:00:00,0.2162219105,0.2162219105 +2006-06-06 00:00:00,0.2092826625,0.2092826625 +2006-06-07 00:00:00,0.205608943,0.205608943 +2006-06-08 00:00:00,0.201251032,0.201251032 +2006-06-09 00:00:00,0.1913200375,0.1913200375 +2006-06-10 00:00:00,0.1879960185,0.1879960185 +2006-06-11 00:00:00,0.1827900105,0.1827900105 +2006-06-12 00:00:00,0.188136583,0.188136583 +2006-06-13 00:00:00,0.1848216235,0.1848216235 +2006-06-14 00:00:00,0.179393199,0.179393199 +2006-06-15 00:00:00,0.1764539025,0.1764539025 +2006-06-16 00:00:00,0.179184299,0.179184299 +2006-06-17 00:00:00,0.186544782,0.186544782 +2006-06-18 00:00:00,0.9549515305,0.9549515305 +2006-06-19 00:00:00,0.718991257,0.718991257 +2006-06-20 00:00:00,1.8309461175,1.8309461175 +2006-06-21 00:00:00,0.6637817625,0.6637817625 +2006-06-22 00:00:00,0.475218591,0.475218591 +2006-06-23 00:00:00,0.31835517,0.31835517 +2006-06-24 00:00:00,0.2557348395,0.2557348395 +2006-06-25 00:00:00,0.2257443975,0.2257443975 +2006-06-26 00:00:00,0.2091557155,0.2091557155 +2006-06-27 00:00:00,0.199804473,0.199804473 +2006-06-28 00:00:00,0.1961679055,0.1961679055 +2006-06-29 00:00:00,0.4087473565,0.4087473565 +2006-06-30 00:00:00,0.3325936575,0.3325936575 +2006-07-01 00:00:00,0.241378659,0.241378659 +2006-07-02 00:00:00,0.235338001,0.235338001 +2006-07-03 00:00:00,0.2060178195,0.2060178195 +2006-07-04 00:00:00,0.1915513415,0.1915513415 +2006-07-05 00:00:00,0.180422521,0.180422521 +2006-07-06 00:00:00,0.2403763335,0.2403763335 +2006-07-07 00:00:00,0.2969446825,0.2969446825 +2006-07-08 00:00:00,3.602094022,3.602094022 +2006-07-09 00:00:00,2.6317536735,2.6317536735 +2006-07-10 00:00:00,0.526757106,0.526757106 +2006-07-11 00:00:00,0.3350916505,0.3350916505 +2006-07-12 00:00:00,0.3363532335,0.3363532335 +2006-07-13 00:00:00,0.271769196,0.271769196 +2006-07-14 00:00:00,0.222864197,0.222864197 +2006-07-15 00:00:00,0.2005935055,0.2005935055 +2006-07-16 00:00:00,0.1881229945,0.1881229945 +2006-07-17 00:00:00,0.1926622685,0.1926622685 +2006-07-18 00:00:00,0.1817463405,0.1817463405 +2006-07-19 00:00:00,0.168983191,0.168983191 +2006-07-20 00:00:00,0.168493308,0.168493308 +2006-07-21 00:00:00,0.1687382495,0.1687382495 +2006-07-22 00:00:00,0.1937098655,0.1937098655 +2006-07-23 00:00:00,0.227281692,0.227281692 +2006-07-24 00:00:00,0.4490863865,0.4490863865 +2006-07-25 00:00:00,0.385334699,0.385334699 +2006-07-26 00:00:00,0.2672791905,0.2672791905 +2006-07-27 00:00:00,0.391197159,0.391197159 +2006-07-28 00:00:00,0.7874868425,0.7874868425 +2006-07-29 00:00:00,1.307484355,1.307484355 +2006-07-30 00:00:00,1.1949351085,1.1949351085 +2006-07-31 00:00:00,3.45804404,3.45804404 +2006-08-01 00:00:00,0.5810277525,0.5810277525 +2006-08-02 00:00:00,0.3433414385,0.3433414385 +2006-08-03 00:00:00,0.263340655,0.263340655 +2006-08-04 00:00:00,0.247027698,0.247027698 +2006-08-05 00:00:00,0.3153411175,0.3153411175 +2006-08-06 00:00:00,1.3155856065,1.3155856065 +2006-08-07 00:00:00,0.3800582415,0.3800582415 +2006-08-08 00:00:00,0.765371187,0.765371187 +2006-08-09 00:00:00,0.5779688715,0.5779688715 +2006-08-10 00:00:00,0.3164070165,0.3164070165 +2006-08-11 00:00:00,0.252794271,0.252794271 +2006-08-12 00:00:00,0.226719793,0.226719793 +2006-08-13 00:00:00,0.2095547895,0.2095547895 +2006-08-14 00:00:00,0.199804473,0.199804473 +2006-08-15 00:00:00,0.245687009,0.245687009 +2006-08-16 00:00:00,0.269315701,0.269315701 +2006-08-17 00:00:00,0.264172279,0.264172279 +2006-08-18 00:00:00,0.28224958,0.28224958 +2006-08-19 00:00:00,0.2417848405,0.2417848405 +2006-08-20 00:00:00,0.3068245815,0.3068245815 +2006-08-21 00:00:00,0.3185751115,0.3185751115 +2006-08-22 00:00:00,0.4602761005,0.4602761005 +2006-08-23 00:00:00,0.4542709115,0.4542709115 +2006-08-24 00:00:00,0.2837583155,0.2837583155 +2006-08-25 00:00:00,1.050382246,1.050382246 +2006-08-26 00:00:00,2.5694259935,2.5694259935 +2006-08-27 00:00:00,0.4697534435,0.4697534435 +2006-08-28 00:00:00,0.317347895,0.317347895 +2006-08-29 00:00:00,0.29005254,0.29005254 +2006-08-30 00:00:00,0.913806934,0.913806934 +2006-08-31 00:00:00,1.3320558675,1.3320558675 +2006-09-01 00:00:00,1.3025273175,1.3025273175 +2006-09-02 00:00:00,1.23933798,1.23933798 +2006-09-03 00:00:00,1.019869594,1.019869594 +2006-09-04 00:00:00,0.7332165115,0.7332165115 +2006-09-05 00:00:00,5.143652695,5.143652695 +2006-09-06 00:00:00,3.8651917165,3.8651917165 +2006-09-07 00:00:00,2.0296199925,2.0296199925 +2006-09-08 00:00:00,1.2016634625,1.2016634625 +2006-09-09 00:00:00,0.7806733315,0.7806733315 +2006-09-10 00:00:00,0.567048814,0.567048814 +2006-09-11 00:00:00,0.428566849,0.428566849 +2006-09-12 00:00:00,0.356235874,0.356235874 +2006-09-13 00:00:00,0.3431943565,0.3431943565 +2006-09-14 00:00:00,0.272322214,0.272322214 +2006-09-15 00:00:00,0.2445288415,0.2445288415 +2006-09-16 00:00:00,0.237115395,0.237115395 +2006-09-17 00:00:00,0.239580765,0.239580765 +2006-09-18 00:00:00,0.809544139,0.809544139 +2006-09-19 00:00:00,0.70538148,0.70538148 +2006-09-20 00:00:00,5.365832005,5.365832005 +2006-09-21 00:00:00,4.11705152,4.11705152 +2006-09-22 00:00:00,4.226105813,4.226105813 +2006-09-23 00:00:00,0.7212862415,0.7212862415 +2006-09-24 00:00:00,2.362084761,2.362084761 +2006-09-25 00:00:00,0.7864137645,0.7864137645 +2006-09-26 00:00:00,2.39899131,2.39899131 +2006-09-27 00:00:00,2.807434326,2.807434326 +2006-09-28 00:00:00,1.15434837,1.15434837 +2006-09-29 00:00:00,0.906025929,0.906025929 +2006-09-30 00:00:00,0.584341118,0.584341118 +2006-10-01 00:00:00,0.5824961355,0.5824961355 +2006-10-02 00:00:00,0.521682494,0.521682494 +2006-10-03 00:00:00,0.4563969265,0.4563969265 +2006-10-04 00:00:00,0.515819245,0.515819245 +2006-10-05 00:00:00,6.7807666,6.7807666 +2006-10-06 00:00:00,4.1540327025,4.1540327025 +2006-10-07 00:00:00,0.7459309125,0.7459309125 +2006-10-08 00:00:00,0.473404742,0.473404742 +2006-10-09 00:00:00,0.856697235,0.856697235 +2006-10-10 00:00:00,0.385703921,0.385703921 +2006-10-11 00:00:00,1.5569723645,1.5569723645 +2006-10-12 00:00:00,1.263910894,1.263910894 +2006-10-13 00:00:00,0.4013072935,0.4013072935 +2006-10-14 00:00:00,0.309866311,0.309866311 +2006-10-15 00:00:00,0.2723648915,0.2723648915 +2006-10-16 00:00:00,0.258311893,0.258311893 +2006-10-17 00:00:00,1.075063874,1.075063874 +2006-10-18 00:00:00,0.7230734895,0.7230734895 +2006-10-19 00:00:00,0.381776517,0.381776517 +2006-10-20 00:00:00,0.315429252,0.315429252 +2006-10-21 00:00:00,0.3978652195,0.3978652195 +2006-10-22 00:00:00,1.8902677465,1.8902677465 +2006-10-23 00:00:00,1.4388124015,1.4388124015 +2006-10-24 00:00:00,0.4432791395,0.4432791395 +2006-10-25 00:00:00,1.0982039525,1.0982039525 +2006-10-26 00:00:00,2.024206353,2.024206353 +2006-10-27 00:00:00,5.35526905,5.35526905 +2006-10-28 00:00:00,5.589212475,5.589212475 +2006-10-29 00:00:00,1.6636611375,1.6636611375 +2006-10-30 00:00:00,5.51670765,5.51670765 +2006-10-31 00:00:00,1.1080852285,1.1080852285 +2006-11-01 00:00:00,0.447213705,0.447213705 +2006-11-02 00:00:00,0.335456666,0.335456666 +2006-11-03 00:00:00,0.29019627,0.29019627 +2006-11-04 00:00:00,0.2655235575,0.2655235575 +2006-11-05 00:00:00,0.2499234295,0.2499234295 +2006-11-06 00:00:00,0.235259679,0.235259679 +2006-11-07 00:00:00,2.5571929575,2.5571929575 +2006-11-08 00:00:00,0.8927899075,0.8927899075 +2006-11-09 00:00:00,0.407357708,0.407357708 +2006-11-10 00:00:00,1.253460335,1.253460335 +2006-11-11 00:00:00,0.6219501215,0.6219501215 +2006-11-12 00:00:00,1.925693607,1.925693607 +2006-11-13 00:00:00,1.3776585265,1.3776585265 +2006-11-14 00:00:00,1.0380157845,1.0380157845 +2006-11-15 00:00:00,1.161244053,1.161244053 +2006-11-16 00:00:00,4.683696152,4.683696152 +2006-11-17 00:00:00,2.3621470925,2.3621470925 +2006-11-18 00:00:00,3.111295215,3.111295215 +2006-11-19 00:00:00,6.304471125,6.304471125 +2006-11-20 00:00:00,1.945092287,1.945092287 +2006-11-21 00:00:00,1.3390025505,1.3390025505 +2006-11-22 00:00:00,0.9565912995,0.9565912995 +2006-11-23 00:00:00,4.679433404,4.679433404 +2006-11-24 00:00:00,1.4290097655,1.4290097655 +2006-11-25 00:00:00,1.6432293305,1.6432293305 +2006-11-26 00:00:00,0.781200628,0.781200628 +2006-11-27 00:00:00,1.280290338,1.280290338 +2006-11-28 00:00:00,0.9421112355,0.9421112355 +2006-11-29 00:00:00,0.5673679705,0.5673679705 +2006-11-30 00:00:00,2.3670737445,2.3670737445 +2006-12-01 00:00:00,1.7906047445,1.7906047445 +2006-12-02 00:00:00,4.336617843,4.336617843 +2006-12-03 00:00:00,7.443740225,7.443740225 +2006-12-04 00:00:00,3.700289565,3.700289565 +2006-12-05 00:00:00,3.0624803025,3.0624803025 +2006-12-06 00:00:00,3.828818122,3.828818122 +2006-12-07 00:00:00,3.492026779,3.492026779 +2006-12-08 00:00:00,2.0813193795,2.0813193795 +2006-12-09 00:00:00,1.4847236415,1.4847236415 +2006-12-10 00:00:00,14.125563025,14.125563025 +2006-12-11 00:00:00,4.128506627,4.128506627 +2006-12-12 00:00:00,4.1455526025,4.1455526025 +2006-12-13 00:00:00,16.683540535,16.683540535 +2006-12-14 00:00:00,13.97529085,13.97529085 +2006-12-15 00:00:00,4.589187959,4.589187959 +2006-12-16 00:00:00,1.541124463,1.541124463 +2006-12-17 00:00:00,1.1871007595,1.1871007595 +2006-12-18 00:00:00,1.043814921,1.043814921 +2006-12-19 00:00:00,0.5217894355,0.5217894355 +2006-12-20 00:00:00,0.4126589115,0.4126589115 +2006-12-21 00:00:00,0.3751933045,0.3751933045 +2006-12-22 00:00:00,0.523467159,0.523467159 +2006-12-23 00:00:00,0.3700847115,0.3700847115 +2006-12-24 00:00:00,0.3141181575,0.3141181575 +2006-12-25 00:00:00,0.285307456,0.285307456 +2006-12-26 00:00:00,0.26815054,0.26815054 +2006-12-27 00:00:00,0.2610422345,0.2610422345 +2006-12-28 00:00:00,0.495063943,0.495063943 +2006-12-29 00:00:00,4.1396459595,4.1396459595 +2006-12-30 00:00:00,3.068161505,3.068161505 +2006-12-31 00:00:00,2.0721204075,2.0721204075 +2007-01-01 00:00:00,2.2728474505,2.2728474505 +2007-01-02 00:00:00,1.5910719975,1.5910719975 +2007-01-03 00:00:00,4.4163712015,4.4163712015 +2007-01-04 00:00:00,1.272249482,1.272249482 +2007-01-05 00:00:00,2.866649531,2.866649531 +2007-01-06 00:00:00,1.510863583,1.510863583 +2007-01-07 00:00:00,4.1546452875,4.1546452875 +2007-01-08 00:00:00,7.044983535,7.044983535 +2007-01-09 00:00:00,4.695964999,4.695964999 +2007-01-10 00:00:00,2.9399610305,2.9399610305 +2007-01-11 00:00:00,4.09200705,4.09200705 +2007-01-12 00:00:00,2.718782505,2.718782505 +2007-01-13 00:00:00,3.311988874,3.311988874 +2007-01-14 00:00:00,2.4961379625,2.4961379625 +2007-01-15 00:00:00,1.716326269,1.716326269 +2007-01-16 00:00:00,1.174583205,1.174583205 +2007-01-17 00:00:00,1.63604106,1.63604106 +2007-01-18 00:00:00,4.0371373015,4.0371373015 +2007-01-19 00:00:00,2.2004591625,2.2004591625 +2007-01-20 00:00:00,1.933763209,1.933763209 +2007-01-21 00:00:00,1.756965285,1.756965285 +2007-01-22 00:00:00,1.354828714,1.354828714 +2007-01-23 00:00:00,0.8290154745,0.8290154745 +2007-01-24 00:00:00,0.8149351115,0.8149351115 +2007-01-25 00:00:00,0.464307561,0.464307561 +2007-01-26 00:00:00,0.4434267505,0.4434267505 +2007-01-27 00:00:00,0.390112443,0.390112443 +2007-01-28 00:00:00,0.4129469635,0.4129469635 +2007-01-29 00:00:00,0.4099574225,0.4099574225 +2007-01-30 00:00:00,0.387571587,0.387571587 +2007-01-31 00:00:00,0.405827344,0.405827344 +2007-02-01 00:00:00,0.4176078765,0.4176078765 +2007-02-02 00:00:00,0.415722591,0.415722591 +2007-02-03 00:00:00,0.3361760055,0.3361760055 +2007-02-04 00:00:00,0.3019268505,0.3019268505 +2007-02-05 00:00:00,0.2881684435,0.2881684435 +2007-02-06 00:00:00,0.2722150395,0.2722150395 +2007-02-07 00:00:00,0.260283548,0.260283548 +2007-02-08 00:00:00,1.818578428,1.818578428 +2007-02-09 00:00:00,1.525748776,1.525748776 +2007-02-10 00:00:00,0.604718744,0.604718744 +2007-02-11 00:00:00,2.0770507535,2.0770507535 +2007-02-12 00:00:00,1.371672354,1.371672354 +2007-02-13 00:00:00,1.3406383505,1.3406383505 +2007-02-14 00:00:00,0.647148697,0.647148697 +2007-02-15 00:00:00,1.099334111,1.099334111 +2007-02-16 00:00:00,0.95287968,0.95287968 +2007-02-17 00:00:00,0.4846696045,0.4846696045 +2007-02-18 00:00:00,0.496298252,0.496298252 +2007-02-19 00:00:00,2.027370453,2.027370453 +2007-02-20 00:00:00,0.846249179,0.846249179 +2007-02-21 00:00:00,1.719974293,1.719974293 +2007-02-22 00:00:00,1.1069301495,1.1069301495 +2007-02-23 00:00:00,1.563619084,1.563619084 +2007-02-24 00:00:00,1.2201964845,1.2201964845 +2007-02-25 00:00:00,0.8004950115,0.8004950115 +2007-02-26 00:00:00,0.921553436,0.921553436 +2007-02-27 00:00:00,5.34955347,5.34955347 +2007-02-28 00:00:00,1.8881742445,1.8881742445 +2007-03-01 00:00:00,1.197161783,1.197161783 +2007-03-02 00:00:00,1.539496878,1.539496878 +2007-03-03 00:00:00,1.0093259005,1.0093259005 +2007-03-04 00:00:00,1.282310174,1.282310174 +2007-03-05 00:00:00,3.642846851,3.642846851 +2007-03-06 00:00:00,1.7307323965,1.7307323965 +2007-03-07 00:00:00,1.572903816,1.572903816 +2007-03-08 00:00:00,1.239296794,1.239296794 +2007-03-09 00:00:00,0.861940246,0.861940246 +2007-03-10 00:00:00,0.631883252,0.631883252 +2007-03-11 00:00:00,1.4316986225,1.4316986225 +2007-03-12 00:00:00,0.7237505495,0.7237505495 +2007-03-13 00:00:00,0.9642434225,0.9642434225 +2007-03-14 00:00:00,0.472154495,0.472154495 +2007-03-15 00:00:00,2.7608823435,2.7608823435 +2007-03-16 00:00:00,0.8047727585,0.8047727585 +2007-03-17 00:00:00,2.0633375165,2.0633375165 +2007-03-18 00:00:00,1.530921538,1.530921538 +2007-03-19 00:00:00,1.1221435745,1.1221435745 +2007-03-20 00:00:00,0.726906865,0.726906865 +2007-03-21 00:00:00,0.543784337,0.543784337 +2007-03-22 00:00:00,0.6220050295,0.6220050295 +2007-03-23 00:00:00,0.396182758,0.396182758 +2007-03-24 00:00:00,0.349618065,0.349618065 +2007-03-25 00:00:00,0.307612695,0.307612695 +2007-03-26 00:00:00,0.2825962835,0.2825962835 +2007-03-27 00:00:00,0.263224239,0.263224239 +2007-03-28 00:00:00,0.253515841,0.253515841 +2007-03-29 00:00:00,0.261397809,0.261397809 +2007-03-30 00:00:00,0.2463263905,0.2463263905 +2007-03-31 00:00:00,0.2384551635,0.2384551635 +2007-04-01 00:00:00,0.230222025,0.230222025 +2007-04-02 00:00:00,0.226143403,0.226143403 +2007-04-03 00:00:00,0.2206583605,0.2206583605 +2007-04-13 00:00:00,0.1995414625,0.1995414625 +2007-04-14 00:00:00,0.192834688,0.192834688 +2007-04-15 00:00:00,0.192703183,0.192703183 +2007-04-16 00:00:00,0.18977368,0.18977368 +2007-04-17 00:00:00,0.185075575,0.185075575 +2007-04-18 00:00:00,0.182282107,0.182282107 +2007-04-19 00:00:00,0.180250494,0.180250494 +2007-04-20 00:00:00,0.180250494,0.180250494 +2007-04-21 00:00:00,1.4009849325,1.4009849325 +2007-04-22 00:00:00,2.5786525025,2.5786525025 +2007-04-23 00:00:00,3.6673066035,3.6673066035 +2007-04-24 00:00:00,0.8775881625,0.8775881625 +2007-04-25 00:00:00,5.27722578,5.27722578 +2007-04-26 00:00:00,0.6346180225,0.6346180225 +2007-04-27 00:00:00,0.376077692,0.376077692 +2007-04-28 00:00:00,0.3380400565,0.3380400565 +2007-04-29 00:00:00,0.317279319,0.317279319 +2007-04-30 00:00:00,0.298765568,0.298765568 +2007-05-01 00:00:00,0.284188329,0.284188329 +2007-05-02 00:00:00,0.2738821185,0.2738821185 +2007-05-03 00:00:00,0.2696958235,0.2696958235 +2007-05-04 00:00:00,0.273240621,0.273240621 +2007-05-05 00:00:00,0.368398744,0.368398744 +2007-05-06 00:00:00,0.7894466855,0.7894466855 +2007-05-07 00:00:00,1.1999954105,1.1999954105 +2007-05-08 00:00:00,1.276824247,1.276824247 +2007-05-09 00:00:00,2.2722488295,2.2722488295 +2007-05-19 00:00:00,0.7395646505,0.7395646505 +2007-05-20 00:00:00,0.693005778,0.693005778 +2007-05-21 00:00:00,0.6282984865,0.6282984865 +2007-05-22 00:00:00,0.505854101,0.505854101 +2007-05-23 00:00:00,0.468045078,0.468045078 +2007-05-24 00:00:00,0.468045078,0.468045078 +2007-05-25 00:00:00,0.468045078,0.468045078 +2007-05-26 00:00:00,0.468045078,0.468045078 +2007-05-27 00:00:00,0.468045078,0.468045078 +2007-05-28 00:00:00,0.468045078,0.468045078 +2007-05-29 00:00:00,0.468045078,0.468045078 +2007-05-30 00:00:00,0.468045078,0.468045078 +2007-05-31 00:00:00,0.468045078,0.468045078 +2007-06-01 00:00:00,0.468045078,0.468045078 +2007-06-02 00:00:00,0.468045078,0.468045078 +2007-06-03 00:00:00,0.468045078,0.468045078 +2007-06-04 00:00:00,0.468045078,0.468045078 +2007-06-05 00:00:00,0.468045078,0.468045078 +2007-06-06 00:00:00,0.468045078,0.468045078 +2007-06-07 00:00:00,0.468045078,0.468045078 +2007-06-08 00:00:00,0.468045078,0.468045078 +2007-06-09 00:00:00,0.468045078,0.468045078 +2007-06-10 00:00:00,0.468045078,0.468045078 +2007-06-11 00:00:00,0.468045078,0.468045078 +2007-06-12 00:00:00,0.468045078,0.468045078 +2007-06-13 00:00:00,0.468045078,0.468045078 +2007-06-14 00:00:00,0.468045078,0.468045078 +2007-06-15 00:00:00,0.468045078,0.468045078 +2007-06-16 00:00:00,0.468045078,0.468045078 +2007-06-17 00:00:00,0.468045078,0.468045078 +2007-06-18 00:00:00,0.468045078,0.468045078 +2007-06-19 00:00:00,1.018903706,1.018903706 +2007-06-20 00:00:00,1.7537345845,1.7537345845 +2007-06-21 00:00:00,0.435868111,0.435868111 +2007-06-22 00:00:00,2.165927109,2.165927109 +2007-06-23 00:00:00,0.7573142925,0.7573142925 +2007-06-24 00:00:00,0.40585271,0.40585271 +2007-06-25 00:00:00,0.317941541,0.317941541 +2007-06-26 00:00:00,0.361330986,0.361330986 +2007-06-27 00:00:00,1.297004388,1.297004388 +2007-06-28 00:00:00,0.5927452075,0.5927452075 +2007-06-29 00:00:00,1.237795925,1.237795925 +2007-06-30 00:00:00,2.865618658,2.865618658 +2007-07-01 00:00:00,1.122108495,1.122108495 +2007-07-02 00:00:00,3.9057739515,3.9057739515 +2007-07-03 00:00:00,3.4539742705,3.4539742705 +2007-07-04 00:00:00,2.2959062515,2.2959062515 +2007-07-05 00:00:00,1.810310742,1.810310742 +2007-07-06 00:00:00,0.68142493,0.68142493 +2007-07-07 00:00:00,0.444592185,0.444592185 +2007-07-08 00:00:00,6.3544712,6.3544712 +2007-07-09 00:00:00,1.54126752,1.54126752 +2007-07-10 00:00:00,0.5059964565,0.5059964565 +2007-07-11 00:00:00,0.5689365055,0.5689365055 +2007-07-12 00:00:00,0.3908584435,0.3908584435 +2007-07-13 00:00:00,0.359603137,0.359603137 +2007-07-14 00:00:00,1.5692700445,1.5692700445 +2007-07-15 00:00:00,5.53913022,5.53913022 +2007-07-16 00:00:00,1.3453113035,1.3453113035 +2007-07-17 00:00:00,2.889994249,2.889994249 +2007-07-18 00:00:00,0.5286264985,0.5286264985 +2007-07-19 00:00:00,0.417389011,0.417389011 +2007-07-20 00:00:00,0.745350482,0.745350482 +2007-07-21 00:00:00,0.4570432135,0.4570432135 +2007-07-22 00:00:00,0.2964495385,0.2964495385 +2007-07-23 00:00:00,0.344705952,0.344705952 +2007-07-24 00:00:00,1.023128001,1.023128001 +2007-07-25 00:00:00,1.40204503,1.40204503 +2007-07-26 00:00:00,0.447456539,0.447456539 +2007-07-27 00:00:00,0.3132437115,0.3132437115 +2007-07-28 00:00:00,0.270922313,0.270922313 +2007-07-29 00:00:00,0.2396263925,0.2396263925 +2007-07-30 00:00:00,0.2207990025,0.2207990025 +2007-07-31 00:00:00,0.95798929,0.95798929 +2007-08-01 00:00:00,0.3223310935,0.3223310935 +2007-08-02 00:00:00,1.6143707215,1.6143707215 +2007-08-03 00:00:00,1.4553344025,1.4553344025 +2007-08-04 00:00:00,0.7629200225,0.7629200225 +2007-08-05 00:00:00,0.96657108,0.96657108 +2007-08-06 00:00:00,0.495409059,0.495409059 +2007-08-07 00:00:00,0.2955595895,0.2955595895 +2007-08-08 00:00:00,0.5286336215,0.5286336215 +2007-08-09 00:00:00,0.63484326,0.63484326 +2007-08-10 00:00:00,3.5568032945,3.5568032945 +2007-08-11 00:00:00,1.4505400095,1.4505400095 +2007-08-12 00:00:00,0.853777082,0.853777082 +2007-08-13 00:00:00,0.5604067015,0.5604067015 +2007-08-14 00:00:00,0.544401362,0.544401362 +2007-08-15 00:00:00,0.428170816,0.428170816 +2007-08-16 00:00:00,1.522897259,1.522897259 +2007-08-17 00:00:00,2.8539314105,2.8539314105 +2007-08-18 00:00:00,0.5965337485,0.5965337485 +2007-08-19 00:00:00,2.0079795055,2.0079795055 +2007-08-20 00:00:00,0.996481699,0.996481699 +2007-08-21 00:00:00,0.6466656715,0.6466656715 +2007-08-22 00:00:00,0.4912852615,0.4912852615 +2007-08-23 00:00:00,0.3964469175,0.3964469175 +2007-08-24 00:00:00,0.341537839,0.341537839 +2007-08-25 00:00:00,0.2982857065,0.2982857065 +2007-08-26 00:00:00,0.2721134025,0.2721134025 +2007-08-27 00:00:00,0.24039531,0.24039531 +2007-08-28 00:00:00,0.222306615,0.222306615 +2007-08-29 00:00:00,0.206821204,0.206821204 +2007-08-30 00:00:00,0.197455489,0.197455489 +2007-08-31 00:00:00,0.2041917865,0.2041917865 +2007-09-01 00:00:00,0.2074354765,0.2074354765 +2007-09-02 00:00:00,0.343964655,0.343964655 +2007-09-03 00:00:00,0.269794485,0.269794485 +2007-09-04 00:00:00,0.2646254365,0.2646254365 +2007-09-05 00:00:00,0.2705477065,0.2705477065 +2007-09-06 00:00:00,0.23697567,0.23697567 +2007-09-07 00:00:00,0.2197664665,0.2197664665 +2007-09-08 00:00:00,0.2023857115,0.2023857115 +2007-09-09 00:00:00,0.1926937125,0.1926937125 +2007-09-10 00:00:00,0.1796312365,0.1796312365 +2007-09-11 00:00:00,0.1775022415,0.1775022415 +2007-09-12 00:00:00,0.1750914675,0.1750914675 +2007-09-13 00:00:00,0.1830206025,0.1830206025 +2007-09-14 00:00:00,0.222459019,0.222459019 +2007-09-15 00:00:00,0.2282576065,0.2282576065 +2007-09-16 00:00:00,8.676283905,8.676283905 +2007-09-17 00:00:00,2.395062709,2.395062709 +2007-09-18 00:00:00,1.4538774375,1.4538774375 +2007-09-19 00:00:00,1.771911979,1.771911979 +2007-09-20 00:00:00,1.0849206375,1.0849206375 +2007-09-21 00:00:00,0.8015554915,0.8015554915 +2007-09-22 00:00:00,0.6515995165,0.6515995165 +2007-09-23 00:00:00,0.5175274275,0.5175274275 +2007-09-24 00:00:00,1.135020589,1.135020589 +2007-09-25 00:00:00,0.8879293465,0.8879293465 +2007-09-26 00:00:00,0.6352589365,0.6352589365 +2007-09-27 00:00:00,0.485099325,0.485099325 +2007-09-28 00:00:00,0.388032885,0.388032885 +2007-09-29 00:00:00,0.32206509,0.32206509 +2007-09-30 00:00:00,0.284618014,0.284618014 +2007-10-01 00:00:00,0.26072064,0.26072064 +2007-10-02 00:00:00,0.2506579745,0.2506579745 +2007-10-03 00:00:00,1.935295299,1.935295299 +2007-10-04 00:00:00,0.5458226555,0.5458226555 +2007-10-05 00:00:00,0.3567946315,0.3567946315 +2007-10-06 00:00:00,0.311897677,0.311897677 +2007-10-07 00:00:00,0.2877002195,0.2877002195 +2007-10-08 00:00:00,2.1127897145,2.1127897145 +2007-10-09 00:00:00,1.3853805365,1.3853805365 +2007-10-10 00:00:00,0.5548343115,0.5548343115 +2007-10-11 00:00:00,1.49117007,1.49117007 +2007-10-12 00:00:00,0.7048272045,0.7048272045 +2007-10-13 00:00:00,0.5341937365,0.5341937365 +2007-10-14 00:00:00,0.938671521,0.938671521 +2007-10-15 00:00:00,2.179691955,2.179691955 +2007-10-16 00:00:00,0.662009394,0.662009394 +2007-10-17 00:00:00,0.5825091495,0.5825091495 +2007-10-18 00:00:00,0.475478776,0.475478776 +2007-10-19 00:00:00,0.4292366505,0.4292366505 +2007-10-20 00:00:00,0.399425567,0.399425567 +2007-10-21 00:00:00,0.3749950175,0.3749950175 +2007-10-22 00:00:00,3.558309109,3.558309109 +2007-10-23 00:00:00,0.7664246445,0.7664246445 +2007-10-24 00:00:00,0.5157104115,0.5157104115 +2007-10-25 00:00:00,0.4432050665,0.4432050665 +2007-10-26 00:00:00,1.6822952605,1.6822952605 +2007-10-27 00:00:00,5.982506285,5.982506285 +2007-10-28 00:00:00,4.260747542,4.260747542 +2007-10-29 00:00:00,1.404678106,1.404678106 +2007-10-30 00:00:00,0.8867056415,0.8867056415 +2007-10-31 00:00:00,0.605405044,0.605405044 +2007-11-01 00:00:00,0.8949230555,0.8949230555 +2007-11-02 00:00:00,0.5537131035,0.5537131035 +2007-11-03 00:00:00,0.5350537425,0.5350537425 +2007-11-04 00:00:00,0.415846437,0.415846437 +2007-11-05 00:00:00,0.714711272,0.714711272 +2007-11-06 00:00:00,0.3805545255,0.3805545255 +2007-11-07 00:00:00,0.3196731575,0.3196731575 +2007-11-08 00:00:00,0.894002416,0.894002416 +2007-11-09 00:00:00,0.3980380645,0.3980380645 +2007-11-10 00:00:00,0.2897845065,0.2897845065 +2007-11-11 00:00:00,0.276911681,0.276911681 +2007-11-12 00:00:00,0.367721145,0.367721145 +2007-11-13 00:00:00,0.458246654,0.458246654 +2007-11-14 00:00:00,0.912165605,0.912165605 +2007-11-15 00:00:00,0.5504093545,0.5504093545 +2007-11-16 00:00:00,0.4893433295,0.4893433295 +2007-11-17 00:00:00,2.872685691,2.872685691 +2007-11-18 00:00:00,3.4811723915,3.4811723915 +2007-11-19 00:00:00,1.4885229685,1.4885229685 +2007-11-20 00:00:00,0.6180478625,0.6180478625 +2007-11-21 00:00:00,0.447810151,0.447810151 +2007-11-22 00:00:00,0.8433105985,0.8433105985 +2007-11-23 00:00:00,0.5153554095,0.5153554095 +2007-11-24 00:00:00,1.655124742,1.655124742 +2007-11-25 00:00:00,0.7414676665,0.7414676665 +2007-11-26 00:00:00,1.2824437995,1.2824437995 +2007-11-27 00:00:00,1.832810834,1.832810834 +2007-11-28 00:00:00,4.9406905905,4.9406905905 +2007-11-29 00:00:00,2.1361494305,2.1361494305 +2007-11-30 00:00:00,3.373840474,3.373840474 +2007-12-01 00:00:00,2.6098452905,2.6098452905 +2007-12-02 00:00:00,3.514460197,3.514460197 +2007-12-03 00:00:00,1.6770506305,1.6770506305 +2007-12-04 00:00:00,2.614017328,2.614017328 +2007-12-05 00:00:00,1.934828294,1.934828294 +2007-12-06 00:00:00,4.5917448445,4.5917448445 +2007-12-07 00:00:00,4.451608183,4.451608183 +2007-12-08 00:00:00,8.26737655,8.26737655 +2007-12-09 00:00:00,5.70459087,5.70459087 +2007-12-10 00:00:00,1.657974517,1.657974517 +2007-12-11 00:00:00,0.67353521,0.67353521 +2007-12-12 00:00:00,1.2729955275,1.2729955275 +2007-12-13 00:00:00,0.750837145,0.750837145 +2007-12-14 00:00:00,0.5880334675,0.5880334675 +2007-12-15 00:00:00,0.451923228,0.451923228 +2007-12-16 00:00:00,0.395791718,0.395791718 +2007-12-17 00:00:00,0.3625145645,0.3625145645 +2007-12-18 00:00:00,0.341675817,0.341675817 +2007-12-19 00:00:00,0.324947733,0.324947733 +2007-12-20 00:00:00,0.316098988,0.316098988 +2007-12-21 00:00:00,0.3069935755,0.3069935755 +2007-12-22 00:00:00,1.1918317515,1.1918317515 +2007-12-23 00:00:00,0.81401232,0.81401232 +2007-12-24 00:00:00,2.650268738,2.650268738 +2007-12-25 00:00:00,1.324295787,1.324295787 +2007-12-26 00:00:00,2.074150665,2.074150665 +2007-12-27 00:00:00,3.381432032,3.381432032 +2007-12-28 00:00:00,4.04541894,4.04541894 +2007-12-29 00:00:00,1.2965800075,1.2965800075 +2007-12-30 00:00:00,0.650991435,0.650991435 +2007-12-31 00:00:00,3.004207208,3.004207208 +2008-01-01 00:00:00,2.4939469435,2.4939469435 +2008-01-02 00:00:00,0.7250425415,0.7250425415 +2008-01-03 00:00:00,0.464611668,0.464611668 +2008-01-04 00:00:00,0.89830153,0.89830153 +2008-01-05 00:00:00,1.423311398,1.423311398 +2008-01-06 00:00:00,1.083082689,1.083082689 +2008-01-07 00:00:00,2.491050377,2.491050377 +2008-01-08 00:00:00,2.679160089,2.679160089 +2008-01-09 00:00:00,1.310525746,1.310525746 +2008-01-10 00:00:00,1.8634839055,1.8634839055 +2008-01-11 00:00:00,1.033008745,1.033008745 +2008-01-12 00:00:00,3.761417371,3.761417371 +2008-01-13 00:00:00,2.0796720925,2.0796720925 +2008-01-14 00:00:00,2.466943085,2.466943085 +2008-01-15 00:00:00,1.2791706405,1.2791706405 +2008-01-16 00:00:00,0.9276293215,0.9276293215 +2008-01-17 00:00:00,3.873820037,3.873820037 +2008-01-18 00:00:00,4.939276335,4.939276335 +2008-01-19 00:00:00,1.035322582,1.035322582 +2008-01-20 00:00:00,1.1568309295,1.1568309295 +2008-01-21 00:00:00,7.662709945,7.662709945 +2008-01-22 00:00:00,4.093960788,4.093960788 +2008-01-23 00:00:00,4.0629348055,4.0629348055 +2008-01-24 00:00:00,1.7270479845,1.7270479845 +2008-01-25 00:00:00,0.9778213145,0.9778213145 +2008-01-26 00:00:00,0.7136281805,0.7136281805 +2008-01-27 00:00:00,0.5342424,0.5342424 +2008-01-28 00:00:00,0.5372436745,0.5372436745 +2008-02-01 00:00:00,1.647151414,1.647151414 +2008-02-02 00:00:00,3.2036927455,3.2036927455 +2008-02-03 00:00:00,6.933290545,6.933290545 +2008-02-04 00:00:00,3.1906474,3.1906474 +2008-02-05 00:00:00,2.7522941805,2.7522941805 +2008-02-06 00:00:00,1.553737991,1.553737991 +2008-02-07 00:00:00,3.140425803,3.140425803 +2008-02-12 00:00:00,0.538531315,0.538531315 +2008-02-13 00:00:00,0.4734758695,0.4734758695 +2008-02-14 00:00:00,0.422448692,0.422448692 +2008-02-15 00:00:00,0.389460268,0.389460268 +2008-02-16 00:00:00,0.373105063,0.373105063 +2008-02-17 00:00:00,0.34674844,0.34674844 +2008-02-18 00:00:00,0.340681612,0.340681612 +2008-02-19 00:00:00,0.3310301035,0.3310301035 +2008-02-20 00:00:00,0.393305264,0.393305264 +2008-02-21 00:00:00,0.930682659,0.930682659 +2008-02-22 00:00:00,1.384143802,1.384143802 +2008-02-23 00:00:00,3.4660621405,3.4660621405 +2008-02-24 00:00:00,3.302143357,3.302143357 +2008-02-25 00:00:00,1.851392741,1.851392741 +2008-02-26 00:00:00,1.531465978,1.531465978 +2008-02-27 00:00:00,1.006642551,1.006642551 +2008-02-28 00:00:00,0.8146316125,0.8146316125 +2008-02-29 00:00:00,3.758841838,3.758841838 +2008-03-01 00:00:00,1.8500889225,1.8500889225 +2008-03-02 00:00:00,1.366395983,1.366395983 +2008-03-03 00:00:00,1.742259292,1.742259292 +2008-03-04 00:00:00,1.714247257,1.714247257 +2008-03-05 00:00:00,1.0813862375,1.0813862375 +2008-03-06 00:00:00,1.200072295,1.200072295 +2008-03-07 00:00:00,1.5571460705,1.5571460705 +2008-03-08 00:00:00,3.258633488,3.258633488 +2008-03-09 00:00:00,2.0784773115,2.0784773115 +2008-03-10 00:00:00,2.9610748695,2.9610748695 +2008-03-11 00:00:00,1.756242066,1.756242066 +2008-03-12 00:00:00,2.947392155,2.947392155 +2008-03-13 00:00:00,4.0167810505,4.0167810505 +2008-03-14 00:00:00,1.964509994,1.964509994 +2008-03-15 00:00:00,2.848207717,2.848207717 +2008-03-16 00:00:00,2.0594495825,2.0594495825 +2008-03-17 00:00:00,0.9617844535,0.9617844535 +2008-03-18 00:00:00,0.7829458045,0.7829458045 +2008-03-19 00:00:00,0.50368208,0.50368208 +2008-03-20 00:00:00,0.5499350715,0.5499350715 +2008-03-21 00:00:00,1.0916441515,1.0916441515 +2008-03-22 00:00:00,0.566772762,0.566772762 +2008-03-23 00:00:00,0.526007473,0.526007473 +2008-03-24 00:00:00,0.8939435975,0.8939435975 +2008-03-25 00:00:00,0.947412175,0.947412175 +2008-03-26 00:00:00,0.943581824,0.943581824 +2008-03-27 00:00:00,0.6028265915,0.6028265915 +2008-03-28 00:00:00,6.24768888,6.24768888 +2008-03-29 00:00:00,1.9460009625,1.9460009625 +2008-03-30 00:00:00,0.870437086,0.870437086 +2008-03-31 00:00:00,0.4974139605,0.4974139605 +2008-04-01 00:00:00,0.4881620455,0.4881620455 +2008-04-02 00:00:00,0.4357293565,0.4357293565 +2008-04-03 00:00:00,0.3756201385,0.3756201385 +2008-04-04 00:00:00,0.34694353,0.34694353 +2008-04-05 00:00:00,0.359071729,0.359071729 +2008-04-06 00:00:00,0.371848232,0.371848232 +2008-04-07 00:00:00,0.999116987,0.999116987 +2008-04-08 00:00:00,1.117217292,1.117217292 +2008-04-09 00:00:00,0.511369606,0.511369606 +2008-04-10 00:00:00,0.791567044,0.791567044 +2008-04-11 00:00:00,0.8057708895,0.8057708895 +2008-04-12 00:00:00,2.2288612025,2.2288612025 +2008-04-13 00:00:00,0.692159082,0.692159082 +2008-04-14 00:00:00,0.400731983,0.400731983 +2008-04-15 00:00:00,0.33664843,0.33664843 +2008-04-16 00:00:00,0.304760334,0.304760334 +2008-04-17 00:00:00,0.279107812,0.279107812 +2008-04-18 00:00:00,0.266141671,0.266141671 +2008-04-19 00:00:00,0.260484594,0.260484594 +2008-04-20 00:00:00,0.253216088,0.253216088 +2008-04-21 00:00:00,0.247670653,0.247670653 +2008-04-22 00:00:00,0.2499281055,0.2499281055 +2008-04-23 00:00:00,0.2571593975,0.2571593975 +2008-04-24 00:00:00,0.2991055845,0.2991055845 +2008-04-25 00:00:00,0.483512516,0.483512516 +2008-04-26 00:00:00,3.1292534755,3.1292534755 +2008-04-27 00:00:00,0.7091267095,0.7091267095 +2008-04-28 00:00:00,1.291857179,1.291857179 +2008-04-29 00:00:00,0.511688334,0.511688334 +2008-04-30 00:00:00,0.368953396,0.368953396 +2008-05-01 00:00:00,0.3605574015,0.3605574015 +2008-05-02 00:00:00,0.3136075215,0.3136075215 +2008-05-03 00:00:00,0.460375603,0.460375603 +2008-05-04 00:00:00,0.373245725,0.373245725 +2008-05-05 00:00:00,0.300363121,0.300363121 +2008-05-06 00:00:00,0.2711006075,0.2711006075 +2008-05-07 00:00:00,0.25711288,0.25711288 +2008-05-08 00:00:00,0.247970406,0.247970406 +2008-05-09 00:00:00,0.24602201,0.24602201 +2008-05-10 00:00:00,0.243684139,0.243684139 +2008-05-11 00:00:00,0.2338071855,0.2338071855 +2008-05-12 00:00:00,0.231487804,0.231487804 +2008-05-13 00:00:00,0.225862119,0.225862119 +2008-05-14 00:00:00,0.2195332235,0.2195332235 +2008-05-15 00:00:00,0.218267444,0.218267444 +2008-05-16 00:00:00,0.2154055285,0.2154055285 +2008-05-17 00:00:00,0.211595745,0.211595745 +2008-05-18 00:00:00,0.205608943,0.205608943 +2008-05-19 00:00:00,0.206425325,0.206425325 +2008-05-20 00:00:00,0.207185229,0.207185229 +2008-05-21 00:00:00,0.3243171625,0.3243171625 +2008-05-22 00:00:00,0.4813651355,0.4813651355 +2008-05-23 00:00:00,0.35374434,0.35374434 +2008-05-24 00:00:00,0.3359061235,0.3359061235 +2008-05-25 00:00:00,0.2508072,0.2508072 +2008-05-26 00:00:00,0.22362558,0.22362558 +2008-05-27 00:00:00,0.2100990445,0.2100990445 +2008-05-28 00:00:00,0.205472879,0.205472879 +2008-05-29 00:00:00,0.208602344,0.208602344 +2008-05-30 00:00:00,0.2359898165,0.2359898165 +2008-05-31 00:00:00,0.461052486,0.461052486 +2008-06-01 00:00:00,0.323831585,0.323831585 +2008-06-02 00:00:00,0.230042119,0.230042119 +2008-06-03 00:00:00,0.2061942225,0.2061942225 +2008-06-04 00:00:00,0.5784133955,0.5784133955 +2008-06-05 00:00:00,0.484606284,0.484606284 +2008-06-06 00:00:00,0.41641202,0.41641202 +2008-06-07 00:00:00,0.2589755525,0.2589755525 +2008-06-08 00:00:00,0.264347198,0.264347198 +2008-06-09 00:00:00,0.2272146065,0.2272146065 +2008-06-10 00:00:00,0.210883304,0.210883304 +2008-06-11 00:00:00,0.224018863,0.224018863 +2008-06-12 00:00:00,0.262637848,0.262637848 +2008-06-13 00:00:00,0.201103204,0.201103204 +2008-06-14 00:00:00,0.2004549635,0.2004549635 +2008-06-15 00:00:00,0.190877719,0.190877719 +2008-06-16 00:00:00,0.1804196935,0.1804196935 +2008-06-17 00:00:00,0.23911441,0.23911441 +2008-06-18 00:00:00,0.32916335,0.32916335 +2008-06-19 00:00:00,0.3841197845,0.3841197845 +2008-06-20 00:00:00,0.2780602755,0.2780602755 +2008-06-21 00:00:00,0.366104294,0.366104294 +2008-06-22 00:00:00,3.6066174965,3.6066174965 +2008-06-23 00:00:00,0.7650195315,0.7650195315 +2008-06-24 00:00:00,0.5795217195,0.5795217195 +2008-06-25 00:00:00,3.0939534595,3.0939534595 +2008-06-26 00:00:00,2.2533657275,2.2533657275 +2008-06-27 00:00:00,1.801094271,1.801094271 +2008-06-28 00:00:00,1.1679858275,1.1679858275 +2008-06-29 00:00:00,0.699946747,0.699946747 +2008-06-30 00:00:00,3.1134266105,3.1134266105 +2008-07-01 00:00:00,3.9268483365,3.9268483365 +2008-07-02 00:00:00,1.6209279625,1.6209279625 +2008-07-03 00:00:00,0.9940824955,0.9940824955 +2008-07-04 00:00:00,0.4983973445,0.4983973445 +2008-07-05 00:00:00,0.4920017415,0.4920017415 +2008-07-06 00:00:00,0.3933377445,0.3933377445 +2008-07-07 00:00:00,0.3378441795,0.3378441795 +2008-07-08 00:00:00,0.3013302495,0.3013302495 +2008-07-09 00:00:00,0.2610190435,0.2610190435 +2008-07-10 00:00:00,0.7072328205,0.7072328205 +2008-07-11 00:00:00,0.336420487,0.336420487 +2008-07-12 00:00:00,0.275470938,0.275470938 +2008-07-13 00:00:00,0.2542652245,0.2542652245 +2008-07-14 00:00:00,0.2586903985,0.2586903985 +2008-07-15 00:00:00,0.349781568,0.349781568 +2008-07-16 00:00:00,0.277351877,0.277351877 +2008-07-17 00:00:00,0.271576095,0.271576095 +2008-07-18 00:00:00,0.7398573715,0.7398573715 +2008-07-19 00:00:00,0.6329933905,0.6329933905 +2008-07-20 00:00:00,0.3227331525,0.3227331525 +2008-07-21 00:00:00,0.263364812,0.263364812 +2008-07-22 00:00:00,0.349114424,0.349114424 +2008-07-23 00:00:00,0.29770605,0.29770605 +2008-07-24 00:00:00,0.2494831475,0.2494831475 +2008-07-25 00:00:00,0.224975476,0.224975476 +2008-07-26 00:00:00,0.212853461,0.212853461 +2008-07-27 00:00:00,0.2118703895,0.2118703895 +2008-07-28 00:00:00,0.221277371,0.221277371 +2008-07-29 00:00:00,0.2117015365,0.2117015365 +2008-07-30 00:00:00,0.3711447685,0.3711447685 +2008-07-31 00:00:00,0.247205288,0.247205288 +2008-08-01 00:00:00,2.7268573925,2.7268573925 +2008-08-02 00:00:00,1.989353043,1.989353043 +2008-08-03 00:00:00,0.77313351,0.77313351 +2008-08-04 00:00:00,0.587860614,0.587860614 +2008-08-05 00:00:00,0.398538165,0.398538165 +2008-08-06 00:00:00,0.555812135,0.555812135 +2008-08-07 00:00:00,0.3812802375,0.3812802375 +2008-08-08 00:00:00,0.3167251255,0.3167251255 +2008-08-09 00:00:00,3.2833053525,3.2833053525 +2008-08-10 00:00:00,3.8883353945,3.8883353945 +2008-08-11 00:00:00,2.3687351635,2.3687351635 +2008-08-12 00:00:00,1.6248569075,1.6248569075 +2008-08-13 00:00:00,8.78744532,8.78744532 +2008-08-14 00:00:00,4.635727208,4.635727208 +2008-08-15 00:00:00,1.7854819815,1.7854819815 +2008-08-16 00:00:00,5.967848685,5.967848685 +2008-08-17 00:00:00,1.5776696535,1.5776696535 +2008-08-18 00:00:00,1.3095345695,1.3095345695 +2008-08-19 00:00:00,0.768704262,0.768704262 +2008-08-20 00:00:00,0.499612446,0.499612446 +2008-08-21 00:00:00,0.4019384075,0.4019384075 +2008-08-22 00:00:00,0.3412939325,0.3412939325 +2008-08-23 00:00:00,2.220682289,2.220682289 +2008-08-24 00:00:00,1.1741747335,1.1741747335 +2008-08-25 00:00:00,2.871085617,2.871085617 +2008-08-26 00:00:00,1.9736226215,1.9736226215 +2008-08-27 00:00:00,1.7124140045,1.7124140045 +2008-08-28 00:00:00,0.821555597,0.821555597 +2008-08-29 00:00:00,0.5548322975,0.5548322975 +2008-08-30 00:00:00,1.015889947,1.015889947 +2008-08-31 00:00:00,0.955966138,0.955966138 +2008-09-01 00:00:00,1.502241018,1.502241018 +2008-09-02 00:00:00,4.411483148,4.411483148 +2008-09-03 00:00:00,4.9029659475,4.9029659475 +2008-09-04 00:00:00,1.4050190435,1.4050190435 +2008-09-05 00:00:00,0.5865888805,0.5865888805 +2008-09-06 00:00:00,0.521105532,0.521105532 +2008-09-07 00:00:00,0.369531409,0.369531409 +2008-09-08 00:00:00,0.365766542,0.365766542 +2008-09-09 00:00:00,3.608576638,3.608576638 +2008-09-10 00:00:00,4.921143753,4.921143753 +2008-09-11 00:00:00,4.937493447,4.937493447 +2008-09-12 00:00:00,2.861640716,2.861640716 +2008-09-13 00:00:00,0.889068736,0.889068736 +2008-09-14 00:00:00,3.7644944875,3.7644944875 +2008-09-15 00:00:00,0.969811356,0.969811356 +2008-09-16 00:00:00,0.472552082,0.472552082 +2008-09-17 00:00:00,0.365820319,0.365820319 +2008-09-18 00:00:00,0.6408974725,0.6408974725 +2008-09-19 00:00:00,2.5629715065,2.5629715065 +2008-09-20 00:00:00,0.8420099885,0.8420099885 +2008-09-21 00:00:00,0.426294841,0.426294841 +2008-09-22 00:00:00,0.3554614535,0.3554614535 +2008-09-23 00:00:00,0.3149186565,0.3149186565 +2008-09-24 00:00:00,0.291741367,0.291741367 +2008-09-25 00:00:00,0.2782977605,0.2782977605 +2008-09-26 00:00:00,0.2732499765,0.2732499765 +2008-09-27 00:00:00,0.2770760045,0.2770760045 +2008-09-28 00:00:00,0.2860382205,0.2860382205 +2008-09-29 00:00:00,1.5528387855,1.5528387855 +2008-09-30 00:00:00,7.45138274,7.45138274 +2008-10-01 00:00:00,2.921925707,2.921925707 +2008-10-02 00:00:00,1.740186999,1.740186999 +2008-10-03 00:00:00,0.7555251615,0.7555251615 +2008-10-04 00:00:00,8.535294215,8.535294215 +2008-10-05 00:00:00,1.667702755,1.667702755 +2008-10-06 00:00:00,0.7827689305,0.7827689305 +2008-10-07 00:00:00,5.129257325,5.129257325 +2008-10-08 00:00:00,0.785439735,0.785439735 +2008-10-09 00:00:00,5.70502607,5.70502607 +2008-10-10 00:00:00,13.50609861,13.50609861 +2008-10-11 00:00:00,2.3855085995,2.3855085995 +2008-10-12 00:00:00,0.647777549,0.647777549 +2008-10-13 00:00:00,0.790188894,0.790188894 +2008-10-14 00:00:00,0.507338873,0.507338873 +2008-10-15 00:00:00,1.0246456115,1.0246456115 +2008-10-16 00:00:00,1.3500581615,1.3500581615 +2008-10-17 00:00:00,0.7335896865,0.7335896865 +2008-10-18 00:00:00,1.4638481285,1.4638481285 +2008-10-19 00:00:00,1.611949726,1.611949726 +2008-10-20 00:00:00,2.5391441415,2.5391441415 +2008-10-21 00:00:00,1.656021603,1.656021603 +2008-10-22 00:00:00,1.017193482,1.017193482 +2008-10-23 00:00:00,9.238370345,9.238370345 +2008-10-24 00:00:00,1.3252699535,1.3252699535 +2008-10-25 00:00:00,9.18243007,9.18243007 +2008-10-26 00:00:00,2.02702126,2.02702126 +2008-10-27 00:00:00,1.212519658,1.212519658 +2008-10-28 00:00:00,1.3043568595,1.3043568595 +2008-10-29 00:00:00,2.9264301605,2.9264301605 +2008-10-30 00:00:00,1.230795744,1.230795744 +2008-10-31 00:00:00,0.727095787,0.727095787 +2008-11-01 00:00:00,0.578427266,0.578427266 +2008-11-02 00:00:00,0.4512921225,0.4512921225 +2008-11-03 00:00:00,0.512423023,0.512423023 +2008-11-04 00:00:00,0.466453116,0.466453116 +2008-11-05 00:00:00,0.39277402,0.39277402 +2008-11-06 00:00:00,0.6076044365,0.6076044365 +2008-11-07 00:00:00,3.5683263705,3.5683263705 +2008-11-08 00:00:00,3.190534296,3.190534296 +2008-11-09 00:00:00,1.301735032,1.301735032 +2008-11-10 00:00:00,3.394753951,3.394753951 +2008-11-11 00:00:00,2.276174957,2.276174957 +2008-11-12 00:00:00,0.870537698,0.870537698 +2008-11-13 00:00:00,3.5422980945,3.5422980945 +2008-11-14 00:00:00,2.5711371505,2.5711371505 +2008-11-15 00:00:00,1.7981661785,1.7981661785 +2008-11-16 00:00:00,1.0963830915,1.0963830915 +2008-11-17 00:00:00,3.920414544,3.920414544 +2008-11-18 00:00:00,2.163025356,2.163025356 +2008-11-19 00:00:00,0.802703387,0.802703387 +2008-11-20 00:00:00,2.030121634,2.030121634 +2008-11-21 00:00:00,1.72488545,1.72488545 +2008-11-22 00:00:00,2.353372469,2.353372469 +2008-11-23 00:00:00,3.3043386955,3.3043386955 +2008-11-24 00:00:00,1.084253159,1.084253159 +2008-11-25 00:00:00,0.9660873955,0.9660873955 +2008-11-26 00:00:00,1.4093447095,1.4093447095 +2008-11-27 00:00:00,3.7591897775,3.7591897775 +2008-11-28 00:00:00,0.9177524945,0.9177524945 +2008-11-29 00:00:00,0.821333503,0.821333503 +2008-11-30 00:00:00,0.7142836345,0.7142836345 +2008-12-01 00:00:00,0.819567402,0.819567402 +2008-12-02 00:00:00,0.983909071,0.983909071 +2008-12-03 00:00:00,2.8673559875,2.8673559875 +2008-12-04 00:00:00,4.189056312,4.189056312 +2008-12-05 00:00:00,2.093203895,2.093203895 +2008-12-06 00:00:00,0.7455151245,0.7455151245 +2008-12-07 00:00:00,0.517504446,0.517504446 +2008-12-08 00:00:00,1.997100908,1.997100908 +2008-12-09 00:00:00,0.776825414,0.776825414 +2008-12-10 00:00:00,0.76997309,0.76997309 +2008-12-11 00:00:00,1.139093748,1.139093748 +2008-12-12 00:00:00,6.51786881,6.51786881 +2008-12-13 00:00:00,2.0169369675,2.0169369675 +2008-12-14 00:00:00,0.923218058,0.923218058 +2008-12-15 00:00:00,1.728244866,1.728244866 +2008-12-16 00:00:00,3.2492272675,3.2492272675 +2008-12-17 00:00:00,1.059747432,1.059747432 +2008-12-18 00:00:00,1.8180505165,1.8180505165 +2008-12-19 00:00:00,3.1397938625,3.1397938625 +2008-12-20 00:00:00,2.757106974,2.757106974 +2008-12-21 00:00:00,4.8359989435,4.8359989435 +2008-12-22 00:00:00,0.917783214,0.917783214 +2008-12-23 00:00:00,0.5822487935,0.5822487935 +2008-12-24 00:00:00,0.4600251075,0.4600251075 +2008-12-25 00:00:00,0.4012259955,0.4012259955 +2008-12-26 00:00:00,0.3669041925,0.3669041925 +2008-12-27 00:00:00,0.3427540545,0.3427540545 +2008-12-28 00:00:00,0.3230550115,0.3230550115 +2008-12-29 00:00:00,0.307836669,0.307836669 +2008-12-30 00:00:00,0.2999128645,0.2999128645 +2008-12-31 00:00:00,0.2905705965,0.2905705965 +2009-01-01 00:00:00,0.281526604,0.281526604 +2009-01-02 00:00:00,0.274799936,0.274799936 +2009-01-03 00:00:00,0.265369029,0.265369029 +2009-01-04 00:00:00,0.26815054,0.26815054 +2009-01-05 00:00:00,0.260733178,0.260733178 +2009-01-06 00:00:00,0.2554642375,0.2554642375 +2009-01-07 00:00:00,0.251567445,0.251567445 +2009-01-08 00:00:00,0.259660783,0.259660783 +2009-01-09 00:00:00,0.251117815,0.251117815 +2009-01-10 00:00:00,1.833249079,1.833249079 +2009-01-11 00:00:00,5.4430523,5.4430523 +2009-01-12 00:00:00,1.384275789,1.384275789 +2009-01-13 00:00:00,0.7195795265,0.7195795265 +2009-01-14 00:00:00,3.8121830095,3.8121830095 +2009-01-15 00:00:00,1.274942023,1.274942023 +2009-01-16 00:00:00,0.9922911435,0.9922911435 +2009-01-17 00:00:00,2.834992075,2.834992075 +2009-01-18 00:00:00,2.7814270615,2.7814270615 +2009-01-19 00:00:00,1.8000372845,1.8000372845 +2009-01-20 00:00:00,2.3115275355,2.3115275355 +2009-01-21 00:00:00,4.4115959455,4.4115959455 +2009-01-22 00:00:00,4.4219561375,4.4219561375 +2009-01-23 00:00:00,1.5453763035,1.5453763035 +2009-01-24 00:00:00,1.229907605,1.229907605 +2009-01-25 00:00:00,1.834111471,1.834111471 +2009-01-26 00:00:00,1.59917666,1.59917666 +2009-01-27 00:00:00,1.209983592,1.209983592 +2009-01-28 00:00:00,0.557044518,0.557044518 +2009-01-29 00:00:00,0.7674919335,0.7674919335 +2009-01-30 00:00:00,0.948146713,0.948146713 +2009-01-31 00:00:00,1.310463456,1.310463456 +2009-02-01 00:00:00,0.642700553,0.642700553 +2009-02-02 00:00:00,0.4407541535,0.4407541535 +2009-02-03 00:00:00,0.512264953,0.512264953 +2009-02-04 00:00:00,0.435364499,0.435364499 +2009-02-05 00:00:00,0.39040635,0.39040635 +2009-02-06 00:00:00,0.373233124,0.373233124 +2009-02-07 00:00:00,0.384784457,0.384784457 +2009-02-08 00:00:00,0.7325612285,0.7325612285 +2009-02-09 00:00:00,0.662965356,0.662965356 +2009-02-10 00:00:00,1.3038307045,1.3038307045 +2009-02-11 00:00:00,0.8901463465,0.8901463465 +2009-02-12 00:00:00,0.7552372345,0.7552372345 +2009-02-13 00:00:00,0.5312682455,0.5312682455 +2009-02-14 00:00:00,0.456650645,0.456650645 +2009-02-15 00:00:00,0.636664439,0.636664439 +2009-02-16 00:00:00,0.425475689,0.425475689 +2009-02-17 00:00:00,0.3589426185,0.3589426185 +2009-02-18 00:00:00,0.3289349715,0.3289349715 +2009-02-19 00:00:00,0.422486845,0.422486845 +2009-02-20 00:00:00,0.351432745,0.351432745 +2009-02-21 00:00:00,0.316773463,0.316773463 +2009-02-22 00:00:00,0.48840845,0.48840845 +2009-02-23 00:00:00,0.6677872255,0.6677872255 +2009-02-24 00:00:00,0.4404994185,0.4404994185 +2009-02-25 00:00:00,0.511486883,0.511486883 +2009-02-26 00:00:00,0.559814099,0.559814099 +2009-02-27 00:00:00,1.1295125385,1.1295125385 +2009-02-28 00:00:00,1.1408278475,1.1408278475 +2009-03-01 00:00:00,1.0294312355,1.0294312355 +2009-03-02 00:00:00,1.2235638715,1.2235638715 +2009-03-03 00:00:00,2.556062496,2.556062496 +2009-03-04 00:00:00,1.328581391,1.328581391 +2009-03-05 00:00:00,1.4718009005,1.4718009005 +2009-03-06 00:00:00,1.633319982,1.633319982 +2009-03-07 00:00:00,2.267470739,2.267470739 +2009-03-08 00:00:00,1.9039982475,1.9039982475 +2009-03-09 00:00:00,2.5826822145,2.5826822145 +2009-03-10 00:00:00,1.7129338365,1.7129338365 +2009-03-11 00:00:00,3.7637454985,3.7637454985 +2009-03-12 00:00:00,1.2927625815,1.2927625815 +2009-03-13 00:00:00,0.5423357855,0.5423357855 +2009-03-14 00:00:00,0.623042972,0.623042972 +2009-03-15 00:00:00,0.419076869,0.419076869 +2009-03-16 00:00:00,0.938582124,0.938582124 +2009-03-17 00:00:00,0.6755210975,0.6755210975 +2009-03-18 00:00:00,0.4154525965,0.4154525965 +2009-03-19 00:00:00,0.3519385165,0.3519385165 +2009-03-20 00:00:00,0.3161084665,0.3161084665 +2009-03-21 00:00:00,0.2959886675,0.2959886675 +2009-03-22 00:00:00,0.280372096,0.280372096 +2009-03-23 00:00:00,0.278049494,0.278049494 +2009-03-24 00:00:00,0.2811077165,0.2811077165 +2009-03-25 00:00:00,0.335788996,0.335788996 +2009-03-26 00:00:00,1.077782888,1.077782888 +2009-03-27 00:00:00,0.698250774,0.698250774 +2009-03-28 00:00:00,0.614095216,0.614095216 +2009-03-29 00:00:00,1.2044694235,1.2044694235 +2009-03-30 00:00:00,0.629208536,0.629208536 +2009-03-31 00:00:00,0.3911186225,0.3911186225 +2009-04-01 00:00:00,0.3179981695,0.3179981695 +2009-04-02 00:00:00,0.2739849945,0.2739849945 +2009-04-03 00:00:00,0.409390563,0.409390563 +2009-04-04 00:00:00,1.0686003565,1.0686003565 +2009-04-05 00:00:00,0.3775884025,0.3775884025 +2009-04-06 00:00:00,0.312369975,0.312369975 +2009-04-07 00:00:00,3.9363346035,3.9363346035 +2009-04-08 00:00:00,1.582743807,1.582743807 +2009-04-09 00:00:00,3.2442406345,3.2442406345 +2009-04-10 00:00:00,1.188355352,1.188355352 +2009-04-11 00:00:00,0.8990419485,0.8990419485 +2009-04-12 00:00:00,0.4431650165,0.4431650165 +2009-04-13 00:00:00,0.8573486615,0.8573486615 +2009-04-14 00:00:00,0.462760263,0.462760263 +2009-04-15 00:00:00,0.3506535135,0.3506535135 +2009-04-16 00:00:00,0.316143241,0.316143241 +2009-04-17 00:00:00,0.277679647,0.277679647 +2009-04-18 00:00:00,0.2607936505,0.2607936505 +2009-04-19 00:00:00,0.244855388,0.244855388 +2009-04-20 00:00:00,0.24602201,0.24602201 +2009-04-21 00:00:00,0.615281865,0.615281865 +2009-04-22 00:00:00,1.0911048,1.0911048 +2009-04-23 00:00:00,1.071653598,1.071653598 +2009-04-24 00:00:00,1.380103415,1.380103415 +2009-04-25 00:00:00,0.6743071145,0.6743071145 +2009-04-26 00:00:00,1.0278439825,1.0278439825 +2009-04-27 00:00:00,1.5258969665,1.5258969665 +2009-04-28 00:00:00,0.691756162,0.691756162 +2009-04-29 00:00:00,0.617398377,0.617398377 +2009-04-30 00:00:00,0.7863791815,0.7863791815 +2009-05-01 00:00:00,1.5460347905,1.5460347905 +2009-05-02 00:00:00,0.5890969575,0.5890969575 +2009-05-03 00:00:00,0.6993966285,0.6993966285 +2009-05-04 00:00:00,1.6933668725,1.6933668725 +2009-05-05 00:00:00,1.491611663,1.491611663 +2009-05-06 00:00:00,5.020630885,5.020630885 +2009-05-07 00:00:00,1.8990894105,1.8990894105 +2009-05-08 00:00:00,2.0832650775,2.0832650775 +2009-05-09 00:00:00,1.718773009,1.718773009 +2009-05-10 00:00:00,1.169206639,1.169206639 +2009-05-11 00:00:00,0.801620179,0.801620179 +2009-05-12 00:00:00,0.5867164015,0.5867164015 +2009-05-13 00:00:00,0.4538658715,0.4538658715 +2009-05-14 00:00:00,0.379152844,0.379152844 +2009-05-15 00:00:00,0.6350506425,0.6350506425 +2009-05-16 00:00:00,1.1228823675,1.1228823675 +2009-05-17 00:00:00,1.18679724,1.18679724 +2009-05-18 00:00:00,1.25858484,1.25858484 +2009-05-19 00:00:00,0.7988911425,0.7988911425 +2009-05-20 00:00:00,0.623194459,0.623194459 +2009-05-21 00:00:00,0.495792945,0.495792945 +2009-05-22 00:00:00,0.436478389,0.436478389 +2009-05-23 00:00:00,0.6280002225,0.6280002225 +2009-05-24 00:00:00,0.59049648,0.59049648 +2009-05-25 00:00:00,0.5795448865,0.5795448865 +2009-05-26 00:00:00,0.5082227775,0.5082227775 +2009-05-27 00:00:00,1.0613795625,1.0613795625 +2009-05-28 00:00:00,0.868377679,0.868377679 +2009-05-29 00:00:00,0.6407599615,0.6407599615 +2009-05-30 00:00:00,0.4901423625,0.4901423625 +2009-05-31 00:00:00,0.397609999,0.397609999 +2009-06-01 00:00:00,0.339580654,0.339580654 +2009-06-02 00:00:00,0.297453049,0.297453049 +2009-06-03 00:00:00,0.256795144,0.256795144 +2009-06-04 00:00:00,0.2354744025,0.2354744025 +2009-06-05 00:00:00,0.2151687375,0.2151687375 +2009-06-06 00:00:00,0.197586934,0.197586934 +2009-06-07 00:00:00,0.189254149,0.189254149 +2009-06-08 00:00:00,0.1848869665,0.1848869665 +2009-06-09 00:00:00,0.178795474,0.178795474 +2009-06-10 00:00:00,0.1740740625,0.1740740625 +2009-06-11 00:00:00,0.1714617225,0.1714617225 +2009-06-12 00:00:00,0.179167039,0.179167039 +2009-06-13 00:00:00,0.183789349,0.183789349 +2009-06-14 00:00:00,0.199654864,0.199654864 +2009-06-15 00:00:00,0.190146319,0.190146319 +2009-06-16 00:00:00,0.208978144,0.208978144 +2009-06-17 00:00:00,0.5884376065,0.5884376065 +2009-06-18 00:00:00,0.4047910875,0.4047910875 +2009-06-19 00:00:00,0.344543479,0.344543479 +2009-06-20 00:00:00,0.2990215915,0.2990215915 +2009-06-21 00:00:00,0.2725794115,0.2725794115 +2009-06-22 00:00:00,0.2583502315,0.2583502315 +2009-06-23 00:00:00,0.23907879,0.23907879 +2009-06-24 00:00:00,0.2338272,0.2338272 +2009-06-25 00:00:00,0.217119195,0.217119195 +2009-06-26 00:00:00,0.203726295,0.203726295 +2009-06-27 00:00:00,0.1977778915,0.1977778915 +2009-06-28 00:00:00,0.1948964515,0.1948964515 +2009-06-29 00:00:00,0.18477441,0.18477441 +2009-06-30 00:00:00,0.186387975,0.186387975 +2009-07-01 00:00:00,0.180991485,0.180991485 +2009-07-02 00:00:00,0.190760155,0.190760155 +2009-07-03 00:00:00,0.227163714,0.227163714 +2009-07-04 00:00:00,0.2654875645,0.2654875645 +2009-07-05 00:00:00,0.3038114145,0.3038114145 +2009-07-06 00:00:00,0.342135265,0.342135265 +2009-07-07 00:00:00,0.380459115,0.380459115 +2009-07-08 00:00:00,0.4187829655,0.4187829655 +2009-07-09 00:00:00,0.457106816,0.457106816 +2009-07-10 00:00:00,0.495430666,0.495430666 +2009-07-11 00:00:00,0.5337545165,0.5337545165 +2009-07-12 00:00:00,0.5720783665,0.5720783665 +2009-07-13 00:00:00,0.610402217,0.610402217 +2009-07-14 00:00:00,0.6494547085,0.6494547085 +2009-07-15 00:00:00,0.583387065,0.583387065 +2009-07-16 00:00:00,0.4743472275,0.4743472275 +2009-07-17 00:00:00,0.385304625,0.385304625 +2009-07-18 00:00:00,0.3474396675,0.3474396675 +2009-07-19 00:00:00,0.3343872825,0.3343872825 +2009-07-20 00:00:00,0.36259983,0.36259983 +2009-07-21 00:00:00,0.410745184,0.410745184 +2009-07-22 00:00:00,0.4260386025,0.4260386025 +2009-07-23 00:00:00,0.769290919,0.769290919 +2009-07-24 00:00:00,0.8707069465,0.8707069465 +2009-07-25 00:00:00,0.661995574,0.661995574 +2009-07-26 00:00:00,1.5846848775,1.5846848775 +2009-07-27 00:00:00,1.48306392,1.48306392 +2009-07-28 00:00:00,1.0690274365,1.0690274365 +2009-07-29 00:00:00,0.9123025615,0.9123025615 +2009-07-30 00:00:00,0.7534435165,0.7534435165 +2009-07-31 00:00:00,0.9819660825,0.9819660825 +2009-08-01 00:00:00,1.80802701,1.80802701 +2009-08-02 00:00:00,1.18111095,1.18111095 +2009-08-03 00:00:00,1.1033488125,1.1033488125 +2009-08-04 00:00:00,0.9377397565,0.9377397565 +2009-08-05 00:00:00,0.714048829,0.714048829 +2009-08-06 00:00:00,0.5566434415,0.5566434415 +2009-08-07 00:00:00,0.4697096515,0.4697096515 +2009-08-08 00:00:00,0.6091590825,0.6091590825 +2009-08-09 00:00:00,0.460769839,0.460769839 +2009-08-10 00:00:00,0.8390243025,0.8390243025 +2009-08-11 00:00:00,4.54994328,4.54994328 +2009-08-12 00:00:00,0.756329355,0.756329355 +2009-08-13 00:00:00,0.5291795625,0.5291795625 +2009-08-14 00:00:00,2.410019494,2.410019494 +2009-08-15 00:00:00,2.1400091265,2.1400091265 +2009-08-16 00:00:00,1.62555651,1.62555651 +2009-08-17 00:00:00,1.843088009,1.843088009 +2009-08-18 00:00:00,1.781308744,1.781308744 +2009-08-19 00:00:00,5.59479779,5.59479779 +2009-08-20 00:00:00,0.755706544,0.755706544 +2009-08-21 00:00:00,1.366329171,1.366329171 +2009-08-22 00:00:00,1.028602511,1.028602511 +2009-08-23 00:00:00,6.451062355,6.451062355 +2009-08-24 00:00:00,1.128501107,1.128501107 +2009-08-25 00:00:00,0.9965286965,0.9965286965 +2009-08-26 00:00:00,5.583884585,5.583884585 +2009-08-27 00:00:00,1.507052322,1.507052322 +2009-08-28 00:00:00,1.7969482665,1.7969482665 +2009-08-29 00:00:00,0.8838652015,0.8838652015 +2009-08-30 00:00:00,1.758663322,1.758663322 +2009-08-31 00:00:00,4.829122349,4.829122349 +2009-09-01 00:00:00,1.7123263745,1.7123263745 +2009-09-02 00:00:00,1.734634963,1.734634963 +2009-09-03 00:00:00,1.37208297,1.37208297 +2009-09-04 00:00:00,1.006759197,1.006759197 +2009-09-05 00:00:00,0.562025079,0.562025079 +2009-09-06 00:00:00,5.160494295,5.160494295 +2009-09-07 00:00:00,1.666116422,1.666116422 +2009-09-08 00:00:00,5.69182905,5.69182905 +2009-09-09 00:00:00,0.7025639195,0.7025639195 +2009-09-10 00:00:00,0.434137916,0.434137916 +2009-09-11 00:00:00,0.36344874,0.36344874 +2009-09-12 00:00:00,0.327819874,0.327819874 +2009-09-13 00:00:00,0.306137886,0.306137886 +2009-09-14 00:00:00,0.2925789995,0.2925789995 +2009-09-15 00:00:00,0.2843662085,0.2843662085 +2009-09-16 00:00:00,0.2755309985,0.2755309985 +2009-09-17 00:00:00,0.268437583,0.268437583 +2009-09-18 00:00:00,0.2656565865,0.2656565865 +2009-09-19 00:00:00,0.3211726165,0.3211726165 +2009-09-20 00:00:00,0.29250805,0.29250805 +2009-09-21 00:00:00,5.247540355,5.247540355 +2009-09-22 00:00:00,1.7833652025,1.7833652025 +2009-09-23 00:00:00,0.6710174505,0.6710174505 +2009-09-24 00:00:00,0.4379857455,0.4379857455 +2009-09-25 00:00:00,0.3521266695,0.3521266695 +2009-09-26 00:00:00,0.321356263,0.321356263 +2009-09-27 00:00:00,0.402205925,0.402205925 +2009-09-28 00:00:00,0.536881426,0.536881426 +2009-09-29 00:00:00,0.779289256,0.779289256 +2009-09-30 00:00:00,1.234667745,1.234667745 +2009-10-01 00:00:00,0.8026523025,0.8026523025 +2009-10-02 00:00:00,0.7695062665,0.7695062665 +2009-10-03 00:00:00,1.769682557,1.769682557 +2009-10-04 00:00:00,1.085796006,1.085796006 +2009-10-05 00:00:00,0.5823326085,0.5823326085 +2009-10-06 00:00:00,0.4466385755,0.4466385755 +2009-10-07 00:00:00,0.371579217,0.371579217 +2009-10-08 00:00:00,0.3418113735,0.3418113735 +2009-10-09 00:00:00,0.3462959105,0.3462959105 +2009-10-10 00:00:00,0.3732905005,0.3732905005 +2009-10-11 00:00:00,0.8704594145,0.8704594145 +2009-10-12 00:00:00,0.4487918185,0.4487918185 +2009-10-13 00:00:00,0.6019680005,0.6019680005 +2009-10-14 00:00:00,0.4891742065,0.4891742065 +2009-10-15 00:00:00,0.3894586955,0.3894586955 +2009-10-16 00:00:00,0.348171864,0.348171864 +2009-10-17 00:00:00,0.327924419,0.327924419 +2009-10-18 00:00:00,0.975982562,0.975982562 +2009-10-19 00:00:00,1.6078895975,1.6078895975 +2009-10-20 00:00:00,1.351247174,1.351247174 +2009-10-21 00:00:00,0.7623896295,0.7623896295 +2009-10-22 00:00:00,0.514401019,0.514401019 +2009-10-23 00:00:00,0.5616108735,0.5616108735 +2009-10-24 00:00:00,6.532659905,6.532659905 +2009-10-25 00:00:00,2.6466691965,2.6466691965 +2009-10-26 00:00:00,1.1432651815,1.1432651815 +2009-10-27 00:00:00,5.03992491,5.03992491 +2009-10-28 00:00:00,0.9934370435,0.9934370435 +2009-10-29 00:00:00,0.5513800565,0.5513800565 +2009-10-30 00:00:00,2.934573792,2.934573792 +2009-10-31 00:00:00,0.802040205,0.802040205 +2009-11-01 00:00:00,3.903506417,3.903506417 +2009-11-02 00:00:00,2.145798738,2.145798738 +2009-11-03 00:00:00,5.736613195,5.736613195 +2009-11-04 00:00:00,1.9816802445,1.9816802445 +2009-11-05 00:00:00,1.8092642605,1.8092642605 +2009-11-06 00:00:00,3.844815654,3.844815654 +2009-11-07 00:00:00,2.674089753,2.674089753 +2009-11-08 00:00:00,1.1588331745,1.1588331745 +2009-11-09 00:00:00,2.873032885,2.873032885 +2009-11-10 00:00:00,1.348079023,1.348079023 +2009-11-11 00:00:00,1.1398974255,1.1398974255 +2009-11-12 00:00:00,2.83156979,2.83156979 +2009-11-13 00:00:00,1.4580301135,1.4580301135 +2009-11-14 00:00:00,0.9284808835,0.9284808835 +2009-11-15 00:00:00,0.65701592,0.65701592 +2009-11-16 00:00:00,3.4852481165,3.4852481165 +2009-11-17 00:00:00,3.2324901025,3.2324901025 +2009-11-18 00:00:00,7.7248445,7.7248445 +2009-11-19 00:00:00,6.93045831,6.93045831 +2009-11-20 00:00:00,2.626125402,2.626125402 +2009-11-21 00:00:00,3.191401997,3.191401997 +2009-11-22 00:00:00,3.509869719,3.509869719 +2009-11-23 00:00:00,3.1362261715,3.1362261715 +2009-11-24 00:00:00,7.275294195,7.275294195 +2009-11-25 00:00:00,3.125892582,3.125892582 +2009-11-26 00:00:00,1.9809647145,1.9809647145 +2009-11-27 00:00:00,1.517749405,1.517749405 +2009-11-28 00:00:00,0.916770622,0.916770622 +2009-11-29 00:00:00,0.5412374505,0.5412374505 +2009-11-30 00:00:00,0.5076192085,0.5076192085 +2009-12-01 00:00:00,1.24846486,1.24846486 +2009-12-02 00:00:00,1.79154892,1.79154892 +2009-12-03 00:00:00,1.5894871095,1.5894871095 +2009-12-04 00:00:00,1.201528862,1.201528862 +2009-12-05 00:00:00,3.3587532845,3.3587532845 +2009-12-06 00:00:00,1.6678103115,1.6678103115 +2009-12-07 00:00:00,3.30168912,3.30168912 +2009-12-08 00:00:00,1.4546421775,1.4546421775 +2009-12-09 00:00:00,2.070832758,2.070832758 +2009-12-10 00:00:00,0.882188066,0.882188066 +2009-12-11 00:00:00,2.122748584,2.122748584 +2009-12-12 00:00:00,0.6870486125,0.6870486125 +2009-12-13 00:00:00,0.4893293285,0.4893293285 +2009-12-14 00:00:00,0.421956143,0.421956143 +2009-12-15 00:00:00,0.529686497,0.529686497 +2009-12-16 00:00:00,0.434967704,0.434967704 +2009-12-17 00:00:00,0.4660078615,0.4660078615 +2009-12-18 00:00:00,0.389564553,0.389564553 +2009-12-19 00:00:00,0.5292241625,0.5292241625 +2009-12-20 00:00:00,0.6449519195,0.6449519195 +2009-12-21 00:00:00,0.699556973,0.699556973 +2009-12-22 00:00:00,0.559974957,0.559974957 +2009-12-23 00:00:00,0.45945375,0.45945375 +2009-12-24 00:00:00,0.380705966,0.380705966 +2009-12-25 00:00:00,0.3551982775,0.3551982775 +2009-12-26 00:00:00,2.037115993,2.037115993 +2009-12-27 00:00:00,1.9255202775,1.9255202775 +2009-12-28 00:00:00,0.643134237,0.643134237 +2009-12-29 00:00:00,0.465431062,0.465431062 +2009-12-30 00:00:00,1.087730772,1.087730772 +2009-12-31 00:00:00,0.8718496955,0.8718496955 +2010-01-01 00:00:00,0.465176518,0.465176518 +2010-01-02 00:00:00,0.4290344965,0.4290344965 +2010-01-03 00:00:00,0.4024562225,0.4024562225 +2010-01-04 00:00:00,0.3793939585,0.3793939585 +2010-01-05 00:00:00,0.875937635,0.875937635 +2010-01-06 00:00:00,0.5228140525,0.5228140525 +2010-01-07 00:00:00,0.4119943685,0.4119943685 +2010-01-08 00:00:00,0.499588126,0.499588126 +2010-01-09 00:00:00,0.373443666,0.373443666 +2010-01-10 00:00:00,0.334053432,0.334053432 +2010-01-11 00:00:00,0.3812311815,0.3812311815 +2010-01-12 00:00:00,0.808545489,0.808545489 +2010-01-13 00:00:00,0.866574572,0.866574572 +2010-01-14 00:00:00,0.952408676,0.952408676 +2010-01-15 00:00:00,4.620323749,4.620323749 +2010-01-16 00:00:00,1.8524649005,1.8524649005 +2010-01-17 00:00:00,1.632636948,1.632636948 +2010-01-18 00:00:00,0.859042877,0.859042877 +2010-01-19 00:00:00,0.6319824095,0.6319824095 +2010-01-20 00:00:00,0.897990886,0.897990886 +2010-01-21 00:00:00,3.3474359175,3.3474359175 +2010-01-22 00:00:00,1.2603200105,1.2603200105 +2010-01-23 00:00:00,0.5660680865,0.5660680865 +2010-01-24 00:00:00,0.4419354665,0.4419354665 +2010-01-25 00:00:00,0.434370394,0.434370394 +2010-01-26 00:00:00,0.381363949,0.381363949 +2010-01-27 00:00:00,0.9948422085,0.9948422085 +2010-01-28 00:00:00,1.6669049885,1.6669049885 +2010-01-29 00:00:00,3.0612430865,3.0612430865 +2010-01-30 00:00:00,0.6509811165,0.6509811165 +2010-01-31 00:00:00,0.5561374915,0.5561374915 +2010-02-01 00:00:00,0.5790199545,0.5790199545 +2010-02-02 00:00:00,0.8264333035,0.8264333035 +2010-02-03 00:00:00,1.7404110075,1.7404110075 +2010-02-04 00:00:00,0.792604111,0.792604111 +2010-02-05 00:00:00,0.67951615,0.67951615 +2010-02-06 00:00:00,0.463214253,0.463214253 +2010-02-07 00:00:00,0.3992970345,0.3992970345 +2010-02-08 00:00:00,0.3602495925,0.3602495925 +2010-02-09 00:00:00,0.330337851,0.330337851 +2010-02-10 00:00:00,0.3096956855,0.3096956855 +2010-02-11 00:00:00,0.2952839075,0.2952839075 +2010-02-12 00:00:00,0.2879204385,0.2879204385 +2010-02-13 00:00:00,0.2815881665,0.2815881665 +2010-02-14 00:00:00,0.290372973,0.290372973 +2010-02-15 00:00:00,0.592788483,0.592788483 +2010-02-16 00:00:00,1.2289879975,1.2289879975 +2010-02-17 00:00:00,0.807149465,0.807149465 +2010-02-18 00:00:00,0.4791438905,0.4791438905 +2010-02-19 00:00:00,0.5134443915,0.5134443915 +2010-02-20 00:00:00,0.473574968,0.473574968 +2010-02-21 00:00:00,0.4386146445,0.4386146445 +2010-02-22 00:00:00,0.392306038,0.392306038 +2010-02-23 00:00:00,0.34417939,0.34417939 +2010-02-24 00:00:00,0.3327106185,0.3327106185 +2010-02-25 00:00:00,0.3924413295,0.3924413295 +2010-02-26 00:00:00,1.1581902685,1.1581902685 +2010-02-27 00:00:00,1.105611488,1.105611488 +2010-02-28 00:00:00,1.443883532,1.443883532 +2010-03-01 00:00:00,0.600577781,0.600577781 +2010-03-02 00:00:00,0.4259647565,0.4259647565 +2010-03-03 00:00:00,0.676562063,0.676562063 +2010-03-04 00:00:00,0.576169313,0.576169313 +2010-03-05 00:00:00,0.4111447125,0.4111447125 +2010-03-06 00:00:00,0.3671643225,0.3671643225 +2010-03-07 00:00:00,0.3431671775,0.3431671775 +2010-03-08 00:00:00,0.3118387785,0.3118387785 +2010-03-09 00:00:00,0.2907073255,0.2907073255 +2010-03-10 00:00:00,0.2797187795,0.2797187795 +2010-03-11 00:00:00,0.2726377925,0.2726377925 +2010-03-12 00:00:00,0.288757416,0.288757416 +2010-03-13 00:00:00,0.293281296,0.293281296 +2010-03-14 00:00:00,0.2783762135,0.2783762135 +2010-03-15 00:00:00,0.272580271,0.272580271 +2010-03-16 00:00:00,0.265168626,0.265168626 +2010-03-17 00:00:00,0.2736490105,0.2736490105 +2010-03-18 00:00:00,0.3748400275,0.3748400275 +2010-03-19 00:00:00,0.5034328535,0.5034328535 +2010-03-20 00:00:00,0.3205284845,0.3205284845 +2010-03-21 00:00:00,0.3102352515,0.3102352515 +2010-03-22 00:00:00,1.0441630965,1.0441630965 +2010-03-23 00:00:00,0.669538415,0.669538415 +2010-03-24 00:00:00,1.3255179895,1.3255179895 +2010-03-25 00:00:00,0.492787233,0.492787233 +2010-03-26 00:00:00,0.6496316235,0.6496316235 +2010-03-27 00:00:00,0.452611582,0.452611582 +2010-03-28 00:00:00,0.3552214,0.3552214 +2010-03-29 00:00:00,1.074514742,1.074514742 +2010-03-30 00:00:00,2.780460498,2.780460498 +2010-03-31 00:00:00,1.097594395,1.097594395 +2010-04-01 00:00:00,0.970146798,0.970146798 +2010-04-02 00:00:00,0.75714044,0.75714044 +2010-04-03 00:00:00,1.529377946,1.529377946 +2010-04-04 00:00:00,1.606672347,1.606672347 +2010-04-05 00:00:00,6.93227495,6.93227495 +2010-04-06 00:00:00,1.506074444,1.506074444 +2010-04-07 00:00:00,0.5326596175,0.5326596175 +2010-04-08 00:00:00,0.349367927,0.349367927 +2010-04-09 00:00:00,0.2875144385,0.2875144385 +2010-04-10 00:00:00,0.251140549,0.251140549 +2010-04-11 00:00:00,0.230029404,0.230029404 +2010-04-12 00:00:00,0.2385113255,0.2385113255 +2010-04-13 00:00:00,0.243049316,0.243049316 +2010-04-14 00:00:00,0.2356577745,0.2356577745 +2010-04-15 00:00:00,0.229780077,0.229780077 +2010-04-16 00:00:00,0.224966985,0.224966985 +2010-04-17 00:00:00,0.221268947,0.221268947 +2010-04-18 00:00:00,0.2223058315,0.2223058315 +2010-04-19 00:00:00,0.218659738,0.218659738 +2010-04-20 00:00:00,0.2161440755,0.2161440755 +2010-04-21 00:00:00,0.2129616115,0.2129616115 +2010-04-22 00:00:00,0.212468486,0.212468486 +2010-04-23 00:00:00,0.2117107495,0.2117107495 +2010-04-24 00:00:00,0.214727087,0.214727087 +2010-04-25 00:00:00,0.232549757,0.232549757 +2010-04-26 00:00:00,0.227705763,0.227705763 +2010-04-27 00:00:00,0.233918911,0.233918911 +2010-04-28 00:00:00,0.955279122,0.955279122 +2010-04-29 00:00:00,0.5292189255,0.5292189255 +2010-04-30 00:00:00,0.5168405155,0.5168405155 +2010-05-01 00:00:00,0.367865358,0.367865358 +2010-05-02 00:00:00,0.311585248,0.311585248 +2010-05-03 00:00:00,0.2583622515,0.2583622515 +2010-05-04 00:00:00,0.234230561,0.234230561 +2010-05-05 00:00:00,0.264996314,0.264996314 +2010-05-06 00:00:00,0.313422308,0.313422308 +2010-05-07 00:00:00,0.2582087755,0.2582087755 +2010-05-08 00:00:00,0.2273994705,0.2273994705 +2010-05-09 00:00:00,0.2157893955,0.2157893955 +2010-05-10 00:00:00,0.2104611995,0.2104611995 +2010-05-11 00:00:00,0.207159571,0.207159571 +2010-05-12 00:00:00,0.209242303,0.209242303 +2010-05-13 00:00:00,0.2245043095,0.2245043095 +2010-05-14 00:00:00,0.2657679255,0.2657679255 +2010-05-15 00:00:00,0.276972893,0.276972893 +2010-05-16 00:00:00,0.3048752435,0.3048752435 +2010-05-17 00:00:00,0.250728635,0.250728635 +2010-05-18 00:00:00,1.0866580345,1.0866580345 +2010-05-19 00:00:00,1.727566327,1.727566327 +2010-05-20 00:00:00,0.456364301,0.456364301 +2010-05-21 00:00:00,0.3268761335,0.3268761335 +2010-05-22 00:00:00,0.272943155,0.272943155 +2010-05-23 00:00:00,0.2440519605,0.2440519605 +2010-05-24 00:00:00,0.2285975895,0.2285975895 +2010-05-25 00:00:00,0.2191050165,0.2191050165 +2010-05-26 00:00:00,0.2134848845,0.2134848845 +2010-05-27 00:00:00,0.212198204,0.212198204 +2010-05-28 00:00:00,0.2117063695,0.2117063695 +2010-05-29 00:00:00,0.216036138,0.216036138 +2010-05-30 00:00:00,0.2123598225,0.2123598225 +2010-05-31 00:00:00,0.2591884805,0.2591884805 +2010-06-01 00:00:00,0.5242150485,0.5242150485 +2010-06-02 00:00:00,0.2821222735,0.2821222735 +2010-06-03 00:00:00,0.24407621,0.24407621 +2010-06-04 00:00:00,0.24076031,0.24076031 +2010-06-05 00:00:00,0.2307743095,0.2307743095 +2010-06-06 00:00:00,0.225080596,0.225080596 +2010-06-07 00:00:00,0.220348234,0.220348234 +2010-06-08 00:00:00,0.2202401295,0.2202401295 +2010-06-09 00:00:00,0.217216896,0.217216896 +2010-06-10 00:00:00,0.213759575,0.213759575 +2010-06-11 00:00:00,0.2127227595,0.2127227595 +2010-06-12 00:00:00,0.208263788,0.208263788 +2010-06-13 00:00:00,0.2566447265,0.2566447265 +2010-06-14 00:00:00,0.2792764995,0.2792764995 +2010-06-15 00:00:00,0.221216274,0.221216274 +2010-06-16 00:00:00,0.199019177,0.199019177 +2010-06-17 00:00:00,0.201587821,0.201587821 +2010-06-18 00:00:00,0.1993804135,0.1993804135 +2010-06-19 00:00:00,0.179905957,0.179905957 +2010-06-20 00:00:00,0.172444347,0.172444347 +2010-06-21 00:00:00,0.1677134645,0.1677134645 +2010-06-22 00:00:00,0.1652193685,0.1652193685 +2010-06-23 00:00:00,0.173765739,0.173765739 +2010-06-24 00:00:00,0.1723207985,0.1723207985 +2010-06-25 00:00:00,0.1673940085,0.1673940085 +2010-06-26 00:00:00,0.1735957285,0.1735957285 +2010-06-27 00:00:00,0.1664856725,0.1664856725 +2010-06-28 00:00:00,0.165655588,0.165655588 +2010-06-29 00:00:00,0.1618875125,0.1618875125 +2010-06-30 00:00:00,0.298631596,0.298631596 +2010-07-01 00:00:00,4.144006883,4.144006883 +2010-07-02 00:00:00,0.42992841,0.42992841 +2010-07-03 00:00:00,0.3397102805,0.3397102805 +2010-07-04 00:00:00,5.750509695,5.750509695 +2010-07-05 00:00:00,0.6234764515,0.6234764515 +2010-07-06 00:00:00,1.57114307,1.57114307 +2010-07-07 00:00:00,1.082288217,1.082288217 +2010-07-08 00:00:00,0.419860807,0.419860807 +2010-07-09 00:00:00,0.558328857,0.558328857 +2010-07-10 00:00:00,1.026526057,1.026526057 +2010-07-11 00:00:00,0.9722947005,0.9722947005 +2010-07-12 00:00:00,0.394335066,0.394335066 +2010-07-13 00:00:00,0.38909953,0.38909953 +2010-07-14 00:00:00,3.1641585715,3.1641585715 +2010-07-15 00:00:00,4.585290573,4.585290573 +2010-07-16 00:00:00,1.264147584,1.264147584 +2010-07-17 00:00:00,1.257727275,1.257727275 +2010-07-18 00:00:00,0.8362719445,0.8362719445 +2010-07-19 00:00:00,1.415403341,1.415403341 +2010-07-20 00:00:00,1.4567109525,1.4567109525 +2010-07-21 00:00:00,1.300361849,1.300361849 +2010-07-22 00:00:00,0.6905367425,0.6905367425 +2010-07-23 00:00:00,0.3569363645,0.3569363645 +2010-07-24 00:00:00,0.4689961395,0.4689961395 +2010-07-25 00:00:00,0.629600538,0.629600538 +2010-07-26 00:00:00,0.704335427,0.704335427 +2010-07-27 00:00:00,0.598720767,0.598720767 +2010-07-28 00:00:00,1.3134968255,1.3134968255 +2010-07-29 00:00:00,0.468440349,0.468440349 +2010-07-30 00:00:00,1.386072381,1.386072381 +2010-07-31 00:00:00,0.9556213865,0.9556213865 +2010-08-01 00:00:00,0.7971681075,0.7971681075 +2010-08-02 00:00:00,0.565272866,0.565272866 +2010-08-03 00:00:00,1.0952050715,1.0952050715 +2010-08-04 00:00:00,1.617748726,1.617748726 +2010-08-05 00:00:00,0.5009126055,0.5009126055 +2010-08-06 00:00:00,1.2382421335,1.2382421335 +2010-08-07 00:00:00,0.893902652,0.893902652 +2010-08-08 00:00:00,0.8028975745,0.8028975745 +2010-08-09 00:00:00,2.017527711,2.017527711 +2010-08-10 00:00:00,1.910841889,1.910841889 +2010-08-11 00:00:00,0.4686435295,0.4686435295 +2010-08-12 00:00:00,0.3615344355,0.3615344355 +2010-08-13 00:00:00,0.3119206555,0.3119206555 +2010-08-14 00:00:00,0.2855782825,0.2855782825 +2010-08-15 00:00:00,0.277692849,0.277692849 +2010-08-16 00:00:00,0.9786117625,0.9786117625 +2010-08-17 00:00:00,1.067463853,1.067463853 +2010-08-18 00:00:00,0.523362237,0.523362237 +2010-08-19 00:00:00,0.847752121,0.847752121 +2010-08-20 00:00:00,1.8552361805,1.8552361805 +2010-08-21 00:00:00,0.453935212,0.453935212 +2010-08-22 00:00:00,0.4282322205,0.4282322205 +2010-08-23 00:00:00,1.6617775035,1.6617775035 +2010-08-24 00:00:00,2.10987374,2.10987374 +2010-08-25 00:00:00,0.5002088675,0.5002088675 +2010-08-26 00:00:00,0.3205869835,0.3205869835 +2010-08-27 00:00:00,0.2669517855,0.2669517855 +2010-08-28 00:00:00,0.247457033,0.247457033 +2010-08-29 00:00:00,0.2902734275,0.2902734275 +2010-08-30 00:00:00,0.2498416615,0.2498416615 +2010-08-31 00:00:00,0.2229663455,0.2229663455 +2010-09-01 00:00:00,0.210659698,0.210659698 +2010-09-02 00:00:00,0.2016190295,0.2016190295 +2010-09-03 00:00:00,0.1931507655,0.1931507655 +2010-09-04 00:00:00,0.1917838425,0.1917838425 +2010-09-05 00:00:00,0.1915751305,0.1915751305 +2010-09-06 00:00:00,1.1249450365,1.1249450365 +2010-09-07 00:00:00,10.094696075,10.094696075 +2010-09-08 00:00:00,9.956695255,9.956695255 +2010-09-09 00:00:00,2.57684435,2.57684435 +2010-09-10 00:00:00,2.7459181855,2.7459181855 +2010-09-11 00:00:00,1.1048869115,1.1048869115 +2010-09-12 00:00:00,0.5700253085,0.5700253085 +2010-09-13 00:00:00,5.68143536,5.68143536 +2010-09-14 00:00:00,1.7621619235,1.7621619235 +2010-09-15 00:00:00,1.1134256385,1.1134256385 +2010-09-16 00:00:00,0.591197297,0.591197297 +2010-09-17 00:00:00,0.4589655375,0.4589655375 +2010-09-18 00:00:00,4.177096634,4.177096634 +2010-09-19 00:00:00,1.9596591115,1.9596591115 +2010-09-20 00:00:00,1.011606388,1.011606388 +2010-09-21 00:00:00,1.461594314,1.461594314 +2010-09-22 00:00:00,4.8599335945,4.8599335945 +2010-09-23 00:00:00,2.6237642555,2.6237642555 +2010-09-24 00:00:00,0.6604947445,0.6604947445 +2010-09-25 00:00:00,0.3714411405,0.3714411405 +2010-09-26 00:00:00,0.301273487,0.301273487 +2010-09-27 00:00:00,0.266764274,0.266764274 +2010-09-28 00:00:00,0.4157255245,0.4157255245 +2010-09-29 00:00:00,0.3341507705,0.3341507705 +2010-09-30 00:00:00,0.371139047,0.371139047 +2010-10-01 00:00:00,0.791880593,0.791880593 +2010-10-02 00:00:00,0.9603621565,0.9603621565 +2010-10-03 00:00:00,0.9687650325,0.9687650325 +2010-10-04 00:00:00,1.5323711965,1.5323711965 +2010-10-05 00:00:00,1.049753501,1.049753501 +2010-10-06 00:00:00,1.7145269975,1.7145269975 +2010-10-07 00:00:00,0.4838278475,0.4838278475 +2010-10-08 00:00:00,0.3336722125,0.3336722125 +2010-10-09 00:00:00,0.2914312995,0.2914312995 +2010-10-10 00:00:00,0.263693764,0.263693764 +2010-10-11 00:00:00,0.2466686475,0.2466686475 +2010-10-12 00:00:00,0.231159703,0.231159703 +2010-10-13 00:00:00,0.2215235755,0.2215235755 +2010-10-14 00:00:00,0.218269625,0.218269625 +2010-10-15 00:00:00,0.3195251495,0.3195251495 +2010-10-16 00:00:00,0.4637215695,0.4637215695 +2010-10-17 00:00:00,0.3729771395,0.3729771395 +2010-10-18 00:00:00,0.4949405635,0.4949405635 +2010-10-19 00:00:00,0.5351884865,0.5351884865 +2010-10-20 00:00:00,0.346829052,0.346829052 +2010-10-21 00:00:00,0.3607798585,0.3607798585 +2010-10-22 00:00:00,2.0516602645,2.0516602645 +2010-10-23 00:00:00,0.7763650015,0.7763650015 +2010-10-24 00:00:00,0.400656609,0.400656609 +2010-10-25 00:00:00,0.3234886765,0.3234886765 +2010-10-26 00:00:00,7.330874795,7.330874795 +2010-10-27 00:00:00,1.6911011725,1.6911011725 +2010-10-28 00:00:00,1.3664274195,1.3664274195 +2010-10-29 00:00:00,1.51102317,1.51102317 +2010-10-30 00:00:00,1.189885532,1.189885532 +2010-10-31 00:00:00,0.5309912625,0.5309912625 +2010-11-01 00:00:00,6.843434255,6.843434255 +2010-11-02 00:00:00,2.54615244,2.54615244 +2010-11-03 00:00:00,2.7205947485,2.7205947485 +2010-11-04 00:00:00,6.490441615,6.490441615 +2010-11-05 00:00:00,1.665159326,1.665159326 +2010-11-06 00:00:00,1.4986341165,1.4986341165 +2010-11-07 00:00:00,4.2526899995,4.2526899995 +2010-11-08 00:00:00,5.250897255,5.250897255 +2010-11-09 00:00:00,1.278835936,1.278835936 +2010-11-10 00:00:00,0.5945762385,0.5945762385 +2010-11-11 00:00:00,4.0672785755,4.0672785755 +2010-11-12 00:00:00,0.887337729,0.887337729 +2010-11-13 00:00:00,1.150398357,1.150398357 +2010-11-14 00:00:00,0.6437023385,0.6437023385 +2010-11-15 00:00:00,0.6699831835,0.6699831835 +2010-11-16 00:00:00,1.8325026615,1.8325026615 +2010-11-17 00:00:00,2.052749668,2.052749668 +2010-11-18 00:00:00,4.969292528,4.969292528 +2010-11-19 00:00:00,0.9731860495,0.9731860495 +2010-11-20 00:00:00,0.4697637905,0.4697637905 +2010-11-21 00:00:00,0.360042526,0.360042526 +2010-11-22 00:00:00,0.3123493195,0.3123493195 +2010-11-23 00:00:00,0.2855053895,0.2855053895 +2010-11-24 00:00:00,0.335980537,0.335980537 +2010-11-25 00:00:00,0.715796169,0.715796169 +2010-11-26 00:00:00,1.487638045,1.487638045 +2010-11-27 00:00:00,0.7850871175,0.7850871175 +2010-11-28 00:00:00,0.4641760885,0.4641760885 +2010-11-29 00:00:00,0.354661038,0.354661038 +2010-11-30 00:00:00,0.3055851255,0.3055851255 +2010-12-01 00:00:00,0.274759068,0.274759068 +2010-12-02 00:00:00,0.2543075875,0.2543075875 +2010-12-03 00:00:00,1.7187347815,1.7187347815 +2010-12-04 00:00:00,0.9686321415,0.9686321415 +2010-12-05 00:00:00,0.4822492525,0.4822492525 +2010-12-06 00:00:00,1.1987614075,1.1987614075 +2010-12-07 00:00:00,0.543460277,0.543460277 +2010-12-08 00:00:00,0.3813899735,0.3813899735 +2010-12-09 00:00:00,0.7085711845,0.7085711845 +2010-12-10 00:00:00,0.8679838355,0.8679838355 +2010-12-11 00:00:00,0.4830196105,0.4830196105 +2010-12-12 00:00:00,0.3624588185,0.3624588185 +2010-12-13 00:00:00,0.304450086,0.304450086 +2010-12-14 00:00:00,0.270787122,0.270787122 +2010-12-15 00:00:00,0.268662477,0.268662477 +2010-12-16 00:00:00,0.2971027745,0.2971027745 +2010-12-17 00:00:00,0.3150068125,0.3150068125 +2010-12-18 00:00:00,0.3013226045,0.3013226045 +2010-12-19 00:00:00,0.2801889025,0.2801889025 +2010-12-20 00:00:00,0.256999529,0.256999529 +2010-12-21 00:00:00,0.25013905,0.25013905 +2010-12-22 00:00:00,0.2342089555,0.2342089555 +2010-12-23 00:00:00,0.229996754,0.229996754 +2010-12-24 00:00:00,0.221287465,0.221287465 +2010-12-25 00:00:00,0.2322885835,0.2322885835 +2010-12-26 00:00:00,2.2241640695,2.2241640695 +2010-12-27 00:00:00,4.472077683,4.472077683 +2010-12-28 00:00:00,1.3926463745,1.3926463745 +2010-12-29 00:00:00,3.4891200965,3.4891200965 +2010-12-30 00:00:00,0.765587762,0.765587762 +2010-12-31 00:00:00,0.3946863335,0.3946863335 +2011-01-01 00:00:00,0.316001606,0.316001606 +2011-01-02 00:00:00,0.2827909255,0.2827909255 +2011-01-03 00:00:00,0.2553119615,0.2553119615 +2011-01-04 00:00:00,0.4519910825,0.4519910825 +2011-01-05 00:00:00,1.14570885,1.14570885 +2011-01-06 00:00:00,0.4975584895,0.4975584895 +2011-01-07 00:00:00,0.329869157,0.329869157 +2011-01-08 00:00:00,0.4513252555,0.4513252555 +2011-01-09 00:00:00,0.562086486,0.562086486 +2011-01-10 00:00:00,0.763273443,0.763273443 +2011-01-11 00:00:00,1.163791605,1.163791605 +2011-01-12 00:00:00,2.4487647075,2.4487647075 +2011-01-13 00:00:00,2.6562473135,2.6562473135 +2011-01-14 00:00:00,2.114290968,2.114290968 +2011-01-15 00:00:00,9.295087705,9.295087705 +2011-01-16 00:00:00,3.32487448,3.32487448 +2011-01-17 00:00:00,1.332383297,1.332383297 +2011-01-18 00:00:00,1.0637185865,1.0637185865 +2011-01-19 00:00:00,0.5987402335,0.5987402335 +2011-01-20 00:00:00,0.263638216,0.263638216 +2011-01-21 00:00:00,0.2371172695,0.2371172695 +2011-01-22 00:00:00,0.2214435875,0.2214435875 +2011-01-23 00:00:00,0.215755239,0.215755239 +2011-01-24 00:00:00,0.2298505345,0.2298505345 +2011-01-25 00:00:00,1.598449899,1.598449899 +2011-01-26 00:00:00,0.9489396305,0.9489396305 +2011-01-27 00:00:00,0.338771452,0.338771452 +2011-01-28 00:00:00,0.2632189405,0.2632189405 +2011-01-29 00:00:00,0.228603729,0.228603729 +2011-01-30 00:00:00,0.214281179,0.214281179 +2011-01-31 00:00:00,2.832582996,2.832582996 +2011-02-01 00:00:00,1.9544830475,1.9544830475 +2011-02-02 00:00:00,4.2004984195,4.2004984195 +2011-02-03 00:00:00,2.352234728,2.352234728 +2011-02-04 00:00:00,6.58107043,6.58107043 +2011-02-05 00:00:00,5.25496341,5.25496341 +2011-02-06 00:00:00,2.236269244,2.236269244 +2011-02-07 00:00:00,7.86154526,7.86154526 +2011-02-08 00:00:00,1.7856886955,1.7856886955 +2011-02-09 00:00:00,3.182228293,3.182228293 +2011-02-10 00:00:00,0.764260908,0.764260908 +2011-02-11 00:00:00,0.7742248645,0.7742248645 +2011-02-12 00:00:00,0.481903166,0.481903166 +2011-02-13 00:00:00,0.422347002,0.422347002 +2011-02-14 00:00:00,1.0781042655,1.0781042655 +2011-02-15 00:00:00,0.786065602,0.786065602 +2011-02-16 00:00:00,0.7794659665,0.7794659665 +2011-02-17 00:00:00,0.3745423815,0.3745423815 +2011-02-18 00:00:00,0.4861104425,0.4861104425 +2011-02-19 00:00:00,0.526882617,0.526882617 +2011-02-20 00:00:00,0.48967987,0.48967987 +2011-02-21 00:00:00,0.7904003835,0.7904003835 +2011-02-22 00:00:00,2.002460001,2.002460001 +2011-02-23 00:00:00,2.29109303,2.29109303 +2011-02-24 00:00:00,0.641014836,0.641014836 +2011-02-25 00:00:00,1.3522113685,1.3522113685 +2011-02-26 00:00:00,0.859459939,0.859459939 +2011-02-27 00:00:00,0.738831425,0.738831425 +2011-02-28 00:00:00,0.3828709,0.3828709 +2011-03-01 00:00:00,0.312551455,0.312551455 +2011-03-02 00:00:00,0.2789420625,0.2789420625 +2011-03-03 00:00:00,0.2622142055,0.2622142055 +2011-03-04 00:00:00,0.247772136,0.247772136 +2011-03-05 00:00:00,0.235272287,0.235272287 +2011-03-06 00:00:00,0.222672594,0.222672594 +2011-03-07 00:00:00,0.2337357335,0.2337357335 +2011-03-08 00:00:00,0.246775628,0.246775628 +2011-03-09 00:00:00,0.546892101,0.546892101 +2011-03-10 00:00:00,0.7483775535,0.7483775535 +2011-03-11 00:00:00,1.172273121,1.172273121 +2011-03-12 00:00:00,1.160583571,1.160583571 +2011-03-13 00:00:00,0.915167385,0.915167385 +2011-03-14 00:00:00,1.9420188415,1.9420188415 +2011-03-15 00:00:00,0.5346195855,0.5346195855 +2011-03-16 00:00:00,0.379282558,0.379282558 +2011-03-17 00:00:00,0.5121676195,0.5121676195 +2011-03-18 00:00:00,0.3577859975,0.3577859975 +2011-03-19 00:00:00,0.3480354695,0.3480354695 +2011-03-20 00:00:00,0.9688478845,0.9688478845 +2011-03-21 00:00:00,0.426541604,0.426541604 +2011-03-22 00:00:00,0.3116892695,0.3116892695 +2011-03-23 00:00:00,0.264911808,0.264911808 +2011-03-24 00:00:00,0.2387641815,0.2387641815 +2011-03-25 00:00:00,0.2242810775,0.2242810775 +2011-03-26 00:00:00,0.21308165,0.21308165 +2011-03-27 00:00:00,0.206061009,0.206061009 +2011-03-28 00:00:00,0.200313768,0.200313768 +2011-03-29 00:00:00,0.1979638935,0.1979638935 +2011-03-30 00:00:00,0.2693861705,0.2693861705 +2011-03-31 00:00:00,1.706131385,1.706131385 +2011-04-01 00:00:00,3.2734015655,3.2734015655 +2011-04-02 00:00:00,1.420331591,1.420331591 +2011-04-03 00:00:00,0.403988379,0.403988379 +2011-04-04 00:00:00,1.812995539,1.812995539 +2011-04-05 00:00:00,6.565325935,6.565325935 +2011-04-06 00:00:00,5.546895695,5.546895695 +2011-04-07 00:00:00,1.486456223,1.486456223 +2011-04-08 00:00:00,0.40083548,0.40083548 +2011-04-09 00:00:00,0.29356672,0.29356672 +2011-04-10 00:00:00,0.2547299765,0.2547299765 +2011-04-11 00:00:00,0.507681165,0.507681165 +2011-04-12 00:00:00,0.3760261905,0.3760261905 +2011-04-13 00:00:00,7.684588805,7.684588805 +2011-04-14 00:00:00,0.620735766,0.620735766 +2011-04-15 00:00:00,0.3409626475,0.3409626475 +2011-04-16 00:00:00,0.360251376,0.360251376 +2011-04-17 00:00:00,0.264318142,0.264318142 +2011-04-18 00:00:00,0.2341278115,0.2341278115 +2011-04-19 00:00:00,0.218052906,0.218052906 +2011-04-20 00:00:00,0.2087256485,0.2087256485 +2011-04-21 00:00:00,0.20965649,0.20965649 +2011-04-22 00:00:00,0.2052893835,0.2052893835 +2011-04-23 00:00:00,0.2053085065,0.2053085065 +2011-04-24 00:00:00,0.256702087,0.256702087 +2011-04-25 00:00:00,0.219084506,0.219084506 +2011-04-26 00:00:00,0.200561173,0.200561173 +2011-04-27 00:00:00,0.259665893,0.259665893 +2011-04-28 00:00:00,0.232879334,0.232879334 +2011-04-29 00:00:00,0.214241764,0.214241764 +2011-04-30 00:00:00,0.2041774315,0.2041774315 +2011-05-01 00:00:00,0.1957839755,0.1957839755 +2011-05-02 00:00:00,0.1877644445,0.1877644445 +2011-05-03 00:00:00,0.183162537,0.183162537 +2011-05-04 00:00:00,0.4214670635,0.4214670635 +2011-05-05 00:00:00,0.51101099,0.51101099 +2011-05-06 00:00:00,0.352703351,0.352703351 +2011-05-07 00:00:00,0.2490116335,0.2490116335 +2011-05-08 00:00:00,0.3067809575,0.3067809575 +2011-05-09 00:00:00,0.2762917695,0.2762917695 +2011-05-10 00:00:00,1.14627835,1.14627835 +2011-05-11 00:00:00,0.7502137885,0.7502137885 +2011-05-12 00:00:00,1.31015177,1.31015177 +2011-05-13 00:00:00,0.993830187,0.993830187 +2011-05-14 00:00:00,0.539464931,0.539464931 +2011-05-15 00:00:00,3.129669659,3.129669659 +2011-05-16 00:00:00,3.2807497205,3.2807497205 +2011-05-17 00:00:00,2.1481189525,2.1481189525 +2011-05-18 00:00:00,0.8094446725,0.8094446725 +2011-05-19 00:00:00,0.511641953,0.511641953 +2011-05-20 00:00:00,1.0438839975,1.0438839975 +2011-05-21 00:00:00,2.973147121,2.973147121 +2011-05-22 00:00:00,1.9612452865,1.9612452865 +2011-05-23 00:00:00,4.9014566945,4.9014566945 +2011-05-24 00:00:00,1.4397282945,1.4397282945 +2011-05-25 00:00:00,1.5581195325,1.5581195325 +2011-05-26 00:00:00,2.6729325225,2.6729325225 +2011-05-27 00:00:00,1.668131235,1.668131235 +2011-05-28 00:00:00,1.4664557925,1.4664557925 +2011-05-29 00:00:00,1.0927110825,1.0927110825 +2011-05-30 00:00:00,0.7789386715,0.7789386715 +2011-05-31 00:00:00,0.648520909,0.648520909 +2011-06-01 00:00:00,2.478095108,2.478095108 +2011-06-02 00:00:00,0.587273421,0.587273421 +2011-06-03 00:00:00,0.353811789,0.353811789 +2011-06-04 00:00:00,0.2939065765,0.2939065765 +2011-06-05 00:00:00,0.2661198455,0.2661198455 +2011-06-06 00:00:00,0.2826079735,0.2826079735 +2011-06-07 00:00:00,0.757861842,0.757861842 +2011-06-08 00:00:00,1.644187206,1.644187206 +2011-06-09 00:00:00,0.701368608,0.701368608 +2011-06-10 00:00:00,0.5373323465,0.5373323465 +2011-06-11 00:00:00,0.477424199,0.477424199 +2011-06-12 00:00:00,0.3708629755,0.3708629755 +2011-06-13 00:00:00,0.3063180105,0.3063180105 +2011-06-14 00:00:00,0.281515252,0.281515252 +2011-06-15 00:00:00,0.7093701905,0.7093701905 +2011-06-16 00:00:00,0.390327089,0.390327089 +2011-06-17 00:00:00,0.3119857625,0.3119857625 +2011-06-18 00:00:00,1.7870448505,1.7870448505 +2011-06-19 00:00:00,0.6004562175,0.6004562175 +2011-06-20 00:00:00,0.3678670715,0.3678670715 +2011-06-21 00:00:00,2.137622671,2.137622671 +2011-06-22 00:00:00,0.6658108025,0.6658108025 +2011-06-23 00:00:00,0.589050421,0.589050421 +2011-06-24 00:00:00,2.1744700595,2.1744700595 +2011-06-25 00:00:00,1.7449088635,1.7449088635 +2011-06-26 00:00:00,2.4081390715,2.4081390715 +2011-06-27 00:00:00,0.604316253,0.604316253 +2011-06-28 00:00:00,0.351214662,0.351214662 +2011-06-29 00:00:00,0.306240935,0.306240935 +2011-06-30 00:00:00,0.3227820215,0.3227820215 +2011-07-01 00:00:00,0.2839606625,0.2839606625 +2011-07-02 00:00:00,0.2562741275,0.2562741275 +2011-07-03 00:00:00,0.4162070525,0.4162070525 +2011-07-04 00:00:00,0.335526214,0.335526214 +2011-07-05 00:00:00,0.711956717,0.711956717 +2011-07-06 00:00:00,0.4391366715,0.4391366715 +2011-07-07 00:00:00,1.469645713,1.469645713 +2011-07-08 00:00:00,0.898348043,0.898348043 +2011-07-09 00:00:00,0.3838010015,0.3838010015 +2011-07-10 00:00:00,0.297534305,0.297534305 +2011-07-11 00:00:00,0.264202961,0.264202961 +2011-07-12 00:00:00,0.2462700735,0.2462700735 +2011-07-13 00:00:00,0.2338007215,0.2338007215 +2011-07-14 00:00:00,0.225810093,0.225810093 +2011-07-15 00:00:00,0.2342651375,0.2342651375 +2011-07-16 00:00:00,5.753352315,5.753352315 +2011-07-17 00:00:00,3.805732878,3.805732878 +2011-07-18 00:00:00,3.8837620025,3.8837620025 +2011-07-19 00:00:00,1.096670593,1.096670593 +2011-07-20 00:00:00,0.4089017985,0.4089017985 +2011-07-21 00:00:00,0.2973136215,0.2973136215 +2011-07-22 00:00:00,0.254261126,0.254261126 +2011-07-23 00:00:00,0.2332789405,0.2332789405 +2011-07-24 00:00:00,0.226712771,0.226712771 +2011-07-25 00:00:00,0.2337033825,0.2337033825 +2011-07-26 00:00:00,0.42339091,0.42339091 +2011-07-27 00:00:00,0.2655690575,0.2655690575 +2011-07-28 00:00:00,0.250991275,0.250991275 +2011-07-29 00:00:00,0.2243148875,0.2243148875 +2011-07-30 00:00:00,0.2161994165,0.2161994165 +2011-07-31 00:00:00,0.400477942,0.400477942 +2011-08-01 00:00:00,0.3190626655,0.3190626655 +2011-08-02 00:00:00,0.2388108515,0.2388108515 +2011-08-03 00:00:00,0.2158748675,0.2158748675 +2011-08-04 00:00:00,0.241283925,0.241283925 +2011-08-05 00:00:00,0.2457576365,0.2457576365 +2011-08-06 00:00:00,0.4627074235,0.4627074235 +2011-08-07 00:00:00,0.4217577,0.4217577 +2011-08-08 00:00:00,0.28344854,0.28344854 +2011-08-09 00:00:00,0.249409056,0.249409056 +2011-08-10 00:00:00,7.8043762,7.8043762 +2011-08-11 00:00:00,2.8331148855,2.8331148855 +2011-08-12 00:00:00,2.7461816645,2.7461816645 +2011-08-13 00:00:00,1.2300091525,1.2300091525 +2011-08-14 00:00:00,0.451035067,0.451035067 +2011-08-15 00:00:00,0.882086071,0.882086071 +2011-08-16 00:00:00,0.8512845745,0.8512845745 +2011-08-17 00:00:00,0.367357505,0.367357505 +2011-08-18 00:00:00,0.3078413955,0.3078413955 +2011-08-19 00:00:00,0.740779397,0.740779397 +2011-08-20 00:00:00,0.431060641,0.431060641 +2011-08-21 00:00:00,0.579932432,0.579932432 +2011-08-22 00:00:00,0.3196282185,0.3196282185 +2011-08-23 00:00:00,0.3464723795,0.3464723795 +2011-08-24 00:00:00,0.553903151,0.553903151 +2011-08-25 00:00:00,0.331729562,0.331729562 +2011-08-26 00:00:00,0.370874303,0.370874303 +2011-08-27 00:00:00,2.210534308,2.210534308 +2011-08-28 00:00:00,0.8094553,0.8094553 +2011-08-29 00:00:00,0.3583662185,0.3583662185 +2011-08-30 00:00:00,0.282766975,0.282766975 +2011-08-31 00:00:00,0.2498989415,0.2498989415 +2011-09-01 00:00:00,0.4225134085,0.4225134085 +2011-09-02 00:00:00,1.422127779,1.422127779 +2011-09-03 00:00:00,2.4346024185,2.4346024185 +2011-09-04 00:00:00,1.092529847,1.092529847 +2011-09-05 00:00:00,8.3381378,8.3381378 +2011-09-06 00:00:00,2.798721032,2.798721032 +2011-09-07 00:00:00,1.988004432,1.988004432 +2011-09-08 00:00:00,1.35711083,1.35711083 +2011-09-09 00:00:00,1.0327899545,1.0327899545 +2011-09-10 00:00:00,1.4890730795,1.4890730795 +2011-09-11 00:00:00,10.31090701,10.31090701 +2011-09-12 00:00:00,4.346556488,4.346556488 +2011-09-13 00:00:00,0.787179929,0.787179929 +2011-09-14 00:00:00,0.5021316155,0.5021316155 +2011-09-15 00:00:00,0.4252944045,0.4252944045 +2011-09-16 00:00:00,1.931441849,1.931441849 +2011-09-17 00:00:00,3.124353264,3.124353264 +2011-09-18 00:00:00,2.0783454065,2.0783454065 +2011-09-19 00:00:00,2.4304424705,2.4304424705 +2011-09-20 00:00:00,0.766810005,0.766810005 +2011-09-21 00:00:00,0.855476651,0.855476651 +2011-09-22 00:00:00,0.4304186435,0.4304186435 +2011-09-23 00:00:00,1.204143886,1.204143886 +2011-09-24 00:00:00,0.8975365785,0.8975365785 +2011-09-25 00:00:00,1.4180375165,1.4180375165 +2011-09-26 00:00:00,0.8445601625,0.8445601625 +2011-09-27 00:00:00,1.047680896,1.047680896 +2011-09-28 00:00:00,0.452239038,0.452239038 +2011-09-29 00:00:00,0.5542756015,0.5542756015 +2011-09-30 00:00:00,2.082284343,2.082284343 +2011-10-01 00:00:00,0.4893121385,0.4893121385 +2011-10-02 00:00:00,0.3544915755,0.3544915755 +2011-10-03 00:00:00,0.329210533,0.329210533 +2011-10-04 00:00:00,0.5474045095,0.5474045095 +2011-10-05 00:00:00,8.969819225,8.969819225 +2011-10-06 00:00:00,1.379832429,1.379832429 +2011-10-07 00:00:00,1.173035275,1.173035275 +2011-10-08 00:00:00,0.6244997015,0.6244997015 +2011-10-09 00:00:00,4.8105999685,4.8105999685 +2011-10-10 00:00:00,5.660351145,5.660351145 +2011-10-11 00:00:00,5.97086699,5.97086699 +2011-10-12 00:00:00,3.060983178,3.060983178 +2011-10-13 00:00:00,0.719892147,0.719892147 +2011-10-14 00:00:00,0.670685027,0.670685027 +2011-10-15 00:00:00,0.840199607,0.840199607 +2011-10-16 00:00:00,0.74259868,0.74259868 +2011-10-17 00:00:00,8.76549627,8.76549627 +2011-10-18 00:00:00,1.8858070155,1.8858070155 +2011-10-19 00:00:00,1.0224110825,1.0224110825 +2011-10-20 00:00:00,2.3822038155,2.3822038155 +2011-10-21 00:00:00,2.356434623,2.356434623 +2011-10-22 00:00:00,2.4726396705,2.4726396705 +2011-10-23 00:00:00,3.236755897,3.236755897 +2011-10-24 00:00:00,2.195711658,2.195711658 +2011-10-25 00:00:00,0.575300124,0.575300124 +2011-10-26 00:00:00,0.660566562,0.660566562 +2011-10-27 00:00:00,0.9112619635,0.9112619635 +2011-10-28 00:00:00,1.489303393,1.489303393 +2011-10-29 00:00:00,1.4651441585,1.4651441585 +2011-10-30 00:00:00,1.5500011835,1.5500011835 +2011-10-31 00:00:00,3.893786423,3.893786423 +2011-11-01 00:00:00,1.3463275025,1.3463275025 +2011-11-02 00:00:00,2.150774893,2.150774893 +2011-11-03 00:00:00,1.0474645785,1.0474645785 +2011-11-04 00:00:00,0.71823455,0.71823455 +2011-11-05 00:00:00,0.5754627975,0.5754627975 +2011-11-06 00:00:00,0.3725842175,0.3725842175 +2011-11-07 00:00:00,0.3165839545,0.3165839545 +2011-11-08 00:00:00,0.2885542825,0.2885542825 +2011-11-09 00:00:00,0.2722195075,0.2722195075 +2011-11-10 00:00:00,0.256980541,0.256980541 +2011-11-11 00:00:00,0.2564982495,0.2564982495 +2011-11-12 00:00:00,0.3763490045,0.3763490045 +2011-11-13 00:00:00,0.288661576,0.288661576 +2011-11-14 00:00:00,0.257626572,0.257626572 +2011-11-15 00:00:00,0.244312128,0.244312128 +2011-11-16 00:00:00,0.2386356575,0.2386356575 +2011-11-17 00:00:00,2.501943749,2.501943749 +2011-11-18 00:00:00,4.2070805925,4.2070805925 +2011-11-19 00:00:00,1.470173537,1.470173537 +2011-11-20 00:00:00,0.462032372,0.462032372 +2011-11-21 00:00:00,0.945848882,0.945848882 +2011-11-22 00:00:00,0.3866599675,0.3866599675 +2011-11-23 00:00:00,5.972656225,5.972656225 +2011-11-24 00:00:00,3.494218755,3.494218755 +2011-11-25 00:00:00,0.9575222605,0.9575222605 +2011-11-26 00:00:00,9.19446815,9.19446815 +2011-11-27 00:00:00,3.9054692245,3.9054692245 +2011-11-28 00:00:00,4.122862776,4.122862776 +2011-11-29 00:00:00,7.75015892,7.75015892 +2011-11-30 00:00:00,4.3469240715,4.3469240715 +2011-12-01 00:00:00,2.4940914195,2.4940914195 +2011-12-02 00:00:00,2.946041894,2.946041894 +2011-12-03 00:00:00,1.8185642155,1.8185642155 +2011-12-04 00:00:00,1.678831656,1.678831656 +2011-12-05 00:00:00,2.057025739,2.057025739 +2011-12-06 00:00:00,2.8091677615,2.8091677615 +2011-12-07 00:00:00,1.6744466295,1.6744466295 +2011-12-08 00:00:00,5.886771285,5.886771285 +2011-12-09 00:00:00,1.1523768975,1.1523768975 +2011-12-10 00:00:00,3.0907001495,3.0907001495 +2011-12-11 00:00:00,2.0446193635,2.0446193635 +2011-12-12 00:00:00,2.7749362675,2.7749362675 +2011-12-13 00:00:00,1.7059626255,1.7059626255 +2011-12-14 00:00:00,0.937301283,0.937301283 +2011-12-15 00:00:00,1.4891939575,1.4891939575 +2011-12-16 00:00:00,1.6142976005,1.6142976005 +2011-12-17 00:00:00,0.8650742965,0.8650742965 +2011-12-18 00:00:00,0.822251715,0.822251715 +2011-12-19 00:00:00,4.741161156,4.741161156 +2011-12-20 00:00:00,3.8182358005,3.8182358005 +2011-12-21 00:00:00,1.4084641015,1.4084641015 +2011-12-22 00:00:00,2.9242329075,2.9242329075 +2011-12-23 00:00:00,2.5888050145,2.5888050145 +2011-12-24 00:00:00,2.7935144685,2.7935144685 +2011-12-25 00:00:00,3.1730431425,3.1730431425 +2011-12-26 00:00:00,4.9765379395,4.9765379395 +2011-12-27 00:00:00,2.647482078,2.647482078 +2011-12-28 00:00:00,1.399437142,1.399437142 +2011-12-29 00:00:00,2.5827071435,2.5827071435 +2011-12-30 00:00:00,1.782165061,1.782165061 +2011-12-31 00:00:00,4.043151974,4.043151974 +2012-01-01 00:00:00,1.676625394,1.676625394 +2012-01-02 00:00:00,2.3211881175,2.3211881175 +2012-01-03 00:00:00,3.741839693,3.741839693 +2012-01-04 00:00:00,2.5103857525,2.5103857525 +2012-01-05 00:00:00,1.165312743,1.165312743 +2012-01-06 00:00:00,0.752186411,0.752186411 +2012-01-07 00:00:00,0.5878980955,0.5878980955 +2012-01-08 00:00:00,0.5779589845,0.5779589845 +2012-01-09 00:00:00,2.4185713985,2.4185713985 +2012-01-10 00:00:00,1.634202282,1.634202282 +2012-01-11 00:00:00,1.5996100245,1.5996100245 +2012-01-12 00:00:00,0.972940513,0.972940513 +2012-01-13 00:00:00,0.4941331675,0.4941331675 +2012-01-14 00:00:00,0.405635064,0.405635064 +2012-01-15 00:00:00,0.335672212,0.335672212 +2012-01-16 00:00:00,0.298658,0.298658 +2012-01-17 00:00:00,1.335546688,1.335546688 +2012-01-18 00:00:00,2.129188966,2.129188966 +2012-01-19 00:00:00,0.727482808,0.727482808 +2012-01-20 00:00:00,0.8313508715,0.8313508715 +2012-01-21 00:00:00,1.0007139545,1.0007139545 +2012-01-22 00:00:00,0.4409668775,0.4409668775 +2012-01-23 00:00:00,0.5676922315,0.5676922315 +2012-01-24 00:00:00,3.969131232,3.969131232 +2012-01-25 00:00:00,3.411454904,3.411454904 +2012-01-26 00:00:00,2.978282348,2.978282348 +2012-01-27 00:00:00,1.4915129225,1.4915129225 +2012-01-28 00:00:00,3.1387966225,3.1387966225 +2012-01-29 00:00:00,4.081750459,4.081750459 +2012-01-30 00:00:00,0.871774638,0.871774638 +2012-01-31 00:00:00,0.5621996835,0.5621996835 +2012-02-01 00:00:00,0.394149203,0.394149203 +2012-02-02 00:00:00,0.322711834,0.322711834 +2012-02-03 00:00:00,0.3182847625,0.3182847625 +2012-02-04 00:00:00,2.9069196945,2.9069196945 +2012-02-05 00:00:00,0.7928050265,0.7928050265 +2012-02-06 00:00:00,1.0391037465,1.0391037465 +2012-02-07 00:00:00,0.457644537,0.457644537 +2012-02-08 00:00:00,3.1107733335,3.1107733335 +2012-02-09 00:00:00,7.977067875,7.977067875 +2012-02-10 00:00:00,1.1867049885,1.1867049885 +2012-02-11 00:00:00,1.305653098,1.305653098 +2012-02-12 00:00:00,0.627365927,0.627365927 +2012-02-13 00:00:00,0.4766395385,0.4766395385 +2012-02-14 00:00:00,0.3879817735,0.3879817735 +2012-02-15 00:00:00,0.3661887415,0.3661887415 +2012-02-16 00:00:00,1.074855277,1.074855277 +2012-02-17 00:00:00,1.6431584375,1.6431584375 +2012-02-18 00:00:00,3.8591665615,3.8591665615 +2012-02-19 00:00:00,0.7394519035,0.7394519035 +2012-02-20 00:00:00,6.007245885,6.007245885 +2012-02-21 00:00:00,7.169036935,7.169036935 +2012-02-22 00:00:00,6.582922345,6.582922345 +2012-02-23 00:00:00,2.776797734,2.776797734 +2012-02-24 00:00:00,1.750459709,1.750459709 +2012-02-25 00:00:00,0.482057864,0.482057864 +2012-02-26 00:00:00,1.2780008435,1.2780008435 +2012-02-27 00:00:00,3.2591460085,3.2591460085 +2012-02-28 00:00:00,1.08668881,1.08668881 +2012-02-29 00:00:00,0.489281918,0.489281918 +2012-03-01 00:00:00,0.378079067,0.378079067 +2012-03-02 00:00:00,0.336329769,0.336329769 +2012-03-03 00:00:00,0.4555681945,0.4555681945 +2012-03-04 00:00:00,0.51080284,0.51080284 +2012-03-05 00:00:00,0.4563344585,0.4563344585 +2012-03-06 00:00:00,3.880728248,3.880728248 +2012-03-07 00:00:00,1.779069307,1.779069307 +2012-03-08 00:00:00,0.5136229405,0.5136229405 +2012-03-09 00:00:00,0.8349025615,0.8349025615 +2012-03-10 00:00:00,0.7379966545,0.7379966545 +2012-03-11 00:00:00,0.466513488,0.466513488 +2012-03-12 00:00:00,0.38309811,0.38309811 +2012-03-13 00:00:00,0.3266226995,0.3266226995 +2012-03-14 00:00:00,0.29165378,0.29165378 +2012-03-15 00:00:00,0.4512371785,0.4512371785 +2012-03-16 00:00:00,1.826424884,1.826424884 +2012-03-17 00:00:00,0.9785789845,0.9785789845 +2012-03-18 00:00:00,0.918512373,0.918512373 +2012-03-19 00:00:00,0.537913597,0.537913597 +2012-03-20 00:00:00,0.6258579235,0.6258579235 +2012-03-21 00:00:00,0.3507761235,0.3507761235 +2012-03-22 00:00:00,0.293117733,0.293117733 +2012-03-23 00:00:00,0.2653477615,0.2653477615 +2012-03-24 00:00:00,0.2502830185,0.2502830185 +2012-03-25 00:00:00,0.238609922,0.238609922 +2012-03-26 00:00:00,0.229842953,0.229842953 +2012-03-27 00:00:00,0.2227553335,0.2227553335 +2012-03-28 00:00:00,0.216999372,0.216999372 +2012-03-29 00:00:00,0.2127700245,0.2127700245 +2012-03-30 00:00:00,0.211515886,0.211515886 +2012-03-31 00:00:00,0.211817235,0.211817235 +2012-04-01 00:00:00,0.207266783,0.207266783 +2012-04-02 00:00:00,0.2055519745,0.2055519745 +2012-04-03 00:00:00,0.261432835,0.261432835 +2012-04-04 00:00:00,0.2181695405,0.2181695405 +2012-04-05 00:00:00,0.218687167,0.218687167 +2012-04-06 00:00:00,0.274242347,0.274242347 +2012-04-07 00:00:00,0.4573661035,0.4573661035 +2012-04-08 00:00:00,0.6564085635,0.6564085635 +2012-04-09 00:00:00,1.587010862,1.587010862 +2012-04-10 00:00:00,1.198387699,1.198387699 +2012-04-11 00:00:00,0.406599398,0.406599398 +2012-04-12 00:00:00,0.7355140965,0.7355140965 +2012-04-13 00:00:00,0.450900346,0.450900346 +2012-04-14 00:00:00,0.2948785095,0.2948785095 +2012-04-15 00:00:00,0.244852036,0.244852036 +2012-04-16 00:00:00,1.920609394,1.920609394 +2012-04-17 00:00:00,4.1855073155,4.1855073155 +2012-04-18 00:00:00,1.2079715015,1.2079715015 +2012-04-19 00:00:00,0.7429613355,0.7429613355 +2012-04-20 00:00:00,0.4766601635,0.4766601635 +2012-04-21 00:00:00,0.4089740155,0.4089740155 +2012-04-22 00:00:00,0.3274067435,0.3274067435 +2012-04-23 00:00:00,0.2913966615,0.2913966615 +2012-04-24 00:00:00,0.2690697135,0.2690697135 +2012-04-25 00:00:00,0.2423615095,0.2423615095 +2012-04-26 00:00:00,0.2250493605,0.2250493605 +2012-04-27 00:00:00,0.213527295,0.213527295 +2012-04-28 00:00:00,0.20239287,0.20239287 +2012-04-29 00:00:00,0.195132276,0.195132276 +2012-04-30 00:00:00,0.192292673,0.192292673 +2012-05-01 00:00:00,0.189819463,0.189819463 +2012-05-02 00:00:00,0.1876152205,0.1876152205 +2012-05-03 00:00:00,0.1863998845,0.1863998845 +2012-05-04 00:00:00,0.190828099,0.190828099 +2012-05-05 00:00:00,0.1846235115,0.1846235115 +2012-05-06 00:00:00,0.180657338,0.180657338 +2012-05-07 00:00:00,0.2168603415,0.2168603415 +2012-05-08 00:00:00,0.209935036,0.209935036 +2012-05-09 00:00:00,0.19233125,0.19233125 +2012-05-10 00:00:00,0.303480751,0.303480751 +2012-05-11 00:00:00,0.3592305555,0.3592305555 +2012-05-12 00:00:00,0.2308842535,0.2308842535 +2012-05-13 00:00:00,1.093312041,1.093312041 +2012-05-14 00:00:00,0.738923211,0.738923211 +2012-05-15 00:00:00,0.622986878,0.622986878 +2012-05-16 00:00:00,0.351444383,0.351444383 +2012-05-17 00:00:00,0.99653411,0.99653411 +2012-05-18 00:00:00,0.5491967185,0.5491967185 +2012-05-19 00:00:00,0.316493734,0.316493734 +2012-05-20 00:00:00,0.252996277,0.252996277 +2012-05-21 00:00:00,0.2411801075,0.2411801075 +2012-05-22 00:00:00,0.2599387865,0.2599387865 +2012-05-23 00:00:00,0.241791003,0.241791003 +2012-05-24 00:00:00,0.2169188895,0.2169188895 +2012-05-25 00:00:00,0.2025591945,0.2025591945 +2012-05-26 00:00:00,0.1880022445,0.1880022445 +2012-05-27 00:00:00,0.180312265,0.180312265 +2012-05-28 00:00:00,0.174749972,0.174749972 +2012-05-29 00:00:00,0.1712964965,0.1712964965 +2012-05-30 00:00:00,0.170257625,0.170257625 +2012-05-31 00:00:00,0.2156001085,0.2156001085 +2012-06-01 00:00:00,0.245539868,0.245539868 +2012-06-02 00:00:00,0.325782941,0.325782941 +2012-06-03 00:00:00,1.608046994,1.608046994 +2012-06-04 00:00:00,0.353061398,0.353061398 +2012-06-05 00:00:00,0.2797447235,0.2797447235 +2012-06-06 00:00:00,0.727753974,0.727753974 +2012-06-07 00:00:00,4.020511327,4.020511327 +2012-06-08 00:00:00,9.077482865,9.077482865 +2012-06-09 00:00:00,1.9325688215,1.9325688215 +2012-06-10 00:00:00,0.6240356635,0.6240356635 +2012-06-11 00:00:00,0.293149493,0.293149493 +2012-06-12 00:00:00,0.2831992645,0.2831992645 +2012-06-13 00:00:00,0.2435671695,0.2435671695 +2012-06-14 00:00:00,0.365282369,0.365282369 +2012-06-15 00:00:00,1.1291328865,1.1291328865 +2012-06-16 00:00:00,0.606763164,0.606763164 +2012-06-17 00:00:00,0.3670277065,0.3670277065 +2012-06-18 00:00:00,0.494452354,0.494452354 +2012-06-19 00:00:00,0.4121115335,0.4121115335 +2012-06-20 00:00:00,0.461055266,0.461055266 +2012-06-21 00:00:00,1.096660384,1.096660384 +2012-06-22 00:00:00,0.89480718,0.89480718 +2012-06-23 00:00:00,1.758774465,1.758774465 +2012-06-24 00:00:00,1.719581085,1.719581085 +2012-06-25 00:00:00,1.257309979,1.257309979 +2012-06-26 00:00:00,1.0091526865,1.0091526865 +2012-06-27 00:00:00,0.9507008025,0.9507008025 +2012-06-28 00:00:00,1.655758845,1.655758845 +2012-06-29 00:00:00,1.987589419,1.987589419 +2012-06-30 00:00:00,2.577780315,2.577780315 +2012-07-01 00:00:00,1.8367635435,1.8367635435 +2012-07-02 00:00:00,1.2336363765,1.2336363765 +2012-07-03 00:00:00,0.8719300045,0.8719300045 +2012-07-04 00:00:00,0.6514757505,0.6514757505 +2012-07-05 00:00:00,0.399016686,0.399016686 +2012-07-06 00:00:00,0.363783646,0.363783646 +2012-07-07 00:00:00,0.294392666,0.294392666 +2012-07-08 00:00:00,0.274466758,0.274466758 +2012-07-09 00:00:00,0.4586382275,0.4586382275 +2012-07-10 00:00:00,0.895734675,0.895734675 +2012-07-11 00:00:00,0.5110803495,0.5110803495 +2012-07-12 00:00:00,0.3120552125,0.3120552125 +2012-07-13 00:00:00,0.254553449,0.254553449 +2012-07-14 00:00:00,0.229749237,0.229749237 +2012-07-15 00:00:00,0.216534926,0.216534926 +2012-07-16 00:00:00,0.253701359,0.253701359 +2012-07-17 00:00:00,2.49867675,2.49867675 +2012-07-18 00:00:00,1.6038562155,1.6038562155 +2012-07-19 00:00:00,0.456869036,0.456869036 +2012-07-20 00:00:00,0.2857199595,0.2857199595 +2012-07-21 00:00:00,0.2358479525,0.2358479525 +2012-07-22 00:00:00,1.2211706825,1.2211706825 +2012-07-23 00:00:00,2.9712630025,2.9712630025 +2012-07-24 00:00:00,0.951379478,0.951379478 +2012-07-25 00:00:00,0.565384712,0.565384712 +2012-07-26 00:00:00,0.3056910565,0.3056910565 +2012-07-27 00:00:00,0.26319406,0.26319406 +2012-07-28 00:00:00,0.993874301,0.993874301 +2012-07-29 00:00:00,0.545520647,0.545520647 +2012-07-30 00:00:00,0.3754776305,0.3754776305 +2012-07-31 00:00:00,6.008862515,6.008862515 +2012-08-01 00:00:00,2.347277026,2.347277026 +2012-08-02 00:00:00,0.5333155245,0.5333155245 +2012-08-03 00:00:00,0.5074155435,0.5074155435 +2012-08-04 00:00:00,0.4656625525,0.4656625525 +2012-08-05 00:00:00,0.3147572685,0.3147572685 +2012-08-06 00:00:00,0.3384744485,0.3384744485 +2012-08-07 00:00:00,0.3622273855,0.3622273855 +2012-08-08 00:00:00,0.2618602525,0.2618602525 +2012-08-09 00:00:00,0.23573117,0.23573117 +2012-08-10 00:00:00,0.2215975925,0.2215975925 +2012-08-11 00:00:00,0.2084131315,0.2084131315 +2012-08-12 00:00:00,0.862829606,0.862829606 +2012-08-13 00:00:00,0.622395439,0.622395439 +2012-08-14 00:00:00,0.451012205,0.451012205 +2012-08-15 00:00:00,0.6420276665,0.6420276665 +2012-08-16 00:00:00,0.6234094945,0.6234094945 +2012-08-17 00:00:00,0.333784566,0.333784566 +2012-08-18 00:00:00,0.267766161,0.267766161 +2012-08-19 00:00:00,0.361747029,0.361747029 +2012-08-20 00:00:00,0.567064136,0.567064136 +2012-08-21 00:00:00,1.0713102885,1.0713102885 +2012-08-22 00:00:00,1.483421744,1.483421744 +2012-08-23 00:00:00,1.8893480355,1.8893480355 +2012-08-24 00:00:00,0.7325850605,0.7325850605 +2012-08-25 00:00:00,0.514967046,0.514967046 +2012-08-26 00:00:00,0.3410361095,0.3410361095 +2012-08-27 00:00:00,0.8723142795,0.8723142795 +2012-08-28 00:00:00,2.615923968,2.615923968 +2012-08-29 00:00:00,2.6194629565,2.6194629565 +2012-08-30 00:00:00,0.525174121,0.525174121 +2012-08-31 00:00:00,0.5660906885,0.5660906885 +2012-09-01 00:00:00,2.2125239375,2.2125239375 +2012-09-02 00:00:00,0.938833625,0.938833625 +2012-09-03 00:00:00,1.5100133205,1.5100133205 +2012-09-04 00:00:00,0.833208833,0.833208833 +2012-09-05 00:00:00,0.350087909,0.350087909 +2012-09-06 00:00:00,0.3222882075,0.3222882075 +2012-09-07 00:00:00,0.5915648645,0.5915648645 +2012-09-08 00:00:00,0.4742675395,0.4742675395 +2012-09-09 00:00:00,1.3161899815,1.3161899815 +2012-09-10 00:00:00,1.2868686845,1.2868686845 +2012-09-11 00:00:00,1.5286597125,1.5286597125 +2012-09-12 00:00:00,1.295625266,1.295625266 +2012-09-13 00:00:00,0.5283019845,0.5283019845 +2012-09-14 00:00:00,0.6063138605,0.6063138605 +2012-09-15 00:00:00,0.293480742,0.293480742 +2012-09-16 00:00:00,0.986070382,0.986070382 +2012-09-17 00:00:00,0.752305939,0.752305939 +2012-09-18 00:00:00,0.565089559,0.565089559 +2012-09-19 00:00:00,0.3331790365,0.3331790365 +2012-09-20 00:00:00,2.470448844,2.470448844 +2012-09-21 00:00:00,1.3896695165,1.3896695165 +2012-09-22 00:00:00,0.3493144925,0.3493144925 +2012-09-23 00:00:00,1.709171259,1.709171259 +2012-09-24 00:00:00,2.21365525,2.21365525 +2012-09-25 00:00:00,3.6223546715,3.6223546715 +2012-09-26 00:00:00,0.837798496,0.837798496 +2012-09-27 00:00:00,1.111280702,1.111280702 +2012-09-28 00:00:00,1.041533469,1.041533469 +2012-09-29 00:00:00,2.2063630685,2.2063630685 +2012-09-30 00:00:00,7.141519125,7.141519125 +2012-10-01 00:00:00,0.9543418965,0.9543418965 +2012-10-02 00:00:00,2.138550081,2.138550081 +2012-10-03 00:00:00,2.903756397,2.903756397 +2012-10-04 00:00:00,0.75657691,0.75657691 +2012-10-05 00:00:00,0.4660529965,0.4660529965 +2012-10-06 00:00:00,0.3303617375,0.3303617375 +2012-10-07 00:00:00,0.2794439785,0.2794439785 +2012-10-08 00:00:00,0.244161681,0.244161681 +2012-10-09 00:00:00,0.2202153805,0.2202153805 +2012-10-10 00:00:00,0.2449061835,0.2449061835 +2012-10-11 00:00:00,2.774517337,2.774517337 +2012-10-12 00:00:00,0.3786601205,0.3786601205 +2012-10-13 00:00:00,0.2912854175,0.2912854175 +2012-10-14 00:00:00,0.4142037915,0.4142037915 +2012-10-15 00:00:00,0.4157397315,0.4157397315 +2012-10-16 00:00:00,0.5540558405,0.5540558405 +2012-10-17 00:00:00,1.091007316,1.091007316 +2012-10-18 00:00:00,0.8856892655,0.8856892655 +2012-10-19 00:00:00,0.481894649,0.481894649 +2012-10-20 00:00:00,0.3023622995,0.3023622995 +2012-10-21 00:00:00,0.2551274815,0.2551274815 +2012-10-22 00:00:00,0.229294396,0.229294396 +2012-10-23 00:00:00,0.2163678065,0.2163678065 +2012-10-24 00:00:00,0.208325299,0.208325299 +2012-10-25 00:00:00,0.1991601265,0.1991601265 +2012-10-26 00:00:00,0.1908214505,0.1908214505 +2012-10-27 00:00:00,0.1897675895,0.1897675895 +2012-10-28 00:00:00,3.2231602045,3.2231602045 +2012-10-29 00:00:00,0.9418494205,0.9418494205 +2012-10-30 00:00:00,0.525165345,0.525165345 +2012-10-31 00:00:00,2.8327539365,2.8327539365 +2012-11-01 00:00:00,0.9515956145,0.9515956145 +2012-11-02 00:00:00,0.9671027995,0.9671027995 +2012-11-03 00:00:00,1.3140406605,1.3140406605 +2012-11-04 00:00:00,0.972847313,0.972847313 +2012-11-05 00:00:00,0.392926625,0.392926625 +2012-11-06 00:00:00,0.3366863425,0.3366863425 +2012-11-07 00:00:00,0.9652604625,0.9652604625 +2012-11-08 00:00:00,0.9710767855,0.9710767855 +2012-11-09 00:00:00,4.1447343605,4.1447343605 +2012-11-10 00:00:00,1.923937537,1.923937537 +2012-11-11 00:00:00,0.924504051,0.924504051 +2012-11-12 00:00:00,4.4616241945,4.4616241945 +2012-11-13 00:00:00,6.54865088,6.54865088 +2012-11-14 00:00:00,1.0121576175,1.0121576175 +2012-11-15 00:00:00,0.847102318,0.847102318 +2012-11-16 00:00:00,1.320516933,1.320516933 +2012-11-17 00:00:00,0.71916815,0.71916815 +2012-11-18 00:00:00,6.804553085,6.804553085 +2012-11-19 00:00:00,9.322944415,9.322944415 +2012-11-20 00:00:00,2.6538796245,2.6538796245 +2012-11-21 00:00:00,1.257469452,1.257469452 +2012-11-22 00:00:00,2.9123119515,2.9123119515 +2012-11-23 00:00:00,1.1436909105,1.1436909105 +2012-11-24 00:00:00,0.5231530955,0.5231530955 +2012-11-25 00:00:00,0.352486999,0.352486999 +2012-11-26 00:00:00,0.471007061,0.471007061 +2012-11-27 00:00:00,0.5826147525,0.5826147525 +2012-11-28 00:00:00,0.3499573465,0.3499573465 +2012-11-29 00:00:00,0.31525041,0.31525041 +2012-11-30 00:00:00,0.684117986,0.684117986 +2012-12-01 00:00:00,0.47759956,0.47759956 +2012-12-02 00:00:00,3.624340733,3.624340733 +2012-12-03 00:00:00,1.677591628,1.677591628 +2012-12-04 00:00:00,1.2478442585,1.2478442585 +2012-12-05 00:00:00,0.667807895,0.667807895 +2012-12-06 00:00:00,4.1117375885,4.1117375885 +2012-12-07 00:00:00,0.9571187755,0.9571187755 +2012-12-08 00:00:00,0.5225169225,0.5225169225 +2012-12-09 00:00:00,0.697024039,0.697024039 +2012-12-10 00:00:00,0.3773964285,0.3773964285 +2012-12-11 00:00:00,0.292329481,0.292329481 +2012-12-12 00:00:00,0.3345037015,0.3345037015 +2012-12-13 00:00:00,0.3547230385,0.3547230385 +2012-12-14 00:00:00,0.363163396,0.363163396 +2012-12-15 00:00:00,0.4290057735,0.4290057735 +2012-12-16 00:00:00,1.548799674,1.548799674 +2012-12-17 00:00:00,1.8432099735,1.8432099735 +2012-12-18 00:00:00,0.5104470685,0.5104470685 +2012-12-19 00:00:00,0.803193074,0.803193074 +2012-12-20 00:00:00,0.4104750315,0.4104750315 +2012-12-21 00:00:00,0.333459996,0.333459996 +2012-12-22 00:00:00,6.10539272,6.10539272 +2012-12-23 00:00:00,1.832402394,1.832402394 +2012-12-24 00:00:00,0.566615238,0.566615238 +2012-12-25 00:00:00,0.761345333,0.761345333 +2012-12-26 00:00:00,1.7293625885,1.7293625885 +2012-12-27 00:00:00,0.705665086,0.705665086 +2012-12-28 00:00:00,3.1484253655,3.1484253655 +2012-12-29 00:00:00,1.0229483075,1.0229483075 +2012-12-30 00:00:00,5.54556159,5.54556159 +2012-12-31 00:00:00,3.170053473,3.170053473 +2013-01-01 00:00:00,0.9471676965,0.9471676965 +2013-01-02 00:00:00,0.9898138535,0.9898138535 +2013-01-03 00:00:00,1.163123153,1.163123153 +2013-01-04 00:00:00,0.792756919,0.792756919 +2013-01-05 00:00:00,3.7480927595,3.7480927595 +2013-01-06 00:00:00,10.269118695,10.269118695 +2013-01-07 00:00:00,11.6016505,11.6016505 +2013-01-08 00:00:00,4.7416296155,4.7416296155 +2013-01-09 00:00:00,1.2213428075,1.2213428075 +2013-01-10 00:00:00,0.4547595895,0.4547595895 +2013-01-11 00:00:00,0.40782518,0.40782518 +2013-01-12 00:00:00,0.326227554,0.326227554 +2013-01-13 00:00:00,0.357579167,0.357579167 +2013-01-14 00:00:00,1.049302849,1.049302849 +2013-01-15 00:00:00,0.797165056,0.797165056 +2013-01-16 00:00:00,1.313893255,1.313893255 +2013-01-17 00:00:00,1.65892216,1.65892216 +2013-01-18 00:00:00,8.82285385,8.82285385 +2013-01-19 00:00:00,0.9875136925,0.9875136925 +2013-01-20 00:00:00,0.4354792255,0.4354792255 +2013-01-21 00:00:00,0.330251693,0.330251693 +2013-01-22 00:00:00,0.328742342,0.328742342 +2013-01-23 00:00:00,0.3581828585,0.3581828585 +2013-01-24 00:00:00,0.370631486,0.370631486 +2013-01-25 00:00:00,4.562199845,4.562199845 +2013-01-26 00:00:00,5.85791526,5.85791526 +2013-01-27 00:00:00,2.883306033,2.883306033 +2013-01-28 00:00:00,1.8125118435,1.8125118435 +2013-01-29 00:00:00,1.9325423315,1.9325423315 +2013-01-30 00:00:00,1.0774081445,1.0774081445 +2013-01-31 00:00:00,2.056785038,2.056785038 +2013-02-01 00:00:00,0.892609215,0.892609215 +2013-02-02 00:00:00,0.661837104,0.661837104 +2013-02-03 00:00:00,2.456609353,2.456609353 +2013-02-04 00:00:00,0.88750538,0.88750538 +2013-02-05 00:00:00,2.0492497565,2.0492497565 +2013-02-06 00:00:00,0.888446247,0.888446247 +2013-02-07 00:00:00,1.5091653305,1.5091653305 +2013-02-08 00:00:00,0.562406711,0.562406711 +2013-02-09 00:00:00,0.6113686265,0.6113686265 +2013-02-10 00:00:00,1.723566055,1.723566055 +2013-02-11 00:00:00,1.6170348675,1.6170348675 +2013-02-12 00:00:00,0.886697561,0.886697561 +2013-02-13 00:00:00,4.2019023495,4.2019023495 +2013-02-14 00:00:00,0.927215116,0.927215116 +2013-02-15 00:00:00,0.5274727915,0.5274727915 +2013-02-16 00:00:00,0.6367169395,0.6367169395 +2013-02-17 00:00:00,0.3942088955,0.3942088955 +2013-02-18 00:00:00,0.3133019705,0.3133019705 +2013-02-19 00:00:00,0.276538617,0.276538617 +2013-02-20 00:00:00,0.2567403665,0.2567403665 +2013-02-21 00:00:00,0.2383489855,0.2383489855 +2013-02-22 00:00:00,0.2236822925,0.2236822925 +2013-02-23 00:00:00,0.215786651,0.215786651 +2013-02-24 00:00:00,0.208724382,0.208724382 +2013-02-25 00:00:00,0.204081776,0.204081776 +2013-02-26 00:00:00,0.199753061,0.199753061 +2013-02-27 00:00:00,0.1992524385,0.1992524385 +2013-02-28 00:00:00,0.195507511,0.195507511 +2013-03-01 00:00:00,0.190845221,0.190845221 +2013-03-02 00:00:00,0.1866999185,0.1866999185 +2013-03-03 00:00:00,0.1831605545,0.1831605545 +2013-03-04 00:00:00,0.1810016955,0.1810016955 +2013-03-05 00:00:00,0.182706348,0.182706348 +2013-03-06 00:00:00,0.1892131755,0.1892131755 +2013-03-07 00:00:00,0.198391777,0.198391777 +2013-03-08 00:00:00,0.262490763,0.262490763 +2013-03-09 00:00:00,0.278421907,0.278421907 +2013-03-10 00:00:00,0.231327392,0.231327392 +2013-03-11 00:00:00,0.202332748,0.202332748 +2013-03-12 00:00:00,0.1926307715,0.1926307715 +2013-03-13 00:00:00,0.2023477685,0.2023477685 +2013-03-14 00:00:00,0.4715061355,0.4715061355 +2013-03-15 00:00:00,1.6118519385,1.6118519385 +2013-03-16 00:00:00,0.506735432,0.506735432 +2013-03-17 00:00:00,0.8809168245,0.8809168245 +2013-03-18 00:00:00,0.6386312235,0.6386312235 +2013-03-19 00:00:00,0.365570526,0.365570526 +2013-03-20 00:00:00,0.2956299165,0.2956299165 +2013-03-21 00:00:00,0.5427838945,0.5427838945 +2013-03-22 00:00:00,1.5558494355,1.5558494355 +2013-03-23 00:00:00,0.6455762505,0.6455762505 +2013-03-24 00:00:00,0.3389446995,0.3389446995 +2013-03-25 00:00:00,0.267462367,0.267462367 +2013-03-26 00:00:00,0.235229329,0.235229329 +2013-03-27 00:00:00,0.2176514235,0.2176514235 +2013-03-28 00:00:00,0.205322761,0.205322761 +2013-03-29 00:00:00,0.1959642725,0.1959642725 +2013-03-30 00:00:00,0.1885395775,0.1885395775 +2013-03-31 00:00:00,0.184778948,0.184778948 +2013-04-01 00:00:00,0.1814402335,0.1814402335 +2013-04-02 00:00:00,0.176096451,0.176096451 +2013-04-03 00:00:00,0.172832646,0.172832646 +2013-04-04 00:00:00,0.1701355165,0.1701355165 +2013-04-05 00:00:00,0.1678704535,0.1678704535 +2013-04-06 00:00:00,0.165528476,0.165528476 +2013-04-07 00:00:00,0.1643918055,0.1643918055 +2013-04-08 00:00:00,0.162622814,0.162622814 +2013-04-09 00:00:00,0.163704593,0.163704593 +2013-04-10 00:00:00,0.164319045,0.164319045 +2013-04-11 00:00:00,0.1958247155,0.1958247155 +2013-04-12 00:00:00,0.2347672015,0.2347672015 +2013-04-13 00:00:00,0.301849329,0.301849329 +2013-04-14 00:00:00,0.679995223,0.679995223 +2013-04-15 00:00:00,0.5884562335,0.5884562335 +2013-04-16 00:00:00,1.1973084425,1.1973084425 +2013-04-17 00:00:00,5.652584485,5.652584485 +2013-04-18 00:00:00,2.418749033,2.418749033 +2013-04-19 00:00:00,0.701501114,0.701501114 +2013-04-20 00:00:00,0.367179202,0.367179202 +2013-04-21 00:00:00,3.085015208,3.085015208 +2013-04-22 00:00:00,1.6700028485,1.6700028485 +2013-04-23 00:00:00,0.5708122045,0.5708122045 +2013-04-24 00:00:00,2.721881955,2.721881955 +2013-04-25 00:00:00,0.5918043245,0.5918043245 +2013-04-26 00:00:00,0.4289295575,0.4289295575 +2013-04-27 00:00:00,0.35951118,0.35951118 +2013-04-28 00:00:00,0.448651655,0.448651655 +2013-04-29 00:00:00,0.3896450645,0.3896450645 +2013-04-30 00:00:00,0.3282182745,0.3282182745 +2013-05-01 00:00:00,0.299622804,0.299622804 +2013-05-02 00:00:00,0.282685952,0.282685952 +2013-05-03 00:00:00,6.442414065,6.442414065 +2013-05-04 00:00:00,0.7903999765,0.7903999765 +2013-05-05 00:00:00,4.576755625,4.576755625 +2013-05-06 00:00:00,3.9788696475,3.9788696475 +2013-05-07 00:00:00,1.1379845355,1.1379845355 +2013-05-08 00:00:00,2.397001948,2.397001948 +2013-05-09 00:00:00,1.8565788585,1.8565788585 +2013-05-10 00:00:00,1.7797005335,1.7797005335 +2013-05-11 00:00:00,1.502003014,1.502003014 +2013-05-12 00:00:00,1.707722531,1.707722531 +2013-05-13 00:00:00,1.9339897385,1.9339897385 +2013-05-14 00:00:00,2.2466601365,2.2466601365 +2013-05-15 00:00:00,0.7916653635,0.7916653635 +2013-05-16 00:00:00,0.9494893595,0.9494893595 +2013-05-17 00:00:00,1.9194494005,1.9194494005 +2013-05-18 00:00:00,3.4012102725,3.4012102725 +2013-05-19 00:00:00,3.5923147425,3.5923147425 +2013-05-20 00:00:00,2.1825218365,2.1825218365 +2013-05-21 00:00:00,1.562644294,1.562644294 +2013-05-22 00:00:00,1.1498565375,1.1498565375 +2013-05-23 00:00:00,0.879135469,0.879135469 +2013-05-24 00:00:00,0.726481249,0.726481249 +2013-05-25 00:00:00,0.6607352025,0.6607352025 +2013-05-26 00:00:00,0.6773109865,0.6773109865 +2013-05-27 00:00:00,1.0790524465,1.0790524465 +2013-05-28 00:00:00,1.464598485,1.464598485 +2013-05-29 00:00:00,1.104283935,1.104283935 +2013-05-30 00:00:00,0.8866136025,0.8866136025 +2013-05-31 00:00:00,0.737488215,0.737488215 +2013-06-01 00:00:00,0.6424809075,0.6424809075 +2013-06-02 00:00:00,0.5861826,0.5861826 +2013-06-03 00:00:00,0.5307671475,0.5307671475 +2013-06-04 00:00:00,0.4940352565,0.4940352565 +2013-06-05 00:00:00,0.457114219,0.457114219 +2013-06-06 00:00:00,0.429906915,0.429906915 +2013-06-07 00:00:00,0.3989208265,0.3989208265 +2013-06-08 00:00:00,0.389255479,0.389255479 +2013-06-09 00:00:00,0.384344145,0.384344145 +2013-06-10 00:00:00,0.41625423,0.41625423 +2013-06-11 00:00:00,0.4027855165,0.4027855165 +2013-06-12 00:00:00,0.4123230415,0.4123230415 +2013-06-13 00:00:00,0.4169130075,0.4169130075 +2013-06-14 00:00:00,1.283756299,1.283756299 +2013-06-15 00:00:00,1.36659123,1.36659123 +2013-06-16 00:00:00,0.902994289,0.902994289 +2013-06-17 00:00:00,0.7525523815,0.7525523815 +2013-06-18 00:00:00,0.6465621715,0.6465621715 +2013-06-19 00:00:00,0.5792209315,0.5792209315 +2013-06-20 00:00:00,0.5285418975,0.5285418975 +2013-06-21 00:00:00,0.514370419,0.514370419 +2013-06-22 00:00:00,0.68133843,0.68133843 +2013-06-23 00:00:00,0.9510216525,0.9510216525 +2013-06-24 00:00:00,0.7290123415,0.7290123415 +2013-06-25 00:00:00,0.6256714725,0.6256714725 +2013-06-26 00:00:00,0.560830275,0.560830275 +2013-06-27 00:00:00,0.517020019,0.517020019 +2013-06-28 00:00:00,0.5515499475,0.5515499475 +2013-06-29 00:00:00,0.5666332615,0.5666332615 +2013-06-30 00:00:00,0.954494854,0.954494854 +2013-07-01 00:00:00,0.5807489405,0.5807489405 +2013-07-02 00:00:00,2.451931889,2.451931889 +2013-07-03 00:00:00,1.1095156215,1.1095156215 +2013-07-04 00:00:00,4.3916690675,4.3916690675 +2013-07-05 00:00:00,0.34458924,0.34458924 +2013-07-06 00:00:00,0.214712886,0.214712886 +2013-07-07 00:00:00,0.1968872765,0.1968872765 +2013-07-08 00:00:00,0.1633365945,0.1633365945 +2013-07-09 00:00:00,0.1394775475,0.1394775475 +2013-07-10 00:00:00,0.1255828275,0.1255828275 +2013-07-11 00:00:00,0.116816852,0.116816852 +2013-07-12 00:00:00,0.111490617,0.111490617 +2013-07-13 00:00:00,0.10662573,0.10662573 +2013-07-14 00:00:00,0.1029564955,0.1029564955 +2013-07-15 00:00:00,0.0993982635,0.0993982635 +2013-07-16 00:00:00,0.0967821025,0.0967821025 +2013-07-17 00:00:00,0.093650713,0.093650713 +2013-07-18 00:00:00,0.091584561,0.091584561 +2013-07-19 00:00:00,0.088665743,0.088665743 +2013-07-20 00:00:00,0.085147952,0.085147952 +2013-07-21 00:00:00,0.0825808745,0.0825808745 +2013-07-22 00:00:00,0.081734347,0.081734347 +2013-07-23 00:00:00,0.0835597215,0.0835597215 +2013-07-24 00:00:00,0.675984023,0.675984023 +2013-07-25 00:00:00,0.3184566155,0.3184566155 +2013-07-26 00:00:00,0.1818882795,0.1818882795 +2013-07-27 00:00:00,0.131019056,0.131019056 +2013-07-28 00:00:00,0.11289434,0.11289434 +2013-07-29 00:00:00,0.109248423,0.109248423 +2013-07-30 00:00:00,0.722290134,0.722290134 +2013-07-31 00:00:00,1.3138133715,1.3138133715 +2013-08-01 00:00:00,0.8411868845,0.8411868845 +2013-08-02 00:00:00,0.634587099,0.634587099 +2013-08-03 00:00:00,0.5789538325,0.5789538325 +2013-08-04 00:00:00,0.7496709915,0.7496709915 +2013-08-05 00:00:00,0.269344257,0.269344257 +2013-08-06 00:00:00,0.236437624,0.236437624 +2013-08-07 00:00:00,0.6217408415,0.6217408415 +2013-08-08 00:00:00,0.592825128,0.592825128 +2013-08-09 00:00:00,0.580506338,0.580506338 +2013-08-10 00:00:00,0.2845390305,0.2845390305 +2013-08-11 00:00:00,0.280832783,0.280832783 +2013-08-12 00:00:00,0.491593428,0.491593428 +2013-08-13 00:00:00,0.572318151,0.572318151 +2013-08-14 00:00:00,0.399895017,0.399895017 +2013-08-15 00:00:00,3.999975415,3.999975415 +2013-08-16 00:00:00,0.6037102545,0.6037102545 +2013-08-17 00:00:00,2.5365374395,2.5365374395 +2013-08-18 00:00:00,0.6326671655,0.6326671655 +2013-08-19 00:00:00,0.2991537235,0.2991537235 +2013-08-20 00:00:00,3.857402105,3.857402105 +2013-08-21 00:00:00,1.8911336115,1.8911336115 +2013-08-22 00:00:00,0.4754357285,0.4754357285 +2013-08-23 00:00:00,0.8499466505,0.8499466505 +2013-08-24 00:00:00,0.975853174,0.975853174 +2013-08-25 00:00:00,0.7033819865,0.7033819865 +2013-08-26 00:00:00,0.3090222485,0.3090222485 +2013-08-27 00:00:00,0.3043809635,0.3043809635 +2013-08-28 00:00:00,0.2244744255,0.2244744255 +2013-08-29 00:00:00,0.313688773,0.313688773 +2013-08-30 00:00:00,0.672838773,0.672838773 +2013-08-31 00:00:00,0.3370770475,0.3370770475 +2013-09-01 00:00:00,0.199452586,0.199452586 +2013-09-02 00:00:00,0.222204137,0.222204137 +2013-09-03 00:00:00,0.38827589,0.38827589 +2013-09-04 00:00:00,0.602763691,0.602763691 +2013-09-05 00:00:00,0.4838264605,0.4838264605 +2013-09-06 00:00:00,0.2398562935,0.2398562935 +2013-09-07 00:00:00,0.902142902,0.902142902 +2013-09-08 00:00:00,0.8808043115,0.8808043115 +2013-09-09 00:00:00,0.3499717965,0.3499717965 +2013-09-10 00:00:00,0.270242302,0.270242302 +2013-09-11 00:00:00,0.9903914195,0.9903914195 +2013-09-12 00:00:00,1.3497846155,1.3497846155 +2013-09-13 00:00:00,0.4573325105,0.4573325105 +2013-09-14 00:00:00,0.2324073595,0.2324073595 +2013-09-15 00:00:00,3.219223438,3.219223438 +2013-09-16 00:00:00,0.9057032,0.9057032 +2013-09-17 00:00:00,1.087709727,1.087709727 +2013-09-18 00:00:00,0.5703146715,0.5703146715 +2013-09-19 00:00:00,1.1772518115,1.1772518115 +2013-09-20 00:00:00,0.3324361075,0.3324361075 +2013-09-21 00:00:00,0.2536547525,0.2536547525 +2013-09-22 00:00:00,0.408891473,0.408891473 +2013-09-23 00:00:00,0.2450021955,0.2450021955 +2013-09-24 00:00:00,0.18791783,0.18791783 +2013-09-25 00:00:00,0.1671010765,0.1671010765 +2013-09-26 00:00:00,0.1648884765,0.1648884765 +2013-09-27 00:00:00,0.155593022,0.155593022 +2013-09-28 00:00:00,0.141469074,0.141469074 +2013-09-29 00:00:00,0.1289005445,0.1289005445 +2013-09-30 00:00:00,0.124716015,0.124716015 +2013-10-01 00:00:00,0.1484340145,0.1484340145 +2013-10-02 00:00:00,0.180084585,0.180084585 +2013-10-03 00:00:00,0.235032157,0.235032157 +2013-10-04 00:00:00,0.23884461,0.23884461 +2013-10-05 00:00:00,0.206671067,0.206671067 +2013-10-06 00:00:00,0.692456919,0.692456919 +2013-10-07 00:00:00,0.85757913,0.85757913 +2013-10-08 00:00:00,0.559058729,0.559058729 +2013-10-09 00:00:00,0.33465737,0.33465737 +2013-10-10 00:00:00,0.2134105455,0.2134105455 +2013-10-11 00:00:00,0.161865151,0.161865151 +2013-10-12 00:00:00,0.140972967,0.140972967 +2013-10-13 00:00:00,0.138399329,0.138399329 +2013-10-14 00:00:00,0.1308556795,0.1308556795 +2013-10-15 00:00:00,0.1216373485,0.1216373485 +2013-10-16 00:00:00,0.86227001,0.86227001 +2013-10-17 00:00:00,0.4469010055,0.4469010055 +2013-10-18 00:00:00,0.3089951505,0.3089951505 +2013-10-19 00:00:00,1.198569783,1.198569783 +2013-10-20 00:00:00,0.738562617,0.738562617 +2013-10-21 00:00:00,0.329020773,0.329020773 +2013-10-22 00:00:00,0.760821209,0.760821209 +2013-10-23 00:00:00,0.8018450685,0.8018450685 +2013-10-24 00:00:00,0.3388901045,0.3388901045 +2013-10-25 00:00:00,2.294445779,2.294445779 +2013-10-26 00:00:00,1.360241903,1.360241903 +2013-10-27 00:00:00,1.8222642845,1.8222642845 +2013-10-28 00:00:00,1.464632916,1.464632916 +2013-10-29 00:00:00,0.903547321,0.903547321 +2013-10-30 00:00:00,0.773180854,0.773180854 +2013-10-31 00:00:00,1.5953483375,1.5953483375 +2013-11-01 00:00:00,0.8114609015,0.8114609015 +2013-11-02 00:00:00,1.6553837005,1.6553837005 +2013-11-03 00:00:00,0.9324396135,0.9324396135 +2013-11-04 00:00:00,0.373724171,0.373724171 +2013-11-05 00:00:00,1.2832971455,1.2832971455 +2013-11-06 00:00:00,0.8841256335,0.8841256335 +2013-11-07 00:00:00,0.85997963,0.85997963 +2013-11-08 00:00:00,1.46887083,1.46887083 +2013-11-09 00:00:00,1.1277156395,1.1277156395 +2013-11-10 00:00:00,1.509732588,1.509732588 +2013-11-11 00:00:00,2.2509379525,2.2509379525 +2013-11-12 00:00:00,0.4663979515,0.4663979515 +2013-11-13 00:00:00,1.0156638425,1.0156638425 +2013-11-14 00:00:00,0.680602552,0.680602552 +2013-11-15 00:00:00,0.3106200055,0.3106200055 +2013-11-16 00:00:00,0.258046578,0.258046578 +2013-11-17 00:00:00,0.3150808655,0.3150808655 +2013-11-18 00:00:00,0.365925824,0.365925824 +2013-11-19 00:00:00,0.4132089725,0.4132089725 +2013-11-20 00:00:00,0.5073145995,0.5073145995 +2013-11-21 00:00:00,0.430028848,0.430028848 +2013-11-22 00:00:00,0.3545303965,0.3545303965 +2013-11-23 00:00:00,0.251785636,0.251785636 +2013-11-24 00:00:00,0.2458452045,0.2458452045 +2013-11-25 00:00:00,0.2718862245,0.2718862245 +2013-11-26 00:00:00,0.342232187,0.342232187 +2013-11-27 00:00:00,0.2395571485,0.2395571485 +2013-11-28 00:00:00,0.2007497385,0.2007497385 +2013-11-29 00:00:00,0.1996233625,0.1996233625 +2013-11-30 00:00:00,0.200522963,0.200522963 +2013-12-01 00:00:00,0.22117353,0.22117353 +2013-12-02 00:00:00,0.198359508,0.198359508 +2013-12-03 00:00:00,0.722091427,0.722091427 +2013-12-04 00:00:00,0.5425287335,0.5425287335 +2013-12-05 00:00:00,0.412144613,0.412144613 +2013-12-06 00:00:00,0.6917699735,0.6917699735 +2013-12-07 00:00:00,0.452383287,0.452383287 +2013-12-08 00:00:00,1.6487863115,1.6487863115 +2013-12-09 00:00:00,0.7165889935,0.7165889935 +2013-12-10 00:00:00,0.411636957,0.411636957 +2013-12-11 00:00:00,0.429528502,0.429528502 +2013-12-12 00:00:00,1.886431138,1.886431138 +2013-12-13 00:00:00,1.7066827395,1.7066827395 +2013-12-14 00:00:00,5.84696506,5.84696506 +2013-12-15 00:00:00,2.0440954625,2.0440954625 +2013-12-16 00:00:00,0.957866651,0.957866651 +2013-12-17 00:00:00,0.5531581795,0.5531581795 +2013-12-18 00:00:00,1.5882479815,1.5882479815 +2013-12-19 00:00:00,1.053861508,1.053861508 +2013-12-20 00:00:00,3.904745768,3.904745768 +2013-12-21 00:00:00,1.768929783,1.768929783 +2013-12-22 00:00:00,1.1689028605,1.1689028605 +2013-12-23 00:00:00,2.5141884245,2.5141884245 +2013-12-24 00:00:00,2.098595811,2.098595811 +2013-12-25 00:00:00,0.687721383,0.687721383 +2013-12-26 00:00:00,1.5406099605,1.5406099605 +2013-12-27 00:00:00,2.488480794,2.488480794 +2013-12-28 00:00:00,0.983122511,0.983122511 +2013-12-29 00:00:00,1.7244680345,1.7244680345 +2013-12-30 00:00:00,0.963152258,0.963152258 +2013-12-31 00:00:00,2.132613462,2.132613462 +2014-01-01 00:00:00,0.8690723735,0.8690723735 +2014-01-02 00:00:00,0.765185778,0.765185778 +2014-01-03 00:00:00,3.66971414,3.66971414 +2014-01-04 00:00:00,1.7504268495,1.7504268495 +2014-01-05 00:00:00,1.3351775585,1.3351775585 +2014-01-06 00:00:00,1.766934454,1.766934454 +2014-01-07 00:00:00,1.9125637265,1.9125637265 +2014-01-08 00:00:00,0.745399058,0.745399058 +2014-01-09 00:00:00,0.455755876,0.455755876 +2014-01-10 00:00:00,1.400730758,1.400730758 +2014-01-11 00:00:00,1.153421533,1.153421533 +2014-01-12 00:00:00,2.071422464,2.071422464 +2014-01-13 00:00:00,1.583852043,1.583852043 +2014-01-14 00:00:00,2.943402371,2.943402371 +2014-01-15 00:00:00,5.262994365,5.262994365 +2014-01-16 00:00:00,0.780179701,0.780179701 +2014-01-17 00:00:00,0.598788506,0.598788506 +2014-01-18 00:00:00,0.90004862,0.90004862 +2014-01-19 00:00:00,1.1412512285,1.1412512285 +2014-01-20 00:00:00,1.2228600685,1.2228600685 +2014-01-21 00:00:00,0.700464218,0.700464218 +2014-01-22 00:00:00,1.0956308375,1.0956308375 +2014-01-23 00:00:00,1.5031915995,1.5031915995 +2014-01-24 00:00:00,7.96889448,7.96889448 +2014-01-25 00:00:00,1.434919558,1.434919558 +2014-01-26 00:00:00,3.19416504,3.19416504 +2014-01-27 00:00:00,2.0840137335,2.0840137335 +2014-01-28 00:00:00,1.878199257,1.878199257 +2014-01-29 00:00:00,0.693800214,0.693800214 +2014-01-30 00:00:00,0.5220946685,0.5220946685 +2014-01-31 00:00:00,2.168357453,2.168357453 +2014-02-01 00:00:00,2.3106153395,2.3106153395 +2014-02-02 00:00:00,0.967466992,0.967466992 +2014-02-03 00:00:00,1.807475118,1.807475118 +2014-02-04 00:00:00,0.6254879655,0.6254879655 +2014-02-05 00:00:00,0.8123981885,0.8123981885 +2014-02-06 00:00:00,1.024532141,1.024532141 +2014-02-07 00:00:00,0.52121055,0.52121055 +2014-02-08 00:00:00,1.729990537,1.729990537 +2014-02-09 00:00:00,1.8257945675,1.8257945675 +2014-02-10 00:00:00,2.195983591,2.195983591 +2014-02-11 00:00:00,0.9882646715,0.9882646715 +2014-02-12 00:00:00,2.7618125325,2.7618125325 +2014-02-13 00:00:00,2.259962878,2.259962878 +2014-02-14 00:00:00,1.6003415355,1.6003415355 +2014-02-15 00:00:00,3.5649647195,3.5649647195 +2014-02-16 00:00:00,0.827825782,0.827825782 +2014-02-17 00:00:00,0.958006787,0.958006787 +2014-02-18 00:00:00,0.486037502,0.486037502 +2014-02-19 00:00:00,3.7104310285,3.7104310285 +2014-02-20 00:00:00,6.569700825,6.569700825 +2014-02-21 00:00:00,2.2171766305,2.2171766305 +2014-02-22 00:00:00,0.896338352,0.896338352 +2014-02-23 00:00:00,3.113189666,3.113189666 +2014-02-24 00:00:00,0.6112483165,0.6112483165 +2014-02-25 00:00:00,1.7547569115,1.7547569115 +2014-02-26 00:00:00,1.3916847215,1.3916847215 +2014-02-27 00:00:00,1.2045884155,1.2045884155 +2014-02-28 00:00:00,0.5148563425,0.5148563425 +2014-03-01 00:00:00,1.829493031,1.829493031 +2014-03-02 00:00:00,1.9145001725,1.9145001725 +2014-03-03 00:00:00,0.6113382205,0.6113382205 +2014-03-04 00:00:00,0.5211895625,0.5211895625 +2014-03-05 00:00:00,1.049776153,1.049776153 +2014-03-06 00:00:00,2.1215340055,2.1215340055 +2014-03-07 00:00:00,0.6839970805,0.6839970805 +2014-03-08 00:00:00,0.5316732195,0.5316732195 +2014-03-09 00:00:00,0.8831122595,0.8831122595 +2014-03-10 00:00:00,0.4120365675,0.4120365675 +2014-03-11 00:00:00,0.2640416775,0.2640416775 +2014-03-12 00:00:00,0.209940409,0.209940409 +2014-03-13 00:00:00,0.1880041795,0.1880041795 +2014-03-14 00:00:00,0.17308489,0.17308489 +2014-03-15 00:00:00,0.1586643415,0.1586643415 +2014-03-16 00:00:00,0.1759165525,0.1759165525 +2014-03-17 00:00:00,0.199859206,0.199859206 +2014-03-18 00:00:00,0.595975146,0.595975146 +2014-03-19 00:00:00,0.275842273,0.275842273 +2014-03-20 00:00:00,3.834482766,3.834482766 +2014-03-21 00:00:00,2.8201283925,2.8201283925 +2014-03-22 00:00:00,1.659101925,1.659101925 +2014-03-23 00:00:00,1.2124798625,1.2124798625 +2014-03-24 00:00:00,0.519933147,0.519933147 +2014-03-25 00:00:00,0.6827888445,0.6827888445 +2014-03-26 00:00:00,0.2839346035,0.2839346035 +2014-03-27 00:00:00,0.212686987,0.212686987 +2014-03-28 00:00:00,0.180089596,0.180089596 +2014-03-29 00:00:00,0.1981044365,0.1981044365 +2014-03-30 00:00:00,0.831545946,0.831545946 +2014-03-31 00:00:00,0.483546273,0.483546273 +2014-04-01 00:00:00,0.2979623495,0.2979623495 +2014-04-02 00:00:00,0.425913579,0.425913579 +2014-04-03 00:00:00,0.3895863195,0.3895863195 +2014-04-04 00:00:00,0.242571383,0.242571383 +2014-04-05 00:00:00,0.3775958935,0.3775958935 +2014-04-06 00:00:00,2.940061345,2.940061345 +2014-04-07 00:00:00,0.588357766,0.588357766 +2014-04-08 00:00:00,0.482375783,0.482375783 +2014-04-09 00:00:00,0.2933370825,0.2933370825 +2014-04-10 00:00:00,0.413743284,0.413743284 +2014-04-11 00:00:00,0.2565095095,0.2565095095 +2014-04-12 00:00:00,0.264771314,0.264771314 +2014-04-13 00:00:00,0.2055272585,0.2055272585 +2014-04-14 00:00:00,0.1696820315,0.1696820315 +2014-04-15 00:00:00,0.1513406555,0.1513406555 +2014-04-16 00:00:00,0.1422777185,0.1422777185 +2014-04-17 00:00:00,0.167030357,0.167030357 +2014-04-18 00:00:00,0.165042828,0.165042828 +2014-04-19 00:00:00,0.144070797,0.144070797 +2014-04-20 00:00:00,0.131866646,0.131866646 +2014-04-21 00:00:00,0.122868155,0.122868155 +2014-04-22 00:00:00,0.117690625,0.117690625 +2014-04-23 00:00:00,0.146345037,0.146345037 +2014-04-24 00:00:00,0.2419339655,0.2419339655 +2014-04-25 00:00:00,0.1492915235,0.1492915235 +2014-04-26 00:00:00,0.4153876045,0.4153876045 +2014-04-27 00:00:00,0.2266330905,0.2266330905 +2014-04-28 00:00:00,0.148569334,0.148569334 +2014-04-29 00:00:00,0.125969051,0.125969051 +2014-04-30 00:00:00,0.127119416,0.127119416 +2014-05-01 00:00:00,0.20154804,0.20154804 +2014-05-02 00:00:00,0.194046331,0.194046331 +2014-05-03 00:00:00,0.3272731035,0.3272731035 +2014-05-04 00:00:00,0.834298205,0.834298205 +2014-05-05 00:00:00,0.794126214,0.794126214 +2014-05-06 00:00:00,1.793440509,1.793440509 +2014-05-07 00:00:00,1.4924020595,1.4924020595 +2014-05-08 00:00:00,0.715454038,0.715454038 +2014-05-09 00:00:00,0.8605708995,0.8605708995 +2014-05-10 00:00:00,1.3343148745,1.3343148745 +2014-05-11 00:00:00,2.010260874,2.010260874 +2014-05-12 00:00:00,0.578601596,0.578601596 +2014-05-13 00:00:00,0.438613759,0.438613759 +2014-05-14 00:00:00,0.407746152,0.407746152 +2014-05-15 00:00:00,0.2668532305,0.2668532305 +2014-05-16 00:00:00,0.1923297535,0.1923297535 +2014-05-17 00:00:00,3.973606615,3.973606615 +2014-05-18 00:00:00,5.072584325,5.072584325 +2014-05-19 00:00:00,0.6093226255,0.6093226255 +2014-05-20 00:00:00,0.665275871,0.665275871 +2014-05-21 00:00:00,0.7163197555,0.7163197555 +2014-05-22 00:00:00,1.176006024,1.176006024 +2014-05-23 00:00:00,1.903067202,1.903067202 +2014-05-24 00:00:00,0.352874447,0.352874447 +2014-05-25 00:00:00,0.2284095915,0.2284095915 +2014-05-26 00:00:00,0.3777052035,0.3777052035 +2014-05-27 00:00:00,0.26816341,0.26816341 +2014-05-28 00:00:00,0.1794115965,0.1794115965 +2014-05-29 00:00:00,0.149870977,0.149870977 +2014-05-30 00:00:00,0.13462199,0.13462199 +2014-05-31 00:00:00,0.126354577,0.126354577 +2014-06-01 00:00:00,0.332040121,0.332040121 +2014-06-02 00:00:00,0.7763218665,0.7763218665 +2014-06-03 00:00:00,0.401945046,0.401945046 +2014-06-04 00:00:00,0.2337836065,0.2337836065 +2014-06-05 00:00:00,0.1745072275,0.1745072275 +2014-06-06 00:00:00,0.152865757,0.152865757 +2014-06-07 00:00:00,0.1839735025,0.1839735025 +2014-06-08 00:00:00,0.354579428,0.354579428 +2014-06-09 00:00:00,0.619690538,0.619690538 +2014-06-10 00:00:00,0.884397939,0.884397939 +2014-06-11 00:00:00,0.354954794,0.354954794 +2014-06-12 00:00:00,0.26191641,0.26191641 +2014-06-13 00:00:00,0.745246752,0.745246752 +2014-06-14 00:00:00,0.3259959195,0.3259959195 +2014-06-15 00:00:00,0.1915968395,0.1915968395 +2014-06-16 00:00:00,0.1500047855,0.1500047855 +2014-06-17 00:00:00,0.1306294055,0.1306294055 +2014-06-18 00:00:00,0.1182524285,0.1182524285 +2014-06-19 00:00:00,0.1097200885,0.1097200885 +2014-06-20 00:00:00,0.1040478875,0.1040478875 +2014-06-21 00:00:00,0.0997471245,0.0997471245 +2014-06-22 00:00:00,0.096238184,0.096238184 +2014-06-23 00:00:00,0.0920259945,0.0920259945 +2014-06-24 00:00:00,0.088645489,0.088645489 +2014-06-25 00:00:00,0.1054244085,0.1054244085 +2014-06-26 00:00:00,0.1407453215,0.1407453215 +2014-06-27 00:00:00,0.26793139,0.26793139 +2014-06-28 00:00:00,0.2600871655,0.2600871655 +2014-06-29 00:00:00,0.1273375665,0.1273375665 +2014-06-30 00:00:00,0.1033729855,0.1033729855 +2014-07-01 00:00:00,0.0927139545,0.0927139545 +2014-07-02 00:00:00,0.1551583535,0.1551583535 +2014-07-03 00:00:00,0.374954191,0.374954191 +2014-07-04 00:00:00,2.8980885645,2.8980885645 +2014-07-05 00:00:00,0.4227118925,0.4227118925 +2014-07-06 00:00:00,0.3457609995,0.3457609995 +2014-07-07 00:00:00,0.404289535,0.404289535 +2014-07-08 00:00:00,0.438709413,0.438709413 +2014-07-09 00:00:00,0.273300733,0.273300733 +2014-07-10 00:00:00,0.598200609,0.598200609 +2014-07-11 00:00:00,0.3270891525,0.3270891525 +2014-07-12 00:00:00,0.748491491,0.748491491 +2014-07-13 00:00:00,0.4856321055,0.4856321055 +2014-07-14 00:00:00,3.8458213235,3.8458213235 +2014-07-15 00:00:00,2.1941003065,2.1941003065 +2014-07-16 00:00:00,3.158981805,3.158981805 +2014-07-17 00:00:00,0.4374924475,0.4374924475 +2014-07-18 00:00:00,0.334184838,0.334184838 +2014-07-19 00:00:00,0.2720755745,0.2720755745 +2014-07-20 00:00:00,0.1944848805,0.1944848805 +2014-07-21 00:00:00,0.176823418,0.176823418 +2014-07-22 00:00:00,0.3185371155,0.3185371155 +2014-07-23 00:00:00,0.286021527,0.286021527 +2014-07-24 00:00:00,0.1905997435,0.1905997435 +2014-07-25 00:00:00,0.1608578945,0.1608578945 +2014-07-26 00:00:00,0.142323934,0.142323934 +2014-07-27 00:00:00,0.135169094,0.135169094 +2014-07-28 00:00:00,0.123835532,0.123835532 +2014-07-29 00:00:00,0.1414249905,0.1414249905 +2014-07-30 00:00:00,0.1380540615,0.1380540615 +2014-07-31 00:00:00,0.146300937,0.146300937 +2014-08-01 00:00:00,0.152528393,0.152528393 +2014-08-02 00:00:00,0.127998542,0.127998542 +2014-08-03 00:00:00,0.4306395655,0.4306395655 +2014-08-04 00:00:00,0.232819153,0.232819153 +2014-08-05 00:00:00,0.1514740615,0.1514740615 +2014-08-06 00:00:00,0.1721691565,0.1721691565 +2014-08-07 00:00:00,0.151683488,0.151683488 +2014-08-08 00:00:00,0.145434365,0.145434365 +2014-08-09 00:00:00,0.1831257845,0.1831257845 +2014-08-10 00:00:00,1.032778867,1.032778867 +2014-08-11 00:00:00,0.4318523975,0.4318523975 +2014-08-12 00:00:00,0.3719762355,0.3719762355 +2014-08-13 00:00:00,0.440281262,0.440281262 +2014-08-14 00:00:00,1.433343144,1.433343144 +2014-08-15 00:00:00,0.295450256,0.295450256 +2014-08-16 00:00:00,0.2268253015,0.2268253015 +2014-08-17 00:00:00,0.3866546345,0.3866546345 +2014-08-18 00:00:00,0.2313864615,0.2313864615 +2014-08-19 00:00:00,0.190348164,0.190348164 +2014-08-20 00:00:00,0.159529387,0.159529387 +2014-08-21 00:00:00,0.301839573,0.301839573 +2014-08-22 00:00:00,0.2323085245,0.2323085245 +2014-08-23 00:00:00,0.159208661,0.159208661 +2014-08-24 00:00:00,0.1370316655,0.1370316655 +2014-08-25 00:00:00,1.010837869,1.010837869 +2014-08-26 00:00:00,0.4824219035,0.4824219035 +2014-08-27 00:00:00,0.2335258785,0.2335258785 +2014-08-28 00:00:00,5.39407004,5.39407004 +2014-08-29 00:00:00,2.0535001365,2.0535001365 +2014-08-30 00:00:00,1.844298693,1.844298693 +2014-08-31 00:00:00,2.183455816,2.183455816 +2014-09-01 00:00:00,0.668141611,0.668141611 +2014-09-02 00:00:00,0.286933678,0.286933678 +2014-09-03 00:00:00,0.204076289,0.204076289 +2014-09-04 00:00:00,0.1689157305,0.1689157305 +2014-09-05 00:00:00,0.153842354,0.153842354 +2014-09-06 00:00:00,0.1408757965,0.1408757965 +2014-09-07 00:00:00,0.1299076195,0.1299076195 +2014-09-08 00:00:00,0.1230957915,0.1230957915 +2014-09-09 00:00:00,0.118693347,0.118693347 +2014-09-10 00:00:00,0.1152939845,0.1152939845 +2014-09-11 00:00:00,0.1125269195,0.1125269195 +2014-09-12 00:00:00,0.110541568,0.110541568 +2014-09-13 00:00:00,0.1083115855,0.1083115855 +2014-09-14 00:00:00,0.10627468,0.10627468 +2014-09-15 00:00:00,0.1053168995,0.1053168995 +2014-09-16 00:00:00,0.104495279,0.104495279 +2014-09-17 00:00:00,0.1033204505,0.1033204505 +2014-09-18 00:00:00,0.1025441845,0.1025441845 +2014-09-19 00:00:00,0.1016079695,0.1016079695 +2014-09-20 00:00:00,0.1004144035,0.1004144035 +2014-09-21 00:00:00,0.0982124265,0.0982124265 +2014-09-22 00:00:00,0.0982602925,0.0982602925 +2014-09-23 00:00:00,0.110515529,0.110515529 +2014-09-24 00:00:00,0.119866954,0.119866954 +2014-09-25 00:00:00,0.174514008,0.174514008 +2014-09-26 00:00:00,0.237340989,0.237340989 +2014-09-27 00:00:00,0.151327238,0.151327238 +2014-09-28 00:00:00,0.142072906,0.142072906 +2014-09-29 00:00:00,0.1264515765,0.1264515765 +2014-09-30 00:00:00,0.1711283215,0.1711283215 +2014-10-01 00:00:00,0.554062279,0.554062279 +2014-10-02 00:00:00,0.1862095165,0.1862095165 +2014-10-03 00:00:00,1.2262581045,1.2262581045 +2014-10-04 00:00:00,0.318786197,0.318786197 +2014-10-05 00:00:00,0.7132166845,0.7132166845 +2014-10-06 00:00:00,1.054461762,1.054461762 +2014-10-07 00:00:00,0.3603095835,0.3603095835 +2014-10-08 00:00:00,0.236938883,0.236938883 +2014-10-09 00:00:00,0.3380880745,0.3380880745 +2014-10-10 00:00:00,0.2931407905,0.2931407905 +2014-10-11 00:00:00,0.271845694,0.271845694 +2014-10-12 00:00:00,0.240014814,0.240014814 +2014-10-13 00:00:00,0.1828203385,0.1828203385 +2014-10-14 00:00:00,0.1580504285,0.1580504285 +2014-10-15 00:00:00,0.4548656065,0.4548656065 +2014-10-16 00:00:00,0.4424223635,0.4424223635 +2014-10-17 00:00:00,0.5306403945,0.5306403945 +2014-10-18 00:00:00,0.637213219,0.637213219 +2014-10-19 00:00:00,2.899144864,2.899144864 +2014-10-20 00:00:00,4.7961994845,4.7961994845 +2014-10-21 00:00:00,2.493706223,2.493706223 +2014-10-22 00:00:00,0.5735640455,0.5735640455 +2014-10-23 00:00:00,4.9913788745,4.9913788745 +2014-10-24 00:00:00,1.2724216125,1.2724216125 +2014-10-25 00:00:00,0.7719718475,0.7719718475 +2014-10-26 00:00:00,2.3032765555,2.3032765555 +2014-10-27 00:00:00,3.148586442,3.148586442 +2014-10-28 00:00:00,4.785383755,4.785383755 +2014-10-29 00:00:00,0.5286258605,0.5286258605 +2014-10-30 00:00:00,1.2700339555,1.2700339555 +2014-10-31 00:00:00,4.36934724,4.36934724 +2014-11-01 00:00:00,1.331081211,1.331081211 +2014-11-02 00:00:00,2.4797217415,2.4797217415 +2014-11-03 00:00:00,2.801483572,2.801483572 +2014-11-04 00:00:00,1.3077511335,1.3077511335 +2014-11-05 00:00:00,0.5633831285,0.5633831285 +2014-11-06 00:00:00,10.034482875,10.034482875 +2014-11-07 00:00:00,1.273140574,1.273140574 +2014-11-08 00:00:00,1.082651843,1.082651843 +2014-11-09 00:00:00,0.849671004,0.849671004 +2014-11-10 00:00:00,1.1240715395,1.1240715395 +2014-11-11 00:00:00,0.7213168545,0.7213168545 +2014-11-12 00:00:00,0.4251546495,0.4251546495 +2014-11-13 00:00:00,1.292403964,1.292403964 +2014-11-14 00:00:00,1.633663418,1.633663418 +2014-11-15 00:00:00,0.491213872,0.491213872 +2014-11-16 00:00:00,0.3294732695,0.3294732695 +2014-11-17 00:00:00,0.26274185,0.26274185 +2014-11-18 00:00:00,0.226571199,0.226571199 +2014-11-19 00:00:00,0.201415836,0.201415836 +2014-11-20 00:00:00,0.1843707775,0.1843707775 +2014-11-21 00:00:00,0.3591196985,0.3591196985 +2014-11-22 00:00:00,0.659804884,0.659804884 +2014-11-23 00:00:00,0.4315392885,0.4315392885 +2014-11-24 00:00:00,0.5580428215,0.5580428215 +2014-11-25 00:00:00,0.4054301525,0.4054301525 +2014-11-26 00:00:00,0.3146473645,0.3146473645 +2014-11-27 00:00:00,0.246661709,0.246661709 +2014-11-28 00:00:00,0.209394113,0.209394113 +2014-11-29 00:00:00,0.189357804,0.189357804 +2014-11-30 00:00:00,0.183696531,0.183696531 +2014-12-01 00:00:00,0.6472684885,0.6472684885 +2014-12-02 00:00:00,0.3958882575,0.3958882575 +2014-12-03 00:00:00,0.3100798145,0.3100798145 +2014-12-04 00:00:00,0.7857286005,0.7857286005 +2014-12-05 00:00:00,0.887529346,0.887529346 +2014-12-06 00:00:00,1.094946999,1.094946999 +2014-12-07 00:00:00,2.3675770765,2.3675770765 +2014-12-08 00:00:00,1.1413012145,1.1413012145 +2014-12-09 00:00:00,4.4829748185,4.4829748185 +2014-12-10 00:00:00,1.21435701,1.21435701 +2014-12-11 00:00:00,2.6002142205,2.6002142205 +2014-12-12 00:00:00,1.45459726,1.45459726 +2014-12-13 00:00:00,0.78493757,0.78493757 +2014-12-14 00:00:00,1.5841971625,1.5841971625 +2014-12-15 00:00:00,1.0533143985,1.0533143985 +2014-12-16 00:00:00,3.3636824935,3.3636824935 +2014-12-17 00:00:00,5.249084235,5.249084235 +2014-12-18 00:00:00,4.290688568,4.290688568 +2014-12-19 00:00:00,1.0196612495,1.0196612495 +2014-12-20 00:00:00,0.6886352635,0.6886352635 +2014-12-21 00:00:00,4.0936666035,4.0936666035 +2014-12-22 00:00:00,8.614658685,8.614658685 +2014-12-23 00:00:00,6.63423909,6.63423909 +2014-12-24 00:00:00,0.8631566255,0.8631566255 +2014-12-25 00:00:00,0.530422014,0.530422014 +2014-12-26 00:00:00,1.0919020115,1.0919020115 +2014-12-27 00:00:00,1.1535154625,1.1535154625 +2014-12-28 00:00:00,0.555808918,0.555808918 +2014-12-29 00:00:00,0.362703767,0.362703767 +2014-12-30 00:00:00,0.4259197615,0.4259197615 +2014-12-31 00:00:00,1.5418172475,1.5418172475 +2015-01-01 00:00:00,9.523588465,9.523588465 +2015-01-02 00:00:00,1.0919664505,1.0919664505 +2015-01-03 00:00:00,0.751377011,0.751377011 +2015-01-04 00:00:00,0.4735235125,0.4735235125 +2015-01-05 00:00:00,0.772090269,0.772090269 +2015-01-06 00:00:00,2.909442244,2.909442244 +2015-01-07 00:00:00,13.53745603,13.53745603 +2015-01-08 00:00:00,1.8261027505,1.8261027505 +2015-01-09 00:00:00,6.08811148,6.08811148 +2015-01-10 00:00:00,4.8932084045,4.8932084045 +2015-01-11 00:00:00,0.8638151905,0.8638151905 +2015-01-12 00:00:00,3.776504543,3.776504543 +2015-01-13 00:00:00,1.105592214,1.105592214 +2015-01-14 00:00:00,4.436510289,4.436510289 +2015-01-15 00:00:00,2.478353047,2.478353047 +2015-01-16 00:00:00,1.1181335175,1.1181335175 +2015-01-17 00:00:00,0.7690877225,0.7690877225 +2015-01-18 00:00:00,0.8054427415,0.8054427415 +2015-01-19 00:00:00,0.4805141125,0.4805141125 +2015-01-20 00:00:00,1.158889372,1.158889372 +2015-01-21 00:00:00,2.693286775,2.693286775 +2015-01-22 00:00:00,0.8186337645,0.8186337645 +2015-01-23 00:00:00,2.479535132,2.479535132 +2015-01-24 00:00:00,0.6988886245,0.6988886245 +2015-01-25 00:00:00,3.097346155,3.097346155 +2015-01-26 00:00:00,1.084451488,1.084451488 +2015-01-27 00:00:00,0.885662367,0.885662367 +2015-01-28 00:00:00,2.03587536,2.03587536 +2015-01-29 00:00:00,1.073164616,1.073164616 +2015-01-30 00:00:00,1.504560998,1.504560998 +2015-01-31 00:00:00,0.8057067585,0.8057067585 +2015-02-01 00:00:00,0.5205288195,0.5205288195 +2015-02-02 00:00:00,0.3567716945,0.3567716945 +2015-02-03 00:00:00,0.974308149,0.974308149 +2015-02-04 00:00:00,0.422346736,0.422346736 +2015-02-05 00:00:00,0.3348785395,0.3348785395 +2015-02-06 00:00:00,0.396743126,0.396743126 +2015-02-07 00:00:00,0.3250596025,0.3250596025 +2015-02-08 00:00:00,0.2746660175,0.2746660175 +2015-02-09 00:00:00,0.218436885,0.218436885 +2015-02-10 00:00:00,0.194810927,0.194810927 +2015-02-11 00:00:00,0.1756981515,0.1756981515 +2015-02-12 00:00:00,0.164709706,0.164709706 +2015-02-13 00:00:00,0.1904424955,0.1904424955 +2015-02-14 00:00:00,0.178558985,0.178558985 +2015-02-15 00:00:00,2.1411948815,2.1411948815 +2015-02-16 00:00:00,1.3672375115,1.3672375115 +2015-02-17 00:00:00,0.780290699,0.780290699 +2015-02-18 00:00:00,3.050656011,3.050656011 +2015-02-19 00:00:00,1.1384295855,1.1384295855 +2015-02-20 00:00:00,0.701226766,0.701226766 +2015-02-21 00:00:00,0.83107369,0.83107369 +2015-02-22 00:00:00,2.2883749305,2.2883749305 +2015-02-23 00:00:00,1.3439326835,1.3439326835 +2015-02-24 00:00:00,1.9464218915,1.9464218915 +2015-02-25 00:00:00,2.1732776905,2.1732776905 +2015-02-26 00:00:00,3.045746427,3.045746427 +2015-02-27 00:00:00,0.9716703365,0.9716703365 +2015-02-28 00:00:00,2.85543599,2.85543599 +2015-03-01 00:00:00,1.0231859435,1.0231859435 +2015-03-02 00:00:00,0.714740877,0.714740877 +2015-03-03 00:00:00,0.934047753,0.934047753 +2015-03-04 00:00:00,1.4460620905,1.4460620905 +2015-03-05 00:00:00,1.499006048,1.499006048 +2015-03-06 00:00:00,1.025229817,1.025229817 +2015-03-07 00:00:00,11.36497255,11.36497255 +2015-03-08 00:00:00,1.3899912645,1.3899912645 +2015-03-09 00:00:00,0.8159332815,0.8159332815 +2015-03-10 00:00:00,0.4271396055,0.4271396055 +2015-03-11 00:00:00,0.8914103705,0.8914103705 +2015-03-12 00:00:00,2.1804814935,2.1804814935 +2015-03-13 00:00:00,0.4633112555,0.4633112555 +2015-03-14 00:00:00,0.278652725,0.278652725 +2015-03-15 00:00:00,0.217974585,0.217974585 +2015-03-16 00:00:00,0.1886578535,0.1886578535 +2015-03-17 00:00:00,0.1706062835,0.1706062835 +2015-03-18 00:00:00,0.156313346,0.156313346 +2015-03-19 00:00:00,0.1458796505,0.1458796505 +2015-03-20 00:00:00,0.162653003,0.162653003 +2015-03-21 00:00:00,0.153176806,0.153176806 +2015-03-22 00:00:00,0.1430518755,0.1430518755 +2015-03-23 00:00:00,0.210595948,0.210595948 +2015-03-24 00:00:00,0.4441444155,0.4441444155 +2015-03-25 00:00:00,1.0801720115,1.0801720115 +2015-03-26 00:00:00,1.8478617035,1.8478617035 +2015-03-27 00:00:00,0.349737898,0.349737898 +2015-03-28 00:00:00,7.0897503,7.0897503 +2015-03-29 00:00:00,2.127012765,2.127012765 +2015-03-30 00:00:00,1.8052852245,1.8052852245 +2015-03-31 00:00:00,0.868276654,0.868276654 +2015-04-01 00:00:00,1.160164199,1.160164199 +2015-04-02 00:00:00,6.393508575,6.393508575 +2015-04-03 00:00:00,4.4556484825,4.4556484825 +2015-04-04 00:00:00,0.468030831,0.468030831 +2015-04-05 00:00:00,0.306264645,0.306264645 +2015-04-06 00:00:00,0.2291310055,0.2291310055 +2015-04-07 00:00:00,0.1914077335,0.1914077335 +2015-04-08 00:00:00,0.1715306235,0.1715306235 +2015-04-09 00:00:00,0.1573761475,0.1573761475 +2015-04-10 00:00:00,0.192594463,0.192594463 +2015-04-11 00:00:00,0.432998887,0.432998887 +2015-04-12 00:00:00,1.5706948545,1.5706948545 +2015-04-13 00:00:00,0.493864066,0.493864066 +2015-04-14 00:00:00,0.388239372,0.388239372 +2015-04-15 00:00:00,1.7334353205,1.7334353205 +2015-04-16 00:00:00,0.3663639065,0.3663639065 +2015-04-17 00:00:00,0.236128633,0.236128633 +2015-04-18 00:00:00,0.1905933135,0.1905933135 +2015-04-19 00:00:00,0.168745444,0.168745444 +2015-04-20 00:00:00,0.1563530975,0.1563530975 +2015-04-21 00:00:00,0.147561212,0.147561212 +2015-04-22 00:00:00,0.1420751515,0.1420751515 +2015-04-23 00:00:00,0.1373507045,0.1373507045 +2015-04-24 00:00:00,0.140147589,0.140147589 +2015-04-25 00:00:00,0.6802337055,0.6802337055 +2015-04-26 00:00:00,0.232244905,0.232244905 +2015-04-27 00:00:00,0.192481464,0.192481464 +2015-04-28 00:00:00,1.677294126,1.677294126 +2015-04-29 00:00:00,1.568301306,1.568301306 +2015-04-30 00:00:00,0.551194934,0.551194934 +2015-05-01 00:00:00,0.254276267,0.254276267 +2015-05-02 00:00:00,0.379750513,0.379750513 +2015-05-03 00:00:00,0.9477414775,0.9477414775 +2015-05-04 00:00:00,0.5385426715,0.5385426715 +2015-05-05 00:00:00,1.6410237195,1.6410237195 +2015-05-06 00:00:00,3.123686225,3.123686225 +2015-05-07 00:00:00,0.5162135095,0.5162135095 +2015-05-08 00:00:00,0.2903984545,0.2903984545 +2015-05-09 00:00:00,0.22679194,0.22679194 +2015-05-10 00:00:00,3.4375017625,3.4375017625 +2015-05-11 00:00:00,0.5313726615,0.5313726615 +2015-05-12 00:00:00,0.686142719,0.686142719 +2015-05-13 00:00:00,0.3928809585,0.3928809585 +2015-05-14 00:00:00,0.234602816,0.234602816 +2015-05-15 00:00:00,0.690073114,0.690073114 +2015-05-16 00:00:00,0.425113952,0.425113952 +2015-05-17 00:00:00,0.334263528,0.334263528 +2015-05-18 00:00:00,1.598858974,1.598858974 +2015-05-19 00:00:00,0.7599574815,0.7599574815 +2015-05-20 00:00:00,0.4638854115,0.4638854115 +2015-05-21 00:00:00,0.4443655605,0.4443655605 +2015-05-22 00:00:00,1.006572601,1.006572601 +2015-05-23 00:00:00,0.543108078,0.543108078 +2015-05-24 00:00:00,0.732605469,0.732605469 +2015-05-25 00:00:00,0.374800233,0.374800233 +2015-05-26 00:00:00,0.338082303,0.338082303 +2015-05-27 00:00:00,0.915166031,0.915166031 +2015-05-28 00:00:00,0.748508721,0.748508721 +2015-05-29 00:00:00,1.493097476,1.493097476 +2015-05-30 00:00:00,1.4137473755,1.4137473755 +2015-05-31 00:00:00,1.308132206,1.308132206 +2015-06-01 00:00:00,5.17195931,5.17195931 +2015-06-02 00:00:00,0.6379186405,0.6379186405 +2015-06-03 00:00:00,0.3227171875,0.3227171875 +2015-06-04 00:00:00,0.389814564,0.389814564 +2015-06-05 00:00:00,0.5670085295,0.5670085295 +2015-06-06 00:00:00,0.3604117005,0.3604117005 +2015-06-07 00:00:00,0.253626628,0.253626628 +2015-06-08 00:00:00,0.197607408,0.197607408 +2015-06-09 00:00:00,0.1714575885,0.1714575885 +2015-06-10 00:00:00,0.156468175,0.156468175 +2015-06-11 00:00:00,0.146182378,0.146182378 +2015-06-12 00:00:00,0.1405957355,0.1405957355 +2015-06-13 00:00:00,0.1365861985,0.1365861985 +2015-06-14 00:00:00,0.130305839,0.130305839 +2015-06-15 00:00:00,0.13001758,0.13001758 +2015-06-16 00:00:00,0.142787565,0.142787565 +2015-06-17 00:00:00,0.3575358325,0.3575358325 +2015-06-18 00:00:00,0.200364645,0.200364645 +2015-06-19 00:00:00,0.1569203235,0.1569203235 +2015-06-20 00:00:00,0.190435863,0.190435863 +2015-06-21 00:00:00,0.223730456,0.223730456 +2015-06-22 00:00:00,0.202071691,0.202071691 +2015-06-23 00:00:00,0.163541322,0.163541322 +2015-06-24 00:00:00,0.1756705915,0.1756705915 +2015-06-25 00:00:00,0.1902785645,0.1902785645 +2015-06-26 00:00:00,0.517432492,0.517432492 +2015-06-27 00:00:00,0.3687407955,0.3687407955 +2015-06-28 00:00:00,0.9875872335,0.9875872335 +2015-06-29 00:00:00,0.443574235,0.443574235 +2015-06-30 00:00:00,0.602054584,0.602054584 +2015-07-01 00:00:00,0.327684916,0.327684916 +2015-07-02 00:00:00,0.4800104415,0.4800104415 +2015-07-03 00:00:00,0.2310235175,0.2310235175 +2015-07-04 00:00:00,0.1921479585,0.1921479585 +2015-07-05 00:00:00,0.169228467,0.169228467 +2015-07-06 00:00:00,0.205764525,0.205764525 +2015-07-07 00:00:00,3.0080375805,3.0080375805 +2015-07-08 00:00:00,1.1723209885,1.1723209885 +2015-07-09 00:00:00,1.3830973725,1.3830973725 +2015-07-10 00:00:00,3.0958749055,3.0958749055 +2015-07-11 00:00:00,5.523732485,5.523732485 +2015-07-12 00:00:00,1.3109292015,1.3109292015 +2015-07-13 00:00:00,1.52487722,1.52487722 +2015-07-14 00:00:00,0.419268478,0.419268478 +2015-07-15 00:00:00,0.2577637915,0.2577637915 +2015-07-16 00:00:00,0.2487255665,0.2487255665 +2015-07-17 00:00:00,0.871705954,0.871705954 +2015-07-18 00:00:00,2.7357800055,2.7357800055 +2015-07-19 00:00:00,1.452891311,1.452891311 +2015-07-20 00:00:00,1.4868762865,1.4868762865 +2015-07-21 00:00:00,1.5652030655,1.5652030655 +2015-07-22 00:00:00,0.4093027345,0.4093027345 +2015-07-23 00:00:00,0.270332038,0.270332038 +2015-07-24 00:00:00,0.245788255,0.245788255 +2015-07-25 00:00:00,0.229733956,0.229733956 +2015-07-26 00:00:00,5.768195745,5.768195745 +2015-07-27 00:00:00,1.7725892225,1.7725892225 +2015-07-28 00:00:00,1.257878566,1.257878566 +2015-07-29 00:00:00,0.6421125595,0.6421125595 +2015-07-30 00:00:00,0.3292936535,0.3292936535 +2015-07-31 00:00:00,5.147538035,5.147538035 +2015-08-01 00:00:00,0.6139670085,0.6139670085 +2015-08-02 00:00:00,2.920610824,2.920610824 +2015-08-03 00:00:00,2.7347293525,2.7347293525 +2015-08-04 00:00:00,3.496764333,3.496764333 +2015-08-05 00:00:00,1.532534774,1.532534774 +2015-08-06 00:00:00,0.56322628,0.56322628 +2015-08-07 00:00:00,0.299324353,0.299324353 +2015-08-08 00:00:00,0.5993190815,0.5993190815 +2015-08-09 00:00:00,1.0715178905,1.0715178905 +2015-08-10 00:00:00,4.7177726975,4.7177726975 +2015-08-11 00:00:00,0.8034011105,0.8034011105 +2015-08-12 00:00:00,0.346643606,0.346643606 +2015-08-13 00:00:00,0.2466099705,0.2466099705 +2015-08-14 00:00:00,0.227649048,0.227649048 +2015-08-15 00:00:00,0.4290858785,0.4290858785 +2015-08-16 00:00:00,0.2499776575,0.2499776575 +2015-08-17 00:00:00,0.1969552245,0.1969552245 +2015-08-18 00:00:00,0.177206506,0.177206506 +2015-08-19 00:00:00,0.6429848275,0.6429848275 +2015-08-20 00:00:00,0.907642928,0.907642928 +2015-08-21 00:00:00,0.661355445,0.661355445 +2015-08-22 00:00:00,0.317615566,0.317615566 +2015-08-23 00:00:00,2.0408844955,2.0408844955 +2015-08-24 00:00:00,1.596144208,1.596144208 +2015-08-25 00:00:00,1.6751294265,1.6751294265 +2015-08-26 00:00:00,1.054113746,1.054113746 +2015-08-27 00:00:00,2.8539589835,2.8539589835 +2015-08-28 00:00:00,1.3034471865,1.3034471865 +2015-08-29 00:00:00,0.6673576025,0.6673576025 +2015-08-30 00:00:00,0.359138619,0.359138619 +2015-08-31 00:00:00,0.317645371,0.317645371 +2015-09-01 00:00:00,0.256031285,0.256031285 +2015-09-02 00:00:00,0.211914367,0.211914367 +2015-09-03 00:00:00,0.187801056,0.187801056 +2015-09-04 00:00:00,0.1880733345,0.1880733345 +2015-09-05 00:00:00,0.2007771,0.2007771 +2015-09-06 00:00:00,0.1649780485,0.1649780485 +2015-09-07 00:00:00,0.160042073,0.160042073 +2015-09-08 00:00:00,0.151456672,0.151456672 +2015-09-09 00:00:00,0.142540903,0.142540903 +2015-09-10 00:00:00,0.16238226,0.16238226 +2015-09-11 00:00:00,15.276877335,15.276877335 +2015-09-12 00:00:00,1.738065107,1.738065107 +2015-09-13 00:00:00,1.1831148655,1.1831148655 +2015-09-14 00:00:00,2.7080174815,2.7080174815 +2015-09-15 00:00:00,0.5183018675,0.5183018675 +2015-09-16 00:00:00,0.3030873545,0.3030873545 +2015-09-17 00:00:00,0.363886756,0.363886756 +2015-09-18 00:00:00,0.4500491405,0.4500491405 +2015-09-19 00:00:00,0.290505002,0.290505002 +2015-09-20 00:00:00,1.772345378,1.772345378 +2015-09-21 00:00:00,0.9444314455,0.9444314455 +2015-09-22 00:00:00,0.9261801605,0.9261801605 +2015-09-23 00:00:00,0.8545967945,0.8545967945 +2015-09-24 00:00:00,0.861044129,0.861044129 +2015-09-25 00:00:00,0.4824669305,0.4824669305 +2015-09-26 00:00:00,0.3066034825,0.3066034825 +2015-09-27 00:00:00,0.2392243195,0.2392243195 +2015-09-28 00:00:00,0.2034984325,0.2034984325 +2015-09-29 00:00:00,0.1801671045,0.1801671045 +2015-09-30 00:00:00,0.166200655,0.166200655 +2015-10-01 00:00:00,0.1569513015,0.1569513015 +2015-10-02 00:00:00,0.149243001,0.149243001 +2015-10-03 00:00:00,0.144209323,0.144209323 +2015-10-04 00:00:00,0.139914937,0.139914937 +2015-10-05 00:00:00,0.1939203185,0.1939203185 +2015-10-06 00:00:00,1.6471502325,1.6471502325 +2015-10-07 00:00:00,0.462034465,0.462034465 +2015-10-08 00:00:00,0.2622630835,0.2622630835 +2015-10-09 00:00:00,0.2455563965,0.2455563965 +2015-10-10 00:00:00,0.450225499,0.450225499 +2015-10-11 00:00:00,0.275048428,0.275048428 +2015-10-12 00:00:00,0.241391791,0.241391791 +2015-10-13 00:00:00,0.1902621265,0.1902621265 +2015-10-14 00:00:00,0.169100396,0.169100396 +2015-10-15 00:00:00,0.157105982,0.157105982 +2015-10-16 00:00:00,0.1479739815,0.1479739815 +2015-10-17 00:00:00,0.14237485,0.14237485 +2015-10-18 00:00:00,0.1381992075,0.1381992075 +2015-10-19 00:00:00,0.135063357,0.135063357 +2015-10-20 00:00:00,0.9194367675,0.9194367675 +2015-10-21 00:00:00,2.0313492705,2.0313492705 +2015-10-22 00:00:00,0.7169665325,0.7169665325 +2015-10-23 00:00:00,3.9949918455,3.9949918455 +2015-10-24 00:00:00,1.365796968,1.365796968 +2015-10-25 00:00:00,0.678680047,0.678680047 +2015-10-26 00:00:00,0.7089309735,0.7089309735 +2015-10-27 00:00:00,0.894600377,0.894600377 +2015-10-28 00:00:00,0.5544078585,0.5544078585 +2015-10-29 00:00:00,0.917815575,0.917815575 +2015-10-30 00:00:00,0.6546333485,0.6546333485 +2015-10-31 00:00:00,0.4826108415,0.4826108415 +2015-11-01 00:00:00,0.2983115885,0.2983115885 +2015-11-02 00:00:00,0.241820515,0.241820515 +2015-11-03 00:00:00,0.215157141,0.215157141 +2015-11-04 00:00:00,0.1970063665,0.1970063665 +2015-11-05 00:00:00,0.5993543665,0.5993543665 +2015-11-06 00:00:00,0.827285281,0.827285281 +2015-11-07 00:00:00,0.917039811,0.917039811 +2015-11-08 00:00:00,1.120849399,1.120849399 +2015-11-09 00:00:00,3.0964791885,3.0964791885 +2015-11-10 00:00:00,2.5063245215,2.5063245215 +2015-11-11 00:00:00,0.9826190755,0.9826190755 +2015-11-12 00:00:00,1.180512664,1.180512664 +2015-11-13 00:00:00,1.404503493,1.404503493 +2015-11-14 00:00:00,0.9647195855,0.9647195855 +2015-11-15 00:00:00,0.3326399825,0.3326399825 +2015-11-16 00:00:00,1.6016148425,1.6016148425 +2015-11-17 00:00:00,2.4647172785,2.4647172785 +2015-11-18 00:00:00,2.3994372295,2.3994372295 +2015-11-19 00:00:00,2.2849197295,2.2849197295 +2015-11-20 00:00:00,0.8806829435,0.8806829435 +2015-11-21 00:00:00,0.8300905665,0.8300905665 +2015-11-22 00:00:00,0.617124148,0.617124148 +2015-11-23 00:00:00,1.307160774,1.307160774 +2015-11-24 00:00:00,2.6596589665,2.6596589665 +2015-11-25 00:00:00,2.6014715125,2.6014715125 +2015-11-26 00:00:00,3.573700552,3.573700552 +2015-11-27 00:00:00,1.7839196435,1.7839196435 +2015-11-28 00:00:00,1.9238708225,1.9238708225 +2015-11-29 00:00:00,1.6109080115,1.6109080115 +2015-11-30 00:00:00,1.2407562965,1.2407562965 +2015-12-01 00:00:00,0.6839819295,0.6839819295 +2015-12-02 00:00:00,0.624152295,0.624152295 +2015-12-03 00:00:00,0.3411790575,0.3411790575 +2015-12-04 00:00:00,13.18293729,13.18293729 +2015-12-05 00:00:00,43.967090375,43.967090375 +2015-12-06 00:00:00,4.7168996345,4.7168996345 +2015-12-07 00:00:00,0.9205882625,0.9205882625 +2015-12-08 00:00:00,2.344204715,2.344204715 +2015-12-09 00:00:00,4.377344061,4.377344061 +2015-12-10 00:00:00,1.721123885,1.721123885 +2015-12-11 00:00:00,0.845360081,0.845360081 +2015-12-12 00:00:00,1.3437657955,1.3437657955 +2015-12-13 00:00:00,0.907824986,0.907824986 +2015-12-14 00:00:00,0.734059309,0.734059309 +2015-12-15 00:00:00,0.6795889035,0.6795889035 +2015-12-16 00:00:00,1.192779642,1.192779642 +2015-12-17 00:00:00,2.261383062,2.261383062 +2015-12-18 00:00:00,3.043917638,3.043917638 +2015-12-19 00:00:00,2.1502814425,2.1502814425 +2015-12-20 00:00:00,1.0940315885,1.0940315885 +2015-12-21 00:00:00,1.925658716,1.925658716 +2015-12-22 00:00:00,1.766160774,1.766160774 +2015-12-23 00:00:00,1.290888301,1.290888301 +2015-12-24 00:00:00,1.6519036525,1.6519036525 +2015-12-25 00:00:00,0.7000255,0.7000255 +2015-12-26 00:00:00,0.541151823,0.541151823 +2015-12-27 00:00:00,0.4436757055,0.4436757055 +2015-12-28 00:00:00,1.1748020055,1.1748020055 +2015-12-29 00:00:00,1.762323276,1.762323276 +2015-12-30 00:00:00,3.7671461575,3.7671461575 +2015-12-31 00:00:00,2.382036982,2.382036982 From 04b471669775a429ed02350f2156379616430eb5 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Thu, 22 Oct 2020 11:48:34 +0200 Subject: [PATCH 02/89] started with GOTM multiple inflows --- R/export_flow.R | 112 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 75 insertions(+), 37 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 0b677166..637d1dab 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -108,6 +108,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa if (use_outflows){ outf_surf <- rep(FALSE, num_outflows) outf_surf[lvl_outflows == -1] <- TRUE + #!! outflow elevations need to be in meters above sea level!! lvl_outflows[lvl_outflows == -1] <- 0 inp_list$num_outlet <- num_outflows inp_list <- c(inp_list, list("flt_off_sw" = outf_surf, @@ -125,9 +126,22 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa if("GOTM" %in% model){ got_yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) + yml_no_comment <- unname(sapply(readLines(got_yaml), function(x) strsplit(x, "#")[[1]][1])) + # number of inflows in the yaml file so far + num_inf_yaml <- length(grep("inflow\\_*\\d*:", yml_no_comment, value = TRUE)) + # number of outflows in the yaml file so far + num_outf_yaml <- length(grep("outflow\\_*\\d*:", yml_no_comment, value = TRUE)) + + ## Switch off streams if(!use_inflows){ + # remove all inflows but one + if (num_inf_yaml > 1) { + for (i in 2:(num_inf_yaml + 1)) { + rm_yaml_sec(got_yaml, paste0("inflow_", i)) + } + } # streams_switch(file = got_yaml, method = "off") input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "flow", key4 = "method", value = 0) @@ -135,65 +149,89 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa "method", value = 0) input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "salt", key4 = "method", value = 0) + } + if (!use_outflows) { + # remove all outflows but one + if (num_outf_yaml > 1) { + for (i in 2:(num_outf_yaml + 1)) { + rm_yaml_sec(got_yaml, paste0("outflow_", i)) + } + } input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = "method", value = 0) input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = "method", value = 0) input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = "method", value = 0) - }else{ + } + # set inflows + if (use_inflows) { - # add additional inflows + # add additional inflows if necessary if(num_inflows > 1) { - for (i in num_inflows:2) { doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) } - } - # add additional outflows - if(num_inflows > 1) { - - for (i in num_outflows:2) { - doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) - } - - } - - for (i in 1:num_inflows) { - - if(i == 1) { - inf_sec <- "inflow" - } else { - inf_sec <- paste0("inflow_", i) + # set inflow settings for all inflows + for (i in 1:num_inflows) { + + if(i == 1) { + inf_sec <- "inflow" + } else { + inf_sec <- paste0("inflow_", i) + } + + # streams_switch(file = got_yaml, method = "on") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + "method", value = 2) + } - # streams_switch(file = got_yaml, method = "on") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = - "method", value = 2) } + } + # set water balance outflows + if (use_c_outflows) { - for (i in 1:num_outflows) { + } + + # set outflows + if (use_outflows) { + + # add additional outflows if necessary + if(num_outflows > 1) { + for (i in num_outflows:2) { + doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) + } - if(i == 1) { - outf_sec <- "outflow" - } else { - outf_sec <- paste0("outflow_", i) + # set outflow settings for all outflows + for (i in 1:num_outflows) { + + if(i == 1) { + inf_sec <- "outflow" + } else { + inf_sec <- paste0("outflow_", i) + } + + # streams_switch(file = got_yaml, method = "on") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + "method", value = 2) + } - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = - "method", value = 0) + } } + } From cf5915538b5b1db6934b0befad6473b40e5cfd3a Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Fri, 23 Oct 2020 11:36:18 +0200 Subject: [PATCH 03/89] first working GOTM in/outflows --- R/export_flow.R | 83 ++++++++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 50 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 637d1dab..53b4e380 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -36,6 +36,13 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa model <- check_models(model) ##-------------Read settings--------------- + # initial water level + init_lvl <- get_yaml_value(config_file, "location", "init_depth") + # surface elevation + surf_lvl <- get_yaml_value(config_file, "location", "elevation") + # bottom elevation + bot_lvl <- surf_lvl - get_yaml_value(config_file, "location", "depth") + # Use inflows use_inflows <- get_yaml_value(config_file, "inflows", "use") # Use outflows @@ -109,10 +116,12 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa outf_surf <- rep(FALSE, num_outflows) outf_surf[lvl_outflows == -1] <- TRUE #!! outflow elevations need to be in meters above sea level!! - lvl_outflows[lvl_outflows == -1] <- 0 + lvl_outflows_glm <- lvl_outflows + bot_lvl + # outflow lvl for floating outflows is set to 0 + lvl_outflows_glm[lvl_outflows == -1] <- 0 inp_list$num_outlet <- num_outflows inp_list <- c(inp_list, list("flt_off_sw" = outf_surf, - "outl_elvs" = lvl_outflows, + "outl_elvs" = lvl_outflows_glm, "outflow_fl" = paste0("outflow_", 1:num_outflows, ".csv"), "outflow_factor" = rep(1, num_outflows))) } @@ -197,12 +206,22 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } # set water balance outflows if (use_c_outflows) { - + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "method", + value = 1) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = + "method", value = 0) } # set outflows if (use_outflows) { - + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + # outflow lvl in GOTM are meters below initial surface lvl + lvl_outflows_gotm <- lvl_outflows - init_lvl # add additional outflows if necessary if(num_outflows > 1) { for (i in num_outflows:2) { @@ -220,11 +239,17 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # streams_switch(file = got_yaml, method = "on") input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = - "method", value = 2) + "method", value = ifelse(outf_surf[i], 2, 3)) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "zl", + value = lvl_outflows_gotm[i] - 0.5) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "zu", + value = lvl_outflows_gotm[i] + 0.5) input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = - "method", value = 2) + "method", value = 0) input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = - "method", value = 2) + "method", value = 0) } @@ -749,18 +774,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa file_connection) close(file_connection) - # #Scale met - # if(!is.null(scale_param_inf)){ - # scale_met(sim_met, pars = scale_param_inf, model = "Simstrat", out_file = met_outfpath) - # } else { - # # Write to file - # write.table(sim_met, met_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - # col.names = TRUE) - # } - - ### Write the table in the present working directory - # input_json(file = par_file, label = "Input", key = "Forcing", "\"meteo_file.dat\"") - message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) if(use_c_outflows){ @@ -787,39 +800,9 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa ## MyLake if("MyLake" %in% model){ - temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") - load(temp_fil) - - mylake_inflow <- format_inflow(inflow = inflow, model = "MyLake", config_file = config_file) - - # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive - # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] - dummy_inflow <- matrix(rep(1e-10, 8 * - length(seq.POSIXt(from = as.POSIXct(start_date), - to = as.POSIXct(stop_date), - by = "day"))), - ncol = 8) - dummy_inflow[, 1] <- mylake_inflow$Flow_metersCubedPerDay - dummy_inflow[, 2] <- mylake_inflow$Water_Temperature_celsius - dummy_inflow[, 5] <- dummy_inflow[, 5] * 1e7 - dummy_inflow[, 6] <- dummy_inflow[, 6] * 1e1 - - - mylake_config[["Inflw"]] <- dummy_inflow - - temp_fil <- gsub(".*/", "", temp_fil) - # save lake-specific config file for MyLake - save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) - - message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) - - if(use_outflows){ message("MyLake does not need specific outflows, as it employs automatic overflow.") - } - } } - - + message("export_inflow complete!") } From 127a8a3d91e1a24ffdd73acac2d54a04b8ed529a Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Fri, 23 Oct 2020 14:20:26 +0200 Subject: [PATCH 04/89] added simstrat --- R/export_flow.R | 497 +++++++++++++++++------------------------------- 1 file changed, 177 insertions(+), 320 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 53b4e380..3bf8bb26 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -42,17 +42,23 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa surf_lvl <- get_yaml_value(config_file, "location", "elevation") # bottom elevation bot_lvl <- surf_lvl - get_yaml_value(config_file, "location", "depth") + + # Get start & stop dates + start_date <- get_yaml_value(config_file, "time", "start") + stop_date <- get_yaml_value(config_file, "time", "stop") # Use inflows use_inflows <- get_yaml_value(config_file, "inflows", "use") # Use outflows use_outflows <- get_yaml_value(config_file, "outflows", "use") - if(!use_outflows) { - # Use counter outflows - use_c_outflows <- get_yaml_value(config_file, "inflows", "mass-balance") - num_outflows <- 0 - } else { - use_c_outflows <- FALSE + + tryCatch({get_yaml_value(config_file, "inflows", "mass-balance") + warning(paste0("The 'mass-balance' argument is no longer used ", + "if you would like to have outflows matching the ", + "inflows please add them manually to the 'outflows'", + "section"))}, + error = function(e){}) + if(use_outflows) { # number of outflows num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") # outflow depths @@ -60,10 +66,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # Get scaling parameter scale_param_out <- get_yaml_value(config_file, "outflows", "scale_param") } - - # Get start & stop dates - start_date <- get_yaml_value(config_file, "time", "start") - stop_date <- get_yaml_value(config_file, "time", "stop") if(use_inflows) { # Get scaling parameter @@ -104,13 +106,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa "inflow_factor"= rep(1, num_inflows), "inflow_fl" = paste0("inflow_", 1:num_inflows,".csv"))) } - # if used set inflow balancing outflow - if (use_c_outflows) { - max_elv <- get_nml_value(nml, "H") - inp_list$num_outlet <- 1 - inp_list <- c(inp_list, list("outflow_fl" = "outflow.csv", - "outl_elvs" = max(max_elv))) - } + # set outflows if (use_outflows){ outf_surf <- rep(FALSE, num_outflows) @@ -142,12 +138,11 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # number of outflows in the yaml file so far num_outf_yaml <- length(grep("outflow\\_*\\d*:", yml_no_comment, value = TRUE)) - ## Switch off streams if(!use_inflows){ # remove all inflows but one if (num_inf_yaml > 1) { - for (i in 2:(num_inf_yaml + 1)) { + for (i in 2:(num_inf_yaml)) { rm_yaml_sec(got_yaml, paste0("inflow_", i)) } } @@ -162,7 +157,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa if (!use_outflows) { # remove all outflows but one if (num_outf_yaml > 1) { - for (i in 2:(num_outf_yaml + 1)) { + for (i in 2:(num_outf_yaml)) { rm_yaml_sec(got_yaml, paste0("outflow_", i)) } } @@ -175,7 +170,12 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } # set inflows if (use_inflows) { - + # remove additional inflows that are not needed + if (num_inf_yaml > num_inflows) { + for (i in 2:(num_inf_yaml)) { + rm_yaml_sec(got_yaml, paste0("inflow_", i)) + } + } # add additional inflows if necessary if(num_inflows > 1) { for (i in num_inflows:2) { @@ -194,30 +194,30 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # streams_switch(file = got_yaml, method = "on") input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "method", + value = 4) input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = "method", value = 2) input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = "method", value = 2) - + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) } - - } } - # set water balance outflows - if (use_c_outflows) { - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "method", - value = 1) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = - "method", value = 0) - } # set outflows if (use_outflows) { + # remove additional outflows that are not needed + if (num_outf_yaml > num_outflows) { + for (i in 2:(num_outf_yaml)) { + rm_yaml_sec(got_yaml, paste0("outflow_", i)) + } + } outf_surf <- rep(FALSE, num_outflows) outf_surf[lvl_outflows == -1] <- TRUE # outflow lvl in GOTM are meters below initial surface lvl @@ -227,44 +227,41 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa for (i in num_outflows:2) { doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) } - # set outflow settings for all outflows for (i in 1:num_outflows) { - if(i == 1) { - inf_sec <- "outflow" + outf_sec <- "outflow" } else { - inf_sec <- paste0("outflow_", i) + outf_sec <- paste0("outflow_", i) } - # streams_switch(file = got_yaml, method = "on") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = "method", value = ifelse(outf_surf[i], 2, 3)) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "method", + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "method", value = 3) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "zl", + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zl", value = lvl_outflows_gotm[i] - 0.5) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "zu", + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zu", value = lvl_outflows_gotm[i] + 0.5) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = "method", value = 0) - + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) } - - } } - - } ##---------------Simstrat------------- if("Simstrat" %in% model){ sim_par <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - # Turn off inflow if(!use_inflows){ ## Set Qin and Qout to 0 inflow @@ -285,22 +282,25 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), file_connection) close(file_connection) - }else{ - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - # In case Kw is a single value for the whole simulation: - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" + } + if(!use_outflows){ + outflow_outfile <- "Qout.dat" + par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) + + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) + + outflow_line_1 <- "Time [d]\tQ_out [m3/s]" + outflow_line_2 <- "1" + outflow_line_3 <- "-1 0.00" start_sim <- get_json_value(sim_par, "Simulation", "Start d") end_sim <- get_json_value(sim_par, "Simulation", "End d") - inflow_line_4 <- paste(start_sim, 0.000) - inflow_line_5 <- paste(end_sim, 0.000) - - file_connection <- file("Simstrat/Qout.dat") - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), - file_connection) + outflow_line_4 <- paste(start_sim, 0.000) + outflow_line_5 <- paste(end_sim, 0.000) + file_connection <- file(outflow_outfpath) + writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4, + outflow_line_5), file_connection) close(file_connection) } - } ##---------------MyLake------------- @@ -324,58 +324,30 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa ##-------------If inflow == TRUE--------------- if(use_inflows == TRUE){ - inflow_file <- get_yaml_value(file = config_file, label = "inflows", key = "file") # Check if file exists if(!file.exists(inflow_file)){ stop(inflow_file, " does not exist. Check filepath in ", config_file) } - ### Import data message("Loading inflow data...") inflow <- read.csv(file.path(folder, inflow_file), stringsAsFactors = FALSE) inflow[, 1] <- as.POSIXct(inflow[, 1]) # Check time step tstep <- diff(as.numeric(inflow[, 1])) - start_date <- get_yaml_value(config_file, "time", "start") # Stop date stop_date <- get_yaml_value(config_file, "time", "stop") - inflow_start <- which(inflow$datetime == as.POSIXct(start_date)) inflow_stop <- which(inflow$datetime == as.POSIXct(stop_date)) - inflow <- inflow[inflow_start:inflow_stop, ] ### Naming conventions standard input - # remove numbers if multiple inflows are present - cln_inf <- colnames(inflow) - if(num_inflows > 1) { - cln_inf <- gsub("(\\w+)\\_\\d+\\>", "\\1", cln_inf) - } - # test if names are right - chck_inflow <- sapply(list(cln_inf), function(x) x %in% lake_var_dic$standard_name) - if(any(!chck_inflow)){ - chck_inflow[which(chck_inflow == FALSE)] <- sapply(list(cln_inf[which( - chck_inflow == FALSE)]), function(x) x %in% met_var_dic$standard_name) - - if(any(!chck_inflow)){ - stop("Colnames of inflow file are not in standard notation! ", - "They should be one of: \ndatetime\nFlow_metersCubedPerSecond\n", - "Water_Temperature_celsius\nSalinity_practicalSalinityUnits") - } - } + chk_names_flow(inflow, num_inflows, inflow_file) ### Apply scaling - if(num_inflows == 1) { - inflow[["Flow_metersCubedPerSecond"]] <- inflow[["Flow_metersCubedPerSecond"]] * - scale_param_inf - } else if(num_inflows > 1) { - for (i in 1:num_inflows) { - inflow[[paste0("Flow_metersCubedPerSecond_", i)]] <- - inflow[[paste0("Flow_metersCubedPerSecond_", i)]] * scale_param_inf[i] - } - } + inflow <- scale_flow(inflow, num_inflows, scale_param_inf) + # if multiple inflows are present put them in a list if(num_inflows > 1) { inflow_ls <- list() @@ -390,6 +362,8 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } inflow <- inflow_ls rm(inflow_ls) + } else { + inflow <- list(inflow_1 = inflow) } ##### FLake @@ -398,7 +372,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa if(num_inflows > 1) { # flake_inflow <- average inflows from list } else { - flake_inflow <- inflow + flake_inflow <- inflow[[1]] } flake_inflow <- format_inflow(inflow = flake_inflow, model = "FLake", config_file = config_file) @@ -423,137 +397,96 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa ###### GLM if("GLM" %in% model){ - if(num_inflows == 1) { - glm_inflow <- format_inflow(inflow = inflow, model = "GLM", config_file = config_file) - - inflow_outfile <- file.path("GLM", "inflow_1.csv") - write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created file ", file.path(folder, "GLM", "inflow_file.csv")) - } else if (num_inflows > 1) { - for (i in 1:num_inflows) { - glm_inflow <- format_inflow(inflow = inflow[[i]], model = "GLM", - config_file = config_file) - - inflow_outfile <- file.path("GLM", paste0("inflow_", i, ".csv")) - write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created file ", file.path(folder, "GLM", paste0("inflow_", i, ".csv"))) - } - } - - if(use_c_outflows) { + for (i in 1:num_inflows) { + glm_inflow <- format_inflow(inflow = inflow[[i]], model = "GLM", + config_file = config_file) - glm_outflow <- glm_inflow[, c("Time", "FLOW")] - outflow_outfile <- file.path("GLM", "outflow.csv") - write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created outflow file ", file.path(folder, "GLM", "outflow.csv")) + inflow_outfile <- file.path("GLM", paste0("inflow_", i, ".csv")) + write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", paste0("inflow_", i, ".csv"))) } } ##### GOTM if("GOTM" %in% model){ - yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) - - gotm_outfile <- "inflow_file.dat" - - gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - - gotm_inflow <- format_inflow(inflow, model = "GOTM", config_file = config_file) - - #Scale met - if(!is.null(scale_param_inf)){ - scale_met(gotm_inflow, pars = scale_param_inf, model = "GOTM", out_file = gotm_outfpath) - }else{ - # Write to file + for (i in 1:num_inflows) { + gotm_outfile <- paste0("inflow_file_", i, ".dat") + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) + gotm_inflow <- format_inflow(inflow[[i]], model = "GOTM", config_file = config_file) + write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", col.names = TRUE) - } - - message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) - - if(use_c_outflows){ - temp_fil <- get_yaml_value(config_file, "config_files", "GOTM") - got_yaml <- file.path(folder, temp_fil) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = - "method", value = 0) - - gotm_outflow <- gotm_inflow[, c(1:2)] - gotm_outflow[,2] <- gotm_outflow[,2] * -1 - gotm_outflowfile <- "outflow_file.dat" - gotm_outflowfpath <- file.path(folder, "GOTM", gotm_outflowfile) - - write.table(gotm_outflow, gotm_outflowfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = TRUE) - - message("GOTM: Created outflow file ", file.path(folder, "GOTM", gotm_outflowfile)) + + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) } } ## Simstrat if("Simstrat" %in% model){ - + # output file names inflow_outfile <- "Qin.dat" temp_outfile <- "Tin.dat" salt_outfile <- "Sin.dat" par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - + # output file paths inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) - ## Set Qin and Qout to 0 inflow + ## inflow file inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) + inflow_line_2 <- as.character(num_inflows) + inflow_line_3 <- paste0("-1", rep(" 0.00", num_inflows)) + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Flow_metersCubedPerSecond) + } file_connection <- file(inflow_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) close(file_connection) - + # temperature file inflow_line_1 <- "Time [d]\tT_in [degC]" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Water_Temperature_celsius) + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Water_Temperature_celsius_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Water_Temperature_celsius) + } file_connection <- file(temp_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) close(file_connection) - + # salinity file inflow_line_1 <- "Time [d]\tS_in [perMille]" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Salinity_practicalSalinityUnits) + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Salinity_practicalSalinityUnits_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Salinity_practicalSalinityUnits) + } file_connection <- file(salt_outfpath) writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) close(file_connection) - message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) - - if(use_c_outflows){ - outflow_outfile <- "Qout.dat" - par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - - outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) - - sim_inflow$Flow_metersCubedPerSecond <- sim_inflow$Flow_metersCubedPerSecond * (- 1) - - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) - file_connection <- file(outflow_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) - } } ## MyLake @@ -565,7 +498,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa if(num_inflows > 1) { # mylake_inflow <- average inflows from list } else { - mylake_inflow <- inflow + mylake_inflow <- inflow[[1]] } mylake_inflow <- format_inflow(inflow = mylake_inflow, model = "MyLake", config_file = config_file) @@ -624,44 +557,23 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa outflow <- outflow[outflow_start:outflow_stop, ] ### Naming conventions standard input - # remove numbers if multiple inflows are present - cln_outf <- colnames(outflow) - if(num_outflows > 1) { - cln_outf <- gsub("(\\w+)\\_\\d+\\>", "\\1", cln_outf) - } - # test if names are right - chck_outflow <- sapply(list(cln_outf), function(x) x %in% lake_var_dic$standard_name) - if(any(!chck_outflow)){ - chck_outflow[which(chck_outflow == FALSE)] <- sapply(list(cln_outf[which( - chck_outflow == FALSE)]), function(x) x %in% met_var_dic$standard_name) - - if(any(!chck_outflow)){ - stop("Colnames of outflow file are not in standard notation! ", - "They should be one of: \ndatetime\nFlow_metersCubedPerSecond\n", - "Water_Temperature_celsius\nSalinity_practicalSalinityUnits") - } - } - ## appy scaling - if(num_outflows == 1) { - outflow[["Flow_metersCubedPerSecond"]] <- outflow[["Flow_metersCubedPerSecond"]] * - scale_param_out - } else if(num_outflows > 1) { - for (i in 1:num_outflows) { - outflow[[paste0("Flow_metersCubedPerSecond_", i)]] <- - outflow[[paste0("Flow_metersCubedPerSecond_", i)]] * scale_param_out[i] - } - } + chk_names_flow(outflow, num_outflows, outflow_file) + + ### Apply scaling + outflow <- scale_flow(outflow, num_outflows, scale_param_out) # if multiple outflows are present put them in a list if(num_outflows > 1) { outflow_ls <- list() for (i in 1:num_outflows) { outflow_ls[[paste0("outflow_", i)]] <- - data.frame(datetime = inflow$datetime, + data.frame(datetime = outflow$datetime, Flow_metersCubedPerSecond = outflow[[paste0("Flow_metersCubedPerSecond_", i)]]) } outflow <- outflow_ls rm(outflow_ls) + } else { + outflow <- list(outflow_1 = outflow) } # FLake @@ -673,128 +585,73 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # GLM ##### if("GLM" %in% model){ - if(num_outflows == 1) { - glm_outflow <- format_outflow(outflow = outflow, model = "GLM", config_file = config_file) + for (i in 1:num_outflows) { + glm_outflow <- format_outflow(outflow = outflow[[i]], model = "GLM", + config_file = config_file) - outflow_outfile <- file.path("GLM", "outflow.csv") + outflow_outfile <- file.path("GLM", paste0("outflow_", i, ".csv")) write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created file ", file.path(folder, "GLM", "outflow_file.csv")) - } else if (num_outflows > 1) { - for (i in 1:num_outflows) { - glm_outflow <- format_outflow(outflow = outflow[[i]], model = "GLM", - config_file = config_file) - - outflow_outfile <- file.path("GLM", paste0("outflow_", i, ".csv")) - write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created file ", file.path(folder, "GLM", paste0("outflow_", i, ".csv"))) - } + message("GLM: Created file ", file.path(folder, "GLM", paste0("outflow_", i, ".csv"))) } } ## GOTM if("GOTM" %in% model){ - - yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) - - gotm_outfile <- "inflow_file.dat" - - gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - - gotm_inflow <- format_inflow(inflow, model = "GOTM", config_file = config_file) - - #Scale met - if(!is.null(scale_param_inf)){ - scale_met(gotm_inflow, pars = scale_param_inf, model = "GOTM", out_file = gotm_outfpath) - }else{ - # Write to file - write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = TRUE) - } - - message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) - - if(use_c_outflows){ - temp_fil <- get_yaml_value(config_file, "config_files", "GOTM") - got_yaml <- file.path(folder, temp_fil) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = - "method", value = 0) + + for (i in 1:num_outflows) { + + gotm_outfile <- paste0("outflow_file_", i, ".dat") - gotm_outflow <- gotm_inflow[, c(1:2)] - gotm_outflow[,2] <- gotm_outflow[,2] * -1 - gotm_outflowfile <- "outflow_file.dat" - gotm_outflowfpath <- file.path(folder, "GOTM", gotm_outflowfile) + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - write.table(gotm_outflow, gotm_outflowfpath, quote = FALSE, row.names = FALSE, sep = "\t", + gotm_outflow <- format_outflow(outflow[[i]], model = "GOTM", config_file = config_file) + write.table(gotm_outflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", col.names = TRUE) - message("GOTM: Created outflow file ", file.path(folder, "GOTM", gotm_outflowfile)) + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) } - } ## Simstrat if("Simstrat" %in% model){ - inflow_outfile <- "Qin.dat" - temp_outfile <- "Tin.dat" - salt_outfile <- "Sin.dat" - par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - - inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) - temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) - salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) - - sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) - - ## Set Qin and Qout to 0 inflow - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) - file_connection <- file(inflow_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - inflow_line_1 <- "Time [d]\tT_in [degC]" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Water_Temperature_celsius) - file_connection <- file(temp_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - inflow_line_1 <- "Time [d]\tS_in [perMille]" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Salinity_practicalSalinityUnits) - file_connection <- file(salt_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + #!! outflow elevations need to be relative to initial water level!! + lvl_outflows_simstrat <- lvl_outflows - init_lvl + lvl_outflows_simstrat[outf_surf] <- 0 - message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) + outflow_outfile <- "Qout.dat" + par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - if(use_c_outflows){ - outflow_outfile <- "Qout.dat" - par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - - outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) - - sim_inflow$Flow_metersCubedPerSecond <- sim_inflow$Flow_metersCubedPerSecond * (- 1) - - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), sim_inflow$Flow_metersCubedPerSecond) - file_connection <- file(outflow_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) + sim_outflow <- format_outflow(outflow, "Simstrat", config_file, folder) + ## inflow file + outflow_line_1 <- "Time [d]\tQ_out [m3/s]" + outflow_line_2 <- paste0(as.character(sum(!outf_surf)), " ", as.character(sum(outf_surf))) + outflow_line_3 <- paste("-1", lvl_outflows_simstrat[!outf_surf], + lvl_outflows_simstrat[outf_surf]) + if(num_outflows > 1) { + outflow_line_4 <- seq_len(length(sim_outflow$datetime)) + # first the deep outflows + for (i in ((1:num_outflows)[!outf_surf])) { + outflow_line_4 <- paste(outflow_line_4, + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + # then the surface oputflows + for (i in ((1:num_outflows)[outf_surf])) { + outflow_line_4 <- paste(outflow_line_4, + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + } else { + outflow_line_4 <- paste(seq_len(length(sim_outflow$datetime)), + sim_outflow$Flow_metersCubedPerSecond) } + file_connection <- file(outflow_outfpath) + writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4), file_connection) + close(file_connection) + + message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) } ## MyLake From 178e566e4d38d88ec380b30d89782bb8a01ee616 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Fri, 23 Oct 2020 15:20:15 +0200 Subject: [PATCH 05/89] averaging multiple inflows for FLake and MyLake --- R/export_flow.R | 14 +++----- R/format_flow.R | 87 ++++++++++++++++++++++++++++++++++++++++--------- R/helper_flow.R | 54 ++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 25 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 3bf8bb26..7498e2dd 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -369,12 +369,8 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa ##### FLake if("FLake" %in% model){ - if(num_inflows > 1) { - # flake_inflow <- average inflows from list - } else { - flake_inflow <- inflow[[1]] - } - flake_inflow <- format_inflow(inflow = flake_inflow, model = "FLake", config_file = config_file) + + flake_inflow <- format_inflow(inflow = inflow, model = "FLake", config_file = config_file) flake_outfile <- "Tinflow" @@ -501,7 +497,8 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa mylake_inflow <- inflow[[1]] } - mylake_inflow <- format_inflow(inflow = mylake_inflow, model = "MyLake", config_file = config_file) + mylake_inflow <- format_inflow(inflow = mylake_inflow, model = "MyLake", + config_file = config_file) # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] @@ -524,9 +521,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) - if(use_outflows){ - message("MyLake does not need specific outflows, as it employs automatic overflow.") - } } } diff --git a/R/format_flow.R b/R/format_flow.R index a18bd555..3d697b2a 100644 --- a/R/format_flow.R +++ b/R/format_flow.R @@ -17,14 +17,33 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ if(!file.exists(hyp_file)){ stop(hyp_file, " does not exist. Check filepath in ", config_file) } + num_inflows <- get_yaml_value(config_file, "inflows", "number_inflows") hyp <- read.csv(hyp_file) if("FLake" %in% model){ - flake_inflow <- inflow + flake_in_l <- reshape2::melt(inflow, id.vars = "datetime") + sum_flow <- aggregate(list(flow = flake_in_l$value), + by = list(var = flake_in_l$variable, + datetime = flake_in_l$datetime), sum, na.rm = TRUE) + sum_flow <- sum_flow[sum_flow$var == "Flow_metersCubedPerSecond", 2:3] + flake_in_l$variable <- paste0(flake_in_l$variable, + gsub("inflow", "", flake_in_l$L1)) + # calculate weights to weight the salinity and temperature in proportion to the flow + weights <- reshape2::dcast(flake_in_l, datetime ~ variable) + weights <- weights[, grepl("Flow_metersCubedPerSecond", colnames(weights))] + weights <- weights/sum_flow$flow + + + # temperature + temp <- reshape2::dcast(flake_in_l, datetime ~ variable) + temp <- temp[, grepl("Water_Temperature_celsius", colnames(temp))] + temp <- apply(temp * weights, 1, sum, na.rm = TRUE) + + flake_inflow <- data.frame(datetime = unique(flake_in_l$datetime), + Flow_metersCubedPerSecond = sum_flow$flow, + Water_Temperature_celsius = temp) - flake_inflow <- flake_inflow[, c("Flow_metersCubedPerSecond", - "Water_Temperature_celsius")] colnames(flake_inflow) <- c("FLOW", "TEMP") @@ -73,12 +92,18 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ if("Simstrat" %in% model){ - simstrat_inflow <- inflow + simstrat_inflow <- reshape2::melt(inflow, id.vars = "datetime") + + simstrat_inflow$variable <- paste0(simstrat_inflow$variable, + gsub("inflow", "", simstrat_inflow$L1)) + simstrat_inflow <- reshape2::dcast(simstrat_inflow, datetime ~ variable) - simstrat_inflow <- simstrat_inflow[, c("datetime", "Flow_metersCubedPerSecond", - "Water_Temperature_celsius", - "Salinity_practicalSalinityUnits")] + if(num_inflows == 1){ + simstrat_inflow <- simstrat_inflow[, c("datetime", "Flow_metersCubedPerSecond", + "Water_Temperature_celsius", + "Salinity_practicalSalinityUnits")] + } simstrat_inflow[, 1] <- format(simstrat_inflow[, 1], "%Y-%m-%d %H:%M:%S") #Reduce number of digits @@ -88,12 +113,33 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ } if("MyLake" %in% model) { - - mylake_inflow <- inflow - - mylake_inflow <- mylake_inflow[, c("datetime", "Flow_metersCubedPerSecond", - "Water_Temperature_celsius", - "Salinity_practicalSalinityUnits")] + + mylake_in_l <- reshape2::melt(inflow, id.vars = "datetime") + sum_flow <- aggregate(list(flow = mylake_in_l$value), + by = list(var = mylake_in_l$variable, + datetime = mylake_in_l$datetime), sum, na.rm = TRUE) + sum_flow <- sum_flow[sum_flow$var == "Flow_metersCubedPerSecond", 2:3] + mylake_in_l$variable <- paste0(mylake_in_l$variable, + gsub("inflow", "", mylake_in_l$L1)) + # calculate weights to weight the salinity and temperature in proportion to the flow + weights <- reshape2::dcast(mylake_in_l, datetime ~ variable) + weights <- weights[, grepl("Flow_metersCubedPerSecond", colnames(weights))] + weights <- weights/sum_flow$flow + + # salt + salt <- reshape2::dcast(mylake_in_l, datetime ~ variable) + salt <- salt[, grepl("Salinity_practicalSalinityUnits", colnames(salt))] + salt <- apply(salt * weights, 1, sum, na.rm = TRUE) + + # temperature + temp <- reshape2::dcast(mylake_in_l, datetime ~ variable) + temp <- temp[, grepl("Water_Temperature_celsius", colnames(temp))] + temp <- apply(temp * weights, 1, sum, na.rm = TRUE) + + mylake_inflow <- data.frame(datetime = unique(mylake_in_l$datetime), + Flow_metersCubedPerSecond = sum_flow$flow, + Water_Temperature_celsius = temp, + Salinity_practicalSalinityUnits = salt) mylake_inflow$Flow_metersCubedPerDay <- mylake_inflow$Flow_metersCubedPerSecond * (86400.) @@ -121,6 +167,7 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ #' @export format_outflow <- function(outflow, model, config_file, folder = "."){ + num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") if("FLake" %in% model){ stop("FLake does not need outflows, as mass fluxes are not considered.") @@ -150,6 +197,9 @@ format_outflow <- function(outflow, model, config_file, folder = "."){ colnames(gotm_outflow)[1] <- paste0("!", colnames(gotm_outflow)[1]) gotm_outflow[, 1] <- format(gotm_outflow[, 1], "%Y-%m-%d %H:%M:%S") + # set flow values negative + gotm_outflow$Flow_metersCubedPerSecond <- -1 * gotm_outflow$Flow_metersCubedPerSecond + #Reduce number of digits gotm_outflow[, -1] <- signif(gotm_outflow[, -1], digits = 8) @@ -158,10 +208,17 @@ format_outflow <- function(outflow, model, config_file, folder = "."){ if("Simstrat" %in% model){ - simstrat_outflow <- outflow + simstrat_outflow <- reshape2::melt(outflow, id.vars = "datetime") + # set flow values to negative + simstrat_outflow$value <- -1 * simstrat_outflow$value - simstrat_outflow <- simstrat_outflow[, c("datetime", "Flow_metersCubedPerSecond")] + simstrat_outflow$variable <- paste0(simstrat_outflow$variable, + gsub("outflow", "", simstrat_outflow$L1)) + simstrat_outflow <- reshape2::dcast(simstrat_outflow, datetime ~ variable) + if(num_outflows == 1){ + simstrat_outflow <- simstrat_inflow[, c("datetime", "Flow_metersCubedPerSecond")] + } simstrat_outflow[, 1] <- format(simstrat_outflow[, 1], "%Y-%m-%d %H:%M:%S") #Reduce number of digits diff --git a/R/helper_flow.R b/R/helper_flow.R index 4a3fcf65..d1fa3270 100644 --- a/R/helper_flow.R +++ b/R/helper_flow.R @@ -104,3 +104,57 @@ rm_yaml_sec <- function(yaml_file, sec_name) { #Write to file writeLines(yml_out, yaml_file) } + +#' check naming convention for in/outflows +#'@description +#'check if the headder in in/outflow files follow the naming convention +#' +#' @name chk_names_flow +#' @param flow data.frame of the read in flow data +#' @param num_flows number of in/outflows +#' @param file_n file name +#' @noRd +chk_names_flow <- function(flow, num_flows, file_n) { + + # colnames of the data + cln <- colnames(flow) + # remove numbers if multiple in/outflows are there + if(num_flows > 1) { + cln <- gsub("(\\w+)\\_\\d+\\>", "\\1", cln) + } + # test if names are right + chck_flow <- sapply(list(cln), function(x) x %in% lake_var_dic$standard_name) + if(any(!chck_flow)){ + chck_flow[which(chck_flow == FALSE)] <- sapply(list(cln[which( + chck_flow == FALSE)]), function(x) x %in% met_var_dic$standard_name) + + if(any(!chck_flow)){ + stop(paste0("Colnames of", file_n, " file are not in standard notation! ", + "They should be one of: \ndatetime\nFlow_metersCubedPerSecond\n", + "Water_Temperature_celsius\nSalinity_practicalSalinityUnits")) + } + } +} + +#' scale in/outflows +#'@description +#' scale the flow of in/outflow data.frames +#' +#' @name scale_flow +#' @param flow data.frame of the read in flow data +#' @param num_flows number of in/outflows +#' @param scale_param scaling parameters +#' @noRd +scale_flow <- function(flow, num_flows, scale_param) { + + if(num_flows == 1) { + flow[["Flow_metersCubedPerSecond"]] <- flow[["Flow_metersCubedPerSecond"]] * + scale_param + } else if(num_flows > 1) { + for (i in 1:num_flows) { + flow[[paste0("Flow_metersCubedPerSecond_", i)]] <- + flow[[paste0("Flow_metersCubedPerSecond_", i)]] * scale_param[i] + } + } + return(flow) +} From dfc0555e8a042fe1fbe4aaf919160a2bcf61077a Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Fri, 23 Oct 2020 15:41:35 +0200 Subject: [PATCH 06/89] added missing bracket and linterized code --- R/export_flow.R | 118 +++++++++++++++++++++---------------------- R/format_flow.R | 131 +++++++++++++++++++++++------------------------- R/helper_flow.R | 54 ++++++++++---------- 3 files changed, 147 insertions(+), 156 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 7498e2dd..8164da46 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -16,7 +16,7 @@ #' #' @export export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), - folder = "."){ + folder = ".") { # It's advisable to set timezone to GMT in order to avoid errors when reading time original_tz <- Sys.getenv("TZ") @@ -25,7 +25,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # Set working directory oldwd <- getwd() setwd(folder) - + # this way if the function exits for any reason, success or failure, these are reset: on.exit({ setwd(oldwd) @@ -46,7 +46,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # Get start & stop dates start_date <- get_yaml_value(config_file, "time", "start") stop_date <- get_yaml_value(config_file, "time", "stop") - + # Use inflows use_inflows <- get_yaml_value(config_file, "inflows", "use") # Use outflows @@ -57,7 +57,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa "if you would like to have outflows matching the ", "inflows please add them manually to the 'outflows'", "section"))}, - error = function(e){}) + error = function(e) { }) if(use_outflows) { # number of outflows num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") @@ -66,7 +66,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # Get scaling parameter scale_param_out <- get_yaml_value(config_file, "outflows", "scale_param") } - + if(use_inflows) { # Get scaling parameter scale_param_inf <- get_yaml_value(config_file, "inflows", "scale_param") @@ -103,8 +103,8 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa "strm_hf_angle" = rep(65, num_inflows), "strmbd_slope" = rep(2, num_inflows), "strmbd_drag" = rep(0.016, num_inflows), - "inflow_factor"= rep(1, num_inflows), - "inflow_fl" = paste0("inflow_", 1:num_inflows,".csv"))) + "inflow_factor" = rep(1, num_inflows), + "inflow_fl" = paste0("inflow_", 1:num_inflows, ".csv"))) } # set outflows @@ -137,7 +137,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # number of outflows in the yaml file so far num_outf_yaml <- length(grep("outflow\\_*\\d*:", yml_no_comment, value = TRUE)) - + ## Switch off streams if(!use_inflows){ # remove all inflows but one @@ -179,18 +179,18 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # add additional inflows if necessary if(num_inflows > 1) { for (i in num_inflows:2) { - doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) + doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) } - + # set inflow settings for all inflows for (i in 1:num_inflows) { - + if(i == 1) { inf_sec <- "inflow" } else { inf_sec <- paste0("inflow_", i) } - + # streams_switch(file = got_yaml, method = "on") input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = "method", value = 2) @@ -210,7 +210,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } } - # set outflows + # set outflows if (use_outflows) { # remove additional outflows that are not needed if (num_outf_yaml > num_outflows) { @@ -225,7 +225,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # add additional outflows if necessary if(num_outflows > 1) { for (i in num_outflows:2) { - doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) + doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) } # set outflow settings for all outflows for (i in 1:num_outflows) { @@ -282,13 +282,12 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), file_connection) close(file_connection) - } + } if(!use_outflows){ outflow_outfile <- "Qout.dat" - par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) - + outflow_line_1 <- "Time [d]\tQ_out [m3/s]" outflow_line_2 <- "1" outflow_line_3 <- "-1 0.00" @@ -333,8 +332,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa message("Loading inflow data...") inflow <- read.csv(file.path(folder, inflow_file), stringsAsFactors = FALSE) inflow[, 1] <- as.POSIXct(inflow[, 1]) - # Check time step - tstep <- diff(as.numeric(inflow[, 1])) start_date <- get_yaml_value(config_file, "time", "start") # Stop date stop_date <- get_yaml_value(config_file, "time", "stop") @@ -344,10 +341,10 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa ### Naming conventions standard input chk_names_flow(inflow, num_inflows, inflow_file) - + ### Apply scaling inflow <- scale_flow(inflow, num_inflows, scale_param_inf) - + # if multiple inflows are present put them in a list if(num_inflows > 1) { inflow_ls <- list() @@ -365,7 +362,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } else { inflow <- list(inflow_1 = inflow) } - + ##### FLake if("FLake" %in% model){ @@ -396,7 +393,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa for (i in 1:num_inflows) { glm_inflow <- format_inflow(inflow = inflow[[i]], model = "GLM", config_file = config_file) - + inflow_outfile <- file.path("GLM", paste0("inflow_", i, ".csv")) write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) message("GLM: Created file ", file.path(folder, "GLM", paste0("inflow_", i, ".csv"))) @@ -410,10 +407,10 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa gotm_outfile <- paste0("inflow_file_", i, ".dat") gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) gotm_inflow <- format_inflow(inflow[[i]], model = "GOTM", config_file = config_file) - + write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", col.names = TRUE) - + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) } @@ -425,7 +422,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa inflow_outfile <- "Qin.dat" temp_outfile <- "Tin.dat" salt_outfile <- "Sin.dat" - par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) # output file paths inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) @@ -496,7 +492,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } else { mylake_inflow <- inflow[[1]] } - + mylake_inflow <- format_inflow(inflow = mylake_inflow, model = "MyLake", config_file = config_file) @@ -523,39 +519,37 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } } - + ##-------------If outflow == TRUE--------------- - - if(use_outflows == TRUE){ - + + if(use_outflows == TRUE) { + outflow_file <- get_yaml_value(file = config_file, label = "outflows", key = "file") # Check if file exists if(!file.exists(outflow_file)){ stop(outflow_file, " does not exist. Check filepath in ", config_file) } - + ### Import data message("Loading outflow data...") outflow <- read.csv(file.path(folder, outflow_file), stringsAsFactors = FALSE) outflow[, 1] <- as.POSIXct(outflow[, 1]) - # Check time step - tstep <- diff(as.numeric(outflow[, 1])) - + start_date <- get_yaml_value(config_file, "time", "start") # Stop date stop_date <- get_yaml_value(config_file, "time", "stop") - + outflow_start <- which(outflow$datetime == as.POSIXct(start_date)) outflow_stop <- which(outflow$datetime == as.POSIXct(stop_date)) - + outflow <- outflow[outflow_start:outflow_stop, ] - + ### Naming conventions standard input chk_names_flow(outflow, num_outflows, outflow_file) - + ### Apply scaling outflow <- scale_flow(outflow, num_outflows, scale_param_out) - + # if multiple outflows are present put them in a list if(num_outflows > 1) { outflow_ls <- list() @@ -569,55 +563,54 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } else { outflow <- list(outflow_1 = outflow) } - + # FLake ##### - if("FLake" %in% model){ + if("FLake" %in% model) { message("FLake does not need outflows, as mass fluxes are not considered.") } - + # GLM ##### - if("GLM" %in% model){ + if("GLM" %in% model) { for (i in 1:num_outflows) { glm_outflow <- format_outflow(outflow = outflow[[i]], model = "GLM", config_file = config_file) - + outflow_outfile <- file.path("GLM", paste0("outflow_", i, ".csv")) write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) message("GLM: Created file ", file.path(folder, "GLM", paste0("outflow_", i, ".csv"))) } } - + ## GOTM - if("GOTM" %in% model){ + if("GOTM" %in% model) { for (i in 1:num_outflows) { - + gotm_outfile <- paste0("outflow_file_", i, ".dat") - + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - + gotm_outflow <- format_outflow(outflow[[i]], model = "GOTM", config_file = config_file) write.table(gotm_outflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", col.names = TRUE) - + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) } } - + ## Simstrat - if("Simstrat" %in% model){ - + if("Simstrat" %in% model) { + outf_surf <- rep(FALSE, num_outflows) outf_surf[lvl_outflows == -1] <- TRUE #!! outflow elevations need to be relative to initial water level!! lvl_outflows_simstrat <- lvl_outflows - init_lvl lvl_outflows_simstrat[outf_surf] <- 0 - + outflow_outfile <- "Qout.dat" - par_file <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) sim_outflow <- format_outflow(outflow, "Simstrat", config_file, folder) ## inflow file @@ -647,13 +640,14 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) } - + ## MyLake - if("MyLake" %in% model){ - + if("MyLake" %in% model) { + message("MyLake does not need specific outflows, as it employs automatic overflow.") } - + message("export_inflow complete!") + } } diff --git a/R/format_flow.R b/R/format_flow.R index 3d697b2a..dd7e6c00 100644 --- a/R/format_flow.R +++ b/R/format_flow.R @@ -11,17 +11,17 @@ #' @return dataframe of met data in the model format #' @export format_inflow <- function(inflow, model, config_file, folder = "."){ - - + + hyp_file <- get_yaml_value(config_file, "location", "hypsograph") if(!file.exists(hyp_file)){ stop(hyp_file, " does not exist. Check filepath in ", config_file) } num_inflows <- get_yaml_value(config_file, "inflows", "number_inflows") hyp <- read.csv(hyp_file) - + if("FLake" %in% model){ - + flake_in_l <- reshape2::melt(inflow, id.vars = "datetime") sum_flow <- aggregate(list(flow = flake_in_l$value), by = list(var = flake_in_l$variable, @@ -32,86 +32,85 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ # calculate weights to weight the salinity and temperature in proportion to the flow weights <- reshape2::dcast(flake_in_l, datetime ~ variable) weights <- weights[, grepl("Flow_metersCubedPerSecond", colnames(weights))] - weights <- weights/sum_flow$flow - - + weights <- weights / sum_flow$flow + + # temperature temp <- reshape2::dcast(flake_in_l, datetime ~ variable) temp <- temp[, grepl("Water_Temperature_celsius", colnames(temp))] temp <- apply(temp * weights, 1, sum, na.rm = TRUE) - + flake_inflow <- data.frame(datetime = unique(flake_in_l$datetime), Flow_metersCubedPerSecond = sum_flow$flow, Water_Temperature_celsius = temp) - - + + colnames(flake_inflow) <- c("FLOW", "TEMP") - + flake_inflow[, 1] <- (flake_inflow[, 1]) / max(hyp$Area_meterSquared) - + #Reduce number of digits flake_inflow <- signif(flake_inflow, digits = 8) - + return(flake_inflow) - + } - + if("GLM" %in% model){ - + glm_inflow <- inflow - + glm_inflow <- glm_inflow[, c("datetime", "Flow_metersCubedPerSecond", "Water_Temperature_celsius", "Salinity_practicalSalinityUnits")] - + colnames(glm_inflow) <- c("Time", "FLOW", "TEMP", "SALT") glm_inflow[, 1] <- format(glm_inflow[, 1], format = "%Y-%m-%d %H:%M:%S") - + #Reduce number of digits glm_inflow[, -1] <- signif(glm_inflow[, -1], digits = 8) - + return(glm_inflow) } - + if("GOTM" %in% model){ - + gotm_inflow <- inflow - + gotm_inflow <- gotm_inflow[, c("datetime", "Flow_metersCubedPerSecond", "Water_Temperature_celsius", "Salinity_practicalSalinityUnits")] - + colnames(gotm_inflow)[1] <- paste0("!", colnames(gotm_inflow)[1]) gotm_inflow[, 1] <- format(gotm_inflow[, 1], "%Y-%m-%d %H:%M:%S") - + #Reduce number of digits gotm_inflow[, -1] <- signif(gotm_inflow[, -1], digits = 8) - + return(gotm_inflow) } - + if("Simstrat" %in% model){ - + simstrat_inflow <- reshape2::melt(inflow, id.vars = "datetime") - + simstrat_inflow$variable <- paste0(simstrat_inflow$variable, gsub("inflow", "", simstrat_inflow$L1)) simstrat_inflow <- reshape2::dcast(simstrat_inflow, datetime ~ variable) - - + if(num_inflows == 1){ simstrat_inflow <- simstrat_inflow[, c("datetime", "Flow_metersCubedPerSecond", "Water_Temperature_celsius", "Salinity_practicalSalinityUnits")] } simstrat_inflow[, 1] <- format(simstrat_inflow[, 1], "%Y-%m-%d %H:%M:%S") - + #Reduce number of digits simstrat_inflow[, -1] <- signif(simstrat_inflow[, -1], digits = 8) - + return(simstrat_inflow) } - + if("MyLake" %in% model) { mylake_in_l <- reshape2::melt(inflow, id.vars = "datetime") @@ -124,30 +123,28 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ # calculate weights to weight the salinity and temperature in proportion to the flow weights <- reshape2::dcast(mylake_in_l, datetime ~ variable) weights <- weights[, grepl("Flow_metersCubedPerSecond", colnames(weights))] - weights <- weights/sum_flow$flow - + weights <- weights / sum_flow$flow # salt salt <- reshape2::dcast(mylake_in_l, datetime ~ variable) salt <- salt[, grepl("Salinity_practicalSalinityUnits", colnames(salt))] salt <- apply(salt * weights, 1, sum, na.rm = TRUE) - # temperature temp <- reshape2::dcast(mylake_in_l, datetime ~ variable) temp <- temp[, grepl("Water_Temperature_celsius", colnames(temp))] temp <- apply(temp * weights, 1, sum, na.rm = TRUE) - + mylake_inflow <- data.frame(datetime = unique(mylake_in_l$datetime), Flow_metersCubedPerSecond = sum_flow$flow, Water_Temperature_celsius = temp, Salinity_practicalSalinityUnits = salt) - + mylake_inflow$Flow_metersCubedPerDay <- mylake_inflow$Flow_metersCubedPerSecond * (86400.) - + mylake_inflow[, 1] <- format(mylake_inflow[, 1], "%Y-%m-%d %H:%M:%S") - + #Reduce number of digits mylake_inflow[, -1] <- signif(mylake_inflow[, -1], digits = 8) - + return(mylake_inflow) } } @@ -166,67 +163,67 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ #' @return dataframe of met data in the model format #' @export format_outflow <- function(outflow, model, config_file, folder = "."){ - + num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") - + if("FLake" %in% model){ stop("FLake does not need outflows, as mass fluxes are not considered.") } - + if("GLM" %in% model){ - + glm_outflow <- outflow - + glm_outflow <- glm_outflow[, c("datetime", "Flow_metersCubedPerSecond")] - + colnames(glm_outflow) <- c("Time", "FLOW") glm_outflow[, 1] <- format(glm_outflow[, 1], format = "%Y-%m-%d %H:%M:%S") - + #Reduce number of digits glm_outflow[, -1] <- signif(glm_outflow[, -1], digits = 8) - + return(glm_outflow) } - - if("GOTM" %in% model){ - + + if("GOTM" %in% model) { + gotm_outflow <- outflow - + gotm_outflow <- gotm_outflow[, c("datetime", "Flow_metersCubedPerSecond")] - + colnames(gotm_outflow)[1] <- paste0("!", colnames(gotm_outflow)[1]) gotm_outflow[, 1] <- format(gotm_outflow[, 1], "%Y-%m-%d %H:%M:%S") - + # set flow values negative gotm_outflow$Flow_metersCubedPerSecond <- -1 * gotm_outflow$Flow_metersCubedPerSecond - + #Reduce number of digits gotm_outflow[, -1] <- signif(gotm_outflow[, -1], digits = 8) - + return(gotm_outflow) } - - if("Simstrat" %in% model){ - + + if("Simstrat" %in% model) { + simstrat_outflow <- reshape2::melt(outflow, id.vars = "datetime") # set flow values to negative simstrat_outflow$value <- -1 * simstrat_outflow$value - + simstrat_outflow$variable <- paste0(simstrat_outflow$variable, gsub("outflow", "", simstrat_outflow$L1)) simstrat_outflow <- reshape2::dcast(simstrat_outflow, datetime ~ variable) - - if(num_outflows == 1){ + + if(num_outflows == 1) { simstrat_outflow <- simstrat_inflow[, c("datetime", "Flow_metersCubedPerSecond")] } simstrat_outflow[, 1] <- format(simstrat_outflow[, 1], "%Y-%m-%d %H:%M:%S") - + #Reduce number of digits simstrat_outflow[, -1] <- signif(simstrat_outflow[, -1], digits = 8) - + return(simstrat_outflow) } - + if("MyLake" %in% model) { stop("MyLake does not need specific outflows, as it employs automatic overflow.") } diff --git a/R/helper_flow.R b/R/helper_flow.R index d1fa3270..982eee21 100644 --- a/R/helper_flow.R +++ b/R/helper_flow.R @@ -10,17 +10,17 @@ doubl_yaml_sec <- function(yaml_file, sec_name, ap) { - + # read yaml file yml <- readLines(yaml_file) - + # Prevent from finding labels/keys in comments yml_no_comments <- unname(sapply(yml, function(x) strsplit(x, "#")[[1]][1])) - + #Find index of section - sec_id <- paste0(sec_name,":") + sec_id <- paste0(sec_name, ":") ind_sec <- grep(paste0("\\b", sec_id), yml_no_comments) - + if(length(ind_sec) == 0){ stop(sec_name, " not found in ", yaml_file) } @@ -32,24 +32,24 @@ doubl_yaml_sec <- function(yaml_file, sec_name, ap) { # number of whitespace in section lws <- nchar(strsplit(yml_no_comments[ind_sec], sec_id)[[1]][1]) while(find) { - + ws <- nchar(strsplit(yml_no_comments[ind_sec + i], "\\w+\\:")[[1]][1]) if(ws > lws) { - i <- i +1 + i <- i + 1 } else { find <- FALSE } - + } - + # whole sdction sec_yml <- yml[ind_sec:(ind_sec + i - 1)] # change name by adding a number sec_yml[1] <- gsub(pattern = sec_name, replacement = paste0(sec_name, ap), sec_yml[1]) - + # insert section - yml_out <- c(yml[1:(ind_sec + i -1)], sec_yml, yml[(ind_sec + i):length(yml)]) - + yml_out <- c(yml[1:(ind_sec + i - 1)], sec_yml, yml[(ind_sec + i):length(yml)]) + #Write to file writeLines(yml_out, yaml_file) } @@ -66,21 +66,21 @@ doubl_yaml_sec <- function(yaml_file, sec_name, ap) { rm_yaml_sec <- function(yaml_file, sec_name) { - + # read yaml file yml <- readLines(yaml_file) - + # Prevent from finding labels/keys in comments yml_no_comments <- unname(sapply(yml, function(x) strsplit(x, "#")[[1]][1])) - + #Find index of section - sec_id <- paste0(sec_name,":") + sec_id <- paste0(sec_name, ":") ind_sec <- grep(paste0("\\b", sec_id), yml_no_comments) - + if(length(ind_sec) == 0){ stop(sec_name, " not found in ", yaml_file) } - + # find index of next section find <- TRUE # index @@ -88,19 +88,19 @@ rm_yaml_sec <- function(yaml_file, sec_name) { # number of whitespace in section lws <- nchar(strsplit(yml_no_comments[ind_sec], sec_id)[[1]][1]) while(find) { - + ws <- nchar(strsplit(yml_no_comments[ind_sec + i], "\\w+\\:")[[1]][1]) if(ws > lws) { - i <- i +1 + i <- i + 1 } else { find <- FALSE } - + } - + # remove section - yml_out <- yml[c(1:(ind_sec-1),(ind_sec + i):length(yml))] - + yml_out <- yml[c(1:(ind_sec - 1), (ind_sec + i):length(yml))] + #Write to file writeLines(yml_out, yaml_file) } @@ -115,7 +115,7 @@ rm_yaml_sec <- function(yaml_file, sec_name) { #' @param file_n file name #' @noRd chk_names_flow <- function(flow, num_flows, file_n) { - + # colnames of the data cln <- colnames(flow) # remove numbers if multiple in/outflows are there @@ -127,7 +127,7 @@ chk_names_flow <- function(flow, num_flows, file_n) { if(any(!chck_flow)){ chck_flow[which(chck_flow == FALSE)] <- sapply(list(cln[which( chck_flow == FALSE)]), function(x) x %in% met_var_dic$standard_name) - + if(any(!chck_flow)){ stop(paste0("Colnames of", file_n, " file are not in standard notation! ", "They should be one of: \ndatetime\nFlow_metersCubedPerSecond\n", @@ -146,7 +146,7 @@ chk_names_flow <- function(flow, num_flows, file_n) { #' @param scale_param scaling parameters #' @noRd scale_flow <- function(flow, num_flows, scale_param) { - + if(num_flows == 1) { flow[["Flow_metersCubedPerSecond"]] <- flow[["Flow_metersCubedPerSecond"]] * scale_param From 5f7c82817279b6f4dd2ba5083d4e5f4fe8ba929d Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Fri, 23 Oct 2020 15:50:49 +0200 Subject: [PATCH 07/89] fixed small mistake --- R/export_flow.R | 8 +------- R/format_flow.R | 15 ++++++++++----- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 8164da46..7b415ccf 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -487,13 +487,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") load(temp_fil) - if(num_inflows > 1) { - # mylake_inflow <- average inflows from list - } else { - mylake_inflow <- inflow[[1]] - } - - mylake_inflow <- format_inflow(inflow = mylake_inflow, model = "MyLake", + mylake_inflow <- format_inflow(inflow = inflow, model = "MyLake", config_file = config_file) # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive diff --git a/R/format_flow.R b/R/format_flow.R index dd7e6c00..8d13356f 100644 --- a/R/format_flow.R +++ b/R/format_flow.R @@ -38,10 +38,11 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ # temperature temp <- reshape2::dcast(flake_in_l, datetime ~ variable) temp <- temp[, grepl("Water_Temperature_celsius", colnames(temp))] - temp <- apply(temp * weights, 1, sum, na.rm = TRUE) + if(num_inflows > 1) { + temp <- apply(temp * weights, 1, sum, na.rm = TRUE) + } - flake_inflow <- data.frame(datetime = unique(flake_in_l$datetime), - Flow_metersCubedPerSecond = sum_flow$flow, + flake_inflow <- data.frame(Flow_metersCubedPerSecond = sum_flow$flow, Water_Temperature_celsius = temp) @@ -127,11 +128,15 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ # salt salt <- reshape2::dcast(mylake_in_l, datetime ~ variable) salt <- salt[, grepl("Salinity_practicalSalinityUnits", colnames(salt))] - salt <- apply(salt * weights, 1, sum, na.rm = TRUE) + if(num_inflows > 1) { + salt <- apply(salt * weights, 1, sum, na.rm = TRUE) + } # temperature temp <- reshape2::dcast(mylake_in_l, datetime ~ variable) temp <- temp[, grepl("Water_Temperature_celsius", colnames(temp))] - temp <- apply(temp * weights, 1, sum, na.rm = TRUE) + if(num_inflows > 1) { + temp <- apply(temp * weights, 1, sum, na.rm = TRUE) + } mylake_inflow <- data.frame(datetime = unique(mylake_in_l$datetime), Flow_metersCubedPerSecond = sum_flow$flow, From 62949991dfe047897ee4975c2d5ca863e62bd15c Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Fri, 23 Oct 2020 15:56:44 +0200 Subject: [PATCH 08/89] more erros fixed --- R/export_flow.R | 2 +- R/format_flow.R | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 7b415ccf..ff8286ef 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -56,7 +56,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa warning(paste0("The 'mass-balance' argument is no longer used ", "if you would like to have outflows matching the ", "inflows please add them manually to the 'outflows'", - "section"))}, + " section. You can use the same file as for inflows."))}, error = function(e) { }) if(use_outflows) { # number of outflows diff --git a/R/format_flow.R b/R/format_flow.R index 8d13356f..7b97ae5a 100644 --- a/R/format_flow.R +++ b/R/format_flow.R @@ -99,11 +99,6 @@ format_inflow <- function(inflow, model, config_file, folder = "."){ gsub("inflow", "", simstrat_inflow$L1)) simstrat_inflow <- reshape2::dcast(simstrat_inflow, datetime ~ variable) - if(num_inflows == 1){ - simstrat_inflow <- simstrat_inflow[, c("datetime", "Flow_metersCubedPerSecond", - "Water_Temperature_celsius", - "Salinity_practicalSalinityUnits")] - } simstrat_inflow[, 1] <- format(simstrat_inflow[, 1], "%Y-%m-%d %H:%M:%S") #Reduce number of digits From bfb8b87a8469e7e25fb866327d7d1abacb18001a Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Fri, 23 Oct 2020 16:15:55 +0200 Subject: [PATCH 09/89] fixed error in GOTM configuration --- R/export_flow.R | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index ff8286ef..3863d961 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -181,7 +181,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa for (i in num_inflows:2) { doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) } - + } # set inflow settings for all inflows for (i in 1:num_inflows) { @@ -194,8 +194,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # streams_switch(file = got_yaml, method = "on") input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "method", - value = 4) input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = "method", value = 2) input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = @@ -208,7 +206,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa "file", value = paste0("inflow_file_", i, ".dat")) } } - } # set outflows if (use_outflows) { @@ -227,6 +224,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa for (i in num_outflows:2) { doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) } + } # set outflow settings for all outflows for (i in 1:num_outflows) { if(i == 1) { @@ -235,14 +233,14 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa outf_sec <- paste0("outflow_", i) } # streams_switch(file = got_yaml, method = "on") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = - "method", value = ifelse(outf_surf[i], 2, 3)) input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "method", - value = 3) + value = ifelse(outf_surf[i], 1, 3)) input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zl", value = lvl_outflows_gotm[i] - 0.5) input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zu", value = lvl_outflows_gotm[i] + 0.5) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = + "method", value = 2) input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = "method", value = 0) input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = @@ -253,7 +251,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa "file", value = paste0("outflow_file_", i, ".dat")) input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = "file", value = paste0("outflow_file_", i, ".dat")) - } } } } From b77a5c5663b73e558e74b08e06b7f8955c762de8 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 26 Oct 2020 11:18:24 +0100 Subject: [PATCH 10/89] added water level to possible output variables --- R/get_output.R | 199 +++++++++++++++++++++++++----------------- R/read_flake_out.R | 45 ++++++---- R/run_ensemble.R | 16 ++-- data/lake_var_dic.csv | 1 + data/lake_var_dic.rda | Bin 335 -> 402 bytes 5 files changed, 156 insertions(+), 105 deletions(-) diff --git a/R/get_output.R b/R/get_output.R index 4d7acb77..9f4aa3a1 100644 --- a/R/get_output.R +++ b/R/get_output.R @@ -17,6 +17,8 @@ #' @importFrom reshape2 dcast #' @importFrom gotmtools get_vari setmodDepths #' @importFrom glmtools get_ice get_var +#' @importFrom glmtools get_surface_height +#' @importFrom gotmtools get_yaml_value #' @export get_output <- function(config_file, model, vars, obs_depths = NULL, folder = ".", out_time, out_hour){ @@ -46,7 +48,7 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." } ##--------------------------------- GLM --------------------------------------- - + if("GLM" %in% model){ # Extract output glm_out <- list() @@ -78,9 +80,16 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." names(glm_out)[length(glm_out)] <- "ice_height" } - + + if("w_level" %in% vars){ + glm_out[[length(glm_out) + 1]] <- get_surface_height(file = file.path(folder, "GLM", "output", + "output.nc")) + colnames(glm_out[[length(glm_out)]]) <- c("datetime", "w_level") + names(glm_out)[length(glm_out)] <- "w_level" + } + if("dens" %in% vars){ - + # Add in obs depths which are not in depths and less than mean depth depth <- suppressWarnings(get_nml_value(nml_file = file.path(folder, get_yaml_value(config_file, @@ -91,7 +100,7 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." add_deps <- obs_depths[!(obs_depths %in% depths)] depths <- c(add_deps, depths) depths <- depths[order(depths)] - + glm_out[[length(glm_out) + 1]] <- glmtools::get_var(file = file.path(folder, "GLM", "output", "output.nc"), var_name = "rho", reference = "surface", @@ -99,9 +108,9 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." colnames(glm_out[[length(glm_out)]]) <- c("datetime", paste("dens_", depths, sep = "")) names(glm_out)[length(glm_out)] <- "dens" } - + if("salt" %in% vars){ - + # Add in obs depths which are not in depths and less than mean depth depth <- suppressWarnings(get_nml_value(nml_file = file.path(folder, get_yaml_value(config_file, @@ -112,7 +121,7 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." add_deps <- obs_depths[!(obs_depths %in% depths)] depths <- c(add_deps, depths) depths <- depths[order(depths)] - + glm_out[[length(glm_out) + 1]] <- glmtools::get_var(file = file.path(folder, "GLM", "output", "output.nc"), var_name = "salt", reference = "surface", @@ -131,7 +140,7 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." } ##--------------------------- GOTM ------------------------------------------------ - + if("GOTM" %in% model){ got_out <- list() @@ -181,14 +190,26 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." names(got_out)[length(got_out)] <- "ice_height" } - + + if("w_level" %in% vars){ + w_level <- get_vari(ncdf = file.path(folder, "GOTM", "output", "output.nc"), var = "h", + print = FALSE) + w_level <- data.frame(w_level$Datetime, apply(w_level[, seq(from = 2, to = ncol(w_level))], + 1, sum, na.rm = TRUE)) + colnames(w_level) <- c("datetime", "w_level") + + got_out[[length(got_out) + 1]] <- w_level + names(got_out)[length(got_out)] <- "w_level" + + } + if("dens" %in% vars){ - + density <- get_vari(ncdf = file.path(folder, "GOTM", "output", "output.nc"), var = "rho", print = FALSE) z <- get_vari(ncdf = file.path(folder, "GOTM", "output", "output.nc"), var = "z", print = FALSE) - + # Add in obs depths which are not in depths and less than mean depth depths <- seq(0, min(z[1, -1]), by = -1 * get_yaml_value(config_file, "output", "depths")) if(is.null(obs_depths)) { @@ -199,30 +220,30 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." add_deps <- obs_dep_neg[!(obs_dep_neg %in% depths)] depths <- c(add_deps, depths) depths <- depths[order(-depths)] - + message("Interpolating GOTM temp to include obs depths... ", paste0("[", Sys.time(), "]")) got <- setmodDepths(density, z, depths = depths, print = T) message("Finished interpolating! ", paste0("[", Sys.time(), "]")) - + got <- dcast(got, date ~ depths) got <- got[, c(1, (ncol(got):2))] str_depths <- abs(as.numeric(colnames(got)[2:ncol(got)])) colnames(got) <- c("datetime", paste("dens_", str_depths, sep = "")) - + got_out[[length(got_out) + 1]] <- got names(got_out)[length(got_out)] <- "dens" - + } - + if("salt" %in% vars){ - + salinity <- get_vari(ncdf = file.path(folder, "GOTM", "output", "output.nc"), var = "salt", print = FALSE) z <- get_vari(ncdf = file.path(folder, "GOTM", "output", "output.nc"), var = "z", print = FALSE) - + # Add in obs depths which are not in depths and less than mean depth depths <- seq(0, min(z[1, -1]), by = -1 * get_yaml_value(config_file, "output", "depths")) if(is.null(obs_depths)) { @@ -233,26 +254,26 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." add_deps <- obs_dep_neg[!(obs_dep_neg %in% depths)] depths <- c(add_deps, depths) depths <- depths[order(-depths)] - + message("Interpolating GOTM temp to include obs depths... ", paste0("[", Sys.time(), "]")) got <- setmodDepths(salinity, z, depths = depths, print = T) message("Finished interpolating! ", paste0("[", Sys.time(), "]")) - + got <- dcast(got, date ~ depths) got <- got[, c(1, (ncol(got):2))] str_depths <- abs(as.numeric(colnames(got)[2:ncol(got)])) colnames(got) <- c("datetime", paste("sal_", str_depths, sep = "")) - + got_out[[length(got_out) + 1]] <- got names(got_out)[length(got_out)] <- "salt" - + } return(got_out) } - + ##------------------- Simstrat ---------------------------------------------------- if("Simstrat" %in% model){ @@ -330,23 +351,35 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." sim_out[[length(sim_out) + 1]] <- ice_height names(sim_out)[length(sim_out)] <- "ice_height" } - - - + + if("w_level" %in% vars){ + w_level <- read.table(file.path(folder, "Simstrat", "output", "WaterH_out.dat"), + header = TRUE, sep = ",", check.names = FALSE) + w_level[, 1] <- as.POSIXct(w_level[, 1] * 3600 * 24, + origin = paste0(reference_year, "-01-01")) + # In case sub-hourly time steps are used, rounding might be necessary + w_level[, 1] <- round_date(w_level[, 1], unit = seconds_to_period(timestep)) + colnames(w_level) <- c("datetime", "w_level") + + sim_out[[length(sim_out) + 1]] <- w_level + names(sim_out)[length(sim_out)] <- "w_level" + } + + if("dens" %in% vars){ - + temp <- read.table(file.path(folder, "Simstrat", "output", "T_out.dat"), header = TRUE, sep = ",", check.names = FALSE) temp[, 1] <- as.POSIXct(temp[, 1] * 3600 * 24, origin = paste0(reference_year, "-01-01")) # In case sub-hourly time steps are used, rounding might be necessary temp[, 1] <- round_date(temp[, 1], unit = seconds_to_period(timestep)) - + # First column datetime, then depth from shallow to deep temp <- temp[, c(1, ncol(temp):2)] - + # Remove columns without any value temp <- temp[, colSums(is.na(temp)) < nrow(temp)] - + # Add in obs depths which are not in depths and less than mean depth mod_depths <- as.numeric(colnames(temp)[-1]) if(is.null(obs_depths)){ @@ -357,12 +390,12 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." add_deps <- obs_dep_neg[!(obs_dep_neg %in% mod_depths)] depths <- c(add_deps, mod_depths) depths <- depths[order(-depths)] - + if(length(depths) != (ncol(temp) - 1)){ message("Interpolating Simstrat temp to include obs depths... ", paste0("[", Sys.time(), "]")) - - + + # Create empty matrix and interpolate to new depths wat_mat <- matrix(NA, nrow = nrow(temp), ncol = length(depths)) for(i in seq_len(nrow(temp))) { @@ -381,21 +414,21 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." str_depths <- abs(as.numeric(colnames(temp)[2:ncol(temp)])) colnames(temp) <- c("datetime", paste0("wtr_", str_depths)) } - - - + + + sal <- read.table(file.path(folder, "Simstrat", "output", "S_out.dat"), header = TRUE, sep = ",", check.names = FALSE) sal[, 1] <- as.POSIXct(sal[, 1] * 3600 * 24, origin = paste0(reference_year, "-01-01")) # In case sub-hourly time steps are used, rounding might be necessary sal[, 1] <- round_date(sal[, 1], unit = seconds_to_period(timestep)) - + # First column datetime, then depth from shallow to deep sal <- sal[, c(1, ncol(sal):2)] - + # Remove columns without any value sal <- sal[, colSums(is.na(sal)) < nrow(sal)] - + # Add in obs depths which are not in depths and less than mean depth mod_depths <- as.numeric(colnames(sal)[-1]) if(is.null(obs_depths)){ @@ -406,12 +439,12 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." add_deps <- obs_dep_neg[!(obs_dep_neg %in% mod_depths)] depths <- c(add_deps, mod_depths) depths <- depths[order(-depths)] - + if(length(depths) != (ncol(sal) - 1)){ message("Interpolating Simstrat sal to include obs depths... ", paste0("[", Sys.time(), "]")) - - + + # Create empty matrix and interpolate to new depths wat_mat <- matrix(NA, nrow = nrow(sal), ncol = length(depths)) for(i in seq_len(nrow(sal))) { @@ -432,41 +465,41 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." colnames(sal) <- c("datetime", paste0("wtr_", str_depths)) rem_col = 0 } - + dens = sal - # calculations from FRANK J, MILLERO and ALAIN POISSON (1980): International one-atmosphere equation of state of seawater. + # calculations from FRANK J, MILLERO and ALAIN POISSON (1980): International one-atmosphere equation of state of seawater. dens[, -c(1)] = 999.842594 + (6.793952 * 10^-2 * temp[, -c(1)]) - (9.095290 * 10^-3 * temp[, -c(1)]^2) + (1.001685 * 10^-4 * temp[, -c(1)]^3) - (1.120083 * 10^-6 * temp[, -c(1)]^4) + (6.536336 * 10^-9 * temp[, -c(1)]^5) + (8.24493 * 10^-1 -4.0899 * 10^-3 * temp[, -c(1)]+ 7.6438 * 10^-5 * temp[, -c(1)]^2 - 8.2467 * 10^-7 * temp[, -c(1)]^3 + 5.3875 * 10^-9* temp[, -c(1)]^4) * sal[,-c(1)]+ (-5.72466 * 10^-3 + 1.0227 * 10^-4 * temp[, -c(1)] -1.6546 * 10^-6 * temp[, -c(1)]^2) * sal[,-c(1)]^(3/2) + (4.8314* 10^-4 ) * sal[,-c(1)] - + if(remb_col == 1){ colnames(dens) <- c("datetime", paste0("dens_", abs(depths))) } else { str_depths <- abs(as.numeric(colnames(sal)[2:ncol(sal)])) colnames(dens) <- c("datetime", paste0("dens__", str_depths)) } - + sim_out[[length(sim_out) + 1]] <- dens names(sim_out)[length(sim_out)] <- "dens" - + } - + if("salt" %in% vars){ - + temp <- read.table(file.path(folder, "Simstrat", "output", "S_out.dat"), header = TRUE, sep = ",", check.names = FALSE) temp[, 1] <- as.POSIXct(temp[, 1] * 3600 * 24, origin = paste0(reference_year, "-01-01")) # In case sub-hourly time steps are used, rounding might be necessary temp[, 1] <- round_date(temp[, 1], unit = seconds_to_period(timestep)) - + # First column datetime, then depth from shallow to deep temp <- temp[, c(1, ncol(temp):2)] - + # Remove columns without any value temp <- temp[, colSums(is.na(temp)) < nrow(temp)] - + # Add in obs depths which are not in depths and less than mean depth mod_depths <- as.numeric(colnames(temp)[-1]) if(is.null(obs_depths)){ @@ -477,12 +510,12 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." add_deps <- obs_dep_neg[!(obs_dep_neg %in% mod_depths)] depths <- c(add_deps, mod_depths) depths <- depths[order(-depths)] - + if(length(depths) != (ncol(temp) - 1)){ message("Interpolating Simstrat temp to include obs depths... ", paste0("[", Sys.time(), "]")) - - + + # Create empty matrix and interpolate to new depths wat_mat <- matrix(NA, nrow = nrow(temp), ncol = length(depths)) for(i in seq_len(nrow(temp))) { @@ -501,19 +534,19 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." str_depths <- abs(as.numeric(colnames(temp)[2:ncol(temp)])) colnames(temp) <- c("datetime", paste0("sal_", str_depths)) } - + sim_out[[length(sim_out) + 1]] <- temp names(sim_out)[length(sim_out)] <- "salt" - + } - + return(sim_out) } ##--------------------- MyLake ------------------------------------------------ - + if("MyLake" %in% model){ mylake_out <- list() @@ -561,24 +594,34 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." names(mylake_out)[length(mylake_out)] <- "ice_height" } - + + if("w_level" %in% vars){ + + mylake_out[[length(mylake_out) + 1]] <- + data.frame("datetime" = as.POSIXct((as.numeric(res$tt) - 719529) * 86400, + origin = "1970-01-01"), "w_level" = res$His[1, ] * NaN) + names(mylake_out)[length(mylake_out)] <- "w_level" + message('MyLake does not support simulation of changing water level.') + + } + if("dens" %in% vars){ - + output_depths <- get_yaml_value(config_file, "output", "depths") #max_depth <- get_yaml_value(config_file, "location", "depth") - + init_depths <- res$zz seq_depths <- seq(0, max(init_depths), by = output_depths) add_deps <- obs_depths[!(obs_depths %in% seq_depths)] depths <- c(add_deps, seq_depths) depths <- depths[order(depths)] - + temps <- res$Tzt dates <- as.POSIXct((as.numeric(res$tt) - 719529) * 86400, origin = "1970-01-01") - + temp_interp <- matrix(NA, nrow = length(dates), ncol = length(depths)) - + for(i in seq_len(ncol(temps))) { temp_interp[i, ] <- approx(x = init_depths, y = temps[, i], @@ -587,34 +630,34 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." yright = dplyr::last(na.omit(temps)))$y } dens_interp <- 999.842594 + (6.793952 * 10^-2 * temp_interp) - (9.095290 * 10^-3 * temp_interp^2) + - (1.001685 * 10^-4 * temp_interp^3) - (1.120083 * 10^-6 * temp_interp^4) + (6.536336 * 10^-9 * temp_interp^5) - + (1.001685 * 10^-4 * temp_interp^3) - (1.120083 * 10^-6 * temp_interp^4) + (6.536336 * 10^-9 * temp_interp^5) + mylake_out[[length(mylake_out) + 1]] <- data.frame("datetime" = dates, dens_interp) colnames(mylake_out[[length(mylake_out)]]) <- c("datetime", paste("dens_", depths, sep = "")) - + names(mylake_out)[length(mylake_out)] <- "dens" - + } - + if("salt" %in% vars){ message('MyLake does not support simulation of salinity dynamics.') - + output_depths <- get_yaml_value(config_file, "output", "depths") #max_depth <- get_yaml_value(config_file, "location", "depth") - + init_depths <- res$zz seq_depths <- seq(0, max(init_depths), by = output_depths) add_deps <- obs_depths[!(obs_depths %in% seq_depths)] depths <- c(add_deps, seq_depths) depths <- depths[order(depths)] - + temps <- res$Tzt dates <- as.POSIXct((as.numeric(res$tt) - 719529) * 86400, origin = "1970-01-01") - + temp_interp <- matrix(NA, nrow = length(dates), ncol = length(depths)) - + for(i in seq_len(ncol(temps))) { temp_interp[i, ] <- approx(x = init_depths, y = temps[, i], @@ -623,13 +666,13 @@ get_output <- function(config_file, model, vars, obs_depths = NULL, folder = "." yright = dplyr::last(na.omit(temps)))$y } salt_interp <- temp_interp * NaN - + mylake_out[[length(mylake_out) + 1]] <- data.frame("datetime" = dates, salt_interp) colnames(mylake_out[[length(mylake_out)]]) <- c("datetime", paste("salt_", depths, sep = "")) - + names(mylake_out)[length(mylake_out)] <- "salt" - + } # If only one variable return a dataframe diff --git a/R/read_flake_out.R b/R/read_flake_out.R index a62130e3..244f7a62 100644 --- a/R/read_flake_out.R +++ b/R/read_flake_out.R @@ -65,7 +65,7 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = (18 - 30 * C + zeta * (20 * C - 12 + zeta * (c3 - c4 * C)))) * (Tb - Ts) + Ts }) - + if(long){ dd <- data.frame(dateTime = seq_len(length(Tz)), depth = z, @@ -103,7 +103,16 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = out_list[[length(out_list) + 1]] <- df names(out_list)[length(out_list)] <- "ice_height" } - + + if("w_level" %in% vars){ + message('FLake does not support simulation of changing water level.') + iw_level <- flake_out[["H_ice"]] + df <- data.frame(datetime, iw_level*NaN) + + out_list[[length(out_list) + 1]] <- df + names(out_list)[length(out_list)] <- "w_level" + } + if("dens" %in% vars){ # calculate temperature profile Ts <- flake_out[["Ts"]] # mixed layer (top) temperature @@ -111,17 +120,17 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = h <- flake_out[["h_ML"]] # mixed layer depth C <- flake_out[["C_T"]] # shape factor D <- max(depths) # mean depth - + if(long){ l_wtr <- list() }else{ mat <- matrix(NA, nrow = length(datetime), ncol = length(depths)) } - + # Make sure dates are ordered depths <- depths[order(depths)] - - + + for(kk in seq_len(length(depths))){ z <- depths[kk] zeta <- (z - h) / (D - h) @@ -135,7 +144,7 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = (18 - 30 * C + zeta * (20 * C - 12 + zeta * (c3 - c4 * C)))) * (Tb - Ts) + Ts }) - + if(long){ dd <- data.frame(dateTime = seq_len(length(Tz)), depth = z, @@ -145,10 +154,10 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = mat[, kk] <- Tz } } - + if(long){ wtr2 <- do.call("rbind", l_wtr) - + # sort in temporal order wtr2 <- wtr2[order(wtr2$dateTime, wtr2$depth), ] colnames(wtr2) <- c("datetime", "Depth_meter", "Water_Temperature_celsius") @@ -163,11 +172,11 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = } dens <- wtr2[which(wtr2$datetime %in% out_time$datetime), ] dens[, -c(1)] <- 999.842594 + (6.793952 * 10^-2 * wtr2[, -c(1)]) - (9.095290 * 10^-3 * wtr2[, -c(1)]^2) + - (1.001685 * 10^-4 * wtr2[, -c(1)]^3) - (1.120083 * 10^-6 * wtr2[, -c(1)]^4) + (6.536336 * 10^-9 * wtr2[, -c(1)]^5) + (1.001685 * 10^-4 * wtr2[, -c(1)]^3) - (1.120083 * 10^-6 * wtr2[, -c(1)]^4) + (6.536336 * 10^-9 * wtr2[, -c(1)]^5) out_list[[length(out_list) + 1]] <- dens names(out_list)[length(out_list)] <- "dens" } - + if("salt" %in% vars){ message('FLake does not support simulation of salinity dynamics.') # calculate temperature profile @@ -176,17 +185,17 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = h <- flake_out[["h_ML"]] # mixed layer depth C <- flake_out[["C_T"]] # shape factor D <- max(depths) # mean depth - + if(long){ l_wtr <- list() }else{ mat <- matrix(NA, nrow = length(datetime), ncol = length(depths)) } - + # Make sure dates are ordered depths <- depths[order(depths)] - - + + for(kk in seq_len(length(depths))){ z <- depths[kk] zeta <- (z - h) / (D - h) @@ -200,7 +209,7 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = (18 - 30 * C + zeta * (20 * C - 12 + zeta * (c3 - c4 * C)))) * (Tb - Ts) + Ts }) - + if(long){ dd <- data.frame(dateTime = seq_len(length(Tz)), depth = z, @@ -210,10 +219,10 @@ read_flake_out <- function(output, vars, depths, folder = ".", nml_file, long = mat[, kk] <- Tz } } - + if(long){ wtr2 <- do.call("rbind", l_wtr) - + # sort in temporal order wtr2 <- wtr2[order(wtr2$dateTime, wtr2$depth), ] colnames(wtr2) <- c("datetime", "Depth_meter", "Water_Temperature_celsius") diff --git a/R/run_ensemble.R b/R/run_ensemble.R index 02e3698f..cfe54e6c 100644 --- a/R/run_ensemble.R +++ b/R/run_ensemble.R @@ -157,7 +157,6 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak if(!is.null(obs_deps)){ temp_list <- append(temp_list, list("Obs_temp" = obs_out)) } - # temp_list <- Filter(Negate(is.null), temp_list) # Remove NULL outputs } if("ice_height" %in% out_vars){ @@ -175,10 +174,6 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak lapply(model, function(mod_name) model_out[[mod_name]][["dens"]]), paste0(model, "_dens") ) - # if(!is.null(obs_deps)){ - # temp_list <- append(temp_list, list("Obs_temp" = obs_out)) - # } - # temp_list <- Filter(Negate(is.null), temp_list) # Remove NULL outputs } if("salt" %in% out_vars){ @@ -186,10 +181,13 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak lapply(model, function(mod_name) model_out[[mod_name]][["salt"]]), paste0(model, "_salt") ) - # if(!is.null(obs_deps)){ - # temp_list <- append(temp_list, list("Obs_temp" = obs_out)) - # } - # temp_list <- Filter(Negate(is.null), temp_list) # Remove NULL outputs + } + + if("w_level" %in% out_vars){ + sal_list <- setNames( + lapply(model, function(mod_name) model_out[[mod_name]][["_w_level"]]), + paste0(model, "_w_level") + ) } # Put all lists with output into a single, named list diff --git a/data/lake_var_dic.csv b/data/lake_var_dic.csv index 0bd3c665..ca1d603a 100644 --- a/data/lake_var_dic.csv +++ b/data/lake_var_dic.csv @@ -4,3 +4,4 @@ Ice_Thickness_meter,ice_height,m Flow_metersCubedPerSecond,flow,meterCubedPerSecond Salinity_practicalSalinityUnits,salt,PSU Density_kiloGramPerCubedMeter,dens,kiloGramPerCubedMeter +Water_Level_meter,w_level,m diff --git a/data/lake_var_dic.rda b/data/lake_var_dic.rda index 3ff7c8ba5e30a6784c71ee8a35208e6a970a780c..70ee886b43cae9495f8931051f06a37c6751d367 100644 GIT binary patch literal 402 zcmV;D0d4+5T4*^jL0KkKS!I;ZuK)oI|G@vYY9fFE5C9FPUckTa-=IJM01>bOb}(R+ zP-&=7XeLcZl45#{hD?T;G(9~~Xr|IV6wnV)00000XwW255kFHVqfIh0Xv79aO{8SR zc_U~+DHtEfSI7U(k|6Kq5YW>@1ErF*kP&GCSF8~tVjD@u zX!+wud+gc#U&^7?5E=e^_PA-q`Q40 zU9*>jqyX3}^BbKqv0qWtD1AuE-yP6~kyKNH%24tEwd=hq!pm%*M(Sp_HZI}CDT!9> zCGBiWgfV4|puej~xhf=wvcxHx{o^Uu&QlRlIbvpqTIeQ~8i-4&<#9zf>@qE@k~^kz wHDGL%9XuXQ@`OIvGQQA=id+9S>5EFysvYK-T?`5PfA22h1A{Pf+GR!t?yk{FT7 z#QA^if#ND}~pfPf7=k Date: Mon, 26 Oct 2020 12:04:40 +0100 Subject: [PATCH 11/89] added w_level to output --- R/check_config.R | 2 +- inst/extdata/feeagh/LakeEnsemblR.yaml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/R/check_config.R b/R/check_config.R index 96bb4caf..1d01470e 100644 --- a/R/check_config.R +++ b/R/check_config.R @@ -100,7 +100,7 @@ check_master_config <- function(config_file, # check if variables in output are OK variables <- gotmtools::get_yaml_value(config_file, "output", "variables") - good_vars <- c("temp", "ice_height", "dens", "salt") + good_vars <- c("temp", "ice_height", "dens", "salt", "w_level") if(any(!variables %in% good_vars)) { stop(paste0('Unknown output variable: "', variables[!variables %in% good_vars], '" in control file ', config_file, diff --git a/inst/extdata/feeagh/LakeEnsemblR.yaml b/inst/extdata/feeagh/LakeEnsemblR.yaml index 5bc91066..4ac96501 100644 --- a/inst/extdata/feeagh/LakeEnsemblR.yaml +++ b/inst/extdata/feeagh/LakeEnsemblR.yaml @@ -57,6 +57,7 @@ output: variables: - temp - ice_height + - w_level scaling_factors: # scaling factors to apply to meteorological input, either for all models or model-specific. If not specified, no scaling is applied. If both "all" and model-specific are specified for a certain model, only the model-specific scaling is applied. all: wind_speed: 1.0 From b1d0288da5865605b666df809a3fb7c9a1aaa2ae Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 26 Oct 2020 12:14:26 +0100 Subject: [PATCH 12/89] updated description, namespace and manuals --- DESCRIPTION | 4 ++-- NAMESPACE | 2 ++ R/export_config.R | 36 ++++++++++++++++++------------------ man/export_config.Rd | 4 ++-- man/export_inflow.Rd | 6 +++--- man/format_inflow.Rd | 2 +- man/format_outflow.Rd | 24 ++++++++++++++++++++++++ 7 files changed, 52 insertions(+), 26 deletions(-) create mode 100644 man/format_outflow.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 8c7cc3a0..4dec2d86 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: LakeEnsemblR Type: Package Title: Run Ensemble of Lake Models -Version: 0.6.0 +Version: 0.6.1 Date: 2020-09-09 URL: https://github.com/aemon-j/LakeEnsemblR Author: Authors@R: c(person("Tadhg", "Moore", role = c("aut","cre"), @@ -47,5 +47,5 @@ Suggests: Encoding: UTF-8 LazyData: true LazyLoad: true -RoxygenNote: 7.1.0 +RoxygenNote: 7.1.1 VignetteBuilder: knitr diff --git a/NAMESPACE b/NAMESPACE index cbf4acdc..e76dcff1 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -21,6 +21,7 @@ export(export_output_settings) export(export_time) export(format_inflow) export(format_met) +export(format_outflow) export(get_config_value) export(get_json_value) export(get_mylakeconfig_value) @@ -51,6 +52,7 @@ importFrom(RColorBrewer,brewer.pal) importFrom(configr,read.config) importFrom(glmtools,get_ice) importFrom(glmtools,get_nml_value) +importFrom(glmtools,get_surface_height) importFrom(glmtools,get_var) importFrom(glmtools,read_nml) importFrom(glmtools,set_nml) diff --git a/R/export_config.R b/R/export_config.R index d0a17e5f..72149b4e 100644 --- a/R/export_config.R +++ b/R/export_config.R @@ -8,9 +8,9 @@ #'@param dirs boolean; create directories for each model and if needed copies templates. #' Calls export_dirs. Defaults to TRUE #'@param time boolean; exports time settings. Calls export_time. Defaults to TRUE. -#'@param location boolean; exports location and hypsograph settings. -#' Calls export_location. Defaults to TRUE. -#'@param output_settings boolean; exports output settings. +#'@param location boolean; exports location and hypsograph settings. +#' Calls export_location. Defaults to TRUE. +#'@param output_settings boolean; exports output settings. #' Calls export_output_settings. Defaults to TRUE. #'@param meteo boolean; export meteorology data. #' Calls export_meteo. Defaults to TRUE. @@ -39,69 +39,69 @@ export_config <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # Set working directory oldwd <- getwd() setwd(folder) - + # Fix time zone original_tz <- Sys.getenv("TZ") - + # this way if the function exits for any reason, success or failure, these are reset: on.exit({ setwd(oldwd) Sys.setenv(TZ = original_tz) }) - + Sys.setenv(TZ = "GMT") - + # Check if config file exists if(!file.exists(config_file)){ stop(config_file, " does not exist.") } - + # check the master config file check_master_config(config_file, exp_cnf = TRUE) # check model input model <- check_models(model) - + ##--------------------- Export sub-functions --------------- # Export directories and copy template files if(dirs){ export_dirs(config_file = config_file, model = model, folder = folder) } - + # Export time settings (start, stop, time step) if(time){ export_time(config_file = config_file, model = model, folder = folder) } - + # Export hypsograph, lat/lon, ice if(location){ export_location(config_file = config_file, model = model, folder = folder) } - + # Export output_settings (depth and time intervals) if(output_settings){ export_output_settings(config_file = config_file, model = model, folder = folder) } - + # Export meteo if(meteo){ export_meteo(config_file = config_file, model = model, folder = folder) } - + # Export initial conditions if(init_cond){ export_init_cond(config_file = config_file, model = model, print = TRUE, folder = folder) - } - + } + # Export light extinction (Kw) if(extinction){ export_extinction(config_file = config_file, model = model, folder = folder) } - + # Export user-defined inflow boundary condition if(inflow){ export_inflow(config_file = config_file, model = model, folder = folder) } - + # Export user-defined model-specific parameters if(model_parameters){ export_model_parameters(config_file = config_file, model = model, folder = folder) diff --git a/man/export_config.Rd b/man/export_config.Rd index b5140665..dda5e88f 100644 --- a/man/export_config.Rd +++ b/man/export_config.Rd @@ -30,10 +30,10 @@ Calls export_dirs. Defaults to TRUE} \item{time}{boolean; exports time settings. Calls export_time. Defaults to TRUE.} -\item{location}{boolean; exports location and hypsograph settings. +\item{location}{boolean; exports location and hypsograph settings. Calls export_location. Defaults to TRUE.} -\item{output_settings}{boolean; exports output settings. +\item{output_settings}{boolean; exports output settings. Calls export_output_settings. Defaults to TRUE.} \item{meteo}{boolean; export meteorology data. diff --git a/man/export_inflow.Rd b/man/export_inflow.Rd index 510dc7d9..005ee682 100644 --- a/man/export_inflow.Rd +++ b/man/export_inflow.Rd @@ -1,8 +1,8 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export_inflow.R +% Please edit documentation in R/export_flow.R \name{export_inflow} \alias{export_inflow} -\title{Export LakeEnsemblR standardised inflow files to model specific driver format} +\title{Export LakeEnsemblR standardised flow files to model specific driver format} \usage{ export_inflow( config_file, @@ -19,7 +19,7 @@ c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")} \item{folder}{filepath; to folder which contains the model folders generated by export_config()} } \description{ -Export inflow driver files for each model +Export in- anbd out-flow driver files for each model } \examples{ \dontrun{ diff --git a/man/format_inflow.Rd b/man/format_inflow.Rd index d1e620b6..9d8627f7 100644 --- a/man/format_inflow.Rd +++ b/man/format_inflow.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/format_inflow.R +% Please edit documentation in R/format_flow.R \name{format_inflow} \alias{format_inflow} \title{Format inflow data for each model} diff --git a/man/format_outflow.Rd b/man/format_outflow.Rd new file mode 100644 index 00000000..8d61096b --- /dev/null +++ b/man/format_outflow.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/format_flow.R +\name{format_outflow} +\alias{format_outflow} +\title{Format outflow data for each model} +\usage{ +format_outflow(outflow, model, config_file, folder = ".") +} +\arguments{ +\item{outflow}{dataframe; as read.csv() from standardised input.} + +\item{model}{character; Model for which scaling parameters will be applied. Options include +c('GOTM', 'GLM', 'Simstrat', 'FLake')} + +\item{config_file}{filepath; To LER config yaml file. Only used if model = 'GOTM'} + +\item{folder}{filepath; to folder which contains the model folders generated by export_config()} +} +\value{ +dataframe of met data in the model format +} +\description{ +Format dataframe into shape for the specified model +} From 86a3f473ff7a9ad66f7f3d657a6df896d0c1a395 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 26 Oct 2020 12:18:22 +0100 Subject: [PATCH 13/89] fixed missing line in createing netcdf file --- R/run_ensemble.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/run_ensemble.R b/R/run_ensemble.R index cfe54e6c..1e61fdcf 100644 --- a/R/run_ensemble.R +++ b/R/run_ensemble.R @@ -184,7 +184,7 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak } if("w_level" %in% out_vars){ - sal_list <- setNames( + wlvl_list <- setNames( lapply(model, function(mod_name) model_out[[mod_name]][["_w_level"]]), paste0(model, "_w_level") ) @@ -196,6 +196,7 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak if(exists("ice_list")) all_lists[["ice_list"]] <- ice_list if(exists("dens_list")) all_lists[["dens_list"]] <- dens_list if(exists("sal_list")) all_lists[["sal_list"]] <- sal_list + if(exists("wlvl_list")) all_lists[["wlvl_list"]] <- wlvl_list if(format == "netcdf") { if (!add & !file.exists(out_file)) { From 55493ae39c1f3c67f0541baf8c0658099b5e07f6 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 26 Oct 2020 12:23:08 +0100 Subject: [PATCH 14/89] fixed another small error --- R/run_ensemble.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/run_ensemble.R b/R/run_ensemble.R index 1e61fdcf..bd498217 100644 --- a/R/run_ensemble.R +++ b/R/run_ensemble.R @@ -185,13 +185,13 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak if("w_level" %in% out_vars){ wlvl_list <- setNames( - lapply(model, function(mod_name) model_out[[mod_name]][["_w_level"]]), + lapply(model, function(mod_name) model_out[[mod_name]][["w_level"]]), paste0(model, "_w_level") ) } # Put all lists with output into a single, named list - all_lists <- NULL + all_lists <- list() if(exists("temp_list")) all_lists[["temp_list"]] <- temp_list if(exists("ice_list")) all_lists[["ice_list"]] <- ice_list if(exists("dens_list")) all_lists[["dens_list"]] <- dens_list From c265056929ad09ca7aa8868905c2e73e44a57719 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 26 Oct 2020 12:42:38 +0100 Subject: [PATCH 15/89] fixed problem in dic and updated control file --- data/lake_var_dic.rda | Bin 402 -> 355 bytes inst/extdata/feeagh/LakeEnsemblR.yaml | 10 ++++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/data/lake_var_dic.rda b/data/lake_var_dic.rda index 70ee886b43cae9495f8931051f06a37c6751d367..b8c2fef27a2ee44d0e879a41be2741265de8347a 100644 GIT binary patch delta 342 zcmV-c0jd6y1LFb_LRx4!F+o`-Q&}G9q|^Was*w>Ge>m2(MAT|%^&3R>G}@0KfMgm5 zO%F{*8k(o3(KMcu)IC53fB*mk)Cm-VWMWKd0Mktw10&KNp_9rWsB@TTsz~NwK`~m{ zWwJ&F+wP?!bH3gY0z~a(W-UAUuoptEQ!6;d3NXn}tW!sdkPd+fi6#wWax^4P!7DYu z6iqLFe@QK&QSGy56Hm@ks>m8Q;@3D}=N*&j-myR;J5yMtjp{V5d7LGY9{@PDh2R`O zxcYUwF`B6$6GFcNZl#)6eP`%ozOr2RNz)K^4U9U8!2-|{EwM2wOfzys3XIx906`2Q zwjV|!iybLLD1N&Hc8w`bt}&VQZY9aC+DXjDJTkazdJ3gT#isJO<9D>Yt(C=Iom5{p o%`ezVU8dHt0U)5nl05*YCJPS{DHk8^10VRik}1N3fcHfvpa3$E$p8QV delta 389 zcmV;00eb%90+Is}LRx4!F+o`-Q(0w{&#wRh43QBSe|9inlu&7?PiQ7hN0MTCjD}2x znKV5;P-v#oJrvLnPyhe`0BF!8QV~B>CZkO z{(JVgX~p}U>%v1ws>?E02ZZsm89F0%xW^h`5 Date: Mon, 26 Oct 2020 13:03:23 +0100 Subject: [PATCH 16/89] enabled GOTM flexible water level --- R/create_netcdf_output.R | 94 +++++++++---------- R/export_flow.R | 14 +++ R/run_ensemble.R | 14 +++ inst/extdata/gotm_template.yaml | 157 ++++++++++++++++++++------------ 4 files changed, 173 insertions(+), 106 deletions(-) diff --git a/R/create_netcdf_output.R b/R/create_netcdf_output.R index 9eb1f6a2..057b4d70 100644 --- a/R/create_netcdf_output.R +++ b/R/create_netcdf_output.R @@ -22,14 +22,14 @@ create_netcdf_output <- function(output_lists, folder = ".", model, out_time, longitude = 0, latitude = 0, compression = 4, members = 25, out_file = "ensemble_output.nc"){ - + # Creat output directory if(!dir.exists(file.path(folder, "output"))) { message("Creating directory for output: ", file.path(folder, "output")) dir.create(file.path(folder, "output"), showWarnings = FALSE) } - - + + #Create ncdf message("Writing NetCDF file... [", Sys.time(), "]") ref_time <- as.POSIXct("1970-01-01 00:00:00", tz = "GMT") # Reference time for netCDF time @@ -40,82 +40,82 @@ create_netcdf_output <- function(output_lists, folder = ".", model, out_time, # Define lon and lat dimensions lon1 <- ncdf4::ncdim_def("lon", "degrees_east", vals = as.double(xvals)) lat2 <- ncdf4::ncdim_def("lat", "degrees_north", vals = as.double(yvals)) - + # Set dimensions # Time dimension timedim <- ncdf4::ncdim_def("time", units = "seconds since 1970-01-01 00:00:00", vals = as.double(nsecs), calendar = "proleptic_gregorian") - + # Define model dimensions mod_names <- c(model, "Obs") moddim <- ncdf4::ncdim_def("model", units = "-", vals = as.double(seq_len(length(mod_names)))) - + # Define member dimensions memdim <- ncdf4::ncdim_def("member", units = "", unlim = TRUE, - vals = as.double(1:members)) - + vals = as.double(seq_len(members))) + fillvalue <- 1e20 # Fill value missvalue <- 1e20 # Missing value - + nc_vars <- list() #Initialize empty list to fill netcdf variables - + for(i in seq_len(length(output_lists))){ # Get variable name (e.g. "temp" from "temp_list") splitted_name <- strsplit(names(output_lists[[i]])[1], "_")[[1]] variable_name <- paste(splitted_name[2:length(splitted_name)], collapse = "_") - + # Get variable unit (from dictionary) variable_unit <- lake_var_dic$unit[lake_var_dic$short_name == variable_name] - + # See if it"s 2D (e.g. ice height) or 3D (e.g. temperature) if(ncol(output_lists[[i]][[1]]) == 2){ # Add 2D variable - + # Define variable tmp_def <- ncdf4::ncvar_def(variable_name, variable_unit, list(lon1, lat2, memdim, moddim, timedim), fillvalue, variable_name, prec = "float", compression = compression, shuffle = FALSE) nc_vars[[length(nc_vars) + 1]] <- tmp_def # Add to list - + }else if(ncol(output_lists[[i]][[1]]) > 2){ # Add 3D variable - + lengths <- lapply(output_lists[[i]], ncol) # Extract ncols in each output lon_list <- which.max(lengths) # Select largest depths deps <- get.offsets(output_lists[[i]][[lon_list]]) # Extract depths - + # Depth dimension depthdim <- ncdf4::ncdim_def("z", units = "meters", vals = as.double((-deps)), longname = "Depth from surface") - + # Define variable tmp_def <- ncdf4::ncvar_def(variable_name, variable_unit, list(lon1, lat2, memdim, moddim, timedim, depthdim), fillvalue, variable_name, prec = "float", compression = compression, shuffle = FALSE) nc_vars[[length(nc_vars) + 1]] <- tmp_def # Add to list - + } - - + + } - + # Re-assign list names names(nc_vars)[(length(nc_vars) - length(output_lists) + 1):length(nc_vars)] <- names(output_lists) - + # Create file name for output file fname <- file.path(folder, "output", out_file) # Ensemble output filename - + # If file exists - delete it if(file.exists(fname)) { unlink(fname, recursive = TRUE) } - + # Create and input data into the netCDF file ncout <- ncdf4::nc_create(fname, nc_vars, force_v4 = T) # Add coordinates attribute for use with get_vari() @@ -123,67 +123,67 @@ create_netcdf_output <- function(output_lists, folder = ".", model, out_time, ncdf4::ncatt_put(ncout, "model", attname = "Model", attval = paste(seq_len(length(mod_names)), "-", mod_names, collapse = ", ")) ncdf4::ncatt_put(ncout, "member", attname = "member", attval = c(members)) - + # Loop through and add each variable # Add tryCatch ensure that it closes netCDF file result <- tryCatch({ # Again different for 2D or 3D variables for(i in seq_len(length(output_lists))){ - + if(ncol(output_lists[[i]][[1]]) == 2){ # Add 2D variable - + arr <- array(NA, dim = c((members), length(mod_names), length(nsecs))) - - + + for(j in seq_len(length(output_lists[[i]]))) { mat1 <- matrix(NA, nrow = nc_vars[[i]]$dim[[4]]$len, ncol = nc_vars[[i]]$dim[[5]]$len) - - + + mat <- as.matrix(output_lists[[i]][[j]][, -1]) - + splitted_name <- strsplit(names(output_lists[[i]])[j], "_")[[1]] m_name <- splitted_name[1] idx <- which(mod_names == m_name) - + arr[1, idx, ] <- mat } - + ncdf4::ncvar_put(ncout, nc_vars[[i]], arr) ncdf4::ncatt_put(ncout, nc_vars[[i]], attname = "coordinates", attval = c("lon lat model member")) ncdf4::ncvar_change_missval(ncout, nc_vars[[i]], missval = fillvalue) - + }else if(ncol(output_lists[[i]][[1]]) > 2){ # Add 3D variable - + arr <- array(NA, dim = c((members), length(mod_names), length(nsecs), length(deps))) - - + + for(j in seq_len(length(output_lists[[i]]))) { - + mat1 <- matrix(NA, nrow = nc_vars[[i]]$dim[[5]]$len, ncol = nc_vars[[i]]$dim[[6]]$len) - + # vector of depths to input into the matrix deps_tmp <- get.offsets(output_lists[[i]][[j]]) - + mat <- as.matrix(output_lists[[i]][[j]][, -1]) - + for(k in seq_len(ncol(mat))) { col <- which(deps == deps_tmp[k]) mat1[, col] <- mat[, k] } - + splitted_name <- strsplit(names(output_lists[[i]])[j], "_")[[1]] m_name <- splitted_name[1] idx <- which(mod_names == m_name) - + arr[1, idx, , ] <- mat1 } - + ncdf4::ncvar_put(nc = ncout, varid = nc_vars[[i]], vals = arr) ncdf4::ncatt_put(ncout, nc_vars[[i]], attname = "coordinates", attval = c("lon lat z model member")) @@ -199,7 +199,7 @@ create_netcdf_output <- function(output_lists, folder = ".", model, out_time, }, finally = { ncdf4::nc_close(ncout) # Close netCDF file }) - + message("Finished writing NetCDF file [", Sys.time(), "]") - + } diff --git a/R/export_flow.R b/R/export_flow.R index 3863d961..1b008150 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -138,8 +138,13 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # number of outflows in the yaml file so far num_outf_yaml <- length(grep("outflow\\_*\\d*:", yml_no_comment, value = TRUE)) + ## Switch off streams if(!use_inflows){ + # switch of flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 0) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 0) # remove all inflows but one if (num_inf_yaml > 1) { for (i in 2:(num_inf_yaml)) { @@ -170,6 +175,10 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } # set inflows if (use_inflows) { + # switch on flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) # remove additional inflows that are not needed if (num_inf_yaml > num_inflows) { for (i in 2:(num_inf_yaml)) { @@ -209,6 +218,11 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # set outflows if (use_outflows) { + if (use_inflows) { + # switch on flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) # remove additional outflows that are not needed if (num_outf_yaml > num_outflows) { for (i in 2:(num_outf_yaml)) { diff --git a/R/run_ensemble.R b/R/run_ensemble.R index bd498217..33ae9a17 100644 --- a/R/run_ensemble.R +++ b/R/run_ensemble.R @@ -47,6 +47,7 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak lakename <- get_yaml_value(config_file, "location", "name") obs_file <- get_yaml_value(config_file, "temperature", "file") ice_file <- get_yaml_value(config_file, "ice_height", "file") + wlvl_file <- get_yaml_value(config_file, "water_level", "file") # Get output configurations out_file <- get_yaml_value(config_file, "output", "file") @@ -107,7 +108,20 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak ice_out <- NULL } + if(!(wlvl_file == "NULL" | ice_file == "")){ + message("Loading ice observations...") + wlvl <- read.csv(wlvl_file, stringsAsFactors = FALSE) + message("Finished loading water level observations!") + + wlvl$datetime <- as.POSIXct(wlvl$datetime) + + # Subset to out_time + wlvl_out <- wlvl[wlvl$datetime %in% out_time$datetime, ] + wlvl_out <- merge(out_time, wlvl_out, by = "datetime", all.x = TRUE) + }else{ + wlvl_out <- NULL + } run_model_args <- list(config_file = config_file, folder = folder, return_list = return_list, diff --git a/inst/extdata/gotm_template.yaml b/inst/extdata/gotm_template.yaml index e1e5baef..a651260e 100644 --- a/inst/extdata/gotm_template.yaml +++ b/inst/extdata/gotm_template.yaml @@ -1,24 +1,24 @@ title: GOTM Simulation # simulation title used in output [default=GOTM simulation] (Code /LER/ means that this is overwritten by settings in the LakeEnsemblR master config file) location: - name: Feeagh # /LER/ station name used in output [default=GOTM site] - latitude: 53.9 # /LER/ latitude [degrees North; min=-90.0; max=90.0; default=0.0] - longitude: -9.5 # /LER/ longitude [degrees East; min=-360.0; max=360.0; default=0.0] - depth: 46 # /LER/ water depth [m; min=0.0; default=100.0] - hypsograph: hypsograph.dat # /LER/ hypsograph [default=] + name: Feeagh # /LER/ station name used in output [default=GOTM site] + latitude: 53.9 # /LER/ latitude [degrees North; min=-90.0; max=90.0; default=0.0] + longitude: -9.5 # /LER/ longitude [degrees East; min=-360.0; max=360.0; default=0.0] + depth: 46.8 # /LER/ water depth [m; min=0.0; default=100.0] + hypsograph: hypsograph.dat # /LER/ hypsograph [default=] time: - start: 2010-01-01 00:00:00 # /LER/ start date and time [yyyy-mm-dd HH:MM:SS; default=2017-01-01 00:00:00] - stop: 2011-01-01 00:00:00 # /LER/ stop date and time [yyyy-mm-dd HH:MM:SS; default=2018-01-01 00:00:00] - dt: 86400 # /LER/ time step for integration [s; min=0.0; default=3600.0] + start: 2010-01-01 00:00:00 # /LER/ start date and time [yyyy-mm-dd HH:MM:SS; default=2017-01-01 00:00:00] + stop: 2011-01-01 00:00:00 # /LER/ stop date and time [yyyy-mm-dd HH:MM:SS; default=2018-01-01 00:00:00] + dt: 3600 # /LER/ time step for integration [s; min=0.0; default=3600.0] grid: - nlev: 100 # /LER/ number of layers [min=1; default=100] + nlev: 94 # /LER/ number of layers [min=1; default=100] method: 0 # layer thicknesses [0=equal by default with optional zooming, 1=prescribed relative fractions, 2=prescribed thicknesses; default=0] ddu: 0.0 # surface zooming [dimensionless; min=0.0; default=0.0] ddl: 0.0 # bottom zooming [dimensionless; min=0.0; default=0.0] file: # file with custom grid [default=] temperature: # temperature profile used for initialization and optionally relaxation - method: 2 # /LER/ method [0=off, 1=analytical, 2=from file; default=0] - file: init_cond.dat # /LER/ path to file with series of profiles [default=] - column: 1 # /LER/ index of column to read from [default=1] + method: 2 # /LER/ method [0=off, 1=analytical, 2=from file; default=0] + file: init_cond.dat # /LER/ path to file with series of profiles [default=] + column: 1 # /LER/ index of column to read from [default=1] analytical: method: 1 # type of analytical initial temperature profile [1=constant, 2=two layers, 3=from salinity and buoyancy frequency; default=1] z_t1: 30.0 # upper layer thickness [m; min=0.0; default=0.0] @@ -68,53 +68,53 @@ surface: u10: # wind speed in West-East direction @ 10 m method: 2 # method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [m/s; default=0.0] - file: meteo_file.dat # path to file with time series [default=] - column: 1 # index of column to read from [default=1] - scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] + file: meteo_file.dat # path to file with time series [default=] + column: 1 # index of column to read from [default=1] + scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] v10: # wind speed in South-North direction @ 10 m method: 2 # method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [m/s; default=0.0] - file: meteo_file.dat # path to file with time series [default=] - column: 2 # index of column to read from [default=1] - scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] + file: meteo_file.dat # path to file with time series [default=] + column: 2 # index of column to read from [default=1] + scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] airp: # air pressure method: 2 # method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [Pa; default=0.0] - file: meteo_file.dat # path to file with time series [default=] - column: 3 # index of column to read from [default=1] - scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] + file: meteo_file.dat # path to file with time series [default=] + column: 3 # index of column to read from [default=1] + scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] airt: # air temperature @ 2 m method: 2 # method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [Celsius or K; default=0.0] - file: meteo_file.dat # path to file with time series [default=] - column: 4 # index of column to read from [default=1] - scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] + file: meteo_file.dat # path to file with time series [default=] + column: 4 # index of column to read from [default=1] + scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] hum: # humidity @ 2 m method: 2 # method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [default=0.0] - file: meteo_file.dat # path to file with time series [default=] - column: 5 # index of column to read from [default=1] - type: 1 # humidity metric [1=relative humidity (%), 2=wet-bulb temperature, 3=dew point temperature, 4=specific humidity (kg/kg); default=1] - scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] + file: meteo_file.dat # path to file with time series [default=] + column: 5 # index of column to read from [default=1] + type: 1 # humidity metric [1=relative humidity (%), 2=wet-bulb temperature, 3=dew point temperature, 4=specific humidity (kg/kg); default=1] + scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] cloud: # cloud cover method: 2 # method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [fraction; min=0.0; max=1.0; default=0.0] - file: meteo_file.dat # path to file with time series [default=] - column: 6 # index of column to read from [default=1] - scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] + file: meteo_file.dat # path to file with time series [default=] + column: 6 # index of column to read from [default=1] + scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] swr: # shortwave radiation method: 2 # method [0=constant, 2=from file, 3=from time, location and cloud cover; default=0] constant_value: 0.0 # value to use throughout the simulation [W/m^2; min=0.0; default=0.0] - file: meteo_file.dat # path to file with time series [default=] - column: 7 # index of column to read from [default=1] - scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] + file: meteo_file.dat # path to file with time series [default=] + column: 7 # index of column to read from [default=1] + scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] precip: # precipitation method: 2 # method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [m/s; default=0.0] - file: meteo_file.dat # path to file with time series [default=] - column: 8 # index of column to read from [default=1] + file: meteo_file.dat # path to file with time series [default=] + column: 8 # index of column to read from [default=1] flux_impact: true # include effect on fluxes of sensible heat and momentum [default=false] - scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] + scale_factor: 1 # scale factor to be applied to values read from file [default=1.0] calc_evaporation: true # calculate evaporation from meteorological conditions [default=false] ssuv_method: 0 # wind treatment [0=use absolute wind speed, 1=use wind speed relative to current velocity; default=1] longwave_radiation: # net longwave radiation @@ -125,7 +125,7 @@ surface: method: 1 # method to compute albedo [0=constant, 1=Payne (1972), 2=Cogley (1979); default=1] constant_value: 0.0 # constant value to use throughout the simulation [fraction; min=0.0; max=1.0; default=0.0] ice: - model: 0 # /LER/ model [0=none, 1=Lebedev (1938), 2=MyLake, 3=Winton; default=0] + model: 2 # /LER/ model [0=none, 1=Lebedev (1938), 2=MyLake, 3=Winton; default=0] H: 0.0 # initial ice thickness [m; default=0.0] roughness: charnock: false # use Charnock (1955) roughness adaptation [default=false] @@ -146,8 +146,8 @@ light_extinction: file: # path to file with time series [default=] column: 1 # index of column to read from [default=1] g2: # e-folding depth of visible shortwave radiation - method: 0 # /LER/ method [0=constant, 2=from file; default=0] - constant_value: 2.0 # /LER/ value to use throughout the simulation [m; min=0.0; default=8.0] + method: 0 # /LER/ method [0=constant, 2=from file; default=0] + constant_value: 1.02040816326531 # /LER/ value to use throughout the simulation [m; min=0.0; default=8.0] file: # /LER/ path to file with time series [default=] column: 1 # /LER/ index of column to read from [default=1] turbulence: @@ -167,7 +167,7 @@ turbulence: galp: 0.27 # coefficient for length scale limitation [dimensionless; min=0.0; default=0.27] const_num: 5.00000000E-04 # constant eddy diffusivity [m^2/s; min=0.0; default=5.00000000E-04] const_nuh: 5.00000000E-04 # constant heat diffusivity [m^2/s; min=0.0; default=5.00000000E-04] - k_min: 3.60000000E-06 # minimum turbulent kinetic energy [m^2/s^2; min=0.0; default=1.00000000E-10] + k_min: 3.6e-06 # minimum turbulent kinetic energy [m^2/s^2; min=0.0; default=1.00000000E-10] eps_min: 1.00000000E-12 # minimum dissipation rate [m^2/s^3; min=0.0; default=1.00000000E-12] kb_min: 1.00000000E-10 # minimum buoyancy variance [m^2/s^4; min=0.0; default=1.00000000E-10] epsb_min: 1.00000000E-14 # minimum buoyancy variance destruction rate [m^2/s^5; min=0.0; default=1.00000000E-14] @@ -240,7 +240,7 @@ mimic_3d: # effects of horizontal gradients t_adv: false # horizontally advect temperature [default=false] s_adv: false # horizontally advect salinity [default=false] zeta: # surface elevation - method: 0 # method [0=constant, 1=from tidal constituents, 2=from file; default=0] + method: 3 # method [0=constant, 1=from tidal constituents, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [m; default=0.0] file: # path to file with time series [default=] column: 1 # index of column to read from [default=1] @@ -263,6 +263,7 @@ mimic_3d: # effects of horizontal gradients file: # path to file with time series [default=] column: 1 # index of column to read from [default=1] adv_discr: 6 # vertical advection scheme [1=first-order upstream, 3=third-order upstream-biased polynomial, 4=third-order TVD with Superbee limiter, 5=third-order TVD with MUSCL limiter, 6=third-order TVD with ULTIMATE QUICKEST limiter; default=6] +water_balance_method: 3 velocities: # observed/prescribed horizontal velocities u: # velocity in West-East direction method: 0 # method [0=off, 2=from file; default=0] @@ -284,38 +285,76 @@ streams: zu: 0.0 # upper limit [m; default=0.0] zl: 0.0 # lower limit [m; default=0.0] flow: # water flow - method: 2 # /LER/ method [0=constant, 2=from file; default=0] + method: 2 # /LER/ method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [m^3/s; default=0.0] - file: inflow_file.dat # path to file with time series [default=] + file: inflow_file_1.dat # path to file with time series [default=] column: 1 # index of column to read from [default=1] temp: # flow temperature - method: 2 # /LER/ method [0=constant, 2=from file; default=0] + method: 2 # /LER/ method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [Celcius; default=-1.0] - file: inflow_file.dat # path to file with time series [default=] + file: inflow_file_1.dat # path to file with time series [default=] column: 2 # index of column to read from [default=1] salt: # flow salinity - method: 2 # /LER/ method [0=constant, 2=from file; default=0] + method: 2 # /LER/ method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [PSU; default=-1.0] - file: inflow_file.dat # path to file with time series [default=] + file: inflow_file_1.dat # path to file with time series [default=] column: 3 # index of column to read from [default=1] outflow: # outflow configuration - method: 1 # inflow method [default=1] - zu: 0.0 # upper limit [m; default=0.0] - zl: 0.0 # lower limit [m; default=0.0] + method: 1 # inflow method [default=1] + zu: -47.3 # upper limit [m; default=0.0] + zl: -48.3 # lower limit [m; default=0.0] + flow: # water flow + method: 2 # /LER/ method [0=constant, 2=from file; default=0] + constant_value: 0.0 # value to use throughout the simulation [m^3/s; default=0.0] + file: outflow_file_1.dat # path to file with time series [default=] + column: 1 # index of column to read from [default=1] + temp: # flow temperature + method: 0 # /LER/ method [0=constant, 2=from file; default=0] + constant_value: -1.0 # value to use throughout the simulation [Celcius; default=-1.0] + file: outflow_file_1.dat # path to file with time series [default=] + column: 2 # index of column to read from [default=1] + salt: # flow salinity + method: 0 # /LER/ method [0=constant, 2=from file; default=0] + constant_value: -1.0 # value to use throughout the simulation [PSU; default=-1.0] + file: outflow_file_1.dat # path to file with time series [default=] + column: 3 # index of column to read from [default=1] + outflow_2: # outflow_2 configuration + method: 3 # inflow method [default=1] + zu: -31.3 # upper limit [m; default=0.0] + zl: -32.3 # lower limit [m; default=0.0] + flow: # water flow + method: 2 # /LER/ method [0=constant, 2=from file; default=0] + constant_value: 0.0 # value to use throughout the simulation [m^3/s; default=0.0] + file: outflow_file_2.dat # path to file with time series [default=] + column: 1 # index of column to read from [default=1] + temp: # flow temperature + method: 0 # /LER/ method [0=constant, 2=from file; default=0] + constant_value: -1.0 # value to use throughout the simulation [Celcius; default=-1.0] + file: outflow_file_2.dat # path to file with time series [default=] + column: 2 # index of column to read from [default=1] + salt: # flow salinity + method: 0 # /LER/ method [0=constant, 2=from file; default=0] + constant_value: -1.0 # value to use throughout the simulation [PSU; default=-1.0] + file: outflow_file_2.dat # path to file with time series [default=] + column: 3 # index of column to read from [default=1] + outflow_2: # outflow_2 configuration + method: 3 # inflow method [default=1] + zu: -31.3 # upper limit [m; default=0.0] + zl: -32.3 # lower limit [m; default=0.0] flow: # water flow - method: 0 # /LER/ method [0=constant, 2=from file; default=0] + method: 2 # /LER/ method [0=constant, 2=from file; default=0] constant_value: 0.0 # value to use throughout the simulation [m^3/s; default=0.0] - file: outflow_file.dat # path to file with time series [default=] + file: outflow_file_2.dat # path to file with time series [default=] column: 1 # index of column to read from [default=1] temp: # flow temperature - method: 0 # /LER/ method [0=constant, 2=from file; default=0] + method: 0 # /LER/ method [0=constant, 2=from file; default=0] constant_value: -1.0 # value to use throughout the simulation [Celcius; default=-1.0] - file: outflow_file.dat # path to file with time series [default=] + file: outflow_file_2.dat # path to file with time series [default=] column: 2 # index of column to read from [default=1] salt: # flow salinity - method: 0 # /LER/ method [0=constant, 2=from file; default=0] + method: 0 # /LER/ method [0=constant, 2=from file; default=0] constant_value: -1.0 # value to use throughout the simulation [PSU; default=-1.0] - file: outflow_file.dat # path to file with time series [default=] + file: outflow_file_2.dat # path to file with time series [default=] column: 3 # index of column to read from [default=1] physical_constants: rho_0: 1000.0 # reference density [kg/m^3; min=0.0; default=1027.0] @@ -342,10 +381,10 @@ restart: load: false # initialize simulation with state stored in restart.nc [default=false] output: output: # path of output file, excluding extension - format: netcdf # format [text, netcdf; default=netcdf] + format: netcdf # format [text, netcdf; default=netcdf] time_unit: day # time unit [second, hour, day, month, year, dt=model time step; default=day] time_step: 1 # number of time units between output [min=1; default=1] - time_method: mean # treatment of time dimension [point=instantaneous, mean, integrated; default=point] + time_method: mean # treatment of time dimension [point=instantaneous, mean, integrated; default=point] sync_interval: 0 # number of output steps between sychronization to disk (<= 0: sync on close only) [default=1] variables: - source: /* # variable name in model From b83683be8da7c1ea864b58d4dc0e1587a00c8059 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 26 Oct 2020 13:06:37 +0100 Subject: [PATCH 17/89] added water level to observed variables --- R/run_ensemble.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/R/run_ensemble.R b/R/run_ensemble.R index 33ae9a17..4c78fcbb 100644 --- a/R/run_ensemble.R +++ b/R/run_ensemble.R @@ -202,6 +202,9 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak lapply(model, function(mod_name) model_out[[mod_name]][["w_level"]]), paste0(model, "_w_level") ) + if(!is.null(wlvl_out)){ + wlvl_list <- append(wlvl_list, list("Obs_w_level" = wlvl_out)) + } } # Put all lists with output into a single, named list From 300430b051976361d1bcd9d90072822419f3ca01 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 26 Oct 2020 14:56:47 +0100 Subject: [PATCH 18/89] fixed missing bracket and small cosmetic issues --- R/export_flow.R | 1 + R/run_ensemble.R | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 1b008150..363e3b4c 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -267,6 +267,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa "file", value = paste0("outflow_file_", i, ".dat")) } } + } } ##---------------Simstrat------------- diff --git a/R/run_ensemble.R b/R/run_ensemble.R index 4c78fcbb..1c68af85 100644 --- a/R/run_ensemble.R +++ b/R/run_ensemble.R @@ -9,7 +9,8 @@ #' @param verbose Boolean; Should model output be shown in the console. Defaults to FALSE #' @param parallel Boolean; should the model calibration be parallelized #' @param return_list boolean; Return a list of dataframes of model output. Defaults to FALSE -#' @param create_output boolean; Create ensemble output file otherwise it just runs the models and generates model output in their respective folders. Defaults to TRUE +#' @param create_output boolean; Create ensemble output file otherwise it just runs the models and +#' generates model output in their respective folders. Defaults to TRUE #' @param add boolean; Add results to an existing netcdf file with new dimension "member" #' @importFrom parallel detectCores parLapply clusterExport makeCluster stopCluster clusterEvalQ #' @importFrom gotmtools get_yaml_value get_vari @@ -227,7 +228,7 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak } else if (format == "text") { # Write to CSV - out_dir <- file.path(folder, 'output') + out_dir <- file.path(folder, "output") # Creat output directory if(!dir.exists(out_dir)) { @@ -248,8 +249,7 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak var <- all_lists[[x]][[y]] var[, -1] <- round(var[, -1], 2) # round to 2 digits to reduce filesize var[, 1] <- format(var[, 1], format = "%Y-%m-%d %H:%M:%S") - - write.csv(var , out_fname, row.names = FALSE, quote = FALSE) + write.csv(var, out_fname, row.names = FALSE, quote = FALSE) }) }) message("Finished writing '.csv' files! [", Sys.time(), "]") @@ -344,7 +344,7 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak #' @keywords internal .run_GOTM <- function(config_file, folder, return_list, create_output, start, stop, - verbose, obs_deps,out_time, out_vars){ + verbose, obs_deps, out_time, out_vars){ yaml_file <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) @@ -389,8 +389,8 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak unlink(file.path(folder, "Simstrat", "output", old_output), recursive = TRUE) - SimstratR::run_simstrat(sim_folder = file.path(folder, "Simstrat"), par_file = par_file, verbose = verbose) - + SimstratR::run_simstrat(sim_folder = file.path(folder, "Simstrat"), par_file = par_file, + verbose = verbose) message("Simstrat run is complete! ", paste0("[", Sys.time(), "]")) if(return_list | create_output){ From c5d06a4df36b72368ce75d37bc99c0a20287c562 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 10:34:25 +0100 Subject: [PATCH 19/89] fixed error with bracket, this time for real I hope --- R/export_flow.R | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 363e3b4c..ed451875 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -129,7 +129,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa ##---------------GOTM------------- - if("GOTM" %in% model){ + if("GOTM" %in% model) { got_yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) yml_no_comment <- unname(sapply(readLines(got_yaml), function(x) strsplit(x, "#")[[1]][1])) # number of inflows in the yaml file so far @@ -140,7 +140,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa ## Switch off streams - if(!use_inflows){ + if(!use_inflows) { # switch of flexible water level input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", value = 0) @@ -218,11 +218,10 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # set outflows if (use_outflows) { - if (use_inflows) { - # switch on flexible water level - input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", - value = 3) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + # switch on flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) # remove additional outflows that are not needed if (num_outf_yaml > num_outflows) { for (i in 2:(num_outf_yaml)) { @@ -268,7 +267,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } } } - } ##---------------Simstrat------------- From d68492ccef54b7ed7807047693beb330067c1ed2 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 10:43:29 +0100 Subject: [PATCH 20/89] added additional if to prevent double message --- R/export_flow.R | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index ed451875..c54ed7a4 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -218,10 +218,12 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # set outflows if (use_outflows) { - # switch on flexible water level - input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", - value = 3) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + if (!use_inflows) { + # switch on flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + } # remove additional outflows that are not needed if (num_outf_yaml > num_outflows) { for (i in 2:(num_outf_yaml)) { From f624848ae8d734316cb597d2c70a930983262998 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 10:54:50 +0100 Subject: [PATCH 21/89] added test so that additional flow sections for GOTM are only added if necessary --- R/export_flow.R | 1318 +++++++++++++++++++++++------------------------ 1 file changed, 659 insertions(+), 659 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index c54ed7a4..f9a5a748 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -1,659 +1,659 @@ -#' Export LakeEnsemblR standardised flow files to model specific driver format -#' -#' Export in- anbd out-flow driver files for each model -#' -#' @param config_file filepath; to LakeEnsemblr yaml master config file -#' @param model vector; model to export driving data. Options include -#' c("GOTM", "GLM", "Simstrat", "FLake", "MyLake") -#' @param folder filepath; to folder which contains the model folders generated by export_config() -#' -#' @examples -#' \dontrun{ -#' export_inflow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) -#' } -#' @importFrom gotmtools get_yaml_value calc_cc input_yaml -#' @importFrom glmtools read_nml set_nml write_nml -#' -#' @export -export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), - folder = ".") { - - # It's advisable to set timezone to GMT in order to avoid errors when reading time - original_tz <- Sys.getenv("TZ") - Sys.setenv(TZ = "UTC") - - # Set working directory - oldwd <- getwd() - setwd(folder) - - # this way if the function exits for any reason, success or failure, these are reset: - on.exit({ - setwd(oldwd) - Sys.setenv(TZ = original_tz) - }) - - # check model input - model <- check_models(model) - -##-------------Read settings--------------- - # initial water level - init_lvl <- get_yaml_value(config_file, "location", "init_depth") - # surface elevation - surf_lvl <- get_yaml_value(config_file, "location", "elevation") - # bottom elevation - bot_lvl <- surf_lvl - get_yaml_value(config_file, "location", "depth") - - # Get start & stop dates - start_date <- get_yaml_value(config_file, "time", "start") - stop_date <- get_yaml_value(config_file, "time", "stop") - - # Use inflows - use_inflows <- get_yaml_value(config_file, "inflows", "use") - # Use outflows - use_outflows <- get_yaml_value(config_file, "outflows", "use") - - tryCatch({get_yaml_value(config_file, "inflows", "mass-balance") - warning(paste0("The 'mass-balance' argument is no longer used ", - "if you would like to have outflows matching the ", - "inflows please add them manually to the 'outflows'", - " section. You can use the same file as for inflows."))}, - error = function(e) { }) - if(use_outflows) { - # number of outflows - num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") - # outflow depths - lvl_outflows <- get_yaml_value(config_file, "outflows", "outflow_lvl") - # Get scaling parameter - scale_param_out <- get_yaml_value(config_file, "outflows", "scale_param") - } - - if(use_inflows) { - # Get scaling parameter - scale_param_inf <- get_yaml_value(config_file, "inflows", "scale_param") - # number of inflows - num_inflows <- get_yaml_value(config_file, "inflows", "number_inflows") - } - - -##---------------FLake------------- - - if("FLake" %in% model){ - fla_fil <- file.path(folder, get_yaml_value(config_file, "config_files", "FLake")) - - if(!use_inflows){ - input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".false.") - }else{ - input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".true.") - } - } - -##---------------GLM------------- - - if("GLM" %in% model){ - glm_nml <- file.path(folder, get_yaml_value(config_file, "config_files", "GLM")) - - # Read in nml and input parameters - nml <- read_nml(glm_nml) - # if no inflow or outflow is used this list is keep otherwise it is changed - inp_list <- list("num_inflows" = 0, "num_outlet" = 0) - # set inflow - if (use_inflows) { - inp_list$num_inflows <- num_inflows - inp_list <- c(inp_list, list("names_of_strms" = paste0("inflow_", 1:num_inflows), - "strm_hf_angle" = rep(65, num_inflows), - "strmbd_slope" = rep(2, num_inflows), - "strmbd_drag" = rep(0.016, num_inflows), - "inflow_factor" = rep(1, num_inflows), - "inflow_fl" = paste0("inflow_", 1:num_inflows, ".csv"))) - } - - # set outflows - if (use_outflows){ - outf_surf <- rep(FALSE, num_outflows) - outf_surf[lvl_outflows == -1] <- TRUE - #!! outflow elevations need to be in meters above sea level!! - lvl_outflows_glm <- lvl_outflows + bot_lvl - # outflow lvl for floating outflows is set to 0 - lvl_outflows_glm[lvl_outflows == -1] <- 0 - inp_list$num_outlet <- num_outflows - inp_list <- c(inp_list, list("flt_off_sw" = outf_surf, - "outl_elvs" = lvl_outflows_glm, - "outflow_fl" = paste0("outflow_", 1:num_outflows, ".csv"), - "outflow_factor" = rep(1, num_outflows))) - } - - nml <- glmtools::set_nml(nml, arg_list = inp_list) - write_nml(nml, glm_nml) - - } - -##---------------GOTM------------- - - if("GOTM" %in% model) { - got_yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) - yml_no_comment <- unname(sapply(readLines(got_yaml), function(x) strsplit(x, "#")[[1]][1])) - # number of inflows in the yaml file so far - num_inf_yaml <- length(grep("inflow\\_*\\d*:", yml_no_comment, value = TRUE)) - - # number of outflows in the yaml file so far - num_outf_yaml <- length(grep("outflow\\_*\\d*:", yml_no_comment, value = TRUE)) - - - ## Switch off streams - if(!use_inflows) { - # switch of flexible water level - input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", - value = 0) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 0) - # remove all inflows but one - if (num_inf_yaml > 1) { - for (i in 2:(num_inf_yaml)) { - rm_yaml_sec(got_yaml, paste0("inflow_", i)) - } - } - # streams_switch(file = got_yaml, method = "off") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "flow", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "salt", key4 = - "method", value = 0) - } - if (!use_outflows) { - # remove all outflows but one - if (num_outf_yaml > 1) { - for (i in 2:(num_outf_yaml)) { - rm_yaml_sec(got_yaml, paste0("outflow_", i)) - } - } - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = - "method", value = 0) - } - # set inflows - if (use_inflows) { - # switch on flexible water level - input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", - value = 3) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) - # remove additional inflows that are not needed - if (num_inf_yaml > num_inflows) { - for (i in 2:(num_inf_yaml)) { - rm_yaml_sec(got_yaml, paste0("inflow_", i)) - } - } - # add additional inflows if necessary - if(num_inflows > 1) { - for (i in num_inflows:2) { - doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) - } - } - # set inflow settings for all inflows - for (i in 1:num_inflows) { - - if(i == 1) { - inf_sec <- "inflow" - } else { - inf_sec <- paste0("inflow_", i) - } - - # streams_switch(file = got_yaml, method = "on") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = - "file", value = paste0("inflow_file_", i, ".dat")) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = - "file", value = paste0("inflow_file_", i, ".dat")) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = - "file", value = paste0("inflow_file_", i, ".dat")) - } - } - - # set outflows - if (use_outflows) { - if (!use_inflows) { - # switch on flexible water level - input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", - value = 3) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) - } - # remove additional outflows that are not needed - if (num_outf_yaml > num_outflows) { - for (i in 2:(num_outf_yaml)) { - rm_yaml_sec(got_yaml, paste0("outflow_", i)) - } - } - outf_surf <- rep(FALSE, num_outflows) - outf_surf[lvl_outflows == -1] <- TRUE - # outflow lvl in GOTM are meters below initial surface lvl - lvl_outflows_gotm <- lvl_outflows - init_lvl - # add additional outflows if necessary - if(num_outflows > 1) { - for (i in num_outflows:2) { - doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) - } - } - # set outflow settings for all outflows - for (i in 1:num_outflows) { - if(i == 1) { - outf_sec <- "outflow" - } else { - outf_sec <- paste0("outflow_", i) - } - # streams_switch(file = got_yaml, method = "on") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "method", - value = ifelse(outf_surf[i], 1, 3)) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zl", - value = lvl_outflows_gotm[i] - 0.5) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zu", - value = lvl_outflows_gotm[i] + 0.5) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = - "file", value = paste0("outflow_file_", i, ".dat")) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = - "file", value = paste0("outflow_file_", i, ".dat")) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = - "file", value = paste0("outflow_file_", i, ".dat")) - } - } - } - -##---------------Simstrat------------- - - if("Simstrat" %in% model){ - sim_par <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - # Turn off inflow - if(!use_inflows){ - ## Set Qin and Qout to 0 inflow - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - # In case Kw is a single value for the whole simulation: - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - start_sim <- get_json_value(sim_par, "Simulation", "Start d") - end_sim <- get_json_value(sim_par, "Simulation", "End d") - inflow_line_4 <- paste(start_sim, 0.000) - inflow_line_5 <- paste(end_sim, 0.000) - - file_connection <- file("Simstrat/Qin.dat") - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), - file_connection) - close(file_connection) - file_connection <- file("Simstrat/Qout.dat") - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), - file_connection) - close(file_connection) - } - if(!use_outflows){ - outflow_outfile <- "Qout.dat" - - outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) - - outflow_line_1 <- "Time [d]\tQ_out [m3/s]" - outflow_line_2 <- "1" - outflow_line_3 <- "-1 0.00" - start_sim <- get_json_value(sim_par, "Simulation", "Start d") - end_sim <- get_json_value(sim_par, "Simulation", "End d") - outflow_line_4 <- paste(start_sim, 0.000) - outflow_line_5 <- paste(end_sim, 0.000) - file_connection <- file(outflow_outfpath) - writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4, - outflow_line_5), file_connection) - close(file_connection) - } - } - -##---------------MyLake------------- - - if("MyLake" %in% model){ - # Load config file MyLake - load(get_yaml_value(config_file, "config_files", "MyLake")) - - if(!use_inflows){ - mylake_config[["Inflw"]] <- matrix(rep(0, 8 * length(seq.POSIXt(from = as.POSIXct(start_date), - to = as.POSIXct(stop_date), - by = "day"))), - ncol = 8) - - # save lake-specific config file for MyLake - temp_fil <- gsub(".*/", "", get_yaml_value(config_file, "config_files", "MyLake")) - save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) - } - } - -##-------------If inflow == TRUE--------------- - - if(use_inflows == TRUE){ - inflow_file <- get_yaml_value(file = config_file, label = "inflows", key = "file") - # Check if file exists - if(!file.exists(inflow_file)){ - stop(inflow_file, " does not exist. Check filepath in ", config_file) - } - ### Import data - message("Loading inflow data...") - inflow <- read.csv(file.path(folder, inflow_file), stringsAsFactors = FALSE) - inflow[, 1] <- as.POSIXct(inflow[, 1]) - start_date <- get_yaml_value(config_file, "time", "start") - # Stop date - stop_date <- get_yaml_value(config_file, "time", "stop") - inflow_start <- which(inflow$datetime == as.POSIXct(start_date)) - inflow_stop <- which(inflow$datetime == as.POSIXct(stop_date)) - inflow <- inflow[inflow_start:inflow_stop, ] - - ### Naming conventions standard input - chk_names_flow(inflow, num_inflows, inflow_file) - - ### Apply scaling - inflow <- scale_flow(inflow, num_inflows, scale_param_inf) - - # if multiple inflows are present put them in a list - if(num_inflows > 1) { - inflow_ls <- list() - for (i in 1:num_inflows) { - inflow_ls[[paste0("inflow_", i)]] <- - data.frame(datetime = inflow$datetime, - Flow_metersCubedPerSecond = inflow[[paste0("Flow_metersCubedPerSecond_", i)]], - Water_Temperature_celsius = inflow[[paste0("Water_Temperature_celsius_", i)]], - Salinity_practicalSalinityUnits = - inflow[[paste0("Salinity_practicalSalinityUnits_", i)]] - ) - } - inflow <- inflow_ls - rm(inflow_ls) - } else { - inflow <- list(inflow_1 = inflow) - } - - ##### FLake - if("FLake" %in% model){ - - - flake_inflow <- format_inflow(inflow = inflow, model = "FLake", config_file = config_file) - - flake_outfile <- "Tinflow" - - flake_outfpath <- file.path(folder, "FLake", flake_outfile) - - write.table(flake_inflow, flake_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = FALSE) - - - temp_fil <- get_yaml_value(config_file, "config_files", "FLake") - input_nml(temp_fil, label = "inflow", key = "time_step_number", nrow(flake_inflow)) - - message("FLake: Created file ", file.path(folder, "FLake", flake_outfile)) - - if(use_outflows){ - message("FLake does not need outflows, as mass fluxes are not considered.") - } - - } - - ###### GLM - if("GLM" %in% model){ - for (i in 1:num_inflows) { - glm_inflow <- format_inflow(inflow = inflow[[i]], model = "GLM", - config_file = config_file) - - inflow_outfile <- file.path("GLM", paste0("inflow_", i, ".csv")) - write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created file ", file.path(folder, "GLM", paste0("inflow_", i, ".csv"))) - } - } - - ##### GOTM - if("GOTM" %in% model){ - - for (i in 1:num_inflows) { - gotm_outfile <- paste0("inflow_file_", i, ".dat") - gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - gotm_inflow <- format_inflow(inflow[[i]], model = "GOTM", config_file = config_file) - - write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = TRUE) - - message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) - } - - } - - ## Simstrat - if("Simstrat" %in% model){ - # output file names - inflow_outfile <- "Qin.dat" - temp_outfile <- "Tin.dat" - salt_outfile <- "Sin.dat" - # output file paths - inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) - temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) - salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) - - sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) - - ## inflow file - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - inflow_line_2 <- as.character(num_inflows) - inflow_line_3 <- paste0("-1", rep(" 0.00", num_inflows)) - if(num_inflows > 1) { - inflow_line_4 <- seq_len(length(sim_inflow$datetime)) - for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, - sim_inflow[, paste0("Flow_metersCubedPerSecond_", i)]) - } - } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), - sim_inflow$Flow_metersCubedPerSecond) - } - file_connection <- file(inflow_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) - close(file_connection) - # temperature file - inflow_line_1 <- "Time [d]\tT_in [degC]" - if(num_inflows > 1) { - inflow_line_4 <- seq_len(length(sim_inflow$datetime)) - for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, - sim_inflow[, paste0("Water_Temperature_celsius_", i)]) - } - } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), - sim_inflow$Water_Temperature_celsius) - } - file_connection <- file(temp_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) - close(file_connection) - # salinity file - inflow_line_1 <- "Time [d]\tS_in [perMille]" - if(num_inflows > 1) { - inflow_line_4 <- seq_len(length(sim_inflow$datetime)) - for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, - sim_inflow[, paste0("Salinity_practicalSalinityUnits_", i)]) - } - } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), - sim_inflow$Salinity_practicalSalinityUnits) - } - file_connection <- file(salt_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) - } - - ## MyLake - if("MyLake" %in% model){ - - temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") - load(temp_fil) - - mylake_inflow <- format_inflow(inflow = inflow, model = "MyLake", - config_file = config_file) - - # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive - # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] - dummy_inflow <- matrix(rep(1e-10, 8 * - length(seq.POSIXt(from = as.POSIXct(start_date), - to = as.POSIXct(stop_date), - by = "day"))), - ncol = 8) - dummy_inflow[, 1] <- mylake_inflow$Flow_metersCubedPerDay - dummy_inflow[, 2] <- mylake_inflow$Water_Temperature_celsius - dummy_inflow[, 5] <- dummy_inflow[, 5] * 1e7 - dummy_inflow[, 6] <- dummy_inflow[, 6] * 1e1 - - - mylake_config[["Inflw"]] <- dummy_inflow - - temp_fil <- gsub(".*/", "", temp_fil) - # save lake-specific config file for MyLake - save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) - - message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) - - } - } - - ##-------------If outflow == TRUE--------------- - - if(use_outflows == TRUE) { - - outflow_file <- get_yaml_value(file = config_file, label = "outflows", key = "file") - # Check if file exists - if(!file.exists(outflow_file)){ - stop(outflow_file, " does not exist. Check filepath in ", config_file) - } - - ### Import data - message("Loading outflow data...") - outflow <- read.csv(file.path(folder, outflow_file), stringsAsFactors = FALSE) - outflow[, 1] <- as.POSIXct(outflow[, 1]) - - start_date <- get_yaml_value(config_file, "time", "start") - # Stop date - stop_date <- get_yaml_value(config_file, "time", "stop") - - outflow_start <- which(outflow$datetime == as.POSIXct(start_date)) - outflow_stop <- which(outflow$datetime == as.POSIXct(stop_date)) - - outflow <- outflow[outflow_start:outflow_stop, ] - - ### Naming conventions standard input - chk_names_flow(outflow, num_outflows, outflow_file) - - ### Apply scaling - outflow <- scale_flow(outflow, num_outflows, scale_param_out) - - # if multiple outflows are present put them in a list - if(num_outflows > 1) { - outflow_ls <- list() - for (i in 1:num_outflows) { - outflow_ls[[paste0("outflow_", i)]] <- - data.frame(datetime = outflow$datetime, - Flow_metersCubedPerSecond = outflow[[paste0("Flow_metersCubedPerSecond_", i)]]) - } - outflow <- outflow_ls - rm(outflow_ls) - } else { - outflow <- list(outflow_1 = outflow) - } - - # FLake - ##### - if("FLake" %in% model) { - message("FLake does not need outflows, as mass fluxes are not considered.") - } - - # GLM - ##### - if("GLM" %in% model) { - for (i in 1:num_outflows) { - glm_outflow <- format_outflow(outflow = outflow[[i]], model = "GLM", - config_file = config_file) - - outflow_outfile <- file.path("GLM", paste0("outflow_", i, ".csv")) - write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created file ", file.path(folder, "GLM", paste0("outflow_", i, ".csv"))) - } - } - - ## GOTM - if("GOTM" %in% model) { - - for (i in 1:num_outflows) { - - gotm_outfile <- paste0("outflow_file_", i, ".dat") - - gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - - gotm_outflow <- format_outflow(outflow[[i]], model = "GOTM", config_file = config_file) - write.table(gotm_outflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = TRUE) - - message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) - } - } - - ## Simstrat - if("Simstrat" %in% model) { - - outf_surf <- rep(FALSE, num_outflows) - outf_surf[lvl_outflows == -1] <- TRUE - #!! outflow elevations need to be relative to initial water level!! - lvl_outflows_simstrat <- lvl_outflows - init_lvl - lvl_outflows_simstrat[outf_surf] <- 0 - - outflow_outfile <- "Qout.dat" - - outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) - sim_outflow <- format_outflow(outflow, "Simstrat", config_file, folder) - ## inflow file - outflow_line_1 <- "Time [d]\tQ_out [m3/s]" - outflow_line_2 <- paste0(as.character(sum(!outf_surf)), " ", as.character(sum(outf_surf))) - outflow_line_3 <- paste("-1", lvl_outflows_simstrat[!outf_surf], - lvl_outflows_simstrat[outf_surf]) - if(num_outflows > 1) { - outflow_line_4 <- seq_len(length(sim_outflow$datetime)) - # first the deep outflows - for (i in ((1:num_outflows)[!outf_surf])) { - outflow_line_4 <- paste(outflow_line_4, - sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) - } - # then the surface oputflows - for (i in ((1:num_outflows)[outf_surf])) { - outflow_line_4 <- paste(outflow_line_4, - sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) - } - } else { - outflow_line_4 <- paste(seq_len(length(sim_outflow$datetime)), - sim_outflow$Flow_metersCubedPerSecond) - } - file_connection <- file(outflow_outfpath) - writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4), file_connection) - close(file_connection) - - message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) - } - - ## MyLake - if("MyLake" %in% model) { - - message("MyLake does not need specific outflows, as it employs automatic overflow.") - } - - - message("export_inflow complete!") - } -} +#' Export LakeEnsemblR standardised flow files to model specific driver format +#' +#' Export in- anbd out-flow driver files for each model +#' +#' @param config_file filepath; to LakeEnsemblr yaml master config file +#' @param model vector; model to export driving data. Options include +#' c("GOTM", "GLM", "Simstrat", "FLake", "MyLake") +#' @param folder filepath; to folder which contains the model folders generated by export_config() +#' +#' @examples +#' \dontrun{ +#' export_inflow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) +#' } +#' @importFrom gotmtools get_yaml_value calc_cc input_yaml +#' @importFrom glmtools read_nml set_nml write_nml +#' +#' @export +export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), + folder = ".") { + + # It's advisable to set timezone to GMT in order to avoid errors when reading time + original_tz <- Sys.getenv("TZ") + Sys.setenv(TZ = "UTC") + + # Set working directory + oldwd <- getwd() + setwd(folder) + + # this way if the function exits for any reason, success or failure, these are reset: + on.exit({ + setwd(oldwd) + Sys.setenv(TZ = original_tz) + }) + + # check model input + model <- check_models(model) + +##-------------Read settings--------------- + # initial water level + init_lvl <- get_yaml_value(config_file, "location", "init_depth") + # surface elevation + surf_lvl <- get_yaml_value(config_file, "location", "elevation") + # bottom elevation + bot_lvl <- surf_lvl - get_yaml_value(config_file, "location", "depth") + + # Get start & stop dates + start_date <- get_yaml_value(config_file, "time", "start") + stop_date <- get_yaml_value(config_file, "time", "stop") + + # Use inflows + use_inflows <- get_yaml_value(config_file, "inflows", "use") + # Use outflows + use_outflows <- get_yaml_value(config_file, "outflows", "use") + + tryCatch({get_yaml_value(config_file, "inflows", "mass-balance") + warning(paste0("The 'mass-balance' argument is no longer used ", + "if you would like to have outflows matching the ", + "inflows please add them manually to the 'outflows'", + " section. You can use the same file as for inflows."))}, + error = function(e) { }) + if(use_outflows) { + # number of outflows + num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") + # outflow depths + lvl_outflows <- get_yaml_value(config_file, "outflows", "outflow_lvl") + # Get scaling parameter + scale_param_out <- get_yaml_value(config_file, "outflows", "scale_param") + } + + if(use_inflows) { + # Get scaling parameter + scale_param_inf <- get_yaml_value(config_file, "inflows", "scale_param") + # number of inflows + num_inflows <- get_yaml_value(config_file, "inflows", "number_inflows") + } + + +##---------------FLake------------- + + if("FLake" %in% model){ + fla_fil <- file.path(folder, get_yaml_value(config_file, "config_files", "FLake")) + + if(!use_inflows){ + input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".false.") + }else{ + input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".true.") + } + } + +##---------------GLM------------- + + if("GLM" %in% model){ + glm_nml <- file.path(folder, get_yaml_value(config_file, "config_files", "GLM")) + + # Read in nml and input parameters + nml <- read_nml(glm_nml) + # if no inflow or outflow is used this list is keep otherwise it is changed + inp_list <- list("num_inflows" = 0, "num_outlet" = 0) + # set inflow + if (use_inflows) { + inp_list$num_inflows <- num_inflows + inp_list <- c(inp_list, list("names_of_strms" = paste0("inflow_", 1:num_inflows), + "strm_hf_angle" = rep(65, num_inflows), + "strmbd_slope" = rep(2, num_inflows), + "strmbd_drag" = rep(0.016, num_inflows), + "inflow_factor" = rep(1, num_inflows), + "inflow_fl" = paste0("inflow_", 1:num_inflows, ".csv"))) + } + + # set outflows + if (use_outflows){ + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + #!! outflow elevations need to be in meters above sea level!! + lvl_outflows_glm <- lvl_outflows + bot_lvl + # outflow lvl for floating outflows is set to 0 + lvl_outflows_glm[lvl_outflows == -1] <- 0 + inp_list$num_outlet <- num_outflows + inp_list <- c(inp_list, list("flt_off_sw" = outf_surf, + "outl_elvs" = lvl_outflows_glm, + "outflow_fl" = paste0("outflow_", 1:num_outflows, ".csv"), + "outflow_factor" = rep(1, num_outflows))) + } + + nml <- glmtools::set_nml(nml, arg_list = inp_list) + write_nml(nml, glm_nml) + + } + +##---------------GOTM------------- + + if("GOTM" %in% model) { + got_yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) + yml_no_comment <- unname(sapply(readLines(got_yaml), function(x) strsplit(x, "#")[[1]][1])) + # number of inflows in the yaml file so far + num_inf_yaml <- length(grep("inflow\\_*\\d*:", yml_no_comment, value = TRUE)) + + # number of outflows in the yaml file so far + num_outf_yaml <- length(grep("outflow\\_*\\d*:", yml_no_comment, value = TRUE)) + + + ## Switch off streams + if(!use_inflows) { + # switch of flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 0) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 0) + # remove all inflows but one + if (num_inf_yaml > 1) { + for (i in 2:(num_inf_yaml)) { + rm_yaml_sec(got_yaml, paste0("inflow_", i)) + } + } + # streams_switch(file = got_yaml, method = "off") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "flow", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "salt", key4 = + "method", value = 0) + } + if (!use_outflows) { + # remove all outflows but one + if (num_outf_yaml > 1) { + for (i in 2:(num_outf_yaml)) { + rm_yaml_sec(got_yaml, paste0("outflow_", i)) + } + } + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = + "method", value = 0) + } + # set inflows + if (use_inflows) { + # switch on flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + # remove additional inflows that are not needed + if (num_inf_yaml > num_inflows) { + for (i in 2:(num_inf_yaml)) { + rm_yaml_sec(got_yaml, paste0("inflow_", i)) + } + } + # add additional inflows if necessary + if(num_inflows > 1 & num_inflows != num_inf_yaml) { + for (i in num_inflows:2) { + doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) + } + } + # set inflow settings for all inflows + for (i in 1:num_inflows) { + + if(i == 1) { + inf_sec <- "inflow" + } else { + inf_sec <- paste0("inflow_", i) + } + + # streams_switch(file = got_yaml, method = "on") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) + } + } + + # set outflows + if (use_outflows) { + if (!use_inflows) { + # switch on flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + } + # remove additional outflows that are not needed + if (num_outf_yaml > num_outflows) { + for (i in 2:(num_outf_yaml)) { + rm_yaml_sec(got_yaml, paste0("outflow_", i)) + } + } + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + # outflow lvl in GOTM are meters below initial surface lvl + lvl_outflows_gotm <- lvl_outflows - init_lvl + # add additional outflows if necessary + if(num_outflows > 1 & num_outflows != num_outf_yaml) { + for (i in num_outflows:2) { + doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) + } + } + # set outflow settings for all outflows + for (i in 1:num_outflows) { + if(i == 1) { + outf_sec <- "outflow" + } else { + outf_sec <- paste0("outflow_", i) + } + # streams_switch(file = got_yaml, method = "on") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "method", + value = ifelse(outf_surf[i], 1, 3)) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zl", + value = lvl_outflows_gotm[i] - 0.5) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zu", + value = lvl_outflows_gotm[i] + 0.5) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) + } + } + } + +##---------------Simstrat------------- + + if("Simstrat" %in% model){ + sim_par <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) + # Turn off inflow + if(!use_inflows){ + ## Set Qin and Qout to 0 inflow + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + # In case Kw is a single value for the whole simulation: + inflow_line_2 <- "1" + inflow_line_3 <- "-1 0.00" + start_sim <- get_json_value(sim_par, "Simulation", "Start d") + end_sim <- get_json_value(sim_par, "Simulation", "End d") + inflow_line_4 <- paste(start_sim, 0.000) + inflow_line_5 <- paste(end_sim, 0.000) + + file_connection <- file("Simstrat/Qin.dat") + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), + file_connection) + close(file_connection) + file_connection <- file("Simstrat/Qout.dat") + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), + file_connection) + close(file_connection) + } + if(!use_outflows){ + outflow_outfile <- "Qout.dat" + + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) + + outflow_line_1 <- "Time [d]\tQ_out [m3/s]" + outflow_line_2 <- "1" + outflow_line_3 <- "-1 0.00" + start_sim <- get_json_value(sim_par, "Simulation", "Start d") + end_sim <- get_json_value(sim_par, "Simulation", "End d") + outflow_line_4 <- paste(start_sim, 0.000) + outflow_line_5 <- paste(end_sim, 0.000) + file_connection <- file(outflow_outfpath) + writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4, + outflow_line_5), file_connection) + close(file_connection) + } + } + +##---------------MyLake------------- + + if("MyLake" %in% model){ + # Load config file MyLake + load(get_yaml_value(config_file, "config_files", "MyLake")) + + if(!use_inflows){ + mylake_config[["Inflw"]] <- matrix(rep(0, 8 * length(seq.POSIXt(from = as.POSIXct(start_date), + to = as.POSIXct(stop_date), + by = "day"))), + ncol = 8) + + # save lake-specific config file for MyLake + temp_fil <- gsub(".*/", "", get_yaml_value(config_file, "config_files", "MyLake")) + save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) + } + } + +##-------------If inflow == TRUE--------------- + + if(use_inflows == TRUE){ + inflow_file <- get_yaml_value(file = config_file, label = "inflows", key = "file") + # Check if file exists + if(!file.exists(inflow_file)){ + stop(inflow_file, " does not exist. Check filepath in ", config_file) + } + ### Import data + message("Loading inflow data...") + inflow <- read.csv(file.path(folder, inflow_file), stringsAsFactors = FALSE) + inflow[, 1] <- as.POSIXct(inflow[, 1]) + start_date <- get_yaml_value(config_file, "time", "start") + # Stop date + stop_date <- get_yaml_value(config_file, "time", "stop") + inflow_start <- which(inflow$datetime == as.POSIXct(start_date)) + inflow_stop <- which(inflow$datetime == as.POSIXct(stop_date)) + inflow <- inflow[inflow_start:inflow_stop, ] + + ### Naming conventions standard input + chk_names_flow(inflow, num_inflows, inflow_file) + + ### Apply scaling + inflow <- scale_flow(inflow, num_inflows, scale_param_inf) + + # if multiple inflows are present put them in a list + if(num_inflows > 1) { + inflow_ls <- list() + for (i in 1:num_inflows) { + inflow_ls[[paste0("inflow_", i)]] <- + data.frame(datetime = inflow$datetime, + Flow_metersCubedPerSecond = inflow[[paste0("Flow_metersCubedPerSecond_", i)]], + Water_Temperature_celsius = inflow[[paste0("Water_Temperature_celsius_", i)]], + Salinity_practicalSalinityUnits = + inflow[[paste0("Salinity_practicalSalinityUnits_", i)]] + ) + } + inflow <- inflow_ls + rm(inflow_ls) + } else { + inflow <- list(inflow_1 = inflow) + } + + ##### FLake + if("FLake" %in% model){ + + + flake_inflow <- format_inflow(inflow = inflow, model = "FLake", config_file = config_file) + + flake_outfile <- "Tinflow" + + flake_outfpath <- file.path(folder, "FLake", flake_outfile) + + write.table(flake_inflow, flake_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = FALSE) + + + temp_fil <- get_yaml_value(config_file, "config_files", "FLake") + input_nml(temp_fil, label = "inflow", key = "time_step_number", nrow(flake_inflow)) + + message("FLake: Created file ", file.path(folder, "FLake", flake_outfile)) + + if(use_outflows){ + message("FLake does not need outflows, as mass fluxes are not considered.") + } + + } + + ###### GLM + if("GLM" %in% model){ + for (i in 1:num_inflows) { + glm_inflow <- format_inflow(inflow = inflow[[i]], model = "GLM", + config_file = config_file) + + inflow_outfile <- file.path("GLM", paste0("inflow_", i, ".csv")) + write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", paste0("inflow_", i, ".csv"))) + } + } + + ##### GOTM + if("GOTM" %in% model){ + + for (i in 1:num_inflows) { + gotm_outfile <- paste0("inflow_file_", i, ".dat") + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) + gotm_inflow <- format_inflow(inflow[[i]], model = "GOTM", config_file = config_file) + + write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = TRUE) + + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) + } + + } + + ## Simstrat + if("Simstrat" %in% model){ + # output file names + inflow_outfile <- "Qin.dat" + temp_outfile <- "Tin.dat" + salt_outfile <- "Sin.dat" + # output file paths + inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) + temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) + salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) + + sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) + + ## inflow file + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + inflow_line_2 <- as.character(num_inflows) + inflow_line_3 <- paste0("-1", rep(" 0.00", num_inflows)) + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Flow_metersCubedPerSecond) + } + file_connection <- file(inflow_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) + close(file_connection) + # temperature file + inflow_line_1 <- "Time [d]\tT_in [degC]" + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Water_Temperature_celsius_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Water_Temperature_celsius) + } + file_connection <- file(temp_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) + close(file_connection) + # salinity file + inflow_line_1 <- "Time [d]\tS_in [perMille]" + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Salinity_practicalSalinityUnits_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Salinity_practicalSalinityUnits) + } + file_connection <- file(salt_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) + } + + ## MyLake + if("MyLake" %in% model){ + + temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") + load(temp_fil) + + mylake_inflow <- format_inflow(inflow = inflow, model = "MyLake", + config_file = config_file) + + # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive + # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] + dummy_inflow <- matrix(rep(1e-10, 8 * + length(seq.POSIXt(from = as.POSIXct(start_date), + to = as.POSIXct(stop_date), + by = "day"))), + ncol = 8) + dummy_inflow[, 1] <- mylake_inflow$Flow_metersCubedPerDay + dummy_inflow[, 2] <- mylake_inflow$Water_Temperature_celsius + dummy_inflow[, 5] <- dummy_inflow[, 5] * 1e7 + dummy_inflow[, 6] <- dummy_inflow[, 6] * 1e1 + + + mylake_config[["Inflw"]] <- dummy_inflow + + temp_fil <- gsub(".*/", "", temp_fil) + # save lake-specific config file for MyLake + save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) + + message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) + + } + } + + ##-------------If outflow == TRUE--------------- + + if(use_outflows == TRUE) { + + outflow_file <- get_yaml_value(file = config_file, label = "outflows", key = "file") + # Check if file exists + if(!file.exists(outflow_file)){ + stop(outflow_file, " does not exist. Check filepath in ", config_file) + } + + ### Import data + message("Loading outflow data...") + outflow <- read.csv(file.path(folder, outflow_file), stringsAsFactors = FALSE) + outflow[, 1] <- as.POSIXct(outflow[, 1]) + + start_date <- get_yaml_value(config_file, "time", "start") + # Stop date + stop_date <- get_yaml_value(config_file, "time", "stop") + + outflow_start <- which(outflow$datetime == as.POSIXct(start_date)) + outflow_stop <- which(outflow$datetime == as.POSIXct(stop_date)) + + outflow <- outflow[outflow_start:outflow_stop, ] + + ### Naming conventions standard input + chk_names_flow(outflow, num_outflows, outflow_file) + + ### Apply scaling + outflow <- scale_flow(outflow, num_outflows, scale_param_out) + + # if multiple outflows are present put them in a list + if(num_outflows > 1) { + outflow_ls <- list() + for (i in 1:num_outflows) { + outflow_ls[[paste0("outflow_", i)]] <- + data.frame(datetime = outflow$datetime, + Flow_metersCubedPerSecond = outflow[[paste0("Flow_metersCubedPerSecond_", i)]]) + } + outflow <- outflow_ls + rm(outflow_ls) + } else { + outflow <- list(outflow_1 = outflow) + } + + # FLake + ##### + if("FLake" %in% model) { + message("FLake does not need outflows, as mass fluxes are not considered.") + } + + # GLM + ##### + if("GLM" %in% model) { + for (i in 1:num_outflows) { + glm_outflow <- format_outflow(outflow = outflow[[i]], model = "GLM", + config_file = config_file) + + outflow_outfile <- file.path("GLM", paste0("outflow_", i, ".csv")) + write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", paste0("outflow_", i, ".csv"))) + } + } + + ## GOTM + if("GOTM" %in% model) { + + for (i in 1:num_outflows) { + + gotm_outfile <- paste0("outflow_file_", i, ".dat") + + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) + + gotm_outflow <- format_outflow(outflow[[i]], model = "GOTM", config_file = config_file) + write.table(gotm_outflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = TRUE) + + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) + } + } + + ## Simstrat + if("Simstrat" %in% model) { + + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + #!! outflow elevations need to be relative to initial water level!! + lvl_outflows_simstrat <- lvl_outflows - init_lvl + lvl_outflows_simstrat[outf_surf] <- 0 + + outflow_outfile <- "Qout.dat" + + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) + sim_outflow <- format_outflow(outflow, "Simstrat", config_file, folder) + ## inflow file + outflow_line_1 <- "Time [d]\tQ_out [m3/s]" + outflow_line_2 <- paste0(as.character(sum(!outf_surf)), " ", as.character(sum(outf_surf))) + outflow_line_3 <- paste("-1", lvl_outflows_simstrat[!outf_surf], + lvl_outflows_simstrat[outf_surf]) + if(num_outflows > 1) { + outflow_line_4 <- seq_len(length(sim_outflow$datetime)) + # first the deep outflows + for (i in ((1:num_outflows)[!outf_surf])) { + outflow_line_4 <- paste(outflow_line_4, + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + # then the surface oputflows + for (i in ((1:num_outflows)[outf_surf])) { + outflow_line_4 <- paste(outflow_line_4, + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + } else { + outflow_line_4 <- paste(seq_len(length(sim_outflow$datetime)), + sim_outflow$Flow_metersCubedPerSecond) + } + file_connection <- file(outflow_outfpath) + writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4), file_connection) + close(file_connection) + + message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) + } + + ## MyLake + if("MyLake" %in% model) { + + message("MyLake does not need specific outflows, as it employs automatic overflow.") + } + + + message("export_inflow complete!") + } +} From 1c0dc4659feb2b2fa80baa0c8fc1cdd4d86d1bcf Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 11:10:32 +0100 Subject: [PATCH 22/89] fixed error in gotm.yaml template --- inst/extdata/gotm_template.yaml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/inst/extdata/gotm_template.yaml b/inst/extdata/gotm_template.yaml index a651260e..5ab8c000 100644 --- a/inst/extdata/gotm_template.yaml +++ b/inst/extdata/gotm_template.yaml @@ -337,25 +337,6 @@ streams: constant_value: -1.0 # value to use throughout the simulation [PSU; default=-1.0] file: outflow_file_2.dat # path to file with time series [default=] column: 3 # index of column to read from [default=1] - outflow_2: # outflow_2 configuration - method: 3 # inflow method [default=1] - zu: -31.3 # upper limit [m; default=0.0] - zl: -32.3 # lower limit [m; default=0.0] - flow: # water flow - method: 2 # /LER/ method [0=constant, 2=from file; default=0] - constant_value: 0.0 # value to use throughout the simulation [m^3/s; default=0.0] - file: outflow_file_2.dat # path to file with time series [default=] - column: 1 # index of column to read from [default=1] - temp: # flow temperature - method: 0 # /LER/ method [0=constant, 2=from file; default=0] - constant_value: -1.0 # value to use throughout the simulation [Celcius; default=-1.0] - file: outflow_file_2.dat # path to file with time series [default=] - column: 2 # index of column to read from [default=1] - salt: # flow salinity - method: 0 # /LER/ method [0=constant, 2=from file; default=0] - constant_value: -1.0 # value to use throughout the simulation [PSU; default=-1.0] - file: outflow_file_2.dat # path to file with time series [default=] - column: 3 # index of column to read from [default=1] physical_constants: rho_0: 1000.0 # reference density [kg/m^3; min=0.0; default=1027.0] buoyancy: From 559d1a06d5c2b28c05d60456841282086c3f8580 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 11:11:31 +0100 Subject: [PATCH 23/89] updated GOTM in/outflow expor section --- R/export_flow.R | 1324 ++++++++++++++++++++++++----------------------- 1 file changed, 665 insertions(+), 659 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index f9a5a748..9aded17b 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -1,659 +1,665 @@ -#' Export LakeEnsemblR standardised flow files to model specific driver format -#' -#' Export in- anbd out-flow driver files for each model -#' -#' @param config_file filepath; to LakeEnsemblr yaml master config file -#' @param model vector; model to export driving data. Options include -#' c("GOTM", "GLM", "Simstrat", "FLake", "MyLake") -#' @param folder filepath; to folder which contains the model folders generated by export_config() -#' -#' @examples -#' \dontrun{ -#' export_inflow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) -#' } -#' @importFrom gotmtools get_yaml_value calc_cc input_yaml -#' @importFrom glmtools read_nml set_nml write_nml -#' -#' @export -export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), - folder = ".") { - - # It's advisable to set timezone to GMT in order to avoid errors when reading time - original_tz <- Sys.getenv("TZ") - Sys.setenv(TZ = "UTC") - - # Set working directory - oldwd <- getwd() - setwd(folder) - - # this way if the function exits for any reason, success or failure, these are reset: - on.exit({ - setwd(oldwd) - Sys.setenv(TZ = original_tz) - }) - - # check model input - model <- check_models(model) - -##-------------Read settings--------------- - # initial water level - init_lvl <- get_yaml_value(config_file, "location", "init_depth") - # surface elevation - surf_lvl <- get_yaml_value(config_file, "location", "elevation") - # bottom elevation - bot_lvl <- surf_lvl - get_yaml_value(config_file, "location", "depth") - - # Get start & stop dates - start_date <- get_yaml_value(config_file, "time", "start") - stop_date <- get_yaml_value(config_file, "time", "stop") - - # Use inflows - use_inflows <- get_yaml_value(config_file, "inflows", "use") - # Use outflows - use_outflows <- get_yaml_value(config_file, "outflows", "use") - - tryCatch({get_yaml_value(config_file, "inflows", "mass-balance") - warning(paste0("The 'mass-balance' argument is no longer used ", - "if you would like to have outflows matching the ", - "inflows please add them manually to the 'outflows'", - " section. You can use the same file as for inflows."))}, - error = function(e) { }) - if(use_outflows) { - # number of outflows - num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") - # outflow depths - lvl_outflows <- get_yaml_value(config_file, "outflows", "outflow_lvl") - # Get scaling parameter - scale_param_out <- get_yaml_value(config_file, "outflows", "scale_param") - } - - if(use_inflows) { - # Get scaling parameter - scale_param_inf <- get_yaml_value(config_file, "inflows", "scale_param") - # number of inflows - num_inflows <- get_yaml_value(config_file, "inflows", "number_inflows") - } - - -##---------------FLake------------- - - if("FLake" %in% model){ - fla_fil <- file.path(folder, get_yaml_value(config_file, "config_files", "FLake")) - - if(!use_inflows){ - input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".false.") - }else{ - input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".true.") - } - } - -##---------------GLM------------- - - if("GLM" %in% model){ - glm_nml <- file.path(folder, get_yaml_value(config_file, "config_files", "GLM")) - - # Read in nml and input parameters - nml <- read_nml(glm_nml) - # if no inflow or outflow is used this list is keep otherwise it is changed - inp_list <- list("num_inflows" = 0, "num_outlet" = 0) - # set inflow - if (use_inflows) { - inp_list$num_inflows <- num_inflows - inp_list <- c(inp_list, list("names_of_strms" = paste0("inflow_", 1:num_inflows), - "strm_hf_angle" = rep(65, num_inflows), - "strmbd_slope" = rep(2, num_inflows), - "strmbd_drag" = rep(0.016, num_inflows), - "inflow_factor" = rep(1, num_inflows), - "inflow_fl" = paste0("inflow_", 1:num_inflows, ".csv"))) - } - - # set outflows - if (use_outflows){ - outf_surf <- rep(FALSE, num_outflows) - outf_surf[lvl_outflows == -1] <- TRUE - #!! outflow elevations need to be in meters above sea level!! - lvl_outflows_glm <- lvl_outflows + bot_lvl - # outflow lvl for floating outflows is set to 0 - lvl_outflows_glm[lvl_outflows == -1] <- 0 - inp_list$num_outlet <- num_outflows - inp_list <- c(inp_list, list("flt_off_sw" = outf_surf, - "outl_elvs" = lvl_outflows_glm, - "outflow_fl" = paste0("outflow_", 1:num_outflows, ".csv"), - "outflow_factor" = rep(1, num_outflows))) - } - - nml <- glmtools::set_nml(nml, arg_list = inp_list) - write_nml(nml, glm_nml) - - } - -##---------------GOTM------------- - - if("GOTM" %in% model) { - got_yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) - yml_no_comment <- unname(sapply(readLines(got_yaml), function(x) strsplit(x, "#")[[1]][1])) - # number of inflows in the yaml file so far - num_inf_yaml <- length(grep("inflow\\_*\\d*:", yml_no_comment, value = TRUE)) - - # number of outflows in the yaml file so far - num_outf_yaml <- length(grep("outflow\\_*\\d*:", yml_no_comment, value = TRUE)) - - - ## Switch off streams - if(!use_inflows) { - # switch of flexible water level - input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", - value = 0) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 0) - # remove all inflows but one - if (num_inf_yaml > 1) { - for (i in 2:(num_inf_yaml)) { - rm_yaml_sec(got_yaml, paste0("inflow_", i)) - } - } - # streams_switch(file = got_yaml, method = "off") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "flow", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "salt", key4 = - "method", value = 0) - } - if (!use_outflows) { - # remove all outflows but one - if (num_outf_yaml > 1) { - for (i in 2:(num_outf_yaml)) { - rm_yaml_sec(got_yaml, paste0("outflow_", i)) - } - } - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = - "method", value = 0) - } - # set inflows - if (use_inflows) { - # switch on flexible water level - input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", - value = 3) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) - # remove additional inflows that are not needed - if (num_inf_yaml > num_inflows) { - for (i in 2:(num_inf_yaml)) { - rm_yaml_sec(got_yaml, paste0("inflow_", i)) - } - } - # add additional inflows if necessary - if(num_inflows > 1 & num_inflows != num_inf_yaml) { - for (i in num_inflows:2) { - doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) - } - } - # set inflow settings for all inflows - for (i in 1:num_inflows) { - - if(i == 1) { - inf_sec <- "inflow" - } else { - inf_sec <- paste0("inflow_", i) - } - - # streams_switch(file = got_yaml, method = "on") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = - "file", value = paste0("inflow_file_", i, ".dat")) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = - "file", value = paste0("inflow_file_", i, ".dat")) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = - "file", value = paste0("inflow_file_", i, ".dat")) - } - } - - # set outflows - if (use_outflows) { - if (!use_inflows) { - # switch on flexible water level - input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", - value = 3) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) - } - # remove additional outflows that are not needed - if (num_outf_yaml > num_outflows) { - for (i in 2:(num_outf_yaml)) { - rm_yaml_sec(got_yaml, paste0("outflow_", i)) - } - } - outf_surf <- rep(FALSE, num_outflows) - outf_surf[lvl_outflows == -1] <- TRUE - # outflow lvl in GOTM are meters below initial surface lvl - lvl_outflows_gotm <- lvl_outflows - init_lvl - # add additional outflows if necessary - if(num_outflows > 1 & num_outflows != num_outf_yaml) { - for (i in num_outflows:2) { - doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) - } - } - # set outflow settings for all outflows - for (i in 1:num_outflows) { - if(i == 1) { - outf_sec <- "outflow" - } else { - outf_sec <- paste0("outflow_", i) - } - # streams_switch(file = got_yaml, method = "on") - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "method", - value = ifelse(outf_surf[i], 1, 3)) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zl", - value = lvl_outflows_gotm[i] - 0.5) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zu", - value = lvl_outflows_gotm[i] + 0.5) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = - "method", value = 2) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = - "method", value = 0) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = - "file", value = paste0("outflow_file_", i, ".dat")) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = - "file", value = paste0("outflow_file_", i, ".dat")) - input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = - "file", value = paste0("outflow_file_", i, ".dat")) - } - } - } - -##---------------Simstrat------------- - - if("Simstrat" %in% model){ - sim_par <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) - # Turn off inflow - if(!use_inflows){ - ## Set Qin and Qout to 0 inflow - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - # In case Kw is a single value for the whole simulation: - inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" - start_sim <- get_json_value(sim_par, "Simulation", "Start d") - end_sim <- get_json_value(sim_par, "Simulation", "End d") - inflow_line_4 <- paste(start_sim, 0.000) - inflow_line_5 <- paste(end_sim, 0.000) - - file_connection <- file("Simstrat/Qin.dat") - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), - file_connection) - close(file_connection) - file_connection <- file("Simstrat/Qout.dat") - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), - file_connection) - close(file_connection) - } - if(!use_outflows){ - outflow_outfile <- "Qout.dat" - - outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) - - outflow_line_1 <- "Time [d]\tQ_out [m3/s]" - outflow_line_2 <- "1" - outflow_line_3 <- "-1 0.00" - start_sim <- get_json_value(sim_par, "Simulation", "Start d") - end_sim <- get_json_value(sim_par, "Simulation", "End d") - outflow_line_4 <- paste(start_sim, 0.000) - outflow_line_5 <- paste(end_sim, 0.000) - file_connection <- file(outflow_outfpath) - writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4, - outflow_line_5), file_connection) - close(file_connection) - } - } - -##---------------MyLake------------- - - if("MyLake" %in% model){ - # Load config file MyLake - load(get_yaml_value(config_file, "config_files", "MyLake")) - - if(!use_inflows){ - mylake_config[["Inflw"]] <- matrix(rep(0, 8 * length(seq.POSIXt(from = as.POSIXct(start_date), - to = as.POSIXct(stop_date), - by = "day"))), - ncol = 8) - - # save lake-specific config file for MyLake - temp_fil <- gsub(".*/", "", get_yaml_value(config_file, "config_files", "MyLake")) - save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) - } - } - -##-------------If inflow == TRUE--------------- - - if(use_inflows == TRUE){ - inflow_file <- get_yaml_value(file = config_file, label = "inflows", key = "file") - # Check if file exists - if(!file.exists(inflow_file)){ - stop(inflow_file, " does not exist. Check filepath in ", config_file) - } - ### Import data - message("Loading inflow data...") - inflow <- read.csv(file.path(folder, inflow_file), stringsAsFactors = FALSE) - inflow[, 1] <- as.POSIXct(inflow[, 1]) - start_date <- get_yaml_value(config_file, "time", "start") - # Stop date - stop_date <- get_yaml_value(config_file, "time", "stop") - inflow_start <- which(inflow$datetime == as.POSIXct(start_date)) - inflow_stop <- which(inflow$datetime == as.POSIXct(stop_date)) - inflow <- inflow[inflow_start:inflow_stop, ] - - ### Naming conventions standard input - chk_names_flow(inflow, num_inflows, inflow_file) - - ### Apply scaling - inflow <- scale_flow(inflow, num_inflows, scale_param_inf) - - # if multiple inflows are present put them in a list - if(num_inflows > 1) { - inflow_ls <- list() - for (i in 1:num_inflows) { - inflow_ls[[paste0("inflow_", i)]] <- - data.frame(datetime = inflow$datetime, - Flow_metersCubedPerSecond = inflow[[paste0("Flow_metersCubedPerSecond_", i)]], - Water_Temperature_celsius = inflow[[paste0("Water_Temperature_celsius_", i)]], - Salinity_practicalSalinityUnits = - inflow[[paste0("Salinity_practicalSalinityUnits_", i)]] - ) - } - inflow <- inflow_ls - rm(inflow_ls) - } else { - inflow <- list(inflow_1 = inflow) - } - - ##### FLake - if("FLake" %in% model){ - - - flake_inflow <- format_inflow(inflow = inflow, model = "FLake", config_file = config_file) - - flake_outfile <- "Tinflow" - - flake_outfpath <- file.path(folder, "FLake", flake_outfile) - - write.table(flake_inflow, flake_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = FALSE) - - - temp_fil <- get_yaml_value(config_file, "config_files", "FLake") - input_nml(temp_fil, label = "inflow", key = "time_step_number", nrow(flake_inflow)) - - message("FLake: Created file ", file.path(folder, "FLake", flake_outfile)) - - if(use_outflows){ - message("FLake does not need outflows, as mass fluxes are not considered.") - } - - } - - ###### GLM - if("GLM" %in% model){ - for (i in 1:num_inflows) { - glm_inflow <- format_inflow(inflow = inflow[[i]], model = "GLM", - config_file = config_file) - - inflow_outfile <- file.path("GLM", paste0("inflow_", i, ".csv")) - write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created file ", file.path(folder, "GLM", paste0("inflow_", i, ".csv"))) - } - } - - ##### GOTM - if("GOTM" %in% model){ - - for (i in 1:num_inflows) { - gotm_outfile <- paste0("inflow_file_", i, ".dat") - gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - gotm_inflow <- format_inflow(inflow[[i]], model = "GOTM", config_file = config_file) - - write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = TRUE) - - message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) - } - - } - - ## Simstrat - if("Simstrat" %in% model){ - # output file names - inflow_outfile <- "Qin.dat" - temp_outfile <- "Tin.dat" - salt_outfile <- "Sin.dat" - # output file paths - inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) - temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) - salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) - - sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) - - ## inflow file - inflow_line_1 <- "Time [d]\tQ_in [m3/s]" - inflow_line_2 <- as.character(num_inflows) - inflow_line_3 <- paste0("-1", rep(" 0.00", num_inflows)) - if(num_inflows > 1) { - inflow_line_4 <- seq_len(length(sim_inflow$datetime)) - for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, - sim_inflow[, paste0("Flow_metersCubedPerSecond_", i)]) - } - } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), - sim_inflow$Flow_metersCubedPerSecond) - } - file_connection <- file(inflow_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) - close(file_connection) - # temperature file - inflow_line_1 <- "Time [d]\tT_in [degC]" - if(num_inflows > 1) { - inflow_line_4 <- seq_len(length(sim_inflow$datetime)) - for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, - sim_inflow[, paste0("Water_Temperature_celsius_", i)]) - } - } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), - sim_inflow$Water_Temperature_celsius) - } - file_connection <- file(temp_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) - close(file_connection) - # salinity file - inflow_line_1 <- "Time [d]\tS_in [perMille]" - if(num_inflows > 1) { - inflow_line_4 <- seq_len(length(sim_inflow$datetime)) - for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, - sim_inflow[, paste0("Salinity_practicalSalinityUnits_", i)]) - } - } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), - sim_inflow$Salinity_practicalSalinityUnits) - } - file_connection <- file(salt_outfpath) - writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), - file_connection) - close(file_connection) - - message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) - } - - ## MyLake - if("MyLake" %in% model){ - - temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") - load(temp_fil) - - mylake_inflow <- format_inflow(inflow = inflow, model = "MyLake", - config_file = config_file) - - # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive - # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] - dummy_inflow <- matrix(rep(1e-10, 8 * - length(seq.POSIXt(from = as.POSIXct(start_date), - to = as.POSIXct(stop_date), - by = "day"))), - ncol = 8) - dummy_inflow[, 1] <- mylake_inflow$Flow_metersCubedPerDay - dummy_inflow[, 2] <- mylake_inflow$Water_Temperature_celsius - dummy_inflow[, 5] <- dummy_inflow[, 5] * 1e7 - dummy_inflow[, 6] <- dummy_inflow[, 6] * 1e1 - - - mylake_config[["Inflw"]] <- dummy_inflow - - temp_fil <- gsub(".*/", "", temp_fil) - # save lake-specific config file for MyLake - save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) - - message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) - - } - } - - ##-------------If outflow == TRUE--------------- - - if(use_outflows == TRUE) { - - outflow_file <- get_yaml_value(file = config_file, label = "outflows", key = "file") - # Check if file exists - if(!file.exists(outflow_file)){ - stop(outflow_file, " does not exist. Check filepath in ", config_file) - } - - ### Import data - message("Loading outflow data...") - outflow <- read.csv(file.path(folder, outflow_file), stringsAsFactors = FALSE) - outflow[, 1] <- as.POSIXct(outflow[, 1]) - - start_date <- get_yaml_value(config_file, "time", "start") - # Stop date - stop_date <- get_yaml_value(config_file, "time", "stop") - - outflow_start <- which(outflow$datetime == as.POSIXct(start_date)) - outflow_stop <- which(outflow$datetime == as.POSIXct(stop_date)) - - outflow <- outflow[outflow_start:outflow_stop, ] - - ### Naming conventions standard input - chk_names_flow(outflow, num_outflows, outflow_file) - - ### Apply scaling - outflow <- scale_flow(outflow, num_outflows, scale_param_out) - - # if multiple outflows are present put them in a list - if(num_outflows > 1) { - outflow_ls <- list() - for (i in 1:num_outflows) { - outflow_ls[[paste0("outflow_", i)]] <- - data.frame(datetime = outflow$datetime, - Flow_metersCubedPerSecond = outflow[[paste0("Flow_metersCubedPerSecond_", i)]]) - } - outflow <- outflow_ls - rm(outflow_ls) - } else { - outflow <- list(outflow_1 = outflow) - } - - # FLake - ##### - if("FLake" %in% model) { - message("FLake does not need outflows, as mass fluxes are not considered.") - } - - # GLM - ##### - if("GLM" %in% model) { - for (i in 1:num_outflows) { - glm_outflow <- format_outflow(outflow = outflow[[i]], model = "GLM", - config_file = config_file) - - outflow_outfile <- file.path("GLM", paste0("outflow_", i, ".csv")) - write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) - message("GLM: Created file ", file.path(folder, "GLM", paste0("outflow_", i, ".csv"))) - } - } - - ## GOTM - if("GOTM" %in% model) { - - for (i in 1:num_outflows) { - - gotm_outfile <- paste0("outflow_file_", i, ".dat") - - gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) - - gotm_outflow <- format_outflow(outflow[[i]], model = "GOTM", config_file = config_file) - write.table(gotm_outflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", - col.names = TRUE) - - message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) - } - } - - ## Simstrat - if("Simstrat" %in% model) { - - outf_surf <- rep(FALSE, num_outflows) - outf_surf[lvl_outflows == -1] <- TRUE - #!! outflow elevations need to be relative to initial water level!! - lvl_outflows_simstrat <- lvl_outflows - init_lvl - lvl_outflows_simstrat[outf_surf] <- 0 - - outflow_outfile <- "Qout.dat" - - outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) - sim_outflow <- format_outflow(outflow, "Simstrat", config_file, folder) - ## inflow file - outflow_line_1 <- "Time [d]\tQ_out [m3/s]" - outflow_line_2 <- paste0(as.character(sum(!outf_surf)), " ", as.character(sum(outf_surf))) - outflow_line_3 <- paste("-1", lvl_outflows_simstrat[!outf_surf], - lvl_outflows_simstrat[outf_surf]) - if(num_outflows > 1) { - outflow_line_4 <- seq_len(length(sim_outflow$datetime)) - # first the deep outflows - for (i in ((1:num_outflows)[!outf_surf])) { - outflow_line_4 <- paste(outflow_line_4, - sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) - } - # then the surface oputflows - for (i in ((1:num_outflows)[outf_surf])) { - outflow_line_4 <- paste(outflow_line_4, - sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) - } - } else { - outflow_line_4 <- paste(seq_len(length(sim_outflow$datetime)), - sim_outflow$Flow_metersCubedPerSecond) - } - file_connection <- file(outflow_outfpath) - writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4), file_connection) - close(file_connection) - - message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) - } - - ## MyLake - if("MyLake" %in% model) { - - message("MyLake does not need specific outflows, as it employs automatic overflow.") - } - - - message("export_inflow complete!") - } -} +#' Export LakeEnsemblR standardised flow files to model specific driver format +#' +#' Export in- anbd out-flow driver files for each model +#' +#' @param config_file filepath; to LakeEnsemblr yaml master config file +#' @param model vector; model to export driving data. Options include +#' c("GOTM", "GLM", "Simstrat", "FLake", "MyLake") +#' @param folder filepath; to folder which contains the model folders generated by export_config() +#' +#' @examples +#' \dontrun{ +#' export_inflow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) +#' } +#' @importFrom gotmtools get_yaml_value calc_cc input_yaml +#' @importFrom glmtools read_nml set_nml write_nml +#' +#' @export +export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), + folder = ".") { + + # It's advisable to set timezone to GMT in order to avoid errors when reading time + original_tz <- Sys.getenv("TZ") + Sys.setenv(TZ = "UTC") + + # Set working directory + oldwd <- getwd() + setwd(folder) + + # this way if the function exits for any reason, success or failure, these are reset: + on.exit({ + setwd(oldwd) + Sys.setenv(TZ = original_tz) + }) + + # check model input + model <- check_models(model) + +##-------------Read settings--------------- + # initial water level + init_lvl <- get_yaml_value(config_file, "location", "init_depth") + # surface elevation + surf_lvl <- get_yaml_value(config_file, "location", "elevation") + # bottom elevation + bot_lvl <- surf_lvl - get_yaml_value(config_file, "location", "depth") + + # Get start & stop dates + start_date <- get_yaml_value(config_file, "time", "start") + stop_date <- get_yaml_value(config_file, "time", "stop") + + # Use inflows + use_inflows <- get_yaml_value(config_file, "inflows", "use") + # Use outflows + use_outflows <- get_yaml_value(config_file, "outflows", "use") + + tryCatch({get_yaml_value(config_file, "inflows", "mass-balance") + warning(paste0("The 'mass-balance' argument is no longer used ", + "if you would like to have outflows matching the ", + "inflows please add them manually to the 'outflows'", + " section. You can use the same file as for inflows."))}, + error = function(e) { }) + if(use_outflows) { + # number of outflows + num_outflows <- get_yaml_value(config_file, "outflows", "number_outflows") + # outflow depths + lvl_outflows <- get_yaml_value(config_file, "outflows", "outflow_lvl") + # Get scaling parameter + scale_param_out <- get_yaml_value(config_file, "outflows", "scale_param") + } + + if(use_inflows) { + # Get scaling parameter + scale_param_inf <- get_yaml_value(config_file, "inflows", "scale_param") + # number of inflows + num_inflows <- get_yaml_value(config_file, "inflows", "number_inflows") + } + + +##---------------FLake------------- + + if("FLake" %in% model){ + fla_fil <- file.path(folder, get_yaml_value(config_file, "config_files", "FLake")) + + if(!use_inflows){ + input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".false.") + }else{ + input_nml(fla_fil, label = "inflow", key = "Qfromfile", ".true.") + } + } + +##---------------GLM------------- + + if("GLM" %in% model){ + glm_nml <- file.path(folder, get_yaml_value(config_file, "config_files", "GLM")) + + # Read in nml and input parameters + nml <- read_nml(glm_nml) + # if no inflow or outflow is used this list is keep otherwise it is changed + inp_list <- list("num_inflows" = 0, "num_outlet" = 0) + # set inflow + if (use_inflows) { + inp_list$num_inflows <- num_inflows + inp_list <- c(inp_list, list("names_of_strms" = paste0("inflow_", 1:num_inflows), + "strm_hf_angle" = rep(65, num_inflows), + "strmbd_slope" = rep(2, num_inflows), + "strmbd_drag" = rep(0.016, num_inflows), + "inflow_factor" = rep(1, num_inflows), + "inflow_fl" = paste0("inflow_", 1:num_inflows, ".csv"))) + } + + # set outflows + if (use_outflows){ + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + #!! outflow elevations need to be in meters above sea level!! + lvl_outflows_glm <- lvl_outflows + bot_lvl + # outflow lvl for floating outflows is set to 0 + lvl_outflows_glm[lvl_outflows == -1] <- 0 + inp_list$num_outlet <- num_outflows + inp_list <- c(inp_list, list("flt_off_sw" = outf_surf, + "outl_elvs" = lvl_outflows_glm, + "outflow_fl" = paste0("outflow_", 1:num_outflows, ".csv"), + "outflow_factor" = rep(1, num_outflows))) + } + + nml <- glmtools::set_nml(nml, arg_list = inp_list) + write_nml(nml, glm_nml) + + } + +##---------------GOTM------------- + + if("GOTM" %in% model) { + got_yaml <- file.path(folder, get_yaml_value(config_file, "config_files", "GOTM")) + yml_no_comment <- unname(sapply(readLines(got_yaml), function(x) strsplit(x, "#")[[1]][1])) + # number of inflows in the yaml file so far + num_inf_yaml <- length(grep("inflow\\_*\\d*:", yml_no_comment, value = TRUE)) + + # number of outflows in the yaml file so far + num_outf_yaml <- length(grep("outflow\\_*\\d*:", yml_no_comment, value = TRUE)) + + + ## Switch off streams + if(!use_inflows) { + # switch of flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 0) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 0) + # remove all inflows but one + if (num_inf_yaml > 1) { + for (i in 2:(num_inf_yaml)) { + rm_yaml_sec(got_yaml, paste0("inflow_", i)) + num_inf_yaml <- 1 + } + } + # streams_switch(file = got_yaml, method = "off") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "flow", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "inflow", key3 = "salt", key4 = + "method", value = 0) + } + if (!use_outflows) { + # remove all outflows but one + if (num_outf_yaml > 1) { + for (i in 2:(num_outf_yaml)) { + rm_yaml_sec(got_yaml, paste0("outflow_", i)) + num_outf_yaml <- 1 + } + } + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "flow", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = "outflow", key3 = "salt", key4 = + "method", value = 0) + } + # set inflows + if (use_inflows) { + # switch on flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + # remove additional inflows that are not needed + if (num_inf_yaml > num_inflows) { + for (i in 2:(num_inf_yaml)) { + rm_yaml_sec(got_yaml, paste0("inflow_", i)) + num_inf_yaml <- 1 + } + } + # add additional inflows if necessary + if(num_inflows > 1 & num_inflows != num_inf_yaml) { + for (i in num_inflows:2) { + doubl_yaml_sec(got_yaml, "inflow", paste0("_", i)) + num_inf_yaml <- num_inflows + } + } + # set inflow settings for all inflows + for (i in 1:num_inflows) { + + if(i == 1) { + inf_sec <- "inflow" + } else { + inf_sec <- paste0("inflow_", i) + } + + # streams_switch(file = got_yaml, method = "on") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "flow", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "temp", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = inf_sec, key3 = "salt", key4 = + "file", value = paste0("inflow_file_", i, ".dat")) + } + } + + # set outflows + if (use_outflows) { + if (!use_inflows) { + # switch on flexible water level + input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", + value = 3) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + } + # remove additional outflows that are not needed + if (num_outf_yaml > num_outflows) { + for (i in 2:(num_outf_yaml)) { + rm_yaml_sec(got_yaml, paste0("outflow_", i)) + num_outf_yaml <- 1 + } + } + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + # outflow lvl in GOTM are meters below initial surface lvl + lvl_outflows_gotm <- lvl_outflows - init_lvl + # add additional outflows if necessary + if(num_outflows > 1 & num_outflows != num_outf_yaml) { + for (i in num_outflows:2) { + doubl_yaml_sec(got_yaml, "outflow", paste0("_", i)) + num_outf_yaml <- num_outflows + } + } + # set outflow settings for all outflows + for (i in 1:num_outflows) { + if(i == 1) { + outf_sec <- "outflow" + } else { + outf_sec <- paste0("outflow_", i) + } + # streams_switch(file = got_yaml, method = "on") + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "method", + value = ifelse(outf_surf[i], 1, 3)) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zl", + value = lvl_outflows_gotm[i] - 0.5) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "zu", + value = lvl_outflows_gotm[i] + 0.5) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = + "method", value = 2) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = + "method", value = 0) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "flow", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "temp", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) + input_yaml_multiple(got_yaml, key1 = "streams", key2 = outf_sec, key3 = "salt", key4 = + "file", value = paste0("outflow_file_", i, ".dat")) + } + } + } + +##---------------Simstrat------------- + + if("Simstrat" %in% model){ + sim_par <- file.path(folder, get_yaml_value(config_file, "config_files", "Simstrat")) + # Turn off inflow + if(!use_inflows){ + ## Set Qin and Qout to 0 inflow + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + # In case Kw is a single value for the whole simulation: + inflow_line_2 <- "1" + inflow_line_3 <- "-1 0.00" + start_sim <- get_json_value(sim_par, "Simulation", "Start d") + end_sim <- get_json_value(sim_par, "Simulation", "End d") + inflow_line_4 <- paste(start_sim, 0.000) + inflow_line_5 <- paste(end_sim, 0.000) + + file_connection <- file("Simstrat/Qin.dat") + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), + file_connection) + close(file_connection) + file_connection <- file("Simstrat/Qout.dat") + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), + file_connection) + close(file_connection) + } + if(!use_outflows){ + outflow_outfile <- "Qout.dat" + + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) + + outflow_line_1 <- "Time [d]\tQ_out [m3/s]" + outflow_line_2 <- "1" + outflow_line_3 <- "-1 0.00" + start_sim <- get_json_value(sim_par, "Simulation", "Start d") + end_sim <- get_json_value(sim_par, "Simulation", "End d") + outflow_line_4 <- paste(start_sim, 0.000) + outflow_line_5 <- paste(end_sim, 0.000) + file_connection <- file(outflow_outfpath) + writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4, + outflow_line_5), file_connection) + close(file_connection) + } + } + +##---------------MyLake------------- + + if("MyLake" %in% model){ + # Load config file MyLake + load(get_yaml_value(config_file, "config_files", "MyLake")) + + if(!use_inflows){ + mylake_config[["Inflw"]] <- matrix(rep(0, 8 * length(seq.POSIXt(from = as.POSIXct(start_date), + to = as.POSIXct(stop_date), + by = "day"))), + ncol = 8) + + # save lake-specific config file for MyLake + temp_fil <- gsub(".*/", "", get_yaml_value(config_file, "config_files", "MyLake")) + save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) + } + } + +##-------------If inflow == TRUE--------------- + + if(use_inflows == TRUE){ + inflow_file <- get_yaml_value(file = config_file, label = "inflows", key = "file") + # Check if file exists + if(!file.exists(inflow_file)){ + stop(inflow_file, " does not exist. Check filepath in ", config_file) + } + ### Import data + message("Loading inflow data...") + inflow <- read.csv(file.path(folder, inflow_file), stringsAsFactors = FALSE) + inflow[, 1] <- as.POSIXct(inflow[, 1]) + start_date <- get_yaml_value(config_file, "time", "start") + # Stop date + stop_date <- get_yaml_value(config_file, "time", "stop") + inflow_start <- which(inflow$datetime == as.POSIXct(start_date)) + inflow_stop <- which(inflow$datetime == as.POSIXct(stop_date)) + inflow <- inflow[inflow_start:inflow_stop, ] + + ### Naming conventions standard input + chk_names_flow(inflow, num_inflows, inflow_file) + + ### Apply scaling + inflow <- scale_flow(inflow, num_inflows, scale_param_inf) + + # if multiple inflows are present put them in a list + if(num_inflows > 1) { + inflow_ls <- list() + for (i in 1:num_inflows) { + inflow_ls[[paste0("inflow_", i)]] <- + data.frame(datetime = inflow$datetime, + Flow_metersCubedPerSecond = inflow[[paste0("Flow_metersCubedPerSecond_", i)]], + Water_Temperature_celsius = inflow[[paste0("Water_Temperature_celsius_", i)]], + Salinity_practicalSalinityUnits = + inflow[[paste0("Salinity_practicalSalinityUnits_", i)]] + ) + } + inflow <- inflow_ls + rm(inflow_ls) + } else { + inflow <- list(inflow_1 = inflow) + } + + ##### FLake + if("FLake" %in% model){ + + + flake_inflow <- format_inflow(inflow = inflow, model = "FLake", config_file = config_file) + + flake_outfile <- "Tinflow" + + flake_outfpath <- file.path(folder, "FLake", flake_outfile) + + write.table(flake_inflow, flake_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = FALSE) + + + temp_fil <- get_yaml_value(config_file, "config_files", "FLake") + input_nml(temp_fil, label = "inflow", key = "time_step_number", nrow(flake_inflow)) + + message("FLake: Created file ", file.path(folder, "FLake", flake_outfile)) + + if(use_outflows){ + message("FLake does not need outflows, as mass fluxes are not considered.") + } + + } + + ###### GLM + if("GLM" %in% model){ + for (i in 1:num_inflows) { + glm_inflow <- format_inflow(inflow = inflow[[i]], model = "GLM", + config_file = config_file) + + inflow_outfile <- file.path("GLM", paste0("inflow_", i, ".csv")) + write.csv(glm_inflow, inflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", paste0("inflow_", i, ".csv"))) + } + } + + ##### GOTM + if("GOTM" %in% model){ + + for (i in 1:num_inflows) { + gotm_outfile <- paste0("inflow_file_", i, ".dat") + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) + gotm_inflow <- format_inflow(inflow[[i]], model = "GOTM", config_file = config_file) + + write.table(gotm_inflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = TRUE) + + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) + } + + } + + ## Simstrat + if("Simstrat" %in% model){ + # output file names + inflow_outfile <- "Qin.dat" + temp_outfile <- "Tin.dat" + salt_outfile <- "Sin.dat" + # output file paths + inflow_outfpath <- file.path(folder, "Simstrat", inflow_outfile) + temp_outfpath <- file.path(folder, "Simstrat", temp_outfile) + salt_outfpath <- file.path(folder, "Simstrat", salt_outfile) + + sim_inflow <- format_inflow(inflow = inflow, model = "Simstrat", config_file = config_file) + + ## inflow file + inflow_line_1 <- "Time [d]\tQ_in [m3/s]" + inflow_line_2 <- as.character(num_inflows) + inflow_line_3 <- paste0("-1", rep(" 0.00", num_inflows)) + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Flow_metersCubedPerSecond) + } + file_connection <- file(inflow_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) + close(file_connection) + # temperature file + inflow_line_1 <- "Time [d]\tT_in [degC]" + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Water_Temperature_celsius_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Water_Temperature_celsius) + } + file_connection <- file(temp_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), file_connection) + close(file_connection) + # salinity file + inflow_line_1 <- "Time [d]\tS_in [perMille]" + if(num_inflows > 1) { + inflow_line_4 <- seq_len(length(sim_inflow$datetime)) + for (i in 1:num_inflows) { + inflow_line_4 <- paste(inflow_line_4, + sim_inflow[, paste0("Salinity_practicalSalinityUnits_", i)]) + } + } else { + inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + sim_inflow$Salinity_practicalSalinityUnits) + } + file_connection <- file(salt_outfpath) + writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4), + file_connection) + close(file_connection) + + message("Simstrat: Created file ", file.path(folder, "Simstrat", inflow_outfile)) + } + + ## MyLake + if("MyLake" %in% model){ + + temp_fil <- get_yaml_value(config_file, "config_files", "MyLake") + load(temp_fil) + + mylake_inflow <- format_inflow(inflow = inflow, model = "MyLake", + config_file = config_file) + + # discharge [m3/d], temperature [deg C], conc of passive tracer [-], conc of passive + # sediment tracer [-], TP [mg/m3], DOP [mg/m3], Chla [mg/m3], DOC [mg/m3] + dummy_inflow <- matrix(rep(1e-10, 8 * + length(seq.POSIXt(from = as.POSIXct(start_date), + to = as.POSIXct(stop_date), + by = "day"))), + ncol = 8) + dummy_inflow[, 1] <- mylake_inflow$Flow_metersCubedPerDay + dummy_inflow[, 2] <- mylake_inflow$Water_Temperature_celsius + dummy_inflow[, 5] <- dummy_inflow[, 5] * 1e7 + dummy_inflow[, 6] <- dummy_inflow[, 6] * 1e1 + + + mylake_config[["Inflw"]] <- dummy_inflow + + temp_fil <- gsub(".*/", "", temp_fil) + # save lake-specific config file for MyLake + save(mylake_config, file = file.path(folder, "MyLake", temp_fil)) + + message("MyLake: Created file ", file.path(folder, "MyLake", temp_fil)) + + } + } + + ##-------------If outflow == TRUE--------------- + + if(use_outflows == TRUE) { + + outflow_file <- get_yaml_value(file = config_file, label = "outflows", key = "file") + # Check if file exists + if(!file.exists(outflow_file)){ + stop(outflow_file, " does not exist. Check filepath in ", config_file) + } + + ### Import data + message("Loading outflow data...") + outflow <- read.csv(file.path(folder, outflow_file), stringsAsFactors = FALSE) + outflow[, 1] <- as.POSIXct(outflow[, 1]) + + start_date <- get_yaml_value(config_file, "time", "start") + # Stop date + stop_date <- get_yaml_value(config_file, "time", "stop") + + outflow_start <- which(outflow$datetime == as.POSIXct(start_date)) + outflow_stop <- which(outflow$datetime == as.POSIXct(stop_date)) + + outflow <- outflow[outflow_start:outflow_stop, ] + + ### Naming conventions standard input + chk_names_flow(outflow, num_outflows, outflow_file) + + ### Apply scaling + outflow <- scale_flow(outflow, num_outflows, scale_param_out) + + # if multiple outflows are present put them in a list + if(num_outflows > 1) { + outflow_ls <- list() + for (i in 1:num_outflows) { + outflow_ls[[paste0("outflow_", i)]] <- + data.frame(datetime = outflow$datetime, + Flow_metersCubedPerSecond = outflow[[paste0("Flow_metersCubedPerSecond_", i)]]) + } + outflow <- outflow_ls + rm(outflow_ls) + } else { + outflow <- list(outflow_1 = outflow) + } + + # FLake + ##### + if("FLake" %in% model) { + message("FLake does not need outflows, as mass fluxes are not considered.") + } + + # GLM + ##### + if("GLM" %in% model) { + for (i in 1:num_outflows) { + glm_outflow <- format_outflow(outflow = outflow[[i]], model = "GLM", + config_file = config_file) + + outflow_outfile <- file.path("GLM", paste0("outflow_", i, ".csv")) + write.csv(glm_outflow, outflow_outfile, row.names = FALSE, quote = FALSE) + message("GLM: Created file ", file.path(folder, "GLM", paste0("outflow_", i, ".csv"))) + } + } + + ## GOTM + if("GOTM" %in% model) { + + for (i in 1:num_outflows) { + + gotm_outfile <- paste0("outflow_file_", i, ".dat") + + gotm_outfpath <- file.path(folder, "GOTM", gotm_outfile) + + gotm_outflow <- format_outflow(outflow[[i]], model = "GOTM", config_file = config_file) + write.table(gotm_outflow, gotm_outfpath, quote = FALSE, row.names = FALSE, sep = "\t", + col.names = TRUE) + + message("GOTM: Created file ", file.path(folder, "GOTM", gotm_outfile)) + } + } + + ## Simstrat + if("Simstrat" %in% model) { + + outf_surf <- rep(FALSE, num_outflows) + outf_surf[lvl_outflows == -1] <- TRUE + #!! outflow elevations need to be relative to initial water level!! + lvl_outflows_simstrat <- lvl_outflows - init_lvl + lvl_outflows_simstrat[outf_surf] <- 0 + + outflow_outfile <- "Qout.dat" + + outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) + sim_outflow <- format_outflow(outflow, "Simstrat", config_file, folder) + ## inflow file + outflow_line_1 <- "Time [d]\tQ_out [m3/s]" + outflow_line_2 <- paste0(as.character(sum(!outf_surf)), " ", as.character(sum(outf_surf))) + outflow_line_3 <- paste("-1", lvl_outflows_simstrat[!outf_surf], + lvl_outflows_simstrat[outf_surf]) + if(num_outflows > 1) { + outflow_line_4 <- seq_len(length(sim_outflow$datetime)) + # first the deep outflows + for (i in ((1:num_outflows)[!outf_surf])) { + outflow_line_4 <- paste(outflow_line_4, + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + # then the surface oputflows + for (i in ((1:num_outflows)[outf_surf])) { + outflow_line_4 <- paste(outflow_line_4, + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } + } else { + outflow_line_4 <- paste(seq_len(length(sim_outflow$datetime)), + sim_outflow$Flow_metersCubedPerSecond) + } + file_connection <- file(outflow_outfpath) + writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4), file_connection) + close(file_connection) + + message("Simstrat: Created outflow file ", file.path(folder, "Simstrat", outflow_outfile)) + } + + ## MyLake + if("MyLake" %in% model) { + + message("MyLake does not need specific outflows, as it employs automatic overflow.") + } + + + message("export_inflow complete!") + } +} From e6bdcf6d4eb1a557f1316bea13ea41dfcc9c38a3 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 11:26:19 +0100 Subject: [PATCH 24/89] fixed GOTM water_balance method --- R/export_flow.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 9aded17b..76e47145 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -180,7 +180,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # switch on flexible water level input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", value = 3) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 3) # remove additional inflows that are not needed if (num_inf_yaml > num_inflows) { for (i in 2:(num_inf_yaml)) { @@ -226,7 +226,7 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa # switch on flexible water level input_yaml_multiple(got_yaml, key1 = "mimic_3d", key2 = "zeta", key3 = "method", value = 3) - input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 2) + input_yaml_multiple(got_yaml, key1 = "water_balance_method", value = 3) } # remove additional outflows that are not needed if (num_outf_yaml > num_outflows) { From e2ee31ca6460d8c7aa62c2f20f2e881b78171be4 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 11:57:51 +0100 Subject: [PATCH 25/89] fixed error in format_flow for Simstrat --- R/format_flow.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/format_flow.R b/R/format_flow.R index 7b97ae5a..0f9da4f4 100644 --- a/R/format_flow.R +++ b/R/format_flow.R @@ -214,7 +214,7 @@ format_outflow <- function(outflow, model, config_file, folder = "."){ simstrat_outflow <- reshape2::dcast(simstrat_outflow, datetime ~ variable) if(num_outflows == 1) { - simstrat_outflow <- simstrat_inflow[, c("datetime", "Flow_metersCubedPerSecond")] + simstrat_outflow <- simstrat_outflow[, c("datetime", "Flow_metersCubedPerSecond")] } simstrat_outflow[, 1] <- format(simstrat_outflow[, 1], "%Y-%m-%d %H:%M:%S") @@ -227,4 +227,4 @@ format_outflow <- function(outflow, model, config_file, folder = "."){ if("MyLake" %in% model) { stop("MyLake does not need specific outflows, as it employs automatic overflow.") } -} \ No newline at end of file +} From c8b759eacc92e084ae78a988be7e2617a9327035 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 12:50:55 +0100 Subject: [PATCH 26/89] started with fixing simstrat soutflows --- R/export_flow.R | 12 ++++++------ R/format_flow.R | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 76e47145..3ce95b86 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -286,11 +286,11 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa inflow_line_1 <- "Time [d]\tQ_in [m3/s]" # In case Kw is a single value for the whole simulation: inflow_line_2 <- "1" - inflow_line_3 <- "-1 0.00" + inflow_line_3 <- "-1\t0.00" start_sim <- get_json_value(sim_par, "Simulation", "Start d") end_sim <- get_json_value(sim_par, "Simulation", "End d") - inflow_line_4 <- paste(start_sim, 0.000) - inflow_line_5 <- paste(end_sim, 0.000) + inflow_line_4 <- paste0(start_sim, "\t", 0.000) + inflow_line_5 <- paste0(end_sim, "\t", 0.000) file_connection <- file("Simstrat/Qin.dat") writeLines(c(inflow_line_1, inflow_line_2, inflow_line_3, inflow_line_4, inflow_line_5), @@ -308,11 +308,11 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa outflow_line_1 <- "Time [d]\tQ_out [m3/s]" outflow_line_2 <- "1" - outflow_line_3 <- "-1 0.00" + outflow_line_3 <- "-1\t0.00" start_sim <- get_json_value(sim_par, "Simulation", "Start d") end_sim <- get_json_value(sim_par, "Simulation", "End d") - outflow_line_4 <- paste(start_sim, 0.000) - outflow_line_5 <- paste(end_sim, 0.000) + outflow_line_4 <- paste0(start_sim, "\t", 0.000) + outflow_line_5 <- paste0(end_sim, "\t", 0.000) file_connection <- file(outflow_outfpath) writeLines(c(outflow_line_1, outflow_line_2, outflow_line_3, outflow_line_4, outflow_line_5), file_connection) diff --git a/R/format_flow.R b/R/format_flow.R index 0f9da4f4..619e5860 100644 --- a/R/format_flow.R +++ b/R/format_flow.R @@ -214,7 +214,7 @@ format_outflow <- function(outflow, model, config_file, folder = "."){ simstrat_outflow <- reshape2::dcast(simstrat_outflow, datetime ~ variable) if(num_outflows == 1) { - simstrat_outflow <- simstrat_outflow[, c("datetime", "Flow_metersCubedPerSecond")] + simstrat_outflow <- simstrat_outflow[, c("datetime", "Flow_metersCubedPerSecond_1")] } simstrat_outflow[, 1] <- format(simstrat_outflow[, 1], "%Y-%m-%d %H:%M:%S") From 3fb45f80f02ae9fffc154495f4ca23696e88a7de Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 14:44:46 +0100 Subject: [PATCH 27/89] changed creation of Simstrat in and outflow files --- R/export_flow.R | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index 3ce95b86..ab4f7cd1 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -450,15 +450,15 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa ## inflow file inflow_line_1 <- "Time [d]\tQ_in [m3/s]" inflow_line_2 <- as.character(num_inflows) - inflow_line_3 <- paste0("-1", rep(" 0.00", num_inflows)) + inflow_line_3 <- paste0("-1", rep("\t0.00", num_inflows)) if(num_inflows > 1) { inflow_line_4 <- seq_len(length(sim_inflow$datetime)) for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, + inflow_line_4 <- paste0(inflow_line_4, "\t", sim_inflow[, paste0("Flow_metersCubedPerSecond_", i)]) } } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + inflow_line_4 <- paste0(seq_len(length(sim_inflow$datetime)), "\t", sim_inflow$Flow_metersCubedPerSecond) } file_connection <- file(inflow_outfpath) @@ -469,11 +469,11 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa if(num_inflows > 1) { inflow_line_4 <- seq_len(length(sim_inflow$datetime)) for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, + inflow_line_4 <- paste0(inflow_line_4, "\t", sim_inflow[, paste0("Water_Temperature_celsius_", i)]) } } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + inflow_line_4 <- paste0(seq_len(length(sim_inflow$datetime)), "\t", sim_inflow$Water_Temperature_celsius) } file_connection <- file(temp_outfpath) @@ -484,11 +484,11 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa if(num_inflows > 1) { inflow_line_4 <- seq_len(length(sim_inflow$datetime)) for (i in 1:num_inflows) { - inflow_line_4 <- paste(inflow_line_4, + inflow_line_4 <- paste0(inflow_line_4, "\t", sim_inflow[, paste0("Salinity_practicalSalinityUnits_", i)]) } } else { - inflow_line_4 <- paste(seq_len(length(sim_inflow$datetime)), + inflow_line_4 <- paste0(seq_len(length(sim_inflow$datetime)), "\t", sim_inflow$Salinity_practicalSalinityUnits) } file_connection <- file(salt_outfpath) @@ -627,19 +627,19 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa sim_outflow <- format_outflow(outflow, "Simstrat", config_file, folder) ## inflow file outflow_line_1 <- "Time [d]\tQ_out [m3/s]" - outflow_line_2 <- paste0(as.character(sum(!outf_surf)), " ", as.character(sum(outf_surf))) - outflow_line_3 <- paste("-1", lvl_outflows_simstrat[!outf_surf], - lvl_outflows_simstrat[outf_surf]) + outflow_line_2 <- paste0(as.character(sum(!outf_surf)), "\t", as.character(sum(outf_surf))) + outflow_line_3 <- paste0("-1\t", paste0(lvl_outflows_simstrat[!outf_surf], collapse = "\t"), + "\t", paste0(lvl_outflows_simstrat[outf_surf], collapse = "\t")) if(num_outflows > 1) { outflow_line_4 <- seq_len(length(sim_outflow$datetime)) # first the deep outflows for (i in ((1:num_outflows)[!outf_surf])) { - outflow_line_4 <- paste(outflow_line_4, + outflow_line_4 <- paste0(outflow_line_4, "\t", sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) } # then the surface oputflows for (i in ((1:num_outflows)[outf_surf])) { - outflow_line_4 <- paste(outflow_line_4, + outflow_line_4 <- paste0(outflow_line_4, "\t", sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) } } else { From 76fe02c17ea4cfe9dae2ff26630fbca0b806a133 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 15:59:12 +0100 Subject: [PATCH 28/89] changed name from export_inflow to export_flow --- NAMESPACE | 2 +- R/export_config.R | 10 +++++----- R/export_flow.R | 6 +++--- man/export_config.Rd | 6 +++--- man/{export_inflow.Rd => export_flow.Rd} | 8 ++++---- man/run_ensemble.Rd | 3 ++- 6 files changed, 18 insertions(+), 17 deletions(-) rename man/{export_inflow.Rd => export_flow.Rd} (82%) diff --git a/NAMESPACE b/NAMESPACE index e76dcff1..3098d2ea 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -12,7 +12,7 @@ export(check_master_config) export(export_config) export(export_dirs) export(export_extinction) -export(export_inflow) +export(export_flow) export(export_init_cond) export(export_location) export(export_meteo) diff --git a/R/export_config.R b/R/export_config.R index 72149b4e..e479b73e 100644 --- a/R/export_config.R +++ b/R/export_config.R @@ -18,8 +18,8 @@ #' Calls export_init_cond. Defaults to TRUE. #'@param extinction boolean; export light extinction data. #' Calls export_extinction. Defaults to TRUE. -#'@param inflow boolean; export inflow settings. -#' Calls export_inflow. Defaults to TRUE. +#'@param flow boolean; export flow settings. +#' Calls export_flow. Defaults to TRUE. #'@param model_parameters boolean; export model parameters specificed in the yaml #' configuration file. Calls export_model_parameters. Defaults to TRUE. #'@param folder folder @@ -33,7 +33,7 @@ export_config <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), dirs = TRUE, time = TRUE, location = TRUE, output_settings = TRUE, meteo = TRUE, init_cond = TRUE, - extinction = TRUE, inflow = TRUE, model_parameters = TRUE, + extinction = TRUE, flow = TRUE, model_parameters = TRUE, folder = "."){ # Set working directory @@ -98,8 +98,8 @@ export_config <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } # Export user-defined inflow boundary condition - if(inflow){ - export_inflow(config_file = config_file, model = model, folder = folder) + if(flow){ + export_flow(config_file = config_file, model = model, folder = folder) } # Export user-defined model-specific parameters diff --git a/R/export_flow.R b/R/export_flow.R index ab4f7cd1..ca99c0ba 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -9,13 +9,13 @@ #' #' @examples #' \dontrun{ -#' export_inflow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) +#' export_flow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) #' } #' @importFrom gotmtools get_yaml_value calc_cc input_yaml #' @importFrom glmtools read_nml set_nml write_nml #' #' @export -export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), +export_flow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), folder = ".") { # It's advisable to set timezone to GMT in order to avoid errors when reading time @@ -660,6 +660,6 @@ export_inflow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLa } - message("export_inflow complete!") + message("export_flow complete!") } } diff --git a/man/export_config.Rd b/man/export_config.Rd index dda5e88f..e814f2d5 100644 --- a/man/export_config.Rd +++ b/man/export_config.Rd @@ -14,7 +14,7 @@ export_config( meteo = TRUE, init_cond = TRUE, extinction = TRUE, - inflow = TRUE, + flow = TRUE, model_parameters = TRUE, folder = "." ) @@ -45,8 +45,8 @@ Calls export_init_cond. Defaults to TRUE.} \item{extinction}{boolean; export light extinction data. Calls export_extinction. Defaults to TRUE.} -\item{inflow}{boolean; export inflow settings. -Calls export_inflow. Defaults to TRUE.} +\item{flow}{boolean; export flow settings. +Calls export_flow. Defaults to TRUE.} \item{model_parameters}{boolean; export model parameters specificed in the yaml configuration file. Calls export_model_parameters. Defaults to TRUE.} diff --git a/man/export_inflow.Rd b/man/export_flow.Rd similarity index 82% rename from man/export_inflow.Rd rename to man/export_flow.Rd index 005ee682..ef949c06 100644 --- a/man/export_inflow.Rd +++ b/man/export_flow.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/export_flow.R -\name{export_inflow} -\alias{export_inflow} +\name{export_flow} +\alias{export_flow} \title{Export LakeEnsemblR standardised flow files to model specific driver format} \usage{ -export_inflow( +export_flow( config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake"), folder = "." @@ -23,6 +23,6 @@ Export in- anbd out-flow driver files for each model } \examples{ \dontrun{ -export_inflow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) +export_flow(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake", "MyLake")) } } diff --git a/man/run_ensemble.Rd b/man/run_ensemble.Rd index c4e2cc9b..4f520bd5 100644 --- a/man/run_ensemble.Rd +++ b/man/run_ensemble.Rd @@ -29,7 +29,8 @@ c('GOTM', 'GLM', 'Simstrat', 'FLake', 'MyLake')} \item{return_list}{boolean; Return a list of dataframes of model output. Defaults to FALSE} -\item{create_output}{boolean; Create ensemble output file otherwise it just runs the models and generates model output in their respective folders. Defaults to TRUE} +\item{create_output}{boolean; Create ensemble output file otherwise it just runs the models and +generates model output in their respective folders. Defaults to TRUE} \item{add}{boolean; Add results to an existing netcdf file with new dimension "member"} } From 2fbe669f7af77999cec9ba694af74147e82c003f Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 16:37:33 +0100 Subject: [PATCH 29/89] fixed Simstrat formating for in and outflow files --- R/export_flow.R | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index ca99c0ba..4533a373 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -618,32 +618,57 @@ export_flow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake outf_surf <- rep(FALSE, num_outflows) outf_surf[lvl_outflows == -1] <- TRUE #!! outflow elevations need to be relative to initial water level!! - lvl_outflows_simstrat <- lvl_outflows - init_lvl - lvl_outflows_simstrat[outf_surf] <- 0 + lvl_outflows_simstrat <- round(lvl_outflows - init_lvl) + lvl_outflows_simstrat[outf_surf] <- -1 + # if there are several outflows with the same depth throw an error + if(any(duplicated(lvl_outflows_simstrat))) { + stop(paste0("Duplicated outflow levels in simstrat detected, please merge outflows", + " at 1m intervals.")) + } + + # add withdrawal depth below and above the given withdrawals for deep withdrawal + zerowith <- c(lvl_outflows_simstrat[!outf_surf] - 1, + lvl_outflows_simstrat[!outf_surf] + 1, 0) + zerowith <- zerowith[<= 0] + zerowith <- unique(zerowith) + zerowith <- zerowith[!(zerowith %in% lvl_outflows_simstrat[!outf_surf])] + + # merge zero flow with outflows for the deep outflows + lvl_outflows_simstrat_deep <- sort(c(zerowith, lvl_outflows_simstrat[!outf_surf])) + outflow_outfile <- "Qout.dat" outflow_outfpath <- file.path(folder, "Simstrat", outflow_outfile) sim_outflow <- format_outflow(outflow, "Simstrat", config_file, folder) ## inflow file outflow_line_1 <- "Time [d]\tQ_out [m3/s]" - outflow_line_2 <- paste0(as.character(sum(!outf_surf)), "\t", as.character(sum(outf_surf))) - outflow_line_3 <- paste0("-1\t", paste0(lvl_outflows_simstrat[!outf_surf], collapse = "\t"), - "\t", paste0(lvl_outflows_simstrat[outf_surf], collapse = "\t")) - if(num_outflows > 1) { + outflow_line_2 <- paste0(as.character(length(lvl_outflows_simstrat_deep)), "\t", + as.character(sum(outf_surf) + 1)) + outflow_line_3 <- paste0("-1\t", paste0(lvl_outflows_simstrat_deep, collapse = "\t"), + "\t", paste0(lvl_outflows_simstrat[outf_surf], collapse = "\t"), + "\t0") + if(num_outflows > 1 | all(!outf_surf)) { outflow_line_4 <- seq_len(length(sim_outflow$datetime)) # first the deep outflows - for (i in ((1:num_outflows)[!outf_surf])) { - outflow_line_4 <- paste0(outflow_line_4, "\t", - sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + for (i in seq_len(length(lvl_outflows_simstrat_deep))) { + if(lvl_outflows_simstrat_deep[i] %in% lvl_outflows_simstrat[!outf_surf]) { + outflow_line_4 <- paste0(outflow_line_4, "\t", + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } else { + outflow_line_4 <- paste0(outflow_line_4, "\t", rep(0, length(sim_outflow$datetime))) + } + } # then the surface oputflows for (i in ((1:num_outflows)[outf_surf])) { outflow_line_4 <- paste0(outflow_line_4, "\t", sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) } + outflow_line_4 <- paste0(outflow_line_4, "\t", + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) } else { - outflow_line_4 <- paste(seq_len(length(sim_outflow$datetime)), + outflow_line_4 <- paste0(seq_len(length(sim_outflow$datetime)), "\t", sim_outflow$Flow_metersCubedPerSecond) } file_connection <- file(outflow_outfpath) From 862afdbd7e3d50c76f175f07de1196d1436efdb6 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 27 Oct 2020 16:57:24 +0100 Subject: [PATCH 30/89] fixed small bug --- R/export_flow.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/export_flow.R b/R/export_flow.R index 4533a373..c1c94963 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -630,7 +630,7 @@ export_flow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake # add withdrawal depth below and above the given withdrawals for deep withdrawal zerowith <- c(lvl_outflows_simstrat[!outf_surf] - 1, lvl_outflows_simstrat[!outf_surf] + 1, 0) - zerowith <- zerowith[<= 0] + zerowith <- zerowith[zerowith <= 0] zerowith <- unique(zerowith) zerowith <- zerowith[!(zerowith %in% lvl_outflows_simstrat[!outf_surf])] From 5547014dee695e49f83596f63ac2972ba7bb753d Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Tue, 3 Nov 2020 15:29:28 +0100 Subject: [PATCH 31/89] fixed problem with Simstrat outflows --- R/export_flow.R | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/R/export_flow.R b/R/export_flow.R index c1c94963..ce6bfb1a 100644 --- a/R/export_flow.R +++ b/R/export_flow.R @@ -400,9 +400,6 @@ export_flow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake message("FLake: Created file ", file.path(folder, "FLake", flake_outfile)) - if(use_outflows){ - message("FLake does not need outflows, as mass fluxes are not considered.") - } } @@ -653,20 +650,23 @@ export_flow <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLake # first the deep outflows for (i in seq_len(length(lvl_outflows_simstrat_deep))) { if(lvl_outflows_simstrat_deep[i] %in% lvl_outflows_simstrat[!outf_surf]) { + j <- which(lvl_outflows_simstrat[!outf_surf] %in% lvl_outflows_simstrat_deep[i]) outflow_line_4 <- paste0(outflow_line_4, "\t", - sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + sim_outflow[, paste0("Flow_metersCubedPerSecond_", j)]) } else { outflow_line_4 <- paste0(outflow_line_4, "\t", rep(0, length(sim_outflow$datetime))) } } - # then the surface oputflows - for (i in ((1:num_outflows)[outf_surf])) { - outflow_line_4 <- paste0(outflow_line_4, "\t", - sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + if(any(outf_surf)) { + # then the surface oputflows + for (i in ((1:num_outflows)[outf_surf])) { + outflow_line_4 <- paste0(outflow_line_4, "\t", + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + outflow_line_4 <- paste0(outflow_line_4, "\t", + sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) + } } - outflow_line_4 <- paste0(outflow_line_4, "\t", - sim_outflow[, paste0("Flow_metersCubedPerSecond_", i)]) } else { outflow_line_4 <- paste0(seq_len(length(sim_outflow$datetime)), "\t", sim_outflow$Flow_metersCubedPerSecond) From 05f0d3e7bca7e1ee0fd590da61f241bdaf8f89dd Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Wed, 4 Nov 2020 09:30:47 +0100 Subject: [PATCH 32/89] small typo fix and pass argument for nout_fun --- R/cali_ensemble.R | 4 ++-- R/helper_calibration.R | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/R/cali_ensemble.R b/R/cali_ensemble.R index 2f34e7a7..d9c865be 100644 --- a/R/cali_ensemble.R +++ b/R/cali_ensemble.R @@ -384,7 +384,7 @@ cali_ensemble <- function(config_file, num = NULL, param_file = NULL, cmethod = out_f = out_f, config_f = cnfg_l[[m]], obs_deps = obs_deps, obs_out = obs_out, out_hour = out_hour, qualfun = qualfun, - nout_fun = 5, outf_n = outf_n + nout_fun = nout_fun, outf_n = outf_n )), model ) @@ -463,7 +463,7 @@ cali_ensemble <- function(config_file, num = NULL, param_file = NULL, cmethod = out_f = out_f, config_f = cnfg_l[[m]], obs_deps = obs_deps, obs_out = obs_out, out_hour = out_hour, qualfun = qualfun, - nout_fun = 5, outf_n = outf_n + nout_fun = nout_fun, outf_n = outf_n )), model ) diff --git a/R/helper_calibration.R b/R/helper_calibration.R index ad070d8b..94e0111c 100644 --- a/R/helper_calibration.R +++ b/R/helper_calibration.R @@ -256,7 +256,7 @@ cost_model <- function(config_file, model, var, folder, obs_deps, obs_out, out_h verbose = FALSE) import::here("run_gotm", .from = "GOTMr") } - # did de model runn successfully? + # did de model run successfully? ran <- FALSE # try to run the model tryCatch({ From cae82d9c9d3c1c671bc2a63d8a8d98b5b857f0e3 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 11 Jan 2021 12:05:51 +0100 Subject: [PATCH 33/89] fixed small mistake in the comments of the example yaml file --- inst/extdata/feeagh/LakeEnsemblR.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/extdata/feeagh/LakeEnsemblR.yaml b/inst/extdata/feeagh/LakeEnsemblR.yaml index b8607c75..e46fcb29 100644 --- a/inst/extdata/feeagh/LakeEnsemblR.yaml +++ b/inst/extdata/feeagh/LakeEnsemblR.yaml @@ -40,7 +40,7 @@ inflows: mass-balance: true # enforce pseudo mass-balance by adding an artifical outflow for every inflow [true/false] only used if now outflows are given outflows: use: true # use outflows? [true/false] - file: LakeEnsemblR_outflow_standard.csv # file with inflow data, with column headers according to LakeEnsemblR vocabulary [csv file; must be provided if inflows -> use is true] + file: LakeEnsemblR_outflow_standard.csv # file with outflow data, with column headers according to LakeEnsemblR vocabulary [csv file; must be provided if outflows -> use is true] number_outflows: 2 # number of outflows in the outflow file scale_param: # scaling factor for discharge in outflows. If there are more than one outflow in the outflow file, this must be a list with one value per outflow - 1 From e733deb99b92204a743ef16bf09c7b8ad18efe10 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 11 Jan 2021 12:14:23 +0100 Subject: [PATCH 34/89] fixed wrong message when loading water level observations --- R/run_ensemble.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/run_ensemble.R b/R/run_ensemble.R index 1c68af85..2783f40b 100644 --- a/R/run_ensemble.R +++ b/R/run_ensemble.R @@ -109,8 +109,8 @@ run_ensemble <- function(config_file, model = c("GOTM", "GLM", "Simstrat", "FLak ice_out <- NULL } - if(!(wlvl_file == "NULL" | ice_file == "")){ - message("Loading ice observations...") + if(!(wlvl_file == "NULL" | wlvl_file == "")){ + message("Loading water level observations...") wlvl <- read.csv(wlvl_file, stringsAsFactors = FALSE) message("Finished loading water level observations!") From df6739c9cd7205864fca75f3c94c15ec75eeadd9 Mon Sep 17 00:00:00 2001 From: JFeldbauer Date: Mon, 11 Jan 2021 12:52:55 +0100 Subject: [PATCH 35/89] updated vignettes --- vignettes/LakeEnsemblR_vignette.Rmd | 142 +++++---- vignettes/LakeEnsemblR_vignette.html | 451 ++++++++++++++++----------- vignettes/LakeEnsemblR_vignette.pdf | Bin 5345049 -> 5347438 bytes 3 files changed, 351 insertions(+), 242 deletions(-) diff --git a/vignettes/LakeEnsemblR_vignette.Rmd b/vignettes/LakeEnsemblR_vignette.Rmd index 6269bc9b..293174c7 100755 --- a/vignettes/LakeEnsemblR_vignette.Rmd +++ b/vignettes/LakeEnsemblR_vignette.Rmd @@ -101,7 +101,7 @@ In this section, you link to the model-specific configuration files. Templates o ## Observations -If you have observations of water temperature or ice cover, you can fill them in here. These will be used in plotting, and in case of water temperature potentially in initialising the temperature profile at the start of the simulation (see next section). +If you have observations of water temperature, ice cover or water level, you can fill them in here. These will be used in plotting, and in case of water temperature potentially in initialising the temperature profile at the start of the simulation (see next section). For water temperature, the data needs to be a comma separated values (.csv) file where the datetime column is in the format `YYYY-mm-dd HH:MM:SS`. Depths are positive and relative to the water surface. Water temperature is in degrees Celsius. The column names *must* be `datetime`, `Depth_meter` and `Water_Temperature_celsius` (templates available). @@ -128,8 +128,20 @@ datetime, Ice_Height_meter ... ``` +For water level, the data must also be a comma seperated values (.csv) file, with datetime column in format `YYYY-mm-dd HH:MM:SS` and has the column name `datetime`. Water level must be provided in meters above ground and the column must be named `Water_Level_meter`. + +Example of data: + +```{csv} +datetime, Water_Level_meter +2004-01-01 00:00:00,45.4 +2004-01-02 00:00:00,45.6 +2004-01-03 00:00:00,45.7 +... +``` + ## Input -In the "Input" section, you give information about the initial temperature profile, meteorological forcing, the light extinction coefficient, and ice. +In the "Input" section, you give information about the initial temperature profile, meteorological forcing, the light extinction coefficient, and if the ice modules should be used. Firstly, you can give the initial temperature profile with which to start the simulation (link to .csv file, template available using `get_template("Initial temperature profile")`). If you leave it empty, the water temperature observations will be used, provided you have an observation on the starting time of your simulation. @@ -158,10 +170,9 @@ Next you can either give a value for Kw (light extinction coefficient) in 1/m, o Lastly, you can specify if you want to use the ice modules that are present in some of the models. ## Inflows -Specify if you want to add inflows to your simulation. If yes, you need to link to a file with the inflow data. The data needs to be a comma separated values (.csv) file where the datetime column is in the format `YYYY-mm-dd HH:MM:SS`. Flow discharge, water temperature, and salinity need to be specified. The column names *must* be `datetime`, `Flow_metersCubedPerSecond`, `Water_Temperature_celsius`, and `Salinity_practicalSalinityUnits` (template available using `get_template("Inflow")` ). At the moment no outflow differing from the inflow can be specified directly in LakeEnsemblR, as not all models support this. Individual changes (e.g. in GLM or GOTM) can be mad in the -corresponding configuration files and model specific folders. If `mass_balance: true` is set in the LakeEnsemblR master controll file, outflow files with the exact same discharge as the inflow will be added to the model that allow it (GLM, GOTM, Simstrat). The `scale_param:` argument allows to scale the in- and outflows by the specified number. +Specify if you want to add inflows to your simulation by setting `use`. If `true`, you need to link to a file with the inflow data (`file`). The data needs to be a comma separated values (.csv) file where the datetime column is in the format `YYYY-mm-dd HH:MM:SS`. Flow discharge, water temperature, and salinity need to be specified. The column names *must* be `datetime`, `Flow_metersCubedPerSecond`, `Water_Temperature_celsius`, and `Salinity_practicalSalinityUnits` (template available using `get_template("Inflow")` ). The `scale_param:` argument allows to scale the inflows by the specified number. If no outflows are specified, they can be set to be equal to the inflows settin the `mass_balance` argument to `true`. There can be more than one inflow set by `number_inflows`. If there are more than one inflow, scale values for all inflows must be provided (see Outflow section) and the inflow file needs one column of each flow, water temperature and salinity per inflow, whereas the column names need to be followd by an underscore and the number of the inflow, e.g. `Flow_metersCubedPerSecond_1`, `Water_Temperature_celsius_1`, and `Salinity_practicalSalinityUnits_1`. -Example of data: +Example of inflow data: ```{csv} datetime,Flow_metersCubedPerSecond,Water_Temperature_celsius,Salinity_practicalSalinityUnits 2005-01-01 00:00:00,5.62,6.96,0.00 @@ -171,8 +182,27 @@ datetime,Flow_metersCubedPerSecond,Water_Temperature_celsius,Salinity_practicalS ... ``` +## Outflows + +For the models that allow changing water level (at this moment GLM, GOTM, Simstrat) outflows can be set in this section by setting `use` to true. The outflow dischagre must be profided in daily resolution in a .csv file specified by `file`. The file must contain a date column in `YYYY-mm-dd HH:MM:SS` format called `datetime` and for every outflow (specified by `number_outflows`) one column titled `Flow_metersCubedPerSecond`, if more than one outflow are defined the outflow columns need to be numbered like this: `Flow_metersCubedPerSecond_1`, `Flow_metersCubedPerSecond_2`. Scale parameters can be given for each outflow using the `scale_param` argument. If there are more than one outflow, one scale parameter per outflow must be given using yamls list format (see example below). For each outflow the depth of the outflow must be specified as height in meters above the lake bottom, or if the outflow is a surface outflow it can be set to "-1". + + +```{yaml} +outflows: + use: true # use outflows? [true/false] + file: LakeEnsemblR_outflow_standard.csv # file with outflow data + number_outflows: 2 # number of outflows in the outflow file + scale_param: # scaling factor for discharge + - 1 + - 1 + outflow_lvl: # height of the outflow above the ground. + - -1 + - 15 +``` + + ## Output -In the "Output" section, you specify how the output should look like. This can be "netcdf" or "text", which will generate a series of csv files in rLakeAnalyzer format. You can specify the depth interval of the output, and the frequency. Also specify what variables should be in the output (currently only "temp" and "ice_height"). +In the "Output" section, you specify how the output should look like. This can be "netcdf" or "text", which will generate a series of csv files in rLakeAnalyzer format. You can specify the depth interval of the output, and the frequency. Also specify what variables should be in the output (currently "temp", "ice_height", "salt", "dens", and "w_level"). @@ -205,7 +235,55 @@ or: ``` ## Calibration -This section is used when calibrating the models. In the package, the `cali_ensemble` function runs the calibration. For information on how to run the calibration and how to structure this section of the config file, see section 5.7 "Model calibration". +This section is used when calibrating the models. In the package, the `cali_ensemble` function runs the calibration. For all three methods model specific parameters and scaling factors for the input meteorological forcing can be calibrated. In any case the parameters to be calibrated are definded in the master control .yaml file. The meteo scalings are definded in the `met:` section and the model specific parameters in sections with the corresponding model names e.g. `MyLake:`. The meteo scaling names must be the short names for the meteo variables, which are defined in the `met_var_dic` data and can be inspected using `print(met_var_dic)`. The model specific names must be the parameter name as given in the model specific configuration file (e.g. gotm.yaml) combined with the lowest section name in which the parameter can be foundand separated by a slash "/" (e.g. turb_param/k_min). An example of how the calibration section could look like is given below: + +```{yaml} +calibration: # Calibration section # Calibration section + met: # Meteo scaling parameter + wind_speed: # Wind speed scaling + lower: 0.5 # lower bound for wind speed scaling + upper: 2 # upper bound for wind speed scaling + initial: 1 # initial value for wind speed scaling + log: false # log transform scaling factor + swr: # shortwave radiation scaling + lower: 0.5 # lower bound for shortwave radiation scaling + upper: 1.5 # upper bound for shortwave radiation scaling + initial: 1 # initial value for shortwave radiation scaling + log: false # log transform scaling factor + Simstrat: # Simstrat specific parameters + a_seiche: + lower: 0.0008 # lower bound for parameter + upper: 0.003 # upper bound for parameter + initial: 0.001 # initial value for parameter + log: false # log transform scaling factor + MyLake: # MyLake specific parameters + Phys.par/C_shelter: + lower: 0.14 # lower bound for parameter + upper: 0.16 # upper bound for parameter + initial: 0.15 # initial value for parameter + log: false # log transform scaling factor + GOTM: # GOTM specific parameters + turb_param/k_min: + lower: 5E-4 # lower bound for parameter + upper: 5E-6 # upper bound for parameter + initial: 1E-5 # initial value for parameter + log: true + GLM: # GLM specific parameters + mixing/coef_mix_hyp: + lower: 0.1 # lower bound for parameter + upper: 2 # upper bound for parameter + initial: 1 # initial value for parameter + log: false # log transform scaling factor + FLake: # FLake specific parameters + c_relax_C: + lower: 0.00003 # lower bound for parameter + upper: 0.3 # upper bound for parameter + initial: 0.003 # initial value for parameter + log: true # log transform scaling factor + + +``` + An example on how to run the calibration see section 5.7 "Model calibration". # Workflow In this chapter, we quickly show you how your workflow with LakeEnsemblR could look like. @@ -382,55 +460,7 @@ LakeEnsemblR includes some tools for automatic model calibration which are inclu - method "MCMC": Markov Chain Monte Carlo simulation using the `modMCMC` function from the `FME` package (@soetaert_inverse_2010) - method "modFit": model fitting using one of the algorithms provided in the `modFit` function from the `FME` package (@soetaert_inverse_2010) -For all three methods model specific parameters and scaling factors for the input meteorological forcing can be calibrated. In any case the parameters to be calibrated are definded in the master control .yaml file. The meteo scalings are definded in the `met:` section and the model specific parameters in sections with the corresponding model names e.g. `MyLake:`. The meteo scaling names must be the short names for the meteo variables, which are defined in the `met_var_dic` data and can be inspected using `print(met_var_dic)`. The model specific names must be the parameter name as given in the model specific configuration file (e.g. gotm.yaml) combined with the lowest section name in which the parameter can be foundand separated by a slash "/" (e.g. turb_param/k_min). An example of how the calibration section could look like is given below: - -```{yaml} -calibration: # Calibration section # Calibration section - met: # Meteo scaling parameter - wind_speed: # Wind speed scaling - lower: 0.5 # lower bound for wind speed scaling - upper: 2 # upper bound for wind speed scaling - initial: 1 # initial value for wind speed scaling - log: false # log transform scaling factor - swr: # shortwave radiation scaling - lower: 0.5 # lower bound for shortwave radiation scaling - upper: 1.5 # upper bound for shortwave radiation scaling - initial: 1 # initial value for shortwave radiation scaling - log: false # log transform scaling factor - Simstrat: # Simstrat specific parameters - a_seiche: - lower: 0.0008 # lower bound for parameter - upper: 0.003 # upper bound for parameter - initial: 0.001 # initial value for parameter - log: false # log transform scaling factor - MyLake: # MyLake specific parameters - Phys.par/C_shelter: - lower: 0.14 # lower bound for parameter - upper: 0.16 # upper bound for parameter - initial: 0.15 # initial value for parameter - log: false # log transform scaling factor - GOTM: # GOTM specific parameters - turb_param/k_min: - lower: 5E-4 # lower bound for parameter - upper: 5E-6 # upper bound for parameter - initial: 1E-5 # initial value for parameter - log: true - GLM: # GLM specific parameters - mixing/coef_mix_hyp: - lower: 0.1 # lower bound for parameter - upper: 2 # upper bound for parameter - initial: 1 # initial value for parameter - log: false # log transform scaling factor - FLake: # FLake specific parameters - c_relax_C: - lower: 0.00003 # lower bound for parameter - upper: 0.3 # upper bound for parameter - initial: 0.003 # initial value for parameter - log: true # log transform scaling factor - - -``` - +For details on the structure of the calibration section in the yaml config file see section 4.11. The calibration process can then be run using the `cali_ensemble()` function. Methods "LHC" and "MCMC" will write intermediate results to .csv text files in the folder specified by the `out_f` argument. It is possible to parallelize the calibration procedure using the `parallel` argument. This will distribute the calibration of the models to different cores. It is worth noting that in the current state the bottle neck for the computation speed is running MyLake (as it is written in R and significantly slower than the other four models). diff --git a/vignettes/LakeEnsemblR_vignette.html b/vignettes/LakeEnsemblR_vignette.html index 11439624..cb5bc1e4 100644 --- a/vignettes/LakeEnsemblR_vignette.html +++ b/vignettes/LakeEnsemblR_vignette.html @@ -15,10 +15,26 @@ - + R package LakeEnsemblR: Basic Use and Sample Applications + - + + + + + @@ -361,7 +171,7 @@

-

2021-03-05

+

2022-03-15

@@ -408,6 +218,12 @@

2021-03-05

+
-

1 Included models

+

1 Included models

LakeEnsemblR currently includes the following models: GLM (Hipsey et al. (2019)), FLake (Mironov (2008)), GOTM (Umlauf, Bolding, and Burchard (2005)), Simstrat (Goudsmit et al. (2002)), and MyLake (Saloranta and Andersen (2007)).

-

2 Introduction

+

2 Introduction

LakeEnsemblR is an R package that lets you run multiple one-dimensional physical lake models.

The settings for a model run are controlled by one centralised, “master” configuration file in YAML format. In this configuration file, you can set all the specifications for your model run, including start and end time, time steps, links to meteorological forcing and bathymetry files, etc. The package then converts these settings to the configuration files required by each model, through the export_config function. This sets up all models to run with the settings specified by the user, and the models are then run through the run_ensemble function. A netcdf file is created with the outputs of all the models, and the package provides functions to extract and plot this data.

Part of the design philosophy of LakeEnsemblR is that all input is given in a standardized format. This entails standard column names (which includes units), comma-separated ASCII files, and a DateTime format using the format YYYY-mm-dd HH:MM:SS, for example 2020-04-03 09:00:00. In this document, we will explain what the required files are and in what format they need to be. We also advise you to look at the provided example files, and at the templates provided with the R package (to be found in package/inst/extdata, or extracted by the function get_template).

-

3 Installation

+

3 Installation

The code of LakeEnsemblR is hosted on the AEMON-J Github page (https://github.com/aemon-j/LakeEnsemblR), and can be installed using the devtools package

devtools::install_github("aemon-j/LakeEnsemblR)

The package relies on multiple other packages that also need to be installed. Most notably, to run the multiple models, it requires the packages FLakeR, GLM3r, GOTMr, SimstratR, and MyLakeR. These packages run the individual models, and contain ways of running the models for the platforms Windows, MacOS, or Linux, through either executables, or by having the model code in R.

-

4 The LakeEnsemblR configuration file

-

In this section, we go through the LakeEnsemblR configuration file. This file controls the settings with which the models are run. It is written in YAML (Yaml Ain’t Markup Language) format, and can be opened by text-editors such as Notepad or Notepad++. Although not needed to use LakeEnsemblR, you can read this file into R with the configr package (read.config function). Within LakeEnsemblR, we provide the get_yaml_value and input_yaml functions to get and input values into this file type.

-

There is an LakeEnsemblR configuration file provided in the example dataset in the package (LakeEnsemblR::get_template("LakeEnsemblR_config")) or you can download a copy from GitHub here.

+

4 The LakeEnsemblR configuration file

+

In this section, we go through the LakeEnsemblR configuration file. This file controls the settings with which the models are run. It is written in YAML (Yaml Ain’t Markup Language) format, and can be opened by text-editors such as Notepad or Notepad++. Although not needed to use LakeEnsemblR, you can read this file into R with the configr package (read.config function). Within LakeEnsemblR, we provide the get_yaml_multiple and input_yaml_multiple functions to get and input values into this file type.

+

There is an LakeEnsemblR configuration file provided in the example dataset in the package (LakeEnsemblR::get_template("LakeEnsemblR_config")) or you can download a copy from GitHub here.

-

4.1 Location

-

The first section is “Location”. Here you specify the name, latitude and longitude, elevation, maximum depth, and initial depth.

+

4.1 Location

+

The first section is “Location.” Here you specify the name, latitude and longitude, elevation, maximum depth, and initial depth.

You also need to provide a link to the hypsograph (i.e. surface area per depth) file. As in the rest of the configuration file, all links to files are relative to the folder argument in the LakeEnsemblR (from now on: LER) functions (default is the R working directory). We strongly advise to set the working directory to the location of the LER config file, and link to the files relative to this directory (we explain this further in the chapter “Workflow” of this vignette). For example, if your hypsograph file is called hypsograph.csv and in the same folder as the LER config file, the corresponding line in the LER config file would look like

- +
  hypsograph: hypsograph.csv

The data needs to be a comma-separated file (.csv) where 0m is the surface and all depths are reported as positive, in meters. Area needs to be in meters squared. The column names must be Depth_meter and Area_meterSquared

Example of data:

Depth_meter,Area_meterSquared
@@ -454,16 +270,16 @@ 

4.1 Location

...
-

4.2 Time

+

4.2 Time

In the “Time” section, you fill in the start and end date of the simulation, and the model time step. time_step indicates the model integration time step, i.e. each time step that the model performs a calculation.

LakeEnsemblR will work with any time zone, provided that the time columns in all input files are in the same time zone and there are no shifts from/to daylight saving time in the files. Of all models, only GLM requires to know the time zone. In LakeEnsemblR this is automatically set to UTC. However, this information is only used in GLM’s albedo_mode 2 and 3, or when GLM’s rad_mode is set to 5 (i.e. computing shortwave radiation if this is not provided). In LakeEnsemblR, the default albedo_mode is 1, and shortwave radiation must be provided, so providing the timezone is not required. Yet if you are changing albedo_mode to 2 or 3, make sure you enter your data in UTC. GOTM also assumes the time to be in UTC, but this is only used when computing shortwave radiation if it is not provided, which does not happen when using LakeEnsemblR.

-

4.3 Config files

-

In this section, you link to the model-specific configuration files. Templates of these can be found in in the package (get_template("FLake_config"), get_template("GLM_config"), etc. all available templates can be shown using get_template()) or you can download a copy from GitHub here. The setup of LakeEnsemblR is such that you will usually not have to access these files, as most settings are regulated through the LER “master” config file. However, should you want to change some of the more specialised settings in each model, that is possible.

+

4.3 Config files

+

In this section, you link to the model-specific configuration files. Templates of these can be found in in the package (get_template("FLake_config"), get_template("GLM_config"), etc. all available templates can be shown using get_template()) or you can download a copy from GitHub here. The setup of LakeEnsemblR is such that you will usually not have to access these files, as most settings are regulated through the LER “main” config file. However, should you want to change some of the more specialised settings in each model, that is possible.

-

4.4 Observations

+

4.4 Observations

If you have observations of water temperature, ice cover or water level, you can fill them in here. These will be used in plotting, and in case of water temperature potentially in initialising the temperature profile at the start of the simulation (see next section).

For water temperature, the data needs to be a comma separated values (.csv) file where the datetime column is in the format YYYY-mm-dd HH:MM:SS. Depths are positive and relative to the water surface. Water temperature is in degrees Celsius. The column names must be datetime, Depth_meter and Water_Temperature_celsius (templates available).

Example of data:

@@ -488,7 +304,7 @@

4.4 Observations

-
+

4.5 Input

In the “Input” section, you give information about the initial temperature profile, meteorological forcing, the light extinction coefficient, and whether the ice modules should be used.

Firstly, you can give the initial temperature profile with which to start the simulation (link to .csv file, template available using get_template("Initial temperature profile")). If you leave it empty, the water temperature observations will be used, provided you have an observation on the starting time of your simulation.

@@ -786,10 +602,10 @@

4.5 Input

Next you can either give a value for Kw (light extinction coefficient) in 1/m, or give the link to a file, where you can vary Kw over time (template available using get_template("Light extinction")). The file must be a comma-separated file (.csv) with the two columns datetime and Extinction_Coefficient_perMeter containing the date in the format (YYYY-mm-dd HH:MM:SS) and corresponding Kw value in 1/m.

Lastly, you can specify if you want to use the ice modules that are present in some of the models.

-
+

4.6 Inflows

-

Specify if you want to add inflows to your simulation. If yes, you need to link to a file with the inflow data. The data needs to be a comma separated values (.csv) file where the datetime column is in the format YYYY-mm-dd HH:MM:SS. Flow discharge, water temperature, and salinity need to be specified. The column names must be datetime, Flow_metersCubedPerSecond, Water_Temperature_celsius, and Salinity_practicalSalinityUnits (template available using get_template("Inflow") ). At the moment no outflow differing from the inflow can be specified directly in LakeEnsemblR, as not all models support this. Individual changes (e.g. in GLM or GOTM) can be made in the corresponding configuration files and model specific folders. If mass_balance: true is set in the LakeEnsemblR master configuration file, outflow files with the exact same discharge as the inflow will be added to the model that allow it (GLM, GOTM, Simstrat). The scale_param: argument allows to scale the in- and outflows by the specified number.

-

Example of data:

+

Specify if you want to add inflows to your simulation. If yes, you need to link to a file with the inflow data. The data needs to be a comma separated values (.csv) file where the datetime column is in the format YYYY-mm-dd HH:MM:SS. Flow discharge, water temperature, and salinity need to be specified. The column names must be datetime, Flow_metersCubedPerSecond, Water_Temperature_celsius, and Salinity_practicalSalinityUnits (template available using get_template("Inflow") ). If you have multiple inflows, you should add suffixes “_1”, “_2”, etc. The fix_wlvl argument lets you fix the water level in the GOTM model, to reproduce the behaviour of an earlier version of LakeEnsemblR.

+

Example of inflow data:

datetime,Flow_metersCubedPerSecond,Water_Temperature_celsius,Salinity_practicalSalinityUnits
 2005-01-01 00:00:00,5.62,6.96,0.00
 2005-01-02 00:00:00,2.32,6.00,0.00
@@ -798,271 +614,275 @@ 

4.6 Inflows

...
-

4.7 Outflows

-

For the models that allow changing water level (at this moment GLM, GOTM, Simstrat) outflows can be set in this section by setting use to true. The outflow dischagre must be profided in daily resolution in a .csv file specified by file. The file must contain a date column in YYYY-mm-dd HH:MM:SS format called datetime and for every outflow (specified by number_outflows) one column titled Flow_metersCubedPerSecond, if more than one outflow are defined the outflow columns need to be numbered like this: Flow_metersCubedPerSecond_1, Flow_metersCubedPerSecond_2. For each outflow the depth of the outflow must be specified as height in meters above the lake bottom, or if the outflow is a surface outflow it can be set to “-1”.

-
outflows:
-   use: true                                    # use outflows? [true/false]
-   file: LakeEnsemblR_outflow_standard.csv      # file with outflow data
-   number_outflows: 2                           # number of outflows in the outflow file
-   outflow_lvl:                                 # height of the outflow above the ground.
-      - -1
-      - 15
+

4.7 Outflows

+

For the models that allow changing water level (at this moment GLM, GOTM, Simstrat) outflows can be set in this section by setting use to true. The outflow discharge must be provided in daily resolution in a .csv file specified by file. The file must contain a date column in YYYY-mm-dd HH:MM:SS format called datetime and for every outflow (specified by number_outflows) one column titled Flow_metersCubedPerSecond, if more than one outflow are defined the outflow columns need to be numbered like this: Flow_metersCubedPerSecond_1, Flow_metersCubedPerSecond_2. For each outflow the depth of the outflow must be specified as height in meters above the lake bottom, or if the outflow is a surface outflow it can be set to “-1.”

+
outflows:
+   use: true                                    # use outflows? [true/false]
+   file: LakeEnsemblR_outflow_standard.csv      # file with outflow data
+   number_outflows: 2                           # number of outflows in the outflow file
+   outflow_lvl:                                 # height of the outflow above the ground.
+      - -1
+      - 15
-

4.8 Output

-

In the “Output” section, you specify how the output should look like. This can be “netcdf” or “text”, which will generate a series of csv files in rLakeAnalyzer format. You can specify the depth interval of the output, and the frequency. Also specify what variables should be in the output (currently “temp”, “ice_height”, “salt”, “dens”, and “w_level”).

+

4.8 Output

+

In the “Output” section, you specify how the output should look like. This can be “netcdf” or “text,” which will generate a series of csv files in rLakeAnalyzer format. You can specify the depth interval of the output, and the frequency. Also specify what variables should be in the output (currently “temp,” “ice_height,” “salt,” “dens,” and “w_level”).

-
-

4.8 Scaling factors

-

In the “Scaling factors” (scaling_factors) section scaling factors to be applied to meteorological input, either for all models or model-specific can be defined. If the section is not specified, no scaling is applied. Using “all” scaling factors that should be applied to all models can be defined, otherwise model specific scaling can be supplied by using the model name. If both “all” and model-specific are specified for a certain model, only the model-specific scaling is applied.

- +
+

4.9 Scaling factors

+

In the “Scaling factors” (scaling_factors) section scaling factors to be applied to meteorological input as well as to inflows and outflows, either for all models or model-specific can be defined. If the section is not specified, no scaling is applied. Using “all” scaling factors that should be applied to all models can be defined, otherwise model specific scaling can be supplied by using the model name. If both “all” and model-specific are specified for a certain model, only the model-specific scaling is applied. If there are multiple inflows or outflows a list of scaling parameters for each of them must be provided (see example).

+
scaling_factors:
+   all:
+      wind_speed: 1.0
+      swr: 1.0
+   Simstrat:
+      wind_speed: 0.95
+   GLM:
+     outflow:
+      - 1.02
+      - 1.03
-

4.10 Model parameters

+

4.10 Model parameters

All models in LakeEnsemblR have different parameterisations. In this section, you can set the value of any parameter in one of the model-specific configuration files.

You can give either only the name of the parameter, but if needed you can also provide the name of the section in which the parameter occurs, separated by a /. For example for GOTM’s k_min parameter:

- +
  GOTM:
+    k_min: 3.6E-6

or:

- +
  GOTM:
+    turb_param/k_min: 3.6E-6
-

4.11 Calibration

-

This section is used when calibrating the models. In the package, the cali_ensemble function runs the calibration. For all three methods model specific parameters and scaling factors for the input meteorological forcing can be calibrated. In any case the parameters to be calibrated are definded in the master control .yaml file. The meteo scalings are definded in the met: section and the model specific parameters in sections with the corresponding model names e.g. MyLake:. The meteo scaling names must be the short names for the meteo variables, which are defined in the met_var_dic data and can be inspected using print(met_var_dic). The model specific names must be the parameter name as given in the model specific configuration file (e.g. gotm.yaml) combined with the lowest section name in which the parameter can be foundand separated by a slash “/” (e.g. turb_param/k_min). An example of how the calibration section could look like is given below:

-
calibration:                                   # Calibration section                                   # Calibration section
-   met:                                        # Meteo scaling parameter
-      wind_speed:                              # Wind speed scaling
-         lower: 0.5                            # lower bound for wind speed scaling        
-         upper: 2                              # upper bound for wind speed scaling
-         initial: 1                            # initial value for wind speed scaling
-         log: false                            # log transform scaling factor
-      swr:                                     # shortwave radiation scaling
-         lower: 0.5                            # lower bound for shortwave radiation scaling
-         upper: 1.5                            # upper bound for shortwave radiation scaling
-         initial: 1                            # initial value for shortwave radiation scaling
-         log: false                            # log transform scaling factor
-   Simstrat:                                # Simstrat specific parameters                                 
-      a_seiche:
-         lower: 0.0008                         # lower bound for parameter
-         upper: 0.003                          # upper bound for parameter
-         initial: 0.001                        # initial value for parameter
-         log: false                            # log transform scaling factor                          
-   MyLake:                                  # MyLake specific parameters                                    
-     Phys.par/C_shelter:
-        lower: 0.14                            # lower bound for parameter
-        upper: 0.16                            # upper bound for parameter
-        initial: 0.15                          # initial value for parameter
-        log: false                             # log transform scaling factor   
-   GOTM:                                    # GOTM specific parameters
-      turb_param/k_min:
-         lower: 5E-4                           # lower bound for parameter
-         upper: 5E-6                           # upper bound for parameter
-         initial: 1E-5                         # initial value for parameter
-         log: true
-   GLM:                               # GLM specific parameters
-      mixing/coef_mix_hyp:
-         lower: 0.1                       # lower bound for parameter
-         upper: 2                         # upper bound for parameter
-         initial: 1                       # initial value for parameter
-         log: false                       # log transform scaling factor
-   FLake:                             # FLake specific parameters
-      c_relax_C:
-         lower: 0.00003                  # lower bound for parameter
-         upper: 0.3                      # upper bound for parameter
-         initial: 0.003                  # initial value for parameter
-         log: true                       # log transform scaling factor
-

An example on how to run the calibration see section 5.7 “Model calibration”.

+

4.11 Calibration

+

This section is used when calibrating the models. In the package, the cali_ensemble function runs the calibration. For all three methods model specific parameters and scaling factors for the input meteorological forcing can be calibrated. In any case the parameters to be calibrated are definded in the master control .yaml file. The meteo scalings are defined in the met: section and the model specific parameters in sections with the corresponding model names e.g. MyLake:. The meteo scaling names must be the short names for the meteo variables, which are defined in the met_var_dic data and can be inspected using print(met_var_dic). The model specific names must be the parameter name as given in the model specific configuration file (e.g. gotm.yaml) combined with the lowest section name in which the parameter can be found and separated by a slash “/” (e.g. turb_param/k_min). An example of how the calibration section could look like is given below:

+
calibration:                                   # Calibration section                                   # Calibration section
+   met:                                        # Meteo scaling parameter
+      wind_speed:                              # Wind speed scaling
+         lower: 0.5                            # lower bound for wind speed scaling        
+         upper: 2                              # upper bound for wind speed scaling
+         initial: 1                            # initial value for wind speed scaling
+         log: false                            # log transform scaling factor
+      swr:                                     # shortwave radiation scaling
+         lower: 0.5                            # lower bound for shortwave radiation scaling
+         upper: 1.5                            # upper bound for shortwave radiation scaling
+         initial: 1                            # initial value for shortwave radiation scaling
+         log: false                            # log transform scaling factor
+   Simstrat:                                # Simstrat specific parameters                                 
+      a_seiche:
+         lower: 0.0008                         # lower bound for parameter
+         upper: 0.003                          # upper bound for parameter
+         initial: 0.001                        # initial value for parameter
+         log: false                            # log transform scaling factor                          
+   MyLake:                                  # MyLake specific parameters                                    
+     Phys.par/C_shelter:
+        lower: 0.14                            # lower bound for parameter
+        upper: 0.16                            # upper bound for parameter
+        initial: 0.15                          # initial value for parameter
+        log: false                             # log transform scaling factor   
+   GOTM:                                    # GOTM specific parameters
+      turb_param/k_min:
+         lower: 5E-4                           # lower bound for parameter
+         upper: 5E-6                           # upper bound for parameter
+         initial: 1E-5                         # initial value for parameter
+         log: true
+   GLM:                               # GLM specific parameters
+      mixing/coef_mix_hyp:
+         lower: 0.1                       # lower bound for parameter
+         upper: 2                         # upper bound for parameter
+         initial: 1                       # initial value for parameter
+         log: false                       # log transform scaling factor
+   FLake:                             # FLake specific parameters
+      c_relax_C:
+         lower: 0.00003                  # lower bound for parameter
+         upper: 0.3                      # upper bound for parameter
+         initial: 0.003                  # initial value for parameter
+         log: true                       # log transform scaling factor
+

An example on how to run the calibration see section 5.7 “Model calibration.”

-

5 Workflow

+

5 Workflow

In this chapter, we quickly show you how your workflow with LakeEnsemblR could look like.

-

5.1 Setting up a directory

+

5.1 Setting up a directory

First, you make an empty directory for the simulations of a specific lake. In this directory, you place the LakeEnsemblR configuration file, and the necessary LakeEnsemblR-format input files (e.g. meteorology, inflow, water temperature observations, hypsograph). Within this directory, you create empty folders for each model (FLake, GLM, GOTM, Simstrat, MyLake), and in here you place the model-specific configuration files, corresponding the information you put in the config_files section in the LER config file.

-

5.2 Export_config

+

5.2 Export_config

Then, you run the export_config function, which exports the settings in the LER configuration file to the model-specific configuration files. It is possible to run parts of this function, such as export_meteo, if the meteorological forcing is the only thing you changed, but usually you will run export_config.

-

5.3 Optional: changes in model-specific directories

+

5.3 Optional: changes in model-specific directories

Optionally, you can now go into the model-specific configuration files and make further changes. This should not be needed for regular simulations, especially since you can control parameters in the model_parameters section of the LER config file, but the option is there. For example, if you want to change the depth of the inflow in the Simstrat model, you could go to the Simstrat folders and make these changes manually (or through a script you wrote). It speaks for itself that these changes should be done only if you are sure this is what you need, and LakeEnsemblR does not provide further support for this.

-

5.4 Run_ensemble

+

5.4 Run_ensemble

The next step would be to call run_ensemble, which runs all the models. A new folder called “output” is created, in which a netcdf-file will be put with all the results from the model runs. If you are interested, each model sub-folder will also have an “output” folder, with the model-specific model output.

-

5.5 Example model run

+

5.5 Example model run

See below for an example run, and some post-processing of the data.

- +
# Install packages - Ensure all packages are up to date
+devtools::install_github("aemon-j/GLM3r", ref = "v3.1.1")
+devtools::install_github("USGS-R/glmtools", ref = "ggplot_overhaul")
+devtools::install_github("aemon-j/FLakeR", ref = "inflow")
+devtools::install_github("aemon-j/GOTMr")
+devtools::install_github("aemon-j/gotmtools")
+devtools::install_github("aemon-j/SimstratR")
+devtools::install_github("aemon-j/MyLakeR")
+devtools::install_github("aemon-j/LakeEnsemblR")
+
+# Load libraries
+library(LakeEnsemblR)
+library(ggplot2)
+
+# Set working directory with example data from Lough Feeagh, Ireland
+template_folder <- system.file("extdata/feeagh", package= "LakeEnsemblR")
+dir.create("example") # Create example folder
+file.copy(from = template_folder, to = "example", recursive = TRUE)
+setwd("example/feeagh") # Change working directory to example folder
+
+# Set models & config file
+model <- c("GLM",  "FLake", "GOTM", "Simstrat", "MyLake")
+config_file <- "LakeEnsemblR.yaml"
+
+# 1. Example - creates directories with all model setup
+export_config(config_file = config_file, model = model, folder = ".")
+
+
+# 2. Run ensemble lake models
+wtemp_list <- run_ensemble(config_file = config_file,
+                           model = c("FLake", "GLM", "GOTM", "Simstrat", "MyLake"),
+                           return_list = TRUE)

Plotting the model outputs is very easy using the plot_heatmap() function:

- +
g1 <- plot_heatmap("output/ensemble_output.nc")
+
+ggsave("output/model_ensemble_watertemp.png", g1,  dpi = 300,width = 384,height = 300,
+       units = "mm")
-

5.6 Post-processing

+

5.6 Post-processing

Once LakeEnsemblR did successfully run all lake models, you can either extract the output data from the netcdf file for custom analysis and plotting, or use post-processing scripts for an initial look at the output.

-

5.6.1 Quick post-processing

+

5.6.1 Quick post-processing

Now that the model simulations are finished, you can extract the data with load_var, or plot it with plot_ensemble. You can extract data from the netcdf file to do any further analysis. The ncdf4 R package supports working with netcdf data in R, and the PyNcView software (https://sourceforge.net/projects/pyncview/) can be used to look at netcdf output.

- +
# Import the LER output into your workspace
+ens_out <- "output/ensemble_output.nc"
+
+# Plot depth and time-specific results
+p <- plot_ensemble(ncdf = ens_out, model = c("FLake", "GLM",  "GOTM", "Simstrat", "MyLake"),
+                   depth = 0.9, var = "temp",
+                   boxwhisker = TRUE, residuals = TRUE)

- - +
# Take a look at the model fits to the observed data
+calc_fit(ncdf = "output/ensemble_output.nc",
+         model = c("FLake", "GLM",  "GOTM", "Simstrat", "MyLake"),
+         var = "temp")
+
+$FLake
+      rmse       nse         r      bias      mae      nmae
+1 3.353107 0.6522126 0.6448119 -2.048613 2.090902 0.1863813
+
+$GLM
+      rmse       nse         r      bias      mae      nmae
+1 2.671799 0.5899169 0.8976564 -2.078693 2.116857 0.2334367
+
+$GOTM
+      rmse       nse         r      bias      mae      nmae
+1 2.076912 0.7515084 0.9373982 -1.642189 1.691141 0.1990019
+
+$Simstrat
+      rmse       nse         r      bias      mae      nmae
+1 2.517848 0.6347966 0.8378958 -1.237562 1.983922 0.2224387
+
+$MyLake
+      rmse       nse         r      bias      mae      nmae
+1 2.548408 0.6258777 0.9059941 -1.922304 1.958271 0.1946865
+
+$ensemble_mean
+      rmse       nse         r      bias      mae      nmae
+1 2.385461 0.6721914 0.9118315 -1.781649 1.874828 0.1992386
+
# Take a look at the model performance against residuals, time and depth
+plist <- plot_resid(ncdf = ens_out,var = "temp",
+                   model = c('FLake', 'GLM',  'GOTM', 'Simstrat', 'MyLake'))

-
+

5.6.2 Further custom post-processing

- +
# Load post-processed output data into your workspace
+analyse_df <- analyse_ncdf(ncdf = ens_out, model = model, spin_up = NULL, drho = 0.1)
+
+# Example plot the summer stratification period
+strat_df <- analyse_df$strat
+
+p <- ggplot(strat_df, aes(model, TotStratDur)) +
+  geom_col() +
+  ylab("Total stratification duration [days]") +
+  xlab("") +
+  theme_classic()
+ggsave("output/model_ensemble_stratification.png", p,  dpi = 300, width = 284,
+       height = 284, units = "mm")

-
+

5.6.3 Adding several model runs to a single netcdf file

The run_ensemble function allows to add different model runs to a single netcdf file. This is done by setting the argument add = TRUE. Only model runs that go over the same time period and use the same time steps can be combined to a single netcdf file. Using this functionality e.g. model runs with different parametrizations can be ran and compared. Many diagnostic functions like calc_fit or plot_ensemble have two additional arguments dim and dim_index to select which dimension should be used. The argument dim can either be “model” or “member” and dim_index then gives the index of the other dimension to be used, e.g. if the netcdf file contains 3 different ensemble runs (member) with the two models “FLake” and “GLM” calc_fit("ncfile.nc", model = c("FLake", "GLM"), dim = "model", dim_index = 2) calculates the model performance of both model for the second ensemble run (dim_index = 2). Whereas,
calc_fit("ncfile.nc", model = c("FLake", "GLM"), dim = "member", dim_index = 2) calculates the performance of all model runs (members) of the GLM runs (the second model).

-

5.7 Model calibration

+

5.7 Model calibration

LakeEnsemblR includes some tools for automatic model calibration which are included in the cali_ensemble() function. The function profides three methods:

  • method “LHC”: Lathin hypercube calibration
  • method “MCMC”: Markov Chain Monte Carlo simulation using the modMCMC function from the FME package (Soetaert and Petzoldt (2010))
  • method “modFit”: model fitting using one of the algorithms provided in the modFit function from the FME package (Soetaert and Petzoldt (2010))
-

For all three methods model specific parameters and scaling factors for the input meteorological forcing can be calibrated. In any case the parameters to be calibrated are definded in the master control .yaml file. The meteo scalings are definded in the met: section and the model specific parameters in sections with the corresponding model names e.g. MyLake:. The meteo scaling names must be the short names for the meteo variables, which are defined in the met_var_dic data and can be inspected using print(met_var_dic). The model specific names must be the parameter name as given in the model specific configuration file (e.g. gotm.yaml) combined with the lowest section name in which the parameter can be foundand separated by a slash “/” (e.g. turb_param/k_min). An example of how the calibration section could look like is given below:

-
calibration:                                   # Calibration section                                   # Calibration section
-   met:                                        # Meteo scaling parameter
-      wind_speed:                              # Wind speed scaling
-         lower: 0.5                            # lower bound for wind speed scaling        
-         upper: 2                              # upper bound for wind speed scaling
-         initial: 1                            # initial value for wind speed scaling
-         log: false                            # log transform scaling factor
-      swr:                                     # shortwave radiation scaling
-         lower: 0.5                            # lower bound for shortwave radiation scaling
-         upper: 1.5                            # upper bound for shortwave radiation scaling
-         initial: 1                            # initial value for shortwave radiation scaling
-         log: false                            # log transform scaling factor
-   Simstrat:                                # Simstrat specific parameters                                 
-      a_seiche:
-         lower: 0.0008                         # lower bound for parameter
-         upper: 0.003                          # upper bound for parameter
-         initial: 0.001                        # initial value for parameter
-         log: false                            # log transform scaling factor                          
-   MyLake:                                  # MyLake specific parameters                                    
-     Phys.par/C_shelter:
-        lower: 0.14                            # lower bound for parameter
-        upper: 0.16                            # upper bound for parameter
-        initial: 0.15                          # initial value for parameter
-        log: false                             # log transform scaling factor   
-   GOTM:                                    # GOTM specific parameters
-      turb_param/k_min:
-         lower: 5E-6                           # lower bound for parameter
-         upper: 5E-4                           # upper bound for parameter
-         initial: 1E-5                         # initial value for parameter
-         log: true
-   GLM:                               # GLM specific parameters
-      mixing/coef_mix_hyp:
-         lower: 0.1                       # lower bound for parameter
-         upper: 2                         # upper bound for parameter
-         initial: 1                       # initial value for parameter
-         log: false                       # log transform scaling factor
-   FLake:                             # FLake specific parameters
-      c_relax_C:
-         lower: 0.00003                  # lower bound for parameter
-         upper: 0.3                      # upper bound for parameter
-         initial: 0.003                  # initial value for parameter
-         log: true                       # log transform scaling factor
+

For details on the structure of the calibration section in the yaml config file see section 4.11.

+
calibration:                                   # Calibration section                                   # Calibration section
+   met:                                        # Meteo scaling parameter
+      wind_speed:                              # Wind speed scaling
+         lower: 0.5                            # lower bound for wind speed scaling        
+         upper: 2                              # upper bound for wind speed scaling
+         initial: 1                            # initial value for wind speed scaling
+         log: false                            # log transform scaling factor
+      swr:                                     # shortwave radiation scaling
+         lower: 0.5                            # lower bound for shortwave radiation scaling
+         upper: 1.5                            # upper bound for shortwave radiation scaling
+         initial: 1                            # initial value for shortwave radiation scaling
+         log: false                            # log transform scaling factor
+   Simstrat:                                # Simstrat specific parameters                                 
+      a_seiche:
+         lower: 0.0008                         # lower bound for parameter
+         upper: 0.003                          # upper bound for parameter
+         initial: 0.001                        # initial value for parameter
+         log: false                            # log transform scaling factor                          
+   MyLake:                                  # MyLake specific parameters                                    
+     Phys.par/C_shelter:
+        lower: 0.14                            # lower bound for parameter
+        upper: 0.16                            # upper bound for parameter
+        initial: 0.15                          # initial value for parameter
+        log: false                             # log transform scaling factor   
+   GOTM:                                    # GOTM specific parameters
+      turb_param/k_min:
+         lower: 5E-6                           # lower bound for parameter
+         upper: 5E-4                           # upper bound for parameter
+         initial: 1E-5                         # initial value for parameter
+         log: true
+   GLM:                               # GLM specific parameters
+      mixing/coef_mix_hyp:
+         lower: 0.1                       # lower bound for parameter
+         upper: 2                         # upper bound for parameter
+         initial: 1                       # initial value for parameter
+         log: false                       # log transform scaling factor
+   FLake:                             # FLake specific parameters
+      c_relax_C:
+         lower: 0.00003                  # lower bound for parameter
+         upper: 0.3                      # upper bound for parameter
+         initial: 0.003                  # initial value for parameter
+         log: true                       # log transform scaling factor

The calibration process can then be run using the cali_ensemble() function. Methods “LHC” and “MCMC” will write intermediate results to .csv text files in the folder specified by the out_f argument. It is possible to parallelize the calibration procedure using the parallel argument. This will distribute the calibration of the models to different cores. It is worth noting that in the current state the bottle neck for the computation speed is running MyLake (as it is written in R and significantly slower than the other four models).

You can calibrate any parameter you like. However, as a guideline for users that are not familiar with some of these models, here are some model-specific parameters that have been calibrated in previous studies:

    @@ -1073,7 +893,7 @@

    5.7 Model calibratio
  • MyLake: (Physical parameters only:) C_shelter, swa_b1 (Less sensitive: dz and I_scT, and Kz_ak) (Saloranta (2006))
-

5.7.1 LHC method

+

5.7.1 LHC method

The “LHC” method will sample a number of parameter sets definded by the num argument within the bounds definded by upper and lower in the master config file. For each model given in the model argument a set of parameters consisting of the meteo scaling factors and the model spüecific parameters will be sampled and the model will be run for each set, calculating model performance indices for each run. Both the parameter set and the model results will be written to the out_f folder. By default the model performance indices are:

  • rmse: root mean squared error
  • @@ -1084,79 +904,79 @@

    5.7.1 LHC method

    But you can provide your own function to calculate model performances using the qualfun argument. The provided function must take the two arguments: observed data, and simulated data, both are data.frames with first column being datetime and then columns with depth specific values (lokking like the return value of the get_output() function).

    The function returns a list with an entry for every model, containing the path to the files containing the parameter sets and the model performance indices for every model run.

    - +
    # calibrate the 
    +cali_ensemble(config_file, model = c("GLM", "GOTM", "FLake", "MyLake", "Simstrat"),
    +              cmethod = "LHC", num = 300, out_f = "calibration")

-

5.7.2 MCMC method

+

5.7.2 MCMC method

The “MCMC” method utalizes the modMCMC() function from the FME package (Soetaert and Petzoldt (2010)), using an adaptive Metropolis algorithm and including a delayed rejection procedure. Internally the function calculates the sum of squares, which is equivalent to -2 log(likelihood) for a Gaussian likelihood and prior. The MCMC will run num evaluations for every model. The outcome of every model call during the MCMC simulation is written to a model specific file in the out_f folder, containing the parameter values and the sum of squares of the residuals. Additional arguments can be supplied to modMCMC() using the ellipsis argument (...).

The function returns a list with an entry for every model, containing the return value of modMCMC() for every model run.

- +
# calibrate the 
+cali_ensemble(config_file, model = c("GLM", "GOTM", "FLake", "MyLake", "Simstrat"),
+              cmethod = "MCMC", num = 3000, out_f = "calibration")
-

5.7.3 modFit method

+

5.7.3 modFit method

The “modFit” method utalizes the modFit() function from the FME package (Soetaert and Petzoldt (2010)), Fitting a model to data. Additional arguments can be supplied to modFit() using the ellipsis argument (...).

The function returns a list with an entry for every model, containing the return value of modFit() for every model run.

- +
# calibrate the models using a Nelder-Mead algorithm
+cali_ensemble(config_file, model = c("GLM", "GOTM", "FLake", "MyLake", "Simstrat"),
+              cmethod = "modFit", out_f = "calibration", method = "Nelder-Mead")
-

6 Citation

+

6 Citation

See

- +
citation("LakeEnsemblR")

on how to cite this project.

Although this information is included when running the function above, we would like to repeat that in case you use and cite LakeEnsemblR, you will also need to cite the individual models that you used in your simulations.

-
-

References

-
-
-

Ayala, Ana I., Simone Moras, and Don C. Pierson. 2020. “Simulations of Future Changes in Thermal Structure of Lake Erken: Proof of Concept for Isimip2b Lake Sector Local Simulation Strategy.” Hydrology and Earth System Sciences - (1): –. https://doi.org/10.5194/hess-2019-335.

+
+

References

+
+
+Ayala, Ana I., Simone Moras, and Don C. Pierson. 2020. “Simulations of Future Changes in Thermal Structure of Lake Erken: Proof of Concept for ISIMIP2b Lake Sector Local Simulation Strategy.” Hydrology and Earth System Sciences - (1): –. https://doi.org/10.5194/hess-2019-335.
-
-

Bernhardt, Juliane, Christof Engelhardt, Georgiy Kirillin, and Jörg Matschullat. 2012. “Lake Ice Phenology in Berlin-Brandenburg from 1947–2007: Observations and Model Hindcasts.” Journal Article. Climatic Change 112 (3-4): 791–817. https://doi.org/10.1007/s10584-011-0248-9.

+
+Bernhardt, Juliane, Christof Engelhardt, Georgiy Kirillin, and Jörg Matschullat. 2012. “Lake Ice Phenology in Berlin-Brandenburg from 1947–2007: Observations and Model Hindcasts.” Journal Article. Climatic Change 112 (3-4): 791–817. https://doi.org/10.1007/s10584-011-0248-9.
-
-

Bruce, Louise C., Marieke A. Frassl, George B. Arhonditsis, Gideon Gal, David P. Hamilton, Paul C. Hanson, Amy L. Hetherington, et al. 2018. “A Multi-Lake Comparative Analysis of the General Lake Model (Glm): Stress-Testing Across a Global Observatory Network.” Environmental Modelling & Software 102 (1): 274–91. https://doi.org/10.1016/j.envsoft.2017.11.016.

+
+Bruce, Louise C., Marieke A. Frassl, George B. Arhonditsis, Gideon Gal, David P. Hamilton, Paul C. Hanson, Amy L. Hetherington, et al. 2018. “A Multi-Lake Comparative Analysis of the General Lake Model (GLM): Stress-Testing Across a Global Observatory Network.” Environmental Modelling & Software 102 (1): 274–91. https://doi.org/10.1016/j.envsoft.2017.11.016.
-
-

Bueche, Thomas, David P. Hamilton, and Mark Vetter. 2017. “Using the General Lake Model (Glm) to Simulate Water Temperatures and Ice Cover of a Medium-Sized Lake: A Case Study of Lake Ammersee, Germany.” Journal Article. Environmental Earth Sciences 76 (13). https://doi.org/10.1007/s12665-017-6790-7.

+
+Bueche, Thomas, David P. Hamilton, and Mark Vetter. 2017. “Using the General Lake Model (GLM) to Simulate Water Temperatures and Ice Cover of a Medium-Sized Lake: A Case Study of Lake Ammersee, Germany.” Journal Article. Environmental Earth Sciences 76 (13). https://doi.org/10.1007/s12665-017-6790-7.
-
-

Gaudard, Adrien, Love Råman Vinnå, Fabian Bärenbold, Martin Schmid, and Damien Bouffard. 2019. “Toward an Open Access to High-Frequency Lake Modeling and Statistics Data for Scientists and Practitioners – the Case of Swiss Lakes Using Simstrat V2.1.” Geoscientific Model Development 12 (9): 3955–74. https://doi.org/https://doi.org/10.5194/gmd-12-3955-2019.

+
+Gaudard, Adrien, Love Råman Vinnå, Fabian Bärenbold, Martin Schmid, and Damien Bouffard. 2019. “Toward an Open Access to High-Frequency Lake Modeling and Statistics Data for Scientists and Practitioners – the Case of Swiss Lakes Using Simstrat V2.1.” Geoscientific Model Development 12 (9): 3955–74. https://doi.org/https://doi.org/10.5194/gmd-12-3955-2019.
-
-

Goudsmit, G.-H., H. Burchard, F. Peeters, and A. Wüest. 2002. “Application of \(k-\epsilon\) Turbulence Models to Enclosed Basins: The Role of Internal Seiches.” Journal of Geophysical Research: Oceans 107 (C12): 23–21–23–13. https://doi.org/10.1029/2001JC000954.

+
+Goudsmit, G.-H., H. Burchard, F. Peeters, and A. Wüest. 2002. “Application of \(k-\epsilon\) Turbulence Models to Enclosed Basins: The Role of Internal Seiches.” Journal of Geophysical Research: Oceans 107 (C12): 23-1-23-13. https://doi.org/10.1029/2001JC000954.
-
-

Hipsey, M. R., L. C. Bruce, C. Boon, B. Busch, C. C. Carey, D. P. Hamilton, P. C. Hanson, et al. 2019. “A General Lake Model (GLM 3.0) for Linking with High-Frequency Sensor Data from the Global Lake Ecological Observatory Network (GLEON).” Geoscientific Model Development 12 (1): 473–523. https://doi.org/10.5194/gmd-12-473-2019.

+
+Hipsey, M. R., L. C. Bruce, C. Boon, B. Busch, C. C. Carey, D. P. Hamilton, P. C. Hanson, et al. 2019. “A General Lake Model (GLM 3.0) for Linking with High-Frequency Sensor Data from the Global Lake Ecological Observatory Network (GLEON).” Geoscientific Model Development 12 (1): 473–523. https://doi.org/10.5194/gmd-12-473-2019.
-
-

Layden, Aisling, Stuart N. MacCallum, and Christopher J. Merchant. 2016. “Determining Lake Surface Water Temperatures Worldwide Using a Tuned One-Dimensional Lake Model (Flake V1).” Journal Article. Geoscientific Model Development 9 (6): 2167–89. https://doi.org/10.5194/gmd-9-2167-2016.

+
+Layden, Aisling, Stuart N. MacCallum, and Christopher J. Merchant. 2016. “Determining Lake Surface Water Temperatures Worldwide Using a Tuned One-Dimensional Lake Model (FLake V1).” Journal Article. Geoscientific Model Development 9 (6): 2167–89. https://doi.org/10.5194/gmd-9-2167-2016.
-
-

Mironov, Dimitrii V. 2008. Parameterization of Lakes in Numerical Weather Prediction. Description of a Lake Model. COSMO Technical Report. Offenbach am Main, Germany: Deutscher Wetterdienst. http://www.flake.igb-berlin.de/site/doc.

+
+Mironov, Dimitrii V. 2008. Parameterization of Lakes in Numerical Weather Prediction. Description of a Lake Model. COSMO Technical Report. Offenbach am Main, Germany: Deutscher Wetterdienst. http://www.flake.igb-berlin.de/site/doc.
-
-

Salgado, Rui, and Patrick Le Moigne. 2010. “Coupling of the Flake Model to the Surfex Externalized Surface Model.” Journal Article. Boreal Environmental Research 15: 231–44.

+
+Salgado, Rui, and Patrick Le Moigne. 2010. “Coupling of the FLake Model to the Surfex Externalized Surface Model.” Journal Article. Boreal Environmental Research 15: 231–44.
-
-

Saloranta, Tuomo M. 2006. “Highlighting the Model Code Selection and Application Process in Policy-Relevant Water Quality Modelling.” Journal Article. Ecological Modelling 194 (1-3): 316–27. https://doi.org/10.1016/j.ecolmodel.2005.10.031.

+
+Saloranta, Tuomo M. 2006. “Highlighting the Model Code Selection and Application Process in Policy-Relevant Water Quality Modelling.” Journal Article. Ecological Modelling 194 (1-3): 316–27. https://doi.org/10.1016/j.ecolmodel.2005.10.031.
-
-

Saloranta, Tuomo M., and Tom Andersen. 2007. “MyLake—A Multi-Year Lake Simulation Model Code Suitable for Uncertainty and Sensitivity Analysis Simulations.” Ecological Modelling, Uncertainty in Ecological Models, 207 (1): 45–60. https://doi.org/10.1016/j.ecolmodel.2007.03.018.

+
+Saloranta, Tuomo M., and Tom Andersen. 2007. MyLakeA Multi-Year Lake Simulation Model Code Suitable for Uncertainty and Sensitivity Analysis Simulations.” Ecological Modelling, Uncertainty in Ecological Models, 207 (1): 45–60. https://doi.org/10.1016/j.ecolmodel.2007.03.018.
-
-

Soetaert, Karline, and Thomas Petzoldt. 2010. “Inverse Modelling, Sensitivity and Monte Carlo Analysis in R Using Package FME.” Journal of Statistical Software 33 (1): 1–28. https://doi.org/10.18637/jss.v033.i03.

+
+Soetaert, Karline, and Thomas Petzoldt. 2010. “Inverse Modelling, Sensitivity and Monte Carlo Analysis in R Using Package FME.” Journal of Statistical Software 33 (1): 1–28. https://doi.org/10.18637/jss.v033.i03.
-
-

Umlauf, Lars, Karsten Bolding, and Hans Burchard. 2005. GOTM – Scientific Documentation (version 3.2). Marine Science Reports. Warnemuende, Germany: Leibniz-Institute for Baltic Sea Research. https://gotm.net/portfolio/documentation/.

+
+Umlauf, Lars, Karsten Bolding, and Hans Burchard. 2005. GOTM – Scientific Documentation (version 3.2). Marine Science Reports. Warnemuende, Germany: Leibniz-Institute for Baltic Sea Research. https://gotm.net/portfolio/documentation/.
diff --git a/vignettes/LakeEnsemblR_vignette.pdf b/vignettes/LakeEnsemblR_vignette.pdf index 9605669de86f0a5dc0f511fcad383685ed0e453c..e60866457a29c428ba4d206a274dab09618e2340 100644 GIT binary patch delta 270973 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 cg|S=^Qaju?AGQ!ln3P4J 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 delta 215168 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 z z>*C1?BuW%~g^0f<;7~|Zx1r(D)!Q`zKZXyMu{jUmaya`4lTjTTo<+*QXXUha=TBc2?tka2IWLO-B=dt>+21^f zqz>OuN96N`tP$58^4#91V-Y4ozo;r^s3A#X#w_Bs&GG1O{yN=kK4yL|9(hDSJv}nu@ruv$nTaz1c)X zcglH*XWE_mZ}8O_QfuBL+#ygeK0;cAGCxiiU+9=SB*u#|TB{kd{kClj_+3ont9|!< zzkWOhDAFXr*YGuJl1tLCxYsPdan15A6VIC3DB2j5Lx0y=aRLTzIw?1s9J05dX&rD3 zEvYxJRqHpnOWb|`BJcsJdAWp)7Xoa;KgOz!ry(&92eAR<8Cj~EQ%SRjI*UzQhPsoN zb+sDS;%00>ZMPy+9y|ZbnIHx&C5aJ}mvR7PzB@fGgycuopGCjdUctX^2%+tD?(Gx* z0u2z6Hh&IgFmLJv*L$sl^m2hW6G3h?_X)eX6&yD#>dobD4!X?l;V%D z#BQ}NBatxmBYxnnz~^FPYl;bk(%y8lIWV<_UF6ON9FERBhivZNfhx1R%zoPjl`EuP zjI4+2-l2A?BgN)SC*>--N{GlQt%J@_jbosk*$+Jv$Y>3Bu?2{= zihp+78H~m%{zO9dq(A9JRN)Vt<6*OEMrXepKWnL-m32sjx2l^5dAJnqCmy zQdX_LnE4!^CWC1&C`1y%%mGx=})pd#*c4N}UJut#BaD;8wrlKyc#|)OeyifzE zaF7i@6iAZqRh^vE+l4$WqwOW^v{od+h*0(cZ^V3MmzpZP_*(jRH19I9rdIFA6n|UDQdc!rEKmmfHtdW_;mN}E zDO?R6R_te&lxVGBWh=anOJW;-rmgRe1~gk3FX8G(*RxwAW^sR>glD&L(|!Q9*QL!gI*$+R zIoFV)<++Dj%`tMxNW?rN=x>-?`qidn2RsW$YGd|sHY2$*=3a6RO41ug8ewO&6R$Kc zuZ$-bpfDm0*}{`qWfD!AwW)kC9Tzxpx z)>;N~clVcZmAb*NG&eqlV1KtiKg3J{si$L%#FK-?(o?2Vx>Qz_ zHpemWwu0_d^W+wlu!=dogb-~{7oHa;$WY`yK*4TxMih>6gJUiU*OCv3cRljwXPZT1 zBfP4rq%w9X$;1KH=S7*nJmv(Rw&>xz#+WwAiIUUf-n5_bwSObD&tutGTE5{+ z2M3W9JT~n^c%z2%LrK$)SHJpmW6=5G`Y46#FEhZR0&F{V*^u$6OV0o1BRhPb${wKk@{iML?v}Lg+(tiOpCu*<2w9T0s3BlhK zt>O!4RF- z<+;Z4m6gxCpGD%;4A~ zK-efK{vao+QGX>LL++U$q}3^I(uJhO^?KvAlDJHW6mT4I)H_m7Ki{P?w-w!>)m!nI z{o*ytoZS4HWlUc8n^~*#II5hgw(Er0O{nSE7ZRkKp)_VWKaY`eimgbgLj}#I>=b^2 zhvsoGTPMO~vc{HLiS`?Cg*}J}W=<4~=)ozNF9&nALVxzhBS+K^{xZSNtta1`!%GIF zz8-f}a;ZIcW*C&&BQtz2P0XN4jzkreEvYvFj z>$7^{Sqt1hdLSrV^!iqL_Z9sf8(w)E$(9yHf)pIgBSnETz$LnY#u$MM+6xJLTmM&^4R8^vijiL z@PGdWhz@u0FaXK+c6rim2mzHLA#f3fA)F;0NMEynixq z(bt#QrZJRQZP6M74Op_Ei3(&qivOiQcvHi7?3xNL4%1&0<$rzDUw0(5QTETsbdHTG z@3K&pQWAI3f)X%t7t*3L!|stDKVq(?{Smn6Z_GyQv&t=aDv~!cWr=J1Dlj$aq`c* zZ>G(kKx#sg+L4?0-gvQzHoly9<$nFEb97)gV(O}Lu(S@Ze-D%5Q~lPe0^E zL!V`qd{OAiHO^UD!xJof@aAo)?QLChNtGG96oZ_tPe_$t<9EiJ05?V((|=&n)1uEs z&pzC+gm)2{%N93-M@a*QWB!!Icmvcp=9`@GC8#K8$QvW>Tv7~eP;w1oyCc+(i1A=t z>vRJ0k#QCWs!`4hU}?NWc^L;LSub5n&SyBxHGdAa_dSBq7nmC8?AiK(R4d;k2jk%W zjf?#?22&FwZp3;co&AU;^?xq24JE0R56pDLUDnS=gJQ`^q^Bdx7v$%iXL{92f24)3 zcNvf=v&AZfMT6P5#LZJ{dy90DtK%oW=MY7}JlT zyz4ufPzKLuRti|^Bx))CMqv3>#`y`A;fY#Stfq3ZGtgf{8OcVC&1K19->0e9SPH>g z$ej{qR%+9qjty8D5ODN`(pzED7Pi|qmn3v&y2(&bhmiH9z0%#ttQ8Myp+e@u&SIxc z3hN55&!3$ot8~;^Mt{WA37?}??8G3=oJ_F5$$Y%O%vqNp{G6bov_oPd^BXlylT>Oc zIa*uhVFBz4gGp-ef^(?`;A$=no%`G<-Y-Nk^P!SIqs8);mqx2s9I>kZeMxm{AiadQ z12j=C)!2~Y{o?lDpE~K9V}OKH%ySYrr^;1x-4jnXb^&M04uALv?FXQE%A(XcS7zjm zfUcdwZ2-ICpRV2HzRF!%+oV6K;e7RLChfwRah zhkY70k5rKmk*QAD?kuG&Bqaxu9)gWt!iya>DG{jU2kI7ks<_9Fp3mLhe?k(Dt}q1j zXq0mhYm_k#Oo7?gIp2uJRTf+njHO(98=CK>CViDEH-DRE596t49nn4kLq9KRn=N&k zomei+6&bFYBh@Nyxlv)WB=yKp*IEi=)P?-Xho_eH9Lo=Ee}#oPd&B&*d1$z<8_M2m z*rU1-39~^rxd^MEoZa35!pyG3S`Oj0BbRLh2#DgN@<+Oj-0!z#y5H62*OFKI?OGgL z08;zFI)8>j!3fh#Ozm%dzJT&wbrEa5p%LV9@3SbigUCSdaSqEP+u>{L?E%We^B7eD z5D%kA@600FTiv+Nddo{DMNQeiX|UmV9^828KV-qP4l#&pdo!C7`OHpt_Pg9QE!}Q9 zKH`V}C%1D57<+3xVr2btZJY~xx&4>GBR@flq<I2qKK)^sHsq<_GH`@b! z@o_~+XxNZmz(+v`%=rqS=iV=L-;RT4)qkhsif7B9CQfi5#5I1@)N$R@^!BPeb_6*h zi2y5+oS6;Z0o*k%K8eS~GJkiM6Tjen>fXYcDi`R_K-{{8%uLkhuKhmmu5oQ-2rqS{ ziF27}twB($@k2Po!w~f*=L+&Cwo@)g*D*x<=fLe9A578fRStb)1j)DN8X-oY!GAH6 z4Vo?IH&^+fid$K77YeVe*dd?^H%wcl-p4>y;6IV)ICIm%LW;^KRFC^UHS?bu{OoJi zA+`~pWYZJL7$EjYOg2&?hiyc$hY@;cfM_}j!#J0g@fb0j~V-sEx z-Y^DozU68bxPgUxowsR_2Sclvu7A4I4>Y3_5rK;B_5A%inXuF}hV@83j%Yc3uWAuN zw{qs%!=go%Xx5hQ|MJ=9xXw*8X*y{0!`WV9F6BB=7xO;NQvI2|!@d^d&=$!TWV?A| z)FLQ|@bl<7c1?I8OKiVcE+4}NiJJ5PYCx60EXmkMXEQP$v_5z%$B@II3k|`Db5wsD zfU2eZJ8?g5F0Gzg)H=+PAUZHA^tV#2g)A<)G;hxqyB%2!X3^2P) z_@Ut%@|_;Ec?~R{t#N-_dG*%g7-t*{u3?;q&F_SQK<0sIj7A3CHN-fq<_<6th{b$5 zWvkB~71f@si=fvbwx!x8#~lB7q!xeYp-3s2Arz5a-x`ufj^iu!R!dHa`9{wDdmh`b z$IEkxCQ}M=nbH=XIH-LBEd;MBl9<1g5fNXZVyD-m3+Do9^U|{*$FdBiSfn8{d^Dme zB};0FT(V_XkDl*D^Xjj~loxP;k5*)%5pg1H*8)Xlyy_PNExpp|u9ycIjoN<|sbpYP zT3R|W+g(Jftp2zi<|Na(&O0Pi*U+35su_AnG0p%ehE_-J$p9u0ny$8aR6{PC*ri1m z5xnsOeN#-cHy8$zfRtz=wRoviCA5a z#acsy^MJ>2t=v=)7bjzvVB>#4yP%>y8qL$7&Ivu| zX+;rRjqPS*10ZMELZ69H&%)qymu3kemW3!!=3*a8O+)xUQE6A@2hk>EOXI`~Iga&G z_@@aFt#!z;>Y2xK(|a89np?oD@t5H&I_&P!;|?%7UoG!**1GNrHwXtmU<`LQY`o~Q z!kc{&X#slCDT|n~^C*80kfQo6x;8|m0NiJWH`}}HQNg7(n?`{{g#R$0c2G1;uSHna zl9MnnBO9oHS5TPEDlqh0r0;%KP#En%Wju+R)6$T**0nkYY2hUH&|_s2zJ)OugD?FO zRi1AXIE>(|2(1FDc*%l-5UuU9=5dQ*LKgNFptBBxG9ig^w26R$aRIr6zBBSEakH`u2UR;96lQ*Zvn@&QD zPN6ItN$7X%67PQrYS-6VgA-C~?xxtz^|-+kROT1QAFlB!r=8}vxJvh1fCiDDlMn-d z>HDuRG-%2AXJ(`5u^$gzW~1SQ25T!IK)v1Znj^ToN=89Fx?*F1+~N4E>VS@mcCskL z9N->d#!i@}9aPUeZZuh`d#y=JR;kH*qeXw9Vzp3;vT>ADl-t6!Ye z>=hUK>RmN1*R(7hx@=s|{cWiuZ)a$BkD&SPP3 zqCTd}7DJvWrsL36=*#RUt6`x~HuA$eM9h{KQIUUgdw4w2Me5S1mbpnuwzdSSC6NBD zOm}zPmMe$nyW#!^Q*pxjA{6!?fUjDvkvNI01o5pHVSgGK*5eC>@H6I@34$BZA@gCN zZsbNB^AIyKJohHI`6gect@8`d0Iou`A<%jAbQ>wZ&_;r8IXDwNEWkhdDn>E)*rYRIS$?p5(+M$c%UwtFJ8dopBU17iXnT@o>|)r zUH`f)HufVYU**?3y`(MSJ*Nohiys_H9?mZ-0Mhh}4tY@!nzl^seK6ndXo_0UVZu&g z+ZLQnl&RtEhLN6}XfHA!Tm!329&4AepH38)rz1`jw}r$|hzgg+lTH;AGBGkR3NK7$ zZfA68G9WTFG&44rp_@+?1U5G`GM7QnP$+-9WmFtm(gljUYw*T`ySqbhcL+fmw?N~; z2@u@f-GaM2!QI{6ogk0g`DX5&dGGIAEa={)yXw@bhSd!vsgf##h>4vMP}0s8#K6MH z%nOi{m$$RElLN6ZGl<$*n*dlDnVH!UC@IApfQBFoJ6mx>5RezZ%+1Kc%*e{j%!7YG z36KKX0v+DPCIBNhfIJXnsODx5WC2hc{solm96=05hK}!QpsksOEs*BjMa<6L&B4OV z90Yie!N$PwC(<8pQAU7_p|O>ni=&kVz|htNAj2rn2vD$dc^6s$sO@Y4MnH2zYg2%o zDL@UV1yEO&P*DX)sVJ%|snRgM2UdS|vbVQ$_&+XUs%q*|^Z;=Y1vLo(P=g*IrLL;> z=cgLb)(GfeMh{R>d)NQT^KSUZU0y;>L`_>sf`#c%4FDE^Gtj}&;!oQD;r8*J8Q^bf z@2;i}b~b+{08pEQK=!;$OfD`ijAl-bAVxa}Ge&#szxb({TQ~w->>R8B?~fl2Kx^P% zjd8Ly0XhIc=D>di_;VTnISXT;tt0S{lcbkzwM`v=xuN4bbot*CGqiPb zbpJ>dA{nT73NGIO~mYMY~EQrBK&EexW#*)Kz0spO#eI3 zRg7ssoPq7bplF@|DW-@2;py;84v_u1^~YTfUd^oOn;L7 zH7kF_EPurBP4M)vx3dSB8d^I7JuOUu?+*xn9*&02Kmf?W3FztZPsM*D1QsrUiG?xf zeazpl3c_E}rEN{^06hN^zccx_>i-6S`mYO0^L{%`>};*w046|F1SSPL(EB)0|NnE# z{wJ5DleM*ip$(Awe>(cVW`;Hv)^7h}_&+w9z&~WE|3ADf93?GWfhI~8AY=2tn)ok& zu{6l=eeOkU&8&g%NAj0Q{m)ghexKR*y<_obVF4IeINAP3_dbrsR<=M#M*uhLUn<~x z6aI(qd*}bK1u&`VNNdQ7(Eabg{ADF!Yiws?VQU6p<=_MuIye}*AuzvB0V@Xwz=P#| zoK1kPe~k%%iP6>$^zH(%cLI3=Ozj+h5dIt`7aM>{`j6;ehzG!=_#ed03}90F8@*eq z{*AZ+Oj`dzJX`=K!@tqH&ggIS9@F?gh~r&nY-j!6lz&TDnBUWw{0Fjez9TzpYeR>B zSg-(?fd7E304CFaz;|M1|A6cOCiDM5c8+)CW^WGsXTo=x#XsOXCF_5{cfK}%e?yjc zcK`5Yd8cCc5BN^S{_kY(-0gu57IuG^!~Rar-uivZ{q6G3?;o|Xyp#E-_B{mXAMm}g zPJg%Z-S)3V?PzT0@Q;SDyjS4-5BOez%ioaoy#m*N!1oH={(}EKZc2Yv?O%I@`S1Dr zzt^C@uqw#G&I+h$VFEJ$r-{6OA;`hPRhRjF39!7&-@pF-O#i~ zz|O%AU|@Sc2rf4EKL^U=`CqQa|9Um}YyZ68lYiqss~7+Tx&n<67U%4Y`2s8x>jR6u zByuN8pecD6Ps(rvwPd297E>l#2|kEtZIJOj+>OUzNzPFaY5*1pdx?$SYkRj%AI(~A~MJlweIcvw<|nEGPm=%!EFcHMpy zCNWc*@O*}RXH@v0+-hg{X-F#WHOwR7P?dIX!ME!RVxe!>q1^)fQE8{&R6ZTQz0S}0 z&1Z>%Rc5r^f-(ofZE_bVc;eqe54b-g)bw2S=NWFkBZ zFNJ)D`UI&0*4~LouFSpML!JjQ58?@gMCktN-USx&GzdN7$qSQaCk8fw_~?B&-9EW~ z8F}5jgmE=&o9=Ue7FtGZI4+a(~VP82U-FP+8;GHhx4mlqzVin;1J zTO=jkX~=UaL0NVt%8no}#X^}}JPb7NBPKCAZP2giYTKTFidk+`v9_3o`J^}>nZsF9 zVps1+d|9RI&VqP`(66uaHH!07k;qZQ@_wQ`^>IBv{iY%l4L7P>Z~b;OnGZO6iv@&M zOecNf$>CHS!KyI}jnz!Qw;b7Mea``m2ZFbY4yY!Q&(Vk-CG(__did*Ft(u0aXhK${ zbBgPhigAR0rPea*h(9Oeg&g0%CF+XUzn%CV)O2^6AM8h3F{bbp4~{6C6w(B-EM1PJ zz?r~`y**l_BYd#rM?dgb2{wY9z3OgPwUBxv)ilL(SwKfd*W&5%W0blfsEO7|Q3+`1 zRP6HP{OTEb%~hG|`^i`dhV)xmD$CDnv4u$`0O*c?7j~5B$TGY*oQN3=M#YJS33+Jk zgJ)ON+toMS?CG@L^#-#RpT~0o7R|#)E~rfjg1#aih2){0v?i-$rF|tvu@B;@0+CMN z2OAg7r#UpWzq-4BlKc?ls!pJ>Bb7g ziy_)XNwDtJ?~nDKx{cV@6_dL_X$DTEs@6ncl&n2mZ{+TH=jxC9bnU{M-ucg0Yvv(z zr_;bzDc;&H2nq1C#DqyBGeI5~$_)!+hD>yS^D)$M(&gr?UZojjvs-XX?PcN9J~)#E z&ZwEFV#tHo&T8cx6z0+b6DKTHB-g>Kt7zOT*9Q)@cG!g(JUE_NyA8Qs6TmGPo!|-1C?3K2E z$USXZYcd1{6QprlWNs3uCPdS5&&@gVXNvm5nzfURVPBN)IPLnyUFNNiu4+``)b3|% zca@$2G`lTe*huFF{1Z@;nB)f}4tfg;l&FKtr~a;A?l)8-ijs-&1ya@>=!33CJ(946 zE7V_o5q!CiO@EtpQwBX_{qRxlec6J4z4&19LglO5U&2w6Bk}1xfKRkOxsTi(uaOaj z%AW3l4JNCnC_QB=A9sTjS1XT1tMy}QS(x4lQtfmqkGyX3j0uEL7P5&s%%_Ky8~3C% z@{$lR7hZFtdWRN(F}?JT8DX?Jr&aY3^UVUXW8l(sONqw_$pGEu2Dw{1L8JhGU#=>9 zJ6n)B#n@_B2;T_1n7QEZ9ZZR#Q!CgxwQ^A5Lse$lV95~ITq5r9sD@1+QL?fXlfUX+ z=3Cu7=Yzg$s=D&8^MSDfSc4r)Sjyt?ia>OCwscl$Wt}SI-xsZXs^9pCHDeWel#3p4 zhcp$bbBuEF;r)8yqa)o8!C(uf8iXuwNX0xlwFWO0J z^)Z>rej&R=rt0=GORqYrTk&^{V{BW${lv)d8AGZDX|2W%VBhSImi0MNvZV&QJY?5B zqK~U*e-CXj*r)Xl@!(%?hkK%q)Px5M>fp7X@<76n;E)BfZ(CxvZ?lkpyBBtQw4-F> z_Eo-KtdM;Kt1VeY{mgfO*X+IpXK0`gwj6TW>Ibi_ZE?&>1zQ&Tb3QbaOrS%BJ=lfD&(iaF0>UTfPoWr(RE5 z)ZBjHcS#rnk;?r80P7g6({t2WSpqn{x6-WJLG1QTBr5rWD$`7Ti`6t0SeR#NX!uwh zuHT6ZK3BcJ5CNeD`8A%s8a`+4yXQA3>N^U468+RE5W#F7s-Qo2T&$hV=n2` zxv4c_ofL4L%6vFu)#q(ZM|)z!GX?QA!nPWnjIkhxh+6W0ZwNh}5sJoUiE3GU>R-dO zLFN$J!&C=;^U?|z+mJG|^##dqE@b8tG?!3P+)oQ^^;|(TSyuL?fUS!&85(DG8Ztjr z=P`$sIjEbLsix9SHc;Efaqry1YO|PzLRp0Jw?}>ih_zVDF`kMi$B3FSZ|1RuVO<8X z)F=1~FrFxXy{ya&F;aW)5%BgOD%{uP*16|N8IuUZ@rC}F20oH{`IK_POwiEu*x|tK zvL6||!Ek%NM1OC?J@}o$&_NftM)~>mj&3zxF<7Z>f3eRZ4GS~Y+vqD@h&IXysh8Et zrVxDFWq91_%Drkt*-U{BgP4A;6GclMg8?7(j1JO&&cjJk<|Q0(H^d`fpUoSis(K!C z_k*M)2ys5D15Nm|PX#}L-vrU;BYEw|Fj>goF6KH2Gapx?rJ_LMR{_kw@{@LHV^AFV zsi2hWiem)TVCAd)wLWe+Z^}>fN8|R-A&?T~gKTK$eDml`ibO20Nt8|FN0{`pUYRpk zzKA-1S~_+mEEq<9FBJkOc6ESmzAu5N-=_b9Mz_J`n~)8=H1XR7Vhu9$s{8{?yW{@S z!bro8T4k^wekRf5=vT&GW0g~aL^GIzat(yJB6>bZhT?TK+S=lNZ&41;iwU_L>r>^+ z#?mO|I!hXDlPJEMuhnzh=O@wXE{m&Y)ay)tsD_~SsUf@xr#vGSo7p*Oifljz?iHgV zB_jS5yN{1V4m-Pl0r6Vo2~5B9+PA8o15hilotd0i?($!ttn!u^u`pHrB%{f3;zq+h z7AXyoRjAG|o~R2~SjBRJ7wCK|`kv_g`%c{eK1Z)UqON@RK6%L8N;762kl2~)$b>R~ z-w%F$6I4A;1+KnK0{5d(l=Gwu#gpUiK#-*FdX*RW2O8)^`;G= zY#cJ%Ai zrVO4@`#NE4{DJn+Qhv`%uQIR$FSfKcOy0p@I6!5+V$)-LyMo%sLHUZ1ctDCl;}i+A z*qAgE)|Hw1M{m0%l*Jnb5G6W)@)Qq~s#KxU4+@d&+AH#SW={^|F3mm^UTvtF52JdJ z8=~#t^Us-2wrSTMZ|fm$tZTq5B{G>afuyouvW)qEDXV1j^X#|94=_fPlZS)rM1_HtE{q&uYsJ6w&T*RgRR@e7 z=D)XgQf~H@#efNa-UX2k3Cr-tRu_>fgBN#e3)wWk_ z_LGNeWWO+GoL6Y+$`|Ih;NTlIO3PW7t!Wjp#973 z226VBnZ|ZFKq?Mz2d@GcR;@8UQn(6Z_SmT!q|>0F2;(|`YYqtB=VR4Gm+*M;VDh|K zimZir)imhZw@NXF%jjEOSpF{dSj52a#b?e!G79fpJfmn;-DK|@m{bh-Yr zUd9W494EiAFqLlq^_OpqPKT4LRMG26d^ga1O{oGKkI|46G0T!QPG&HUUO&kj~d>nGOASx%H z-2*2XBSEImUhV>={wUgxfuXoQGmz8t<(IW*J>#%{!m5+_i_nF_>!4kU0m{Obg4h0s z<`x-EDJ|P-Js3BAjOP40Mzb5^U=ce7Q0<^t5*8AA<@CY;t*hv*K&O8g9&YKH<|`5V z5EirPCS(-fKm_NEc-u$~gEk%55e@}CeSgQW@~8! zJB;{$E#h_4AHJjW zPi-~P9qB?HY4VpvL)J80yy-p6_%!T&x!ctwc1tY1rh57MQ@gF)e$hIvRs$ zh9!;#heDV3@1}!T&WXb+qn$O6LDABibNGaRgk!{(%2%jCAB-|ua+)_e+nAGIG13Gz zJR6C-a==bJcQ7^C29Aq3^F!ej8F0^zDdO90*1vs)>9-TSE6Pl_-3$CId~B9rn`(!q zxcX*vK!-EDJp*3yB#b;pV%CZs?c8EVT*qJ$`w2(_B_M;J_jK?B&?yT!n;l5>sbrvk zGw=AGVa9zMYs^k9zhJ0qW%DHz+laR7?pMC0&@q8UI?noG6gFVu$3P78R2N~Wi=31z zJ?|wcmK-zpbnTrjG8(2i9oI6ph{oQ|s~Vt)Y9cHt_a+KL7f`yFRXOhU0i6FHUv;n! z9lMTAJyqj(Iz!K$JlaZ=-E0PVhXXZ#>LSdRA1;09WBg=s=|$66?mD^hO7>n9Jk3th zl=tV>Ek(#oGBJgbJ5%;GjeR!hs&kX#0L>ecY@-}*=;^@17F_y~Qx8Ii6U~e!v@R{T&R}!D6qB(8Zj@d6$&S|evtaF-TYA4eC=Qtlvp7D%H5`{_eGaq zv%^dP!r9*A+R1Lv6R;1dKr%Of{d)vWq~LjS3#sf&vqQv=_V90Niw4a~)*l&@i)QYM z;om7-e#Dn!aX4Vh51dhjSPxs5KOl7NXktZ%1u({s7h_UyE8HjEve%xo|TK9Oid=*HUQxq7b^bwMoZU(UWQcAWyB5eUpX=H+U~560cstNU$2x@RCsFHBI#jz^jAsn za#HCsWz!FLB|f-|N`h3b@?8eMPR0!z`ObU3p&(671zaS3TzXJ)hp|nj_bgk0u<@4D>Drx7=-e$# zGqQ{pd9{Y|kQY=O!(|6lF>?r(r4Pl4Y*bSfFXFP3<+AnanQ$(Dr&$hf!#_~EpYVvZ z%fyAUM;!$cEXI-7Spx#prQ4|^4Cv8>pDbqHu-tIJo^hs{>{$dx%}Fr?8}L8Pq#8Hb z5f_=lj(F{7($yn zO@rtq1f?2-%ree6Wc|trI1KZJEezPe0m;& zaqXH+aDHPQQty65p$ES8y_UX$uam}};cAV3Y_E91vs)YjiolN>FWmQI-cvKhVAjT`He;oyW6fsKKaVWUKooaoQ+F~qBr;pSOjG!$w%u zJb`%jWf8?aS;5tzUB2e$Fl+sdemOUdJ7aMp?8}&Q_^CxpA@HWl=O};tfd|dI#wCn| z(cDsi?2?*!F#))K4C%4-#rn47@;SjcxmqSSrilX~nXuLR6{aJJyj5_1v|X)&w$NpimJ0H!x-R%Bia=n~1E!bb^sTUT5M%1z%Fm8y zI0dh`P;PC5{54Ct{B?Jwj{X98Mm0EV3R{Iw>%3rLFkq^Zxeir}#VUZ|c#@BQzP#vq z4avaN-=_BBZ1QyD&~nLliIQ9;KP0DE- zh$p?kOftytLIp1kcX99|H4>*StLPLYqNbg$YqCM9t31S>2Gol8J@@F`F@f&o!@>A> z_Gj0QXmZ3?AuM|LYmO!Qp!r?$~2(S2y0lG*CEZ7v`uhgK}@h|?m znsdPmAUr5+o>3DCF*@t3rds*HLw3{5mXH~>QSm7S>4e=eVzfh|wLTwfkc%y21xzDR=En3Qp z1;-jA-Mz4fG97jaIFMl#(EF!?p#WrJZs)fs8!dsoubU2NR8(t>NprO`_&jwcvxg2| z3s{o1e03Fn1KV@6Y^>{=6m1ZvgBQuth&hR@Mf#cGNX!q{9=-3y0YvI7 z*fJ0mnLIL`NUYno#Hc0W_Q<*#1|mLsL=6ue z%hWkL!mgNCkl}U@o$QKuJa>l-d;xQ36BOB-*rQ+amPJD{PfytNPeAEzOxHZCJ?H>H zySWvI$l!i}n*QQ{*&u1k;zxVgd|m^-7lqJWujP87+Ud+rA_@^f>f=K3k`Jd$ayTR9kE-s-5 zlKkdyuoL}}>I?CSV5XijCMrqIYnZG%U!4tTU#fCXq(VN2+9t21*m5hadisD&MBVaD};lprcVW^nEQ~aDpZcFJT{!sW&bo z{TmV9c%luo?@`IIh~pLpAi_vXY4k%4u1xPvC1OErX)PSW>m1C^g@)@7qg4_?QB#(frP5P;E&0=dswD%Bm{*w+uo&=W zGSgq&qs@2)?r4J75|+=P1-PF##$~fhdBFAL3T6U-RM~I5 zmBJz@tpfkh9dI=wHK$kz2FUMRRrcz;Tdem2RHO!J;X9u< z5tkKs`uo}=RwG8*W-m(W2l8@%EF=%x-0BdLDChA{)^*H<#Zfr5K7g`uAKcy&jH)w~ zEeq$Y4@UL(cMCj40od?1mdO!KA<|?1H6X?&w9|og2jvWn6P#ptyd~ zGTlmi0ibO#O@-`Vy<`E>CJ*rYE(Mf-#m({uO?FTB&7VKdxbU%l?Q`sZD?BSe=)}z( zo@>_5E~6{ER3bcfos49&f^YI!DV%G|GVy;{g?fmV?`l3$E$dcIc0~_`|7;mDY_!V0 znH?KM5$M7qVq-03F2swf?i(5bMg{YO=(F!D<@X=X7#3>^3X0Lh=3ppE6Gcg3kSKH4 zuDt^7`vnq6{)L=U=~uRYVQ=VrN-~&VB{@NEg0;6(vO(;DY|2Gd%H)uD+jqT~s0>Jz z#fduW+@F?yVjk9V>=Phv<`zQBiuVHfnNd}K*eba>5LA$Vnj?!D{S3g?!tqBh43yR> z8Ke{5n{(%*3xcigCcu8|RJTb#Z7NVdW6y-wShg`T?;kC@kSkJuI72&S@n|T_)4SJY z`i67MLkl)8+r&rgXc2Q5-nbClG&@sAxR`>?@mJiBIwmm6P1|H#MqG z_Hl6Pb*ZA7b_d0O4}l4pF$#M3!NhoNhny?m3s+(Th0-`+XuHWlGB^fwwk{&mKC%At z>AobqV8P9z)9F_g?5Zl&cZPP4Dsx+gK|owMuQGJ(I@{P!d>qt%q+0QXVn?50e=Y=( zdcp8O)EeXCm}+O(cXjwNr(!phw4(DA=VO=YTN#AvU_o?$_pX2wKrx%1|L)k;vmrV% z#xt8U*3h4Vmu1)EXC0Bfo|y1tN28_OWP*Cml=ab|BkiAPY}@ivA^0(^XC{mI zPHzpv$CS~jh!@ZW`|Bm<`$c5WFSl|VQ3$?`V}#a6QmNo!$DJCnpB)%*T=1vehLYFN znI0mOONx?z;6H{;mKZ{M^d}L5zH`sqlY#ww!Gcr0!VB?;)525%McCJlw={4Sq-NB~ zn7^EgYhW;Z;yqw)N5Ym^3_nk1F&5+HvU*%IcGpcH{>>Xco(maF!#~!<&2tP{5TFt{ zH^t^FIi4?}zS7gZ?xnK^CHqE=XAy+`@mt7|P~|Xx5`O41iU9q%DUnHX*%G2Xzn@8Xm>b{@_XRRCEuOzh%{{;<{1QH`)=OXXj_u9-DR)42 zoLF*yvkxyVRhU)Vr=r-|F6JY>s`WKCrZYZvXow84mK9lbI7uiqf8V3#uGq*|L*8qc zqC0Nx*&`HWElVo%$sldlS@eb$l1>AW<`g6~I=D(JInork6em}6M6s?fGid$F59V+8z_cgyw zRuRYEp^p2fc#XIh7e!;~u{V=*2TvR*RVn$ax0T3HIPk^`JBZn?f4N3lsCZO4Z0?7# zirFp)tGAPhP1?CWz&wMA|K&(_A$gahIwR$t$wbN6}OtPmK~st>wTBg(d(W3eKU zH6DQ>fK4s>B@r9D;B0kMZ7Y?YgDyCKmzUidm^!|^@)X8RAfWY$7HKdnWoR6auH#-# zIm{vW<%lx4!gr^7yUQmk=BxcON-jS7nKS!~)6h|#&kcI16S{y8rLJjP0*cmuQ2SIt02~eMYLf4CPS31(xh`JbAA52ILdzwo?`vvx zgF;~zUF73rBVj#WQdbx&`LQG6H!XNK!7ln`p^5yF&vr7cs8)GOzC5~>JT>yfizuY? zfW_Dq!MPi93xe;-v&LK1KyRTF_p#cHg8LL*Dz@q>#|;32+oY@#BhI^jr^mNi4OB(VJ3DMKZxP3*P{|5pIK%Xhmpqch&PTLC*4bx#C(jIF)Xi)QxSnf47dIa z+J!hWE`wgXHSz7_`TT=D@a%0KvQ(_lX)X9UsoOto&-QoYOGz<*txy6}CPlAoKz~xw zHtMrrfC-Iln56`>`wdDEVN?OGwnm>q24`4-w_EXQ^obAZ-t8o~4S;=EI^&l~H5&!Z zpecT4vj!xNr#*$KKOO4|r2f+#_|~y0_J#$$irLIZX|S)7OcaNH0<&eb6zSrd4YL+M zK1=H1H@C^H1hc?@ej+2$U0^8n!rgnE%&BjF<&inUHZ>YhAt>xWl3{X# zpo9vgLpAzzUSLDr8Y;JFu!0n>d$m6yb9?n%kjCY?7OtxcHx_UuoedkQ9#H*U`+TE3(Bl7D}#v#sB>m2}I0uh15b03C%CgCXn0F7V`n>9$#TYcvC3JmfvB5Bp5GOfFD51e7rOidyQSZt zXy6pa$J$)H?CK%O8>TWGi%U-DMUqZilS|#97jk2(96V)waq@i zh$*i|N^#X|Zyw-a(i}jU+A%h!{em3IQ>kWzp{{=ee7c%qJ4O#fm~ZA2cD3i^0@_S6uwfUxJd6Z4~Dv? zY=7Sk2Bax8+HOpr*}0!YM#9p3^3si*$pi6B0xnvR#nD!MRApuZxs{57)2$GM^0OJCzB-Rcx|VKxsyT*glEGK#(cpqj&0(1lLmVfK&$r! zniZH-M}nOQ>YD1chw>fkA+8CT*PY*u)`T&d&)HU-w<=5F?&Emcd;0N>U|kn~lMw($ z`5raDMZeEst|RE~npy!4p#1TrqUM9#m>0D+yH$-!DNTa;$2gJvDV2)CH0r^mNQhKuS{tHQ4b&wpH&&ROVCSoLw+#1xeoUy8>8IPQ zMrDtuT;bi<-oihd?9A{%sn&UVq`?h!FDobF!l3?QrRD0?I+QRU(O6o4bZfK2|2f5z zy(|n+p1vf?_1lvv0k0VXKETDZhmviwN{yQ!w`{esA@eEsa1vQo>RumujKOyqri#V^ zKTaaE=kOltdpan7aq}kyk{+=j1nsUhp;Ox^->2jDYfUrX-wiWtb^hkl3ZHo}`8`{M z7t^yuhFox5()rbhy8D@bb2rrVEA_2<#c>aYBPblsKT>oH-021-3SJK?GblY3d@A;1 zI@6V{u}3=$UPOF3e(v4AUO=byioCLCBVwv`lEznK@1WGOA2s|n?q0N};fbp-2rnTl z_n8Vxtx0z)vU7*&q`9;ViZsJ!m6b@1_Zs-qsMleEhs>dYE=n+eDMT{OL75=@SK?f` za^soh$7`)dNRc!&oFF}>ZYsr#E!xlZBuM0Rke#7afk3X}Ap@DVVGZkOkxny*{xrz= znEo$!0doYLl4DEqD#*?OCU$CL1D1ngP zh^1l2^+&n1KuSe_H_U@^B=&+35{jw9dh9RAGV)<(mY;OSesrvleJBa0=2W4G$`3?~ zfNE}n%<-Cm5tn(Wl&>3q%a{4;|3PEO1|wkz|HqTrhEc_yf{Bd=*{S{^nd>zHqo&Y; zX~JSKn79z@pzw1CXBC`sWiT%(v8NOcE9-vYMpr3>aDIP(2OnIOi5d`p7)H7clZ^ZY z^QAeW5;v5U$`?7g*5445Ppx2mC5TF#o>C)4#Xn!OIAP)lyWp3vj%k92Q^F5z`uo?1 z!8DpS7U-zWdd!l>Oh8SVS^NB^?2i-k8`d8176<5l)po!CL9~$KpmQQq}`_en%kqIXaX5L^TgmMGB zr-;LSHT%lUk>SB3!%x~d5&x*jh8-QcH5u?TRzsMP2iI_OMNVRjtGt!RmfdNcm{ak0 zUTC9uoe_`H9yA}Ad8^6c5NF3-#eN4<@PWImq9(Ze@LD>%?LCe^ zy~%?47;<;0dEMv=_@b99Aa#rr=_(-bj0x&8Gi@OOLpRh2Ox$%PHZHlsz3Pj`g(zHA znl)yBjXkq+pyJfoTHBiOa$1K?r10|tf{nm690PI9i4jcY$$XdS2re*}*v2thP`}Gv zRuSC;K~2LvYFA=556zJs*v!GP-y%{(;?TL z`YHXG%RqF{$O0#Y<5pr{BDM!VY9R6JAW`oWZqnH|LW|bk{sSO~1vW$6FL%*mtca#r z50r~i50t=^y04iMhjJUa%dQ9Q2UaIYsZN?oV>sn!tgwN7oCCx4(Se8`anNWcp)aX_ zDMlcw!p`&;#Ohv!6K(-yw18Le8rW!vWyFgIK83m&H(Sx)_Np_ZnP-inYYr*qP~ipr z1{FoZH@UHk9m}b^;ZyP~+rP-ow+&|?6(pH}>2LLN!k;L6n4a#{NbA=`d5N#+7!dq> z{fr-iUf62XYN}+A#BN(Mb9#Uut3?QZ=p4p5aH*NXQ=#CWNK6!W8-_&XafFo^WyiH> zuk3{z$3Iu}I+sG?2Yg@pRwMCvhE^X1HhfC>kwv%?hM}|f7F9~Uc3AE1OQOc38cGio z7Lo$Cg-W^@8)rPx&RLr7r>$VvCp_ww>b>qOyplN%^ZM%R8GgYV^6_ds_Av;5bU`$O z^^QOOSv4Y13LJv(D=;cGU!eqe5h?q| z)Jx?b!fk5Bm{%SmwbOCPuZ_KbNEAa}u}`w`%=%e{rI;hVqk`K7YS==4Q1eLIvRoz| zhPER={=(pG2qiituSgf&KV;;%9<9;h#1kx;8OwIQUHJ$0O-loOb4eQ0lah^{QRl4T?sD? zklD?Y49-Q8UC;E+Naz)RU>=WkHeW7RZA-G0EL4rm2bn4z(mob^IRrBHj)_(AQz>W8 zIVaDhSJ4-Hi(wT|d-N5U;M(6F-s@@p`#%(nJOw+|yDls)M9=1*^6=nTbs*Ylr%4s{X9RVf1yh`)(0qw zI(L}Mkqjx)GuH4hQ?y-Tj?0)%eNaPvE9g8O8-1cKR$f&>FPjTEJ1v9i1wINU;+>2D z%$nXNIAfYL3wreT5PnHb8cQyHP>QemJpauox+=%xo@= zC)3H7s99U^>2~zUhbti`Oy%dXQ9wDy519J_j%A8c#RQj!;9b59R`=@0^WBSrLr~R{*6t) z@4?kL?Pz;zL#U74iIC!iFuau`v3XDi%@CZwc~h1x5~sn;JVC`RrX=tu5+gR=cniDIK7-LXG?^Z)UI z+Q(r30^uvRtjA=k@|U`8o@s16X2{m1+^I?5N-Fd-dNhL;f1Kuuq#FyE(1dFpXG93K zNWUL$pDHzqOx+w}%IwKU#*k2{+7rd2uDY{NFTd91-=9*{2+#|j9cTuBs}tWKg8V*G zBJ2!Lhm&NeMncKn9^1LXxGiKCuE={+J+S!Mc!{6Z`O*XL@v>j$@H-->PY&35ky&Li z*^H(Nl0b2|e*uq92kC(zWt{9?m6K%iU}(@zkQ|!I#PNfy(GmW3F<4M4m;S5ew%&BJ z=@B7>;x8!ETmp50m(j2fo@ekYIxA;$GbZev81!q}7HGjLbxEd4wGj>E#( zD&~TN6ZLOAr$K-V-lJPxxtt`$;u~==2~kULFt z8AV<<*P_N6cnt)`Y^tTQ#VzsF_NtI&{kUa2=*#LLO`gKHjV**V#rB zbG3A-f8}JLE0gl7b&%0XCfOQg?x&~QWfV!Q<+#ClHL*)Vyz*)A$>UflvI#hU`~24) zxACXSrbX>)dMC1`dZT%)S?x@1=CGE#0PSKb-xx`b(vh;M%_otJl>KvBzd#tQIG-=P?d?s3&p*B*Cd`$w zUli9MAvz|^iB9K(Wnyi-cw(@nwp1H@Z^WuYN@4DR@CSH z86Oce8)6Z=er{dY>RtC9&{pvviuR<_?t;uLv$UCnpc%g&Y^zQ~@*K=WCD+=?M6o_U z>s*cpi5Al~;+3IhlK0iq#8sHRHGy!4e?!h9_`$;LH6hqZ!m-?g=Lof<_Ta$?zVlHD zR7sS##lR5`5L*4T4RdGk`8Hwk5nNDIq7}*-yJJ6SjY90<9DHha2BF$ESdAWU1vwPm z?Jcb`J7sB%^h12_^5a-rL5gw6;MsdLQ;{R+90@ zAt}059ghf{NfMo`&&yz~lV2}>?hzT2lpKKodeWk|4LU=w^OZBE**zg=o-~;KOh?)F zX3@2oAIYXyyO+OIRm_^vvm4%jf2$NVNX@8*;F9AQ>?Xc{O(ATop~OOh4MsUNY%nb$ zOJ!N!m~bbJP$koZ3TrF#^( z8tZO5n=Hw2y`y$9XayLoCp$^I$P{ygR9Cu-CDNPo{X}DGIzjckgY|%<4FH?~~xUz3V{%qV$ zdbozMCf;SaaMK}yqeraKf4VbIq!S?gew=W>JeeI7>RzNF`S^fW!W`b|YXSQ3aM4%+ zmqQknK%I2OjKrki;e2&5nAeHTu!;eOx;onjOhfgXlWn z8d{WNSm&$Iy7PK_^eR=k+JZ&g9aOK=@bvFRjf+(E2_U@a>!f7)LF=kDbI6diEm zD`qfj50ttSJm*K5h9ixrN~K%}borI1-G@;PXP5M z3fas!OcaR3(|h^$?2!1lAKs_wKINETi8G=nQia;}V00RAD-q5JNfRk=PIda!sA3c= zdWm11wtqobEewHle_%ukN0Yg3ytLY+`{#~k64$$QX?gVB9T*BCFR5J+`lwC+=?Wwc z^mMGdo@)e8d5p)wC21DKl{f#xKAvH1+yYxCEL|kPC_$U;^VN>xY;QJMy8hZeNRi+2|NH0Mb|Z=wmyAF(9aRBLz= zx(45hkm(*k)p4M`&xcqYS?`Mv5oViF6Or78_~xRDTB4>PZ@d#PO21pTb&aHldSe2E ze~uR5!;%4>v+nu1S_E?Ms6DtNJeLZ(i6woe(HkF?e+4snzOdcn*Yp#gvmuEf8yBt> z-B}m`md!39uOfS|wcV>&nwhta68+!NC{98wiE^44OA+6N$k*&c#XS6W%N|wlQ6pGQ zS~Up%hRko-q1)94wG@MMo!}T3eB0bojsoJ_9VC)g=m9sa#$njJNX!LtdvREkLN^bJ zHf|BKe`a#~WA;4}E&bhp^x)3sj*X@VmCjAW zj3HY)RZshTKh13&tz;X$vXH@&_Mh+Fse?M9-jCh%3?yg3FmpwFpRt{#soyqvIK%0w zcJS~{55LG+DF0U#&8bgmqB|s{;6yNRGVvwDe__h1v}xiTUdKTyutOizHC8FNC)mZB z;}oo3N13BZTpZPm5cuQ7;*f(qPt%AP;OPIXS;C}pF&`#v`{u2UO(>|Y*BnrRPa4ch ze|uNo?wfKHgvkc5$-1hG7&6WEe@?Kr3ct&i5x)o+C0t5be?RD@`ccc%xVCaJ(gn?z zf40het9sM7JS!Q@PSf6uA&^WjMYjw=S zigTbU6u;4B3c{lD(p($M-_F?HXIKEHnNHJ}dWRZ^2s4+|Fe)6^>I6G`!P$c6f6Awm zDBc9{_oF>b)eco%IFJu+3hAdLqcIG;7%%f-QpO2cK$;tJMvJqGsUq!(s*=~)|MQ8uJj7Do=c6iW?^ip(#Ge8 z&)8W8mmo^y-1nxKa*Ie?;?J|Me}io0vWI(31@o();XGu*D1Y*2fLU)g_<2Z0qQ=cR zYGPuGreoG=iQ5r5P4siOu-#->qO?$r@ZrZaw1wC&oRWkC@d_T=2RMsZf53P_*MU$f z8Q{GUI{3T!mk62seoV}=Hj*rX3Z=@K~P z)m&wYV`w>-&Pg1qKz`ifa?iLr;;&)HH3pVxc8eGO&!@uY+8Uz4UfR#Pd^+_PZ8WW2O)*c*Q;CG_#|vI09eHiUf2EpgF|eVk)9Cox&ne-b_brn|!vO#hfGLA~8oosbM$q1clIyMHvpIYYjB_@SPY^S143 zzhAn1{2^8uJpuUy;t{JoGh+U!xG~~s#Qcjaa@G-Z7tjmf(+;=2L}T}*LdmB$JUT&J z0e?~LE?Z#|bkGG$)%=88e-XHYL&Czgs(QaiG?*@}*z`7YZ4ohQcWmDs_ggVAi zZ$sw7fcz^I{WRxELT{o8%O9~M*;H$I61oQ8kDC5x;#qNcM}urw+BlLSA1owJ`O7^g zNWu?~e;GF+Kw{0c_0wl)X_P|xjj9(;rV$e}^$^EA(Iqp}_P?O}6SOOuTva=;$G5|$ zkr(v$$2YoYYm)~&A(UkgG0^40$SHrKUYb59oZmZx>)K?k3#waVF`6GLYMO)6Ne0P} zcMx|ZIW4?VfRc&#$@Rt2iw#R^{*e8$Gv$gBWJBR*vmM5!w(aglj(dEJ4?Jwj1@( z;T9Vp^Q&GubqDfXz2Hzx0y>0V3^+qX^#ft@iL-#@9%`6u@~dSm{<>apO1|SxD;W9> ze_DI0FKm+(T&M+e^=taoUP39P<5`d9%``)1 zbZO9y{81vbIHjgOrGAKXJ$~a36~Sd0k*2B55(a2^sq-ERA`>03P9iU;?+)Z>ReE!SJI#u9<&Qkc?VfA7=dG>nEm-ZANV-xS&LfHXa#p0?DK$q_W= z32NllWVL^bsW_pRG&r7yclg9NC835?6Q^Ks$IGn7^z6ki^8MCcl$Tbf|K{T+oF*;Y zwp}(Euxy7c23#}zPD)tea9O5mW)m$nXaxbJfBif!09KvE2FXLQM@7L}Ac~N`e=|nA zeW6lmu6B0?JBmK*67RQuimd_KG~7vDDPL2*jCM~1QOgK@)55=mhP$P>^^3>ke3)eH zxcu}zslA-zcbjw47)Kx3qf%%*FH{IQ6UUEns&J(-m(9BlHbPXD7Usm}KT&Z#Vjv`k zlu94M0mj89KHVyO#yeYbX3$o7e|aw9v08^{8nYdTW>B;u))=O*29-%O#1SEIcf(PL4Ie^!VD+MDX9 z=L<{>T(f|F`oG-y_%_i&jL#oVJ{C`En!uG@0KNn*!q|Q+4%S_l0{nVh^GX-Gi@2W2 zD0??46Mq(Vc+dMHNnJR+jRo4eRzt8gZoBmZD`H@oAB6p8Tpd~rQDItNJ52I@9}SS3 z`s&Lq(L~jnqBIbSu;ju){OsVhbTQO^KyU|gwn$`M;ctq*!Z7; z5`Bi+(^6u-+|=856EA_%Whww0Ekd1;@~026jIV`tCp{MHz*L0fg~uC_YT0epXOgEf zp@`V*qy#>U4V>0XO`Kp8bz1e-=9bN}hmK(AqTjlAB&r7meI55r6T`HaOSRWMnr5fP49cu7kD}enDhO83lnR;XP zKrjuKfXqt-0R~xUB@8tb0Fs3A$3jB~w#IZf{<6mK*j1I1f4<|+ivdrc(S#WXr)O~( zc}eUsKdv2L3iEb=fd8kyH|V6MA<&3Mt>;mdYW6sofLwk(tE6c?@HYyW1ffYBdU{ZY z-Sn@M(LP~<&-bqCQGCYXn3R67^Fe24^2AkpBHyhXL2O6lPblaZIm0F?8(qT<=vTn} z+sHEBSdxobf2eiZyCreKTe@seK}{?pmeZv&DJ}~dDlJZqBEb`!ui%Y#(Q&~^W=v0L zu6Qrdf0W2mPIKemt=0;t^|HQzu8j{^lGVT5H>n}fBl|A~I3YIE z0h%Ujh)b92Uq*bBqWph?ptEQ!9eWI+lsPb(fx7z-e-6hZH^`Z2vE#AQcM4Zi4GhdZ z0|e;di_1BgBg(BGr~@crIqsh-hpDHKVE6Qc~J;l*P_6E(OK*w<{1`& zrqc9Qmc@y@bjnp>SlTk`)_f=qxT;B}f9j|7DbhKlP;{0RXG~PSJj@MbXiv#f z8hK#XRdIAy<+Sd_$L60z$cLGvXMnGaoRletdQaOW19Hzm1qn-^XGu7faE9AdBy|kx zSDgct5y9yY0SO99dw8^q)$(JOMOFJlT&z?%H2hvtGGp}kSpTTk0*GI1L?7eZp!gSb ze}aH`36)U{Ho$O`3ZVy-P%6^PDb4y99)J4CC{oAe?+RxRn-_21|t+u zm|x*PZ#XOMECVzA&FMC6-}?njP}Wvu;APs|^%U9(lT6t<{(%Jv0mFusCc=a=YoOHG zm88otfpKsox(HX!_4>1IpZClx;5DDXf5^oh#c#01safBltz5ah1tW(BxTnT>SZ(O8 zi05B>DQnNTKS-sj+Ar7;l^%e$%)HOx^8vGPr9s-Ez4iNE)>pHtT$C=*z+udO15rG# z&&I@7F~269$hee2wshBdu>*uYtdP8B8|zsvI|Cn??0fn(~xrg)jG{2VxM zizXkd(;%yhORUK$_N}h(UVE)=bV4T+eO2bm%A*3T)>-pWii=L=*z95wC8AlQihd1Vg0(F? zq+y5Hjd0Yf;t+>g_`eA6&DnQwAg@&%bBO$DJf)i?cTIy}Zy1i+H5gl(|`9rU>#qN@0YyB|de{PXsc@F@- zqwTv?0Y!?Rd8`>5jtTrYZBNcXjqfK0GIFAAa-#E)xGW3IidNty;7Blb+)*8EgnTz^i-BN#2%D~YFf)mjv+;3z$=}r6r>Uc!!-+?{2lBZrE}~~#WxKD ztc}WC(?>|5yc7E|u|Fi$Z94$Uc{IY528<2eTx>5yzk@DKREP_&CQ3vxh(K6WTrAN?>w)+J{re(u z$$SLMQ2x+Eh{}@^2bK(*rD&3wmyiK#0yftf|78=adAp*GM**Gw35K(mc+mAXGhLuk z>MJyrd7uudj8xOwe;!2J*YMG>mwE#FxSPZD5s!)32D9Okm+k*(pHA0!{NGF=wVrnL zqd}~;DD%eqW_nc8n4_P~`^$)|4yLNis|Xc0+u*hHnQZR9pB}mmH5vGL21f^`_}h{0 ztz(=T)z5?Zfr20)gv73Ag9-B-zO#gQ#?7gkZEhMi_BBX?e^Um|tB4dV(t|keQKtyT z>OSK^o~Z>Rth;Jh7pj>jO~_H6Y=4QVt76>B!1JIE*Jh=9_A5mREv2YOF&$qtvlE2% z>O*HGCU`n_i2U-ib9!Pj_WFZ-2^a3E)C(7iZgFIofc zxo^Ggu(#N*f0-r8FE9WT9pnhYx8xzaP~FE`#;Z|P^n?9662ma{NhJ}nx!#Hm=XxJY zpoiz>PeuY+D(gwquA;3Md#ZZSSZL)|!Ho#TB<$Xh(ZoR+M+{Sz8JT4Xl#8^+t2_hW zF*x?sSMUCjX;jmX`dl!Q;OH+Qc|d-!oerxz5)>FNe|@lyS>OcXC0)J8d40fMt$TveSeb3tQv?n52shff2Gf3v(;rXbIrtmm?pgONKe}3>^_Q-D8oa;uV!;XRT#j2CiN-w2YV%>VhSIDmOeVB5x zEYX_3`~+yS)JUj6_5$x5M%5QGN?vdA6J6e?d^&++LnOK&sAE*#EI2!~wC~())>!_p z=0f)K6HcNZpUfjja|}vd-%iX@7}UomMP$x4f3p~u=lF9>b#t(@C};-kS#&-rXe)8n zwTZQ;#ED&={t<%V9Kh$Ub^FU{jHVBdlFV;!2!p{mZU$)o7Eb%}`nvi{%I`a_H*&}- z!0mvso>xTF|NW>&4<>FBXIrUV2u0xj<7~>SRlPkd(=o*Z12~B5OX= ze>~$0iCJ&R^!~ENf&xVYbx23zjey&{fG8LEi7{U3EN5KF6g}x4_jq}rbEFv(2t(6o zADzp2s7FF@&PMrt(G2~Nh*BFz#@d~~4~OOX%zNM&C%uKIcG3YK3|JU_)O_B=MJn8i zXgVek+ivX{EHgRK5WK(cYFW9nIrKdXe;%XE<`0czV4~>ENL)fu4@S~NORc0T#pm~P zfm00cGl6~2H^#b5gq5Jkr?w9y#art3osy_QUx3N55%mE)b<3h`V z1e^`s*@ap=`Cwd^P}S(r?k{k9=X05~(YJ7^P@`{Ia`hH|IWGBe5S`}G0LmXLe+~#& zwqH+FdPa_YJ3N~b>fx|^^-tLdWe-&C&+vaA+($aTj}%$Pj`x>#zmIOo9Pq#0eD-Oo zR3dU7H%F~=l;^4em+Ll2wvVk;iXQ%{~K!_wIe>CBME8=q8X|Pf#gzB-7F{EmGFpE}Que?raqd20s^_T=R_Mtz!3dr-19YN~ZW_ zaaYfb27acbmY|Gw+Qf9#{pHNJ+#> zf&Z)rno8S2uHSA7fE*kUcn^R0m>ji)Vf@{+aYo-#rJ|#Ar{vQEf2v3Z9F&XBJPr4V z*s5TY->HZI!yM|G_$uP6T&Yr^dExDrjpS(I$)Y>ZVD4u`H}B~z8U;iHC=zJR3rbe}hOy4%lNPDk1~&CQx<~5mPX9Hj>cPeQwGSkh(12g%6$@Tv%4r z9gnv#;6ljR=(VB26ao{EJ(yShZbDf;G_E`e7A}fU#?41Tvxqj! zS)KWcEvfT*J!W!FYIb5to}*a2IyvzUzd$pwkx%O-H3IXW8Di`(2q-b4h!z0kI0`*? zl62R)e$98%e;jpI1=*a1_nRxg#IWnnxMqzOB!jk&Obx|MhhuwswpMj5E@o~-Q?;;rK3H3UE4Fi@<-qgI#ExY)%a4<<^!uzX#iA|IH7V797p-g;?0H_TPH#YHkF(ENwbXWfF)q0*Ppmp)-7 z|A1Z>(~NfYy7(baXJf>1{NS7DFz>1uNZ25D$y@w2$Hf{#?z65;Y}ezIQR`r`FOzr*w%a+o5W)1(Nibe* zL@s@cSON+Nps^dI%3$+85MX^0^oaX(qqcirf0n-ucMrgX!)dPiL+7EI$l;%M^95^D zpe~uCPUFxXIcagO2N2D>)R!3u2!MpLIIdAkSIh1=#ij#`N@=U6mqUSh3jVB-fu_VX zQ7>v#OwaRgis+eq9Fu6a!A9z@J^&1oMOvLl8gX#MRW}FN$eq;!(H%jQ3+d$hovr(7 ze;iH8DkZo?D!nUg&c>wAF+h4%R=lKXd+WMBgn*kB&f$}iugaIq6^FKi!_zzGu_@H* z(@A(&B`8+!hk~2d1}^ngt|T=eP5_irD8?J*WVW5^f?x1Twf1mx%}SYg`DVqXF)S~| z#p&>RJz!g)MX1=C#f#Imx2?R=fq8cKf6mrqI{WB@hB_Kj%4IM*v@LMFrw8*5;Lmcr z)17XUOCzPl$bAQe>dQ()@-mEA+&V5NNtk@t&^OsqHfI;)9JAHJU_m4zUGx(K105Gx!JST06lrlrW3fdCNvVj&kJEq2Ag(xe*t90 zq3|#_oXO{7&ryu|;@wMiv4)wnXEwXAp6Ou?>+M@*r5yBM9LHn|e%TS?S0Z(~?@9vc zx}1k`B7IjWI#iDxi3~DdmLoz|@qbLb>ZI{)Mv0*iz2A3`&?^^oMa-l~vPb{^&3gC7 zQDR$N1ONXkKou4LC&S#o%5%s`e=vfq*nH_OZkh;>@p880T3iJWqjnIV9+?oIE>=8< zC(JYoL>Sq|cw;umn_mG0)@(S*?lNHN{T!?Ka`^)SDei;7Qap^C@dd z$uMmoev?fjk?gh8*k=Vb8Lgeq5iw~v21r7u;;`x(tZuxh9&GiGK>(}Bf9O=wR%~Zy zC5#rKZYx_+8zD-*HbiC$M4OqT>t`hQ^6sD`;P}xHXoWi-}{b^IVye6>}q) z-*E~6>sByj_+bHxp|JOAPz{72o`@Hx@d-$+Bzc?%#^|z#n7Fp1;4f(+h>?Iz)f|vx z2_wy59+v0cVr~UL4n_2ye-S@d65N?3bDq0?eVPjsBm2C1%!wET;NXd;2});nAwRmX zL5dDeSFt-YiQ`ktC@i9e?Kj$ii44yXa&VBrzm1^BH5&(WaXM2WYN9l3j#RwnofZ^yQOs>&92#5afID^iP$F6qgd zKQ0#v^JMD*5EbH>npj;VPYP|zg~mW_SydN^zE@^4D@G0MvME6}(Ur$jyN0q5MZk*O z1LkK@OOtQt+&|Dof92YR(_}o?5pF(Pq@XTS#I8Q0o;##0VzoG%u9lK?yN}RJP;sRt zoDryXeNT7M)%;h(@lvyvlNva|urz6HWDUf95H`TdNKPb&P)9evf|^ z&C5n0Xt|U#R7v?b+8&C`HHf!%88z=uvz5+-AMifO&bnYob&_ykgZCe0BF(D)No6|& zp7@W-TtL{EQo_}>!Dm=GD<^6WP+bG~9 z)M5q^k4_)Ie@CwSG{N>2(=|uRtgL7I{~L<2mJwefYGdvauuj5hBuUd~W`=Rv%5}2* zxsVWC9qk?%dh^~z{iuRzUVg;AbKv1rm3eQ>tVr2XjkiNDW83o*7dae3N#|M&jR-2m!N5ZLf8co6f2EgmT6N!I@d{9z$@QB% zap=q0m;A^HHEdo?bBww~Uk1B|@xf~f1VV=#T>L9G=ed73q?8HRXIUdJhJT5Hn&*1JBPM_Ay5LjX zE(iCJzC!vEQ{1x+ou$iy@^5Yce>-i*%0jqc!VkYNY3O_SFl|iZ6i8m&ZF>XX zy|r86c9nVplxfRNT+C6hy%pyYVXte~d+9 znhmO1=(MZY&hi2we|^?jNv<0RE|z#C%+=AxVp66aHII@Lf1%V9WCi{ z0wT-YJ5gwZA>!mF1DWqnHGyh5=3BpLq(OW1*Tf2B<{aO(+@Ln0#VL5NrdjI+KCtaA zdQo8_)?t)x8+6D)l_D*#%EzWEX^iH1;V!lO1Wz2p64_k9k|u%6tvT+;e-48GO0nty zQOrTF1O4FMSc>MJpaJPUj3wBY$}+fdgQiB7qnN|~)*%=Ykuyl|Q#v>kDI~h9l0Yf| z(hlVR_LY;WbcqAdIsL~(q>9Q(7;I@lj~7J_;Rw*2Py#3YQik+yAAKGTVw~TEsa|I0 zsB^8<9*A)Ob7=zR4@{zm~kEk8q}++8``k0J-e&i&xz zSv!_MtPO+cf~wn%nXAHG)-Ag+tXgsy;T=IQ_PVSiE|7A4z$vxW-aCds7(hdj4NE(} zi{Ttk*&Jl@v(;q3;!sqA0YQieHz3)y&bHu~lk@=;J@2swjVC?^e;!^?X`m6ybaHOB zZT1)MNmD3Aqu<3bYDCHx41!b#ixsgW+*2^HGR}rJaW~;?Tsetgq*z3AyA#jcKVWV* zE|e2X8KUvSPcr8)3@NLvx>E9Y$Q`mv28|k9P14wQV>fKn*uT|xpR?P&&-d?l zAg4LN)El4(bTiTL zb^@{jXiWYADvqvhjHV{8AUDv#(%Jz?3rZ1pbn+NUJGps;JX4 zfeNd;J2^SJ{0|p@adiz%X$F9VsFH>x0I0H?ekb13H*E zn1KS_Ox)aE0mlE>K)*n9>VFXg0>s^2Tz>aZ{9l*LzuWvTbumZK%Jl7g{Y^aod&f*1 z++BVC(&j&Zmu=?g;A-va=K8OSK!Am{9q>1M*WY_)?eLFHQB+A*N>W{eQ2{h~4vdP9 zAaxv=+`QcWiT+(rR6+qXirhQ^Ha0c@3us6s9n8fY?d?IVT@ilECt(fJ$<5KloB99D zwXK7rr-SeRwOd#_m|Of--rU`ZS<}JV*&Qe=@juajAQQqLnEPF z4LazsApBEZ*1^IN!22&Vh{^xD{$~Ve{yC_$pi^q@=wRm!Fb7&7Fe^E_fd+!+|DSXA zU%jM%-0kd?OzeR)|1If%$C=n$+j;*-kLkz{%asA7J6=g7AAYxi|sLqQ6c5Lfimm@jr+M)cX(O z1u#qg8*#G$n5F(8Rsgf~AH)V=midF&0nD<05Ep=1;SU1!Q~ZNK{gnP7P(S5=BOXwH zKb1cS)IseJ0(DUTgE#=p8h;RIeVTs|sNefP2-HF6--s9FGx>u+TulEU(E3bWK+_3y zvjbYV{jszE+y1XP|F;8F+U(zm6I9I1(GD~U|7+pk_-(Pb|I?6_1++r*zaXe3@J|Jh zY{38M!1dej>~3QBR|-fKi$5tKZWh*m9)H#N?RIo``6~ewV)+*Yk+S+j5u}`zx04mn z;jajg&H670VrBCe1Sx3y7X+>P4?8Z<^6Y*O{2xC^Bl|y)6%_EN6(^{c1L&aqtYqN|;WtJPm6KurGd;snuk zvvL9cwS}N%xp_MNl>n;Y{%7hyJ^#7PUCkU_{?-Px6CQs-kanJbARDNt*Iy9S)%!09 z($(h=XHX>{pv%7){O9vZ<@a@e{m)Ir^5+5eKkqUBV0AYaM_b@~Yje;$++QJzCZMz9 zrN;ugMp!|1(9i$=XYd~lDF57me`Sk_IePgra)6{_WCy9o&CdG!=y3V}N2=Ms-YEXL z!9Wk%|HZ$ra{v(N1vEogUUW3$53~8$98ne^SvXw|P07pjvl2&0TP_)YYB_7VgAh+5 ze}@bxTol|IlucFSs35~<5Re}1P@+v4hHdw{@inb#>e^gYWY;7>F@O+7Qgkd&i%Byi zTX89mim@>(tj+_&_3?=&1k)>7$KRD z-qhtl_{1(yTqBaJc1Boinnhfy7n@s%4enYHV{K=fF>S1{RBZ&wJmOnUs-D(FwW8Xj zMr?eqPJ*H<9%u-5)Ep`dcdBpm&Yq#HC&=d5mR)~ZAaaZo-GHWlMy)H|D3Bv-q*pbs zD<{Inue*YaL;S5MlpwE06pv`ojeC|=FJC;4kvwwpdrO#%)j6q7uYqwl#ocb7~PN$(&R5Xy!0(@DEr zjvR2W)|QFt6a!g*m@DBnH0Ue{w>`dVcRO%<8vgwuW1EE9y;_%4R4XGE7p`xvuNzC$* zc|{_fxH5yfw(IvH$W&^^ylhNxeC7ROTVhFjd{aZh`LogGu9Ono50hCJDGOyDyEMvR z+w@@TtE2vZS#vyjkYxhXdtTBC=za`XIOP`qKp!HA6+la@3i^?d#V|tgUejH*>ut(5nR}wBbz7(jh|uz#<|OZ9G@6OvSFY2XAlAN44DdF8%KS3WF}r~CPx0sjTHvXCw@1w` zv@glHX+|RLboLY05Z6;)_nG?4Z^&MAX^QFjs^rD{dRxiOFD_!+D zM`)IRxk~;>C^w5BMVksD;laYPNywLYZ)`M&p0xnonTbp~f?7wfkfD;1Th5fh)d#>5 zCi=P9MVOge6Y5*IHEAa?0?*?)K2RXuK%Z#d0?SCzMK3aiEG#fw$5;?l} zoyCnSWqR2o7{lP+X$|`)vxjA8fM_*xzXUnLTykt-A=YCFl5IiLBE-$x% z@s|uz0jlRCTZ)aPe2vKot3s*d!DAVsLW#9=Z7H?Wr|-q@kd|~ld}@+xR01cmE}_Y4twXPHO8`|wxZkT0hNPy?1o7^$KO9TJqXl)(sGx;Y8&mS5hbDaOuh zBdGoI;3-ioQO!N1seVmfYYzjmE~FY{m5XrQof#L8x3{5iGmjz|-f)dNZxP*Eau_r4 zLIqB@JtoicWNd~i~X!6*ynnRln{|x6Z+z1``~l?j?NN2Dm!~+0C%aw!gCy6j|_|8B7FFT zB%bh8kD|jNiN=Y6^Oa!c4CM*3Ta5Q(xya$mm78bQFD`b==jG5u%OpZIXU+G2vV@AK z2>74(r4%z;ihrqX_9x`br}I%L=^pTB+ynUO_TH>2^MFD`m{H92bw}44y*E(DN{Oc9 z86RFG1+HqyVe69bKIuEcA_oNJXWwP;?zjc0v!>B5O6|K5~|R1 zC~76;+HpbzZtEwNliE6dDWE9KFc;KXqIttbX z1k^~JWSvvzC?i&2_40u=yRoiu-{?s<~4LB z1>r;ZVYe{)rg|6sprO|CMBL8=yhcw_p&IsVMG;M`6S=>OM+9Lj@qShtO-`2`VdY~$SP;kSaPf&r$SmK%lfjgb(!s{aI z1I~}FOtxcF>cvpMlW66C0lAq1ybTU#`-Qgtuoq5o#wGa#xt~&($w71U^ zcC`xWo36OK^=}n}U%5q>In+Y-6*WYLlvyoNq_q(GnoE&*bRZiQC~fM)Jp5~}*bxKL z>(@UA%R|R>T$rWPp<;#{{YvI@QtEkBK>#iFj&4`w!0B^xz)gzVXmrhgq{Eu}VlO6%;msy~+Ljm$ zX;KWGFt?;@*#&r`l1=49MX3U~$|89D6FykwCcl#{6#J;GnFN>~OCY(rC&HoH#SjK^ z`m4x_Vj#B&BzhC#RBt9J_=~4^y~CE4wD|CZXbp`rD{bn&z@yL?CXPTBQWPDc5Azjz zAxf((`*_EHxO57<mggh5dLug>+^?|94WO) z3lmX1<_IoUNIQ7GI}X0)R%JX2N$MAZjF9;sQ3(57O9TY{Tel&ONwE(XcgqoV^PJ?u zB`8NoV+fSqgex1%C9Hb=lFFnro!Fx-lV;#)ADBdcL;FJG)4-_^+}KVQ$Y*E4D|$OV zMJ+pJeS`RU%5(k0;<(8uRR^X^h*?{qM~25SCuplVG(iDX7FBgh$;DKpxzpZhDiblU z#RpB8oG*kQxsWseaO~!8;OB%O%_54st~ohWshHVcn37#{uuZ za!4K^$FbaxNej(0u=5dvSOcYDl@E+lT)hb?n{mWvC}aNhl^O6O5D~>oz(-5WLAmr@ z*OIv;_z`*OBUIR3i3d2~sU9G_l~dQ9GuK9?b^d_dsIiC7CmHGEM5^yp>rBLGf7vA@-LlvpHVb#&+f+KnZ<7Ru!d z><9Dce;98e?x#L(Z5P|w&LCE8mb6y{8NjC)aUV(!y@8ih`Q|7;M>b1Xe4t@kY`_8+ z^3qw1+eBP@O_u^sQIO{Mz>LybMoj9v8U*eUwJ&#)anWKj=J;nshXp3=6%=@Lgh~x{ zu-PfM#EA7qvLm-rN(N+3H@#-yIm4zjm{J;`e^*R2VG8LQAgbU$Y|m4Lv6%yiWV?3r zl3wo`JK%l_lH$N+*(q8cgQ-+(bR{I#P_FXZTYh++q()DTH`c90_E;-I)sb4Ja)2GX z4aQMEzGCai{>DUjkzb$v1im_jH9u+;EhTh2J+WjpFA8QHqKJ9-L9Gt|OcUTM*psFD ze^h?*m3M;;I;CptJCB>aP#)3Llb{nY1X)f`Fr4zR#ZQNW z06yn2F$I?z_nzQH8)D8m=Vni^>zEMw~BK+Je(S@ zMmVcA_zhpa8qD%2rjVb#&NDqA6QLkre@LT`?sWAwz^tnZTfgM1Fy5tTV~5Yz*d9wr zRh9Pf4wN?$w1$y0)l>8KZ z-9hJEcpLIWB;N$AOtl=p(#pAb#0Dvlh}%}DLD)R}v!hpxspl2pYZgjF!zDccA%+s8 z+ij{?Q?|)0f3-g08E4f2liSF*usWP4Uh*7BeQpn)go*?bW=0nVbsD-6_O9H_L z;SY1psL_Mi%)jn&&UI6#j7bzAQYI`qr&S!SGWsNb7~FlQutgh+?tuUKLSJIV)q4d6 zrS;>%**8Wcdq3k0(eII8lX8rixd<@OAM&tp!P@PXP_fZ36rFage=g@+%90P#E-&oc zUlHVDWGm%e)71$z##{>o%PexZ6>IiviDRB=OA4YKS5_S0SFDdv^@~ZCP>2P5e$5dR zhu?1ae;2+OgJ_c8InYh?zzk9`ms-rB0#2Am$w@aM3-k-MVuh`0X~8CAWpnHqwctvs zd7Pq7D2v4Qw#OU7e_7WES4}X)Ztl43$qD*)Zs1*iIA>(iwcn4%%`lFmKCsJBf>zkk z23w~zBT6KLP6c}w5{O06Ri&s*SzyH+@f38Rz7McFKkcpvd8(juX&MO4vD~rIK>oIL z7EZYv*-BSZ$EBGLHdeBl970i37#ir^Ac*6v3H#Vnpat;9fBL+I$sSi2Rron@qeCAz z)Fc+1G-5;+7783?*E=b;-`@_+FqlE9YZ~5ynKUO%^j_T5KBv9nzMm_;L5}8^)?Vu} zsfpAUk>+TJMN;CLVIAGi$NT>0Q*XMZp|2Ct>Lb3LExe4*=mO%~<@M+?{rgJ6Cyeh< zVCNyX=zTlzf84zjvc10f_wRS-r&>=BOWU?k zFm`W)qRgrUhO4fmAxdcu2LQblCP#}im0+f{Va0x+ey^U^I6LqE`fypV`;c&|&p)lh3U2mqY|NrnI?P)AdO*x#cmo zhS}Idf2E&NTiBh=jYj>@GWba}yqS-8J5lZ-uY(B6P8GuscS<8BBV}deNuO|*R27QK z7DYvJJD3iUbm2+ZU-`)QV^3L24yv_n%7(0CNO*XAHxm+0zloRVA~2{` z7cEhY)Z1%c)V|owhrUGk_NGQezpxj)0Hb#5% zcdNE{Nk9S{kH_HIP8)FM)S5EMYkVbnZ1CpQ)>84Myj(5VUHX#v_||s2cKDC4ZVh$s zzjgD^!P)fCeF#?KqT%Cyo!8iBm7&=M^A%nWraYqM*s-0ZF@0)=bd9C(a}h2BO=}0)lLfU-MuhQv*T?a0?$>#~e{iGlHwR%C3xqZ;g_@w-8ouOrOXu=a<3T^2 z@1o(p6_80P`L94*Zy>aSm3A4 zf%c&l7hAJ1vbmtgDRo5q$attTzaHxtD;Y*BEh_R^925Pa_+p`M_uiV(#toQ}f20ge zr*a-P({J|*Kjfk@ZN1ZPTcartV;q;7mM*V8U8;O9f0LS(RTWQB{>VFsvaO!qB4zxd zyj69@Y+!i%IY5m|1)M)ZDfrVN{;zqLBeVV|{nEpNFMGB2=9~y%*7<9sXa~4R!Ybx36a`gBT{GF~;CIzKqT?KRz+HDy0PJXt{*Aj`L zDq;TcdcH>PJRuBGxA3Z7EmK9&9{n;y`zHH-ADprD?yP7f{9v@ge}QiD^wOU(aF3kE zw8x(KRMbF1NO)#O<00{8_g8LxX+Lz(%|lzJTSi8w{62C&)1E z+O>Cs#pej8)KpsHyY(o;iv|2@mrJkwgFEgYzpHjp)yqy=fB&ROZo&T0s2YOp=ZsTC z>!Naj`R$+}I>1^a)|#?X#U)EUsY(-i#71$B1h$P=qdsaPh3!6qy^K8+QQV88ps{}- zn|ZR1mPjLeq+*eRnDG-q(VGw7(4kydN3)X&HsGFKqfRS@poYy_Ke}pWnAj>Q7G5$- zF9prB{2iHaf1yPzu4ENNK3-bCc103wF~#0hXKOkm|0|X7I#fa4I=-8XD%I9nL`zb= zzz`vLvjz4z-ZoOr*YK8Db8kq4FXLO5vr<-_O5k$YXKg&e={fO96Grf*t|{@+yepM* zOauLr$wV(-<$eypOYItct=8j_N&^$X_bmpNVU=0&XH8b1@F9frS|2Cx<&`yRtLq?>Ge#V4*?e(L}LciLykgUgFRs7F1)wxz@xGGAg-rtl1CqW#WAzO}kqG9hYl&1F&0b^Ua~WbyUljtUNaJhM~PTbN%173NMLyhP*nKyco=egs2TeXe@kT;kG1?MbzLztM|EZT@ER^L=umVf z1L%e&hYSWFw)kgsYU;dKo~e?>$Byj{BsiW1X4dE*I5_;@-FdP<(Wpa49YO%;U&@0F z%>!7UGEmQgOC7hfq}c`gfcFh*4ja2pfeYvL>H@NE6@GMgs>=wKem@gV%i~3VnJ^4L zf6<*S8&lX?FxkIWKhNR!D2)d%S%`f1PSK1YEA$Qi(*4CGlzIwMG!ypyOV9zML)i^s z@N+KW+iti#VOMNvH^xga-us3qr7b^C<-UFg$IDa?{r;~pg}WNUJ4Mm5l;7DuJWaFc z44f)iOgyY=axSGF)@Iq`Am;)B_sR0 zs5Ku1>w+G40XK~OmIkGI9jzR$5}jmbQQ5KNWz%>GB@~s{@aN!$Yo+hsU{N=DfA?$E zv{%krWc0Shs#bD>`)+I^c>sw|A>B0?u4Mfh6)TPYSZuQ7Vq7xbW8WBdUj64J^!?l* z%rswS`ub5BUD2d49<@XHlpg6_F!ByT{-IES^q9Hn$m)-U0vGt{bR%2!SSkP1Duw}@oLiZ?PFsL(Rm|#@I0$Gn(JQm z627qb8a3TT~SY!D*sv-Z;2y@q4siqM|gDc08C!X2NmV+?5EZt z%XmX+^WVG%FVrx$sm-X#f7JH#ab@E_ITawtF%9nuxj=%yPk;P?-DG~zjmyl2Y1;#9 zyV3J-wN~Pw^rhx2r|?I+e~fs$?-X-9Do5nOX3lI$Yb$){Is=bQ9}t*?k_Cp&5n#iF zxTku(+r>+_HA7(~IN+#S2y=FoTwl=^`6#9M8aObY!mjiL!2bQEKcD{_`j_t}d|w9e zJGSxY?N}ZJr@wDhoDB}Cx|P||7Qzn?h7`{T8V|=;rkG&7)CD@`e|WRk-16M=$UPFD zeGjYgluMwz7HJQLf#Q#5lY7N44ff7CHt~NXESjHZGu35;PJFNLa{U>p$}~G}RY=j@ z8oI|+mb}`&HB)hZ6+3X1DUwzh(o3nH&@&O< zi^LoKNNQ_r-bz+fe-Z6N*{31CC~`P6jY|L^o$^c+dHM|;`B)|uUvtbH3sR7*IaHj{ zEe}ol!vF$n!>D<9W-B3yk@e^PSpC-Ab5|`RL1d;0!VEj>@tU;HUlG|bVwj2{;rB;W z@$j8c+j3U>jC@^!C6}|Jvz*4@ho2<(_oN}8eY6theNUkXe|Ru;tntPQa|nDks_>cV z(ogB3y9wDaLn643_JduVRLR9c2-+S<^?&T|2_0z2+Nx#}S6i-62%W6u!PQRkX%4B$ z?5(;fZ;5}+g1d^p8O54g_1nk)IYbfL6Y|!(`lC8VKU1=y40(n%w`(b3@?Cbx^s_a_ zN~77rkhHgcfA0x?y4(OwKvpE!GSsBUH+tK?G&_;Z84hIXe(6tGaxZ-WA}B=n=X@0` ze50c8jz$2g??WW8jSQq;Y7d2k(k~K?T1@)IRCU)c!orj{XX0FywHX zj-c1TwV{1~uhD}@z09+>bBe!QDD@FhxV(S8BQGHQf4u%kJ-2fU{mU=7y+ew-b+D+!eP zDL7kTe=_z+*)DI@FyTYJN=}unS`r%6exkiW?xm8`;?W4QA7e2o$AL=sy$De`jI&vL z_|QKE%e=$NCXN^q4I!aq94~U>{MM`0W|qB(2Fs37qThZo=l&G@Ss){vZFpQuQn2eK z1k+eg`_`Q9THc;31xOS1!n%RWRqD<(9 za|n45Yf9Q>X9?9KQq5_IDZ`Ji^5MLT=fz_Pw9?s8Zpyb1TFdC8i~}}qhZ8T zIG6mzC0?~ICLs>JFPjRQcGtmQ2io0^wm{A+E3&*BUL6Ozm;D?5)%t+4U}+Xl(Fo`8 zf6NNn$naezf-vL9DPz|HC;QEBUp<6dQuko=54qDX6d;(*$^hSRewH_{?9dpPP6l;P zdTgfrs(Wt1ghSA6Fi1XoI(-|+UAdn8JU&u&9QjRf`6z1;BSM&~?3{6Wu)V=z2s%h0 zX@5X`)jXz2;_w|kKl8_?FcC6pW&J)pf0sB>w>Nxa=|K{UYE*E}!O9YIk9{8BokFrT#nyr3FhT$N8G@;w|&m~MSK z&oUV4#tljO5ykMKEXeFGFS)T8jf;U{8DYhSW9SACes_^y-V2Z)uTzXwXR!T5e|Fr( z%~q-P+?-y=2Y-5>l!-ST@C687k~pD-D0p*b^b+DA_VGzv=*mt}_JrNG2ZrPe3=DlHw@L9{FqdJXiTGf7jat8olBV0 z)bm3MLo5RAaXKloL}v4M;5YRGf7_>g-uJg69_?0M{AO+IbH*B$QKWvw9DA}*N`s+Y z$C%r0@F)8=TG}yeNHT(f=sLdPInm29og9H*d9&2tE@1TARSQ4ci1+PO$txoAY#DA6 zes_kX#%20&>)x@7wx;b*jN|zNbA-s`{*Jrj(9}U9N$$D-O}^WWe;eT|kLHA= zh`uf^vf|LW)|jxOA%ZpiBGNBTSY^oMsG4E8Px2$Xd0O&FjxEO>zSSnh(0N;~ z=w56|`NwcPGVoJCW)fqjKuUZ3vJyPvElYUpUhBpKzsA#yL>)oZ$MZ;()7&2rAA_7OW+kxt^Ii%qnaW6c2Ca6i z@HN$=V@%4`Cdb4=jHTx)O!rYOVA;f}N#%iJx8STD(bivn&_93d>lxQM6)AJtx=~(} zLg8eFF#EYzixq*k7xaXKsdaU8z?)2{ialVYZ8Pk3#5a{fEdmaae@AeA|6q*&L_=1s z82AJ>lX$I252MWp?eMAQ*%Mq?-XnT%1*gA~$FDy~*)jOXy#e^~d~^V;nZOd7H#i@5 zmZDB{pq-Mg)y<~!vvD4Jjar1-i6HXoclDSlqjX7#I`QTuPh?NlL z=fGss=~}+ae|ipa_@VKNGC@D}gT+g7PUvQMo3cFC;uj|g4|m?~$pZ1dREkpHNy|pv zE6lDDjUyOUp4Qj8LQZzkDi>U^r&0&s_4M-@7WBmAd)G&kUsKDsK3y4pYZt!rlh4g z5{yNa2+c7k=x21r&Mz}oZhdKliFElv9pCd#HB>8ee+zTYf6Rh)u7;5&;E|up>%|Tm zN;R)w&A^d+_S?~RoSf{LZ%1Ot(n*PJ(fgMs`*xWWs>Hf16`rp&QibRXM-l?iQk)hJ zY|R-W=Yd%5U!72@Oc!jXGaho?$eIKu!JBM+QHOPIKXYKeQ7-#DvsXgfBC2x+i~NF5 zQiYsrf9a1+c)Et_w29dI0`~3b#!aRddU4G1nOSnq#GS6sN=M!|Y0GbjanP~_s0UJc zkP>2fhP8vdVQ<5BTJ23@gGSw;I5Y|8HC@-&80$ec=1^v!o11+TZVRu1Rm<_0%R1_u z?w5j5c}-^s(H!CDGg=m$l^H#B$(@Kzd?*-^f80!;1$GnH7I98w+##x;ByfhM?GBITj9GzEu$FR%C!?p1tGjH*aRnurc?r~mtpca3gHIde zWepj7_N!)Y5jVxvIIZ;o(eS1wSjEL3i%d%{8X^KV5TH?hX@9xSQwhF&MIO+G0c>!# zf2kKk#PvQduApBA1F#t(ciiZ^@lKB-rjdoMy2l2f-*MPP77(VCue5N{eqKZQ-mP7Q zjijizKl(g06EH&Y6zZHWPeqZU-+AEWZ#CM!h3GNs2FwO2G=%O^3I_(E7Hhp8Q>)fe~UC3BD+W2V_zifJwH5Y7nc`j>&>&IZkNJj zpfRkL5F>w*Sdj$n6{81fhUzM(3N5pN8};@ndb2%5@D6MbiCI4XN=AfKsk+!VTC>f6 zAjI?s9m{y~mQA4wpdpFXCy@}|d04rf_vVRQ&F)SrI-Majg1k8#e}-U8SF?t!e@4Li zh})88c$0p9OI5mRBNO6BVfT;gi)DvAgM337-c+0v@k$+VaDg6}CKJljt%diG@(1Y6 zn~2^RJ+CRW-(!$)I|m*;ywqRA?+0wK&~k@Kk~qnr{21mfCVdGy?KtW+1(?J_gX869 ziD$B9)pX?{TcNs*L(|K8+p-|je+(hgsgH0k15`I6BMi6`(TaMH5m1?3MH9Sst1dou zpd>Seo}%?=&Op%XEQ=!0ADY$sUthN+yk_sI>|x6`xC^lDOt4rVz5`bWA3jb`#ocVX z=U!_iyz^a?+}o!_jy7BFp`*e&f(8h-YIocjrn3<^vuXsOxXlTviawjaf6-iy+A9+t z6PbetCxxh5m-2n3zM7-Q6YDb_)PKBVq&(7oQEOfv+-!Yot0rhrEPr7ucQylOA-IkI zd45iKKMy99e$QG>99Te)y}vR%G(a-I*2!tOGGfM5|HKalOCc=sk@ao;c0a+-K^@Er zyqmaL17+V5mgsW?K=rBRe_3^*eYGKvcQ@0$f85$p5J^3qMXvGk ze5iLrT11E$5s`Ne&C7Fi3NsYg+P;*!hD{$m8+ot3^nj9omC{cg!zrt6m_}ic8(?-K zc`@T1;(XL2D>8sB=+cOo(DAZbbnMgC4jzjpHIDFDKd5p1)KIB~57 zWrIw}15icc`D^43e@gBBtcDr?w^TV61$(@D_7w6pXoAHHkqJ6nKVRx+(<$YtDm#Hx zL#=M-$K2x6Ti8J?&QDE&m1W_hp;7u@lNth0kXJ0EDw5M0Iw^yN33+6<({sBZ6_&|9 zaf<8WSt$%p*8kE|Y*^Qv*0Oq^;Nj}ns&h<{r>KAC`qV&oe;H|$EP=SqD*5T+=^bJ1 zjhW1QS@#l8Al=ifJJs-0^uZyTBSx$gt!xM;^bNCEkjzDS<4jZ3tO-4=d$iRT02)&N zFl=_!3ky?KvDls=)IMB%baW8qaU?I-iFF6Ade)PYp#%D_xGb+d)|0Vs;IbXGa#^(I zaBi0!oC?s{e;JTE2U}7*$srdPGj|KndSbRjCk(R{ks>G&rE+Q|FBZQH_t2YP*@H&u zjvYDo)zI*MNnY`ZO_3?H`As&M9Ql3$^!P5f6j{t8`k~$&vEMTha{+)yskhShKsN4iUX4<-?HLSgAtOug?KV|phqkoXwU7maDK!_MpO}6 zBPtngj@fD}?`Ss77gtE%Z_AP|yp7ptGdy0Je|HLPdsN&1LGCb^XN>nOK0+fzNZoUo z0d8_xCF>@2Y|IytigYtzSEPzBMKI2Hyi<_*0|OuZj9!NPsspRe0iw9{krdVD5c52m*FDEIt~R!_HUn~vwM&s_PA^DyfUJ>_tm zf6c)^z8Z3ja^FIZ6WnOTO5Q88!d7rPWi(GOAdI*}*L~7N(hjLG=t83xG21>ac?Rk} z)YE6C_HALfM}ecyEG}-H&t6Sm)}FWAC3IeR`82vUImZeq5{eV%%61NV=!Ck z{LxR)8`X-L0dWJ4zr|%(@Ow^9E?Nr`e>hi$K}?F`Ch@OV=_-j22^?ruCH|1=HIn(0 zB0Nd1m1$>iYedhvNK)DGJbF>fyQ|HY=_-ZXdzx!qHREBJGbgnbmh_A43e{k&Q3kEk zEp!kEFA73$V#{0l$~oxT?lxl_VmznI;r*m#V*)5QQCn2^1?inraJ_BwennxoQzAhv z_TJLx_uMqREIc-=OI7PwAJ~n4vfLbP+YC#M@<5xX;5}a1UN}iE(y#PY1g*+Q{Oa+a z^SOnwR#<=iWItn&d5VpX@nG@1gzsDrZ8;?jmvC267Jo--*!yL+XL4JSz_O#YH`SaE zCkd#VEf%Sv%F_y!3w8FDhSCwW=A%S=q(mxPRv68DnT#TFG~;g53agwM!-cXPY5X|C$#ai$$F>G*iNeTh9`$SM%)+&C>*BZ{c09*171u0l!Y zLi^;4uYdRIs88H}8y&&6xrrVwBD3L4ahu{mlUV94cy@$#4~m$paLd5@Z6ji1(wo6K z*~(n~U!_>_>z~vtxxOahp*plwkG3tJ^wMd%_+BGbNLbqkO-XVV7^GkKuH$l2x{iQ* z$|wi8(Sx;&FynbLgQF?GdQb}@qz(6Oyr<+`(0?QKoHQKE!KqLd|H%CCUMk&edL)HP z7)nPH*xy$?FT@EAm?2%zkt_#o{? zYY#K5DrZrnv$7bpC@bm90lYV0dldn4^^VG8eo%zZ@5JcRU`?|(~aYE~%~)Kw32^vBC07+Y)Y(KLGq!jWs? z=n`2=vv+TgC`Px9UFxW$K(wXHtOo3N)zbPoie!C3KMQ00n0TK6GdtQDcJ$Et$%ax zmnJRWQJ}T&);Vo3eCea(3YHY&7uTOvgFp3&dtAOTxyJ$`+3-Lm=KV zA_!()oFFpnz%7w?PctgANs>$=ywqvcdsHu5c9@bh7=Kwnuq$z2xvF7a ze9vO*zEkX74fe-T0Kd#o8g>0yl1n060#or0izIYrZA3IigWV~U#&DkPpsx`Y68=pp zDi^!SYh%|xLDPFl^m0-N?n}Jjr;ej{faGHWRBz2YeBFjlUxQz;4&29>V49{GSp*7`H3S7gP9EOC`zS_Fzj9O z8tvi#OUobY{ZzF~7GWNIr;_Wt|K78Q6qvy zjdw%TR{Bm2o0-Rr#aIAS$~>vk@z}UmkwY4{Rwu2>o|cU`JKHU~KC} ztbyEiQh(yKMjoH!XH|_MoB9Ph#Qfj}NEz|@#7pV|jXu2063N^g#+paNYH>(Q#s$Dj zAK#W=CS@d~aRb;MD~bCZ4&o1O=a$;e^SXT-&#`h@!iulS4j&+8MdO1bYZZ8(7y*SL z-g~4$!m;6P{DOF&}u%Zs44q=Iv|yqVtbUkr;@>$>~oAotKoE#K+J_)dW9R2%2%IT3@L}U)bckx z&R$1s#Wo`?NIOSCUY!<72D@E+$Y!jeH$t%`Y!h))X~<+sn@o*Txe6$Zsu-|VY{zlE zqkk!}Za+o)LE4NSm%$xMj8#l5V(;jlw<^i>2v)F|8f@#dSK(xNz=OzrIyz4A*`s6Z zjJ7C~IZqpGA;!P26JgOZ-2*IUlVo5;T1j9^YopE@}9Q!sPma2 zEz)q9uZXS9ycEshd@DGUr9%)tccNyYkaENyv65^IsTy9G~#3lj#|!MlAKd@#aO6=IZ|J%&ZqGRg*T*GRF! zVU$}x)(q>_*lLaeJYEeFjPNgTISEyKly3`TJxEX0K36#~%Vkb~@Hr$HM2)||Pk7EZ z9PHcb*8lG3TUOSj|0I*9;oY4cbbsZw+r?zC1Yf_!{ls(>sFpMi1}1F>!Fe^oIMh!W z_ng<4_)}TKmQ~CC4kZ?~<>9-nfD?&&o{ctX+SmqFUOrjb*|pGE=C2rJ7|6kO33;H4Fqw1^%dx6wjL1i*G(~R9 z<#<=@Ab9Lo$6hEg7K@~B#y&9c+IHh;YOyp?a#mc*^A z@;~G;CX)gcKDqMneJgylai~sd+qVgI()=+|*M-~nb5y>a(94@nAZEL z&GlutfTEH`A73VyYax2ENE8#yF8YNJ#mhr48zo!bU8!-5rV~3ZGx`7HMeE_47$x}& zn_y)mMgTGHec01NdVlxF&*>ipS~-N3)3@}Cs3UBcd?uvQ&as4g7s@r4{x4Hz+c z{R-jJCj-0pa2t#8vAF`ZSBzVq;-CrR&Z&9eYGumM*peh_Ie)~Y_xqu5HIj>YTG1%o zcBF`ztAB7trp1_%pIO>;^YR0GuR~xzGc$z!*kTcbW(lJCK7i(O^eD5?|x*S`D(?kl8r+ur^qk>SE9NGL~u|pZVKfXT|?KDr$4Y^*uF-UXP*G& zxWo6^%^FEDyV0Q`FY&j1+n{i%z9&52?5G63>P+cRj0Y6L5ccrU%INSDKZxeT{m@|r zf^Tn<;Gxq%rBlYcc5#qW{2*8kch?=xN{E<`RDV<;_Jc}o{!*EB8J27l#@WiS;&dj( zC^&V_M}O+?W;`Wu``*R{L-ISb?zC$ti*-z%&d#a7%axqDhwx_W>oB7RF&D1*CotrCX*}RYH=!4q!~&dnM~vG!sZ9Z@Vuu& zBZ#C~X0eK;+*B-{BjdO@U8#KI_PpIbr0RIq#DCbPg`Q@|am&wV7N~zcV;1-LuIj!9 z?*q#}eeZA-TGZBrY6NXI23-rY2xV3*)si87mu$dTKtuD))oQx~zn>6t;pN?Q!`da_ zrZ#*U<8GWn$3Qkv9Y|72qv<+1mVfvE0zEUr%*th)Ri#ZZe<&lI}>A1e~imqG5l?xjVVYFA10t`T#;Q8g7|=G-}F3;aj_27 zPEA{4q@jW(Vq~l*9Luvr{%5fuU4&0;nt%9>6zVh$se5}nJ=-X8q1DCjS);((g6HKI za^^oMKNKW%JxWe20b!hTc`EH<>WnF2&g&WHhZjv%GZ$t*MNRJ3_m95m$R_Lym;>)K z@SHM#y;NHW0Il*s$G^}=EtosIo1{R4#Bq6%zSCb0BTvW3P{j%VUh7VXQD>Db0DmA= z6g%AS-;YJj%poW?Oa!nx3ms3FyROhEar0pP26pH>R^1keQy`Vd@`U(=6r~I!H({sDJYA>P!Wh z4ze*qVg+_p9m7YwwO{4Sk7#Te8M~oI0=iUm|9*n$#m-?JdC?FsHnx@Ru`O3(*au%} zp+$n2WfkF*M}y-JB2H}7;jgLY4t-tnL!tk$o0iN#`tuVPjsnxa{QH-2yr-NlkB*lK za5?|NbLU-uX;)q;A+Dc-e}AEl)BanTrr{STipRhhZBefPMe94bHV|(^&>@5A33t>6 z+3Jv#@i6#V{xFF2YmcVPYQ&1a@eHbidAQaXZYD|qY2vHNFyDSzAqidykF&-KAI z=ZIM0nFNC(DodHwh5Y!VbQ&w=Sqq5(Yz}|sDH|vc%Q0Voo zRs)j9OHm8~Sf${n6d7D0quX*-Pr$jAC6F^C%UMZolPdwb%;zc(Bg_|K%%&IFk*It@ zuSN}bA1pt`X$n`vEq_%y;Xt2eRJ_!Y7_}W#fwF~8;-`m_S!q`xfUw9wI#9~Dts#-b z309_L&xeGF5ce}##WtEw7kla^Iu(AL-fP&nj!bNa%xOLBP^bwq*9KgpQ4OW<6FI}Y z5{qznrrk8-aRPwvcKAI|+FR`p;67P;V1;V{rK#Z(mD0xbx_>ecYU49H%I>I*Q3^i= z%Ms2uXPQ#&{Bzf7f7D(+XF=lk<$CV6tUt^Yf}eb6nUXZq0{m`LN^uqfXb#`Aj}HSp zdy?Ac!7nSwgyhh;P{s97TVdCQ##WEiS^8?QFA}cDStp>4wBzR|^&iGD zUb!LgF!5LLm49CrZ@J{(vWA6c2m*SgK%fpiLQ|25YEQqsTqmtPtn)vsxiIBZB~y;< z49`FSzT75s(UouzfV^H4Ao9E64Mn%c{4i(;rcjGOi4FWwy_VBh({m|tP@%o6+4QGP zka5bw-B_RaDzi`PhiOg#G%o=M1YwPSg?}8R47#k|8GlacjgNSm=bBM$7&aT%<)*CN6Bm~Xl&n<;=DpqJ#zxoILKjKEk9Rmp@Uig4ZH$}Ar>d>WX*gF>yPQ{>FgP+-D{9l_y11%A1 z24wn3oCg64OS{8qBjpKdqJJ^I`UmZ!RO>Tg<`J|~*uRAHR`f?88P zdQpA^G8H{sViwuS*I1-glHdB1XQ&`6m@Kdj%%HS|X6l8$lh$hZvm*c}D$qUW8c3*U zqJL&0n*4UaXzb7zNxwf*1Q(jB42$u-3tfA0KZZ#U{r-;Zw{AgjU_s!%ZcWq2QRDq; zsJl>`P=!QVX0V8gW!P+3+jM#)RkR*_v)IN*X^~HKT=3YGwQfv5Z#{6mSo;OGDaWF(KB|tqRvAcBK@DAkAF?5j?!6O{S1`FEK5&h!6nL2wkq~}_lU}* zbp+H-<{f8D4A~om!Yw6)`*oBpwLM8;tB^nUox^NcEGJC@)rA|9tX*``4z;`9sw53~ zclJ%ao+e+?wMrYbwRi@(VYTHj3gJ(6pYctuK8V9{Xr&Z}FF`hSyR z8SDi-Uja+6y`Lla=ph9@c*IMxb7%3;H^Whyhb=;gdmYDzr=aXv_%Vz8!IYB9D z^KBTV?H&+#O0>BX+!y+7rbwpgRD`NHN9YaA5fZU|Q`8D8 zU}+IQ`eHsowuhz=uZ86E&hBBomVXIYA=$C$R(I7>kje~tn3g!Bc$cbn6IRckb|Phz znb2T+x`}h=!f&4VUUIDqPM{aGS2~eIUT?<4*Q%whG8sP@yj7OqFw(qTFu5Dv5%yy3 z;2(`qe0;L;HaPde2q21Pp-s}g#s8AK3IbKD-nCWkUZ<^1cY>%meo46Y*MBbRO9fcT zUbFZ572(0SDmCFxrTYRbXoBqgvsIt${Ls`V|0q6B|6bx)p&zd8WIP5X>atGW=jlgV z;stI5jad2hx(pMZxfV(b`L~*H%zq)9L9JW0ct2*jR@!TBAat*hUqQ-wnxe- z#&n|D<^&VH%c)Wz`E|_DX&Ws?z|wso_>#Gecy(KJQ^Jd-kupZy>IewgJWejE|AuFp#}vy1TEDY75^PWnP(TU61e(0jwU;P z7@G!IGoPvmoBjcmW`6-c^P}i!PYk~6&Yrw1kP6rmV`oEBSDj;naIs-}9(9bk^q#B8 zk6!3hNTtKiS#5oQC3ujgw%N_Q95jvVZnn<5&6cI)8{)&iFFF!NOMWa!v=f9-t~{I@ z7)|x$Xb>5q@xwrF>8U2wmr2L`?jIrz@7%Vymhptp#!&U8Tz~Uhk1>OZ)55@$&+oij zvmI28(I+ECH4Tzto4YSF`K^L{VwWv)M|uNY9(b84seIzv&-viSf5$7snfmqEwmZ~B z9FnHaB0F&%d@whNqoSoML}ad>$>)r|JGQ*B`jP&8w{SCAlD=ROEKXPRp^vGe={1zQ z0{@Mqj}VDZ7=HOpnzO<9T>@@E?8$-P>|Z(=`}|He(}r?L-m;_}whL%nE0memo1)dDqFJ_=>)eKBD|Dz&^yUL z?O@3Q6>PrR5@Jhs^@i0eW~NV4a0f=tQgnAwr=^ql;D2e5Zhp+lO9JSgN8WH=`L4{H zsh8~h5w<20?&_WhyG5xwM_#!Q6oo5w{4yD%cYc2+!=pWmu0|;LwGzyzBL%kyxtk9& zLjY|1;eQP|GK6OE=6j9JXvB;8km1jw58xEX` zJiKPY`e~M(RLrR_?11V6^A)-j$PR!ch#9=ks*ruFCScHIdfs;FS_>ceCIe( zj46>pzV6Nsh?F{AAjH()UVqGCzQ5WejB>C)Yy+xUGK)4@^;ubn*s94D^f;y5skug= z6@T}<3B!wAXw@@(x^4TVaRtgCH-Qk&sJN-m&lr;z_br_AUe1AQlF1rf2P{U9Tgw}%KaDSnzk|xr8=9|Vp z8swZa^@8IZ)pJnlm#iRuH6v1^X3q?Hn4HGW{(ghP^Lf0%TT)vICx|G^_-WVWMB^Bk zUo)89JOB&5>o#wp^Q@gXRux7WX$$`3`RtzB-+CkI%I+1K0*1O`U0wOZs94`9_J4=C z7?iYqR<0oNnk@Nsjrjo5s{wJugDEC0UgBduJ;8>nppVcll9i+{YKze(bRC1Cq~7RS zTF@sZ9^v{T-Td13Y+J_^Z^5Wk z{_~mjK0uIo*`1qQ_)4UzE~uijB!3_v!@UqSQ%VBn9|Xd9O6X@>`^61q`Km=?h(x7A zagGv6j?MyA$ixz2hrJ^Hw`d|7)tQt74kQlJv{5u?-7cRYPGVo6%|b}AUh9R?&A}o8 z5FY?dvn{1swrzO|gnd(#WYT>tiFsvU-#!;K&SESQpxZN&jUdQid( z;dc>K&(_sW{~eF_!;te?EL{kC5gq4cL8J3Z1_xJ#4JItot^0awmq$4DKKnx_+-a(6>VM(?e}aI$(_a1S3PHH)L8 zUNMf?HEX7f-(467kU4=Ve<_u%+bEo)pL520<_ zS~WOgmlTKunB$Wr-r=Zx?lYIsX6R@Ys_3JL>%Y6i5{O;|@0m%P1D)EW`|R4d)fwY+ zHUv}e;d@ou>?FcrRRgZtGwBwb#?2q5PFfP|%j_hKu;m(H@zWVHx(A8s+14!Zd*gag zW#rYc(`6e9BrO?iGf)h4ciK@1#mYH75byj;yzgG z?PDnbPdE`!05bvE=u)_NUm6U`M-=tm!R0HIxrL@Ca3d=a8#L z+?-VjL1v{NN9Yg&vMxtqIJsl%{gjxfY58wJo$%{liW*5yR^BlB@jtPFP>KlZg}}mY zf(0A{DNm3?(Eh;R7|9Z5iwy~Rez6ygLg^3d9dhv)zurAp`$DJK@n>@xMcHh!RaET&}?@ixZqD&;pU~unw6oR_+=A zUdKN?Te1>6&-E*xyY(VD4cn_q5-y;3>e|(sz(&N>TdCX+INsD|vU?^|n$dJz)0S6| zQ0ENym^r|H`w~0G=01ZU_{Wdh!3`EaH4P1I-LUTVRLyM>%L+ABJ2uRG>w$xj z+w>_gRO?*$I}PrWY2yT6p0C&EmEN5IO8%qFfP$b-VS%lS!Fjbkeve1GKr=SNRKUDC z5=;yK_x>cFJqkHZr`sWFm63WmqkS_`{b*|hFK$Ws32ug|z`)}&Ze(-yJin=-w3b^o zjK%4PA}9^`$s!qI5MI7E(xw}+*ue>>(vAN?4x(lUcl5^RB^YQ3wMNhv&DaB=S0HH8 z2K*vyoXz^RCj0SXMAC8)h{bKgu_gG=R0ps-V3%jfkRPhU=PJuYxb!l-4k35sE zDOgj&Z2qY??7Z78-~1*;uN}fqfOMw$;xb|Xx_*$Ft<%ay*;3^lYIH_b&TJw}PGRru zI<)I2>5TzWxAEZfw*_2n3Wseq>>)h7bB0`v+DYu_4B^ttNV=&?Vg&<2_k`epd=op% zK~dTpGE^QP8y1~LB%vq8`^(&Q+se*xbtwaIoHN2DT;WL>)amv z@%=T~2wGCjyL12K;~*W6l{w)*!UMfvHpee_8@+ZXWOn~sHv0A zp@BtY#>-DM-CFrf>rM}7+F2uJQY1ovlfHhBU5_b%{;vKL-l+*HU@!(xg_B656kK~- z6n;v-D>jVQ!1$%@&IpVERSdsq6~mIT0>{9cWP^$X#O7%+(?vTIM?rg}@*W)sGx0TY zg!%9^wB%+RF~1Jm+^&#?(!_H;j@*rz&V!~P4&-L^cJf$NVkQg#K>?l(a%Co&bFw4u zl}I)M0IAi&Aj62qC+R3sIBbx)vkAFs^u4c4Zq+y~#~L=z-b$-uFq}DtE~Xg2va0Zd zI%MD()qpOkgrNq04bR}#@Ga@xaAxIuJL*K*7C~np#~~@u5Nn&ObHp24b?-A{o%_zL zo`(86ujQ*NPUQk1yM==SErVV)-=&XeNQX;w!h230(lK;TW+T8_i=hr9)NwsqPD+8z z>{6N;cGKzk;?b{y=#!*His~kC^=cWPC|tl75Xft3MVf>%d`=v=2HFslQz=TPZBzRV z86NjG^$IzTf3^E%%D~Vn1o814ffp$s2TmB~z7doMA|L&@8bi8-D$9dSv42%9O8Q9WfM1jDFw$1spO0O67 zJg+x%!1Wk9J$OgYQ#6H_kj_j94ptG83rzljQVPgd8K$Ym{FY=*OoIUpqDS`^2APM}y zRM}_r>NH%t4}>(w^93Pic_{79d3f&xYlgyQMur3k-q4dA{W+T4qy5C}+^}D>Ri18x z?z+H~dd|G_!q%tia}OItJ|XAb!UV+%Foz3Uxm0j~8<3zi;W#it4z@TYz`D6lOyGwF zXTB~+UecXE^J=l)z0Ev5bIr7#6?8)Ld>1M|Cf_o(JiULpV~H(Jd1hTEd)~lnE}+<7 zvseZk=9~1`q0yuSo~6* z!?zI&Y5J3TUkL7$0ga8PVup0o+4IUSMQKoEPW{YRD(2=qKpnw2MV>~IH8}Q<#Gsxl z4F5F_3N@w*=3L(ywr+QaD}Tr5bLzPyU-c27Siy;|8edhXMX2sc7;hqWEyWKi$%tcB zkMwKC(6|VCmcZauMxo7$!TX#ukerQQDOtJ0wd$$Sf8OT%y7{1@o9wfXnKK{Mn}02U z?2L|?FYtkC7b;Q;k7}-uzzt$ZLcZ>77T^qo+@4bA#EDASbBWe?jN}7EI-_Tu%&H8i zuY`dxHJDbYpTZknM~o?n?f>vnWdrYG_)=jr3`s{uX9&@?927?l!Ty0u*25}R%!Q^!7Ld|XuP}J>|m2}iYfY1qOmOZ}(&HPFd{mH1KYM^YJhw~Xn!6BJGIA<5% zPJHo}cYo2RBVlW`LYk9G#yo6;TK}-I1ouAUKDQ=$hu5S5?cmPyc+wx*aHsFI8c520 zn?PoaA#Cw4MsR@50B<}4-vs*7TcYchMyw!rL*ee97|ZC*vVCW8kJtDZ6e0!KS^*#e zeVp#;oN%H9k6#SIRxCZ*i7M`ni0e>9$%QOaXQ8A?ljuWtVi+1yE#p;R4A;6bA8q3! z28--?kPmskkuPUc!1iT)e{J2%Pn*&gM(<2@y9{Xh2}_8`kIQbCeQ7N_+^h8#@(l~( zJ|0#Rl9XBMwgrmLI_qdv5v~F5vPmS=c|>=kZs0KT=}bFJN2X1tJ35{l-7?L5>5d8$ zcs?yZrp`Ghz)+Y^>)EIa3%2gFjOdGXRs5ky0;L`T(ocn~+b9lW#^W&SH8n6GH5KA( zCSVN^vVr>2{SwMly||o|W(1(QIuo*zF6ChAkR$WM*^@lnJzp%7gpUCBigY}uqiS6X zAU~_J^mezi(tbPW7vYjqT{OR^lmg#XOxKl>Ym#o_eY5M;QuZ8JBXT!DPi?rEmh_x{ zbJGJ_4qBHtZx(-Mz<1~VNnWn+=%poc))ASmA=~rWdmh+LSM7BK#5uT=^>K%|*gvb) zSl;Ff_{3gSPL7HOcpw7&W}c1CpM-VKMRCf1GxN0vn=>mv8o^j1Y00>) z+60But?GX`Ve3y6R^bvjK%3@~Xbd*c=Ib)fhy-jJPFK3P6&w>Awm9E>z1{}sdMFP+ zBYUu5BVtk*_}HKEXSK~}~JPtJTwS{A(PQ@#h#pbT&$=KpvdU;OH{ zjVvnii#e}>z^dQ&<{3+-V7-}-JKm|5UVOUB0)$-Jv7=%%Cok9Ko+NiwJ3bY9j+g7< zB9P)mbf7TKBRqX_ATfULPCCwYxm9f*ifdF^qw%aFsWi8DoB|CS07?l6_X!!jlW*GM zQGL$#^l+TIA)^49n!1CD_LE>nRv)^F8luC)u)wx=YL*Sc48JY`D>+(;frjkMcLKP5 zGj^1C)nKvMPtH`D6hmX1-@1)1yv`39?jd;%4=CqS!@&%X8xyp`f5l1$quJh}Ooh1G z?`P^^Q*9bRk9GRQsD1bX@a20nGQV`t)(m<>2jl9b;qn0GmWTNKVDCmb)Mk=qSfRh$JSIyx~_k=6q z3_)##r;C7(1!mFjzm#wLh~QdeZW1pg5=8~fDLoML+#MQf#)YJ4UzKc(U85TcRk*#s zY`Oz6H#7oU=>s;LAd_a{P(W?1(w6Q^HTATNs6aY8wj2{ zt5-p|+UGv+t2hx^lP(oG49F4*BBG(4gJqIoGYtU+S$Ucl*E}xCfTTOk&0>|`*R|us z_D53!UahCBa}@qG zN6yFagotri8^-Z^Ms>Xz+Wx@UAZH<{*=1G{#nj1<+cxsERnKJyN71?Ta+v9jTR?X| zJNN^p>NbyO?I-EDIwd5ou^UB4Z`{A(NTYC}v`(eHI=pnhu&nysS|!CZe>!}%_HLhJ zb1n`N4O0-pb@(07x1Q*2Y(c(H?uupiG$xBu)w+nLI-vo2y(#D%9OJ?oS z6kBcklRyu3gL}z99gAMB3Yk|qWqIV{#(x0N7uMZ)p)e||$7+0xig%*XR$ccXbkiF0 z$gG1PjoSkuLy5doYuDQA{QMk3XwxwycHTkbQOu!wM@xCLh<u6|d;xbF%a8!O z`zMHl4PNttxnFr4YB;iv(y${;P7L_^nzJ3G^!lfAMUl{kf3CL?vSW>PmlYntI#37B z7M2p-($u-%hh^LPG^eF^Bq6H{ScbRVHzn0uf|7g{fRZdnrEOGeoP{WjbW&urS?~Vw z%<~v-3neKO;O68BW^rZb2%t`4?D+xUiU?X)cE|C?tei#zj*|w5o(s;Zwz=63S8c@u z#wbS=KJHa?c8=mDWr{_AUm|chY-?SVFYqIMA!W2$&4Tzq>9nUKODSq*kdh$n~&l+)w8GM`c4GPSS0tbzTN$?c}pF}=evx5Qy`?f5iIA8*<-I#Fj zCZ7uV(=+RS^o}Yx+B<$kD?w_kFJs$pDtYCgRL<)o5hh?mQo5V=OWhD97I9ur0%$Qf z*Pv9ZnF{vG#0P8_|FZRDoua1$!*(V|{9F%@(9bIBRQ8K+DnVZ+7vf~m$uG(t9`U`t zwf!cPBY$dJ&sS~nFzej$`~d=ZZ7(D-g7QqWYLZ_1w1+FIq$2~bC{4#UMQjXtxGq7q z`vrTE8=GZ-*M$i{dp!5;*SN;CssKEDbSn8x3L2&r1H+Y}oWug|OmnwBg^4aVBp}$` zG8OYl&;K3}&G{8vh!T09W9|HoXv?ilXAxjj$0SYC6|QgjOg6Rp`|tdvrRca=f_}{2jE69zSp2=R}v~9z$qe=tQs{@ zgD!+@$Ddk((%<1)i!PH;R-3ShivrSIAFhJo_-CyDbalW*HNTRHp2xXt9_UsDstkxP zF-*?z>1&|Ox?ag`Nkj&4{6tOr%|zs!M%WtpWv5qP$ygp>s{`JiWagGkjkz{I*e}u5J$*X2;j;3K@V9Yv zJn*UMK&^N%H2Uwx8C>EMGWDWD{lF2fP}2o8!y|)3Xz>`sWD^7cE`)~PY|j*9&>?^7 z$?)~}-JKW;(~HX?*weIU7YWutZ8{DcN|Pu0R!Sf520qAZ-O0Kz9pm&BoY7}Sx0C`z z8j0~IFnXOa6{1p_V1OB5;x|lfr}-ab_`|ZA-j?rlvsJ?0d0F~H5-6TjdfMaW_xH1< zZdod!gF#Zkypwl8$fFn8#U{1c7mC0CwWMn2n7;x&{CZ|EmeekboW-+;fw)_5VT=%^a~HrR-;0;{9Jp+X9Ib|l%=GBp!mrD9-sGMm8f0;pWaH7GvxvIJMh53wp^ z^??AxsYL>qAi!_0R{%T%mUTslrs+*Nv>MC1A=ZIFweB>)+``6SS6qIXcNc_9tD+@% zk1L6KL;7F*zt%}~Rj-(1{6YcUUN{r@ogJ9olwNqE0B#0f-w`Kp^9T2bG0p9vRR947i7l%-Jri(V0M>W zg-;5TUjfsAj@|HHeRw`|cUB-hHHgAM^Ky8)$a-mM38uKT1Qpg=45xC^>I7RjvEZ=Z z1AnKkWayUTvzYg`;`&h10uoQ|9{pmC=Ngj&hY41q8bzR@hrP4T>}YD5Pbvi$(E`FL zUkv%)KJ&Ch8U%Uns9mA9C zNli!Lu7xN8>2EfWszGs5<~KzPkpcs03HPe|f#t0DntZQlJ5TV9QpYjOF4N>#M$b%; z%%8J4m6bI;e%Y8PAPc1kWf(0zk8hSi{5SA5mW%fSQ^ko>A5SqJV6)zO@lxuWnXP7C zKU^{Z_ty#pc1D*6*<&5(M=p2p59qPltkd>r{O2x~nuIg_AU5ng9o@w4-*v4|#UvBv z>QL~Uu+%NP&JBW;2N2OlWF&%l!d?iBDkt;#50+VpWR0cz*lcoA5~N{e{Yv$+o=y;? z^1;ZD*=n#H?|BCO?a>Q}aKEfBFccHSTVzK$*e!%ThievzhgRRSU%wK zuGWb2*QR@6#juk3GTgov0;W%?+(?IZ9m*{qLWc|AGjc^bc>CX3-p$+=n!;b7Sr404 zJ6wOE|IumLtVBrIl@$n4=S#}2*99L&YFHX>jVTSKKJIX(MikD(%^+4C1HQ~#-tF-L zWbLl_mc~tEFoYgBFC>u&+DYq;J2WHc+QwzjvyThul5v~Q)52p3B%!p|1~8sbwg0Wq zvSz*}+B{y6lIqQDRLEEF6Qi(`sF;NriT~U;q#i|^moZ-oOWIcRe3_hv1gi$h{dsET zg4wZ7(jXK$iDxAVLty8%i|t03+L%5YcCE=X&>Ms zFs*oH|EO|<@(C_ClbJ)_U+gng{j7ofO(N!U_O0ruMLN#lZS3E>?&AMWh5C6dK8?OI zlIhs&Lu=CHF|~QGTJNoMZy#-CxHtnn;L@hOr;>h5O}a7+%fQw#PV1c8<#d(@5H{(K zspD*lV!(IFI?OHS?00{i%t(vDqM(l0S_Scuh%~#^8e9y&P#Tf<*!*^Te<=ISCikY8S=(T2>O7HQ1%r9STg&!hnXs9xxQI-=A zMXqOwQh^f;dPesKiYAJsM=H4j7#zjfb_)#Xg?d#YCAk9X`Ln+k>kt;qy!BCc*2`9x zOom7OH8ksDvs}ib385jk{d)04DM}vy-bfzvOxBmrKE{I>l_Ehu-YeyrYBT`NA+PZ< zmkrWGnM`t$MDx9QW5$&ZV#+^oz#g%+Tb)SERQy@85e@}a=g<9Gq>UT`h}%G`rXT+q zH_oiVwCGt*HbETo(YfWeI)9Retk;@u@2E)~A`VG{Bs_^6`ChL-1_TeBjKH0&w6s8F zCxbH^B{`8?w~cz^>*w|1`p-Z|+21mLCjRv&wjTjQ0bN^eTej23H&($Md%KXVX~Jc! zz{&S8(8-)~KkxkoyLROb5HMjL-e!uU9-!+e+7@IVM%n6s*P;owh&qvY3lCIj23aM| ziqCGcutsh4xG2G>xt8;?%BMIO>yf<4T}yLdM*77z0^!YiN#DpBY#|VN%9`N=_fh%# z*VI(@HkE~xQqG>w?x>1mFc9PT9Se|WFHbVZA>l6Hif`IYLCW)QfTrb?;{cg(LNV#B zC-6b2waiKucP%`&w{xuSMvJs$wcaV2X?}kL0MQLwd9E;# zcBFdzCxI@3-`X^sdq}!JAGI*qAneubr}Ekev8gH{y4`QYLEWP=7EsJLND3v;C}MYe zmCqfap8S08P)UYjKmsC33#Dv;$zbQme)Tc+nJtJiU4smKtCW8%ul4#g$^6dn`^-zD zgvoCXX0s5JdjaahOP!9;zXV~UEqhnW;PC&$GcnuG#p@0JTDkm8=0%h#mm-SyxpCO^sr({`O%mWFi=2`UdA3P(Too{I_Ca>eXjP`KbdMY(v z6ykOMkzORT6QMA}@>y`$lVC`EYd#`iIBh+$ISRkRbB0C&jky4bl9&#E(g{!R)8Jcg z=Y{}1v)O|$iDBuP3`qBpw5#K@xSb+Fho&`OW%(c`W8nA<(0q;=}xq~ zxo?~YyIqrBn0|&epP_ajrBy?BKh+T>T_Gv;#zI3f0NE{3v8TQiln$&c4sp_*KM9)f zmv;ZeJxW@SoBzn}g3A>a7M14$8f*(igg7Q=+!+F^Gitjm4=&kte7nITRx%OhXCy7~ z`HPwMd#|4Y3s*rE$2V6i4j{x)%wwUeUBLO%j=|KbKi)(gP+^pXe^U%XGXaQ zwD9xw0fQwX*CdkXiwCYRNyUD#mo>R)OcibAzZ2!q<3F}#-V)LwX#Xk}%}ZcB3>GAB z6&;1DuToqP{*mhro!nn{bczpRZMUemb@eB>ngO3X-WafCKnGWo$TTbS^QPfRj2%PW zltL>)tkN3LpO`SicltT?>#NEm`+%$0LTlQ>1jPEAN$F5;a$~M&1!+xmwuY&q7(<^y z^S9;b%Zd2J#?bAAUv;V3ZIiCu(`mOP^+%ni`<|?a%fOfne;64V7qX-vd`X% z@+-&pzr})3Np2i(*XV|T{^Ag!3{ag|T&R%ypw>2F4qdKU6oYr{!Q|~*sm>;NXL$QZ ztQhVvRE^D5Ovq5Bk%Issi?&K^!a7U|mmQ~+>P*YU2%l_1bOGf0Zm97vC;SIKpvsk{ zQ)I?f87SEu!+LTU~iU)jFg*HV478lL(a= zcCbOsw;TGIf(u4qtP*Zixr;4xjSgVfbUno2AovF_lMHg1)xiJ zhI93}6H)}-*t(vy%O)xe)~!nM8al%--E0E;Qx?HZd1Us$Mad<1i^rUDu*;?bSNeAC zLr`|k|J-SEzRh%2d{u(Q{bdo#aI;T%&Qy^H zejVaIMoV;)ccS|oGHt{*HgYi+0ANL{*!}zT0_%GGT6~hx3BBc+v6|L?9FE>G6aa(@ zyg>0VVY)aW+6r>TuZQY6fNHD5F~ok}tGH#)&ktLd>C0m0GqTxxuosTkbJBR zED&Qvta~Yp1lV?9vCgMpgE@gDP8SQbQ?Z32MsDDa+_ry}=TYJ)nWP9^ zWucyum^J2zq3;0`26@T>!or&Tj z;JqJb?OQg_1Yzi=eA8AzAGW@pomL?T;U(7MX-K)7Ye#L4N}JMa)^HL3b~PH#6lskI zUAvonwd6v-_s`jsFzQ^cS}%Ntvzp;=D`ackeXEgs(6DnEngjX8(>=#lt(fd0a32p& z1F`;z6SG%%q0U4P4l1{ta-ZyP%+Gwik0-Gx+AeWspoDd%~*O(n^6N0}*d z&}Xb@3r`M;aZ}Vja;GrK#{x2wTRaxAC6|d0r5&8itctN5w<6t&Q?_}3i7~+G50QKf z7DfLHzsfIAg35LYeXUOnO_lQgQY1@^fTnF%WDjGh8Aj$k1=#T|?tBtcjPAGCa!(b% zrz?BSX32!bP-8j`WpypUL3PvKHo2T53VyWf9Q z)bW?SGwzaM4>0=77+ro!+5Jq+ANYt8_;;=6&-i5M_jM@?j&9-`21T2 zy44)o5G`OezR_Zm(Y-&OAhJ2bX)*>Hd>O=rR_904$1oQMy*qbW!ZsK+06(jEmI2^}0 zVb-o33>Z(X89~8zekjoX;rB}4=23v|;*CvTd@ys6x|%d0{-Y2k$5(2(BOoA&SScjhZrIN=P6cD0Lt}(O?RkOHvS)3Sd>)g zN;&ja^(@6k84e~^PC^Dkdm}3t9v&Ea6;B6KLV9^4D`gj37vKM}7xN`-gNGmD1Vq z^5NniiwDF25#^kslfIIv5rYQymOj0OKv6P$a#<2ea{R4Avit39vI~07Ez&BSEz*u~ zG3(zEDRF&Ddg{X4a;k#?0Z(Pk^1Us!>D>kOX-JRIacxWtk)uLDU};rRU7d}8hzQVl zpNi5t6dGi*MczJjc>zutBDG|tn4%;}09;%g#F=QC9WOI^_8^SRi-78o!dPA%h)D5l zvY22I1T>gKUK4=@@C0G377!%%;R;Cjxj)+OI#8GvNa}AR@DgoQT<|6&Y6zr$x?nhS z$)u&S05uRnf4XA8?m-<8LedC&6k6C+vYQ4_;JT#^#4#d!HSsQtj3vC)oj=65eK8Vf zwW_JC2(LwN3aSxR?5H*2UQlmjCCIsKP*a~)8Kz2ULcB7C^4us|6@lO0b2NTIE|2uxzRikXDC0! z`hCGzmPIfIh!7N-^$f5hiAse(qajOqa1ml=w7s85J!U{izFHfx{_sW~&iC+)L9*h}s2vdfif8Xy$ z=&DI*V(KxC7>A95hrptkY5Xw6b{|+`xu&h<>(dMYj6FuSl1cr7EF+pWb_XS zjXIs9!Wivtya*<_LEJc`KeM{_@!a7HW1*_^$Sv|ewirdRSR;Hf&kA;mTCjaa zVe=_i!>SW?KAdC9=IO`3ul%|LC6~JvZe!~$?xC&09U!9!iR>q1>t?W<IZ7%PhE;|KPN!)2y7FmW;jMe1u* zzl-rRHkoE>G1hP-N{%CkF6nSAbYB|CJZLG@LCt6n)EV~Qqq{~IPq1c#CZ}j#@ZDMY z^&hIHVBMFu4{Pa}FaAA*dEVdTAJ~SF@6KHVSbsfq;b?PjH(WAtO`U%L5Y2@#+mipB znur_NOno}5FB;C=KQm70%~}wxWBQ-qXk2oS6ye;)GSioK!+W{d0-kp2hzNE@{n|@J zd&bOj4DJ|i=J0e`beT;jMg$;0o%~MzzY36x`=SDS7?*MQ;ueeRIpW z`+Gplmv;Ga3o2S3J15H1Pw7J1javSIB#*}jHlQ#)>|IWZ*lI2yafe<|K3{?9pcDmc zJYY!J&vmM_@KG>Fi4i7DtY9%N8k8(4pFuu*%dExV5`qf{8c`PZHNiil~%DWIZGi zr0oJULs5qaIw5tYW67S$O?0t7As9GX+9U@Cxd}WZ(U_6f)8Y^7Ljc+ix zX0Lr8aAeEq-^YDC2E`mM#x|Lhq!WE1cl(e~`;nN;O}!euWW$(*7pS7xNnBv0 zI8bUi(RL=+s^Si1D&V;Mej{ zu>F>I`^Zzn34GndYS^Vgye0&X2uBVusz^qH5oPzEO@Tri25<{7JPG5N@p5bZY2>6p zV=9eTlgMO2sjYIT_Rv?GYDNLo;{|Y%%2jJ1oCT#O%c;vOLbYbx;)**&dcSA?`X7A% zc?K94{a}OuKum=Jqr1NV-r7{^lE`i7S0q_LR)X0{PRRqHSA04xl7*p!$dPI_Z^ZdD zD2;5@GQKQcKSj;Cbtz;w2j$=|(1P4xwh%eEJXZ_25J8e35pKA26ejaF64R9ul%#We zY}=V>T(%LE!Hm9A2@h_aUPsw=Xe>(}1!!boi)Iv%v=@@Jo+9D^&596`@_sk*2Pn11 z7?D^srN;&!of9TUqW4e9RKdPqQQMGd`NaN6<4fc-6M0N=WLc(b`TCQlDicf=Ol)eT zg%~nyI4PyER~=c@2bYc{I!q5}3E(-Vni)QvJp#=$QB;3gMJ%pRIB`f=TF7#v1$s=b zP}}S&iHdEy4Ny=3Wnz?`fUW(aNkjeh2AaF;Yy)i^z0xi|v+m%slTqY0nSbgK%MUvs z@Q2jT#dyMbOSJ9dZQ+Gp?OQamFOAn$6VP%O9E{E7w zy|}?O`U7-dU3J2fC{a`)Fz+j(AT~Tl+(qA>E2uE40~jZOiasj_DFT*?cTJbtx#I4) zx0R^eG=$q+uN*ycLAB6b?vU zVNssrgXrWS2ziRcpOI<0lY^O^YH~#NAxw3C8yb!iIkvS;exK7nVn&o0w2)R$sLY6T zkxluKG_Y!ng9i8d#WXcl*d`w|W+=I0p<@3LuBi~pWHGAqJD~UM07j(xR0~KOQ9xEb zMOF>ox&gwIB{?*@*PDrBm2CU8w(Q_Iwc| z_Ul00IL6#RjqumKFu|{fm5Gvy8+r1m&Z$oi09%KSj5(+mfUV0v2jfO>v)lUvkjvxC z+Knk!#L>o!m)q-qcWa}Eh41U;;$W6E3xkW3_m2EslWSW|2)`&(%b zSaLu2e)@Vh{3`QP;;+_Uu07AaXnm^tRv=g*cU8_^E+u(=!LmAdcj?GlGJo>){eHUd zN?$B|H|DLOKbPdKE=?@?TScF_X5pnYbMDD&&o>bFb}HRnhH=tZQjP(TyDNGl-~N=~Ei4)*w!Z z-hX%p-}O)-^yI;lCl4lI8WX>dzH-|6K0hISF|5%zW&}}*rwB77@ zzZ^cn`hT1`I8Mj;fBm(ZPC3}KVZPJ?K6fExP8v&r=z{3j27d=$ryaN!3Ft@xkeyE* z`GBpCzZ;87k-Ws;KOJ!Q{PkOnpT9;`B1LMBU?(+V&=$pIfACc2=>A7An!D|FfA5Io z>t;1$k!1UXCrPQg$5MbQ+Y}fP4y1`y>v<4%J2qc*Juo`89QSKZ%1&>( zn;X9{JwpD{+w{{Gnb~T|n@t8?_hhkd*%fkUhFRH&&f2m<&f6E=c2hG1I7PW77_Eo5 zN!)(51Lt=?r<(Kgcly5QijC?A#0l8<)q3xzngA1N6BoIMfOOhML6Zp?ZCPFiB<5Ln zU0>0dXJ5S{3!d%QsqX?jPNp)&vBI|IZhN^_Ezd5>;`oW+t~Y`paIsg?Fr0f4G+ci_$uA)ycBHM(VnprzKmi1KU#llyUCu9K)x-?U_}Vm6 zp{S{>zOCKXmLIQ1^=GSB3M8YLX#lD~r_2R7dZ5xb2dDWdTcnAx117&B-(wOhBS zbqK!RPp6EV;z}3B9>@y`{LwExX_=8Itn8C;eRDPYV#l=trD-2G=vqtr#4f# zFyVnd9@^pfUNtmY*U04eEVwdmQ2X!jcDyXe+oPDNn{n^fL%t5c*51{w%zw#_$+0hK zzLc#{4h1BcvGIHZR%s|ABwXciTYhuqrVKE8;+C*z-($%TzDQfG`-DFp!BqVq&{_ zuQmyXD2I3^H70GBT!(Ons)$Hy;-i^VrP?w?WLr07_tIZAkqs)YXs+TLs!btLDs%33 z+8#Tfg^kVtzjK?6L-}MS!!HRH%F6YJfsc#w)nk-L81T<>wXZv`1#o-E6`ZOAFNVHc zkz!-qq8K_;>zfZj;7x}&L&4frsBd>~4*NRuk1H+ml-bzT+3Sms!Zn|OZEecYrd+s% zsHELJdvWrp2hJ~wnBf|*eEodeXf?!q!)Zu>PAugHgUL-WV{SXJWl!geE=l!U z2nhAt61%`wJn}`?Z7&#Bw@RTa+1r)_o3`Q1tFuM7KT~L3?U}o_AD*_^tV_)7JyV-1 zZAi`=UelW9Q;!;nc*`)>%6GptHZlxqotGO~uUg*A+MuUfO6#qw+H=Y+8{t`K?E{;u z+gG^&=DgAiZk5Gb;X!(?+THkqUU1_GLH!tT&rMVZ>>{mO7*iLYPoKc_{mg*Zgf(aO zzU^f4bJx~W+h1e=aPI~TiK3sdm+G2b#dbWvALh|J!fv zQ)vVr5BFjD%QVjKK!VAoMS$H zx?u;mbaK`{MZzKIMU<}_;K$)6-yCkO-8=c;Gi{x z662iQ!~z(hO_ArAhP9-l$*S>AuZgKb-H=vvO+-^LB0M)f>6ybVJN^r+X-EA>_oLus zZ{lif>O@H4U}C0XszJ+0$HG9z#Ms&`tF!}3$;imS$ic|M#KOR;MF~SMYi}ZA=weDp zA;QJP!1RB1rp_rU(a8Om4H`loR!$~1R$3-Hw*R(GNbzqWLK#ap zQ^J2%7$^y?9SmJ8oJ|c0-Tv1+HaccHCdyRXOnEG-{~I}CVf%03h?$e)e*;I1>`WY~ zbErxbfIk|Vv72mgemna4BSrq59b}+_{)B@1>m{PGrNo#XycwD#d?kDdmp$~B6RpE% z12wjhpRe(#mYyCo&}2MjgBJbOWHK6URQ<{R)Z~F9!I^0iFif-YDSfJl#c(>5b8ySe zL}H_mHDrv8yB1JV15n1O0NlVNMi)vnL!E${!`;lFhH&Ua)TEG5 z9BG0!#9&H|lR)GWv{MIROpjn3ftG0Gd_gQkc=x_-KgdaE_iU9VqQkKu4p0uC>Mv;c^VPr~<8eu(D2lNzVOF|CdwfOq{Um!}Q z016R8n!`vz@P(@Vse=7!J39++zmi!9+J5nI*`lF}R85@*ly!_E-f)>3fU!a$ z+Uh@L3iSnn5Tm3Ambha?>FPQm#_{&4VxB>*=61N|_N)z^1`?WjD`zY#XU^94x-gAO zw$yw!4ChQ(v|;Qj(X#rX&DB7HmgA18l}7g>&Pl!QobG5_-{}K?f*8=h=THPw*ikch zeNRNo6(l|^I92T=ZBWMW%RYc5P=dsM*27$Nf(n-RM%nXcRxB7%J+c#LHNC=NUq{yj zaZy({PZf7llxEc=5qO$oIx5}F9Qrx3i7jgm`u-rTa&G=@VdEhAd4a}`pZPnJ&J~9AEL*H6)<%YSs zxaCTdD$-U($saq{-KZHCAG>wZ z8Q<4|cw?;b&F zgM!+(J~LCgQ94EJq{_`wdr7k=b=X(O^-2Rzj(ko5|Jv1VZ0Tz>FV6;NIrONkJ<2Rj zxp&bfVoaeR6*-36>PS6rkcJGokvm= zQXT-8rUk|FTOo|{Y$Z`CEgsmI2;Bl*x`h-mNZ=24XO0RV_m7+AJLhcUICJ$DnUr1v z4=1bU96bC|R*kB57RON>=XAd&c;F7}c1S3MylZNQa(wC7Sw@ZuZ{eq)j_dHW!9d#Tc)s(VRx@13fu)_5J9axXUU<6IWF=eYsSg zw@btVa+Dbu*#vc0rIxXB4?(=}#wj^^x^hLFhTgCm&EKbXX+N-xY0V{0w)+NPW@KIV z*hP^a8P06VSCKqtbjIK1{ib}h+#Vant8YHI9fX$z;^BZAp7sXEA?2T%gule_2)rJ1 zy2x30Uug{a{x=MpYd8JYI{c`BQ^;ugZPEcg6KbrA@;^{bsQOWPh9lRQqO%QFF9|wc z`WD;95w?8Om5N|fHfI!8+HftMeMkmbt@NuC#s*spheffZ6k%PKSXw|)dmm(oAW9qM zHwPM22HOCa-e13Gzz)*{apHo^(I5}wuw+4RW(0i$q5LeFkR-6fQ5a#}p}G8Z9+?(M%R@{c#&C(N%TQ4YI^GwSx`*bhSbu z;kY8EXRvK9(_wB$I?7K3^JeCxbhm~#`4Fvxi2=}r>K%;+1X=sj&rdLMwLVac*|XL@ z8GU#bnl%H0Vj>mdxI2R0>6&U)zp!THR}VV(nCPclQTk`ruv~(3fA`;r?YZaPcFMwa zR{pHr?fUfa%6K^R=m+nB^s8&bgqIq(aD$V|xiuTja~{-1}(!Tv84qx7E{X7>MT9RI5(La5CnEXu?o z#Ky`ZBqk=p#>OPdD#*&j#Lgzj$t23cD#XFW$3Xc1AM~oqKlmx)o)2)^-g3VljrQYK2y}g{q~uoVSYhV z2r&fm9eD67(C^>K&|HiR2cHCq`pfI7?l;}fjqXrHpRyrwFz6)^AjyI-$g3b^b!bxg zaN~wJDgtCSVR#DQ+=dt`!tjeict!aDeC#}=j65u+Ivg!RSZ@RR%OJJYUsvct$=BaN zxHNonOrQ%*VP$l^o@qwfI7_A#_@^N#4#;wSP+0+v9KX2S5zq~wYkHY%{$W1Tr&;Bk zpw4DTG6Pt_5B~xi>v^yp0p5-^7aexwxS=GyMCHJzbqWo6C%iBt9++E8jt1QT6@teB zOAgo|^opMICZg%I5S}ZB=zdHKD-`sGU#_>DX~D1#NM`w2s)NLnjj~ZzZy?DU z0iLj5QCwHZG=baws%^lP=)?MFajY6))-*#|*}a~ORS)tUgV2>IYUHJIBHfctzPU}U z^ZnH)73VbFpWoc8TcOopaEb035fHNI2m$c5j9B?;UpsR**jtN z0xiD+CsIC7%kROp=mM?Y7Af&1T75m_#jnunm604@rqu^V%zTwrZo!_Wmspc{@t59rU;3xCJq1oT;M z_=g_rq~%_IRMl_!%>PF{W%;(-ss=3I^Fh_1<=^+JI&HI=->Qae_Wp*dVVm82q-wKd1{)b{WTugsM#dQ# zXJnF*Nk)bk8DeC9k Date: Wed, 16 Mar 2022 10:07:59 +0100 Subject: [PATCH 89/89] Documentation update to v1.1.0 --- DESCRIPTION | 4 ++-- NEWS.md | 21 +++++++++++++++++++++ R/start_mess.R | 4 ++-- README.md | 6 ++++-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 327daa6c..07471e0c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: LakeEnsemblR Type: Package Title: Run Ensemble of Lake Models -Version: 1.0.6 -Date: 2021-08-12 +Version: 1.1.0 +Date: 2022-03-16 URL: https://github.com/aemon-j/LakeEnsemblR Author: Authors@R: c(person("Tadhg", "Moore", role = c("aut","cre"), email = "tadhg.moore@dkit.ie"), diff --git a/NEWS.md b/NEWS.md index 33088306..9ca3ae2b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,24 @@ +## version 1.1.0 + +### Changes + +- Inflows and outflows are now separate inputs and can be different from each other +- Multiple inflows and outflows can be simulated. +- Outflows can exit the lake at specified depths, or at the surface. +- Water level ("w_level") is now a potential output of LakeEnsemblR. +- "max_members" can be specified, which sets the number of members that the output-netcdf can have +- LakeEnsemblR now works with the latest version of Simstrat (v3.0.1), which included changes in some parameter names +- Model-specific template config files are removed from the LakeEnsemblR package and are instead retrieved from the model-specific packages + +Bug fixes: +- get_yaml_multiple and input_yaml_multiple; works now if the first key is the highest level in the yaml file +- cali_ensemble for FLake; depths are now sorted +- Initial conditions Simstrat; Simstrat now always starts at the specified initial water lvl +- plot_heatmap now works in lakes where the water level changes + +The setup of the LakeEnsemblR configuration file changed. More information can be found on: https://github.com/aemon-j/LakeEnsemblR/wiki/From-v1.0-to-v1.1 + + ## version 1.0.5 ### Changes diff --git a/R/start_mess.R b/R/start_mess.R index 8824c380..b0f2a613 100644 --- a/R/start_mess.R +++ b/R/start_mess.R @@ -7,7 +7,7 @@ system.file("start_mess", package = "LakeEnsemblR") %>% readLines() %>% cat(sep = "\n") mess <- paste(pkgname, " version ", ver, " (", builddate,") is loaded", sep = "") packageStartupMessage(mess) - url <- paste0("https://raw.githubusercontent.com/aemon-j/", pkgname, "/master/DESCRIPTION") + url <- paste0("https://raw.githubusercontent.com/aemon-j/", pkgname, "/main/DESCRIPTION") b <- tryCatch(suppressWarnings(readLines(url)), error = function(er) { er <- NULL return(er) @@ -22,7 +22,7 @@ packageStartupMessage(ver.mess) } else if (ver > latest.ver) { ver.mess1 <- paste0("WARNING: Your current version of ", pkgname, " (v", ver, - ") is ahead of the master branch version (", latest.ver, ")") + ") is ahead of the main branch version (", latest.ver, ")") ver.mess <- paste0("Development version may have an unexpected behaviour") packageStartupMessage(ver.mess1) packageStartupMessage(ver.mess) diff --git a/README.md b/README.md index 8cffff3d..82dde164 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,10 @@ Tools for running an ensemble of lake models using standardised input data. Lake You can find example setups here: https://github.com/aemon-j/LER_examples. +In v1.1, some changes occurred in the configuration file. If you want to adapt your existing setup, see: https://github.com/aemon-j/LakeEnsemblR/wiki/From-v1.0-to-v1.1 + ## Installation -Prior to installing the package, you will need to install the packages which run the models and the tools for manipulating model data from GitHub. It is recommended to do this each time before testing to ensure all packages are up to date as there is parallel devlopment ongoing. +Prior to installing the package, you will need to install the packages which run the models and the tools for manipulating model data from GitHub. It is recommended to do this each time before testing to ensure all packages are up-to-date as parallel development might be ongoing. ```{r gh-installation, eval = FALSE} #install.packages("remotes") @@ -163,4 +165,4 @@ remotes::install_github("aemon-j/FLakeR", ref = "macOS") remotes::install_github("aemon-J/GOTMr", ref = "macOS") remotes::install_github("aemon-j/SimstratR", ref = "macOS") ``` -Unfortunately, this means your versions of GLM and Simstrat will differ compared to the ones included in the executables for Windows and Linux. GLM on macOS will be version 3.2.0a8 (most recent one on January 13, 2022), Windows/Linux use 3.1.1. The version of Simtrat for macOS is 3.0, for Windows/Linux is it 2.4.2. +Unfortunately, this means your version of GLM will differ compared to the one included in the executables for Windows and Linux. GLM on macOS will be version 3.2.0a8 (most recent one on January 13, 2022), Windows/Linux use 3.1.1.