Le notebook sv_exacte_approx_ameliore.ipynb étudie le système de Saint-Venant (« eaux peu profondes ») en dimension 1 :
\(\begin{cases} \partial_t h + \partial_x (hv) = 0,\\ \partial_t (hv) + \partial_x \left(hv^2+\dfrac{g}{2}h^2\right) = 0, \end{cases}\)
avec une donnée initiale de Riemann (deux états constants séparés par un saut en x=0). Ce notebook calcule et compare deux façons d’obtenir (h,v)(x,t) :
- la solution exacte, construite analytiquement (choc et/ou détente selon les données) ;
- la solution approchée, obtenue par un schéma de volumes finis (trois flux numériques au choix).
Exercice
Modifier ce notebook pour le système de relaxation de Saint-Venant (à la Suliciu). Dans ce système, la pression non linéaire \(\frac{g}{2}h^2\) est remplacée par une variable indépendante \(\pi\), gouvernée par sa propre équation de transport :
\( \begin{cases} \partial_t h + \partial_x (hu) = 0,\\ \partial_t (hu) + \partial_x (hu^2+\pi) = 0,\\ \partial_t (h\pi) + \partial_x (hu\pi+c^2 u) = 0, \end{cases} \)
avec \(c>0\) une constante (célérité de relaxation). La différence structurelle majeure avec le notebook Saint-Venant classique vient du nombre des ondes et de la nature des champs caractéristiques de ce système : ils sont tous linéairement dégénérés. Il n’y a donc ni choc ni détente, seulement des discontinuités de contact. Conséquences directes sur le code, par rapport au notebook Saint-Venant classique :
- pas de fonction
onde_1 / onde_2 avec un test if choc / else détente : chaque famille n’a qu’un seul comportement à coder (conservation de ses invariants de Riemann) ;
- pas de
brentq : l’état intermédiaire s’obtient en résolvant un système linéaire en \((1/h_*, 1/h_\heartsuit, u_m, \pi_m)\), sous forme close ;
- quatre états constants séparés par trois discontinuités de contact (au lieu de deux ondes encadrant un unique état \(*\)).