Implementierung des Konzepts

Modell-Parameter

snow_melt_rate:[3.01..10] Schneeschmelzrate in \(\frac{mm}{Tag ^\circ C}\)
infiltration_w0:
 [0.5..0.99] \(W_0\) Sättigungsindex
soilFC_capacity:
 [27.5..9990] Feldkapazität in \(mm\)
soilFW_capacity:
 [10.4..9980] Kapazität des Freien Bodenwassers in \(mm\)
ETV1:[0.101..0.9] Anteil der Feldkapazität bei der ET beginnt begrenzt zu werden
percolation_Vres:
 [0.00112..0.999] Restwassergehalt der Feldkapazität
interflow_Q1:[0.67..1000] Zwischenabflussrate in \(mm/Tag\) wenn das Freie Bodenwasser:math:V_1 cdot C [mm] Wasser enthält
interflow_V1:[0.0122..0.999] Normaler Wassergehalt wenn die Feldkapazität gesättigt ist
interflow_beta1:
 [0.502..5] Kurvenformparameter der Potenzgesetz-Funktion
groundwater_residence_time:
 [1.86..998] Verweilzeit des Grundwassers in Tagen
tofw_residence_time:
 [1.01..5] Verweilzeit der Feldkapazität in Tagen
maximum_flux_fwtogw:
 [1.63..996] Begrenzt die Verbindung des Freien Wassers zum Grundwasser
LAI:[0.504..5.98] Effektiver Blattflächenindex
canopy_closure:[0.00135..0.998] Anteil des Regens der auf der Vegetation verbleibt

Die Modell-Klasse

class models.olivier.Modell[Quellcode]

Ein 5-Speicher lumped Modell fuer das Einzugsgebiet der Fulda, inkl. Direkt-, Zwischen- und Basisabfluss und der Evapotranspiration. Speicher: Blattoberfläche, Schnee, Feldkapazität, Freies Bodenwasser und Grundwasser

create_canopy_connections(p: models.olivier.Parameters)[Quellcode]

Verbindet die Vegetationsoberfläche mit dem Niederschlag und dem Oberflächenwasser. Dabei wird der Regen zwischen Oberflächenwasser und Vegetationsoberfläche aufgeteilt. Das Wasser auf der Vegetationsoberfläche wird entweder verdunstet oder gelangt über Interzeption zum Oberflächenwasser. Der Anteil des Niederschlages der auf der Vegetationsoberfläche verbleibt wird über die Parameter LAI (Größe des Speichers) und canopy_closure (Anteil der den Speicher erreicht) definiert.

create_connections(p: models.olivier.Parameters = None)[Quellcode]

Erzeugt die Verbindungen des Models und parametrisiert die Speicher.

Erzeugte Verbindungen: - Schneespeicher wie in create_snow_connections beschrieben - Oberflächenabfluss wie in create_surface_runoff beschrieben - Vegetationsoberfläche wie in create_canopy_connections beschrieben - Lineare Verbindung von der Feldkapazität zum Freien Bodenwasser, wenn

das Speichervolumen der Feldkapazität erreicht ist. Das Speichervolumen wird über die Parameter percolation_Vres und der Kapazität der Feldkapazität definiert. Die Verweilzeit im Speicher wird über den Parameter tofw_residence_time definiert.
  • Konstante Verbindung vom Freien Bodenwasser zum Grundwasser, die über den Parameter maximum_flux_fwtogw begrenzt wird. Die Verbindung besteht sobald Wasser im Speicher vorhanden ist.
  • Exponentielle Verbindung vom Freien Bodenwasser zum Auslass. Die Funktion wird mit den Parametern interflow_Q1, interflow_V1, der Kapazität des Freien Bodenwassers und interflow_beta1 definiert.
  • Lineare Verbindung vom Grundwasser zum Auslass, der dauerhaft fließt. Die Verweilzeit im Speicher wird über den Parameter groundwater_residence_time definiert.

Parametrisierungen: - Kapazität der Feldkapazität wie in set_soilFC_capacity beschrieben - Kapazität des Freien Bodenwassers wie in set_soilFC_capacity beschrieben - Der Evapotranspiration über die Hargreaves-Gleichung aus der Feldkapazität

und der Vegetationsoberfläche
create_snow_connections(p: models.olivier.Parameters)[Quellcode]

Teilt Niederschläge in Schnee und Regen bassierend auf der Temperatur. Als Schneeschmelzrate wird der Parameter snow_melt_rate verwendet und nicht mit dem Temperatur-Index-Schmelz-Modell berechnet. :param p: p.snow_melt_rate

create_surface_runoff(p: models.olivier.Parameters)[Quellcode]

Modeliert die Infiltration des Oberflächenwassers zur Feldkapazität mit einem Sättigungs / Infiltrationsüberschuss Modell. Dafür wird der Sättigungsindex-Parameter infiltration_w0 verwendet. Der Sättigungsüberschuss wird ohne Zeitverzögerung direkt zum Auslass geleitet.

evaluation()[Quellcode]

Gibt die Evalierungsdaten (Abflusspegel) zurück

iterate(p: models.olivier.Parameters)[Quellcode]

Ruft create_connections und inital_values auf um das Model zu kalibrieren, indem das Parameterset p genutzt wird. Das Parameterset wird über eine vielzahl von Wiederholungen zufällig geändert um das beste Parameterset mit der höchsten Güte für die Zeitreihe zu erzeugen.

mm_to_m3(vol)[Quellcode]

Berechnet das Volumen in m³ des normalisierten Volumens in mm :param vol: Volumen in mm :return: Volumen in m³

objectivefunction(simulation, evaluation)[Quellcode]

Berechnet die Gütemaße des Simulation

Berechnet
  • \(NSE_c\): die Nash-Sutcliffe Effizienz
    für die Kalibrieungszeitreihe (self.begin:self.end)
  • \(PBIAS_c\): der Prozentuale Bias zwischen Modell und Beobachtung
    für die Kalibrieungszeitreihe (self.begin:self.end)
  • \(NSE_v\): die Nash-Sutcliffe Effizienz
    für die Validierungszeitreihe (self.end:self.data.end)
  • \(PBIAS_v\): der Prozentuale Bias zwischen Modell und Beobachtung
    für die Validierungszeitreihe (self.end:self.data.end)

und gibt diese Objekte als Liste in dieser Reihenfolge zurück

output(t)[Quellcode]

Erzeugt die Rückgabe des Modells :param t: Zeitschritte des Modells :return: Ein Wert der die Rückgabe des Modells reprästentiert, hier Abflusspegel

run(p: models.olivier.Parameters)[Quellcode]

Führt das Modell über die gesamte Zeitreihe aus :return: cmf.timeseries inklusive des Modelloutputs

set_soilFC_capacity(p: models.olivier.Parameters)[Quellcode]

Bestimmt die Kapazität (Volumen) des Feldkapazitätspeichers in Abhängigkeit von des Parameters soilFC_capacity und der über die im soilFC Layer definierte Dicke Bodens.

set_soilFW_capacity(p: models.olivier.Parameters)[Quellcode]

Bestimmt die Kapazität (Volumen) des Freien Bodenwassers in Abhängigkeit von des Parameters soilFW_capacity und der über die im soilFC Layer definierte Dicke des Bodens.

simulation(vector)[Quellcode]

Führt das Modell aus (wie run) Der output kann von spotpy verwendet werden :param vector: :return:

Das CMF-Projekt

cmf.project(1 cells, 1 meteo stations, 1 project nodes)

Project nodes:
  • {outlet}:
    • waterbalance connection({Surface water of cell #0}<->{outlet})
    • power law({free water}<->{outlet})
    • LinearStorageConnection({Ground Water}<->{outlet})
Cells:
  • cell #0(0,0,0):
    • {Snow of cell #0}:
      • Simple T-Index snow melt({Snow of cell #0}<->{Surface water of cell #0})
      • Snowfall({Rainfall from Grebenau avg}<->{Snow of cell #0})
    • {Canopy of cell #0}:
      • Penman Monteith (canopy) get_evaporation({Canopy of cell #0}<->{Evaporation of cell #0})
      • Rutter interception({Canopy of cell #0}<->{Surface water of cell #0})
      • Intercepted rain({Rainfall from Grebenau avg}<->{Canopy of cell #0})
    • {field capacity}:
      • simple infiltration({Surface water of cell #0}<->{field capacity})
      • LinearStorageConnection({field capacity}<->{free water})
      • HargreaveET({field capacity}<->{Transpiration of cell #0})
    • {free water}:
      • LinearStorageConnection({field capacity}<->{free water})
      • power law({free water}<->{outlet})
      • Technical flux({free water}<->{Ground Water})
    • {Ground Water}:
      • Technical flux({free water}<->{Ground Water})
      • LinearStorageConnection({Ground Water}<->{outlet})
Meteo Stations:
  • cmf.MeteoStation(Grebenau avg,lat=51,lon=8,z= 0.0):
    Tmin: 3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max -22.1 / 4.2157 / 18.6 Tmax: 3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max -12.9 / 12.708 / 33.5 Tdew: ~ T: 3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max -16.7 / 8.462 / 25.05 rHmean: ~ rHmax: ~ rHmin: ~ Sunshine: ~ Windspeed: ~ Rs: ~
Rain Stations:
  • Grebenau avg (838.23mm/year)
    3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max 0 / 2.2965 / 56.6