Implementierung des Konzepts

Modell-Parameter

snow_melt_rate:[3..10] Rate of snow melt in \(\frac{mm}{day °C}\)
infiltration_w0:
 [0.5..0.989] \(W_0\) saturation index
infiltration_capacity:
 [1.1..56.9] infiltration capacity of other_soil in mm/day
soil_capacity:[23.3..9980] Capacity of rooted zone in \(mm\)
ETV1:[0.1..0.9] Fraction of soil capacity where ET starts to be limited
percolation_Q0:[0.674..1000] Percolation rate in \(mm/day\) when the soil stores contains:math:V_0 cdot C [mm] water
percolation_V0:[0.0106..0.999] Normal soil water content in terms of soil water capacity
percolation_Vres:
 [0.00122..1] Residual water content of the soil water
percolation_beta:
 [0.501..5] Curve shape parameter of the power law function
LAI:[0.504..5.99] Effective leaf area index
canopy_closure:[3.97e-05..1] Fraction of rainfall that stays in the canopy
gw_river_Q0:[0.307..300] groundwaterflow to river rate in \(mm/day\) when the groundwater stores contains:math:V_0 cdot C [mm] water
gw_river_V0:[0.751..999] Normal groundwater content
gw_river_beta:[0.503..5] Curve shape parameter of the power law function
river_residence_time:
 [1..20] Residence time of the river in days

Die Modell-Klasse

class models.max.Modell[Quellcode]

A simple lumped 2 storage model with ET, snow but no canopy interception

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

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

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

Creates the connections and parameterizes the storages of the model

create_snow_connections(p: models.max.Parameters)[Quellcode]

Divides snowfall and rainfall based on temperature and calculates the snow melt rate using a simple temperature index melting model :param p: The model parameters, here only p.snow_melt_rate is used

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

Models infiltration 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.max.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

mm_to_m3(vol, c)[Quellcode]

Calculates volume in m³ from the normalized volume in mm :param vol: The volume in mm :param c: Cell :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.max.Parameters)[Quellcode]

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

set_soil_capacity(p: models.max.Parameters)[Quellcode]

Sets the upper soil 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(3 cells, 1 meteo stations, 3 project nodes)

Project nodes:
  • {GW}:
    • power law({Forest}<->{GW})
    • power law({Other}<->{GW})
    • power law({GW}<->{River})
  • {outlet}:
    • LinearStorageConnection({River}<->{outlet})
  • {River}:
    • waterbalance connection({Surface water of cell #1}<->{River})
    • waterbalance connection({Surface water of cell #2}<->{River})
    • power law({GW}<->{River})
    • LinearStorageConnection({River}<->{outlet})
Cells:
  • cell #0(0,0,0):
    • {Snow cell #0}:
      • Simple T-Index snow melt({Snow cell #0}<->{Surface water of cell #0})
      • Snowfall({Rainfall from Grebenau avg}<->{Snow cell #0})
    • {Canopy Forest}:
      • Penman Monteith (canopy) get_evaporation({Canopy Forest}<->{Evaporation of cell #0})
      • Rutter interception({Canopy Forest}<->{Surface water of cell #0})
      • Intercepted rain({Rainfall from Grebenau avg}<->{Canopy Forest})
    • {Forest}:
      • waterbalance connection({Surface water of cell #0}<->{Forest})
      • power law({Forest}<->{GW})
      • HargreaveET({Forest}<->{Transpiration of cell #0})
  • cell #1(8,0,0):
    • {Snow cell #1}:
      • Simple T-Index snow melt({Snow cell #1}<->{Surface water of cell #1})
      • Snowfall({Rainfall from Grebenau avg}<->{Snow cell #1})
  • cell #2(4,0,0):
    • {Snow cell #2}:
      • Simple T-Index snow melt({Snow cell #2}<->{Surface water of cell #2})
      • Snowfall({Rainfall from Grebenau avg}<->{Snow cell #2})
    • {Other}:
      • simple infiltration({Surface water of cell #2}<->{Other})
      • power law({Other}<->{GW})
      • HargreaveET({Other}<->{Transpiration of cell #2})
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