Implementierung des Konzepts

Modell-Parameter

snow_melt_rate:[3.01..10] Rate of snow melt in \(\frac{mm}{day °C}\)
infiltration_w0:
 [0.5..0.99] \(W_0\) saturation index
soilBERG_capacity:
 [10.2..100] Capacity of rooted zone BERG in \(mm\)
factorTAL_capacity:
 [3..10] Factor to increase Capacity of rooted zone TAL compared to rooted zone BERG in \(mm\)
ETV1:[0.1..0.898] Fraction of soil capacity where ET starts to be limited
percolation_Q0:[2.33..999] Percolation rate in \(mm/day\) when the soil stores contains:math:V_0 cdot CT or V_0 cdot CB [mm] water
percolation_V0:[0.0114..0.999] Normal soil water content in terms of soil water capacity in m³
percolation_Vres:
 [0.000853..1] Residual water content of the soil water in m³
percolation_beta_BERG:
 [2.01..9.99] Curve shape parameter of the power law function for soil water percolation BERG
percolation_beta_TAL:
 [0.0234..8] Curve shape parameter of the power law function for soil water percolation TAL
gw_residence_time_BERG:
 [6.38..1000] Residence time of the groundwater BERG in days
gw_residence_time_TAL:
 [1.13..500] Residence time of the groundwater TAL in days
LAI:[0.504..6] Effective leaf area index
canopy_closure:[0.101..0.999] Fraction of rainfall that stays in the canopy
grundwater_to_spring_q0:
 [0.000859..1] Q0 for Power Law connection between Groundwater and springs resp. outlet in mm/day??
deep_groundwater_loss:
 [0.000859..0.999] Loss to deep groundwater in mm/day

Die Modell-Klasse

class models.laurag.Modell[Quellcode]

A simple semi-distributed model with 4 storages (Canopy, Snow, Soil, Groundwater) plus an outlet in each of the two cells. ??

create_canopy_connections_BERG(p: models.laurag.Parameters)[Quellcode]

Connects the canopy with the rainfall and the surface depending on vegetation parameters

create_canopy_connections_TAL(p: models.laurag.Parameters)[Quellcode]

Connects the canopy with the rainfall and the surface depending on vegetation parameters

create_complete_Infiltration_BERG(p: models.laurag.Parameters)[Quellcode]

Models infiltration of cellBERG by routing all surfacewater directly without timelag to the soil layer. The model assumption that the surface area is almost completely covered with forest results in no surface runoff in cellBERG and therefore complete infiltration of the surfacewater.

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

Creates the connections and parameterizes the storages of the model

create_surface_runoff_TAL(p: models.laurag.Parameters)[Quellcode]

Models infiltration of cell TAL with a mixed saturation / infiltration excess model and routes all runoff directly without timelag to the outlet.

evaluation()[Quellcode]

Returns the evaluation data

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

Calls create_connections and inital_values to shape the model using the parameter set p and returns an iterator that advances the model over the whole data period

m3_to_mm_total(vol)[Quellcode]

Calculates normalized volume in mm from the outlet volume in m³ :param vol: The volume in m³ :return: The volume in mm³

mm_to_m3(cell: cmf.cmf_core.Cell, vol)[Quellcode]

Calculates volume in m³ from the normalized volume in mm :param vol: The volume in mm :return: The volume in m³

objectivefunction(simulation, evaluation)[Quellcode]

Calculates the goodness of the simulation

Calculates
  • \(NSE_c\): the Nash-Sutcliffe Efficiancy
    for the calibration period (self.begin:self.end)
  • \(PBIAS_c\): the procentual bias between model and observation
    for the calibration period (self.begin:self.end)
  • \(NSE_v\): the Nash-Sutcliffe Efficiancy
    for the validation period (self.end:self.data.end)
  • \(PBIAS_v\): the procentual bias between model and observation
    for the validation period (self.end:self.data.end)

and returns these objectives as a list in that order

output(t)[Quellcode]

Defines what the ouput of the model is :param t: Time step of the model :return: A value representing the model output

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

Integrates the model over the whole data period :return: cmf.timeseries including the model output

set_soilBERG_capacity(p: models.laurag.Parameters)[Quellcode]

Sets the upper soil capacity BERG

set_soilTAL_capacity(p: models.laurag.Parameters)[Quellcode]

Sets the upper soil capacity in relation to soilBERG_capacity by p.factorTAL_capacity

simulation(vector)[Quellcode]

This function is only important for spotpy, otherwise it is equivalent with „run“ :param vector: :return:

Das CMF-Projekt

cmf.project(2 cells, 2 meteo stations, 3 project nodes)

Project nodes:
  • {SpringsBERG}:
    • LinearStorageConnection({SoilBERG}<->{SpringsBERG})
    • power law({GWBERG}<->{SpringsBERG})
    • waterbalance connection({SpringsBERG}<->{Surface water of cell #1})
  • {outlet}:
    • waterbalance connection({Surface water of cell #1}<->{outlet})
    • LinearStorageConnection({SoilTAL}<->{outlet})
    • power law({GWTAL}<->{outlet})
  • {outletGW}:
    • Technical flux({GWTAL}<->{outletGW})
Cells:
  • cell #0(0,0,2):
    • {Snow #0}:
      • Simple T-Index snow melt({Snow #0}<->{Surface water of cell #0})
      • Snowfall({Rainfall from Grebenau BERG avg}<->{Snow #0})
    • {Canopy #0}:
      • Penman Monteith (canopy) get_evaporation({Canopy #0}<->{Evaporation of cell #0})
      • Rutter interception({Canopy #0}<->{Surface water of cell #0})
      • Intercepted rain({Rainfall from Grebenau BERG avg}<->{Canopy #0})
    • {SoilBERG}:
      • waterbalance connection({Surface water of cell #0}<->{SoilBERG})
      • LinearStorageConnection({SoilBERG}<->{SpringsBERG})
      • power law({SoilBERG}<->{GWBERG})
      • HargreaveET({SoilBERG}<->{Transpiration of cell #0})
    • {GWBERG}:
      • power law({SoilBERG}<->{GWBERG})
      • power law({GWBERG}<->{SpringsBERG})
      • LinearStorageConnection({GWBERG}<->{GWTAL})
  • cell #1(6,0,0):
    • {Snow #1}:
      • Simple T-Index snow melt({Snow #1}<->{Surface water of cell #1})
      • Snowfall({Rainfall from Grebenau TAL avg}<->{Snow #1})
    • {Canopy #1}:
      • Penman Monteith (canopy) get_evaporation({Canopy #1}<->{Evaporation of cell #1})
      • Rutter interception({Canopy #1}<->{Surface water of cell #1})
      • Intercepted rain({Rainfall from Grebenau TAL avg}<->{Canopy #1})
    • {SoilTAL}:
      • simple infiltration({Surface water of cell #1}<->{SoilTAL})
      • LinearStorageConnection({SoilTAL}<->{outlet})
      • power law({SoilTAL}<->{GWTAL})
      • HargreaveET({SoilTAL}<->{Transpiration of cell #1})
    • {GWTAL}:
      • power law({SoilTAL}<->{GWTAL})
      • LinearStorageConnection({GWBERG}<->{GWTAL})
      • Technical flux({GWTAL}<->{outletGW})
      • power law({GWTAL}<->{outlet})
Meteo Stations:
  • cmf.MeteoStation(Grebenau BERG avg,lat=51,lon=8,z= 2.0):
    Tmin: 3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max -25.1 / 1.2157 / 15.6 Tmax: 3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max -15.9 / 9.7082 / 30.5 Tdew: ~ T: 3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max -19.7 / 5.462 / 22.05 rHmean: ~ rHmax: ~ rHmin: ~ Sunshine: ~ Windspeed: ~ Rs: ~
  • cmf.MeteoStation(Grebenau TAL 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 BERG avg (1086.43mm/year)
    3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max 0.68 / 2.9765 / 57.28
  • Grebenau TAL avg (955.03mm/year)
    3653 values from 1979-01-01 to 1989-01-01 step 1d:00:00:00h , min/mean/max 0.32 / 2.6165 / 56.92