Implementierung des Konzepts

Modell-Parameter

snow_melt_rate:[2..9.99] Rate of snow melt in \(\frac{mm}{day °C}\)
snow_temp:[-0.997..4.99] Ttres
soil_capacity:[13.8..998] Capacity of rooted zone in \(mm\)
ETV1:[0.1..0.899] Fraction of soil capacity where ET starts to be limited
percolation_Q0:[0.288..1000] Percolation rate in \(mm/day\) when the soil stores contains:math:V_0 cdot C [mm] water
percolation_V0:[0.0104..1] Normal soil water content in terms of soil water capacity
percolation_Vres:
 [0.000758..0.998] Residual water content of the soil water
percolation_beta:
 [0.502..4.98] Curve shape parameter of the power law function for percolation
groundwater_residence_time:
 [3.81..999] Residence time of the groundwater in days
LAI:[0.502..6] Effective leaf area index
canopy_closure:[0.3..1] Fraction of rainfall that stays in the canopy
interflow_Q0:[0.421..499] Interflow rate in \(mm/day\) when the soil stores contains:math:V_0 cdot C [mm] water
interflow_beta:[0.502..4.99] Curve shape parameter of the power law function
river_residence_time:
 [1.19..99.9] Residence time of the river in days
infiltration_w0:
 [0.301..0.988] \(W_0\) saturation index
infiltration_cap:
 [1.06..99.7] Infiltration Capacity
interflow_Vres:[0.000614..0.999] Residual water content of the soil water
interflow_V0:[0.0101..1] Normal soil water content in terms of soil water capacity

Die Modell-Klasse

class models.niklas.Modell[Quellcode]

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

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

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

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

Creates the connections and parameterizes the storages of the model

create_snow_connections(p: models.niklas.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.niklas.Parameters)[Quellcode]

Models infiltration with a mixed saturation / infiltration excess model and routes all runoff directly without timelag to the river, where it resides for a time before flowing into the outlet with a lineal relation.

evaluation()[Quellcode]

Returns the evaluation data

iterate(p: models.niklas.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)[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.niklas.Parameters)[Quellcode]

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

set_soil_capacity(p: models.niklas.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(1 cells, 1 meteo stations, 2 project nodes)

Project nodes:
  • {River}:
    • waterbalance connection({Surface water of cell #0}<->{River})
    • LinearStorageConnection({River}<->{outlet})
  • {outlet}:
    • power law({Soil}<->{outlet})
    • LinearStorageConnection({River}<->{outlet})
    • LinearStorageConnection({GW}<->{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})
    • {Soil}:
      • simple infiltration({Surface water of cell #0}<->{Soil})
      • power law({Soil}<->{outlet})
      • power law({Soil}<->{GW})
      • HargreaveET({Soil}<->{Transpiration of cell #0})
    • {GW}:
      • power law({Soil}<->{GW})
      • LinearStorageConnection({GW}<->{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