Source code for rameau.core.river
# Copyright 2025, BRGM
#
# This file is part of Rameau.
#
# Rameau is free software: you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# Rameau is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# Rameau. If not, see <https://www.gnu.org/licenses/>.
#
"""
Parameters for calculating and/or optimizing river flow in :math:`m^3.s^{-1}`.
"""
from __future__ import annotations
from rameau.wrapper import CRiver
from rameau.core._utils import _FloatDescriptor
from rameau.core.parameter import Parameter
from rameau.core._abstract_wrapper import AbstractWrapper
from rameau.core._utils import _build_type, wrap_property, _build_parameter
from rameau._typing import ParameterType
[docs]
class RiverParameters(AbstractWrapper):
"""Parameters for calculating and/or optimising river flow
in :math:`m^3.s^{-1}`.
Parameters
----------
area : `dict` or `Parameter`, optional
Watershed area (:math:`km^2`).
minimum_riverflow : `dict` or `Parameter`, optional
Minimum river flow always imposed in the river (:math:`m^3.s^{-1}`).
concentration_time : `dict` or `Parameter`, optional
Watershed concentration time (time steps).
propagation_time : `dict` or `Parameter`, optional
Watershed propagation time (time steps).
weight : `float`, optional
Weight given to river flow during the model optimization. A value
of zero means no river flow optimisation.
obslim : `[float, float]`, optional
Bounds applied to the observed river flow during the model optimisation.
Returns
-------
`RiverParameters`
"""
_computed_attributes = (
"area", "minimum_riverflow", "concentration_time",
"propagation_time", "weight", "obslim"
)
_c_class = CRiver
area_corr: float = _FloatDescriptor(0)
area_cum: float = _FloatDescriptor(1)
weight: float = _FloatDescriptor(2)
def __init__(
self,
area: ParameterType = None,
minimum_riverflow: ParameterType = None,
concentration_time: ParameterType = None,
propagation_time: ParameterType = None,
weight: float = 1.0,
obslim: list = [0.0, 0.0]
) -> None:
self._init_c()
if area is not None:
self.area = _build_parameter(area)
if minimum_riverflow is not None:
self.minimum_riverflow = _build_parameter(minimum_riverflow)
if concentration_time is not None:
self.concentration_time = _build_parameter(concentration_time)
if propagation_time is not None:
self.propagation_time = _build_parameter(propagation_time)
self.obslim = obslim
self.weight = float(weight)
@property
@wrap_property(Parameter)
def area(self) -> Parameter:
return self._m.getArea()
@area.setter
def area(self, v: Parameter) -> None:
self._m.setArea(v._m)
@property
@wrap_property(Parameter)
def concentration_time(self) -> Parameter:
return self._m.getConcentrationTime()
@concentration_time.setter
def concentration_time(self, v: Parameter) -> None:
self._m.setConcentrationTime(v._m)
@property
@wrap_property(Parameter)
def minimum_riverflow(self) -> Parameter:
return self._m.getMinimumRiverflow()
@minimum_riverflow.setter
def minimum_riverflow(self, v: Parameter) -> None:
self._m.setMinimumRiverflow(v._m)
@property
@wrap_property(Parameter)
def propagation_time(self) -> Parameter:
return self._m.getPropagationTime()
@propagation_time.setter
def propagation_time(self, v: Parameter) -> None:
self._m.setPropagationTime(v._m)
@property
def obslim(self) -> list:
return self._m.getObslim()
@obslim.setter
def obslim(self, v: list) -> None:
self._m.setObslim(v)