Implementierung des Konzepts

Modell-Parameter

snow_melt_rate:[3..9.99] Rate of snow melt in \(\frac{mm}{day °C}\)
infiltration_w0:
 [0.501..0.99] \(W_0\) saturation index
soil_capacity:[10.1..500] Capacity of rooted zone in \(mm\)
ETV1:[0.1..0.899] Fraction of soil capacity where ET starts to be limited
percolation_Q0:[1.77..1000] Percolation rate in \(mm/day\) when the soil stores contains:math:V_0 cdot C [mm] water
percolation_V0:[0.0101..0.999] Normal soil water content in terms of soil water capacity
percolation_Vres:
 [0.000185..0.997] Residual water content of the soil water
percolation_beta:
 [0.506..4.98] Curve shape parameter of the power law function
gw_Q0:[0.829..998] Percolation rate in \(mm/day\) when the soil stores contains:math:V_0 cdot C [mm] water
gw_V0:[0.0107..1] Normal soil water content in terms of soil water capacity
gw_beta:[0.508..6.99] Curve shape parameter of the power law function
LAI:[0.501..6] Effective leaf area index
canopy_closure:[0.000137..0.999] Fraction of rainfall that stays in the canopy

Die Modell-Klasse

class models.jana.Modell[Quellcode]

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

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

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

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

Creates the connections and parameterizes the storages of the model

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

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

set_soil_capacity(p: models.jana.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, 1 project nodes)

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