Source code for hsamiplus.hsami_ruissellement_surface

"""The script hsimulates the surface runoff in HSAMI+ model."""

from __future__ import annotations


[docs] def hsami_ruissellement_surface(nb_pas, param, etat, eau_surface, modules): """ Ruissellement de surface. Parameters ---------- nb_pas : int Nombre de pas de temps. param : list Paramètres pour la simulation. etat : dict États du bassin versants et du réservoir. eau_surface : float Quantité d'eau disponible en surface (cm). modules : dict Les modules pour la simulation. Returns ------- ruissellement_surface : float Quantité d'eau qui ruisselle (entre 0 et eau_surface, cm). infiltration : float Quantité d'eau qui pourra s'infiltrer (entre 0 et eau_surface, cm). """ # Formulation de l'infiltration if modules["infiltration"] in ["green_ampt", "scs_cn"]: # L'eau en surface est passée dans infiltration (qui deviendra "offre") pour étre # traitée selon différentes formulations d'infiltration dans la fonction # ecoulement_vertical ruissellement_surface = 0.0 infiltration = eau_surface elif modules["infiltration"] == "hsami": # Contréle de l'infiltration et du ruissellement de surface effet_gel = param[8] # effet du gel sur l'infiltration, adimensionnel effet_sol = param[9] # effet du niveau de la réserve d'eau non saturée sur l'infiltration (cm) seuil_min = param[10] # seuil minimal (sur 24h) é partir duquel le ruissellement de surface devient important (cm) # Niveau maximal de la réserve d'eau dans le sol (cm) if modules["sol"] == "hsami": sol_max = param[12] elif modules["sol"] == "3couches": # Porosité totale * épaisseur de la couche 1 sol_max = param[44] * param[39] # Eau gelée dans le sol (cm) gel = etat["gel"] # eau gelée dans le sol # Réserve d'eau non saturée (cm) sol = etat["sol"][0] # Calcul du seuil é partir duquel le ruissellement devient important (cm) # Lorsque l'eau en surface est inférieure é ce seuil, la grande majorité de l'eau s'infiltre seuil = effet_sol / nb_pas * (1 - sol / sol_max) - effet_gel * gel # Ex.: modules.sol = 'hsami' , seuil = 1.0257 # modules.sol = '3couches', seuil = 1.2971 # On s'assure de conserver un seuil minimal seuil = max(seuil, seuil_min / nb_pas) # On calcule le ruissellement de surface if eau_surface >= seuil: ruissellement_surface = eau_surface - seuil / 2 else: ruissellement_surface = eau_surface**2 / (2 * seuil) # Le reste s'infiltre infiltration = eau_surface - ruissellement_surface return ruissellement_surface, infiltration