Pour travailler de manière interactive : , ou télécharger le paquet de l’exercice (fichier zip) et l’ouvrir en local avec JupyterLab.
Le paquet contient trois fichiers qui doivent rester dans le même dossier :
| fichier | contenu |
|---|---|
| bedload-exercise.ipynb | ce notebook, le seul fichier à modifier |
| charriage.py | le code technique : formule de Meyer-Peter & Müller (MPM), contrôle et figures |
| hecras-arbogne.csv | l’hydraulique de 16 profils HEC-RAS 1D de l’Arbogne à Dompierre (FR) pour Q = 25 m/s |
Tâche : votre expertise est demandée pour analyser le risque d’alluvionnement dans le tronçon revitalisé de l’Arbogne. Un collègue vous a fourni l’hydraulique (1D) de 16 profils sur 890 m. Où le gravier s’arrête-t-il, et que se passe-t-il quand la végétation freine l’écoulement ?
Structure de l’exercice¶
| partie | qui travaille | |
|---|---|---|
| I | préparation : charger le script et les données | donné : exécuter les cellules |
| II | données : granulométrie, rugosités , seuil | vous : compléter deux listes |
| III | équations : rapport de rugosité et rugosité critique | vous : compléter deux lignes de code |
| IV | résultats : calcul MPM, diagramme de Shields, profils actifs | donné : exécuter et interpréter |
Il n’est pas nécessaire de savoir programmer. Une cellule s’exécute avec Maj + Entrée (Shift + Enter). Les endroits à compléter sont marqués par le commentaire # >>> À COMPLÉTER : remplacez chaque texte ">>> COMPLETER" (guillemets compris) par votre valeur ou votre équation. Dans le code, les nombres décimaux s’écrivent avec un point (0.047 et non 0,047).
Partie I : préparation¶
La cellule suivante charge le script charriage.py sous le nom abrégé ch. Sur Google Colab, elle télécharge d’abord le script et les données. Cette cellule ne contient pas de matière du cours.
import sys, urllib.request
if "google.colab" in sys.modules: # uniquement sur Google Colab
for f in ("charriage.py", "hecras-arbogne.csv"):
urllib.request.urlretrieve(f"https://raw.githubusercontent.com/hydro-informatics/charriage-arbogne/main/{f}", f)
import charriage as ch
ch.lire_hecras()Le tableau affiche, pour chaque profil (de l’amont vers l’aval), la station, le débit, les cotes du fond et de l’eau, la pente de la ligne d’énergie , le rayon hydraulique et la hauteur d’eau . La pente passe de 0,0042 à l’amont à 0,0007 à l’aval : c’est là que le gravier risque de se déposer.
Partie II : données¶
Tâche 1 : granulométrie et rugosité¶
Deux courbes granulométriques décrivent l’Arbogne (analyse en ligne selon Fehr, mars 2014) :
« Sable (fin) » pour estimer l’apport de l’amont ;
« Gravier (complet) » pour caractériser le lit en place.
Trois diamètres caractéristiques suffisent pour l’exercice :
| courbe granulométrique | [mm] | [mm] |
|---|---|---|
| « Sable (fin) » | 0,23 | pas nécessaire |
| « Gravier (complet) » | 8,88 | 13,56 |
du sable représente l’apport fin qui transite ;
du gravier représente le gravier en transit ;
du gravier représente le lit en place (pavage) et fixe la rugosité de grain .
Reportez ces valeurs, en millimètres, dans la liste melanges. Attention : en Python, la virgule décimale devient un point (0,23 s’écrit 0.23). L’ordre compte : d’abord le sable, puis le gravier (le dernier mélange de la liste représente le lit).
Reportez ensuite dans la liste k_st les deux coefficients de Strickler [m/s] à comparer, du plus lisse au plus rugueux :
sans végétation : l’écoulement reste dans le lit en gravier (état de référence) ;
avec végétation : la crue déborde dans la plaine inondable, densément végétalisée.
La liste peut contenir d’autres valeurs : chaque ajouté devient un cas de rugosité supplémentaire.
# >>> À COMPLÉTER : diamètres caractéristiques en mm
# nom d_m d_84
melanges = [["Sable (fin)", ">>> COMPLETER"],
["Gravier (complet)", ">>> COMPLETER", ">>> COMPLETER"]]
# >>> À COMPLÉTER : coefficients de Strickler k_st [m^(1/3)/s], sans végétation en premier
k_st = [">>> COMPLETER", ">>> COMPLETER"]Seuil de mise en mouvement ¶
MPM a été calibré avec = 0,047, valeur utilisée dans tout l’exercice. La liste tau_cr accepte toutefois plusieurs valeurs, par exemple pour tester la sensibilité du résultat au seuil (voir le devoir). Pour cela, supprimez le # devant la deuxième ligne : chaque figure affiche alors toutes les valeurs de la liste.
Note : ne se mesure pas. On le choisit dans une plage (environ 0,03 à 0,07 pour du gravier) et on l’annonce avec le résultat.
tau_cr = [0.047]
# tau_cr = [0.030, 0.040, 0.047, 0.056, 0.070] # variante, pas utilisée dans l'exercicePartie III : équations¶
Tâche 2 : rapport de rugosité ¶
MPM ne compare pas au seuil toute la contrainte de cisaillement , mais seulement la part qui agit sur les grains. Une partie de l’énergie est dissipée par les formes du lit, la végétation et les berges. Le rapport de rugosité corrige en conséquence :
: coefficient de Strickler total du tronçon (la liste
k_stde la tâche 1) ;: coefficient de Strickler de grain d’un lit plat, calculé par charriage.py avec du gravier en mètres.
Complétez la ligne marquée. En Python, la puissance s’écrit ** : par exemple, s’écrit a ** (3 / 2).
def rapport_rugosite(k_st, k_r):
# >>> À COMPLÉTER : k' = (k_st / k_r)^(3/2)
return ">>> COMPLETER"Tâche 3 : rugosité critique ¶
Plus la végétation freine l’écoulement, plus diminue, et avec lui la contrainte efficace . Un profil cesse de transporter quand . En remplaçant par sa définition et en résolvant pour , on obtient la rugosité critique de chaque profil :
Un profil transporte tant que . C’est cette équation qui permet de tracer le nombre de profils actifs quand la rugosité augmente (dernière figure). Complétez la ligne marquée.
def k_st_critique(tau, k_r, tau_cr):
# >>> À COMPLÉTER : k_st,cr = k_r * (tau_cr / tau)^(2/3)
return ">>> COMPLETER"Contrôle¶
Exécutez cette cellule après chaque tâche. [OK] signifie que la valeur correspond à la présentation, [XX] qu’elle est fausse, [ ] qu’elle n’est pas encore complétée. Corrigez puis ré-exécutez la cellule de la tâche et celle-ci.
ch.verifier(melanges, k_st, rapport_rugosite, k_st_critique)Partie IV : résultats¶
Calcul MPM sur les 16 profils¶
charriage.py croise vos données et applique MPM à chaque profil : chaque cas de rugosité de la liste k_st est calculé pour les deux classes de grain.
| grain | ce qu’il représente | cas de rugosité |
|---|---|---|
| gravier, | le gravier en transit | sans et avec végétation |
| sable, | l’apport fin de l’amont | sans et avec végétation |
| gravier, | le lit en place, pavé | sans végétation seulement |
Le tableau résume, pour chaque combinaison, le rapport de rugosité , le nombre de profils qui transportent encore (), ainsi que le plus grand et le plus grand charriage [kg/(sm)] du tronçon.
resultats = ch.calculer(melanges, k_st, tau_cr, rapport_rugosite)
ch.resume(resultats)Question : pourquoi = 0 sur certains profils ? Et pourquoi le sable est-il transporté partout ?
Diagramme de Shields¶
Le diagramme compare les deux cas de rugosité, sans végétation (écoulement dans le lit) et avec végétation (crue débordante dans la plaine inondable), pour les deux classes de grain, gravier et sable. Chaque point est un profil. L’axe vertical est la contrainte efficace sur les grains , celle que MPM compare à . Sous la courbe de Shields critique, il n’y a pas de charriage.
couleur : cas de rugosité (bleu sans végétation, rouge avec végétation) ;
symbole : classe de grain (rond : gravier ; triangle : sable) ;
taille : , une décade par classe (le plus grand donne le plus grand marqueur).
ch.diagramme_shields(resultats)Note : avec = 0,23 mm, le sable est hors du domaine de validité de MPM (environ 0,4 à 30 mm). Son résultat n’est qu’un ordre de grandeur.
Questions : la végétation déplace-t-elle le gravier et le sable de la même manière ? Pour quelle classe de grain la végétation fait-elle passer les points sous la courbe ?
Profils actifs quand la rugosité augmente¶
La figure suivante fait diminuer pas à pas (de gauche à droite, la végétation augmente) et compte, pour le gravier, les profils où . Les lignes verticales sont vos valeurs de la liste k_st. L’extinction totale est le sous lequel plus aucun profil ne transporte.
ch.profils_actifs(melanges, k_st, tau_cr, k_st_critique)Questions :
Entre quelles valeurs de le charriage du gravier s’éteint-il complètement ?
Alluvionnement ou érosion (ici maintien du chenal de seuil) : lequel des deux paramètres, le grain ou la rugosité, fait basculer le résultat ?