Source code for hydpy.models.dam.dam_solver
# -*- coding: utf-8 -*-
# pylint: disable=missing-module-docstring
# import...
# ...from site-packages
import numpy
# ...from HydPy
from hydpy.core import parametertools
from hydpy.models.dam import dam_control
[docs]
class AbsErrorMax(parametertools.SolverParameter):
"""Absolute numerical error tolerance [m³/s]."""
NDIM = 0
TYPE = float
TIME = None
SPAN = (0.0, None)
INIT = 0.0001
CONTROLPARAMETERS = (dam_control.CatchmentArea,)
[docs]
def modify_init(self) -> float:
r"""Adjust and return the value of class constant `INIT`.
Note that the default initial value 0.0001 refers to mm/T. Hence the actual
default initial value in m³/s is:
:math:`AbsErrorMax = 0.0001 \cdot CatchmentArea \cdot 1000 / Seconds`
>>> from hydpy.models.dam import *
>>> simulationstep("1h")
>>> parameterstep("1d")
>>> solver.abserrormax.INIT
0.0001
>>> catchmentarea(2.0)
>>> derived.seconds.update()
>>> from hydpy import round_
>>> round_(solver.abserrormax.modify_init())
0.000056
"""
pars = self.subpars.pars
catchmentarea = pars.control.catchmentarea
seconds = pars.derived.seconds
return self.INIT * catchmentarea * 1000.0 / seconds
[docs]
class RelErrorMax(parametertools.SolverParameter):
"""Relative numerical error tolerance [1/T]."""
NDIM = 0
TYPE = float
TIME = None
SPAN = (0.0, None)
INIT = numpy.nan
[docs]
class RelDTMin(parametertools.SolverParameter):
"""Smallest relative integration time step size allowed [-]."""
NDIM = 0
TYPE = float
TIME = None
SPAN = (0.0, 1.0)
INIT = 0.001
[docs]
class RelDTMax(parametertools.SolverParameter):
"""Largest relative integration time step size allowed [-]."""
NDIM = 0
TYPE = float
TIME = None
SPAN = (0.0, 1.0)
INIT = 1.0