====== 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