Benutzer-Werkzeuge

Webseiten-Werkzeuge


hydro:inghy:exchange

Ingenieurhydrologie Modellierung

|Blaney-Criddle.r
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

|Lin-Regr.r
#' ---
#' 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 Zhao et al. 1972 beschrieben. Die Theorie habe ich für Sie in einem Text zusammengefasst, dazu gibt es eine 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
hydro/inghy/exchange.txt · Zuletzt geändert: 2018/08/12 23:07 von ckuells