====== Ingenieurhydrologie Modellierung ====== t <- c(0:35); d <- 0.85; k <- 1.90; E <- (0.142*t+1.095)*(t+17.8)*k*d; plot(t, E); ===== Lineare Regression rechnen ===== #' --- #' title: "Lineae Regression" #' author: "C. Kuells" #' date: "9. Mai, 2015" #' --- x <- c(-2, -1, -0.8, -0.3, 0, 0.5, 0.6, 0.7, 1, 1.2) y <- c(1.9, 0.6, 0.5, 0.8, -0.4, -0.9, -0.7, -0.1, -1.7, -0.2) fm <- lm(y ~ x) #+ fig.width=5, fig.height=5 plot(x, y, xlim = c(-3, 3), ylim = c(-3, 3), pch = 19) fitted.values(fm) residuals(fm) #+ fig.width=5, fig.height=5 plot(x, y, xlim = c(-3, 3), ylim = c(-3, 3), pch = 19) abline(fm, col = "red") ==== Datein einlesen ==== wd <- getwd() setwd("C:\HydroPro\R+") klima <- read.csv(file="c:/HydroPro/R+/fuhlsbuettel.txt", header=TRUE, sep=";", na.string="-999") summary(klima) attach(klima) ==== Kontrollstrukturen ==== if (bed1 < eps) { a3 <- a1 + a2 else { a3 <- 0 } for (i in 1:length(N)) { if (N[i] <= Va) { Nc[i] <- 0.0 } else { Nc[i] <- N[i]-Va } } ==== Erstes Modell ==== #' --- #' title: Hydrologisches Modell #' author: "C. Kuells" #' date: "9. Mai, 2015" #' --- setwd("C:\\HydroPro\\R+") klima <- read.csv(file="fuhlsbuettel.txt", header=TRUE, sep=";", na.strings=" -999") # Fehlwerte richtig einlesen: man muss na.strings=" -999" eingeben - mit den zwei Leerzeichen davor! summary(klima) attach(klima) N <- NIEDERSCHLAGSHOEHE Nc <- N Flaeche <- 640 # km2 A <- 0.08 # Abflusskoeffizient Va <- 3 # mm Anfangsverlust bei 1 bis 3 mm pro Tag # return kann weggelassen werden! for (i in 1:length(N)) { if (N[i] <= Va) { Nc[i] <- 0.0 } else { Nc[i] <- N[i]-Va } } Q <- Nc*A*(Flaeche*1000000)*1/1000*1/86400 # Einheitenumwandlung Flaeche m2 -> km2, Volumen l-> qm, Zeit Tag -> Sekunde plot(Q, ylim = c(0, 10)) Das Stanford Modell, das Xinanjiang-Modell und das VIC Modell beruhen auf mehr oder weniger der selben Theorie. Diese ist in {{ de:hydro:inghy:xinanjiang-model-iahs_129_0351.pdf | Zhao et al. 1972}} beschrieben. Die Theorie habe ich für Sie in einem {{ de:hydro:inghy:xinanjiang.pdf |Text}} zusammengefasst, dazu gibt es eine {{ de:hydro:inghy:xinanjiang-pres.pdf |Präsentation}} mit den wichtigen Formeln und dem R-Code. Für das Modell gibt es einen R-Code: # Modelldokumentation # Das Modell wurde von C. Kuells entwickelt # # Version 1.0 in 2017 # Verwendung von R 3.1.13 # Bibliotheken library(tcltk2) # For themed message boxes; library(tcltk) is fine too here library(grid) library(gridExtra) library(tkrplot) PlotDataWindow <- function(x,y){ hscale <- 1.5 # Horizontal scaling vscale <- 1.5 # Vertical scaling plotTk <- function(x,y) { plot(x, y, main = "A parabola") } win1 <- tktoplevel() tktitle(win1) <- "Graph" win1$env$plot <- tkrplot(win1, fun = plotTk, hscale = hscale, vscale = vscale) tkgrid(win1$env$plot) return(tkgrid) } # Funktionen des Modelles OpenClimateFile <- function(){ # Einlesen der Niederschlagsdatei # Die Niederschlagsdatei soll im CSV Format vorliegen N <- tclvalue(tkgetOpenFile()) # Open file if (!nchar(filename)) { tkmessageBox(message = "No file was selected!") } else { tkmessageBox(message = paste("The file selected was", filename)) } Ndf <- data.frame(N) return(Ndf) } # Parameter initialisieren A <- seq(0.0,1,0.05) # Flaeche hier als Anteil zwischen 0 und 1 im <- 1.0 # maximale Speicherung, hier als Bereich 0 bis 1 io = 0.5 # aktuelle Feuchte b <- 0.5 # Formfaktor # Parameter-abhaengige Functionen # Flaeche vs. Saettigung Defizit <- function(A,b,io,im){ i <- im*(1-(1-A)^{1/b}) d <- A*0.0 # Defizit initialisiert for (n in 1:(length(A))) { if (i[n]>io) { d[n] <- (i[n]-io) } else { d[n] <- 0.0 } } return(d) } # Menu des Programmes mit Tcltk2 winFHL <- tktoplevel() winFHL$env$menu <- tk2menu(winFHL) # Create a menu tkconfigure(winFHL, menu = winFHL$env$menu) # Add it to the 'winFHL' window winFHL$env$menuFile <- tk2menu(winFHL$env$menu, tearoff = FALSE) tkadd(winFHL$env$menuFile, "command", label = "Load", command = function() OpenClimateFile()) tkadd(winFHL$env$menuFile, "command", label = "Quit", command = function() tkdestroy(winFHL)) tkadd(winFHL$env$menu, "cascade", label = "Data", menu = winFHL$env$menuFile) winFHL$env$menuRun <- tk2menu(winFHL$env$menu, tearoff = FALSE) tkadd(winFHL$env$menuRun, "command", label = "Run Model", command = function() tkdestroy(winFHL)) tkadd(winFHL$env$menu, "cascade", label = "Run", menu = winFHL$env$menuRun) winFHL$env$menuResults <- tk2menu(winFHL$env$menu, tearoff = FALSE) tkadd(winFHL$env$menuResults, "command", label = "Result Runoff", command = function() PlotDataWindow(A,d)) tkadd(winFHL$env$menuResults, "command", label = "Result Water Budget", command = function() tkdestroy(winFHL)) tkadd(winFHL$env$menuResults, "command", label = "Result Fit", command = function() tkdestroy(winFHL)) tkadd(winFHL$env$menu, "cascade", label = "Results", menu = winFHL$env$menuResults) winFHL$env$menuHelp <- tk2menu(winFHL$env$menu, tearoff = FALSE) tkadd(winFHL$env$menuHelp, "command", label = "Help", command = function() tkdestroy(winFHL)) tkadd(winFHL$env$menuHelp, "command", label = "R", command = function() tkdestroy(winFHL)) tkadd(winFHL$env$menuHelp, "command", label = "About", command = function() tkdestroy(winFHL)) tkadd(winFHL$env$menu, "cascade", label = "Help", menu = winFHL$env$menuHelp) # Darstellung der Modellstruktur (Bild) # Festlegen der Parameter des Modelles # Menu mit editierbarer Tabelle # Lesen aus und schreiben in eine Datei # Berechnung des Modelles: # Berechnung des freien Speichers oder Defizits # fertig: s.o. # Berechnung der gesaettigten Flaeche # fertig: s.o. # Berechnung des Abflusses # Berechnung der Infiltration # Berechnung der potentiellen Verdunstung # Berechnung der aktuellen Verdunstung # Berechnung der Tiefensickerung # Berechnung der speicherinhaltes des tieferen Speichers # Berechnung der Perkolation # Berechnung des Abflusses aus dem tieferen Speicher # Routing des Abflusses mit der Muskinghum-Cunge Methode # Next: Neuer Zeitschritt # Schreiben der Ergebnis-Datei