• 2026-2027 Codes

    • [MOCA 2A] Équations linéaires

    • [MOCA 3A] Équations non linéaires

    • On considère l'équation de Burgers

      \( \partial_t u + \partial_x q(u) = 0, \qquad q(u) = \frac{u^2}{2}, \)

      sur un domaine \([x_L,x_R]\), munie de conditions aux limites de Neumann homogènes (on prolonge la solution par sa valeur au bord).

      1. Problème de Riemann, solution exacte et schémas numériques.

        1. Rappeler la construction de la solution exacte \(u(t,x)\) du problème de Riemann de donnée initiale \( u(0,x)= \begin{cases} u_L & \text{si } x<x_0,\\ u_R & \text{si } x>x_0, \end{cases} \) selon le signe de \(u_L-u_R\) (choc ou détente), en distinguant bien les deux cas.
        2. Proposer deux couples \((u_L,u_R)\), l'un donnant lieu à un choc, l'autre à une détente. On choisira en particulier, pour la détente, un couple transsonique (\(u_L<0<u_R\)) : ce choix sera essentiel à la question 3.
        3. Coder la solution exacte \(u(t,x)\) pour un problème de Riemann quelconque \((u_L,u_R,x_0)\) (fonction exacte(t,xx,u_L,u_R,x_0)).
        4. Compléter les schémas numériques manquants (Lax_Wendroff, Upwind_Conservatif_1, Upwind_Conservatif_2, Godunov), sachant que Lax_Friedrichs est déjà donné comme exemple. Chaque schéma est un flux numérique \(g(w_L,w_R)\) tel que le schéma de volumes finis s'écrive \( u_i^{n+1} = u_i^n - \frac{\Delta t}{\Delta x}\Big(g(u_i^n,u_{i+1}^n)-g(u_{i-1}^n,u_i^n)\Big). \)
      2. Comportement des schémas sur un choc.

        1. Sur le cas test donnant lieu à un choc, comparer visuellement les 5 schémas à la solution exacte. Lequel est le plus proche de la solution exacte ? Lequel est visiblement le plus diffusif (le choc est étalé sur le plus grand nombre de mailles) ?
        2. Vérifier numériquement le principe du minimum-maximum : la solution approchée doit toujours rester dans l'intervalle \([\min(u_L,u_R),\max(u_L,u_R)]\). Lequel des 5 schémas ne le respecte pas ? Que peut-on observer sur son profil (dispersion, oscillations parasites au voisinage du choc) ?
        3. Rappeler la notion de solution faible : quelle relation doit satisfaire la vitesse du choc pour qu'une fonction constante par morceaux soit une solution faible de l'équation ? Vérifier que la solution exacte codée à la question précédente la satisfait.
      3. Comportement des schémas sur une détente.

        1. Sur le cas test donnant lieu à une détente (non transsonique, \(0<u_L<u_R\) ou \(u_L<u_R<0\)), comparer les 5 schémas à la solution exacte.
        2. Reprendre la comparaison sur le cas test transsonique (\(u_L<0<u_R\)) choisi à la question 1.b. Que se passe-t-il pour Upwind_Conservatif_1 et Upwind_Conservatif_2 ? Comparer le flux numérique qu'ils calculent à l'interface \(x_0\) (où \(w_L=u_L<0<u_R=w_R\)) à celui de Godunov.
        3. Rappeler la notion de solution entropique. Expliquer pourquoi, dans le cas transsonique, la solution constante par morceaux \(u_L\) pour \(x<\sigma t\), \(u_R\) pour \(x>\sigma t\) (pour n'importe quelle vitesse \(\sigma\)) est une solution faible de l'équation, mais n'est pas la solution entropique physiquement pertinente. En déduire pourquoi Upwind_Conservatif_1 et Upwind_Conservatif_2 peuvent produire une solution approchée qui ne converge pas vers la bonne solution dans ce cas, alors que Godunov reste correct.
      4. Bonus : représentation \((x,t)\). Ajouter l'affichage des courbes de niveau de la surface \(u(t,x)\) (solution exacte, puis solutions approchées), en plus des coupes à un instant \(t\) fixé déjà tracées.

      5. Donnée initiale régulière et formation d'un choc.

        1. On considère à présent la condition initiale régulière \(u(0,x)=\sin(x)\) (ou une autre fonction \(\mathcal{C}^\infty\) de votre choix), sans point de discontinuité.
        2. Utiliser un des schémas de la question 1 pour approcher la solution au cours du temps. Que remarque-t-on sur le profil de \(u(t,\cdot)\) à mesure que \(t\) augmente ?
        3. Expliquer ce phénomène à l'aide de la méthode des caractéristiques : montrer que deux caractéristiques issues de \(x_1<x_2\) avec \(u(0,x_1)>u(0,x_2)\) se croisent en temps fini, et donner la formule du premier instant de croisement \( t^\star=\min_{x_1<x_2,\ u_0'(x_1) < 0} \frac{-1}{u_0'(x_1)} \) (justifier). Comparer \(t^\star\) à l'instant où un choc apparaît effectivement sur les courbes numériques.
      6. Double problème de Riemann.

        1. Reprendre l'exercice du point 1 avec une donnée initiale constituée de trois états constants \(u_L\), \(u_M\), \(u_R\) séparés par deux discontinuités en \(x_0<x_1\) (voir le TD pour la construction de la solution exacte : deux ondes primaires, éventuellement suivies d'une interaction lorsque l'une rattrape l'autre).
        2. Coder la solution exacte de ce double problème de Riemann.
        3. Reprendre les comparaisons des questions 2 et 3 (diffusion, principe du min-max, cas entropique) sur ce nouveau cas test.
    • [MOCA 3A] Systèmes

    • 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 \(*\)).