# -*- coding: utf-8 -*-
# pylint: disable=missing-module-docstring
# import...
# ...from HydPy
from hydpy.core import exceptiontools
from hydpy.core import parametertools
from hydpy.auxs import interptools
[docs]
class SurfaceArea(parametertools.Parameter):
"""Average size of the water surface [km²]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class CatchmentArea(parametertools.Parameter):
"""Size of the catchment draining into the dam [km²]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class NmbLogEntries(parametertools.Parameter):
"""Number of log entries for certain variables [-].
Note that setting a new value by calling the parameter object sets the shapes of
all associated log sequences automatically, except those with a predefined default
shape:
>>> from hydpy.models.dam import *
>>> parameterstep()
>>> nmblogentries(3)
>>> for seq in logs:
... print(seq)
loggedtotalremotedischarge(nan, nan, nan)
loggedoutflow(nan, nan, nan)
loggedadjustedevaporation(nan)
loggedrequiredremoterelease(nan)
loggedallowedremoterelief(nan)
loggedouterwaterlevel(nan)
loggedremotewaterlevel(nan)
To prevent losing information, updating parameter |NmbLogEntries| resets the shape
of the relevant log sequences only when necessary:
>>> logs.loggedtotalremotedischarge = 1.0
>>> nmblogentries(3)
>>> logs.loggedtotalremotedischarge
loggedtotalremotedischarge(1.0, 1.0, 1.0)
"""
NDIM, TYPE, TIME, SPAN = 0, int, None, (1, None)
def __call__(self, *args, **kwargs) -> None:
super().__call__(*args, **kwargs)
new_shape = (self.value,)
for seq in self.subpars.pars.model.sequences.logs:
old_shape = exceptiontools.getattr_(seq, "shape", (None,))
if new_shape != old_shape:
try:
seq.shape = new_shape
except AttributeError:
pass
[docs]
class CorrectionPrecipitation(parametertools.Parameter):
"""Precipitation correction factor [-]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class CorrectionEvaporation(parametertools.Parameter):
"""Evaporation correction factor [-]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class WeightEvaporation(parametertools.Parameter):
"""Time weighting factor for evaporation [-]."""
NDIM, TYPE, TIME, SPAN = 0, float, True, (0.0, 1.0)
[docs]
class RemoteDischargeMinimum(parametertools.SeasonalParameter):
"""Discharge threshold of a cross-section far downstream not to be undercut by the
actual discharge [m³/s]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
def __call__(self, *args, **kwargs) -> None:
self.shape = (-1,)
parametertools.SeasonalParameter.__call__(self, *args, **kwargs)
[docs]
class RemoteDischargeSafety(parametertools.SeasonalParameter):
"""Safety factor for reducing the risk of insufficient water release [m³/s]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
[docs]
class WaterLevel2PossibleRemoteRelief(interptools.SimpleInterpolator):
"""An interpolation function describing the relationship between water level and
the highest possible water release used to relieve the dam during high flow
conditions [-]."""
XLABEL = "water level [m]"
YLABEL = "possible remote relieve [m³/s]"
[docs]
class RemoteReliefTolerance(parametertools.Parameter):
"""A tolerance value for |PossibleRemoteRelief| [m³/s]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class NearDischargeMinimumThreshold(parametertools.SeasonalParameter):
"""Discharge threshold of a cross-section near the dam not to be undercut by the
actual discharge [m³/s]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
[docs]
class NearDischargeMinimumTolerance(parametertools.SeasonalParameter):
"""A tolerance value for the "near discharge minimum" [m³/s]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
[docs]
class RestrictTargetedRelease(parametertools.Parameter):
"""A flag indicating whether low flow variability has to be preserved
or not [-]."""
NDIM, TYPE, TIME, SPAN = 0, bool, None, (None, None)
[docs]
class WaterVolumeMinimumThreshold(parametertools.SeasonalParameter):
"""The minimum operating water volume of the dam [million m³]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (0, None)
[docs]
class WaterLevelMinimumThreshold(parametertools.Parameter):
"""The minimum operating water level of the dam [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (None, None)
[docs]
class WaterLevelMinimumTolerance(parametertools.Parameter):
"""A tolerance value for the minimum operating water level [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class WaterLevelMaximumThreshold(parametertools.Parameter):
"""The water level not to be exceeded [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (None, None)
[docs]
class WaterLevelMaximumTolerance(parametertools.Parameter):
"""A tolerance value for the water level maximum [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class RemoteWaterLevelMaximumThreshold(parametertools.Parameter):
"""The remote water level not to be exceeded [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (None, None)
[docs]
class RemoteWaterLevelMaximumTolerance(parametertools.Parameter):
"""Tolerance value for the remote water level maximum [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class ThresholdEvaporation(parametertools.Parameter):
"""The water level at which actual evaporation is 50 % of potential evaporation
[m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (None, None)
[docs]
class ToleranceEvaporation(parametertools.Parameter):
"""A tolerance value defining the steepness of the transition of actual evaporation
between zero and potential evaporation [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0, None)
[docs]
class WaterLevelMinimumRemoteThreshold(parametertools.Parameter):
"""The minimum operating water level of the dam regarding remote water supply
[m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0, None)
[docs]
class WaterLevelMinimumRemoteTolerance(parametertools.Parameter):
"""A tolerance value for the minimum operating water level regarding remote water
supply [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0, None)
[docs]
class HighestRemoteRelief(parametertools.SeasonalParameter):
"""The highest possible relief discharge from another location [m³/s]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
[docs]
class WaterLevelReliefThreshold(parametertools.SeasonalParameter):
"""The threshold water level of the dam regarding the allowed relief discharge from
another location [m]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
[docs]
class WaterLevelReliefTolerance(parametertools.SeasonalParameter):
"""A tolerance value for parameter |WaterLevelReliefThreshold| [m]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
[docs]
class HighestRemoteSupply(parametertools.SeasonalParameter):
"""The highest possible supply discharge from another location [m³/s]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
[docs]
class WaterLevelSupplyThreshold(parametertools.SeasonalParameter):
"""The threshold water level of the dam regarding the required supply discharge
from another location [m]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
[docs]
class WaterLevelSupplyTolerance(parametertools.SeasonalParameter):
"""A tolerance value for parameter |WaterLevelSupplyThreshold| [m]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
[docs]
class HighestRemoteDischarge(parametertools.Parameter):
"""The highest possible discharge between two remote locations [m³/s]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class HighestRemoteTolerance(parametertools.Parameter):
"""Smoothing parameter associated with |HighestRemoteDischarge| [m³/s]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class WaterVolume2WaterLevel(interptools.SimpleInterpolator):
"""An interpolation function that describes the relationship between water level
and water volume [-]."""
XLABEL = "water volume [million m³]"
YLABEL = "water level [m]"
[docs]
class WaterLevel2FloodDischarge(interptools.SeasonalInterpolator):
"""An interpolation function that describesg the relationship between flood
discharge and water volume [-]."""
XLABEL = "water level [m]"
YLABEL = "flood discharge [m³/s]"
[docs]
class WaterLevelDifference2MaxForcedDischarge(interptools.SeasonalInterpolator):
"""An interpolation function that describes the relationship between the highest
possible forced discharge and the water level difference [-]."""
XLABEL = "water level difference [m]"
YLABEL = "max. forced discharge [m³/s]"
[docs]
class WaterLevelDifference2MaxFreeDischarge(interptools.SeasonalInterpolator):
"""An interpolation function that describes the relationship between the highest
possible free discharge and the water level difference [-]."""
XLABEL = "water level difference [m]"
YLABEL = "max. free discharge [m³/s]"
[docs]
class AllowedWaterLevelDrop(parametertools.Parameter):
"""The highest allowed water level decrease [m/T]."""
NDIM, TYPE, TIME, SPAN = 0, float, True, (0.0, None)
[docs]
class AllowedDischargeTolerance(parametertools.Parameter):
"""Smoothing parameter eventually associated with |AllowedWaterLevelDrop| [m³/s]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class AllowedRelease(parametertools.SeasonalParameter):
"""The maximum water release not causing any harm downstream [m³/s]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
[docs]
class TargetVolume(parametertools.SeasonalParameter):
"""The desired volume of water required within the dam at specific times of the
year [Mio. m³]."""
NDIM, TYPE, TIME, SPAN = 1, float, None, (0.0, None)
[docs]
class TargetRangeAbsolute(parametertools.Parameter):
"""The absolute interpolation range related to parameter |TargetVolume|
[Mio. m³]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class TargetRangeRelative(parametertools.Parameter):
"""The relative interpolation range related to parameter |TargetVolume| [-]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class VolumeTolerance(parametertools.Parameter):
"""Smoothing parameter for volume-related smoothing operations [Mio. m³]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class DischargeTolerance(parametertools.Parameter):
"""Smoothing parameter for discharge-related smoothing operations [m³/s]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)
[docs]
class CrestLevel(parametertools.Parameter):
"""The crest level of a weir [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (None, None)
[docs]
class CrestLevelTolerance(parametertools.Parameter):
"""A tolerance value for the crest level of a weir [m]."""
NDIM, TYPE, TIME, SPAN = 0, float, None, (0.0, None)