library(kableExtra) library(sf) library(knitr) library(medfate) library(ggplot2) library(cowplot) library(hydroGOF) evalDIR = "~/OneDrive/mcaceres_work/model_development/medfate_evaluation/WatershedLevelEvaluation/"
medfateland_versions <- list.files(file.path(evalDIR, "data", "output")) medfateland_version_vec <- character(0) model_vec <- character(0) watershed_vec <- character(0) for(medfateland_version in medfateland_versions) { models <- list.files(file.path(evalDIR, "data", "output", medfateland_version)) for(model in models) { watersheds <- list.files(file.path(evalDIR, "data", "output", medfateland_version, model)) for(watershed in watersheds) { medfateland_version_vec <- c(medfateland_version_vec, medfateland_version) model_vec <- c(model_vec, models) watershed_vec <- c(watershed_vec, watershed) } } } df <- tibble::tibble(medfateland = medfateland_version_vec, medfate = NA, model = model_vec, watershed = watershed_vec) df$before <- vector("list", nrow(df)) df$after <- vector("list", nrow(df)) df$Q_daily <- vector("list", nrow(df)) df$Q_monthly <- vector("list", nrow(df)) for(r in 1:nrow(df)) { df$before[[r]] <- yaml::read_yaml(file.path(evalDIR, "data", "output", df$medfateland[r], df$model[r], df$watershed[r], "uncalibrated.yaml")) df$after[[r]] <- yaml::read_yaml(file.path(evalDIR, "data", "output", df$medfateland[r], df$model[r], df$watershed[r], "calibrated.yaml")) df$Q_daily[[r]] <- read.csv2(file.path(evalDIR, "data", "output", df$medfateland[r], df$model[r], df$watershed[r], "Q_daily.csv")) df$Q_monthly[[r]] <- read.csv2(file.path(evalDIR, "data", "output", df$medfateland[r], df$model[r], df$watershed[r], "Q_monthly.csv")) }
The aim of this article is to provide an assessment of the performance of spwb_land()
for the prediction of watershed outflow. To this aim, we simulate hydrological processes in a set of benchmark watersheds and compare the model predictions of watershed outflow against measurements obtained using river gauges at watershed outlets.
For each watershed, the following procedure has been conducted:
The following goodness of fit statistics are calculated using package hydroGOF
:
The following table contains the set of TETIS parameters employed in spwb_land()
simulations on all watersheds, before and after calibration:
df_params <- df |> dplyr::select(-Q_daily, -Q_monthly) |> tidyr::pivot_longer(cols = c(before, after), names_to = "Calibration", values_to ="Params") df_params$R_localflow <- NA df_params$R_interflow <- NA df_params$R_baseflow <- NA df_params$n_interflow <- NA df_params$n_baseflow <- NA df_params$num_daily_substeps <- NA df_params$rock_max_infiltration <- NA df_params$deep_aquifer_loss <- NA for(i in 1:nrow(df_params)) { df_params$medfateland[i] <- df_params$Params[[i]]$medfateland_version df_params$medfate[i] <- df_params$Params[[i]]$medfate_version df_params$R_localflow[i] <- df_params$Params[[i]]$tetis_parameters$R_localflow df_params$R_interflow[i] <- df_params$Params[[i]]$tetis_parameters$R_interflow df_params$R_baseflow[i] <- df_params$Params[[i]]$tetis_parameters$R_baseflow df_params$n_interflow[i] <- df_params$Params[[i]]$tetis_parameters$n_interflow df_params$n_baseflow[i] <- df_params$Params[[i]]$tetis_parameters$n_baseflow df_params$num_daily_substeps[i] <- df_params$Params[[i]]$tetis_parameters$num_daily_substeps df_params$rock_max_infiltration[i] <- df_params$Params[[i]]$tetis_parameters$rock_max_infiltration df_params$deep_aquifer_loss[i] <- df_params$Params[[i]]$tetis_parameters$deep_aquifer_loss } df_params |> dplyr::select(-Params) |> kableExtra::kbl() |> kableExtra::kable_styling()
for(i in 1:nrow(df)) { medfateland_version <- df$medfateland[i] model <- df$model[i] watershed <- df$watershed[i] Q_daily <- df$Q_daily[[i]] |> dplyr::mutate(Date = as.Date(Date)) Q_monthly <- df$Q_monthly[[i]] |> dplyr::mutate(Date = as.Date(Date)) res <- knitr::knit_child('_WLEvaluation_child.Rmd', quiet = TRUE) cat(res, sep = '\n') }
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.