hland_v2

Version 2 of H-Land is very similar to hland_v1. The only difference is in runoff concentration. hland_v2 uses a linear storage cascade instead of a triangle Unit Hydrograph to route both runoff components to the subbasin’s outlet. In some cases, the results of hland_v2 should look more natural than the ones of hland_v1. On the whole, however, the differences should be minor. The real reason for the modification lies in the availability of “physical” storage contents instead of purely mathematical intermediate Unit Hydrograph results as initial conditions, which can simplify data assimilation. We implemented hland_v2 on behalf of the German Federal Institute of Hydrology (BfG) for runoff forecasting in large river basins in central Europe.

The following figure shows the general structure of H-Land Version 2:

_images/HydPy-H-Land_Version-2.png

Integration tests

Note

When new to HydPy, consider reading section How to understand integration tests? first.

The following configurations agree with the documentation on hland_v1. The only difference lies in the additional parameter NmbStorages. In hland_v1, we can modify runoff concentration by parameter MaxBaz only, which corresponds to the response function’s width. In hland_v2, we can also alter the response function’s shape. Here, we set NmbStorages to five, which results in the highest similarity with the fixed-shape triangular response function of hland_v1:

>>> from hydpy import pub
>>> pub.timegrids = "01.01.2000", "05.01.2000", "1h"
>>> from hydpy.models.hland_v2 import *
>>> parameterstep("1h")
>>> from hydpy import Node, Element
>>> outlet = Node("outlet")
>>> land = Element("land", outlets=outlet)
>>> land.model = model
>>> nmbzones(1)
>>> sclass(1)
>>> area(1.0)
>>> zonearea(1.0)
>>> zonez(1.0)
>>> zrelp(2.0)
>>> zrelt(2.0)
>>> zrele(2.0)
>>> psi(1.0)
>>> from hydpy import IntegrationTest
>>> IntegrationTest.plotting_options.axis1 = inputs.p, fluxes.rt, fluxes.qt
>>> IntegrationTest.plotting_options.axis2 = inputs.t
>>> test = IntegrationTest(land)
>>> test.dateformat = "%d/%m %H:00"

field

>>> zonetype(FIELD)
>>> pcorr(1.2)
>>> pcalt(0.1)
>>> rfcf(1.1)
>>> sfcf(1.3)
>>> tcalt(0.6)
>>> ecorr(0.8)
>>> ecalt(-0.1)
>>> epf(0.1)
>>> etf(0.1)
>>> ered(0.5)
>>> icmax(2.0)
>>> sfdist(1.0)
>>> smax(inf)
>>> sred(0.0)
>>> tt(0.0)
>>> ttint(2.0)
>>> dttm(1.0)
>>> cfmax(0.5)
>>> cfvar(0.1)
>>> gmelt(1.0)
>>> gvar(0.2)
>>> cfr(0.1)
>>> whc(0.4)
>>> fc(200.0)
>>> lp(0.8)
>>> beta(2.0)
>>> percmax(0.5)
>>> cflux(0.1)
>>> alpha(2.0)
>>> k(0.001)
>>> k4(0.005)
>>> gamma(0.0)
>>> maxbaz(3.0)
>>> nmbstorages(5)
>>> resparea(False)
>>> recstep(100)
>>> test.inits = ((states.ic, 0.0),
...               (states.sp, 0.0),
...               (states.wc, 0.0),
...               (states.sm, 100.0),
...               (states.uz, 0.0),
...               (states.lz, 10.0),
...               (states.sc, 0.05))
>>> inputs.p.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.2, 0.0, 0.0, 1.3, 5.6, 2.9, 4.9, 10.6, 0.1, 0.7, 3.0, 2.1, 10.4, 3.5, 3.4,
...     1.2, 0.1, 0.0, 0.0, 0.4, 0.1, 3.6, 5.9, 1.1, 20.7, 37.9, 8.2, 3.6, 7.5, 18.5,
...     15.4, 6.3, 1.9, 4.9, 2.7, 0.5, 0.2, 0.5, 2.4, 0.4, 0.2, 0.0, 0.0, 0.3, 2.6,
...     0.7, 0.3, 0.3, 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.3, 0.0, 0.0, 0.0, 0.7, 0.4, 0.1, 0.4, 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.t.series = (
...     21.2, 19.4, 18.9, 18.3, 18.9, 22.5, 25.1, 28.3, 27.8, 31.4, 32.2, 35.2, 37.1,
...     31.2, 24.3, 25.4, 25.9, 23.7, 21.6, 21.2, 20.4, 19.8, 19.6, 19.2, 19.2, 19.2,
...     18.9, 18.7, 18.5, 18.3, 18.5, 18.8, 18.8, 19.0, 19.2, 19.3, 19.0, 18.8, 18.7,
...     17.8, 17.4, 17.3, 16.8, 16.5, 16.3, 16.2, 15.5, 14.6, 14.7, 14.6, 14.1, 14.3,
...     14.9, 15.7, 16.0, 16.7, 17.1, 16.2, 15.9, 16.3, 16.3, 16.4, 16.5, 18.4, 18.3,
...     18.1, 16.7, 15.2, 13.4, 12.4, 11.6, 11.0, 10.5, 11.7, 11.9, 11.2, 11.1, 11.9,
...     12.2, 11.8, 11.4, 11.6, 13.0, 17.1, 18.2, 22.4, 21.4, 21.8, 22.2, 20.1, 17.8,
...     15.2, 14.5, 12.4, 11.7, 11.9)
>>> inputs.tn.series = inputs.t.series - 1.0
>>> inputs.epn.series = (
...     0.100707, 0.097801, 0.096981, 0.09599, 0.096981, 0.102761, 0.291908, 1.932875,
...     4.369536, 7.317556, 8.264362, 9.369867, 5.126178, 6.62503, 7.397619, 2.39151,
...     1.829834, 1.136569, 0.750986, 0.223895, 0.099425, 0.098454, 0.098128, 0.097474,
...     0.097474, 0.097474, 0.096981, 0.096652, 0.096321, 0.09599, 0.187298, 1.264612,
...     3.045538, 1.930758, 2.461001, 6.215945, 3.374783, 8.821555, 4.046025, 2.110757,
...     2.239257, 2.877848, 1.591452, 0.291604, 0.092622, 0.092451, 0.091248, 0.089683,
...     0.089858, 0.089683, 0.088805, 0.089157, 0.090207, 0.091593, 0.154861, 0.470369,
...     1.173726, 4.202296, 4.359715, 5.305753, 5.376027, 4.658915, 7.789594, 4.851567,
...     5.30692, 3.286036, 1.506216, 0.274762, 0.087565, 0.085771, 0.084317, 0.083215,
...     0.082289, 0.0845, 0.084864, 0.083584, 0.0834, 0.084864, 0.310229, 1.391958,
...     3.195876, 5.191651, 7.155036, 8.391432, 8.391286, 10.715238, 9.383394, 7.861915,
...     6.298329, 2.948416, 1.309232, 0.32955, 0.089508, 0.085771, 0.0845, 0.084864)
>>> test.reset_inits()
>>> conditions = sequences.conditions

Besides slight differences in runoff concentration, the following calculation reproduces the results of the field experiment of hland_v1 exactly:

>>> test("hland_v2_field")
Click to see the table
Click to see the graph

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

>>> from hydpy import round_
>>> round_(model.check_waterbalance(conditions))
0.0

contributing area

Besides slight differences in runoff concentration, the following calculation reproduces the results of the contributing area experiment of hland_v1 exactly:

>>> resparea(True)
>>> test("hland_v2_resparea")
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

low accuracy

The low accuracy example of hland_v1 illustrates how decreasing RecStep for gaining computational speed might result in too low numerical accuracies. For hland_v2, such inaccuracies can be even more severe, as RecStep controls the accuracy of the numerical solution both of the upper zone layer and the linear storage cascade:

>>> recstep(1)
>>> test("hland_v2_low_accuracy")
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

sealed area

Besides slight differences in runoff concentration, the following calculation reproduces the results of the sealed area experiment of hland_v1 exactly:

>>> recstep(100)
>>> zonetype(SEALED)
>>> test("hland_v2_sealed")
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

internal lake

Besides slight differences in runoff concentration, the following calculation reproduces the results of the internal lake experiment of hland_v1 exactly:

>>> recstep(100)
>>> zonetype(ILAKE)
>>> ttice(13.0)
>>> test("hland_v2_ilake")
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

snow classes

Besides slight differences in runoff concentration, the following calculation reproduces the results of the snow classes experiment of hland_v1 exactly:

>>> sclass(2)
>>> sfdist(linear=0.2)
>>> zonetype(FIELD)
>>> t_series = inputs.t.series.copy()
>>> tn_series = inputs.tn.series.copy()
>>> inputs.t.series[:48] = -20.0
>>> inputs.t.series[48:] = 20.0
>>> inputs.tn.series = inputs.t.series
>>> test("hland_v2_snow_classes")
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

glacier

Besides slight differences in runoff concentration, the following calculation reproduces the results of the glacier experiment of hland_v1 exactly:

>>> zonetype(GLACIER)
>>> test("hland_v2_glacier")
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

multiple zones

Besides slight differences in runoff concentration, the following calculation reproduces the results of the multiple zones experiment of hland_v1 exactly:

>>> ttice(0.0)
>>> resparea(False)
>>> name2value = {par.name: par.value for par in control}
>>> nmbzones(5)
>>> sclass(1)
>>> area(15.0)
>>> zonearea(5.0, 4.0, 3.0, 2.0, 1.0)
>>> zonetype(FIELD, FOREST, GLACIER, ILAKE, SEALED)
>>> sfdist(1.0)
>>> for name, value in name2value.items():
...     if name not in ("nmbzones", "sclass", "area", "zonearea", "zonetype", "sfdist"):
...         control[name].value = value
>>> inputs.t.series = t_series
>>> inputs.tn.series = tn_series
>>> test("hland_v2_multiple_zones")
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

snow redistribution

Besides slight differences in runoff concentration, the following calculation reproduces the results of the snow redistribution 1 experiment of hland_v1 exactly:

>>> zonez(0.0, 10.0, 30.0, 0.0, 20.0)
>>> smax(200.0)
>>> sred(n_zones=1)
>>> inputs.t.series = 5.0
>>> test("hland_v2_snow_redistribution",
...      axis1=(states.sp, states.wc), axis2=(factors.tc, fluxes.pc))
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
class hydpy.models.hland_v2.Model[source]

Bases: AdHocModel

HBV96-SC version of HydPy-H-Land (hland_v2).

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 of 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 the 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_SPL_WCL_SP_WC_V1 Calculate the subbasin-internal redistribution losses of the snow layer.

  • Calc_SPG_WCG_SP_WC_V1 Calculate the subbasin-internal redistribution gains of the snow layer.

  • Calc_CFAct_V1 Adjust the day degree factor for snow to the current day of the year.

  • Calc_Melt_SP_WC_V1 Calculate the 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_SWE_V1 Calculate the total snow water equivalent.

  • Calc_SR_V1 Calculate the sealed surface runoff.

  • Calc_GAct_V1 Adjust the day degree factor for glacier ice to the current day of the year.

  • Calc_GlMelt_In_V1 Calculate the melting of non-snow-covered glaciers and add it to the water release of the snow module.

  • Calc_R_SM_V1 Calculate effective precipitation and update the soil moisture.

  • Calc_CF_SM_V1 Calculate capillary flow and update the soil moisture.

  • Calc_EA_SM_V1 Calculate soil evaporation and update the 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 Calculate the percolation and direct runoff leaving the upper zone storage and update it accordingly.

  • Calc_LZ_V1 Add percolation from the upper zone layera and lake precipitation to the lower zone storage.

  • 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 or linear storage cascade input.

  • Calc_OutUH_SC_V1 Calculate the linear storage cascade output (state-space approach).

  • Calc_RT_V1 Calculate the total discharge in mm.

  • Calc_QT_V1 Calculate the total discharge in m³/s.

The following “outlet update methods” are called in the given sequence at the end of each simulation step:
check_waterbalance(initial_conditions: Dict[str, Dict[str, ArrayFloat]]) float[source]

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

Method check_waterbalance() calculates the balance error as follows:

\[\sum_{k=1}^{NmbZones} RelZoneAreas^k \cdot \left( \sum_{t=t0}^{t1} \big( PC_t^k + GLMelt_t^k - EI_t^k - EA_t^k - EL_t^k \big) + \big( IC_{t0}^k - IC_{t1}^k \big) + \frac{1}{SClass} \cdot \sum_{c=1}^{SClass} \Big( \big( SP_{t0}^{c,k} - SP_{t1}^{c,k} \big) + \big( WC_{t0}^{c,k} - WC_{t1}^{c,k} \big) \Big) + \big( SM_{t0}^k - SM_{t1}^k \big) \right) + RelUpperZoneArea \cdot \big( UZ_{t0}^k - UZ_{t1}^k \big) + RelLowerZoneArea \cdot \big( LZ_{t0} - LZ_{t1} \big) - \sum_{t=t0}^{t1} RT_t + \sum_{i=1}^{NmbStorages} \big( SC_{t0}^i - SC_{t1}^i \big)\]

The returned error should always be in scale with numerical precision so that it does not affect the simulation results in any relevant manner.

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

class hydpy.models.hland_v2.Masks[source]

Bases: Masks

Masks applicable to hland_v2.

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

Bases: AideSequences

Aide sequences of model hland_v2.

The following classes are selected:
  • SPE() Subbasin-internal redistribution excess of the snow’s ice content [mm/T].

  • WCE() Subbasin-internal redistribution excess of the snow’s water content [mm/T].

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

Bases: SubParameters

Control parameters of model hland_v2.

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

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

  • SClass() Number of snow classes in each zone [-].

  • ZoneType() Type of each zone [-].

  • ZoneArea() Zone area [km²].

  • Psi() Fraction of the actual sealing of zones classified as SEALED [-].

  • 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].

  • SFDist() Distribution of snowfall [-].

  • SMax() Maximum snow water equivalent [mm].

  • SRed() Snow redistribution paths [-].

  • 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() Average degree day factor for snow (on glaciers or not) [mm/°C/T].

  • CFVar() Annual variability of CFMax [mm/°C/T].

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

  • GVar() Annual variability of GMelt [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].

  • NmbStorages() Number of storages of the linear storage cascade [-].

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

Bases: SubParameters

Derived parameters of model hland_v2.

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

Bases: FactorSequences

Factor sequences of model hland_v2.

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 [-].

  • CFAct() Actual degree day factor for snow (on glaciers or not) [mm/°C/T].

  • SWE() Snow water equivalent [mm].

  • GAct() Actual degree day factor for glacier ice [mm/°C/T].

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

class hydpy.models.hland_v2.FixedParameters(master: Parameters, cls_fastaccess: Type[FastAccessParameter] | None = None, cymodel: CyModelProtocol | None = None)

Bases: SubParameters

Fixed parameters of model hland_v2.

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

Bases: FluxSequences

Flux sequences of model hland_v2.

The following classes are selected:
  • PC() Corrected precipitation [mm/T].

  • EP() Potential evaporation [mm/T].

  • EPC() Corrected potential evaporation [mm/T].

  • EI() Interception evaporation [mm/T].

  • TF() Throughfall [mm/T].

  • SPL() Subbasin-internal redistribution loss of the snow’s ice content [mm/T].

  • WCL() Subbasin-internal redistribution loss of the snow’s water content [mm/T].

  • SPG() Subbasin-internal redistribution gain of the snow’s ice content [mm/T].

  • WCG() Subbasin-internal redistribution gain of the snow’s water content [mm/T].

  • GlMelt() Glacier melt [mm/T].

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

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

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

  • R() Effective soil response [mm/T].

  • SR() Sealed surface runoff [mm/T].

  • EA() Actual soil evaporation [mm/T].

  • CF() Actual capillary flow [mm/T].

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

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

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

  • EL() Actual lake evaporation [mm/T].

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

  • InUH() Input of the triangle unit hydrograph [mm/T].

  • OutUH() Output of the triangle unit hydrograph [mm/T].

  • RT() Total model outflow [mm/T].

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

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

Bases: InputSequences

Input sequences of model hland_v2.

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

  • T() Temperature [°C].

  • TN() Normal temperature [°C].

  • EPN() Normal potential evaporation [mm].

class hydpy.models.hland_v2.OutletSequences(master: Sequences, cls_fastaccess: Type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)

Bases: OutletSequences

Outlet sequences of model hland_v2.

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

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

Bases: StateSequences

State sequences of model hland_v2.

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].

  • SC() Storage cascade for runoff concentration [mm].