Benutzer-Werkzeuge

Webseiten-Werkzeuge


hydro:speichermodell

Speichermodell

Theorie

Das Speichermodell kann zur einfachen Modellierung von Einzugsgebieten verwendet werden. Es beruht auf den Formeln

$$ Q_t = (N \cdot C ) \cdot (1-e^{(-\frac{t}{K})})$$ für den Anstieg und

$$ Q_t = Q_{(t-t_e)} \cdot e^{ (-\frac{(t-t_e)}{K})}$$

für den Rückgang. Dabei sind N der Niederschlag in mm, C der Abflusskoeffizient (0⇐C⇐1), t die Zeit, K der Rückgangsfaktor (entspricht der Dauer, in der der Abfluss um eine logarithmische Einheit zurückgeht). Die Variable $t_e$ steht für die Zeit, bei der der Spitzenabfluss erreicht wird und bei der der Niederschlag aufhört (Ende des Niederschlages).

Funktion in R

Das Speichermodell wurde als Funktion in R programmiert. Die Funktion benötigt die Variablen N, C, K, $t_a$=(Anfangszeit, Standard ist 0.0), $t_e$=Ende des Niederschlages (muss größer als $t_a$ und kleiner als $t_m$ sein, $t_m$=Ende der Zeitreihe (muss größer als $t_e$ sein). Sie kann als ELS() aufgerufen werden. Dabei sind alle Werte mit Standardwerten vor belegt: N=50, C=0.1, K=7, $t_a$=0.0, $t_e$=7 (Tage), $t_m$= 30 (Tage). Wenn die vorbelegten Werte geändert werden sollen muss die Funktion entsprechend aufgerufen werden, z. Bsp. ELS(N=30,C=0.2,K=10), alle Variablen, die nicht aufgerufen werden, bleiben im Standardzustand.

Wenn die Eingabe fehlerhaft ist, wird eine Variable errorflag gesetzt und eine Fehlermeldung ausgegeben, die Erstellung der Graphik mit plot() erfolgt nicht.

|Speichermodell.r
ELS <- function(N=50,C=0.1,K=7,ta=0,te=10,tm=30,dt=1){
  errorflag <- FALSE
  # Prüfe
  if (N<0.0){
    error <- "N ist < 0.0"
    errorflag <- TRUE
  }
  if(C < 0.0 | C > 1.0){
    error <- "C nicht zwischen 0.0 und 1.0"
    errorflag <- TRUE
  } 
  if(K <= 0.0){
    error <- "K nicht >= 0"
    errorflag <- TRUE
  } 
  if (ta<0.0){
    error <- "ta ist < 0.0"
    errorflag <- TRUE
  }
  if (ta>=te){
    error <- "ta ist > te"
    errorflag <- TRUE
  }
  if (ta>=tm){
    error <- "ta ist > tm"
    errorflag <- TRUE
  }
  if (dt<=0.0){
    error <- "dt ist <= 0.0"
    errorflag <- TRUE
  }
  if (dt>te){
    error <- "dt ist > te"
    errorflag <- TRUE
  }
 
  # Erzeuge die Zeitreihe
  tv <- seq(ta,tm,by=dt) # Zeitvariable in Tagen 
  # Berechne die Länge in Tagen
  Lt <- length(tv)
  # Initialisiere die Abflussserie mit 0, Einheit mm
  Qt <- replicate(Lt,0)
  # Erzeuge Variable für letzten Wert der Schleife 
  QL <- 0.0 # last discharge
 
  # i ist die Integer Laufvariable, t ist die Zeit
  i  <- 1
  t  <- ta
  while (i<=Lt) {
    if(t<=te){
      # Anstieg (t < te)
      Qt[i] <- (N*C)*(1-exp(-t/K))
      QL   <- Qt[i]
      } else {
      # Rückgang
      Qt[i] <- QL*exp(-(t-te)/K)
    }
    # Gehe einen Zeitschritt dt weiter für t und setze Index i um +1 hoch
    t <- t + dt
    i <- i + 1
  }
 
  # plot
  if (errorflag){
    print(error)
  } else{
    plot(tv,Qt, col=2, xlab="Zeit (Tage)", ylab="Q (l/s)", type = "o")  
  }
}
/usr/www/users/uhydro/doku/data/pages/hydro/speichermodell.txt · Zuletzt geändert: 2024/04/10 10:02 von 127.0.0.1