hland

The H-Land model is the core of the HydPy implementation of the the frequently applied HBV96 model. It consists of some routines for the preparation of meteorological input, and some process routines related to interception, snow, soil moisture, upper groundwater, lower groundwater (including lakes), and runoff concentration.

Method Features

class hydpy.models.hland.hland_model.Model[source]

Bases: hydpy.core.modeltools.AdHocModel

The HydPy-H-Land base model.

The following “run methods” are called in the given sequence during each simulation step:
  • Calc_TC_V1 Adjust the measured air temperature to the altitude of the individual zones.

  • Calc_TMean_V1 Calculate the areal mean temperature of the subbasin.

  • Calc_FracRain_V1 Determine the temperature-dependent fraction of (liquid) rainfall and (total) precipitation.

  • Calc_RFC_SFC_V1 Calculate the corrected fractions rainfall/snowfall and total precipitation.

  • Calc_PC_V1 Apply the precipitation correction factors and adjust precipitation to the altitude of the individual zones.

  • Calc_EP_V1 Adjust potential norm evaporation to the actual temperature.

  • Calc_EPC_V1 Apply the evaporation correction factors and adjust evaporation to the altitude of the individual zones.

  • Calc_TF_Ic_V1 Calculate throughfall and update the interception storage accordingly.

  • Calc_EI_Ic_V1 Calculate interception evaporation and update the interception storage accordingly.

  • Calc_SP_WC_V1 Add throughfall to the snow layer.

  • Calc_Melt_SP_WC_V1 Calculate melting of the ice content within the snow layer and update both the snow layers ice and the water content.

  • Calc_Refr_SP_WC_V1 Calculate refreezing of the water content within the snow layer and update both the snow layers ice and the water content.

  • Calc_In_WC_V1 Calculate the actual water release from the snow layer due to the exceedance of the snow layers capacity for (liquid) water.

  • Calc_GlMelt_In_V1 Calculate melting from glaciers which are actually not covered by a snow layer and add it to the water release of the snow module.

  • Calc_R_SM_V1 Calculate effective precipitation and update soil moisture.

  • Calc_CF_SM_V1 Calculate capillary flow and update soil moisture.

  • Calc_EA_SM_V1 Calculate soil evaporation and update soil moisture.

  • Calc_InUZ_V1 Accumulate the total inflow into the upper zone layer.

  • Calc_ContriArea_V1 Determine the relative size of the contributing area of the whole subbasin.

  • Calc_Q0_Perc_UZ_V1 Perform the upper zone layer routine which determines percolation to the lower zone layer and the fast response of the hland model.

  • Calc_LZ_V1 Update the lower zone layer in accordance with percolation from upper groundwater to lower groundwater and/or in accordance with lake precipitation.

  • Calc_EL_LZ_V1 Calculate lake evaporation.

  • Calc_Q1_LZ_V1 Calculate the slow response of the lower zone layer.

  • Calc_InUH_V1 Calculate the unit hydrograph input.

  • Calc_OutUH_QUH_V1 Calculate the unit hydrograph output (convolution).

  • Calc_QT_V1 Calculate the total discharge after possible abstractions.

The following “outlet update methods” are called in the given sequence at the end of each simulation step:
class hydpy.models.hland.hland_model.Calc_TC_V1[source]

Bases: hydpy.core.modeltools.Method

Adjust the measured air temperature to the altitude of the individual zones.

Requires the control parameters:

NmbZones TCAlt ZoneZ ZRelT

Requires the input sequence:

T

Calculates the flux sequence:

TC

Basic equation:

\(TC = T - TCAlt \cdot (ZoneZ-ZRelT)\)

Examples:

Prepare two zones, the first one lying at the reference height and the second one 200 meters above:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(2)
>>> zrelt(2.0)
>>> zonez(2.0, 4.0)

Applying the usual temperature lapse rate of 0.6°C/100m does not affect the temperature of the first zone but reduces the temperature of the second zone by 1.2°C:

>>> tcalt(0.6)
>>> inputs.t = 5.0
>>> model.calc_tc_v1()
>>> fluxes.tc
tc(5.0, 3.8)
class hydpy.models.hland.hland_model.Calc_TMean_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate the areal mean temperature of the subbasin.

Requires the control parameter:

NmbZones

Requires the derived parameter:

RelZoneArea

Requires the flux sequence:

TC

Calculates the flux sequence:

TMean

Examples:

Prepare two zones, the first one being twice as large as the second one:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(2)
>>> derived.relzonearea(2.0/3.0, 1.0/3.0)

With temperature values of 5°C and 8°C of the respective zones, the mean temperature is 6°C:

>>> fluxes.tc = 5.0, 8.0
>>> model.calc_tmean_v1()
>>> fluxes.tmean
tmean(6.0)
class hydpy.models.hland.hland_model.Calc_FracRain_V1[source]

Bases: hydpy.core.modeltools.Method

Determine the temperature-dependent fraction of (liquid) rainfall and (total) precipitation.

Requires the control parameters:

NmbZones TT TTInt

Requires the flux sequence:

TC

Calculates the flux sequence:

FracRain

Basic equation:

\(FracRain = \frac{TC-(TT-\frac{TTInt}{2})}{TTInt}\)

Restriction:

\(0 \leq FracRain \leq 1\)

Examples:

The threshold temperature of seven zones is 0°C and the corresponding temperature interval of mixed precipitation 2°C:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(7)
>>> tt(0.0)
>>> ttint(2.0)

The fraction of rainfall is zero below -1°C, is one above 1°C and increases linearly in between:

>>> fluxes.tc = -10.0, -1.0, -0.5, 0.0, 0.5, 1.0, 10.0
>>> model.calc_fracrain_v1()
>>> fluxes.fracrain
fracrain(0.0, 0.0, 0.25, 0.5, 0.75, 1.0, 1.0)

Note the special case of a zero temperature interval. With a actual temperature being equal to the threshold temperature, the rainfall fraction is one:

>>> ttint(0.0)
>>> model.calc_fracrain_v1()
>>> fluxes.fracrain
fracrain(0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0)
class hydpy.models.hland.hland_model.Calc_RFC_SFC_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate the corrected fractions rainfall/snowfall and total precipitation.

Requires the control parameters:

NmbZones RfCF SfCF

Requires the flux sequence:

FracRain

Calculates the flux sequences:

RfC SfC

Basic equations:

\(RfC = RfCF \cdot FracRain\)

\(SfC = SfCF \cdot (1 - FracRain)\)

Examples:

Assume five zones with different temperatures and hence different fractions of rainfall and total precipitation:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> fluxes.fracrain = 0.0, 0.25, 0.5, 0.75, 1.0

With no rainfall and no snowfall correction (implied by the respective factors being one), the corrected fraction related to rainfall is identical with the original fraction and the corrected fraction related to snowfall behaves opposite:

>>> rfcf(1.0)
>>> sfcf(1.0)
>>> model.calc_rfc_sfc_v1()
>>> fluxes.rfc
rfc(0.0, 0.25, 0.5, 0.75, 1.0)
>>> fluxes.sfc
sfc(1.0, 0.75, 0.5, 0.25, 0.0)

With a negative rainfall correction of 20% and a positive snowfall correction of 20 % the corrected fractions are:

>>> rfcf(0.8)
>>> sfcf(1.2)
>>> model.calc_rfc_sfc_v1()
>>> fluxes.rfc
rfc(0.0, 0.2, 0.4, 0.6, 0.8)
>>> fluxes.sfc
sfc(1.2, 0.9, 0.6, 0.3, 0.0)
class hydpy.models.hland.hland_model.Calc_PC_V1[source]

Bases: hydpy.core.modeltools.Method

Apply the precipitation correction factors and adjust precipitation to the altitude of the individual zones.

Requires the control parameters:

NmbZones PCAlt ZoneZ ZRelP PCorr

Requires the input sequence:

P

Requires the flux sequences:

RfC SfC

Calculates the flux sequence:

PC

Basic equation:

\(PC = P \cdot PCorr \cdot (1+PCAlt \cdot (ZoneZ-ZRelP)) \cdot (RfC + SfC)\)

Examples:

Five zones are at an elevation of 200 m. A precipitation value of 5 mm has been measured at a gauge at an elevation of 300 m:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> zrelp(2.0)
>>> zonez(3.0)
>>> inputs.p = 5.0

The first four zones illustrate the individual precipitation corrections due to the general precipitation correction factor (PCorr, first zone), the altitude correction factor (PCAlt, second zone), the rainfall related correction (RfC, third zone), and the snowfall related correction factor (SfC, fourth zone). The fifth zone illustrates the interaction between all corrections:

>>> pcorr(1.3, 1.0, 1.0, 1.0, 1.3)
>>> pcalt(0.0, 0.1, 0.0, 0.0, 0.1)
>>> fluxes.rfc = 0.5, 0.5, 0.4, 0.5, 0.4
>>> fluxes.sfc = 0.5, 0.5, 0.5, 0.7, 0.7
>>> model.calc_pc_v1()
>>> fluxes.pc
pc(6.5, 5.5, 4.5, 6.0, 7.865)

Usually, one would set zero or positive values for parameter PCAlt. But it is also allowed to set negative values, in order to reflect possible negative relationships between precipitation and altitude. To prevent from calculating negative precipitation when too large negative values are applied, a truncation is performed:

>>> pcalt(-1.0)
>>> model.calc_pc_v1()
>>> fluxes.pc
pc(0.0, 0.0, 0.0, 0.0, 0.0)
class hydpy.models.hland.hland_model.Calc_EP_V1[source]

Bases: hydpy.core.modeltools.Method

Adjust potential norm evaporation to the actual temperature.

Requires the control parameters:

NmbZones ETF

Requires the input sequences:

EPN TN

Requires the flux sequence:

TMean

Calculates the flux sequence:

EP

Basic equation:

\(EP = EPN \cdot (1 + ETF \cdot (TMean - TN))\)

Restriction:

\(0 \leq EP \leq 2 \cdot EPN\)

Examples:

Assume four zones with different values of the temperature related factor for the adjustment of evaporation (the negative value of the first zone is not meaningful, but used for illustration purporses):

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> etf(-0.5, 0.0, 0.1, 0.5)
>>> inputs.tn = 20.0
>>> inputs.epn = 2.0

With mean temperature equal to norm temperature, actual (uncorrected) evaporation is equal to norm evaporation:

>>> fluxes.tmean = 20.0
>>> model.calc_ep_v1()
>>> fluxes.ep
ep(2.0, 2.0, 2.0, 2.0)

With mean temperature 5°C higher than norm temperature, potential evaporation is increased by 1 mm for the third zone, which possesses a very common adjustment factor. For the first zone, potential evaporation is 0 mm (which is the smallest value allowed), and for the fourth zone it is the double value of the norm evaporation (which is the largest value allowed):

>>> fluxes.tmean  = 25.0
>>> model.calc_ep_v1()
>>> fluxes.ep
ep(0.0, 2.0, 3.0, 4.0)
class hydpy.models.hland.hland_model.Calc_EPC_V1[source]

Bases: hydpy.core.modeltools.Method

Apply the evaporation correction factors and adjust evaporation to the altitude of the individual zones.

Requires the control parameters:

NmbZones ECorr ECAlt ZoneZ ZRelE EPF

Requires the flux sequences:

EP PC

Calculates the flux sequence:

EPC

Calculate the areal mean of (uncorrected) potential evaporation for the subbasin, adjust it to the individual zones in accordance with their heights and perform some corrections, among which one depends on the actual precipitation.

Basic equation:

\(EPC = EP \cdot ECorr \cdot (1+ECAlt \cdot (ZoneZ-ZRelE)) \cdot exp(-EPF \cdot PC)\)

Examples:

Four zones are at an elevation of 200 m. A (uncorrected) potential evaporation value of 2 mm and a (corrected) precipitation value of 5 mm have been determined for each zone beforehand:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> nmbzones(4)
>>> zrele(2.0)
>>> zonez(3.0)
>>> fluxes.ep = 2.0
>>> fluxes.pc = 5.0

The first three zones illustrate the individual evaporation corrections due to the general evaporation correction factor (ECorr, first zone), the altitude correction factor (ECAlt, second zone), the precipitation related correction factor (EPF, third zone). The fourth zone illustrates the interaction between all corrections:

>>> ecorr(1.3, 1.0, 1.0, 1.3)
>>> ecalt(0.0, 0.1, 0.0, 0.1)
>>> epf(0.0, 0.0, -numpy.log(0.7)/10.0, -numpy.log(0.7)/10.0)
>>> model.calc_epc_v1()
>>> fluxes.epc
epc(2.6, 1.8, 1.4, 1.638)

To prevent from calculating negative evaporation values when too large values for parameter ECAlt are set, a truncation is performed:

>>> ecalt(2.0)
>>> model.calc_epc_v1()
>>> fluxes.epc
epc(0.0, 0.0, 0.0, 0.0)
class hydpy.models.hland.hland_model.Calc_TF_Ic_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate throughfall and update the interception storage accordingly.

Requires the control parameters:

NmbZones ZoneType IcMax

Requires the flux sequence:

PC

Updates the state sequence:

Ic

Calculates the flux sequence:

TF

Basic equation:

\(TF = \Bigl \lbrace { {PC \ | \ Ic = IcMax} \atop {0 \ | \ Ic < IcMax} }\)

Examples:

Initialize six zones of different types. Assume a generall maximum interception capacity of 2 mm. All zones receive a 0.5 mm input of precipitation:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(6)
>>> zonetype(GLACIER, ILAKE, FIELD, FOREST, FIELD, FIELD)
>>> icmax(2.0)
>>> fluxes.pc = 0.5
>>> states.ic = 0.0, 0.0, 0.0, 0.0, 1.0, 2.0
>>> model.calc_tf_ic_v1()

For glaciers (first zone) and internal lakes (second zone) the interception routine does not apply. Hence, all precipitation is routed as throughfall. For fields and forests, the interception routine is identical (usually, only larger capacities for forests are assumed, due to their higher leaf area index). Hence, the results of the third and the second zone are equal. The last three zones demonstrate, that all precipitation is stored until the interception capacity is reached; afterwards, all precepitation is routed as throughfall. Initial storage reduces the effective capacity of the respective simulation step:

>>> states.ic
ic(0.0, 0.0, 0.5, 0.5, 1.5, 2.0)
>>> fluxes.tf
tf(0.5, 0.5, 0.0, 0.0, 0.0, 0.5)

A zero precipitation example:

>>> fluxes.pc = 0.0
>>> states.ic = 0.0, 0.0, 0.0, 0.0, 1.0, 2.0
>>> model.calc_tf_ic_v1()
>>> states.ic
ic(0.0, 0.0, 0.0, 0.0, 1.0, 2.0)
>>> fluxes.tf
tf(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)

A high precipitation example:

>>> fluxes.pc = 5.0
>>> states.ic = 0.0, 0.0, 0.0, 0.0, 1.0, 2.0
>>> model.calc_tf_ic_v1()
>>> states.ic
ic(0.0, 0.0, 2.0, 2.0, 2.0, 2.0)
>>> fluxes.tf
tf(5.0, 5.0, 3.0, 3.0, 4.0, 5.0)
class hydpy.models.hland.hland_model.Calc_EI_Ic_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate interception evaporation and update the interception storage accordingly.

Requires the control parameters:

NmbZones ZoneType

Requires the flux sequence:

EPC

Updates the state sequence:

Ic

Calculates the flux sequence:

EI

Basic equation:

\(EI = \Bigl \lbrace { {EPC \ | \ Ic > 0} \atop {0 \ | \ Ic = 0} }\)

Examples:

Initialize six zones of different types. For all zones a (corrected) potential evaporation of 0.5 mm is given:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(6)
>>> zonetype(GLACIER, ILAKE, FIELD, FOREST, FIELD, FIELD)
>>> fluxes.epc = 0.5
>>> states.ic = 0.0, 0.0, 0.0, 0.0, 1.0, 2.0
>>> model.calc_ei_ic_v1()

For glaciers (first zone) and internal lakes (second zone) the interception routine does not apply. Hence, no interception evaporation can occur. For fields and forests, the interception routine is identical (usually, only larger capacities for forests are assumed, due to their higher leaf area index). Hence, the results of the third and the second zone are equal. The last three zones demonstrate, that all interception evaporation is equal to potential evaporation until the interception storage is empty; afterwards, interception evaporation is zero:

>>> states.ic
ic(0.0, 0.0, 0.0, 0.0, 0.5, 1.5)
>>> fluxes.ei
ei(0.0, 0.0, 0.0, 0.0, 0.5, 0.5)

A zero evaporation example:

>>> fluxes.epc = 0.0
>>> states.ic = 0.0, 0.0, 0.0, 0.0, 1.0, 2.0
>>> model.calc_ei_ic_v1()
>>> states.ic
ic(0.0, 0.0, 0.0, 0.0, 1.0, 2.0)
>>> fluxes.ei
ei(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)

A high evaporation example:

>>> fluxes.epc = 5.0
>>> states.ic = 0.0, 0.0, 0.0, 0.0, 1.0, 2.0
>>> model.calc_ei_ic_v1()
>>> states.ic
ic(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> fluxes.ei
ei(0.0, 0.0, 0.0, 0.0, 1.0, 2.0)
class hydpy.models.hland.hland_model.Calc_SP_WC_V1[source]

Bases: hydpy.core.modeltools.Method

Add throughfall to the snow layer.

Requires the control parameters:

NmbZones ZoneType

Requires the flux sequences:

TF RfC SfC

Updates the state sequences:

WC SP

Basic equations:

\(\frac{dSP}{dt} = TF \cdot \frac{SfC}{SfC+RfC}\)

\(\frac{dWC}{dt} = TF \cdot \frac{RfC}{SfC+RfC}\)

Exemples:

Consider the following setting, in which eight zones of different type receive a throughfall of 10mm:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(8)
>>> zonetype(ILAKE, GLACIER, FIELD, FOREST, FIELD, FIELD, FIELD, FIELD)
>>> fluxes.tf = 10.0
>>> fluxes.sfc = 0.5, 0.5, 0.5, 0.5, 0.2, 0.8, 1.0, 4.0
>>> fluxes.rfc = 0.5, 0.5, 0.5, 0.5, 0.8, 0.2, 4.0, 1.0
>>> states.sp = 0.0
>>> states.wc = 0.0
>>> model.calc_sp_wc_v1()
>>> states.sp
sp(0.0, 5.0, 5.0, 5.0, 2.0, 8.0, 2.0, 8.0)
>>> states.wc
wc(0.0, 5.0, 5.0, 5.0, 8.0, 2.0, 8.0, 2.0)

The snow routine does not apply for internal lakes, which is why both the ice storage and the water storage of the first zone remain unchanged. The snow routine is identical for glaciers, fields and forests in the current context, which is why the results of the second, third, and fourth zone are equal. The last four zones illustrate that the corrected snowfall fraction as well as the corrected rainfall fraction are applied in a relative manner, as the total amount of water yield has been corrected in the interception module already.

When both factors are zero, the neither the water nor the ice content of the snow layer changes:

>>> fluxes.sfc = 0.0
>>> fluxes.rfc = 0.0
>>> states.sp = 2.0
>>> states.wc = 0.0
>>> model.calc_sp_wc_v1()
>>> states.sp
sp(0.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0)
>>> states.wc
wc(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
class hydpy.models.hland.hland_model.Calc_Melt_SP_WC_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate melting of the ice content within the snow layer and update both the snow layers ice and the water content.

Requires the control parameters:

NmbZones ZoneType CFMax

Requires the derived parameter:

TTM

Requires the flux sequence:

TC

Updates the state sequences:

WC SP

Calculates the flux sequence:

Melt

Basic equations:

\(\frac{dSP}{dt} = - Melt\)

\(\frac{dWC}{dt} = + Melt\)

\(Melt = min(cfmax \cdot (TC-TTM), SP)\)

Examples:

Six zones are initialized with the same threshold temperature and degree day factor, but with different zone types and initial ice contents:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> nmbzones(6)
>>> zonetype(ILAKE, GLACIER, FIELD, FOREST, FIELD, FIELD)
>>> cfmax(4.0)
>>> derived.ttm = 2.0
>>> states.sp = 0.0, 10.0, 10.0, 10.0, 5.0, 0.0
>>> states.wc = 2.0

Note that the assumed length of the simulation step is only a half day. Hence the effective value of the degree day factor is not 4 but 2:

>>> cfmax
cfmax(4.0)
>>> cfmax.values
array([ 2.,  2.,  2.,  2.,  2.,  2.])

When the actual temperature is equal to the threshold temperature for melting and refreezing, no melting occurs and the states remain unchanged:

>>> fluxes.tc = 2.0
>>> model.calc_melt_sp_wc_v1()
>>> fluxes.melt
melt(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sp
sp(0.0, 10.0, 10.0, 10.0, 5.0, 0.0)
>>> states.wc
wc(0.0, 2.0, 2.0, 2.0, 2.0, 2.0)

The same holds true for an actual temperature lower than the threshold temperature:

>>> states.sp = 0.0, 10.0, 10.0, 10.0, 5.0, 0.0
>>> states.wc = 2.0
>>> fluxes.tc = -1.0
>>> model.calc_melt_sp_wc_v1()
>>> fluxes.melt
melt(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sp
sp(0.0, 10.0, 10.0, 10.0, 5.0, 0.0)
>>> states.wc
wc(0.0, 2.0, 2.0, 2.0, 2.0, 2.0)

With an actual temperature 3°C above the threshold temperature, melting can occur. Actual melting is consistent with potential melting, except for the first zone, which is an internal lake, and the last two zones, for which potential melting exceeds the available frozen water content of the snow layer:

>>> states.sp = 0.0, 10.0, 10.0, 10.0, 5.0, 0.0
>>> states.wc = 2.0
>>> fluxes.tc = 5.0
>>> model.calc_melt_sp_wc_v1()
>>> fluxes.melt
melt(0.0, 6.0, 6.0, 6.0, 5.0, 0.0)
>>> states.sp
sp(0.0, 4.0, 4.0, 4.0, 0.0, 0.0)
>>> states.wc
wc(0.0, 8.0, 8.0, 8.0, 7.0, 2.0)
class hydpy.models.hland.hland_model.Calc_Refr_SP_WC_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate refreezing of the water content within the snow layer and update both the snow layers ice and the water content.

Requires the control parameters:

NmbZones ZoneType CFR CFMax

Requires the derived parameter:

TTM

Requires the flux sequence:

TC

Updates the state sequences:

WC SP

Calculates the flux sequence:

Refr

Basic equations:

\(\frac{dSP}{dt} = + Refr\)

\(\frac{dWC}{dt} = - Refr\)

\(Refr = min(cfr \cdot cfmax \cdot (TTM-TC), WC)\)

Examples:

Six zones are initialized with the same threshold temperature, degree day factor and refreezing coefficient, but with different zone types and initial states:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> nmbzones(6)
>>> zonetype(ILAKE, GLACIER, FIELD, FOREST, FIELD, FIELD)
>>> cfmax(4.0)
>>> cfr(0.1)
>>> derived.ttm = 2.0
>>> states.sp = 2.0
>>> states.wc = 0.0, 1.0, 1.0, 1.0, 0.5, 0.0

Note that the assumed length of the simulation step is only a half day. Hence the effective value of the degree day factor is not 4 but 2:

>>> cfmax
cfmax(4.0)
>>> cfmax.values
array([ 2.,  2.,  2.,  2.,  2.,  2.])

When the actual temperature is equal to the threshold temperature for melting and refreezing, neither no refreezing occurs and the states remain unchanged:

>>> fluxes.tc = 2.0
>>> model.calc_refr_sp_wc_v1()
>>> fluxes.refr
refr(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sp
sp(0.0, 2.0, 2.0, 2.0, 2.0, 2.0)
>>> states.wc
wc(0.0, 1.0, 1.0, 1.0, 0.5, 0.0)

The same holds true for an actual temperature higher than the threshold temperature:

>>> states.sp = 2.0
>>> states.wc = 0.0, 1.0, 1.0, 1.0, 0.5, 0.0
>>> fluxes.tc = 2.0
>>> model.calc_refr_sp_wc_v1()
>>> fluxes.refr
refr(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sp
sp(0.0, 2.0, 2.0, 2.0, 2.0, 2.0)
>>> states.wc
wc(0.0, 1.0, 1.0, 1.0, 0.5, 0.0)

With an actual temperature 3°C above the threshold temperature, only melting can occur. Actual melting is consistent with potential melting, except for the first zone, which is an internal lake, and the last two zones, for which potential melting exceeds the available frozen water content of the snow layer:

>>> states.sp = 2.0
>>> states.wc = 0.0, 1.0, 1.0, 1.0, 0.5, 0.0
>>> fluxes.tc = 5.0
>>> model.calc_refr_sp_wc_v1()
>>> fluxes.refr
refr(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sp
sp(0.0, 2.0, 2.0, 2.0, 2.0, 2.0)
>>> states.wc
wc(0.0, 1.0, 1.0, 1.0, 0.5, 0.0)

With an actual temperature 3°C below the threshold temperature, refreezing can occur. Actual refreezing is consistent with potential refreezing, except for the first zone, which is an internal lake, and the last two zones, for which potential refreezing exceeds the available liquid water content of the snow layer:

>>> states.sp = 2.0
>>> states.wc = 0.0, 1.0, 1.0, 1.0, 0.5, 0.0
>>> fluxes.tc = -1.0
>>> model.calc_refr_sp_wc_v1()
>>> fluxes.refr
refr(0.0, 0.6, 0.6, 0.6, 0.5, 0.0)
>>> states.sp
sp(0.0, 2.6, 2.6, 2.6, 2.5, 2.0)
>>> states.wc
wc(0.0, 0.4, 0.4, 0.4, 0.0, 0.0)
class hydpy.models.hland.hland_model.Calc_In_WC_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate the actual water release from the snow layer due to the exceedance of the snow layers capacity for (liquid) water.

Requires the control parameters:

NmbZones ZoneType WHC

Requires the flux sequence:

TF

Requires the state sequence:

SP

Updates the state sequence:

WC

Calculates the flux sequence:

In_

Basic equations:

\(\frac{dWC}{dt} = -In\)

\(-In = max(WC - WHC \cdot SP, 0)\)

Examples:

Initialize six zones of different types and frozen water contents of the snow layer and set the relative water holding capacity to 20% of the respective frozen water content:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(6)
>>> zonetype(ILAKE, GLACIER, FIELD, FOREST, FIELD, FIELD)
>>> whc(0.2)
>>> states.sp = 0.0, 10.0, 10.0, 10.0, 5.0, 0.0

Also set the actual value of stand precipitation to 5 mm/d:

>>> fluxes.tf = 5.0

When there is no (liquid) water content in the snow layer, no water can be released:

>>> states.wc = 0.0
>>> model.calc_in_wc_v1()
>>> fluxes.in_
in_(5.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.wc
wc(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)

When there is a (liquid) water content in the snow layer, the water release depends on the frozen water content. Note the special cases of the first zone being an internal lake, for which the snow routine does not apply, and of the last zone, which has no ice content and thus effectively not really a snow layer:

>>> states.wc = 5.0
>>> model.calc_in_wc_v1()
>>> fluxes.in_
in_(5.0, 3.0, 3.0, 3.0, 4.0, 5.0)
>>> states.wc
wc(0.0, 2.0, 2.0, 2.0, 1.0, 0.0)

When the relative water holding capacity is assumed to be zero, all liquid water is released:

>>> whc(0.0)
>>> states.wc = 5.0
>>> model.calc_in_wc_v1()
>>> fluxes.in_
in_(5.0, 5.0, 5.0, 5.0, 5.0, 5.0)
>>> states.wc
wc(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)

Note that for the single lake zone, stand precipitation is directly passed to in_ in all three examples.

class hydpy.models.hland.hland_model.Calc_GlMelt_In_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate melting from glaciers which are actually not covered by a snow layer and add it to the water release of the snow module.

Requires the control parameters:

NmbZones ZoneType GMelt

Requires the derived parameter:

TTM

Requires the flux sequence:

TC

Requires the state sequence:

SP

Updates the flux sequence:

In_

Calculates the flux sequence:

GlMelt

Basic equation:

\(GlMelt = \Bigl \lbrace { {max(GMelt \cdot (TC-TTM), 0) \ | \ SP = 0} \atop {0 \ | \ SP > 0} }\)

Examples:

Seven zones are prepared, but glacier melting occurs only in the fourth one, as the first three zones are no glaciers, the fifth zone is covered by a snow layer and the actual temperature of the last two zones is not above the threshold temperature:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> nmbzones(7)
>>> zonetype(FIELD, FOREST, ILAKE, GLACIER, GLACIER, GLACIER, GLACIER)
>>> gmelt(4.)
>>> derived.ttm(2.)
>>> states.sp = 0., 0., 0., 0., .1, 0., 0.
>>> fluxes.tc = 3., 3., 3., 3., 3., 2., 1.
>>> fluxes.in_ = 3.
>>> model.calc_glmelt_in_v1()
>>> fluxes.glmelt
glmelt(0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0)
>>> fluxes.in_
in_(3.0, 3.0, 3.0, 5.0, 3.0, 3.0, 3.0)

Note that the assumed length of the simulation step is only a half day. Hence the effective value of the degree day factor is not 4 but 2:

>>> gmelt
gmelt(4.0)
>>> gmelt.values
array([ 2.,  2.,  2.,  2.,  2.,  2.,  2.])
class hydpy.models.hland.hland_model.Calc_R_SM_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate effective precipitation and update soil moisture.

Requires the control parameters:

NmbZones ZoneType FC Beta

Requires the flux sequence:

In_

Updates the state sequence:

SM

Calculates the flux sequence:

R

Basic equations:

\(\frac{dSM}{dt} = IN - R\)

\(R = IN \cdot \left(\frac{SM}{FC}\right)^{Beta}\)

Examples:

Initialize six zones of different types. The field capacity of all fields and forests is set to 200mm, the input of each zone is 10mm:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(6)
>>> zonetype(ILAKE, GLACIER, FIELD, FOREST, FIELD, FIELD)
>>> fc(200.0)
>>> fluxes.in_ = 10.0

With a common nonlinearity parameter value of 2, a relative soil moisture of 50% (zones three and four) results in a discharge coefficient of 25%. For a soil completely dried (zone five) or completely saturated (one six) the discharge coefficient does not depend on the nonlinearity parameter and is 0% and 100% respectively. Glaciers and internal lakes also always route 100% of their input as effective precipitation:

>>> beta(2.0)
>>> states.sm = 0.0, 0.0, 100.0, 100.0, 0.0, 200.0
>>> model.calc_r_sm_v1()
>>> fluxes.r
r(10.0, 10.0, 2.5, 2.5, 0.0, 10.0)
>>> states.sm
sm(0.0, 0.0, 107.5, 107.5, 10.0, 200.0)

Through decreasing the nonlinearity parameter, the discharge coefficient increases. A parameter value of zero leads to a discharge coefficient of 100% for any soil moisture:

>>> beta(0.0)
>>> states.sm = 0.0, 0.0, 100.0, 100.0, 0.0, 200.0
>>> model.calc_r_sm_v1()
>>> fluxes.r
r(10.0, 10.0, 10.0, 10.0, 10.0, 10.0)
>>> states.sm
sm(0.0, 0.0, 100.0, 100.0, 0.0, 200.0)

With zero field capacity, the discharge coefficient also always equates to 100%:

>>> fc(0.0)
>>> beta(2.0)
>>> states.sm = 0.0
>>> model.calc_r_sm_v1()
>>> fluxes.r
r(10.0, 10.0, 10.0, 10.0, 10.0, 10.0)
>>> states.sm
sm(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
class hydpy.models.hland.hland_model.Calc_CF_SM_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate capillary flow and update soil moisture.

Requires the control parameters:

NmbZones ZoneType FC CFlux

Requires the flux sequence:

R

Requires the state sequence:

UZ

Updates the state sequence:

SM

Calculates the flux sequence:

CF

Basic equations:

\(\frac{dSM}{dt} = CF\)

\(CF = CFLUX \cdot (1 - \frac{SM}{FC})\)

Examples:

Initialize six zones of different types. The field capacity of als fields and forests is set to 200mm, the maximum capillary flow rate is 4mm/d:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> nmbzones(6)
>>> zonetype(ILAKE, GLACIER, FIELD, FOREST, FIELD, FIELD)
>>> fc(200.0)
>>> cflux(4.0)

Note that the assumed length of the simulation step is only a half day. Hence the maximum capillary flow per simulation step is 2 instead of 4:

>>> cflux
cflux(4.0)
>>> cflux.values
array([ 2.,  2.,  2.,  2.,  2.,  2.])

For fields and forests, the actual capillary return flow depends on the relative soil moisture deficite, if either the upper zone layer provides enough water…

>>> fluxes.r = 0.0
>>> states.sm = 0.0, 0.0, 100.0, 100.0, 0.0, 200.0
>>> states.uz = 20.0
>>> model.calc_cf_sm_v1()
>>> fluxes.cf
cf(0.0, 0.0, 1.0, 1.0, 2.0, 0.0)
>>> states.sm
sm(0.0, 0.0, 101.0, 101.0, 2.0, 200.0)

…our enough effective precipitation is generated, which can be rerouted directly:

>>> cflux(4.0)
>>> fluxes.r = 10.0
>>> states.sm = 0.0, 0.0, 100.0, 100.0, 0.0, 200.0
>>> states.uz = 0.0
>>> model.calc_cf_sm_v1()
>>> fluxes.cf
cf(0.0, 0.0, 1.0, 1.0, 2.0, 0.0)
>>> states.sm
sm(0.0, 0.0, 101.0, 101.0, 2.0, 200.0)

If the upper zone layer is empty and no effective precipitation is generated, capillary flow is zero:

>>> cflux(4.0)
>>> fluxes.r = 0.0
>>> states.sm = 0.0, 0.0, 100.0, 100.0, 0.0, 200.0
>>> states.uz = 0.0
>>> model.calc_cf_sm_v1()
>>> fluxes.cf
cf(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sm
sm(0.0, 0.0, 100.0, 100.0, 0.0, 200.0)

Here an example, where both the upper zone layer and effective precipitation provide water for the capillary flow, but less then the maximum flow rate times the relative soil moisture:

>>> cflux(4.0)
>>> fluxes.r = 0.1
>>> states.sm = 0.0, 0.0, 100.0, 100.0, 0.0, 200.0
>>> states.uz = 0.2
>>> model.calc_cf_sm_v1()
>>> fluxes.cf
cf(0.0, 0.0, 0.3, 0.3, 0.3, 0.0)
>>> states.sm
sm(0.0, 0.0, 100.3, 100.3, 0.3, 200.0)

Even unrealistic high maximum capillary flow rates do not result in overfilled soils:

>>> cflux(1000.0)
>>> fluxes.r = 200.0
>>> states.sm = 0.0, 0.0, 100.0, 100.0, 0.0, 200.0
>>> states.uz = 200.0
>>> model.calc_cf_sm_v1()
>>> fluxes.cf
cf(0.0, 0.0, 100.0, 100.0, 200.0, 0.0)
>>> states.sm
sm(0.0, 0.0, 200.0, 200.0, 200.0, 200.0)

For (unrealistic) soils with zero field capacity, capillary flow is always zero:

>>> fc(0.0)
>>> states.sm = 0.0
>>> model.calc_cf_sm_v1()
>>> fluxes.cf
cf(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sm
sm(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
class hydpy.models.hland.hland_model.Calc_EA_SM_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate soil evaporation and update soil moisture.

Requires the control parameters:

NmbZones ZoneType LP FC ERed

Requires the flux sequences:

EPC EI

Requires the state sequence:

SP

Updates the state sequence:

SM

Calculates the flux sequence:

EA

Basic equations:

\(\frac{dSM}{dt} = - EA\)

\(EA_{temp} = \biggl \lbrace { {EPC \cdot min\left(\frac{SM}{LP \cdot FC}, 1\right) \ | \ SP = 0} \atop {0 \ | \ SP > 0} }\)

\(EA = EA_{temp} - max(ERED \cdot (EA_{temp} + EI - EPC), 0)\)

Examples:

Initialize seven zones of different types. The field capacity

of all fields and forests is set to 200mm, potential evaporation and interception evaporation are 2mm and 1mm respectively:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(7)
>>> zonetype(ILAKE, GLACIER, FIELD, FOREST, FIELD, FIELD, FIELD)
>>> fc(200.0)
>>> lp(0.0, 0.0, 0.5, 0.5, 0.0, 0.8, 1.0)
>>> ered(0.0)
>>> fluxes.epc = 2.0
>>> fluxes.ei = 1.0
>>> states.sp = 0.0

Only fields and forests include soils; for glaciers and zones (the first two zones) no soil evaporation is performed. For fields and forests, the underlying calculations are the same. In the following example, the relative soil moisture is 50% in all field and forest zones. Hence, differences in soil evaporation are related to the different soil evaporation parameter values only:

>>> states.sm = 100.0
>>> model.calc_ea_sm_v1()
>>> fluxes.ea
ea(0.0, 0.0, 2.0, 2.0, 2.0, 1.25, 1.0)
>>> states.sm
sm(0.0, 0.0, 98.0, 98.0, 98.0, 98.75, 99.0)

In the last example, evaporation values of 2mm have been calculated for some zones despite the fact, that these 2mm added to the actual interception evaporation of 1mm exceed potential evaporation. This behaviour can be reduced…

>>> states.sm = 100.0
>>> ered(0.5)
>>> model.calc_ea_sm_v1()
>>> fluxes.ea
ea(0.0, 0.0, 1.5, 1.5, 1.5, 1.125, 1.0)
>>> states.sm
sm(0.0, 0.0, 98.5, 98.5, 98.5, 98.875, 99.0)

…or be completely excluded:

>>> states.sm = 100.0
>>> ered(1.0)
>>> model.calc_ea_sm_v1()
>>> fluxes.ea
ea(0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0)
>>> states.sm
sm(0.0, 0.0, 99.0, 99.0, 99.0, 99.0, 99.0)

Any occurrence of a snow layer suppresses soil evaporation completely:

>>> states.sp = 0.01
>>> states.sm = 100.0
>>> model.calc_ea_sm_v1()
>>> fluxes.ea
ea(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sm
sm(0.0, 0.0, 100.0, 100.0, 100.0, 100.0, 100.0)

For (unrealistic) soils with zero field capacity, soil evaporation is always zero:

>>> fc(0.0)
>>> states.sm = 0.0
>>> model.calc_ea_sm_v1()
>>> fluxes.ea
ea(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> states.sm
sm(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
class hydpy.models.hland.hland_model.Calc_InUZ_V1[source]

Bases: hydpy.core.modeltools.Method

Accumulate the total inflow into the upper zone layer.

Requires the control parameters:

NmbZones ZoneType

Requires the derived parameter:

RelLandZoneArea

Requires the flux sequences:

R CF

Calculates the flux sequence:

InUZ

Basic equation:

\(InUZ = R - CF\)

Examples:

Initialize three zones of different relative land sizes (area related to the total size of the subbasin except lake areas):

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(3)
>>> zonetype(FIELD, ILAKE, GLACIER)
>>> derived.rellandzonearea = 2.0/3.0, 0.0, 1.0/3.0
>>> fluxes.r = 6.0, 0.0, 2.0
>>> fluxes.cf = 2.0, 0.0, 1.0
>>> model.calc_inuz_v1()
>>> fluxes.inuz
inuz(3.0)

Internal lakes do not contribute to the upper zone layer. Hence for a subbasin consisting only of interal lakes a zero input value would be calculated:

>>> zonetype(ILAKE, ILAKE, ILAKE)
>>> model.calc_inuz_v1()
>>> fluxes.inuz
inuz(0.0)
class hydpy.models.hland.hland_model.Calc_ContriArea_V1[source]

Bases: hydpy.core.modeltools.Method

Determine the relative size of the contributing area of the whole subbasin.

Requires the control parameters:

RespArea NmbZones ZoneType FC Beta

Requires the derived parameters:

RelSoilArea RelSoilZoneArea

Requires the state sequence:

SM

Calculates the flux sequence:

ContriArea

Basic equation:

\(ContriArea = \left( \frac{SM}{FC} \right)^{Beta}\)

Examples:

Four zones are initialized, but only the first two zones of type field and forest are taken into account in the calculation of the relative contributing area of the catchment (even, if also glaciers contribute to the inflow of the upper zone layer):

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE)
>>> beta(2.0)
>>> fc(200.0)
>>> resparea(True)
>>> derived.relsoilarea(0.5)
>>> derived.relsoilzonearea(1.0/3.0, 2.0/3.0, 0.0, 0.0)

With a relative soil moisture of 100 % in the whole subbasin, the contributing area is also estimated as 100 %,…

>>> states.sm = 200.0
>>> model.calc_contriarea_v1()
>>> fluxes.contriarea
contriarea(1.0)

…and relative soil moistures of 0% result in an contributing area of 0 %:

>>> states.sm = 0.0
>>> model.calc_contriarea_v1()
>>> fluxes.contriarea
contriarea(0.0)

With the given value 2 of the nonlinearity parameter Beta, soil moisture of 50 % results in a contributing area estimate of 25%:

>>> states.sm = 100.0
>>> model.calc_contriarea_v1()
>>> fluxes.contriarea
contriarea(0.25)

Setting the response area option to False,…

>>> resparea(False)
>>> model.calc_contriarea_v1()
>>> fluxes.contriarea
contriarea(1.0)

… setting the soil area (total area of all field and forest zones in the subbasin) to zero…,

>>> resparea(True)
>>> derived.relsoilarea(0.0)
>>> model.calc_contriarea_v1()
>>> fluxes.contriarea
contriarea(1.0)

…or setting all field capacities to zero…

>>> derived.relsoilarea(0.5)
>>> fc(0.0)
>>> states.sm = 0.0
>>> model.calc_contriarea_v1()
>>> fluxes.contriarea
contriarea(1.0)

…leads to contributing area values of 100 %.

class hydpy.models.hland.hland_model.Calc_Q0_Perc_UZ_V1[source]

Bases: hydpy.core.modeltools.Method

Perform the upper zone layer routine which determines percolation to the lower zone layer and the fast response of the hland model.

Requires the control parameters:

RecStep PercMax K Alpha

Requires the derived parameter:

DT

Requires the flux sequences:

ContriArea InUZ

Updates the state sequence:

UZ

Calculates the flux sequences:

Perc Q0

Note that the system behaviour of this method depends strongly on the specifications of the options RespArea and RecStep.

Basic equations:

\(\frac{dUZ}{dt} = InUZ - Perc - Q0\)

\(Perc = PercMax \cdot ContriArea\)

\(Q0 = K * \cdot \left( \frac{UZ}{ContriArea} \right)^{1+Alpha}\)

Examples:

The upper zone layer routine is an exception compared to the other routines of the HydPy-H-Land model, regarding its consideration of numerical accuracy. To increase the accuracy of the numerical integration of the underlying ordinary differential equation, each simulation step can be divided into substeps, which are all solved with first order accuracy. In the first example, this option is omitted through setting the RecStep parameter to one:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> recstep(2)
>>> derived.dt = 1/recstep
>>> percmax(2.0)
>>> alpha(1.0)
>>> k(2.0)
>>> fluxes.contriarea = 1.0
>>> fluxes.inuz = 0.0
>>> states.uz = 1.0
>>> model.calc_q0_perc_uz_v1()
>>> fluxes.perc
perc(1.0)
>>> fluxes.q0
q0(0.0)
>>> states.uz
uz(0.0)

Due to the sequential calculation of the upper zone routine, the upper zone storage is drained completely through percolation and no water is left for fast discharge response. By dividing the simulation step in 100 substeps, the results are quite different:

>>> recstep(200)
>>> derived.dt = 1.0/recstep
>>> states.uz = 1.0
>>> model.calc_q0_perc_uz_v1()
>>> fluxes.perc
perc(0.786934)
>>> fluxes.q0
q0(0.213066)
>>> states.uz
uz(0.0)

Note that the assumed length of the simulation step is only a half day. Hence the effective values of the maximum percolation rate and the storage coefficient is not 2 but 1:

>>> percmax
percmax(2.0)
>>> k
k(2.0)
>>> percmax.value
1.0
>>> k.value
1.0

By decreasing the contributing area one decreases percolation but increases fast discharge response:

>>> fluxes.contriarea = 0.5
>>> states.uz = 1.0
>>> model.calc_q0_perc_uz_v1()
>>> fluxes.perc
perc(0.434108)
>>> fluxes.q0
q0(0.565892)
>>> states.uz
uz(0.0)

Without any contributing area, the complete amount of water stored in the upper zone layer is released as direct discharge immediately:

>>> fluxes.contriarea = 0.0
>>> states.uz = 1.0
>>> model.calc_q0_perc_uz_v1()
>>> fluxes.perc
perc(0.0)
>>> fluxes.q0
q0(1.0)
>>> states.uz
uz(0.0)

Resetting RecStep leads to more transparent results. Note that, due to the large value of the storage coefficient and the low accuracy of the numerical approximation, direct discharge drains the rest of the upper zone storage:

>>> recstep(2)
>>> fluxes.contriarea = 0.5
>>> derived.dt = 1.0/recstep
>>> states.uz = 1.0
>>> model.calc_q0_perc_uz_v1()
>>> fluxes.perc
perc(0.5)
>>> fluxes.q0
q0(0.5)
>>> states.uz
uz(0.0)

Applying a more reasonable storage coefficient results in:

>>> k(0.5)
>>> states.uz = 1.0
>>> model.calc_q0_perc_uz_v1()
>>> fluxes.perc
perc(0.5)
>>> fluxes.q0
q0(0.25)
>>> states.uz
uz(0.25)

Adding an input of 0.3 mm results the same percolation value (which, in the given example, is determined by the maximum percolation rate only), but in an increases value of the direct response (which always depends on the actual upper zone storage directly):

>>> fluxes.inuz = 0.3
>>> states.uz = 1.0
>>> model.calc_q0_perc_uz_v1()
>>> fluxes.perc
perc(0.5)
>>> fluxes.q0
q0(0.64)
>>> states.uz
uz(0.16)

Due to the same reasons, another increase in numerical accuracy has no impact on percolation but decreases the direct response in the given example:

>>> recstep(200)
>>> derived.dt = 1.0/recstep
>>> states.uz = 1.0
>>> model.calc_q0_perc_uz_v1()
>>> fluxes.perc
perc(0.5)
>>> fluxes.q0
q0(0.421708)
>>> states.uz
uz(0.378292)
class hydpy.models.hland.hland_model.Calc_LZ_V1[source]

Bases: hydpy.core.modeltools.Method

Update the lower zone layer in accordance with percolation from upper groundwater to lower groundwater and/or in accordance with lake precipitation.

Requires the control parameters:

NmbZones ZoneType

Requires the derived parameters:

RelLandArea RelZoneArea

Requires the flux sequences:

Perc PC

Updates the state sequence:

LZ

Basic equation:

\(\frac{dLZ}{dt} = Perc + Pc\)

Examples:

At first, a subbasin with two field zones is assumed (the zones could be of type forest or glacier as well). In such zones, precipitation does not fall directly into the lower zone layer, hence the given precipitation of 2mm has no impact. Only the actual percolation from the upper zone layer (underneath both field zones) is added to the lower zone storage:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(2)
>>> zonetype(FIELD, FIELD)
>>> derived.rellandarea = 1.0
>>> derived.relzonearea = 2.0/3.0, 1.0/3.0
>>> fluxes.perc = 2.0
>>> fluxes.pc = 5.0
>>> states.lz = 10.0
>>> model.calc_lz_v1()
>>> states.lz
lz(12.0)

If the second zone is an internal lake, its precipitation falls on the lower zone layer directly. Note that only 5/3mm precipitation are added, due to the relative size of the internal lake within the subbasin. Percolation from the upper zone layer increases the lower zone storage only by two thirds of its original value, due to the larger spatial extend of the lower zone layer:

>>> zonetype(FIELD, ILAKE)
>>> derived.rellandarea = 2.0/3.0
>>> derived.relzonearea = 2.0/3.0, 1.0/3.0
>>> states.lz = 10.0
>>> model.calc_lz_v1()
>>> states.lz
lz(13.0)
class hydpy.models.hland.hland_model.Calc_EL_LZ_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate lake evaporation.

Requires the control parameters:

NmbZones ZoneType TTIce

Requires the derived parameter:

RelZoneArea

Requires the flux sequences:

TC EPC

Updates the state sequence:

LZ

Calculates the flux sequence:

EL

Basic equations:

\(\frac{dLZ}{dt} = -EL\)

\(EL = \Bigl \lbrace { {EPC \ | \ TC > TTIce} \atop {0 \ | \ TC \leq TTIce} }\)

Examples:

Six zones of the same size are initialized. The first three zones are no internal lakes, they can not exhibit any lake evaporation. Of the last three zones, which are internal lakes, only the last one evaporates water. For zones five and six, evaporation is suppressed due to an assumed ice layer, whenever the associated theshold temperature is not exceeded:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(6)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE, ILAKE, ILAKE)
>>> ttice(-1.0)
>>> derived.relzonearea = 1.0/6.0
>>> fluxes.epc = 0.6
>>> fluxes.tc = 0.0, 0.0, 0.0, 0.0, -1.0, -2.0
>>> states.lz = 10.0
>>> model.calc_el_lz_v1()
>>> fluxes.el
el(0.0, 0.0, 0.0, 0.6, 0.0, 0.0)
>>> states.lz
lz(9.9)

Note that internal lakes always contain water. Hence, the HydPy-H-Land model allows for negative values of the lower zone storage:

>>> states.lz = 0.05
>>> model.calc_el_lz_v1()
>>> fluxes.el
el(0.0, 0.0, 0.0, 0.6, 0.0, 0.0)
>>> states.lz
lz(-0.05)
class hydpy.models.hland.hland_model.Calc_Q1_LZ_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate the slow response of the lower zone layer.

Requires the control parameters:

K4 Gamma

Updates the state sequence:

LZ

Calculates the flux sequence:

Q1

Basic equations:

\(\frac{dLZ}{dt} = -Q1\)

\(Q1 = \Bigl \lbrace { {K4 \cdot LZ^{1+Gamma} \ | \ LZ > 0} \atop {0 \ | \ LZ\leq 0} }\)

Examples:

As long as the lower zone storage is negative…

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> k4(0.2)
>>> gamma(0.0)
>>> states.lz = -2.0
>>> model.calc_q1_lz_v1()
>>> fluxes.q1
q1(0.0)
>>> states.lz
lz(-2.0)

…or zero, no slow discharge response occurs:

>>> states.lz = 0.0
>>> model.calc_q1_lz_v1()
>>> fluxes.q1
q1(0.0)
>>> states.lz
lz(0.0)

For storage values above zero the linear…

>>> states.lz = 2.0
>>> model.calc_q1_lz_v1()
>>> fluxes.q1
q1(0.2)
>>> states.lz
lz(1.8)

…or nonlinear storage routing equation applies:

>>> gamma(1.)
>>> states.lz = 2.0
>>> model.calc_q1_lz_v1()
>>> fluxes.q1
q1(0.4)
>>> states.lz
lz(1.6)

Note that the assumed length of the simulation step is only a half day. Hence the effective value of the storage coefficient is not 0.2 but 0.1:

>>> k4
k4(0.2)
>>> k4.value
0.1
class hydpy.models.hland.hland_model.Calc_InUH_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate the unit hydrograph input.

Requires the derived parameter:

RelLandArea

Requires the flux sequences:

Q0 Q1

Calculates the flux sequence:

InUH

Basic equation:

\(InUH = Q0 + Q1\)

Example:

The unit hydrographs receives base flow from the whole subbasin and direct flow from zones of type field, forest and glacier only. In the following example, these occupy only one half of the subbasin, which is why the partial input of q0 is halved:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> derived.rellandarea = 0.5
>>> fluxes.q0 = 4.0
>>> fluxes.q1 = 1.0
>>> model.calc_inuh_v1()
>>> fluxes.inuh
inuh(3.0)
class hydpy.models.hland.hland_model.Calc_OutUH_QUH_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate the unit hydrograph output (convolution).

Requires the derived parameter:

UH

Requires the flux sequence:

InUH

Updates the log sequence:

QUH

Calculates the flux sequence:

OutUH

Examples:

Prepare a unit hydrograph with only three ordinates — representing a fast catchment response compared to the selected step size:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> derived.uh.shape = 3
>>> derived.uh = 0.3, 0.5, 0.2
>>> logs.quh.shape = 3
>>> logs.quh = 1.0, 3.0, 0.0

Without new input, the actual output is simply the first value stored in the logging sequence and the values of the logging sequence are shifted to the left:

>>> fluxes.inuh = 0.0
>>> model.calc_outuh_quh_v1()
>>> fluxes.outuh
outuh(1.0)
>>> logs.quh
quh(3.0, 0.0, 0.0)

With an new input of 4mm, the actual output consists of the first value stored in the logging sequence and the input value multiplied with the first unit hydrograph ordinate. The updated logging sequence values result from the multiplication of the input values and the remaining ordinates:

>>> fluxes.inuh = 4.0
>>> model.calc_outuh_quh_v1()
>>> fluxes.outuh
outuh(4.2)
>>> logs.quh
quh(2.0, 0.8, 0.0)

The next example demonstates the updating of non empty logging sequence:

>>> fluxes.inuh = 4.0
>>> model.calc_outuh_quh_v1()
>>> fluxes.outuh
outuh(3.2)
>>> logs.quh
quh(2.8, 0.8, 0.0)

A unit hydrograph with only one ordinate results in the direct routing of the input:

>>> derived.uh.shape = 1
>>> derived.uh = 1.0
>>> fluxes.inuh = 0.0
>>> logs.quh.shape = 1
>>> logs.quh = 0.0
>>> model.calc_outuh_quh_v1()
>>> fluxes.outuh
outuh(0.0)
>>> logs.quh
quh(0.0)
>>> fluxes.inuh = 4.0
>>> model.calc_outuh_quh()
>>> fluxes.outuh
outuh(4.0)
>>> logs.quh
quh(0.0)
class hydpy.models.hland.hland_model.Calc_QT_V1[source]

Bases: hydpy.core.modeltools.Method

Calculate the total discharge after possible abstractions.

Requires the control parameter:

Abstr

Requires the derived parameter:

QFactor

Requires the flux sequence:

OutUH

Calculates the flux sequence:

QT

Basic equation:

\(QT = max(QFactor \cdot OutUH - Abstr, 0)\)

Examples:

Trying to abstract less then available, as much as available and less then available results in:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> abstr(1.0)
>>> derived.qfactor(0.5)
>>> fluxes.outuh = 4.0
>>> model.calc_qt_v1()
>>> fluxes.qt
qt(1.0)
>>> fluxes.outuh = 2.0
>>> model.calc_qt_v1()
>>> fluxes.qt
qt(0.0)
>>> fluxes.outuh = 1.0
>>> model.calc_qt_v1()
>>> fluxes.qt
qt(0.0)

Note that “negative abstractions” are allowed:

>>> abstr(-1.0)
>>> fluxes.outuh = 2.0
>>> model.calc_qt_v1()
>>> fluxes.qt
qt(2.0)
class hydpy.models.hland.hland_model.Pass_Q_v1[source]

Bases: hydpy.core.modeltools.Method

Update the outlet link sequence.

Requires the flux sequence:

QT

Calculates the outlet sequence:

Q

Parameter Features

Parameter tools

class hydpy.models.hland.hland_parameters.ParameterComplete(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Base class for 1-dimensional parameters relevant for all types of zones.

ParameterComplete applies the features of class ZipParameter on the land use types field, forest, glacier, and ilake and consideres them all as relevant (e.g. for calculating weighted averages).

The following examples are based on parameter PCorr, which is directly derived from ParameterComplete. After preparing the parameter NmbZones, parameter PCorr allows to set its values using the relevant land use types as keywords:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE, FIELD)
>>> pcorr(field=2.0, forest=1.0, glacier=4.0, ilake=3.0)
>>> pcorr
pcorr(field=2.0, forest=1.0, glacier=4.0, ilake=3.0)
>>> pcorr.values
array([ 2.,  1.,  4.,  3.,  2.])

Parameter ZoneArea is used for calculating the areal means (see property refweights):

>>> zonearea(0.0, 1.0, 2.0, 3.0, 4.0)
>>> from hydpy import round_
>>> round_(pcorr.average_values())
2.6

Alternatively, pass other masks defined in module hland_masks, to take only certain types of zones into account:

>>> round_(pcorr.average_values(model.masks.field))
2.0
>>> round_(pcorr.average_values("soil"))
1.8
>>> round_(pcorr.average_values(model.masks.field, "forest"))
1.8

All other masks (e.g. Soil used by ParameterSoil subclasses as IcMax) are subsets of mask Complete:

>>> icmax.mask in pcorr.mask
True
>>> pcorr.mask in icmax.mask
False
MODEL_CONSTANTS: Dict[str, int] = {'FIELD': 1, 'FOREST': 2, 'GLACIER': 3, 'ILAKE': 4}
mask
property refweights

Reference to the associated instance of RelZoneArea for calculating areal mean values.

name: str = 'parametercomplete'
unit: str = '?'
class hydpy.models.hland.hland_parameters.ParameterSoil(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Base class for 1-dimensional parameters relevant for FIELD and FOREST zones.

ParameterSoil works similar to ParameterComplete. Some examples based on parameter IcMax:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE, FIELD)
>>> icmax(field=2.0, forest=1.0, glacier=4.0, ilake=3.0)
>>> icmax
icmax(field=2.0, forest=1.0)
>>> icmax(field=2.0, default=9.0)
>>> icmax
icmax(field=2.0, forest=9.0)
>>> zonearea(0.0, 1.0, nan, nan, 3.0)
>>> from hydpy import round_
>>> round_(icmax.average_values())
3.75
mask
name: str = 'parametersoil'
unit: str = '?'
TIME: Optional[bool]
TYPE: Type
fastaccess: FastAccessType
subvars: SubVariablesType
class hydpy.models.hland.hland_parameters.ParameterLand(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Base class for 1-dimensional parameters relevant for FIELD, FOREST, and GLACIER zones.

ParameterLand works similar to ParameterComplete. Some examples based on parameter WHC:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE, FIELD)
>>> whc(field=2.0, forest=1.0, glacier=4.0, ilake=3.0)
>>> whc
whc(field=2.0, forest=1.0, glacier=4.0)
>>> whc(field=2.0, default=9.0)
>>> whc
whc(field=2.0, forest=9.0, glacier=9.0)
>>> zonearea(1.0, 1.0, 1.0, nan, 1.0)
>>> from hydpy import round_
>>> round_(whc.average_values())
5.5
mask
name: str = 'parameterland'
unit: str = '?'
TIME: Optional[bool]
TYPE: Type
fastaccess: FastAccessType
subvars: SubVariablesType
class hydpy.models.hland.hland_parameters.ParameterLake(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Base class for 1-dimensional parameters relevant for ILAKE zones.

ParameterLake works similar to ParameterComplete. Some examples based on parameter TTIce:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> zonetype(ILAKE, FOREST, GLACIER, ILAKE, FIELD)
>>> ttice(field=2.0, forest=1.0, glacier=4.0, ilake=3.0)
>>> ttice
ttice(3.0)
>>> ttice(field=2.0, forest=9.0, default=9.0)
>>> ttice
ttice(9.0)
>>> zonearea(1.0, nan, nan, 1.0, nan)
>>> from hydpy import round_
>>> round_(ttice.average_values())
9.0
mask
name: str = 'parameterlake'
unit: str = '?'
TIME: Optional[bool]
TYPE: Type
fastaccess: FastAccessType
subvars: SubVariablesType
class hydpy.models.hland.hland_parameters.ParameterGlacier(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Base class for 1-dimensional parameters relevant for GLACIER zones.

ParameterLake works similar to ParameterComplete. Some examples based on parameter GMelt:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("1d")
>>> nmbzones(5)
>>> zonetype(GLACIER, FOREST, ILAKE, GLACIER, FIELD)
>>> gmelt(field=2.0, forest=1.0, glacier=4.0, ilake=3.0)
>>> gmelt
gmelt(4.0)
>>> gmelt(field=2.0, forest=9.0, default=8.0)
>>> gmelt
gmelt(8.0)
>>> zonearea(1.0, nan, nan, 1.0, nan)
>>> from hydpy import round_
>>> round_(gmelt.average_values())
8.0
mask
name: str = 'parameterglacier'
unit: str = '?'
TIME: Optional[bool]
TYPE: Type
fastaccess: FastAccessType
subvars: SubVariablesType
class hydpy.models.hland.hland_parameters.ParameterNoGlacier(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Base class for 1-dimensional parameters relevant for FIELD, FOREST, and ILAKE zones.

ParameterSoil works similar to ParameterComplete. Some examples based on parameter ECorr:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE, FIELD)
>>> ecorr(field=2.0, forest=1.0, glacier=4.0, ilake=3.0)
>>> ecorr
ecorr(field=2.0, forest=1.0, ilake=3.0)
>>> ecorr(field=2.0, default=9.0)
>>> ecorr
ecorr(field=2.0, forest=9.0, ilake=9.0)
>>> zonearea(1.0, 1.0, nan, 1.0, 1.0)
>>> from hydpy import round_
>>> round_(ecorr.average_values())
5.5
mask
name: str = 'parameternoglacier'
unit: str = '?'
TIME: Optional[bool]
TYPE: Type
fastaccess: FastAccessType
subvars: SubVariablesType

Constants

The HydPy-H-Land model (hland) allows for the subdivision of subbasins into zones (hydrological response units). Some processes, e.g. interception, are calculated separately for each zone. This is why some parameters (e.g. the interception capacity IcMax) and some sequences (e.g. the actual interception storage Ic) are 1-dimensional. Each entry represents the value of a different zone.

In contrasts to the original HBV96 model, the HydPy-H-Land model allows for arbitrary definitions of zones. Nevertheless, the original distinction in accordance with four different zone types is still supported. The parameter ZoneType defines e.g. which entry of IcMax is related to which zone type via integer values. Note that for zones of type FIELD and FOREST the same equations are applied. (Usually, larger IcMax values and smaller CFMax are assigned to FOREST zones due to their higher leaf area index and the associated decrease in solar radiation.) On the contrary, zones of type GLACIER and ILAKE are partly connected to different process equations.

For comprehensibility, this module introduces the relevant integer constants. Through performing a wildcard import

>>> from hydpy.models.hland import *

these are available in your local namespace:

>>> FIELD, FOREST, GLACIER, ILAKE
(1, 2, 3, 4)
hydpy.models.hland.hland_constants.FIELD = 1

Constant for the zone type field.

hydpy.models.hland.hland_constants.FOREST = 2

Constant for the zone type forest.

hydpy.models.hland.hland_constants.GLACIER = 3

Constant for the zone type glacier.

hydpy.models.hland.hland_constants.ILAKE = 4

Constant for the zone type internal lake.

Control parameters

class hydpy.models.hland.ControlParameters(master: hydpy.core.parametertools.Parameters, cls_fastaccess: Optional[Type[hydpy.core.parametertools.FastAccessParameter]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.variabletools.SubVariables[hydpy.core.parametertools.Parameters, Parameter, hydpy.core.parametertools.FastAccessParameter]

Control parameters of model hland.

The following classes are selected:
  • Area() Subbasin area [km²].

  • NmbZones() Number of zones (hydrological response units) in a subbasin [-].

  • ZoneType() Type of each zone.

  • ZoneArea() Zone area [km²].

  • ZoneZ() Zone elevation [100m].

  • ZRelP() Subbasin-wide reference elevation level for precipitation [100m].

  • ZRelT() Subbasin-wide reference elevation level for temperature [100m].

  • ZRelE() Subbasin-wide reference elevation level for evaporation [100m].

  • PCorr() General precipitation correction factor [-].

  • PCAlt() Elevation correction factor for precipitation [-1/100m].

  • RfCF() Rainfall correction factor [-].

  • SfCF() Snowfall correction factor [-].

  • TCAlt() Elevation correction factor for temperature [-1°C/100m].

  • ECorr() General evaporation correction factor [-].

  • ECAlt() Elevation correction factor for evaporation [-1/100m].

  • EPF() Decrease in potential evaporation due to precipitation [T/mm].

  • ETF() Temperature factor for evaporation [1/°C].

  • ERed() Factor for restricting actual to potential evaporation [-].

  • TTIce() Temperature threshold for lake evaporation [°C].

  • IcMax() Maximum interception storage [mm].

  • TT() Temperature threshold for snow/rain [°C].

  • TTInt() Temperature interval with a mixture of snow and rain [°C].

  • DTTM() Difference between TTM and TT [°C].

  • CFMax() Degree day factor for snow (on glaciers or not) [mm/°C/T].

  • GMelt() Degree day factor for glacial ice [mm/°C/T].

  • CFR() Refreezing factor for water stored within the snow layer [-].

  • WHC() Relative water holding capacity of the snow layer [-].

  • FC() Maximum soil moisture content (field capacity) [mm].

  • LP() Relative limit for potential evaporation [-].

  • Beta() Nonlinearity parameter of the soil routine [-].

  • PercMax() Maximum percolation rate [mm/T].

  • CFlux() Capacity (maximum) of the capillary return flux [mm/T].

  • RespArea() Flag to enable the contributing area approach [-].

  • RecStep() Number of internal computation steps per simulation time step [-].

  • Alpha() Nonlinearity parameter of the upper zone layer [-].

  • K() Recession coefficient of the upper zone layer [1/T/mm^alpha].

  • K4() Recession coefficient of the lower zone layer [1/T].

  • Gamma() Nonlinearity parameter of the lower zone layer [-].

  • MaxBaz() Base length of the triangle unit hydrograph [T].

  • Abstr() Abstraction of water from computed outflow [m³/s].

class hydpy.models.hland.hland_control.Area(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Subbasin area [km²].

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (1e-10, None)
name: str = 'area'
unit: str = 'km²'
class hydpy.models.hland.hland_control.NmbZones(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Number of zones (hydrological response units) in a subbasin [-].

Required by the methods:

Calc_CF_SM_V1 Calc_ContriArea_V1 Calc_EA_SM_V1 Calc_EI_Ic_V1 Calc_EL_LZ_V1 Calc_EPC_V1 Calc_EP_V1 Calc_FracRain_V1 Calc_GlMelt_In_V1 Calc_InUZ_V1 Calc_In_WC_V1 Calc_LZ_V1 Calc_Melt_SP_WC_V1 Calc_PC_V1 Calc_RFC_SFC_V1 Calc_R_SM_V1 Calc_Refr_SP_WC_V1 Calc_SP_WC_V1 Calc_TC_V1 Calc_TF_Ic_V1 Calc_TMean_V1

Note that NmbZones determines the length of most 1-dimensional HydPy-H-Land parameters and sequences. This required that the value of the respective NmbZones instance is set before any of the values of these 1-dimensional parameters or sequences are set. Changing the value of the NmbZones instance necessitates setting their values again.

Examples:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> icmax.shape
(5,)
>>> states.ic.shape
(5,)
NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (1, None)
name: str = 'nmbzones'
unit: str = '-'
class hydpy.models.hland.hland_control.ZoneType(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Type of each zone.

Required by the methods:

Calc_CF_SM_V1 Calc_ContriArea_V1 Calc_EA_SM_V1 Calc_EI_Ic_V1 Calc_EL_LZ_V1 Calc_GlMelt_In_V1 Calc_InUZ_V1 Calc_In_WC_V1 Calc_LZ_V1 Calc_Melt_SP_WC_V1 Calc_R_SM_V1 Calc_Refr_SP_WC_V1 Calc_SP_WC_V1 Calc_TF_Ic_V1

For increasing legibility, the HydPy-H-Land constants are used for string representions of ZoneType objects:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(6)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE, ILAKE, FIELD)
>>> zonetype.values
array([1, 2, 3, 4, 4, 1])
>>> zonetype
zonetype(FIELD, FOREST, GLACIER, ILAKE, ILAKE, FIELD)
NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (1, 4)
CONSTANTS: hydpy.core.parametertools.Constants = {'FIELD': 1, 'FOREST': 2, 'GLACIER': 3, 'ILAKE': 4}
name: str = 'zonetype'
unit: str = '?'
class hydpy.models.hland.hland_control.ZoneArea(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Zone area [km²].

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'zonearea'
unit: str = 'km²'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.ZoneZ(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Zone elevation [100m].

Required by the methods:

Calc_EPC_V1 Calc_PC_V1 Calc_TC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'zonez'
unit: str = '100m'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.ZRelP(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Subbasin-wide reference elevation level for precipitation [100m].

Required by the method:

Calc_PC_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'zrelp'
unit: str = '100m'
class hydpy.models.hland.hland_control.ZRelT(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Subbasin-wide reference elevation level for temperature [100m].

Required by the method:

Calc_TC_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'zrelt'
unit: str = '100m'
class hydpy.models.hland.hland_control.ZRelE(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Subbasin-wide reference elevation level for evaporation [100m].

Required by the method:

Calc_EPC_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'zrele'
unit: str = '100m'
class hydpy.models.hland.hland_control.PCorr(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

General precipitation correction factor [-].

Required by the method:

Calc_PC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'pcorr'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.PCAlt(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Elevation correction factor for precipitation [-1/100m].

Required by the method:

Calc_PC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'pcalt'
unit: str = '-1/100m'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.RfCF(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Rainfall correction factor [-].

Required by the method:

Calc_RFC_SFC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'rfcf'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.SfCF(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Snowfall correction factor [-].

Required by the method:

Calc_RFC_SFC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'sfcf'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.TCAlt(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Elevation correction factor for temperature [-1°C/100m].

Required by the method:

Calc_TC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'tcalt'
unit: str = '-1°C/100m'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.ECorr(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

General evaporation correction factor [-].

Required by the method:

Calc_EPC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'ecorr'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.ECAlt(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Elevation correction factor for evaporation [-1/100m].

Required by the method:

Calc_EPC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'ecalt'
unit: str = '-1/100m'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.EPF(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Decrease in potential evaporation due to precipitation [T/mm].

Required by the method:

Calc_EPC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'epf'
unit: str = 'T/mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.ETF(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Temperature factor for evaporation [1/°C].

Required by the method:

Calc_EP_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'etf'
unit: str = '1/°C'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.ERed(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Factor for restricting actual to potential evaporation [-].

Required by the method:

Calc_EA_SM_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
name: str = 'ered'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.TTIce(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Temperature threshold for lake evaporation [°C].

Required by the method:

Calc_EL_LZ_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'ttice'
unit: str = '°C'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.IcMax(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Maximum interception storage [mm].

Required by the method:

Calc_TF_Ic_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'icmax'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.TT(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Temperature threshold for snow/rain [°C].

Required by the method:

Calc_FracRain_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'tt'
unit: str = '°C'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.TTInt(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Temperature interval with a mixture of snow and rain [°C].

Required by the method:

Calc_FracRain_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'ttint'
unit: str = '°C'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.DTTM(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Difference between TTM and TT [°C].

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'dttm'
unit: str = '°C'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.CFMax(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Degree day factor for snow (on glaciers or not) [mm/°C/T].

Required by the methods:

Calc_Melt_SP_WC_V1 Calc_Refr_SP_WC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = True
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'cfmax'
unit: str = 'mm/°C/T'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.GMelt(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Degree day factor for glacial ice [mm/°C/T].

Required by the method:

Calc_GlMelt_In_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = True
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'gmelt'
unit: str = 'mm/°C/T'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.CFR(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Refreezing factor for water stored within the snow layer [-].

Required by the method:

Calc_Refr_SP_WC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'cfr'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.WHC(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Relative water holding capacity of the snow layer [-].

Required by the method:

Calc_In_WC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'whc'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.FC(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Maximum soil moisture content (field capacity) [mm].

Required by the methods:

Calc_CF_SM_V1 Calc_ContriArea_V1 Calc_EA_SM_V1 Calc_R_SM_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'fc'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.LP(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Relative limit for potential evaporation [-].

Required by the method:

Calc_EA_SM_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
name: str = 'lp'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.Beta(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Nonlinearity parameter of the soil routine [-].

Required by the methods:

Calc_ContriArea_V1 Calc_R_SM_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'beta'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.PercMax(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Maximum percolation rate [mm/T].

Required by the method:

Calc_Q0_Perc_UZ_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = True
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'percmax'
unit: str = 'mm/T'
class hydpy.models.hland.hland_control.CFlux(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Capacity (maximum) of the capillary return flux [mm/T].

Required by the method:

Calc_CF_SM_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = True
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'cflux'
unit: str = 'mm/T'
subvars: SubVariablesType
class hydpy.models.hland.hland_control.RespArea(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Flag to enable the contributing area approach [-].

Required by the method:

Calc_ContriArea_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'resparea'
unit: str = '-'
class hydpy.models.hland.hland_control.RecStep(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Number of internal computation steps per simulation time step [-].

Required by the method:

Calc_Q0_Perc_UZ_V1

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> recstep(4.2)
>>> recstep
recstep(4.0)
NDIM: int = 0
TYPE
TIME: Optional[bool] = True
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (1, None)
name: str = 'recstep'
unit: str = '-'
class hydpy.models.hland.hland_control.Alpha(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Nonlinearity parameter of the upper zone layer [-].

Required by the method:

Calc_Q0_Perc_UZ_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'alpha'
unit: str = '-'
class hydpy.models.hland.hland_control.K(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Recession coefficient of the upper zone layer [1/T/mm^alpha].

Required by the method:

Calc_Q0_Perc_UZ_V1

In addition to the Parameter call method, it is possible to set the value of parameter K in accordance to the keyword arguments khq, hq and (optionally) alpha. If alpha is not given, the value of the respective Alpha instance is taken. This requires the Alpha instance to be initialized beforehand.

Basic Equation:

\(K = \frac{HQ}{(HQ/KHQ)^{1+Alpha}}\)

Examples:

When directly setting the value of parameter k, one only needs to be aware of its time dependence:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> k(2.0)
>>> k
k(2.0)
>>> k.value
1.0

Alternatively, one can specify the following three keyword arguments directly,…

>>> k(hq=10.0, khq=2.0, alpha=1.0)
>>> k
k(0.4)
>>> k.value
0.2

…or define the value of parameter alpha beforehand:

>>> alpha(2.0)
>>> k(hq=10.0, khq=2.0)
>>> k
k(0.08)
>>> k.value
0.04

The following exceptions occur for wrong combinations of keyword arguments or when Alpha has not been prepared beforehand (still has the value nan):

>>> k(wrong=1)
Traceback (most recent call last):
...
ValueError: For parameter `k` of element `?` a value can be set directly or indirectly by using the keyword arguments `khq` and `hq`.
>>> k(hq=10.0)
Traceback (most recent call last):
...
ValueError: For the alternative calculation of parameter `k` of element `?`, at least the keywords arguments `khq` and `hq` must be given.
>>> import numpy
>>> alpha(numpy.nan)
>>> k(hq=10.0, khq=2.0)
Traceback (most recent call last):
...
RuntimeError: For the alternative calculation of parameter `k` of element `?`, either the keyword argument `alpha` must be given or the value of parameter `alpha` must be defined beforehand.
NDIM: int = 0
TYPE
TIME: Optional[bool] = True
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'k'
unit: str = '1/T/mm^alpha'
class hydpy.models.hland.hland_control.K4(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Recession coefficient of the lower zone layer [1/T].

Required by the method:

Calc_Q1_LZ_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = True
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'k4'
unit: str = '1/T'
class hydpy.models.hland.hland_control.Gamma(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Nonlinearity parameter of the lower zone layer [-].

Required by the method:

Calc_Q1_LZ_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'gamma'
unit: str = '-'
class hydpy.models.hland.hland_control.MaxBaz(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Base length of the triangle unit hydrograph [T].

NDIM: int = 0
TYPE
TIME: Optional[bool] = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'maxbaz'
unit: str = 'T'
class hydpy.models.hland.hland_control.Abstr(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Abstraction of water from computed outflow [m³/s].

Required by the method:

Calc_QT_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
name: str = 'abstr'
unit: str = 'm³/s'

Derived parameters

class hydpy.models.hland.DerivedParameters(master: hydpy.core.parametertools.Parameters, cls_fastaccess: Optional[Type[hydpy.core.parametertools.FastAccessParameter]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.variabletools.SubVariables[hydpy.core.parametertools.Parameters, Parameter, hydpy.core.parametertools.FastAccessParameter]

Derived parameters of model hland.

The following classes are selected:
class hydpy.models.hland.hland_derived.RelSoilArea(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Relative area of all FIELD and FOREST zones [-].

Required by the method:

Calc_ContriArea_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
update()[source]

Update RelSoilArea based on Area, ZoneArea, and ZoneType.

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE)
>>> area(100.0)
>>> zonearea(10.0, 20.0, 30.0, 40.0)
>>> derived.relsoilarea.update()
>>> derived.relsoilarea
relsoilarea(0.3)
name: str = 'relsoilarea'
unit: str = '-'
class hydpy.models.hland.hland_derived.RelLandArea(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Relative area of all FIELD, FOREST, and GLACIER zones [-].

Required by the methods:

Calc_InUH_V1 Calc_LZ_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
update()[source]

Update RelLandArea based on Area, ZoneArea, and ZoneType.

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE)
>>> area(100.0)
>>> zonearea(10.0, 20.0, 30.0, 40.0)
>>> derived.rellandarea.update()
>>> derived.rellandarea
rellandarea(0.6)
name: str = 'rellandarea'
unit: str = '-'
class hydpy.models.hland.hland_derived.RelZoneArea(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Relative zone area of all zone types [-].

Required by the methods:

Calc_EL_LZ_V1 Calc_LZ_V1 Calc_TMean_V1

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE)
>>> zonearea(10.0, 40.0, 20.0, 30.0)
>>> derived.relzonearea.update()
>>> derived.relzonearea
relzonearea(field=0.1, forest=0.4, glacier=0.2, ilake=0.3)
NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
strict_valuehandling: ClassVar[bool] = False
name: str = 'relzonearea'
unit: str = '-'
class hydpy.models.hland.hland_derived.RelSoilZoneArea(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Relative zone area of all FIELD and FOREST zones [-].

Required by the method:

Calc_ContriArea_V1

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE)
>>> zonearea(10.0, 40.0, 20.0, 30.0)
>>> derived.relsoilzonearea.update()
>>> derived.relsoilzonearea
relsoilzonearea(field=0.2, forest=0.8)
NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
strict_valuehandling: ClassVar[bool] = False
name: str = 'relsoilzonearea'
unit: str = '-'
class hydpy.models.hland.hland_derived.RelLandZoneArea(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Relative zone area of all FIELD, FOREST, and GLACIER zones [-].

Required by the method:

Calc_InUZ_V1

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE)
>>> zonearea(10.0, 40.0, 20.0, 30.0)
>>> derived.rellandzonearea.update()
>>> derived.rellandzonearea
rellandzonearea(field=0.142857, forest=0.571429, glacier=0.285714)
NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
strict_valuehandling: ClassVar[bool] = False
name: str = 'rellandzonearea'
unit: str = '-'
class hydpy.models.hland.hland_derived.TTM(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Threshold temperature for snow melting and refreezing [°C].

Required by the methods:

Calc_GlMelt_In_V1 Calc_Melt_SP_WC_V1 Calc_Refr_SP_WC_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
update()[source]

Update TTM based on \(TTM = TT+DTTM\).

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(1)
>>> zonetype(FIELD)
>>> tt(1.0)
>>> dttm(-2.0)
>>> derived.ttm.update()
>>> derived.ttm
ttm(-1.0)
name: str = 'ttm'
unit: str = '°C'
subvars: SubVariablesType
class hydpy.models.hland.hland_derived.DT(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Relative time step length for the upper zone layer calculations [-].

Required by the method:

Calc_Q0_Perc_UZ_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
update()[source]

Update DT based on \(DT = \frac{1}{RecStep}\).

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> recstep(2.0)
>>> derived.dt.update()
>>> derived.dt
dt(1.0)
>>> recstep(10.0)
>>> derived.dt.update()
>>> derived.dt
dt(0.2)

Note that the value assigned to recstep is related to the given parameter step size of one day. The actually applied recstep of the last example is:

>>> recstep.value
5
name: str = 'dt'
unit: str = '-'
class hydpy.models.hland.hland_derived.UH(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Unit hydrograph ordinates based on a isosceles triangle [-].

Required by the method:

Calc_OutUH_QUH_V1

NDIM: int = 1
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, 1.0)
strict_valuehandling: ClassVar[bool] = False
update()[source]

Update UH based on MaxBaz.

Note

This method also updates the shape of log sequence QUH.

MaxBaz determines the end point of the triangle. A value of MaxBaz being not larger than the simulation step size is identical with applying no unit hydrograph at all:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> maxbaz(0.0)
>>> derived.uh.update()
>>> logs.quh.shape
(1,)
>>> derived.uh
uh(1.0)

Note that, due to difference of the parameter and the simulation step size in the given example, the largest assignment resulting in a inactive unit hydrograph is 1/2:

>>> maxbaz(0.5)
>>> derived.uh.update()
>>> logs.quh.shape
(1,)
>>> derived.uh
uh(1.0)

When MaxBaz is in accordance with two simulation steps, both unit hydrograph ordinats must be 1/2 due to symmetry of the triangle:

>>> maxbaz(1.0)
>>> derived.uh.update()
>>> logs.quh.shape
(2,)
>>> derived.uh
uh(0.5)
>>> derived.uh.values
array([ 0.5,  0.5])

A MaxBaz value in accordance with three simulation steps results in the ordinate values 2/9, 5/9, and 2/9:

>>> maxbaz(1.5)
>>> derived.uh.update()
>>> logs.quh.shape
(3,)
>>> derived.uh
uh(0.222222, 0.555556, 0.222222)

And a final example, where the end of the triangle lies within a simulation step, resulting in the fractions 8/49, 23/49, 16/49, and 2/49:

>>> maxbaz(1.75)
>>> derived.uh.update()
>>> logs.quh.shape
(4,)
>>> derived.uh
uh(0.163265, 0.469388, 0.326531, 0.040816)
name: str = 'uh'
unit: str = '-'
class hydpy.models.hland.hland_derived.QFactor(subvars: SubVariablesType)[source]

Bases: hydpy.core.variabletools.Variable[hydpy.core.parametertools.SubParameters, hydpy.core.parametertools.FastAccessParameter]

Factor for converting mm/stepsize to m³/s.

Required by the method:

Calc_QT_V1

NDIM: int = 0
TYPE
TIME: Optional[bool] = None
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
update()[source]

Update QFactor based on Area and the current simulation step size.

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> simulationstep("12h")
>>> area(50.0)
>>> derived.qfactor.update()
>>> derived.qfactor
qfactor(1.157407)
name: str = 'qfactor'
unit: str = '?'

Sequence Features

Sequence tools

class hydpy.models.hland.hland_sequences.Flux1DSequence(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Base class for 1-dimensional flux subclasses that support aggregation with respect to ZoneArea.

All Flux1DSequence subclasses should stick to the mask Complete.

The following example shows how subclass PC works:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE)
>>> zonearea(10.0, 20.0, 30.0, 40.0)
>>> fluxes.pc(5.0, 2.0, 4.0, 1.0)
>>> from hydpy import round_
>>> round_(fluxes.pc.average_values())
2.5
mask
property refweights

Alias for the associated instance of ZoneArea for calculating areal values.

name: str = 'flux1dsequence'
unit: str = '?'
class hydpy.models.hland.hland_sequences.State1DSequence(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.StateSequences], hydpy.core.sequencetools.ConditionSequence[hydpy.core.sequencetools.StateSequences, hydpy.core.sequencetools.FastAccessOutputSequence]

Base class for 1-dimensional state subclasses that support aggregation with respect to ZoneArea.

All State1DSequence subclasses must implement fitting mask objects individually.

The following example shows how subclass SM works, which implements mask Soil:

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(4)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE)
>>> zonearea(10.0, 20.0, 30.0, 40.0)
>>> fc(100.0)
>>> states.sm(50.0, 20.0, 40.0, 10.0)
>>> from hydpy import round_
>>> round_(states.sm.average_values())
30.0
mask
property refweights

Alias for the associated instance of ZoneArea for calculating areal values.

name: str = 'state1dsequence'
unit: str = '?'
fastaccess_new: hydpy.core.sequencetools.FastAccessOutputSequence
fastaccess_old: hydpy.core.variabletools.FastAccess

Input sequences

class hydpy.models.hland.InputSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.ModelIOSequences[InputSequence, hydpy.core.sequencetools.FastAccessInputSequence]

Input sequences of model hland.

The following classes are selected:
  • P() Precipitation [mm].

  • T() Temperature [°C].

  • TN() Normal temperature [°C].

  • EPN() Normal potential evaporation [mm].

class hydpy.models.hland.hland_inputs.P(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.ModelIOSequence[hydpy.core.sequencetools.InputSequences, hydpy.core.sequencetools.FastAccessInputSequence]

Precipitation [mm].

Required by the method:

Calc_PC_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'p'
unit: str = 'mm'
class hydpy.models.hland.hland_inputs.T(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.ModelIOSequence[hydpy.core.sequencetools.InputSequences, hydpy.core.sequencetools.FastAccessInputSequence]

Temperature [°C].

Required by the method:

Calc_TC_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 't'
unit: str = '°C'
class hydpy.models.hland.hland_inputs.TN(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.ModelIOSequence[hydpy.core.sequencetools.InputSequences, hydpy.core.sequencetools.FastAccessInputSequence]

Normal temperature [°C].

Required by the method:

Calc_EP_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'tn'
unit: str = '°C'
class hydpy.models.hland.hland_inputs.EPN(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.ModelIOSequence[hydpy.core.sequencetools.InputSequences, hydpy.core.sequencetools.FastAccessInputSequence]

Normal potential evaporation [mm].

Required by the method:

Calc_EP_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'epn'
unit: str = 'mm'

Flux sequences

class hydpy.models.hland.FluxSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.OutputSequences[FluxSequence]

Flux sequences of model hland.

The following classes are selected:
  • TMean() Mean subbasin temperature [°C].

  • TC() Corrected temperature [°C].

  • FracRain() Fraction rainfall / total precipitation [-].

  • RfC() Actual precipitation correction related to liquid precipitation [-].

  • SfC() Actual precipitation correction related to frozen precipitation [-].

  • PC() Corrected precipitation [mm].

  • EP() Potential evaporation [mm].

  • EPC() Corrected potential evaporation [mm].

  • EI() Interception evaporation [mm].

  • TF() Throughfall [mm].

  • GlMelt() Glacier melt [mm].

  • Melt() Actual melting of frozen water stored in the snow layer [mm].

  • Refr() Actual (re)freezing of liquid water stored in the snow layer [mm].

  • In_() Snow module release/soil module inflow [mm].

  • R() Effective soil response [mm].

  • EA() Actual soil evaporation [mm].

  • CF() Actual capillary flow [mm].

  • ContriArea() Fraction of the soil area contributing to runoff generation [-].

  • InUZ() Inflow to the upper zone layer [mm].

  • Perc() Percolation from the upper to the lower zone layer [mm].

  • Q0() Outflow from the upper zone layer [mm].

  • EL() Actual lake evaporation [mm].

  • Q1() Outflow from the lower zone layer [mm].

  • InUH() Input of the triangle unit hydrograph [m].

  • OutUH() Output of the triangle unit hydrograph [m].

  • QT() Total model outflow [m³/s].

class hydpy.models.hland.hland_fluxes.TMean(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Mean subbasin temperature [°C].

Calculated by the method:

Calc_TMean_V1

Required by the method:

Calc_EP_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'tmean'
unit: str = '°C'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.TC(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Corrected temperature [°C].

Calculated by the method:

Calc_TC_V1

Required by the methods:

Calc_EL_LZ_V1 Calc_FracRain_V1 Calc_GlMelt_In_V1 Calc_Melt_SP_WC_V1 Calc_Refr_SP_WC_V1 Calc_TMean_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'tc'
unit: str = '°C'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.FracRain(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Fraction rainfall / total precipitation [-].

Calculated by the method:

Calc_FracRain_V1

Required by the method:

Calc_RFC_SFC_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'fracrain'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.RfC(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Actual precipitation correction related to liquid precipitation [-].

Calculated by the method:

Calc_RFC_SFC_V1

Required by the methods:

Calc_PC_V1 Calc_SP_WC_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'rfc'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.SfC(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Actual precipitation correction related to frozen precipitation [-].

Calculated by the method:

Calc_RFC_SFC_V1

Required by the methods:

Calc_PC_V1 Calc_SP_WC_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'sfc'
unit: str = '-'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.PC(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Corrected precipitation [mm].

Calculated by the method:

Calc_PC_V1

Required by the methods:

Calc_EPC_V1 Calc_LZ_V1 Calc_TF_Ic_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'pc'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.EP(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Potential evaporation [mm].

Calculated by the method:

Calc_EP_V1

Required by the method:

Calc_EPC_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'ep'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.EPC(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Corrected potential evaporation [mm].

Calculated by the method:

Calc_EPC_V1

Required by the methods:

Calc_EA_SM_V1 Calc_EI_Ic_V1 Calc_EL_LZ_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'epc'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.EI(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Interception evaporation [mm].

Calculated by the method:

Calc_EI_Ic_V1

Required by the method:

Calc_EA_SM_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'ei'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.TF(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Throughfall [mm].

Calculated by the method:

Calc_TF_Ic_V1

Required by the methods:

Calc_In_WC_V1 Calc_SP_WC_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'tf'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.GlMelt(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Glacier melt [mm].

Calculated by the method:

Calc_GlMelt_In_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'glmelt'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.Melt(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Actual melting of frozen water stored in the snow layer [mm].

Calculated by the method:

Calc_Melt_SP_WC_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'melt'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.Refr(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Actual (re)freezing of liquid water stored in the snow layer [mm].

Calculated by the method:

Calc_Refr_SP_WC_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'refr'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.In_(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Snow module release/soil module inflow [mm].

Calculated by the method:

Calc_In_WC_V1

Updated by the method:

Calc_GlMelt_In_V1

Required by the method:

Calc_R_SM_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'in_'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.R(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Effective soil response [mm].

Calculated by the method:

Calc_R_SM_V1

Required by the methods:

Calc_CF_SM_V1 Calc_InUZ_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'r'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.EA(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Actual soil evaporation [mm].

Calculated by the method:

Calc_EA_SM_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'ea'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.CFPot(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Potential capillary flow [mm].

NDIM: int = 1
NUMERIC: bool = False
name: str = 'cfpot'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.CF(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Actual capillary flow [mm].

Calculated by the method:

Calc_CF_SM_V1

Required by the method:

Calc_InUZ_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'cf'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_fluxes.ContriArea(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Fraction of the soil area contributing to runoff generation [-].

Calculated by the method:

Calc_ContriArea_V1

Required by the method:

Calc_Q0_Perc_UZ_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'contriarea'
unit: str = '-'
class hydpy.models.hland.hland_fluxes.InUZ(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Inflow to the upper zone layer [mm].

Calculated by the method:

Calc_InUZ_V1

Required by the method:

Calc_Q0_Perc_UZ_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'inuz'
unit: str = 'mm'
class hydpy.models.hland.hland_fluxes.Perc(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Percolation from the upper to the lower zone layer [mm].

Calculated by the method:

Calc_Q0_Perc_UZ_V1

Required by the method:

Calc_LZ_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'perc'
unit: str = 'mm'
class hydpy.models.hland.hland_fluxes.Q0(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Outflow from the upper zone layer [mm].

Calculated by the method:

Calc_Q0_Perc_UZ_V1

Required by the method:

Calc_InUH_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'q0'
unit: str = 'mm'
class hydpy.models.hland.hland_fluxes.EL(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Actual lake evaporation [mm].

Calculated by the method:

Calc_EL_LZ_V1

NDIM: int = 1
NUMERIC: bool = False
name: str = 'el'
unit: str = 'mm'
class hydpy.models.hland.hland_fluxes.Q1(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Outflow from the lower zone layer [mm].

Calculated by the method:

Calc_Q1_LZ_V1

Required by the method:

Calc_InUH_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'q1'
unit: str = 'mm'
class hydpy.models.hland.hland_fluxes.InUH(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Input of the triangle unit hydrograph [m].

Calculated by the method:

Calc_InUH_V1

Required by the method:

Calc_OutUH_QUH_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'inuh'
unit: str = 'm'
class hydpy.models.hland.hland_fluxes.OutUH(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Output of the triangle unit hydrograph [m].

Calculated by the method:

Calc_OutUH_QUH_V1

Required by the method:

Calc_QT_V1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'outuh'
unit: str = 'm'
class hydpy.models.hland.hland_fluxes.QT(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.FluxSequences]

Total model outflow [m³/s].

Calculated by the method:

Calc_QT_V1

Required by the method:

Pass_Q_v1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'qt'
unit: str = 'm³/s'

State sequences

class hydpy.models.hland.StateSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.OutputSequences[StateSequence]

State sequences of model hland.

The following classes are selected:
  • Ic() Interception storage [mm].

  • SP() Frozen water stored in the snow layer [mm].

  • WC() Liquid water content of the snow layer [mm].

  • SM() Soil moisture [mm].

  • UZ() Storage in the upper zone layer [mm].

  • LZ() Storage in the lower zone layer [mm].

class hydpy.models.hland.hland_states.Ic(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.StateSequences], hydpy.core.sequencetools.ConditionSequence[hydpy.core.sequencetools.StateSequences, hydpy.core.sequencetools.FastAccessOutputSequence]

Interception storage [mm].

Updated by the methods:

Calc_EI_Ic_V1 Calc_TF_Ic_V1

NDIM: int = 1
NUMERIC: bool = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
mask
trim(lower=None, upper=None)[source]

Trim upper values in accordance with \(IC \leq ICMAX\).

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> icmax(2.0)
>>> states.ic(-1.0, 0.0, 1.0, 2.0, 3.0)
>>> states.ic
ic(0.0, 0.0, 1.0, 2.0, 2.0)
name: str = 'ic'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_states.SP(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.StateSequences], hydpy.core.sequencetools.ConditionSequence[hydpy.core.sequencetools.StateSequences, hydpy.core.sequencetools.FastAccessOutputSequence]

Frozen water stored in the snow layer [mm].

Updated by the methods:

Calc_Melt_SP_WC_V1 Calc_Refr_SP_WC_V1 Calc_SP_WC_V1

Required by the methods:

Calc_EA_SM_V1 Calc_GlMelt_In_V1 Calc_In_WC_V1

NDIM: int = 1
NUMERIC: bool = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
mask
trim(lower=None, upper=None)[source]

Trim values in accordance with \(WC \leq WHC \cdot SP\).

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(7)
>>> whc(0.1)
>>> states.sp(-1., 0., 0., 5., 5., 5., 5.)
>>> states.sp
sp(0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 5.0)
>>> states.wc.values = -1.0, 0.0, 1.0, -1.0, 0.0, 0.5, 1.0
>>> states.sp(-1., 0., 0., 5., 5., 5., 5.)
>>> states.sp
sp(0.0, 0.0, 10.0, 5.0, 5.0, 5.0, 10.0)
name: str = 'sp'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_states.WC(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.StateSequences], hydpy.core.sequencetools.ConditionSequence[hydpy.core.sequencetools.StateSequences, hydpy.core.sequencetools.FastAccessOutputSequence]

Liquid water content of the snow layer [mm].

Updated by the methods:

Calc_In_WC_V1 Calc_Melt_SP_WC_V1 Calc_Refr_SP_WC_V1 Calc_SP_WC_V1

NDIM: int = 1
NUMERIC: bool = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
mask
trim(lower=None, upper=None)[source]

Trim values in accordance with \(WC \leq WHC \cdot SP\).

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(7)
>>> whc(0.1)
>>> states.sp = 0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 5.0
>>> states.wc(-1.0, 0.0, 1.0, -1.0, 0.0, 0.5, 1.0)
>>> states.wc
wc(0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5)
name: str = 'wc'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_states.SM(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.StateSequences], hydpy.core.sequencetools.ConditionSequence[hydpy.core.sequencetools.StateSequences, hydpy.core.sequencetools.FastAccessOutputSequence]

Soil moisture [mm].

Updated by the methods:

Calc_CF_SM_V1 Calc_EA_SM_V1 Calc_R_SM_V1

Required by the method:

Calc_ContriArea_V1

NDIM: int = 1
NUMERIC: bool = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
mask
trim(lower=None, upper=None)[source]

Trim values in accordance with \(SM \leq FC\).

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(5)
>>> fc(200.0)
>>> states.sm(-100.0, 0.0, 100.0, 200.0, 300.0)
>>> states.sm
sm(0.0, 0.0, 100.0, 200.0, 200.0)
name: str = 'sm'
unit: str = 'mm'
subvars: SubVariablesType
class hydpy.models.hland.hland_states.UZ(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.StateSequences], hydpy.core.sequencetools.ConditionSequence[hydpy.core.sequencetools.StateSequences, hydpy.core.sequencetools.FastAccessOutputSequence]

Storage in the upper zone layer [mm].

Updated by the method:

Calc_Q0_Perc_UZ_V1

Required by the method:

Calc_CF_SM_V1

NDIM: int = 0
NUMERIC: bool = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'uz'
unit: str = 'mm'
class hydpy.models.hland.hland_states.LZ(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.OutputSequence[hydpy.core.sequencetools.StateSequences], hydpy.core.sequencetools.ConditionSequence[hydpy.core.sequencetools.StateSequences, hydpy.core.sequencetools.FastAccessOutputSequence]

Storage in the lower zone layer [mm].

Updated by the methods:

Calc_EL_LZ_V1 Calc_LZ_V1 Calc_Q1_LZ_V1

NDIM: int = 0
NUMERIC: bool = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (None, None)
trim(lower=None, upper=None)[source]

Trim negative value whenever there is no internal lake within the respective subbasin.

>>> from hydpy.models.hland import *
>>> parameterstep("1d")
>>> nmbzones(2)
>>> zonetype(FIELD, ILAKE)
>>> states.lz(-1.0)
>>> states.lz
lz(-1.0)
>>> zonetype(FIELD, FOREST)
>>> states.lz(-1.0)
>>> states.lz
lz(0.0)
>>> states.lz(1.0)
>>> states.lz
lz(1.0)
name: str = 'lz'
unit: str = 'mm'

Log sequences

class hydpy.models.hland.LogSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.ModelSequences[LogSequence, hydpy.core.variabletools.FastAccess]

Log sequences of model hland.

The following classes are selected:
  • QUH() Whole outflow delayed by means of the unit hydrograph [mm].

class hydpy.models.hland.hland_logs.QUH(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.ConditionSequence[hydpy.core.sequencetools.LogSequences, hydpy.core.variabletools.FastAccess]

Whole outflow delayed by means of the unit hydrograph [mm].

Updated by the method:

Calc_OutUH_QUH_V1

The last value is always set to zero to avoid biased results:

>>> from hydpy.models.hland import *
>>> parameterstep("1h")
>>> simulationstep("1h")
>>> maxbaz(3.0)
>>> derived.uh.update()
>>> logs.quh(1.0, 2.0, 1.0)
>>> logs.quh
quh(1.0, 2.0, 0.0)

When a wrong number of input values is given, QUH distributes their sum equally and emits the following warning:

>>> logs.quh(1.0, 2.0, 3.0, 0.0)   
Traceback (most recent call last):
...
UserWarning: Due to the following problem, log sequence `quh` of element `?` handling model `hland` could be initialised with a averaged value only: While trying to set the value(s) of variable `quh`, the following error occurred: While trying to convert the value(s) `(1.0, 2.0, 3.0, 0.0)` to a numpy ndarray with shape `(3...)` and type `float`, the following error occurred: could not broadcast input array from shape (4...) into shape (3...)
>>> logs.quh
quh(3.0, 3.0, 0.0)
NDIM: int = 1
NUMERIC: bool = False
SPAN: Tuple[Union[int, float, bool, None], Union[int, float, bool, None]] = (0.0, None)
name: str = 'quh'
unit: str = 'mm'

Outlet sequences

class hydpy.models.hland.OutletSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.LinkSequences[OutletSequence]

Outlet sequences of model hland.

The following classes are selected:
  • Q() Runoff [m³/s].

class hydpy.models.hland.hland_outlets.Q(subvars: SubVariablesType)[source]

Bases: hydpy.core.sequencetools.LinkSequence[hydpy.core.sequencetools.OutletSequences]

Runoff [m³/s].

Calculated by the method:

Pass_Q_v1

NDIM: int = 0
NUMERIC: bool = False
name: str = 'q'
unit: str = 'm³/s'

Auxiliary Features

Masks

class hydpy.models.hland.Masks[source]

Bases: hydpy.core.masktools.Masks

Masks of base model hland.

The following classes are selected:
class hydpy.models.hland.hland_masks.HLandBaseMask(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.core.masktools.IndexMask

To be overridden.

static get_refindices(variable)[source]

Reference to the associated instance of ZoneType.

name: str = 'hlandbasemask'
RELEVANT_VALUES: Tuple[int, ]
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.hland_masks.Complete(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.models.hland.hland_masks.HLandBaseMask

Mask including all types of zones.

RELEVANT_VALUES: Tuple[int, ] = (1, 2, 4, 3)
name: str = 'complete'
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.hland_masks.Land(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.models.hland.hland_masks.HLandBaseMask

Mask including zones of type FIELD, FOREST, and GLACIER.

RELEVANT_VALUES: Tuple[int, ] = (1, 2, 3)
name: str = 'land'
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.hland_masks.NoGlacier(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.models.hland.hland_masks.HLandBaseMask

Mask including zones of type FIELD, FOREST, and ILAKE.

RELEVANT_VALUES: Tuple[int, ] = (1, 2, 4)
name: str = 'noglacier'
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.hland_masks.Soil(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.models.hland.hland_masks.HLandBaseMask

Mask including zones of type FIELD and FOREST.

RELEVANT_VALUES: Tuple[int, ] = (1, 2)
name: str = 'soil'
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.hland_masks.Field(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.models.hland.hland_masks.HLandBaseMask

Mask for zone type FIELD.

RELEVANT_VALUES: Tuple[int, ] = (1,)
name: str = 'field'
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.hland_masks.Forest(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.models.hland.hland_masks.HLandBaseMask

Mask for zone type FOREST.

RELEVANT_VALUES: Tuple[int, ] = (2,)
name: str = 'forest'
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.hland_masks.ILake(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.models.hland.hland_masks.HLandBaseMask

Mask for zone type ILAKE.

RELEVANT_VALUES: Tuple[int, ] = (4,)
name: str = 'ilake'
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.hland_masks.Glacier(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]

Bases: hydpy.models.hland.hland_masks.HLandBaseMask

Mask for zone type GLACIER.

RELEVANT_VALUES: Tuple[int, ] = (3,)
name: str = 'glacier'
variable: hydpy.core.typingtools.VariableProtocol
class hydpy.models.hland.ControlParameters(master: hydpy.core.parametertools.Parameters, cls_fastaccess: Optional[Type[hydpy.core.parametertools.FastAccessParameter]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.variabletools.SubVariables[hydpy.core.parametertools.Parameters, Parameter, hydpy.core.parametertools.FastAccessParameter]

Control parameters of model hland.

The following classes are selected:
  • Area() Subbasin area [km²].

  • NmbZones() Number of zones (hydrological response units) in a subbasin [-].

  • ZoneType() Type of each zone.

  • ZoneArea() Zone area [km²].

  • ZoneZ() Zone elevation [100m].

  • ZRelP() Subbasin-wide reference elevation level for precipitation [100m].

  • ZRelT() Subbasin-wide reference elevation level for temperature [100m].

  • ZRelE() Subbasin-wide reference elevation level for evaporation [100m].

  • PCorr() General precipitation correction factor [-].

  • PCAlt() Elevation correction factor for precipitation [-1/100m].

  • RfCF() Rainfall correction factor [-].

  • SfCF() Snowfall correction factor [-].

  • TCAlt() Elevation correction factor for temperature [-1°C/100m].

  • ECorr() General evaporation correction factor [-].

  • ECAlt() Elevation correction factor for evaporation [-1/100m].

  • EPF() Decrease in potential evaporation due to precipitation [T/mm].

  • ETF() Temperature factor for evaporation [1/°C].

  • ERed() Factor for restricting actual to potential evaporation [-].

  • TTIce() Temperature threshold for lake evaporation [°C].

  • IcMax() Maximum interception storage [mm].

  • TT() Temperature threshold for snow/rain [°C].

  • TTInt() Temperature interval with a mixture of snow and rain [°C].

  • DTTM() Difference between TTM and TT [°C].

  • CFMax() Degree day factor for snow (on glaciers or not) [mm/°C/T].

  • GMelt() Degree day factor for glacial ice [mm/°C/T].

  • CFR() Refreezing factor for water stored within the snow layer [-].

  • WHC() Relative water holding capacity of the snow layer [-].

  • FC() Maximum soil moisture content (field capacity) [mm].

  • LP() Relative limit for potential evaporation [-].

  • Beta() Nonlinearity parameter of the soil routine [-].

  • PercMax() Maximum percolation rate [mm/T].

  • CFlux() Capacity (maximum) of the capillary return flux [mm/T].

  • RespArea() Flag to enable the contributing area approach [-].

  • RecStep() Number of internal computation steps per simulation time step [-].

  • Alpha() Nonlinearity parameter of the upper zone layer [-].

  • K() Recession coefficient of the upper zone layer [1/T/mm^alpha].

  • K4() Recession coefficient of the lower zone layer [1/T].

  • Gamma() Nonlinearity parameter of the lower zone layer [-].

  • MaxBaz() Base length of the triangle unit hydrograph [T].

  • Abstr() Abstraction of water from computed outflow [m³/s].

class hydpy.models.hland.DerivedParameters(master: hydpy.core.parametertools.Parameters, cls_fastaccess: Optional[Type[hydpy.core.parametertools.FastAccessParameter]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.variabletools.SubVariables[hydpy.core.parametertools.Parameters, Parameter, hydpy.core.parametertools.FastAccessParameter]

Derived parameters of model hland.

The following classes are selected:
class hydpy.models.hland.FluxSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.OutputSequences[FluxSequence]

Flux sequences of model hland.

The following classes are selected:
  • TMean() Mean subbasin temperature [°C].

  • TC() Corrected temperature [°C].

  • FracRain() Fraction rainfall / total precipitation [-].

  • RfC() Actual precipitation correction related to liquid precipitation [-].

  • SfC() Actual precipitation correction related to frozen precipitation [-].

  • PC() Corrected precipitation [mm].

  • EP() Potential evaporation [mm].

  • EPC() Corrected potential evaporation [mm].

  • EI() Interception evaporation [mm].

  • TF() Throughfall [mm].

  • GlMelt() Glacier melt [mm].

  • Melt() Actual melting of frozen water stored in the snow layer [mm].

  • Refr() Actual (re)freezing of liquid water stored in the snow layer [mm].

  • In_() Snow module release/soil module inflow [mm].

  • R() Effective soil response [mm].

  • EA() Actual soil evaporation [mm].

  • CF() Actual capillary flow [mm].

  • ContriArea() Fraction of the soil area contributing to runoff generation [-].

  • InUZ() Inflow to the upper zone layer [mm].

  • Perc() Percolation from the upper to the lower zone layer [mm].

  • Q0() Outflow from the upper zone layer [mm].

  • EL() Actual lake evaporation [mm].

  • Q1() Outflow from the lower zone layer [mm].

  • InUH() Input of the triangle unit hydrograph [m].

  • OutUH() Output of the triangle unit hydrograph [m].

  • QT() Total model outflow [m³/s].

class hydpy.models.hland.InputSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.ModelIOSequences[InputSequence, hydpy.core.sequencetools.FastAccessInputSequence]

Input sequences of model hland.

The following classes are selected:
  • P() Precipitation [mm].

  • T() Temperature [°C].

  • TN() Normal temperature [°C].

  • EPN() Normal potential evaporation [mm].

class hydpy.models.hland.LogSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.ModelSequences[LogSequence, hydpy.core.variabletools.FastAccess]

Log sequences of model hland.

The following classes are selected:
  • QUH() Whole outflow delayed by means of the unit hydrograph [mm].

class hydpy.models.hland.OutletSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.LinkSequences[OutletSequence]

Outlet sequences of model hland.

The following classes are selected:
  • Q() Runoff [m³/s].

class hydpy.models.hland.StateSequences(master: hydpy.core.sequencetools.Sequences, cls_fastaccess: Optional[Type[FastAccessType]] = None, cymodel: Optional[hydpy.core.typingtools.CyModelProtocol] = None)

Bases: hydpy.core.sequencetools.OutputSequences[StateSequence]

State sequences of model hland.

The following classes are selected:
  • Ic() Interception storage [mm].

  • SP() Frozen water stored in the snow layer [mm].

  • WC() Liquid water content of the snow layer [mm].

  • SM() Soil moisture [mm].

  • UZ() Storage in the upper zone layer [mm].

  • LZ() Storage in the lower zone layer [mm].