Source code for hydpy.models.musk.musk_states

# -*- coding: utf-8 -*-
# pylint: disable=missing-module-docstring

# import...
# ...from site-packages
import numpy

# ...from HydPy
from hydpy import config
from hydpy.core.typingtools import *
from hydpy.models.musk import musk_sequences


[docs] class CourantNumber(musk_sequences.StateSequence1D): """Courant number [-].""" SPAN = (None, None)
[docs] class ReynoldsNumber(musk_sequences.StateSequence1D): """Cell Reynolds number [-].""" NDIM, NUMERIC, SPAN = 1, False, (None, None)
[docs] class Discharge(musk_sequences.StateSequence1D): """Current discharge at the segment endpoints [m³/s].""" SPAN = (0.0, None) @property def refweights(self) -> NDArrayFloat: """Modified relative length of all channel segments. Opposed to other 1-dimensional |musk| sequences, |Discharge| handles values that apply to the start and endpoint of each channel segment. |Discharge.refweights| adjusts the returned relative lengths of all segments so that functions like |Variable.average_values| calculate the weighted average of the mean values of all segments, each one gained by averaging the discharge value at the start and the endpoint: >>> from hydpy import round_ >>> from hydpy.models.musk import * >>> parameterstep() >>> nmbsegments(3) >>> round_(states.discharge.refweights) 0.166667, 0.333333, 0.333333, 0.166667 >>> states.discharge = 1.0, 2.0, 3.0, 4.0 >>> round_(states.discharge.average_values()) 2.5 For a (non-existing) channel with zero segments, |Discharge.refweights| a single weight with the value one: >>> nmbsegments(0) >>> round_(states.discharge.refweights) 1.0 """ nmbsegments = self.subseqs.seqs.model.parameters.control.nmbsegments.value if nmbsegments == 0: return numpy.array([1.0], dtype=config.NP_FLOAT) weights = numpy.ones(nmbsegments + 1, dtype=config.NP_FLOAT) weights[1:-1] += 1.0 return weights / numpy.sum(weights)