Benutzer-Werkzeuge

Webseiten-Werkzeuge


hydro:inghy:exchange

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hydro:inghy:exchange [2017/06/12 15:46] – [Datein einlesen] ckuellshydro:inghy:exchange [2024/04/10 10:03] (aktuell) – Externe Bearbeitung 127.0.0.1
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 31: Zeile 32:
  
 <code> <code>
-klima <- read.csv(file="c:/HydroPro/R+/fuhlsbuettel.txt", header=TRUE, sep=";")+wd <- getwd() 
 +setwd("C:\HydroPro\R+"
 +klima <- read.csv(file="c:/HydroPro/R+/fuhlsbuettel.txt", header=TRUE, sep=";", na.string="-999")
 summary(klima) summary(klima)
 attach(klima) attach(klima)
 </code> </code>
 +
 +
 +==== Kontrollstrukturen ====
 +
 +<code>
 +if (bed1 < eps) {
 +      a3 <- a1 + a2
 +    else {
 +      a3 <- 0
 +    }
 +</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 ====
 +
 +<code>
 +
 +#' ---
 +#' 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))
 +
 +</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/attic/hydro/inghy/exchange.1497275211.txt.gz · Zuletzt geändert: 2024/04/10 10:15 (Externe Bearbeitung)