Metainformationen zur Seite
  •  

Dies ist eine alte Version des Dokuments!


Speichermodell

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). 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 vorbelegt: 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 Eingage fehlerhaft ist, wird eine Variable errorflag gesetzt und eine Fehlermeldung ausgegeben, der Druck 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")  
  }
}