HydPy-L-Knauf-Ic (adoption of LARSIM with Knauf-based snow modelling including snow interception)

lland_knauf_ic is still under development and likely to change in the future. Its goal is to extend lland_knauf with processes dealing with the interception of snow in canopies, similar to the SCHNEEINTERZEPTION option of LARSIM. The publically available LARSIM documentation does not provide all information required for implementing a perfect emulation, but detailed comparisons suggest that the essential process equations are defined similarly.

The following list summarises the current status of lland_knauf_ic by discussing its main differences to lland_knauf:

  • Snow interception occurs only in tree canopies, which is why the results of lland_knauf_ic differ from those of lland_knauf only for the land-use types LAUBW, MISCHW, and NADELW.

  • There is are two additional storages, SInz and STInz, which handle the total and the frozen amount of intercepted snowfall, placed between the “normal” interception and the “normal” snow module.

  • If not stated otherwise, SInz and STInz correspond to WAeS and WATS and are modified by the same or functionally identical methods.

  • If the LARSIM documentation does not suggest otherwise, we reuse the names of the “normal” snow module and suffix “Inz” to it or replace its “Snow” suffix (for example, WaDa becomes WaDaInz and NetRadiationSnow becomes NetRadiationInz).

  • Only a fraction of the water leaving the “normal” interception module reaches the snow interception module (see Calc_NBesInz_V1 and Calc_SnowIntRate_V1).

  • The surface temperature of the intercepted snow is always identical with its bulk temperature (TempSInz), except for the calculation of the latent heat flux (see Return_WSurfInz_V1).

  • The energy balance of the intercepted snow does not (need to) consider the soil heat flux.

  • The radiation exchange with the atmosphere depends on how much the intercepted snow shields the ground (see Calc_NetShortwaveRadiationInz_V1 and Return_NetLongwaveRadiationInz_V1).

  • During periods with intercepted snow, water evaporates (or sublimates) from the snow interception module (EvSInz) but not from the “normal” interception module (EvI).

LEG (2020) discusses many of these points in more detail.

In our experience, lland_knauf_ic tends to calculate thicker snowpacks on the ground than lland_knauf (the highest values of WAeS are usually larger when applying lland_knauf_ic). This counterintuitive behaviour seems to be related to disabling the “normal” interception evaporation (EvI) during snow interception periods and is still under discussion.

We will add further explanations and references as soon as we can consolidate lland_knauf_ic.

The following integration tests are identical to the ones of lland_knauf, except for the additional snow interception processes.

Integration tests

Note

When new to HydPy, consider reading section Integration Tests first.

daily simulation

>>> from hydpy import pub
>>> pub.timegrids = "1997-08-01", "1997-09-01", "1d"
>>> from hydpy.models.lland_knauf_ic import *
>>> parameterstep("1h")
>>> from hydpy import Node, Element
>>> outlet = Node("outlet")
>>> inlet = Node("inlet")
>>> land = Element("land", inlets=inlet, outlets=outlet)
>>> land.model = model
>>> nhru(1)
>>> ft(1.0)
>>> fhru(1.0)

acre (summer)

>>> lnk(ACKER)
>>> kg(0.94)
>>> kt(0.0)
>>> hinz(0.2)
>>> lai.acker_aug = 3.5
>>> tgr(0.0)
>>> trefn(0.0)
>>> tsp(4.0)
>>> pwmax(1.43)
>>> wmax(309.0)
>>> fk(199.0)
>>> pwp(119.4)
>>> kapgrenz(option="0_WMax/10")
>>> kapmax(0.08)
>>> beta(0.001/24)
>>> fbeta(1.0)
>>> rbeta(False)
>>> dmax(r_dmax=0.55)
>>> dmin(r_dmin=10.0)
>>> bsf(0.3)
>>> volbmax(inf)
>>> gsbmax(1.0)
>>> gsbgrad1(inf)
>>> gsbgrad2(inf)
>>> a1(0.0)
>>> a2(0.5)
>>> tind(0.191056)
>>> eqb(35000.0)
>>> eqi1(400.0)
>>> eqi2(400.0)
>>> eqd1(200.0)
>>> eqd2(50.0)
>>> negq(True)
>>> measuringheightwindspeed(10.0)
>>> wg2z.aug = -2.9
>>> p1strahl(0.5)
>>> p2strahl(1.0/35.0)
>>> p1wind(0.6)
>>> p2wind(1.0/70.0)
>>> turb0(2.0)
>>> turb1(1.6)
>>> albedo0snow(0.9)
>>> snowagingfactor(0.35)
>>> refreezeflag(True)
>>> ktschnee(inf)
>>> fvf(0.3)
>>> bsff(2.0)
>>> p1simax(8.0)
>>> p2simax(1.5)
>>> p1sirate(0.2)
>>> p2sirate(0.02)
>>> p3sirate(0.003)
>>> with model.add_radiationmodel_v4("meteo_psun_sun_glob_io") as submodel_meteo_psun_sun_glob_io:
...     pass
>>> with model.add_aetmodel_v1("evap_aet_morsim"):
...     albedo.acker_aug = 0.24
...     cropheight.acker_aug = 0.4
...     surfaceresistance.acker = 40.0
...     emissivity(0.95)
...     averagesoilheatflux.aug = 2.9
...     soilmoisturelimit(119.4 / 309.0)
...     model.add_radiationmodel_v4(submodel_meteo_psun_sun_glob_io)
>>> from hydpy import IntegrationTest
>>> IntegrationTest.plotting_options.axis1 = inputs.nied
>>> IntegrationTest.plotting_options.axis2 = fluxes.qah
>>> test = IntegrationTest(land)
>>> test.dateformat = "%Y-%d-%m"
>>> test.inits = ((states.inzp, 0.0),
...               (states.stinz, 0.0),
...               (states.sinz, 0.0),
...               (states.esnowinz, 0.0),
...               (states.asinz, 0.0),
...               (states.wats, 0.0),
...               (states.waes, 0.0),
...               (states.esnow, 0.0),
...               (states.taus, 0.0),
...               (states.ebdn, 350.0),
...               (states.bowa, 72.0),
...               (states.sdg1, 0.0),
...               (states.sdg2, 0.0),
...               (states.sig1, 0.0),
...               (states.sig2, 0.0),
...               (states.sbg, 0.0))
>>> inputs.nied.series = (
...     13.3, 0.1, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 2.7,
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.3, 0.0, 0.1, 10.5, 6.5, 15.0, 9.2, 0.0,
...     0.0)
>>> inputs.teml.series = (
...     16.1, 17.3, 18.9, 17.8, 18.5, 19.9, 20.8, 20.9, 22.3, 23.0, 23.1, 23.2, 23.2,
...     21.7, 20.8, 19.5, 21.0, 21.6, 21.1, 22.4, 22.5, 19.6, 20.3, 24.1, 23.7, 21.1,
...     20.9, 20.2, 16.1, 17.0, 18.2)
>>> inputs.windspeed.series = (
...     2.4, 1.6, 1.5, 2.8, 3.0, 3.5, 3.8, 3.3, 1.8, 1.9, 3.0, 2.5, 1.6, 2.7, 3.2, 1.3,
...     1.9, 2.0, 2.6, 3.6, 2.5, 2.1, 1.5, 2.2, 1.9, 2.3, 2.1, 2.6, 2.6, 2.1, 2.1)
>>> inputs.relativehumidity.series = (
...     86.2, 85.8, 82.4, 77.6, 74.9, 77.9, 73.5, 80.1, 72.9, 68.5, 68.6, 66.0, 69.0,
...     75.6, 81.4, 79.0, 75.9, 70.0, 70.3, 69.0, 62.1, 84.5, 83.6, 76.5, 76.6, 84.2,
...     85.8, 86.5, 89.6, 78.3, 78.5)
>>> model.radiationmodel.sequences.inputs.sunshineduration.series = (
...     6.3, 1.7, 4.5, 12.4, 13.9, 13.0, 13.8, 12.3, 13.1, 12.8, 13.1, 13.3, 12.7,
...     10.2, 9.4, 10.3, 11.1, 11.0, 8.5, 11.3, 12.4, 0.1, 6.7, 10.4, 6.5, 4.9, 6.6,
...     0.3, 0.1, 5.0, 3.8)
>>> aetinputs = model.aetmodel.sequences.inputs
>>> aetinputs.atmosphericpressure.series = (
...     1007.0, 1013.0, 1016.0, 1017.0, 1018.0, 1018.0, 1019.0, 1019.0, 1019.0, 1020.0,
...     1021.0, 1022.0, 1019.0, 1015.0, 1016.0, 1019.0, 1019.0, 1018.0, 1019.0, 1019.0,
...     1017.0, 1015.0, 1015.0, 1011.0, 1008.0, 1006.0, 1005.0, 1000.0, 1004.0, 1011.0,
...     1014.0)
>>> aetinputs.windspeed.series = inputs.windspeed.series
>>> aetinputs.relativehumidity.series = inputs.relativehumidity.series
>>> inlet.sequences.sim.series = 0.0
>>> model.radiationmodel.sequences.inputs.possiblesunshineduration.series = (
...     15.69078473, 15.62882066, 15.56613383, 15.50275437, 15.43871163, 15.37403418,
...     15.3087498, 15.24288548, 15.17646742, 15.10952106, 15.04207104, 14.97414122,
...     14.90575471, 14.83693386, 14.76770029, 14.69807488, 14.62807779, 14.5577285,
...     14.48704578, 14.41604776, 14.34475191, 14.27317506, 14.20133345, 14.12924271,
...     14.05691791, 13.98437357, 13.91162366, 13.83868165, 13.76556053, 13.69227282,
...     13.61883057)
>>> model.radiationmodel.sequences.inputs.globalradiation.series = (
...     190.2514903, 127.6607822, 164.4012978, 269.0205016, 287.8486672, 274.6742631,
...     284.0478917, 262.9712633, 272.2564135, 267.0192178, 269.6265466, 270.8782909,
...     261.6971638, 227.9621155, 216.3563213, 226.6379036, 235.5285025, 232.8494284,
...     199.7134896, 233.7719021, 246.1212861, 90.58551, 171.9449932, 216.5498126,
...     166.9168296, 145.9856109, 165.5438903, 87.6933456, 84.356885, 142.3092025,
...     126.7220785)
>>> parameters.update()
>>> test.reset_inits()
>>> conditions = model.conditions
>>> conditions_acker_summer = test(
...     "lland_knauf_ic_acker_summer_daily",
...     axis1=(inputs.nied, fluxes.qah), axis2=states.bowa,
...     get_conditions="1997-08-03")
Click to see the table
Click to see the graph
>>> from hydpy import round_
>>> round_(model.check_waterbalance(conditions))
0.0

acre (routing)

>>> inlet.sequences.sim.series = 0.02
>>> control.negq(False)
>>> test("lland_knauf_ic_acker_routing_daily",
...      axis1=(inputs.nied, fluxes.qah), axis2=states.bowa)
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

acre (heavy rain)

>>> lnk(ACKER)
>>> inlet.sequences.sim.series = 0.0
>>> nied = inputs.nied.series.copy()
>>> inputs.nied.series = 20.0
>>> conditions_acker_heavy_rain = test(
...     "lland_knauf_ic_acker_heavy_rain_daily",
...     axis1=(inputs.nied, fluxes.qah), axis2=states.bowa,
...     get_conditions="1997-08-03")
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

acre (GARTO)

>>> from hydpy import pub
>>> with model.add_soilmodel_v1("ga_garto_submodel1"):
...     nmbbins(4)
...     with pub.options.parameterstep("1m"):
...         dt(1.0)
...     sealed(False)
...     soildepth(309.0 / 0.434)
...     residualmoisture(0.027)
...     saturationmoisture(0.434)
...     saturatedconductivity(13.2)
...     poresizedistribution(0.252)
...     airentrypotential(111.5)
...     states.moisture = 72.0 / 309.0 * 0.434
...     states.frontdepth = 0.0
...     states.moisturechange = 0.0
>>> test("lland_knauf_ic_acker_garto_daily",
...      axis1=(inputs.nied, fluxes.qah), axis2=states.bowa)
Click to see the table
Click to see the graph

There is no indication of an error in the water balance:

>>> round_(model.check_waterbalance(conditions))
0.0
>>> del model.soilmodel
>>> inputs.nied.series = nied

water

>>> lnk(WASSER)
>>> negq(False)
>>> model.aetmodel.parameters.control.surfaceresistance.wasser_aug = 0.0
>>> model.aetmodel.parameters.control.cropheight.wasser_aug = 0.05
>>> model.aetmodel.parameters.control.albedo.wasser_aug = 0.7
>>> conditions_wasser = test(
...     "lland_knauf_ic_wasser_daily",
...     axis1=(fluxes.nkor, fluxes.evi, fluxes.qah),
...     get_conditions="1997-08-03")
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

water (routing)

>>> inlet.sequences.sim.series = 0.02
>>> test("lland_knauf_ic_wasser_routing_daily",
...      axis1=(fluxes.nkor, fluxes.evi, fluxes.qah))
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

water (negative runoff)

>>> negq(True)
>>> inlet.sequences.sim.series = 0.0
>>> test("lland_knauf_ic_wasser_negq_daily",
...      axis1=(fluxes.nkor, fluxes.evi, fluxes.qah))
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

lakes

>>> lnk(SEE)
>>> model.aetmodel.parameters.control.surfaceresistance.see_aug = 0.0
>>> model.aetmodel.parameters.control.cropheight.see_aug = 0.05
>>> model.aetmodel.parameters.control.albedo.see_aug = 0.7
>>> negq(False)
>>> test("lland_knauf_ic_see_daily",
...      axis1=(fluxes.nkor, fluxes.evi, fluxes.qah))
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

streams

>>> lnk(FLUSS)
>>> model.aetmodel.parameters.control.surfaceresistance.fluss_aug = 0.0
>>> model.aetmodel.parameters.control.cropheight.fluss_aug = 0.05
>>> model.aetmodel.parameters.control.albedo.fluss_aug = 0.7
>>> test("lland_knauf_ic_fluss_daily",
...      axis1=(fluxes.nkor, fluxes.evi, fluxes.qah))
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

sealed surfaces

>>> lnk(VERS)
>>> negq(True)
>>> model.aetmodel.parameters.control.surfaceresistance.vers_aug = 500
>>> model.aetmodel.parameters.control.cropheight.vers_aug = 5.0
>>> model.aetmodel.parameters.control.albedo.vers_aug = 0.10
>>> lai.vers_aug = 10.0
>>> test("lland_knauf_ic_vers_daily",
...      axis1=(inputs.nied, fluxes.qah, states.bowa))
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

acre (winter)

>>> pub.timegrids = "2010-12-01", "2011-01-01", "1d"
>>> lnk(ACKER)
>>> model.aetmodel.parameters.control.cropheight.acker_dec = 0.05
>>> model.aetmodel.parameters.control.albedo.acker_dec = 0.1
>>> model.aetmodel.parameters.control.leafareaindex.acker_dec = 0.3
>>> lai.acker_dec = 0.3
>>> model.aetmodel.parameters.control.averagesoilheatflux.dec = -8.583333333333
>>> wg2z.dec = 8.583333333333
>>> test = IntegrationTest(land)
>>> test.dateformat = "%Y-%d-%m"
>>> test.inits = ((states.inzp, 0.0),
...               (states.stinz, 0.0),
...               (states.sinz, 0.0),
...               (states.esnowinz, 0.0),
...               (states.asinz, 0.0),
...               (states.wats, 0.0),
...               (states.waes, 0.0),
...               (states.esnow, 0.0),
...               (states.taus, 0.0),
...               (states.ebdn, 0.0),
...               (states.bowa, 72.0),
...               (states.sdg1, 0.0),
...               (states.sdg2, 0.0),
...               (states.sig1, 0.0),
...               (states.sig2, 0.0),
...               (states.sbg, 0.0))
>>> inputs.nied.series = (
...     0.0, 11.1, 0.4, 1.2, 6.4, 0.0, 0.0, 0.0, 0.7, 3.3, 9.4, 0.2, 2.9, 0.0, 0.0,
...     6.7, 0.0, 0.1, 0.0, 0.2, 0.2, 2.4, 7.0, 0.2, 0.0, 1.2, 0.9, 0.0, 0.0, 0.2, 0.9)
>>> inputs.teml.series = (
...     -5.8, -3.0, -5.6, -3.8, 0.2, -1.1, -2.9, -2.9, -2.1, -3.1, 5.1, 0.2, -3.5,
...     -3.9, -6.3, -3.5, -7.3, -5.8, -7.9, -5.7, -5.6, -4.8, -1.1, -2.9, -9.1, -8.6,
...     -5.3, -7.7, -9.2, -7.4, 1.7)
>>> inputs.windspeed.series = (
...     6.9, 5.2, 2.0, 4.3, 4.0, 2.4, 1.9, 1.8, 2.7, 3.0, 7.4, 5.7, 2.2, 3.1, 2.8, 3.7,
...     0.9, 1.3, 1.9, 2.4, 2.3, 4.6, 8.6, 7.6, 3.8, 1.5, 1.3, 3.0, 2.7, 1.4, 4.2)
>>> inputs.relativehumidity.series = (
...     70.3, 85.0, 95.9, 90.6, 96.5, 99.0, 99.2, 99.1, 96.9, 95.0, 90.6, 78.7, 90.5,
...     88.1, 92.8, 98.1, 96.6, 97.7, 95.8, 97.5, 95.0, 93.8, 94.9, 85.4, 87.2, 92.7,
...     97.8, 95.4, 94.9, 96.0, 96.5)
>>> model.radiationmodel.sequences.inputs.sunshineduration.series = (
...     3.5, 0.0, 0.1, 3.7, 0.0, 0.1, 0.0, 0.0, 4.4, 0.1, 0.2, 0.7, 0.0, 1.2, 3.0, 0.0,
...     0.0, 0.0, 0.0, 0.2, 0.8, 0.0, 0.0, 0.0, 3.2, 4.3, 0.0, 3.4, 0.0, 0.0, 4.0)
>>> aetinputs.atmosphericpressure.series = (
...     1015.0, 1007.0, 1005.0, 1008.0, 996.0, 998.0, 1004.0, 1006.0, 1009.0, 1018.0,
...     1004.0, 1012.0, 1020.0, 1025.0, 1023.0, 1000.0, 991.0, 997.0, 997.0, 997.0,
...     1004.0, 1007.0, 1004.0, 1008.0, 1018.0, 1019.0, 1017.0, 1022.0, 1024.0, 1021.0,
...     1016.0)
>>> aetinputs.windspeed.series = inputs.windspeed.series
>>> aetinputs.relativehumidity.series = inputs.relativehumidity.series
>>> inlet.sequences.sim.series = 0.0
>>> model.radiationmodel.sequences.inputs.possiblesunshineduration.series = (
...     7.64102946, 7.6096444, 7.57982377, 7.55159603, 7.52498861, 7.50002776,
...     7.47673851, 7.45514453, 7.43526809, 7.41712991, 7.40074913, 7.38614323,
...     7.3733279, 7.36231706, 7.35312273, 7.34575502, 7.34022207, 7.33653002,
...     7.33468296, 7.33468296, 7.33653002, 7.34022207, 7.34575502, 7.35312273,
...     7.36231706, 7.3733279, 7.38614323, 7.40074913, 7.41712991, 7.43526809,
...     7.45514453)
>>> model.radiationmodel.sequences.inputs.globalradiation.series = (
...     31.9427981, 9.8738984, 16.6834998, 31.8074275, 9.5325105, 16.1414844,
...     9.3414287, 9.2567644, 33.405815, 15.5911584, 15.8915442, 17.8235189, 8.941324,
...     19.6680679, 26.8315815, 8.8377384, 8.817416, 8.8041854, 8.7980439, 15.4647459,
...     17.8795412, 8.8221612, 8.8443961, 8.8737425, 27.7596417, 32.3287553, 9.0045823,
...     28.9823209, 9.1276454, 9.1999895, 32.0622345)
>>> conditions_acker_winter = test(
...     "lland_knauf_ic_acker_winter_daily",
...     axis1=(inputs.nied, fluxes.wada), axis2=(states.waes, states.wats),
...     get_conditions="2010-12-10")
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

conifers (winter)

>>> lnk(NADELW)
>>> model.aetmodel.parameters.control.surfaceresistance.nadelw = 56.0
>>> model.aetmodel.parameters.control.cropheight.nadelw = 10.0
>>> model.aetmodel.parameters.control.albedo.nadelw = 0.12
>>> model.aetmodel.parameters.control.leafareaindex.nadelw = 11.0
>>> lai.nadelw = 11.0
>>> conditions_nadelw_winter = test(
...     "lland_knauf_ic_nadelw_winter_daily",
...     axis1=(inputs.nied, fluxes.wada), axis2=(states.waes, states.wats),
...     get_conditions="2010-12-10")
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0

acre (snow surface temperature)

>>> lnk(ACKER)
>>> ktschnee(5.0)
>>> conditions_acker_winter_ktschnee = test(
...     "lland_knauf_ic_acker_winter_ktschnee_daily",
...     axis1=(inputs.nied, fluxes.wada), axis2=(states.waes, states.wats),
...     get_conditions="2010-12-10")
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions))
0.0
>>> ktschnee(inf)

hourly simulation

>>> pub.timegrids = "1997-08-03", "1997-08-06", "1h"
>>> for parameter in control:
...     if parameter.TIME == True:
...         parameter.value = parameter.value/24
...     if parameter.TIME == False:
...         parameter.value = parameter.value*24
>>> for parameter in fixed:
...     parameter.restore()
>>> for parameter in model.aetmodel.parameters.fixed:
...     parameter.restore()
>>> with model.add_radiationmodel_v1("meteo_glob_morsim") as submodel_meteo_glob_morsim:
...     latitude(54.1)
...     longitude(9.7)
...     angstromconstant(0.25)
...     angstromfactor(0.5)
...     angstromalternative(0.15)
>>> model.aetmodel.add_radiationmodel_v1(submodel_meteo_glob_morsim)
>>> test = IntegrationTest(land)

acre (summer)

>>> inputs.nied.series = 0.0
>>> inputs.teml.series = (
...     16.9, 16.6, 16.4, 16.3, 16.0, 15.9, 16.0, 16.6, 17.4, 19.0, 20.3, 21.4, 21.3,
...     21.8, 22.9, 22.7, 22.5, 21.9, 21.4, 20.7, 19.4, 17.8, 17.0, 16.4, 15.9, 15.4,
...     15.2, 14.9, 14.3, 14.1, 14.3, 15.4, 16.8, 18.2, 19.5, 20.3, 21.0, 21.8, 21.9,
...     21.8, 22.2, 21.8, 20.9, 19.7, 17.9, 15.8, 14.8, 14.1, 13.4, 12.8, 12.3, 12.0,
...     11.7, 11.6, 12.6, 14.8, 17.1, 19.4, 20.6, 21.4, 22.5, 23.1, 23.4, 23.8, 24.0,
...     24.0, 23.7, 22.8, 21.3, 19.3, 18.3, 17.4)
>>> inputs.windspeed.series = (
...     0.8, 0.8, 0.8, 0.8, 0.8, 0.6, 0.9, 0.9, 0.9, 1.3, 1.5, 1.2, 1.3, 1.5, 1.9, 1.9,
...     2.3, 2.4, 2.5, 2.5, 2.2, 1.7, 1.7, 2.3, 2.3, 2.2, 2.3, 2.0, 2.3, 2.5, 2.4, 2.5,
...     2.5, 2.9, 3.1, 3.3, 3.3, 3.2, 2.5, 2.9, 3.6, 4.2, 4.2, 3.6, 3.2, 2.2, 2.2, 2.1,
...     1.8, 1.8, 1.6, 1.2, 1.9, 1.3, 1.6, 1.9, 3.2, 4.0, 4.6, 4.1, 4.1, 4.4, 4.6, 4.5,
...     4.7, 4.5, 4.1, 3.8, 2.5, 1.9, 2.2, 2.7)
>>> inputs.relativehumidity.series = (
...     95.1, 94.9, 95.9, 96.7, 97.2, 97.5, 97.7, 97.4, 96.8, 86.1, 76.8, 71.8, 67.5,
...     66.1, 63.4, 62.4, 61.1, 62.1, 67.0, 74.5, 81.2, 86.9, 90.1, 90.9, 88.0, 89.2,
...     88.8, 89.7, 93.0, 93.6, 94.6, 93.3, 86.9, 78.9, 75.8, 73.4, 68.3, 61.3, 60.6,
...     58.8, 57.2, 57.2, 59.9, 66.1, 71.7, 80.6, 85.9, 89.3, 91.4, 93.1, 94.6, 95.6,
...     96.2, 95.7, 95.1, 96.3, 89.9, 79.2, 73.4, 67.3, 62.2, 59.6, 55.4, 52.1, 49.5,
...     48.1, 49.4, 57.0, 65.9, 73.0, 76.7, 81.8)
>>> model.radiationmodel.sequences.inputs.sunshineduration.series = (
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.5, 0.7, 0.8, 0.5, 0.4, 0.5,
...     0.5, 0.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.9,
...     1.0, 1.0, 0.9, 0.8, 0.9, 0.8, 0.9, 0.9, 0.9, 1.0, 1.0, 1.0, 0.3, 0.0, 0.0, 0.0,
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6, 0.9, 1.0, 0.9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
...     1.0, 1.0, 1.0, 1.0, 0.5, 0.0, 0.0, 0.0)
>>> aetinputs.atmosphericpressure.series = (
...     1015.0, 1015.0, 1015.0, 1015.0, 1015.0, 1015.0, 1015.0, 1015.0, 1016.0, 1016.0,
...     1016.0, 1016.0, 1016.0, 1016.0, 1016.0, 1016.0, 1016.0, 1016.0, 1016.0, 1016.0,
...     1016.0, 1016.0, 1017.0, 1017.0, 1017.0, 1016.0, 1016.0, 1016.0, 1016.0, 1017.0,
...     1017.0, 1017.0, 1017.0, 1017.0, 1017.0, 1018.0, 1018.0, 1018.0, 1018.0, 1017.0,
...     1017.0, 1017.0, 1017.0, 1017.0, 1017.0, 1018.0, 1018.0, 1018.0, 1018.0, 1018.0,
...     1018.0, 1018.0, 1018.0, 1018.0, 1018.0, 1019.0, 1019.0, 1019.0, 1019.0, 1019.0,
...     1019.0, 1019.0, 1019.0, 1019.0, 1018.0, 1018.0, 1018.0, 1018.0, 1018.0, 1018.0,
...     1018.0, 1018.0)
>>> aetinputs.windspeed.series = inputs.windspeed.series
>>> aetinputs.relativehumidity.series = inputs.relativehumidity.series
>>> inlet.sequences.sim.series = 0.0
>>> test.inits = (
...     (logs.loggedsunshineduration,
...      [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.1, 0.2, 0.1, 0.2, 0.2, 0.3, 0.0,
...       0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
...     (logs.loggedpossiblesunshineduration,
...      [0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
...       1.0, 1.0, 1.0, 1.0, 1.0, 0.2, 0.0, 0.0, 0.0]),
...     (model.radiationmodel.sequences.logs.loggedunadjustedglobalradiation,
...      [0.0, 0.0, 0.0, 0.0, 0.0, 27.777778, 55.555556, 138.888889, 222.222222,
...       305.555556, 333.333333, 388.888889, 527.777778, 444.444444, 250.0,
...       222.222222, 166.666667, 111.111111, 55.555556, 27.777778, 0.0, 0.0, 0.0,
...       0.0]),
...     (model.aetmodel.sequences.logs.loggedglobalradiation,
...      [0.0, 0.0, 0.0, 0.0, 0.0, 27.8, 55.6, 138.9, 222.2, 305.6, 333.3, 388.9,
...       527.8, 444.4, 250.0, 222.2, 166.7, 111.1, 55.6, 27.8, 0.0, 0.0, 0.0, 0.0]),
...     (model.aetmodel.sequences.logs.loggedairtemperature,
...      [[13.2], [13.2], [13.1], [12.6], [12.7], [13.0], [13.5], [14.8], [16.2],
...       [17.7], [18.8], [19.4], [20.4], [21.0], [21.5], [21.2], [20.4], [20.7],
...       [20.2], [19.7], [19.0], [18.0], [17.5], [17.1]]),
...     (model.aetmodel.sequences.logs.loggedrelativehumidity,
...      [95.1, 94.5, 94.8, 96.4, 96.6, 97.1, 97.1, 96.7, 92.2, 88.5, 81.1, 76.5, 75.1,
...       70.8, 68.9, 69.2, 75.0, 74.0, 77.4, 81.4, 85.3, 90.1, 92.3, 93.8]),
...     (model.aetmodel.sequences.logs.loggedwindspeed2m,
...      [0.8, 1.0, 1.2, 1.3, 0.9, 1.1, 1.3, 1.3, 1.9, 2.2, 1.8, 2.3, 2.4, 2.5, 2.4,
...       2.5, 2.1, 2.2, 1.7, 1.7, 1.3, 1.3, 0.7, 0.8]))
>>> for key, value in locals().copy().items():
...     if key.startswith("conditions_") and ("states" in value.get("model", {})):
...         for name in ("esnowinz", "esnow", "ebdn"):
...             value["model"]["states"][name] *= 24
>>> test("lland_knauf_ic_acker_summer_hourly",
...      axis1=(fluxes.evb, fluxes.qah), axis2=states.bowa,
...      use_conditions=conditions_acker_summer)
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions_acker_summer))
0.0

acre (heavy rain)

>>> inputs.nied.series = 20.0 / 24.0
>>> control.negq(False)
>>> test("lland_knauf_ic_acker_heavy_rain_hourly",
...      axis1=(inputs.nied, fluxes.qah), axis2=states.bowa,
...      use_conditions=conditions_acker_heavy_rain)
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions_acker_heavy_rain))
0.0

water

>>> lnk(WASSER)
>>> inputs.nied.series = 0.05
>>> test("lland_knauf_ic_water_hourly",
...      axis1=(fluxes.nkor, fluxes.evi, fluxes.qah),
...      use_conditions=conditions_wasser)
Click to see the table
Click to see the graph
>>> inputs.nied.series = 0.0
>>> round_(model.check_waterbalance(conditions_wasser))
0.0

acre (winter)

>>> pub.timegrids = "2010-12-10", "2010-12-13", "1h"
>>> inputs.nied.series = (
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
...     0.1, 0.0, 0.3, 0.2, 0.4, 0.7, 0.5, 1.0, 2.0, 2.1, 1.8, 1.3, 0.5, 0.2, 0.5, 0.2,
...     0.1, 0.3, 0.1, 0.1, 0.0, 0.1, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1,
...     0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0,
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> inputs.teml.series = (
...     -3.7, -4.8, -5.6, -6.2, -7.3, -8.3, -8.6, -8.5, -9.5, -9.2, -6.9, -4.0, -2.8,
...     -1.4, -0.4, 0.5, 1.0, 1.1, 1.0, 1.4, 1.6, 2.0, 2.4, 2.5, 2.7, 3.2, 3.9, 4.4,
...     4.8, 4.8, 5.1, 5.1, 5.4, 5.3, 5.5, 6.1, 6.4, 6.4, 6.5, 6.3, 5.9, 5.5, 5.1, 4.8,
...     4.9, 4.9, 4.7, 3.8, 3.9, 3.7, 3.5, 3.3, 3.3, 3.0, 1.9, 1.2, 0.8, 0.8, 0.5, 0.3,
...     -0.1, -0.4, -0.6, -0.8, -1.3, -1.6, -2.0, -2.1, -2.2, -2.6, -3.1, -3.9)
>>> inputs.windspeed.series = (
...     3.4, 2.9, 2.5, 3.0, 2.5, 2.3, 2.1, 1.4, 1.1, 1.0, 1.4, 1.3, 1.3, 1.4, 2.3, 2.8,
...     3.1, 3.5, 4.4, 3.8, 5.7, 5.6, 5.8, 6.2, 5.6, 5.2, 5.7, 6.6, 7.0, 7.3, 7.2, 7.6,
...     7.3, 7.1, 7.1, 8.9, 9.5, 7.9, 9.6, 9.1, 8.7, 8.9, 7.9, 7.1, 6.4, 7.2, 7.0, 6.8,
...     6.4, 6.3, 5.7, 5.2, 4.6, 4.9, 6.3, 5.8, 6.1, 5.9, 6.4, 6.8, 7.0, 6.3, 7.3, 7.5,
...     7.0, 6.0, 4.8, 4.2, 4.9, 4.0, 3.4, 3.4)
>>> inputs.relativehumidity.series = (
...     87.5, 90.7, 89.7, 91.3, 94.2, 93.2, 96.5, 95.9, 96.8, 94.3, 96.7, 97.4, 93.9,
...     93.4, 93.3, 94.1, 94.6, 94.4, 96.9, 98.3, 98.7, 99.6, 99.4, 99.2, 99.2, 99.6,
...     99.8, 99.8, 99.0, 97.6, 97.4, 96.3, 95.2, 96.3, 95.5, 91.6, 90.0, 85.7, 82.3,
...     82.5, 82.2, 76.5, 81.7, 83.4, 82.8, 85.8, 87.6, 85.6, 85.3, 86.2, 89.3, 91.4,
...     90.9, 89.2, 85.6, 86.3, 91.2, 87.5, 84.5, 76.7, 74.8, 69.7, 66.9, 64.4, 65.4,
...     67.6, 70.2, 70.4, 69.5, 71.6, 74.5, 80.2)
>>> model.radiationmodel.sequences.inputs.sunshineduration.series = (
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0,
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
...     0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2,
...     0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
>>> aetinputs.atmosphericpressure.series = (
...     1017.0, 1018.0, 1018.0, 1019.0, 1020.0, 1020.0, 1021.0, 1021.0, 1022.0, 1022.0,
...     1022.0, 1022.0, 1022.0, 1021.0, 1020.0, 1020.0, 1019.0, 1018.0, 1016.0, 1015.0,
...     1014.0, 1013.0, 1011.0, 1010.0, 1008.0, 1007.0, 1006.0, 1005.0, 1005.0, 1004.0,
...     1004.0, 1004.0, 1003.0, 1003.0, 1003.0, 1002.0, 1002.0, 1002.0, 1002.0, 1003.0,
...     1003.0, 1003.0, 1003.0, 1003.0, 1003.0, 1003.0, 1003.0, 1002.0, 1002.0, 1002.0,
...     1002.0, 1003.0, 1004.0, 1005.0, 1006.0, 1008.0, 1009.0, 1010.0, 1011.0, 1012.0,
...     1013.0, 1014.0, 1015.0, 1015.0, 1017.0, 1017.0, 1018.0, 1019.0, 1019.0, 1020.0,
...     1020.0, 1020.0)
>>> aetinputs.windspeed.series = inputs.windspeed.series
>>> aetinputs.relativehumidity.series = inputs.relativehumidity.series
>>> test.inits = (
...     (logs.loggedsunshineduration,
...      [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04, 0.25, 0.59, 0.91,
...       0.97, 1.0, 0.65, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
...     (logs.loggedpossiblesunshineduration,
...      [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
...       1.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
...     (model.radiationmodel.sequences.logs.loggedunadjustedglobalradiation,
...      [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 27.777778, 55.555556,
...       111.111111, 166.666667, 138.888889, 55.555556, 0.0,0.0, 0.0, 0.0, 0.0, 0.0,
...       0.0, 0.0, 0.0]),
...     (model.aetmodel.sequences.logs.loggedglobalradiation,
...      [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 27.8, 55.6, 111.1, 166.7, 138.9,
...       55.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
...     (model.aetmodel.sequences.logs.loggedairtemperature,
...      [[-2.8], [-2.6], [-2.2], [-1.8], [-1.8], [-2.4], [-1.5], [-1.4], [-0.8],
...       [-0.8], [-0.9], [0.9], [-0.8], [-1.0], [-1.2], [-1.8], [-2.8], [-3.8],
...       [-4.3], [-4.0], [-3.9], [-1.6], [-1.6], [2.6]]),
...     (model.aetmodel.sequences.logs.loggedrelativehumidity,
...      [99.4, 99.0, 99.6, 99.6, 99.3, 99.3, 99.8, 99.7, 100.0, 99.6, 99.3, 98.9,
...       96.6, 93.0, 91.4, 92.0, 94.5, 96.5, 98.2, 96.9, 98.0, 95.0, 91.8, 88.5]),
...     (model.aetmodel.sequences.logs.loggedwindspeed2m,
...      [2.2, 2.0, 2.5, 2.6, 2.3, 1.7, 2.8, 1.9, 2.6, 2.9, 3.5, 3.4, 3.5, 3.0, 3.9,
...       3.6, 2.2, 2.4, 2.5, 1.5, 2.5, 3.0, 3.2, 3.1]))
>>> lnk(ACKER)
>>> test("lland_knauf_ic_acker_winter_hourly",
...      axis1=(inputs.nied, fluxes.wada), axis2=(states.waes, states.wats),
...      use_conditions=conditions_acker_winter)
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions_acker_winter))
0.0

conifers (winter)

>>> lnk(NADELW)
>>> test("lland_knauf_ic_nadelw_winter_hourly",
...      axis1=(inputs.nied, fluxes.wada), axis2=(states.waes, states.wats),
...      use_conditions=conditions_nadelw_winter)
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions_nadelw_winter))
0.0

acre (snow surface temperature)

>>> lnk(ACKER)
>>> ktschnee(5.0)
>>> test("lland_knauf_ic_acker_winter_ktschnee_hourly",
...      axis1=(inputs.nied, fluxes.wada),
...      axis2=(states.waes, states.wats),
...      use_conditions=conditions_acker_winter_ktschnee)
Click to see the table
Click to see the graph
>>> round_(model.check_waterbalance(conditions_acker_winter_ktschnee))
0.0
class hydpy.models.lland_knauf_ic.Model[source]

Bases: Main_RadiationModel_V1, Main_RadiationModel_V4, Main_AETModel_V1B, Main_SoilModel_V1, Sub_TempModel_V1, Sub_PrecipModel_V1, Sub_IntercModel_V1, Sub_SoilWaterModel_V1, Sub_SnowCoverModel_V1, Sub_SnowyCanopyModel_V1, Sub_SnowAlbedoModel_V1

HydPy-L-Knauf-Ic (adoption of LARSIM with Knauf-based snow modelling including snow interception).

The following “inlet update methods” are called in the given sequence at the beginning of each simulation step:
  • Pick_QZ_V1 Query the current inflow from all inlet nodes.

The following “run methods” are called in the given sequence during each simulation step:
The following “outlet update methods” are called in the given sequence at the end of each simulation step:
The following interface methods are available to main models using the defined model as a submodel:
The following “additional methods” might be called by one or more of the other methods or are meant to be directly called by the user:
Users can hook submodels into the defined main model if they satisfy one of the following interfaces:
  • AETModel_V1 Interface for calculating interception evaporation, evapotranspiration from soils, evaporation from water areas in separate steps.

  • SoilModel_V1 Soil submodel interface for calculating infiltration and percolation in multiple soil compartments.

The following “submodels” might be called by one or more of the implemented methods or are meant to be directly called by the user:
  • PegasusESnowInz Pegasus iterator for finding the correct energy content of the intercepted snow.

  • PegasusESnow Pegasus iterator for finding the correct snow energy content.

  • PegasusTempSSurface Pegasus iterator for finding the correct snow surface temperature.

DOCNAME: DocName = ('L-Knauf-Ic', 'adoption of LARSIM with Knauf-based snow modelling including snow interception')
idx_hru

The hydrological response unit index.

radiationmodel: SubmodelProperty

Required submodel that complies with one of the following interfaces: RadiationModel_V1 or RadiationModel_V4.

aetmodel: modeltools.SubmodelProperty

Required submodel that complies with the following interface: AETModel_V1.

soilmodel: modeltools.SubmodelProperty

Optional submodel that complies with the following interface: SoilModel_V1.

check_waterbalance(initial_conditions: dict[str, dict[str, dict[str, float | ndarray[Any, dtype[float64]]]]]) float[source]

Determine the water balance error of the previous simulation run in mm.

Method check_waterbalance() calculates the balance error as follows:

\[\sum_{t=t0}^{t1} \Bigg( NKor_t + QZH_t - \bigg( \sum_{k=1}^{nhru} fhru^k \cdot \Big( EvI_t^k + EvSInz_t^k + EvS_t^k + EvB_t^k \Big) \bigg) - QAH_t \Bigg) + \sum_{k=1}^{nhru} fhru^k \cdot \bigg( \Big( Inzp_{t0}^k - Inzp_{t1}^k \Big) + \Big( SInz_{t0}^k - SInz_{t1}^k \Big) + \Big( WAeS_{t0}^{k} - WAeS_{t1}^{k} \Big) + \Big( BoWa_{t0}^{k} - BoWa_{t1}^{k} \Big) \bigg) - \bigg( \Big( SDG2_{t0} - SDG2_{t1} \Big) + \Big( SDG1_{t0} - SDG1_{t1} \Big) + \Big( SIG2_{t0} - SIG2_{t1} \Big) + \Big( SIG1_{t0} - SIG1_{t1} \Big) + \Big( SBG_{t0} - SBG_{t1} \Big) \bigg)\]

The returned error should usually be in scale with numerical precision so that it does not affect the simulation results in any relevant manner. The only exception we are aware of is the “generation” of additional water when the base flow storage cannot meet the water demand required for the calculated capillary rise (see acre (capillary rise, water balance error)).

Pick the required initial conditions before starting the simulation run via property conditions. See the integration tests of the application model lland_knauf_ic for some examples.

REUSABLE_METHODS: ClassVar[tuple[type[ReusableMethod], ...]] = ()
cymodel: CyModelProtocol | None
parameters: parametertools.Parameters
sequences: sequencetools.Sequences
masks: masktools.Masks
class hydpy.models.lland_knauf_ic.Masks[source]

Bases: Masks

Masks applicable to lland_knauf_ic.

The following classes are selected:
class hydpy.models.lland_knauf_ic.AideSequences(master: Sequences, cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: AideSequences

Aide sequences of model lland_knauf_ic.

The following classes are selected:
  • SNRatio() Ratio of frozen precipitation to total precipitation [-].

  • RLAtm() Atmosphärische Gegenstrahlung (longwave radiation emitted from the atmosphere) [W/m²].

  • TempS() Temperatur der Schneedecke (temperature of the snow layer) [°C].

  • TempSInz() Temperatur des interzepierten Schnees (temperature of the intercepted snow) [°C].

class hydpy.models.lland_knauf_ic.ControlParameters(master: Parameters, cls_fastaccess: type[FastAccessParameter] | None = None, cymodel: CyModelProtocol | None = None)

Bases: SubParameters

Control parameters of model lland_knauf_ic.

The following classes are selected:
  • FT() Teileinzugsgebietsfläche (subbasin area) [km²].

  • NHRU() Anzahl der Hydrotope (number of hydrological response units) [-].

  • Lnk() Landnutzungsklasse (land use class) [-].

  • FHRU() Flächenanteile der Hydrotope (area percentages of the respective HRUs) [-].

  • KG() Niederschlagskorrekturfaktor (adjustment factor for precipitation) [-].

  • KT() Temperaturkorrektursummand (adjustment summand for air temperature) [°C].

  • P1Strahl() Konstante der Globalstrahlungsreduktion für Wald (constant for reducing the global radiation in forests) [-].

  • P2Strahl() Faktor der Globalstrahlungsreduktion für Wald (factor for reducing the global radiation in forests) [-].

  • Albedo0Snow() Albedo von Neuschnee (albedo of fresh snow) [-].

  • SnowAgingFactor() Wichtungsfaktor für die Sensitivität der Albedo für die Alterung des Schnees (weighting factor of albedo sensitivity for snow aging) [-].

  • Turb0() Parameter des Übergangskoeffizienten des turbulenten Wärmestroms (parameter of transition coefficient for turbulent heat flux) [W/m²/K].

  • Turb1() Parameter des Übergangskoeffizienten des turbulenten Wärmestroms (parameter of transition coefficient for turbulent heat flux) [J/m³/K].

  • MeasuringHeightWindSpeed() The height above ground of the wind speed measurements [m].

  • P1Wind() Konstante der Windgeschwindigkeitsreduktion für Wald (constant for reducing the wind speed in forests) [-].

  • P2Wind() Faktor der Windgeschwindigkeitsreduktion für Wald (factor for reducing the wind speed in forests) [-].

  • LAI() Blattflächenindex (leaf area index) [-].

  • HInz() Interzeptionskapazität bezogen auf die Blattoberfläche (interception capacity normalized to the leaf surface area) [mm].

  • P1SIMax() Konstante zur Berechnung der maximalen Schneeinterzeptionskapazität basierend auf dem Blattflächenindex (constant for calculating the maximum snow interception capacity based on the leaf area index) [mm].

  • P2SIMax() Faktor zur Berechnung der maximalen Schneeinterzeptionskapazität basierend auf dem Blattflächenindex (factor for calculating the maximum snow interception capacity based on the leaf area index) [mm].

  • P1SIRate() Konstante zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und Niederschlagsintensität basierend auf dem Blattflächenindex (constant for calculating the ratio of the snow interception rate and the precipitation intensity based on the leaf area index) [-].

  • P2SIRate() Faktor zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und Niederschlagsintensität basierend auf dem Blattflächenindex (factor for calculating the ratio of the snow interception rate and precipitation intensity based on the leaf area index) [-].

  • P3SIRate() Faktor zur Berechnung des Verhältnisses von Schneeinerzeptionsrate und Niederschlagsintensität basierend auf der bereits interzipierten Schneemenge (factor for calculating the ratio of the snow interception rate and precipitation intensity based on the amount of already intercepted snow) [1/mm].

  • TRefN() Niederschlagstemperaturgrenzwert des zur Berechnung des Wärmeeintrags durch Regen (precipitation temperature threshold to calculate heat flux caused by liquid precipitation on snow) [°C].

  • TGr() Temperaturgrenzwert flüssiger/fester Niederschlag (threshold temperature liquid/frozen precipitation) [°C].

  • TSp() Temperaturspanne flüssiger/fester Niederschlag (temperature range with mixed precipitation) [°C].

  • PWMax() Maximalverhältnis Gesamt- zu Trockenschnee (maximum ratio of the total and the frozen water equivalent stored in the snow cover) [-].

  • RefreezeFlag() Flag um wiedergefrieren zu aktivieren (flag to activate refreezing) [-].

  • KTSchnee() Effektive Wärmeleitfähigkeit der obersten Schneeschicht (effective thermal conductivity of the top snow layer) [W/m²/K].

  • WG2Z() Bodenwärmestrom in der Tiefe 2z (soil heat flux at depth 2z) [W/m²].

  • WMax() Maximaler Bodenwasserspeicher (maximum soil water storage) [mm].

  • FK() Feldkapazität / Mindestbodenfeuchte für die Interflowentstehung (field capacity / threshold value of soil moisture for interflow generation) [mm].

  • PWP() Permanenter Welkepunkt / Mindestbodenfeuchte für die Basisabflussentstehung (permanent wilting point threshold value of soil moisture for base flow generation) [mm].

  • BSf() Bodenfeuchte-Sättigungsfläche-Parameter (shape parameter for the relation between the avarage soil moisture and the relative saturated area of a subbasin) [-].

  • FVF() Frostversiegelungsfaktor zur Ermittelung des Frostversiegelungsgrades (frost sealing factor for determination of the degree of frost sealing FVG) [-].

  • BSFF() Exponent zur Ermittelung des Frostversieglungsgrades (frost sealing exponent for determination of degree of frost sealing FVG) [-].

  • DMin() Drainageindex des mittleren Bodenspeichers (flux rate for releasing interflow from the middle soil compartment) [mm/T].

  • DMax() Drainageindex des oberen Bodenspeichers (additional flux rate for releasing interflow from the upper soil compartment) [mm/T].

  • Beta() Drainageindex des tiefen Bodenspeichers (storage coefficient for releasing base flow from the lower soil compartment) [1/T].

  • FBeta() Faktor zur Erhöhung der Perkolation im Grobporenbereich (factor for increasing percolation under wet conditions) [-].

  • KapMax() Maximale kapillare Aufstiegsrate (maximum capillary rise) [mm/T].

  • KapGrenz() Grenzwerte für den kapillaren Aufstieg (threshold values related to the capillary rise) [mm].

  • RBeta() Boolscher Parameter der steuert, ob the Perkolation unterhalb der Feldkapazität auf Null reduziert wird (flag to indicate if seepage is reduced to zero below field capacity) [-].

  • VolBMax() Maximaler Inhalt des Gebietsspeichers für Basisabfluss (highest possible base flow storage) [mm].

  • GSBMax() Faktor zur Anpassung von VolBMax (factor for adjusting VolBMax) [-].

  • GSBGrad1() Höchste Volumenzunahme des Gebietsspeichers für Basisabfluss ohne Begrenzung des Zuflusses (highest possible baseflow storage increase without inflow reductions) [mm/T].

  • GSBGrad2() Volumenzunahme des Gebietsspeichers für Basisabfluss, oberhalb der jeglicher Zufluss ausgeschlossen ist (highest possible baseflow storage increase) [mm/T].

  • A1() Parameter für die kontinuierliche Aufteilung der Direktabflusskomponenten (threshold value for the continuous seperation of direct runoff in a slow and a fast component) [mm/T]

  • A2() Parameter für die diskontinuierliche Aufteilung der Direktabflusskomponenten (threshold value for the discontinuous seperation of direct runoff in a slow and a fast component) [mm/T]

  • TInd() Fließzeitindex (factor related to the time of concentration) [T].

  • EQB() Kalibrierfaktor für die Basisabflusskonzentration (factor for adjusting the concentration time of baseflow). [-].

  • EQI1() Kalibrierfaktor für die “untere” Zwischenabflusskonzentration (factor for adjusting the concentration time of the first interflow component) [-].

  • EQI2() Kalibrierfaktor für die “obere” Zwischenabflusskonzentration (factor for adjusting the concentration time of the second interflow component) [-].

  • EQD1() Kalibrierfaktor für die langsamere Direktabflusskonzentration (factor for adjusting the concentration time of the slower component of direct runoff). [-].

  • EQD2() Kalibrierfaktor für die schnellere Direktabflusskonzentration (factor for adjusting the concentration time of the faster component of direct runoff). [-].

  • NegQ() Option: sind negative Abflüsse erlaubt (flag that indicated whether negative discharge values are allowed or not) [-].

class hydpy.models.lland_knauf_ic.DerivedParameters(master: Parameters, cls_fastaccess: type[FastAccessParameter] | None = None, cymodel: CyModelProtocol | None = None)

Bases: SubParameters

Derived parameters of model lland_knauf_ic.

The following classes are selected:
  • MOY() References the “global” month of the year index array [-].

  • Seconds() The length of the actual simulation step size in seconds [s].

  • NmbLogEntries() The number of log entries required for a memory duration of 24 hours [-].

  • AbsFHRU() Flächen der Hydrotope (areas of the respective HRUs) [km²].

  • KInz() Interzeptionskapazität bezogen auf die Bodenoberfläche (interception capacity normalized to the soil surface area) [mm].

  • HeatOfFusion() Heat which is necessary to melt the frozen soil water content [WT].

  • Fr() Reduktionsfaktor für Strahlung according to LEG (2020) (basierend auf LUWG (2015)) (reduction factor for short- and long wave radiation) LEG (2020) (based on LUWG (2015)) [-].

  • KB() Konzentrationszeit des Basisabflusses (concentration time of the baseflow storage) [T].

  • KI1() Konzentrationszeit des “unteren” Zwischenabflusses (concentration time of the first interflow storage) [T].

  • KI2() Konzentrationszeit des “oberen” Zwischenabflusses” (concentration time of the second interflow storage) [T].

  • KD1() Konzentrationszeit des “langsamen” Direktabflusses (concentration time of the slow direct runoff storage) [T].

  • KD2() Konzentrationszeit des “schnellen” Direktabflusses (concentration time of the fast direct runoff storage) [T].

  • QFactor() Factor for converting mm/T to m³/s.

class hydpy.models.lland_knauf_ic.FactorSequences(master: Sequences, cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: FactorSequences

Factor sequences of model lland_knauf_ic.

The following classes are selected:
class hydpy.models.lland_knauf_ic.FixedParameters(master: Parameters, cls_fastaccess: type[FastAccessParameter] | None = None, cymodel: CyModelProtocol | None = None)

Bases: SubParameters

Fixed parameters of model lland_knauf_ic.

The following classes are selected:
  • CPWasser() Spezifische Wärmekapazität von Wasser (specific heat capacity of water) [WT/kg/K].

  • CPEis() Spezifische Wärmekapazität von Eis bei 0 °C (specific heat capacity of ice at a temperature of 0 °C) [WT/kg/K].

  • RSchmelz() Spezifische Schmelzwärme von Wasser (specific melt heat of water) [WT/kg].

  • Z() Halbe Mächtigkeit der in der Temperaturmodellierung betrachteten Bodensäule (the half thickness of the surface soil layer relevant for modelling soil temperature) [m].

  • BoWa2Z() Bodenwassergehalt der Bodenschicht bis zu einer Tiefe 2z (soil water content of the soil layer down two a depth of 2z) [mm].

  • LambdaG() Wärmeleitfähigkeit des Bodens (thermal conductivity of the top soil layer) [W/m/K].

  • Sigma() Stefan-Boltzmann-Konstante (Stefan-Boltzmann constant) [W/m²/K].

  • LWE() Mittlere latente Verdunstungswärme für Wasser und Eis (average heat of condensation for water and ice) [WT/kg].

  • PsyInv() Kehrwert der Psychrometerkonstante über Schnee und Eis bei 0°C (inverse psychrometric constant for ice and snow at 0°C) [K/hPa].

  • Z0() Rauhigkeitslänge für Wiese (roughness length for short grass) [m].

  • FrAtm() Empirischer Faktor zur Berechnung der atmosphärischen Gegenstrahlung (empirical factor for the calculation of atmospheric radiation) [-]

  • CG() Volumetrische Wärmekapazität des Bodens (volumetric heat capacity of soil) [WT/m³/K].

class hydpy.models.lland_knauf_ic.FluxSequences(master: Sequences, cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: FluxSequences

Flux sequences of model lland_knauf_ic.

The following classes are selected:
  • QZ() Zufluss in das Teilgebiet (inflow into the subcatchment) [m³/s].

  • QZH() Abflussspende in das Teilgebiet (inflow into the subcatchment) [mm/T].

  • DailySunshineDuration() Daily sunshine duration [h].

  • DailyPossibleSunshineDuration() Astronomically possible daily sunshine duration [h].

  • GlobalRadiation() Globalstrahlung (global radiation) [W/m²].

  • NKor() Korrigierter Niederschlag (corrected precipitation) [mm/T].

  • TKor() Korrigierte Lufttemperatur (corrected air temperature) [°C].

  • WindSpeed2m() Wind speed at a height of 2 m above the ground for grass [m/s].

  • ReducedWindSpeed2m() Land-use-specific wind speed at a height of 2 m above the ground [m/s].

  • SaturationVapourPressure() Saturation vapour pressure [hPa].

  • SaturationVapourPressureInz() Sättigungsdampdruck unmittelbar oberhalb der Oberfläche des interzepierten Schnees (saturation vapour pressure directly above the surface of the intercepted snow) [hPa].

  • SaturationVapourPressureSnow() Saturation vapour pressure snow [hPa].

  • ActualVapourPressure() Actual vapour pressure [hPa].

  • TZ() Bodentemperatur in der Tiefe z (soil temperature at depth z) [°C].

  • WG() “Dynamischer” Bodenwärmestrom (“dynamic” soil heat flux) [W/m²].

  • NetShortwaveRadiationInz() Kurzwellige Netto-Strahlungsbilanz für den interzipierten Schnee (net shortwave radiation for intercepted snow) [W/m²].

  • NetShortwaveRadiationSnow() Kurzwellige Netto-Strahlungsbilanz für Schneeoberflächen (net shortwave radiation for snow surfaces) [W/m²].

  • NetLongwaveRadiationInz() Langwellige Nettostrahlung des interzepierten Schnees (net longwave radiation of the intercepted snow [W/m²].

  • NetLongwaveRadiationSnow() Net longwave radiation for snow-surfaces [W/m²].

  • NetRadiationInz() Nettostrahlung des interzepierten Schnees (total net radiation of the intercepted snow [W/m²].

  • NetRadiationSnow() Total net radiation for snow-surfaces [W/m²].

  • NBes() Gesamter Bestandsniederschlag (total stand precipitation) [mm/T].

  • SBes() Schneeanteil Bestandsniederschlag (frozen stand precipitation) [mm/T].

  • SnowIntMax() Schneeinterzeptionsspeicherkapazität (capacity of the snow interception storage) [mm].

  • SnowIntRate() Anteil des im Schneeinterzeptionsspeicher zurückgehaltenen Niederschlags (ratio between the snow interception rate and precipitation) [-].

  • NBesInz() Gesamter Bestandsniederschlag, der den Schneeinterzeptionsspeicher erreicht (total stand precipitation reaching the snow interception storage) [mm/T].

  • SBesInz() Gefrorener Bestandsniederschlag, der den Schneeinterzeptionsspeicher erreicht (frozen amount of stand precipitation reaching the snow interception storage) [mm/T].

  • WNiedInz() Niederschlagsbedingter Wärmestrom in den Schneeinterzeptionsspeicher (heat flux into the snow interception storage due to precipitation) [W/m²].

  • ActualAlbedoInz() Aktuelle Albedo der Oberfläche des interzeptierten Schnees (the current albedo of the surface of the intercepted snow) [-].

  • WaDaInz() Wasserdargebot des Schneeinterzeptionsspeichers (water leaving the snow interception storage) [mm/T].

  • SchmPotInz() Potentielle Schmelze des interzepierten Schnees (potential amount of snow melting within the snow interception storage) [mm/T].

  • SchmInz() Tatsächliche Schmelze des interzepierten Schnees (actual amount of snow melting within the snow cover) [mm/T].

  • GefrPotInz() Potentielles Wiedergefrieren des interzipierten Schnees (potential amount of water refreezing within the snow interception storage) [mm/T].

  • GefrInz() Tatsächliche Wiedergefrieren des interzipierten Schnees (actual amount of water refreezing within the snow interception storage) [mm/T].

  • EvSInz() Tatsächliche Verdunstung des interzepierten Schnees (actual evaporation of the intercepted snow) [mm/T].

  • EvI() Tatsächliche Verdunstung von Interzeptions- und permanenten Wasserflächen (actual evaporation from interception storages and water areas) [mm/T].

  • EvB() Tatsächliche Verdunstung von Bodenwasser (actual evaporation of soil water) [mm/T].

  • EvS() Tatsächliche Schneeverdunstung (actual evaporation of snow-water) [mm/T].

  • WNied() Niederschlagsbedingter Wärmestrom in die Schneedecke (heat flux into the snow layer due to precipitation) [W/m²].

  • TempSSurface() Schneetemperatur an der Schneeoberfläche (the snow temperature at the snow surface) [°C].

  • ActualAlbedo() Aktuelle Albedo der relevanten Oberfläche (the current albedo of the relevant surface) [-].

  • SchmPot() Potentielle Schneeschmelze (potential amount of water melting within the snow cover) [mm/T].

  • Schm() Tatsächliche Schneeschmelze (actual amount of water melting within the snow cover) [mm/T].

  • GefrPot() Potentielles Schnee-Wiedergefrieren (potential amount of water refreezing within the snow cover) [mm/T].

  • Gefr() Tatsächliche Schnee-Wiedergefrieren (actual amount of water refreezing within the snow cover) [mm/T].

  • WLatInz() Latente Wärmestrom interzepierter Schnee/Atmosphäre (latent heat flux between the intercepted snow and the atmosphere) [W/m²].

  • WLatSnow() Latente Wärmestrom Schnee/Atmosphäre (latent heat flux between the snow-layer and the atmosphere) [W/m²].

  • WSensInz() Fühlbare Wärmestrom interzipierter Schnee/Atmosphäre (sensible heat flux between the intercepted snow and the atmosphere) [W/m²].

  • WSensSnow() Fühlbare Wärmestrom Schnee/Atmosphäre (sensible heat flux between the snow-layer and the atmosphere) [W/m²].

  • WSurfInz() Wärmestrom vom Körper des interzepierten Schnees bis zu dessen Schneeoberfläche (heat flux from the body of the intercepted snow to its surface) [W/m²].

  • WSurf() Wärmestrom von der Schneedecke zur Schneeoberfläche (heat flux from the snow layer to the snow surface) [W/m²].

  • SFF() Relativer Anteil des gefrorenen Bodenwassers bis zu einer Tiefe von 2z (relative proportion of frozen soil water) [-].

  • FVG() Frostversiegelungsgrad (degree of frost sealing) [-].

  • WaDa() Wasserdargebot (water reaching the soil routine) [mm/T].

  • QDB() Direktabfluss-Abgabe aus dem Bodenspeicher (direct runoff release from the soil storage) [mm/T].

  • QIB1() Erste Komponente der Interflow-Abgabe aus dem Bodenspeicher (first component of the interflow release from the soil storage) [mm/T].

  • QIB2() Zweite Komponente der Interflow-Abgabe aus dem Bodenspeicher (second component of the interflow release from the soil storage) [mm/T].

  • QBB() Basisabfluss-Abgabe aus dem Bodenspeicher (base flow release from the soil storage) [mm/T].

  • QKap() Kapillarer Aufstieg in den Bodenspeicher (capillary rise to soil storage) [mm/T].

  • QDGZ() Gesamtzufluss in beide Direktabfluss-Gebietsspeicher (total inflow to both direct runoff storages) [mm/T].

  • QDGZ1() Zufluss in den trägeren Direktabfluss-Gebietsspeicher (inflow to the slow direct runoff storage) [mm/T].

  • QDGZ2() Zufluss in den dynamischeren Direktabfluss-Gebietsspeicher (inflow to the fast direct runoff storage) [mm/T].

  • QIGZ1() “Zufluss in den ersten Zwischenabfluss-Gebietsspeicher (inflow to the first interflow storage) [mm/T].

  • QIGZ2() Zufluss in den zweiten Zwischenabfluss-Gebietsspeicher (inflow to the second interflow storage) [mm/T].

  • QBGZ() Zufluss in den Basisabfluss-Gebietsspeicher (inflow to the base flow storage) [mm/T].

  • QDGA1() Abfluss aus dem trägeren Direktabfluss-Gebietsspeicher (outflow from the slow direct runoff storage) [mm/T].

  • QDGA2() Abfluss aus dem dynamischeren Direktabfluss-Gebietsspeicher (outflow from the fast direct runoff storage) [mm/T].

  • QIGA1() Abfluss aus dem “unteren” Zwischenabfluss-Gebietsspeicher (outflow from the first interflow storage) [mm/T].

  • QIGA2() Abfluss aus dem “oberen” Zwischenabfluss-Gebietsspeicher (outflow from the second interflow storage) [mm/T].

  • QBGA() Abfluss aus dem Basisabfluss-Gebietsspeicher (outflow from the base flow storage) [mm/T].

  • QAH() Abflussspende des Teilgebiets (runoff at the catchment outlet) [mm/T].

  • QA() Abfluss des Teilgebiets (runoff at the catchment outlet) [m³/s].

class hydpy.models.lland_knauf_ic.InletSequences(master: Sequences, cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: InletSequences

Inlet sequences of model lland_knauf_ic.

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

class hydpy.models.lland_knauf_ic.InputSequences(master: Sequences, cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: InputSequences

Input sequences of model lland_knauf_ic.

The following classes are selected:
class hydpy.models.lland_knauf_ic.LogSequences(master: Sequences, cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: LogSequences

Log sequences of model lland_knauf_ic.

The following classes are selected:
class hydpy.models.lland_knauf_ic.OutletSequences(master: Sequences, cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: OutletSequences

Outlet sequences of model lland_knauf_ic.

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

class hydpy.models.lland_knauf_ic.StateSequences(master: Sequences, cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: StateSequences

State sequences of model lland_knauf_ic.

The following classes are selected:
  • Inzp() Interzeptionsspeicherung (interception storage) [mm].

  • STInz() Wasseräquivalent Trockenschnee im Interzeptionsspeicher (total water equivalent of the intercepted snow) [mm].

  • SInz() Wasseräquivalent Gesamtschnee im Interzeptionsspeicher (frozen water equivalent of the intercepted snow) [mm].

  • ESnowInz() Kälteinhalt der Schneedecke des Interzeptionsspeichers [WT/m²].

  • ASInz() Dimensionsloses Alter des interzipierten Schnees (dimensionless age of the intercepted snow layer) [-].

  • WATS() Wasseräquivalent Trockenschnee auf der Bodenoberfläche (frozen water equivalent of the snow cover) [mm].

  • WAeS() Wasseräquivalent Gesamtschnee auf der Bodenoberfläche (total water equivalent of the snow cover) [mm].

  • ESnow() Thermischer Energieinhalt der Schneedecke bezogen auf 0°C (thermal energy content of the snow layer with respect to 0°C) [WT/m²].

  • TauS() Dimensionsloses Alter der Schneedecke (dimensionless age of the snow layer) [-].

  • EBdn() Energiegehalt des Bodenwassers (energy content of the soil water) [WT/m²].

  • BoWa() Bodenwasserspeicherung (soil water storage) [mm].

  • SDG1() Träger Direktabfluss-Gebietsspeicher (slow direct runoff storage) [mm].

  • SDG2() Dynamischer Direktabfluss-Gebietsspeicher (fast direct runoff storage) [mm].

  • SIG1() Erster Zwischenabfluss-Gebietsspeicher (first interflow storage) [mm].

  • SIG2() Zweiter Zwischenabfluss-Gebietsspeicher (second interflow storage) [mm].

  • SBG() Basisabfluss-Gebietsspeicher (base flow storage) [mm].