Metainformationen zur Seite
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
hydro:speichermodell [2022/05/13 16:13] – ckuells | hydro:speichermodell [2024/04/10 10:02] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | === Speichermodell === | + | ==== Speichermodell |
+ | |||
+ | === Theorie | ||
Das Speichermodell kann zur einfachen Modellierung von Einzugsgebieten verwendet werden. Es beruht auf den Formeln | 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 = (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}})}$$ | + | $$ Q_t = Q_{(t-t_e)} \cdot e^{ (-\frac{(t-t_e)}{K})}$$ |
- | für den Rückgang: | + | für den Rückgang. Dabei sind N der Niederschlag in mm, C der Abflusskoeffizient (0< |
- | <code rsplus |Speichermodell.r> | + | === Funktion |
- | K <- 10.0 # Speicherkonstante | + | |
- | C <- 0.1 # Abflusskoeffizient | + | |
- | N <- 35 # Niederschlag | + | |
- | ta <- 1 # erster Zeitschritt ta | + | Das Speichermodell wurde als Funktion in R programmiert. Die Funktion benötigt die Variablen N, C, K, $t_a$=(Anfangszeit, |
- | tm <- 50 # Letzer Zeitschritt tmax | + | |
- | dt <- 1 # Zeitschritt | + | |
- | tv <- seq(ta,tm,by=dt) # Zeitvariable | + | |
- | Lt <- length(tv) | + | |
- | te <- 25 | + | |
- | Qt <- replicate(Lt,0) | + | |
- | t<-ta | + | Wenn die Eingabe fehlerhaft ist, wird eine Variable // |
- | while (t<=tm) { | + | |
- | if(t<=te){ | + | <code rsplus |Speichermodell.r> |
- | | + | ELS <- function(N=50, |
- | } else { | + | |
- | Q[t] <- (N*C)*exp(-(t-te)/ | + | # Prüfe |
+ | if (N< | ||
+ | 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< | ||
+ | error <- "ta ist < 0.0" | ||
+ | errorflag <- TRUE | ||
+ | } | ||
+ | if (ta> | ||
+ | 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){ | ||
+ | | ||
+ | errorflag <- TRUE | ||
+ | } | ||
+ | |||
+ | # Erzeuge die Zeitreihe | ||
+ | tv <- seq(ta, | ||
+ | # Berechne die Länge in Tagen | ||
+ | Lt <- length(tv) | ||
+ | # Initialisiere die Abflussserie mit 0, Einheit mm | ||
+ | Qt <- replicate(Lt, | ||
+ | # Erzeuge Variable für letzten Wert der Schleife | ||
+ | QL <- 0.0 # last discharge | ||
+ | |||
+ | # i ist die Integer Laufvariable, | ||
+ | i <- 1 | ||
+ | t <- ta | ||
+ | while (i<=Lt) { | ||
+ | if(t< | ||
+ | # Anstieg (t < te) | ||
+ | Qt[i] <- (N*C)*(1-exp(-t/ | ||
+ | | ||
+ | | ||
+ | # Rückgang | ||
+ | Qt[i] <- QL*exp(-(t-te)/ | ||
+ | } | ||
+ | # 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=" | ||
} | } | ||
- | # Gehe einen Zeitschritt weiter | ||
- | t <- t + dt | ||
} | } | ||
- | # plot(Q) | ||
- | plot(tv,Q, col=2, xlab=" | ||
</ | </ |