Benutzer-Werkzeuge

Webseiten-Werkzeuge


hydro:inghy:exchange

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Letzte ÜberarbeitungBeide Seiten, nächste Überarbeitung
hydro:inghy:exchange [2017/06/12 16:29] – [Erstes Modell] ckuellshydro:inghy:exchange [2018/08/12 23:07] – angelegt ckuells
Zeile 1: Zeile 1:
 +
 ====== Ingenieurhydrologie Modellierung ====== ====== Ingenieurhydrologie Modellierung ======
 <code rsplus |Blaney-Criddle.r> <code rsplus |Blaney-Criddle.r>
Zeile 9: Zeile 10:
  
 ===== Lineare Regression rechnen ===== ===== Lineare Regression rechnen =====
-<code rsplus |Blaney-Criddle.r>+<code rsplus |Lin-Regr.r>
  
 #' --- #' ---
Zeile 42: Zeile 43:
  
 <code> <code>
-if (bed1 < eps) +if (bed1 < eps) { 
-      return(a1 + a2)+      a3 <- a1 + a2
     else {     else {
-      return()+      a3 <- 0
     }     }
 </code> </code>
 +
 +<code>
 +
 +for (i in 1:length(N)) {
 +      if (N[i] <= Va) {
 +         Nc[i] <- 0.0
 +      } else {
 +         Nc[i] <- N[i]-Va
 +             }
 +     }
 +
 +</code>
 +
  
 ==== Erstes Modell ==== ==== Erstes Modell ====
  
 <code> <code>
 +
 +#' ---
 +#' title: Hydrologisches Modell
 +#' author: "C. Kuells"
 +#' date: "9. Mai, 2015"
 +#' ---
 +
 setwd("C:\\HydroPro\\R+") setwd("C:\\HydroPro\\R+")
  
-klima <- read.csv(file="fuhlsbuettel.txt", header=TRUE, sep=";"+klima <- read.csv(file="fuhlsbuettel.txt", header=TRUE, sep=";", na.strings="  -999") 
-# Fehlwerte richtig einlesen+# Fehlwerte richtig einlesen: man muss na.strings="  -999" eingeben - mit den zwei Leerzeichen davor!
  
 summary(klima) summary(klima)
 attach(klima) attach(klima)
 N <- NIEDERSCHLAGSHOEHE N <- NIEDERSCHLAGSHOEHE
 +Nc <- N
 Flaeche <- 640 # km2 Flaeche <- 640 # km2
 A <- 0.08 # Abflusskoeffizient A <- 0.08 # Abflusskoeffizient
-Va <- 10 # mm Anfangsverlust+Va <- # mm Anfangsverlust bei 1 bis 3 mm pro Tag
  
-Q <- (N)*A*(Flaeche*1000000)*1/1000*1/86400 # Einheitenumwandlung Flaeche m2 -> km2, Volumen l-> qm, Zeit Tag -> Sekunde+# 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)) plot(Q, ylim = c(0, 10))
 +
 </code> </code>
 +
 +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:
 +
 +<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
 +
 +</code>
 +
/usr/www/users/uhydro/doku/data/pages/hydro/inghy/exchange.txt · Zuletzt geändert: 2024/04/10 10:03 von 127.0.0.1