This package provides tools for:
devtools::install_github(repo = "PhilippBuehler/FloodR")
library("FloodR")
Buehler, P., & Fischer, S. (2022). FloodR - type-based flood sttaistics. DOI: 10.5281/zenodo.10717767
For the separation of flood events from a discharge timeseries, we need the daily discharge.
# Create a data.frame with continuous daily discharge dailyMQ <- data.frame(Date=seq(from=as.Date("01.01.2000", format="%d.%m.%Y"), to=as.Date("01.01.2004", format="%d.%m.%Y"), by="days"), discharge=rbeta(1462,2,20)*100) #Run the separation Flood_events <- eventsep(dailyMQ) # The Separation might still contain overlaid flood events which need to be corrected head(Flood_events)
Run the Web separation on the dummy Catchment As input to the function a minimum of discharge data is used. The Flood event tables can be opened from within the User-Interface
Run_WebFlood()
After the flood events are corrected (if needed), the precipitation belonging to flood event need to be estimated For the both functions, a daily precipitation timeseries is needed, as well as the parameter indT, which has the position indices of begin, end and peak of the FLOOD event as vector.
# create a sample dataset dailyprec <- data.frame(Date=seq(from=as.Date("01.01.2000", format="%d.%m.%Y"), to=as.Date("30.04.2000", format="%d.%m.%Y"), by="days"), discharge=rbeta(121,2,20)*100) # Create indices of beginning, end and peak of the flood event indT <- c(15, 30, 14+which.max(dailyprec[15:30,2])) # Run the separation for both methods Date1 <- PreconeCP(dailyprec, indT = indT) Date2 <- PrectwoCP(dailyprec, indT = indT) print(c("Method1" = Date1, "Method2" = Date2))
For the typing of the flood event, multiple characteristics for each flood event must be calculated before:
# Open the sample flood event data data("Sample_Flood_events") head(Sample_Flood_events) # Run the event typing Floods_typed <- Flood_typology(Floods = Sample_Flood_events, n_G = 3, Type_3_min_samplesize = 10) table(Floods_typed$Type) # Plot the event typing Floods_Rain <- Floods_typed[Floods_typed$Type %in% c("R1", "R2", "R3"),] suppressMessages(library(ggplot2)) ggplot(Floods_Rain)+ geom_point(aes(x=dir_Volume, y=HQ_dir, fill=Type), colour="black", shape=21, size=2)+ scale_fill_manual(values = c("R1"="#D7191C", "R2"="#FDAE61", "R3"= "#1A9641"))
For the TMPS model, multiple characteristics for each flood event must be present in the input Floods_typed:
Also, a daily discharge timeseries with a "Date" and "Discharge" column is needed
# Open the discharge data data("Discharge") head(Discharge) Floods_typed <- Floods_typed[, c("Peak_date","HQ", "Type")] TMPS_quantiles <- qTMPS(p = c(2, 5, 10, 20, 25, 50, 100, 200, 500, 1000), Flood_events = Floods_typed, Daily_discharge = Discharge, return_TMPS = c("TMPS", "R1", "R2", "R3", "S1", "S2")) TMPS_quantiles <- as.data.frame(round(TMPS_quantiles,1)) TMPS_quantiles[TMPS_quantiles < 0] <- NA TMPS_quantiles # Calculate the AMS with TWO SIMPLIFICATIONS FOR EASYNESS : # 1) no hydrological years # 2) asummption instantaneous peaks == annual max of daily discharge * 1.1 AMS <- aggregate((Discharge$Discharge*1.1), list(as.numeric(format(Discharge$Date,"%Y"))), max, na.rm=TRUE)$x # Plot the Results and compare it to the AMS suppressMessages(library(fExtremes)) suppressMessages(library(reshape2)) suppressMessages(library(ggplot2)) AMS_params <- gevFit(AMS, type="pwm")@fit$par.ests AMS <- qgev(1-1/c(2,5,10,20,25,50,100,200,500,1000), mu=AMS_params[2], xi=AMS_params[1], beta=AMS_params[3]) Results <- rbind(TMPS_quantiles, AMS=AMS) Results <- cbind(Results, "Method" = rownames(Results)) Results_melt <- melt(Results, id.vars = "Method", variable.name = "Annuality") Results_melt$Annuality <- as.numeric(as.character(Results_melt$Annuality)) cols <- c("AMS"="black",c(R1 = "#D7191C", R2 = "#FDAE61", R3 = "#1A9641", S1 = "#6BAED6", S2 = "#2171B5"), "TMPS"="darkorchid1") ggplot(Results_melt)+ theme_bw()+ geom_line(aes(x=Annuality, y=value, colour = Method ), size=1.5)+ scale_color_manual(values=cols)+ scale_x_log10()+ labs(x="T[a]",y="Peak discharge [m³/s]")+ annotation_logticks(sides = "b") # Calculate TMPS_probs_from_AMS_quants <- pTMPS(q = round(AMS), Flood_events = Floods_typed, Daily_discharge = Discharge, return_TMPS = c("TMPS", "R1", "R2", "R3", "S1", "S2")) TMPS_probs_from_AMS_quants[is.infinite(TMPS_probs_from_AMS_quants)] <- NA TMPS_probs_from_AMS_quants <- round(TMPS_probs_from_AMS_quants, 1) TMPS_probs_from_AMS_quants
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.