Source code for hydpy.models.dam_sluice

# pylint: disable=line-too-long, unused-wildcard-import
"""|dam_sluice| is similar to |dam_pump| but is thought for modelling free flow through
sluices driven by differences between inner and outer water levels.  Principally, users
can define arbitrary relationships via |WaterLevelDifference2MaxFreeDischarge|,
including ones that allow for "negative outflow" so that |dam_sluice| takes water from
the downstream model.  However, be careful with that because, depending on the
downstream model's type and the current conditions, negative inflows can cause
problems.

By default, |dam_sluice| neither takes precipitation nor evaporation into account, but
you can add submodels that comply with the |PrecipModel_V2| or |PETModel_V1| interface
that supply this information.

Integration tests
=================

.. how_to_understand_integration_tests::

We take all of the following settings from the documentation on the application model
|dam_pump|:

>>> from hydpy import IntegrationTest, Element, Node, pub, round_
>>> pub.timegrids = "2000-01-01", "2000-01-21", "1d"

>>> from hydpy.aliases import dam_receivers_OWL, dam_receivers_RWL
>>> inflow = Node("inflow")
>>> outflow = Node("outflow")
>>> outer = Node("outer", variable=dam_receivers_OWL)
>>> remote = Node("remote", variable=dam_receivers_RWL)
>>> dam = Element("dam", inlets=inflow, outlets=outflow, receivers=(outer, remote))

>>> from hydpy.models.dam_sluice import *
>>> parameterstep()
>>> dam.model = model

>>> surfacearea(1.44)
>>> catchmentarea(86.4)
>>> watervolume2waterlevel(PPoly.from_data(xs=[0.0, 1.0], ys=[0.0, 1.0]))
>>> remotewaterlevelmaximumthreshold(2.0)
>>> remotewaterlevelmaximumtolerance(0.1)
>>> correctionprecipitation(1.0)
>>> correctionevaporation(1.0)
>>> weightevaporation(0.8)
>>> thresholdevaporation(0.0)
>>> toleranceevaporation(0.001)

>>> with model.add_precipmodel_v2("meteo_precip_io"):
...     precipitationfactor(1.0)
>>> with model.add_pemodel_v1("evap_ret_io"):
...     evapotranspirationfactor(1.0)

>>> test = IntegrationTest(dam)
>>> test.dateformat = "%d.%m."
>>> test.plotting_options.axis1 = fluxes.inflow, fluxes.outflow
>>> test.plotting_options.axis2 = factors.waterlevel, factors.outerwaterlevel, factors.remotewaterlevel
>>> test.inits = [(states.watervolume, 0.0),
...               (logs.loggedadjustedevaporation, 0.0),
...               (logs.loggedouterwaterlevel, 0.0),
...               (logs.loggedremotewaterlevel, 0.0)]
>>> test.reset_inits()
>>> conditions = model.conditions

>>> model.precipmodel.sequences.inputs.precipitation.series = 2.0
>>> model.pemodel.sequences.inputs.referenceevapotranspiration.series = 1.0
>>> inflow.sequences.sim.series = 2.0
>>> outer.sequences.sim.series = 0.0
>>> remote.sequences.sim.series = numpy.linspace(0.0, 3.0, 20)

The remaining parameters are specific to |dam_sluice|.

We define a one-to-one relationship between the effective water level difference and
the highest possible free discharge values:

>>> waterleveldifference2maxfreedischarge(PPoly.from_data(xs=[0.0, 1.0], ys=[0.0, 1.0]))

By setting the crest level to 1 m, only inner and outer water levels higher than one
meter are "effective" (can cause inflow or outflow through the hydraulic structure):

>>> crestlevel(1.0)
>>> crestleveltolerance(0.1)

The smoothing parameter |DischargeTolerance| is only relevant when the outflow must be
suppressed to not further increase to high water levels at a remote location (see
|Calc_FreeDischarge_V1|):

>>> dischargetolerance(0.1)

.. _dam_sluice_drainage:

drainage
________

The results of the following test run are pretty similar to those of the
:ref:`dam_pump_drainage` example.  Outflow starts again when the inner water level
reaches 1 m, which is the crest level in this example.  Afterwards, however, the
outflow increases approximately linearly with the further rising water level, but this
is more a (useful) difference in parameterisation than of the underlying equations.
The implemented flood protection mechanism suppresses the outflow quite similarly in
both examples:

.. integration-test::

    >>> test("dam_sluice_drainage")
    |   date | waterlevel | outerwaterlevel | remotewaterlevel | effectivewaterleveldifference | precipitation | adjustedprecipitation | potentialevaporation | adjustedevaporation | actualevaporation | inflow | freedischarge | maxfreedischarge |  outflow | watervolume | inflow | outer |  outflow |   remote |
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    | 01.01. |   0.174533 |             0.0 |              0.0 |                           0.0 |           2.0 |              0.033333 |                  1.0 |            0.013333 |          0.013278 |    2.0 |           0.0 |              0.0 |      0.0 |    0.174533 |    2.0 |   0.0 |      0.0 |      0.0 |
    | 02.01. |    0.34883 |             0.0 |              0.0 |                      0.000001 |           2.0 |              0.033333 |                  1.0 |               0.016 |             0.016 |    2.0 |      0.000001 |         0.000001 | 0.000001 |     0.34883 |    2.0 |   0.0 | 0.000001 | 0.157895 |
    | 03.01. |   0.523081 |             0.0 |         0.157895 |                      0.000019 |           2.0 |              0.033333 |                  1.0 |            0.016533 |          0.016533 |    2.0 |       0.00001 |          0.00001 |  0.00001 |    0.523081 |    2.0 |   0.0 |  0.00001 | 0.315789 |
    | 04.01. |   0.697313 |             0.0 |         0.315789 |                      0.000352 |           2.0 |              0.033333 |                  1.0 |             0.01664 |           0.01664 |    2.0 |      0.000116 |         0.000116 | 0.000116 |    0.697313 |    2.0 |   0.0 | 0.000116 | 0.473684 |
    | 05.01. |   0.871372 |             0.0 |         0.473684 |                      0.006359 |           2.0 |              0.033333 |                  1.0 |            0.016661 |          0.016661 |    2.0 |      0.002101 |         0.002101 | 0.002101 |    0.871372 |    2.0 |   0.0 | 0.002101 | 0.631579 |
    | 06.01. |   1.043195 |             0.0 |         0.631579 |                      0.066439 |           2.0 |              0.033333 |                  1.0 |            0.016666 |          0.016666 |    2.0 |      0.027981 |         0.027981 | 0.027981 |    1.043195 |    2.0 |   0.0 | 0.027981 | 0.789474 |
    | 07.01. |    1.20585 |             0.0 |         0.789474 |                      0.207642 |           2.0 |              0.033333 |                  1.0 |            0.016666 |          0.016666 |    2.0 |      0.134088 |         0.134088 | 0.134088 |     1.20585 |    2.0 |   0.0 | 0.134088 | 0.947368 |
    | 08.01. |   1.355683 |             0.0 |         0.947368 |                      0.355832 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.282479 |         0.282479 | 0.282479 |    1.355683 |    2.0 |   0.0 | 0.282479 | 1.105263 |
    | 09.01. |   1.493163 |             0.0 |         1.105263 |                      0.493181 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.425468 |         0.425468 | 0.425468 |    1.493163 |    2.0 |   0.0 | 0.425468 | 1.263158 |
    | 10.01. |   1.619267 |             0.0 |         1.263158 |                      0.619272 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.557129 |         0.557129 | 0.557129 |    1.619267 |    2.0 |   0.0 | 0.557129 | 1.421053 |
    | 11.01. |   1.734934 |             0.0 |         1.421053 |                      0.734937 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.677934 |         0.677934 | 0.677934 |    1.734934 |    2.0 |   0.0 | 0.677934 | 1.578947 |
    | 12.01. |   1.841026 |             0.0 |         1.578947 |                      0.841029 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.788744 |         0.788744 | 0.788744 |    1.841026 |    2.0 |   0.0 | 0.788744 | 1.736842 |
    | 13.01. |   1.938337 |             0.0 |         1.736842 |                       0.93834 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.890378 |         0.890383 | 0.890378 |    1.938337 |    2.0 |   0.0 | 0.890378 | 1.894737 |
    | 14.01. |   2.028235 |             0.0 |         1.894737 |                      1.028237 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.976187 |         0.983929 | 0.976187 |    2.028235 |    2.0 |   0.0 | 0.976187 | 2.052632 |
    | 15.01. |   2.194622 |             0.0 |         2.052632 |                      1.194622 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.090894 |         1.111526 | 0.090894 |    2.194622 |    2.0 |   0.0 | 0.090894 | 2.210526 |
    | 16.01. |   2.368855 |             0.0 |         2.210526 |                      1.368855 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.000081 |         1.281738 | 0.000081 |    2.368855 |    2.0 |   0.0 | 0.000081 | 2.368421 |
    | 17.01. |   2.543095 |             0.0 |         2.368421 |                      1.543095 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |           0.0 |         1.455975 |      0.0 |    2.543095 |    2.0 |   0.0 |      0.0 | 2.526316 |
    | 18.01. |   2.717335 |             0.0 |         2.526316 |                      1.717335 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |           0.0 |         1.630215 |      0.0 |    2.717335 |    2.0 |   0.0 |      0.0 | 2.684211 |
    | 19.01. |   2.891575 |             0.0 |         2.684211 |                      1.891575 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |           0.0 |         1.804455 |      0.0 |    2.891575 |    2.0 |   0.0 |      0.0 | 2.842105 |
    | 20.01. |   3.065815 |             0.0 |         2.842105 |                      2.065815 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |           0.0 |         1.978695 |      0.0 |    3.065815 |    2.0 |   0.0 |      0.0 |      3.0 |

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

>>> round_(model.check_waterbalance(conditions))
0.0

.. _dam_sluice_irrigation:

irrigation
__________

The flow through the hydraulic structure can be negative, corresponding to irrigation
instead of land drainage.  We set the dam's "normal" inflow (from upstream areas) to
0 m³/s and increase the outer water level to 2 m, which reverses the water level
gradient:

>>> inflow.sequences.sim.series = 0.0
>>> outer.sequences.sim.series = 2.0

Now, the inner water level rises because of inflow from the area downstream.  The
remote water level still overshoots the threshold of 2 m, but this does not suppress
the inflow, as water losses should never increase flood risks:

.. integration-test::

    >>> test("dam_sluice_irrigation")
    |   date | waterlevel | outerwaterlevel | remotewaterlevel | effectivewaterleveldifference | precipitation | adjustedprecipitation | potentialevaporation | adjustedevaporation | actualevaporation | inflow | freedischarge | maxfreedischarge |   outflow | watervolume | inflow | outer |   outflow |   remote |
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    | 01.01. |   0.001813 |             0.0 |              0.0 |                           0.0 |           2.0 |              0.033333 |                  1.0 |            0.013333 |          0.012345 |    0.0 |           0.0 |              0.0 |       0.0 |    0.001813 |    0.0 |   2.0 |       0.0 |      0.0 |
    | 02.01. |   0.089711 |             2.0 |              0.0 |                          -1.0 |           2.0 |              0.033333 |                  1.0 |               0.016 |          0.015998 |    0.0 |          -1.0 |             -1.0 |      -1.0 |    0.089711 |    0.0 |   2.0 |      -1.0 | 0.157895 |
    | 03.01. |   0.177563 |             2.0 |         0.157895 |                          -1.0 |           2.0 |              0.033333 |                  1.0 |            0.016533 |          0.016533 |    0.0 |          -1.0 |             -1.0 |      -1.0 |    0.177563 |    0.0 |   2.0 |      -1.0 | 0.315789 |
    | 04.01. |   0.265405 |             2.0 |         0.315789 |                          -1.0 |           2.0 |              0.033333 |                  1.0 |             0.01664 |           0.01664 |    0.0 |          -1.0 |             -1.0 |      -1.0 |    0.265405 |    0.0 |   2.0 |      -1.0 | 0.473684 |
    | 05.01. |   0.353245 |             2.0 |         0.473684 |                     -0.999999 |           2.0 |              0.033333 |                  1.0 |            0.016661 |          0.016661 |    0.0 |     -0.999999 |        -0.999999 | -0.999999 |    0.353245 |    0.0 |   2.0 | -0.999999 | 0.631579 |
    | 06.01. |   0.441085 |             2.0 |         0.631579 |                     -0.999995 |           2.0 |              0.033333 |                  1.0 |            0.016666 |          0.016666 |    0.0 |     -0.999997 |        -0.999997 | -0.999997 |    0.441085 |    0.0 |   2.0 | -0.999997 | 0.789474 |
    | 07.01. |   0.528924 |             2.0 |         0.789474 |                      -0.99998 |           2.0 |              0.033333 |                  1.0 |            0.016666 |          0.016666 |    0.0 |     -0.999987 |        -0.999987 | -0.999987 |    0.528924 |    0.0 |   2.0 | -0.999987 | 0.947368 |
    | 08.01. |   0.616759 |             2.0 |         0.947368 |                      -0.99991 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.999945 |        -0.999945 | -0.999945 |    0.616759 |    0.0 |   2.0 | -0.999945 | 1.105263 |
    | 09.01. |   0.704581 |             2.0 |         1.105263 |                     -0.999602 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.999792 |        -0.999792 | -0.999792 |    0.704581 |    0.0 |   2.0 | -0.999792 | 1.263158 |
    | 10.01. |   0.792343 |             2.0 |         1.263158 |                     -0.998262 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.999089 |        -0.999089 | -0.999089 |    0.792343 |    0.0 |   2.0 | -0.999089 | 1.421053 |
    | 11.01. |   0.879846 |             2.0 |         1.421053 |                     -0.992719 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.996107 |        -0.996107 | -0.996107 |    0.879846 |    0.0 |   2.0 | -0.996107 | 1.578947 |
    | 12.01. |   0.966376 |             2.0 |         1.578947 |                      -0.97347 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.984837 |        -0.984837 | -0.984837 |    0.966376 |    0.0 |   2.0 | -0.984837 | 1.736842 |
    | 13.01. |   1.050185 |             2.0 |         1.736842 |                     -0.928748 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.953341 |        -0.953341 | -0.953341 |    1.050185 |    0.0 |   2.0 | -0.953341 | 1.894737 |
    | 14.01. |   1.129174 |             2.0 |         1.894737 |                     -0.864517 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.897562 |        -0.897562 | -0.897562 |    1.129174 |    0.0 |   2.0 | -0.897562 | 2.052632 |
    | 15.01. |   1.202334 |             2.0 |         2.052632 |                     -0.795763 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.830094 |        -0.830094 | -0.830094 |    1.202334 |    0.0 |   2.0 | -0.830094 | 2.210526 |
    | 16.01. |   1.269646 |             2.0 |         2.210526 |                     -0.729737 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.762403 |        -0.762403 | -0.762403 |    1.269646 |    0.0 |   2.0 | -0.762403 | 2.368421 |
    | 17.01. |   1.331448 |             2.0 |         2.368421 |                     -0.668333 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.698632 |        -0.698631 | -0.698632 |    1.331448 |    0.0 |   2.0 | -0.698632 | 2.526316 |
    | 18.01. |   1.388154 |             2.0 |         2.526316 |                     -0.611761 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.639654 |        -0.639653 | -0.639654 |    1.388154 |    0.0 |   2.0 | -0.639654 | 2.684211 |
    | 19.01. |   1.440173 |             2.0 |         2.684211 |                     -0.559791 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |      -0.58541 |        -0.585407 |  -0.58541 |    1.440173 |    0.0 |   2.0 |  -0.58541 | 2.842105 |
    | 20.01. |    1.48789 |             2.0 |         2.842105 |                     -0.512093 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    0.0 |     -0.535608 |        -0.535601 | -0.535608 |     1.48789 |    0.0 |   2.0 | -0.535608 |      3.0 |

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

>>> round_(model.check_waterbalance(conditions))
0.0

.. _dam_sluice_mixed:

mixed
_____

Finally, we reset the "normal" inflow to 2 m³/s but leave the outer water level at 2 m:

>>> inflow.sequences.sim.series = 2.0

This setting results in a "mixed" situation where initial inflow from downstream turns
into outflow as soon as the inner water level exceeds the outer one:

.. integration-test::

    >>> test("dam_sluice_mixed")
    |   date | waterlevel | outerwaterlevel | remotewaterlevel | effectivewaterleveldifference | precipitation | adjustedprecipitation | potentialevaporation | adjustedevaporation | actualevaporation | inflow | freedischarge | maxfreedischarge |   outflow | watervolume | inflow | outer |   outflow |   remote |
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    | 01.01. |   0.174533 |             0.0 |              0.0 |                           0.0 |           2.0 |              0.033333 |                  1.0 |            0.013333 |          0.013278 |    2.0 |           0.0 |              0.0 |       0.0 |    0.174533 |    2.0 |   2.0 |       0.0 |      0.0 |
    | 02.01. |    0.43523 |             2.0 |              0.0 |                     -0.999996 |           2.0 |              0.033333 |                  1.0 |               0.016 |             0.016 |    2.0 |     -0.999998 |        -0.999998 | -0.999998 |     0.43523 |    2.0 |   2.0 | -0.999998 | 0.157895 |
    | 03.01. |   0.695875 |             2.0 |         0.157895 |                     -0.999656 |           2.0 |              0.033333 |                  1.0 |            0.016533 |          0.016533 |    2.0 |     -0.999917 |        -0.999917 | -0.999917 |    0.695875 |    2.0 |   2.0 | -0.999917 | 0.315789 |
    | 04.01. |   0.956025 |             2.0 |         0.315789 |                     -0.977007 |           2.0 |              0.033333 |                  1.0 |             0.01664 |           0.01664 |    2.0 |     -0.994311 |        -0.994311 | -0.994311 |    0.956025 |    2.0 |   2.0 | -0.994311 | 0.473684 |
    | 05.01. |   1.207742 |             2.0 |         0.473684 |                     -0.790519 |           2.0 |              0.033333 |                  1.0 |            0.016661 |          0.016661 |    2.0 |     -0.896712 |        -0.896712 | -0.896712 |    1.207742 |    2.0 |   2.0 | -0.896712 | 0.631579 |
    | 06.01. |    1.44021 |             2.0 |         0.631579 |                      -0.55975 |           2.0 |              0.033333 |                  1.0 |            0.016666 |          0.016666 |    2.0 |     -0.673935 |        -0.673935 | -0.673935 |     1.44021 |    2.0 |   2.0 | -0.673935 | 0.789474 |
    | 07.01. |   1.653469 |             2.0 |         0.789474 |                     -0.346524 |           2.0 |              0.033333 |                  1.0 |            0.016666 |          0.016666 |    2.0 |     -0.451615 |        -0.451615 | -0.451615 |    1.653469 |    2.0 |   2.0 | -0.451615 | 0.947368 |
    | 08.01. |   1.849078 |             2.0 |         0.947368 |                     -0.150917 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |     -0.247317 |        -0.247317 | -0.247317 |    1.849078 |    2.0 |   2.0 | -0.247317 | 1.105263 |
    | 09.01. |   2.028495 |             2.0 |         1.105263 |                        0.0285 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |     -0.059921 |        -0.059921 | -0.059921 |    2.028495 |    2.0 |   2.0 | -0.059921 | 1.263158 |
    | 10.01. |   2.193061 |             2.0 |         1.263158 |                      0.193066 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.111964 |         0.111964 |  0.111964 |    2.193061 |    2.0 |   2.0 |  0.111964 | 1.421053 |
    | 11.01. |   2.344006 |             2.0 |         1.421053 |                       0.34401 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.269621 |         0.269621 |  0.269621 |    2.344006 |    2.0 |   2.0 |  0.269621 | 1.578947 |
    | 12.01. |   2.482456 |             2.0 |         1.578947 |                       0.48246 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.414229 |         0.414229 |  0.414229 |    2.482456 |    2.0 |   2.0 |  0.414229 | 1.736842 |
    | 13.01. |   2.609447 |             2.0 |         1.736842 |                      0.609451 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.546864 |         0.546867 |  0.546864 |    2.609447 |    2.0 |   2.0 |  0.546864 | 1.894737 |
    | 14.01. |   2.726363 |             2.0 |         1.894737 |                      0.726366 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.663479 |         0.668741 |  0.663479 |    2.726363 |    2.0 |   2.0 |  0.663479 | 2.052632 |
    | 15.01. |   2.894875 |             2.0 |         2.052632 |                      0.894875 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.066296 |         0.810718 |  0.066296 |    2.894875 |    2.0 |   2.0 |  0.066296 | 2.210526 |
    | 16.01. |    3.06911 |             2.0 |         2.210526 |                       1.06911 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |      0.000062 |         0.981992 |  0.000062 |     3.06911 |    2.0 |   2.0 |  0.000062 | 2.368421 |
    | 17.01. |    3.24335 |             2.0 |         2.368421 |                       1.24335 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |           0.0 |          1.15623 |       0.0 |     3.24335 |    2.0 |   2.0 |       0.0 | 2.526316 |
    | 18.01. |    3.41759 |             2.0 |         2.526316 |                       1.41759 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |           0.0 |          1.33047 |       0.0 |     3.41759 |    2.0 |   2.0 |       0.0 | 2.684211 |
    | 19.01. |    3.59183 |             2.0 |         2.684211 |                       1.59183 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |           0.0 |          1.50471 |       0.0 |     3.59183 |    2.0 |   2.0 |       0.0 | 2.842105 |
    | 20.01. |    3.76607 |             2.0 |         2.842105 |                       1.76607 |           2.0 |              0.033333 |                  1.0 |            0.016667 |          0.016667 |    2.0 |           0.0 |          1.67895 |       0.0 |     3.76607 |    2.0 |   2.0 |       0.0 |      3.0 |

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

>>> round_(model.check_waterbalance(conditions))
0.0
"""
# import...
# ...from HydPy
from hydpy.auxs.anntools import ANN  # pylint: disable=unused-import
from hydpy.auxs.ppolytools import Poly, PPoly  # pylint: disable=unused-import
from hydpy.core import modeltools
from hydpy.core.typingtools import *
from hydpy.interfaces import petinterfaces
from hydpy.interfaces import precipinterfaces
from hydpy.exe.modelimports import *

# ...from dam
from hydpy.models.dam import dam_model
from hydpy.models.dam import dam_solver


[docs] class Model( modeltools.ELSModel, dam_model.MixinSimpleWaterBalance, dam_model.Main_PrecipModel_V2, dam_model.Main_PEModel_V1, ): """|dam_sluice.DOCNAME.complete|.""" DOCNAME = modeltools.DocName(short="Dam-Sluice", description="sluice model") __HYDPY_ROOTMODEL__ = True SOLVERPARAMETERS = ( dam_solver.AbsErrorMax, dam_solver.RelErrorMax, dam_solver.RelDTMin, dam_solver.RelDTMax, ) SOLVERSEQUENCES = () INLET_METHODS = ( dam_model.Calc_Precipitation_V1, dam_model.Calc_PotentialEvaporation_V1, dam_model.Calc_AdjustedEvaporation_V1, ) OBSERVER_METHODS = () RECEIVER_METHODS = ( dam_model.Pick_LoggedOuterWaterLevel_V1, dam_model.Pick_LoggedRemoteWaterLevel_V1, ) ADD_METHODS = () PART_ODE_METHODS = ( dam_model.Calc_AdjustedPrecipitation_V1, dam_model.Pick_Inflow_V1, dam_model.Calc_WaterLevel_V1, dam_model.Calc_OuterWaterLevel_V1, dam_model.Calc_RemoteWaterLevel_V1, dam_model.Calc_EffectiveWaterLevelDifference_V1, dam_model.Calc_MaxFreeDischarge_V1, dam_model.Calc_FreeDischarge_V1, dam_model.Calc_ActualEvaporation_V1, dam_model.Calc_Outflow_V4, ) FULL_ODE_METHODS = (dam_model.Update_WaterVolume_V1,) OUTLET_METHODS = ( dam_model.Calc_WaterLevel_V1, dam_model.Calc_OuterWaterLevel_V1, dam_model.Calc_RemoteWaterLevel_V1, dam_model.Pass_Outflow_V1, ) SENDER_METHODS = () SUBMODELINTERFACES = (precipinterfaces.PrecipModel_V2, petinterfaces.PETModel_V1) SUBMODELS = () precipmodel = modeltools.SubmodelProperty( precipinterfaces.PrecipModel_V2, optional=True ) pemodel = modeltools.SubmodelProperty(petinterfaces.PETModel_V1, optional=True)
tester = Tester() cythonizer = Cythonizer()