{"id":1205,"date":"2026-08-21T14:28:55","date_gmt":"2026-08-21T14:28:55","guid":{"rendered":"https:\/\/matforge.org\/?p=1205","raw":"https:\/\/matforge.org\/?p=1205"},"modified":"2026-08-21T14:28:55","modified_gmt":"2026-08-21T14:28:55","slug":"python-cfd-aerospace-supersonic-shock-capturing","status":"publish","type":"post","link":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/","title":{"rendered":"Python CFD pour l&rsquo;a\u00e9rospatiale : flux supersonique et capture des chocs","raw":"Python CFD pour l'a\u00e9rospatiale : flux supersonique et capture des chocs"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 12<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>Lorsque les chercheurs passent de simulations de flux incompressibles \u00e0 compressibles en Python, ils rencontrent une physique fondamentalement diff\u00e9rente &#8211; la densit\u00e9 devient une variable, l&rsquo;\u00e9quation d&rsquo;\u00e9nergie doit \u00eatre r\u00e9solue et les ondes de choc introduisent des discontinuit\u00e9s que les m\u00e9thodes num\u00e9riques standard ne peuvent tout simplement pas g\u00e9rer. Cet article couvre ce qui rend SuperSonic Flow diff\u00e9rent, les m\u00e9thodes de capture des chocs con\u00e7ues pour le g\u00e9rer et les solveurs Python qui impl\u00e9mentent ces m\u00e9thodes pour les applications a\u00e9rospatiales.<\/p>\n<h2>Points \u00e0 retenir cl\u00e9s<\/h2>\n<ul>\n<li>Le flux compressible n\u00e9cessite de r\u00e9soudre les <strong>\u00e9quations compressibles de Navier-Stokes<\/strong> avec la densit\u00e9 comme variable et l&rsquo;\u00e9quation \u00e9nerg\u00e9tique coupl\u00e9e &#8211; contrairement au flux incompressible o\u00f9 la densit\u00e9 est constante.<\/li>\n<li><strong>M\u00e9thodes de capture des chocs<\/strong> (ROE, AUSM, TVD, WENO, Teno) sont essentielles car les chocs introduisent des discontinuit\u00e9s. Le sch\u00e9ma ROE a besoin d&rsquo;une solution d&rsquo;entropie et d&rsquo;une protection contre les carbuncles sur les chocs puissants.<\/li>\n<li><strong>Les solveurs de Python pour le flux compressible<\/strong> sont d\u00e9sormais de niveau de production&nbsp;: pybaram (grilles non structur\u00e9es, 2022), opensbli v3.0 (g\u00e9n\u00e9ration de code automatis\u00e9e, CPC 2025), JANC (Differentiable GPU Solver, avril 2025) et PygasFlow (quasi-1D).<\/li>\n<li><strong>Les cas de rep\u00e8re<\/strong> comme le tube de choc SOD et le probl\u00e8me Shu-Osher fournissent une validation standard pour la pr\u00e9cision de la capture des chocs.<\/li>\n<li><strong>Muscl-TVD est moins cher mais oscille<\/strong> pr\u00e8s des discontinuit\u00e9s&nbsp;; <strong>Weno<\/strong> du 5e ordre donne une r\u00e9solution sup\u00e9rieure mais co\u00fbte plus cher. Pour les DNS\/ILES des interactions entre les couches-limites-couches, WENO\/TENO est la norme actuelle.<\/li>\n<li><strong>Pygasflow<\/strong> et le r\u00e9f\u00e9rentiel open source <strong>python-shock-tube<\/strong> fournissent des points d&rsquo;entr\u00e9e accessibles pour comprendre la physique des chocs avant de s&rsquo;engager dans les solveurs de production.<\/li>\n<\/ul>\n<h2>Ce qui diff\u00e9rencie le flux supersonique du flux incompressible<\/h2>\n<p>En flux incompressible, la densit\u00e9 est trait\u00e9e comme une constante. Les \u00e9quations de momentum sont r\u00e9solues ind\u00e9pendamment de l&rsquo;\u00e9quation d&rsquo;\u00e9nergie, et la pression est d\u00e9termin\u00e9e uniquement par le champ de vitesse par un algorithme de couplage pression-vitesse (comme simple ou piso). Cela signifie que pour les d\u00e9bits \u00e0 faible vitesse, vous pouvez r\u00e9soudre les \u00e9quations de mouvement et de continuit\u00e9 sans jamais conna\u00eetre la densit\u00e9 du fluide &#8211; c&rsquo;est une donn\u00e9e.<\/p>\n<p>Dans Compressible Flow, tout change. La densit\u00e9 devient une variable qui \u00e9volue en fonction de l&rsquo;\u00e9quation de continuit\u00e9, des \u00e9quations de mouvement et de l&rsquo;\u00e9quation d&rsquo;\u00e9nergie. L&rsquo;\u00e9tat thermodynamique du fluide &#8211; pression, temp\u00e9rature et densit\u00e9 &#8211; est coupl\u00e9 par l&rsquo;\u00e9quation de l&rsquo;\u00e9tat (g\u00e9n\u00e9ralement la loi sur les gaz parfaits pour les applications a\u00e9rospatiales). Cela signifie que vous ne pouvez pas d\u00e9coupler la quantit\u00e9 de mouvement de l&rsquo;\u00e9quation de l&rsquo;\u00e9nergie. Le solveur doit suivre la propagation des ondes de pression \u00e0 travers le fluide, et ces ondes se d\u00e9placent \u00e0 la vitesse du son.<\/p>\n<p>Le param\u00e8tre sans dimension qui r\u00e9git cette transition est le <strong>nombre de Mach<\/strong> &#8211; le rapport de la vitesse d&rsquo;\u00e9coulement \u00e0 la vitesse locale du son. Quand m &lt; 0,3, les changements de densit\u00e9 sont g\u00e9n\u00e9ralement suffisamment faibles pour que l&rsquo;hypoth\u00e8se incompressible le soit. Quand m &gt; 1 (superonique), le flux contient des ondes de choc &#8211; des discontinuit\u00e9s o\u00f9 la densit\u00e9, la pression et la temp\u00e9rature sautent presque instantan\u00e9ment \u00e0 travers une r\u00e9gion \u00e9troite.<\/p>\n<p>Pour les chercheurs en a\u00e9rospatiale utilisant Python, cela signifie l&rsquo;amorce Python CFD (post 390) &#8211; qui couvre les fluides FIPY, SU2 et JAX principalement pour les flux incompressibles &#8211; laisse un \u00e9cart important. Vous devez comprendre :<\/p>\n<ol>\n<li><strong>Les \u00e9quations compressibles de Navier-Stokes<\/strong> dans leur forme compl\u00e8te, y compris l&rsquo;\u00e9quation de l&rsquo;\u00e9nergie<\/li>\n<li><strong>Riemann Solvers<\/strong> qui calcule les flux sur les faces des cellules l\u00e0 o\u00f9 des discontinuit\u00e9s peuvent exister<\/li>\n<li><strong>M\u00e9thodes de reconstruction<\/strong> qui d\u00e9terminent la fa\u00e7on dont les variables s&rsquo;interpolent des centres cellulaires aux visages<\/li>\n<li><strong>Sch\u00e9mas d&rsquo;int\u00e9gration temporelle<\/strong> qui respectent les contraintes de LFC plus strictes \u00e0 des nombres mach \u00e9lev\u00e9s<\/li>\n<li><strong>Traitements num\u00e9riques sp\u00e9ciaux<\/strong> comme la solution d&rsquo;entropie et la protection des carbuncles<\/li>\n<\/ol>\n<p>Il ne s&rsquo;agit pas d&rsquo;une simple extension du flux incompressible &#8211; c&rsquo;est une m\u00e9thodologie num\u00e9rique diff\u00e9rente appliqu\u00e9e \u00e0 un r\u00e9gime physique diff\u00e9rent.<\/p>\n<h2>M\u00e9thodes de capture des chocs : de ROE \u00e0 Weno<\/h2>\n<p>Lorsqu&rsquo;une onde de choc se forme, les variables de d\u00e9bit changent de mani\u00e8re discontinue sur une distance inf\u00e9rieure \u00e0 celle que n&rsquo;importe quelle grille physique peut r\u00e9soudre. Au lieu d&rsquo;essayer de r\u00e9soudre directement les chocs (ce qui n\u00e9cessiterait des grilles incroyablement fines), les m\u00e9thodes de capture des chocs permettent au sch\u00e9ma num\u00e9rique d&rsquo;absorber la discontinuit\u00e9 dans quelques cellules, en utilisant la dissipation num\u00e9rique pour stabiliser la solution.<\/p>\n<h3>Le sch\u00e9ma ROE et pourquoi il a besoin de corrections<\/h3>\n<p>Le sch\u00e9ma ROE, introduit par Peter Roe en 1978, est un solveur de Riemann approximatif qui lin\u00e9arise les \u00e9quations d&rsquo;Euler autour de l&rsquo;\u00e9tat de la cellule-face. Il est efficace en termes de calcul et a \u00e9t\u00e9 la m\u00e9thode de capture de choc dominante pendant des d\u00e9cennies. L&rsquo;id\u00e9e est simple&nbsp;: \u00e0 chaque face de cellule, vous r\u00e9solvez une version lin\u00e9aris\u00e9e du probl\u00e8me de Riemann (le probl\u00e8me de la valeur initiale pour les donn\u00e9es discontinues), calculez le flux et ajoutez une dissipation num\u00e9rique proportionnelle aux vitesses d&rsquo;onde.<\/p>\n<p>En Python, la mise en \u0153uvre du sch\u00e9ma ROE \u00e0 partir de ARXIV 2103.02794 suit ce mod\u00e8le&nbsp;:<\/p>\n<pre><code class=\"language-python\"># Roe scheme flux computation (simplified from arXiv 2103.02794)\ndef roe_flux(uL, uR, n):\n    \"\"\"Compute Roe flux for Euler equations.\n    uL, uR: left and right primitive states [rho, u, P]\n    n: normal direction (1 or -1 for 1D)\n    \"\"\"\n    rhoL, uL, P_L = uL\n    rhoR, uR, P_R = uR\n    \n    # Compute interface states\n    rho_hat = (rhoL**2 * rhoR**2 \/ \n               (rhoL + rhoR))**0.5\n    u_hat = (rhoL * uL + rhoR * uR) \/ (rhoL + rhoR)\n    \n    # Speed of sound\n    S_hat = ((P_L + P_R) \/ \n             (2 * (rhoL + rhoR)))**0.5\n    \n    # Compute Roe matrix eigenvalues\n    # |u_hat| +\/- S_hat for acoustic waves\n    # |u_hat| for shear\/convection\n    # ... eigenvalue computation omitted for brevity\n<\/code><\/pre>\n<p>Le probl\u00e8me avec le sch\u00e9ma ROE de base est double. Premi\u00e8rement, lors de chocs violents, le sch\u00e9ma peut d\u00e9velopper une <strong>pression n\u00e9gative<\/strong> &#8211; un \u00e9tat non physique qui provoque le crash du solveur. Ceci est abord\u00e9 par la <strong>Fix d&rsquo;entropie<\/strong>, qui modifie les vitesses d&rsquo;onde \u00e0 proximit\u00e9 des chocs pour restaurer la convexit\u00e9 de la fonction de flux et pr\u00e9venir les \u00e9tats non physiques.<\/p>\n<p>Deuxi\u00e8mement, sur des grilles non structur\u00e9es, le sch\u00e9ma ROE peut pr\u00e9senter le <strong>ph\u00e9nom\u00e8ne du carbuncle<\/strong> &#8211; une instabilit\u00e9 num\u00e9rique o\u00f9 un fort choc (comme celui form\u00e9 derri\u00e8re un corps \u00e9mouss\u00e9) d\u00e9veloppe un deuxi\u00e8me choc non physique ramifi\u00e9 sur le choc principal. Cela se produit parce que le sch\u00e9ma ROE est trop sensible \u00e0 l&rsquo;orientation de la grille lors de chocs importants. Le \u00ab\u00a0sch\u00e9ma de ROE stable aux chocs\u00a0\u00bb combine Entropy Fix avec un solveur Riemann tourn\u00e9 pour r\u00e9soudre ce probl\u00e8me. Pour les chercheurs travaillant sur des g\u00e9om\u00e9tries a\u00e9rospatiales avec de forts chocs (comme des cylindres supersoniques ou des corps \u00e9mouss\u00e9s), l&rsquo;omission d&rsquo;une protection contre les carbonules peut entra\u00eener des d\u00e9faillances du solveur.<\/p>\n<h3>Ausm&nbsp;: fractionner le flux<\/h3>\n<p>La m\u00e9thode d&rsquo;advection en amont (AUSM) adopte une approche diff\u00e9rente. Au lieu de calculer la matrice de ROE, l&rsquo;AUSM divise le flux en composants d&rsquo;advection et de pression. Cela le rend robuste \u00e0 la fois \u00e0 des nombres mach \u00e9lev\u00e9s et \u00e0 des chocs puissants sans n\u00e9cessiter de correction d&rsquo;entropie &#8211; la s\u00e9paration g\u00e8re intrins\u00e8quement la condition d&rsquo;entropie physique. Les variantes AUSM (AUSM+, AUSM+, AUSM+) et leurs successeurs (AUSMPWR+) sont parmi les sch\u00e9mas de capture de choc les plus utilis\u00e9s dans les codes CFD a\u00e9rospatiaux car ils g\u00e8rent la gamme compl\u00e8te de Mach (de Subsonic \u00e0 hypersonique) sans changement de strat\u00e9gie.<\/p>\n<p>Le r\u00e9f\u00e9rentiel Python-Shock-Tube impl\u00e9mente AUSM avec une interface propre qui fonctionne aux c\u00f4t\u00e9s de Godounov, Roe, HLL et HLLC :<\/p>\n<pre><code class=\"language-python\"># AUSM implementation pattern from Python-shock-tube\ndef ausm_flux(uL, uR, n):\n    \"\"\"AUSM flux with pressure splitting.\"\"\"\n    rhoL, uL, P_L = uL\n    rhoR, uR, P_R = uR\n    \n    # Split flux into advective and pressure parts\n    # Advective part uses Mach number-based splitting\n    # Pressure part uses sign function of Mach number\n    # See Toro's \"Riemann Solvers and Numerical Methods \n    # for Fluid Dynamics\" for full derivation\n<\/code><\/pre>\n<h3>Limiteurs de flux TVD et reconstruction MUSCL<\/h3>\n<p>Les limiteurs de flux TVD (diminution totale de la variation) emp\u00eachent les oscillations parasites \u00e0 proximit\u00e9 des discontinuit\u00e9s en contr\u00f4lant la variation totale de la solution. Lorsqu&rsquo;ils sont combin\u00e9s \u00e0 la reconstruction de MUSCL (monotonic Upstream-Centered for Conservation Laws), ils forment le sch\u00e9ma <strong>MusCl-TVD<\/strong> &#8211; une m\u00e9thode de second ordre qui est la bourreau de travail pour la capture de choc au niveau technique.<\/p>\n<p>Le compromis ici est clair : MUSCL-TVD est peu co\u00fbteux et robuste, mais \u00e0 des chocs violents ou \u00e0 des interactions avec des ondes complexes, il peut produire de petites oscillations derri\u00e8re le front de choc. Pour les applications d&rsquo;ing\u00e9nierie o\u00f9 la r\u00e9solution absolue des chocs n&rsquo;est pas critique, MUSCL-TVD est souvent suffisant.<\/p>\n<h3>Weno et Teno : capture de chocs d&rsquo;ordre \u00e9lev\u00e9<\/h3>\n<p>La reconstruction pond\u00e9r\u00e9e essentiellement non oscillatoire (Weno) du 5e ordre aborde les limites de MUSCL-TVD en utilisant une combinaison pond\u00e9r\u00e9e de pochoirs qui s&rsquo;adaptent automatiquement aux r\u00e9gions lisses et discontinues. Pr\u00e8s d&rsquo;un d\u00e9bit doux, tous les pochoirs contribuent&nbsp;; Pr\u00e8s des chocs, les poids se concentrent sur le pochoir non oscillatoire. Le r\u00e9sultat est une r\u00e9solution consid\u00e9rablement meilleure des oscillations \u00e0 haute fr\u00e9quence proches des discontinuit\u00e9s &#8211; cruciales pour la simulation num\u00e9rique directe haute fid\u00e9lit\u00e9 (DNS) et la simulation implicite des grands Feddy (ILES).<\/p>\n<p>Le r\u00e9f\u00e9rentiel Python-Shock-Tube le d\u00e9montre clairement avec le <strong>Shu\u2013Osher Problem<\/strong> &#8211; une r\u00e9f\u00e9rence classique o\u00f9 un choc interagit avec une onde de densit\u00e9. Voir l&rsquo;image de comparaison <a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\/blob\/main\/gallery\/Shu-Osher.png\">Shu\u2013Osher<\/a> du r\u00e9f\u00e9rentiel, qui montre que WENO du 5e ordre r\u00e9sout bien mieux les oscillations \u00e0 haute fr\u00e9quence derri\u00e8re le choc que MUSCL-TVD.<\/p>\n<p>Pour les DNS et les iles d&rsquo;interactions entre les couches limite de choc &#8211; comme les cas de buffet transonique valid\u00e9s dans OpenSBLI v3.0 &#8211; Weno et sa variante teno pr\u00e9servant les bords (enO cibl\u00e9) sont la norme actuelle. La g\u00e9n\u00e9ration de code automatis\u00e9e d&rsquo;OpenSBLI produit du code C de qualit\u00e9 de production \u00e0 partir de formulations symboliques Python utilisant Weno\/Teno pour la discr\u00e9tisation compressible de Navier-Stokes.<\/p>\n<h2>Solveurs Python pour un flux a\u00e9rospatial compressible<\/h2>\n<p>Le paysage des solveurs de flux compressibles bas\u00e9s sur Python a consid\u00e9rablement m\u00fbri entre 2021 et 2025. Cinq cadres sont d\u00e9sormais disponibles pour les chercheurs en a\u00e9rospatiale, chacun avec des architectures distinctes&nbsp;:<\/p>\n<h3>Pybaram \u2014 Grilles non structur\u00e9es pour les chocs forts<\/h3>\n<p>Pybaram (publi\u00e9 dans SoftwareX, 2022) met en \u0153uvre des m\u00e9thodes de volume fini sur des grilles non structur\u00e9es pour les g\u00e9om\u00e9tries a\u00e9rospatiales 2D et 3D. Il g\u00e8re explicitement les fortes ondes de choc et d&rsquo;expansion, con\u00e7ues pour l&rsquo;enseignement et la recherche avec des donn\u00e9es ouvertes sur Mendeley. Avec plus de 10&nbsp;citations, Pybaram repr\u00e9sente un point d&rsquo;entr\u00e9e accessible pour les chercheurs qui ont besoin d&rsquo;une prise en charge non structur\u00e9e de la grille sans les frais g\u00e9n\u00e9raux de plus grands packages.<\/p>\n<h3>OpenSBLI v3.0 \u2014 g\u00e9n\u00e9ration de code automatis\u00e9e pour DNS\/ILES<\/h3>\n<p>OpenSbli repr\u00e9sente une approche fondamentalement diff\u00e9rente&nbsp;: au lieu d&rsquo;\u00e9crire directement du code CFD compil\u00e9, les utilisateurs \u00e9crivent des \u00e9quations dans la notation Einstein \u00e0 l&rsquo;aide de l&rsquo;alg\u00e8bre symbolique Python (Sympy) et le g\u00e9n\u00e9rateur de code d&rsquo;OpenSbli produit un code C optimis\u00e9 via l&rsquo;OPS DSL. Le framework cible les grilles structur\u00e9es multi-blocs et prend en charge les backends CPU (MPI\/OpenMP) et GPU (CUDA\/OpenCL).<\/p>\n<p>OpenSbli v3.0, publi\u00e9 dans Ordinateurs &amp; Physics (janvier&nbsp;2025), prend en charge explicitement les <strong>Weno et Teno Shock Capture<\/strong> et a \u00e9t\u00e9 valid\u00e9 sur&nbsp;:<\/p>\n<ul>\n<li>Interactions de la couche limite de choc au niveau des nombres de Mach hypersoniques<\/li>\n<li>Buffet transonique sur les profils a\u00e9rodynamiques de la NASA-CRM<\/li>\n<li>DNS du flux hypersonique sur les bosses gaussiennes<\/li>\n<\/ul>\n<p>Le pedigree acad\u00e9mique du cadre est solide &#8211; l&rsquo;\u00e9quipe de Southampton\/Oxford (Lusher, Sandham) a publi\u00e9 plus de 20 articles sur les applications OpenSBLI. Si vos recherches portent sur des DN\/ILES haute fid\u00e9lit\u00e9 de flux compressibles avec interactions de choc, la g\u00e9n\u00e9ration de code automatis\u00e9e d&rsquo;OpenSBLI est l&rsquo;option la plus mature.<\/p>\n<p>Le <a href=\"https:\/\/github.com\/opensbli\/opensbli\/blob\/main\/readme_images\/instroduction.png\">diagramme de flux de travail<\/a> d&rsquo;OpenSBL Framework illustre comment les \u00e9quations symboliques de Python sont traduites en code C optimis\u00e9 via l&rsquo;OPS DSL.<\/p>\n<h3>JANC \u2014 Flux compressible diff\u00e9rentiable sur GPU<\/h3>\n<p>JANC (publi\u00e9 en avril 2025 par des chercheurs de l&rsquo;Universit\u00e9 de Tsinghua et des collaborateurs) est sans doute le solveur compressible Python le plus novateur de ces derni\u00e8res ann\u00e9es. Construit enti\u00e8rement sur <strong>JAX-AMR<\/strong> (Raffinement de maillage adaptatif structur\u00e9 bas\u00e9 sur JAX), JANC est un solveur enti\u00e8rement diff\u00e9rentiable pour les flux r\u00e9actifs compressibles. Sa pr\u00e9tention \u00e0 la distinction :<\/p>\n<blockquote>\n<p>Sur un seul GPU A100, JANC r\u00e9alise <strong>1&nbsp;% du co\u00fbt de calcul d&rsquo;Openfoam<\/strong> (utilisant 384&nbsp;c\u0153urs). Avec l&rsquo;AMR activ\u00e9e, le co\u00fbt chute \u00e0 1 \u00e0 2 % d&rsquo;OpenFoam.<\/p>\n<\/blockquote>\n<p>Il ne s&rsquo;agit pas d&rsquo;une all\u00e9gation marketing &#8211; elle est v\u00e9rifi\u00e9e par rapport aux cas de test signal\u00e9s. Leviers de JANC&nbsp;:<\/p>\n<ul>\n<li>Diff\u00e9renciation automatique (pas besoin de d\u00e9river manuellement les \u00e9quations adjointes)<\/li>\n<li>Compilation XLA JIT (optimisation du calcul du tenseur de XLA)<\/li>\n<li>Raffinement de maillage adaptatif (r\u00e9solution automatique o\u00f9 les gradients sont raides)<\/li>\n<li>Parall\u00e9lisme natif GPU\/TPU<\/li>\n<li>Licence MIT<\/li>\n<\/ul>\n<p>Pour les chercheurs qui explorent les <strong>CFD diff\u00e9renciables<\/strong> &#8211; une tendance croissante pour l&rsquo;optimisation de la conception, l&rsquo;analyse de sensibilit\u00e9 et l&rsquo;int\u00e9gration de ML &#8211; JANC est le premier solveur python enti\u00e8rement diff\u00e9renciable pour r\u00e9agir des flux compressibles. Le code est disponible sous licence MIT.<\/p>\n<h3>PygasFlow et SU2 \u2014 Calculs rapides et suites a\u00e9rospatiales compl\u00e8tes<\/h3>\n<p><strong>PygasFlow<\/strong> (v1.4.1) est un ensemble l\u00e9ger Python pour la dynamique des gaz parfaits quasi-1D. Il met en \u0153uvre des relations de choc normales et obliques, un flux isentropique, un flux de Fanno et Rayleigh et des corr\u00e9lations a\u00e9rothermodynamiques de plaques plates\/stagnantes. Bien qu&rsquo;il ne s&rsquo;agisse pas d&rsquo;un solveur CFD complet, il est inestimable pour des calculs analytiques rapides &#8211; diagrammes interactifs de d\u00e9flexion de pression, contr\u00f4les de relation entre les chocs et balayages param\u00e9triques rapides avant de s&rsquo;engager dans une simulation compl\u00e8te.<\/p>\n<p><strong>SU2<\/strong> reste la suite CFD open-source la plus cit\u00e9e pour les applications a\u00e9rospatiales. Ses capacit\u00e9s supersoniques\/compressibles comprennent le Wedge Supersonic Supersonic, le profil a\u00e9rodynamique Transonic OneRam6 et le flux compressible non id\u00e9al dans les didacticiels de buses Supersonic. Avec plus de 4 400 \u00e9toiles GitHub, SU2 est le choix \u00e9tabli pour la production a\u00e9rospatiale CFD o\u00f9 Python sert principalement de couche de script et d&rsquo;automatisation.<\/p>\n<h2>Cas de r\u00e9f\u00e9rence et validation<\/h2>\n<p>Toute impl\u00e9mentation de capture de chocs n\u00e9cessite une validation par rapport aux cas de r\u00e9f\u00e9rence standard. Deux cas sont essentiels :<\/p>\n<h3>Tube de choc de gazon<\/h3>\n<p>Le tube de choc SOD est le test canonique pour les solveurs Riemann. Il initialise un tube avec un \u00e9tat gauche haute pression et un \u00e9tat de droite basse pression. \u00c0 t = 0, le diaphragme se brise et un choc, une discontinuit\u00e9 de contact et une forme de ventilateur d&rsquo;expansion. Le r\u00e9f\u00e9rentiel <strong>python-shock-tube<\/strong> fournit cette r\u00e9f\u00e9rence. Voir la <a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\/blob\/main\/gallery\/SOD.png\">comparaison de tube de choc SOD<\/a> montrant la r\u00e9solution du flux sur quatre solveurs (Godunov, ROE, HLL, HLLC) sur 300 cellules avec reconstruction d&rsquo;ordre 0.<\/p>\n<p>L&rsquo;image montre une r\u00e9solution de flux sur quatre solveurs (Godunov, ROE, HLL, HLLC) sur 300 cellules avec une reconstruction d&rsquo;ordre 0. HLLC (hybride Lin\u00e9aris\u00e9 LAX \u2013 Friedrich avec contact) fournit g\u00e9n\u00e9ralement le meilleur \u00e9quilibre&nbsp;: il r\u00e9sout mieux la discontinuit\u00e9 de contact que HLL tout en \u00e9tant comparable \u00e0 HLL. C&rsquo;est pourquoi HLLC est le choix par d\u00e9faut dans l&rsquo;impl\u00e9mentation WENO du r\u00e9f\u00e9rentiel python-shock-tube.<\/p>\n<h3>Shu-Osher Probl\u00e8me<\/h3>\n<p>Le probl\u00e8me de Shu-Osher teste dans quelle mesure un sch\u00e9ma g\u00e8re l&rsquo;interaction entre un choc et une onde de densit\u00e9. La condition initiale est une fonction d&rsquo;\u00e9tape pour la pression avec une perturbation de densit\u00e9 sinuso\u00efdale derri\u00e8re le choc. Ce cas r\u00e9v\u00e8le comment les m\u00e9thodes de reconstruction r\u00e9solvent les oscillations \u00e0 haute fr\u00e9quence :<\/p>\n<ul>\n<li><strong>La reconstruction du 0e ordre<\/strong> (Godunov) subit une dissipation num\u00e9rique excessive lors de chocs violents<\/li>\n<li><strong>Muscl-TVD<\/strong> r\u00e9duit la dissipation mais oscille derri\u00e8re le choc<\/li>\n<li><strong>Weno<\/strong> du 5e ordre r\u00e9sout avec pr\u00e9cision les oscillations \u00e0 haute fr\u00e9quence<\/li>\n<\/ul>\n<p>Pour les simulations a\u00e9rospatiales haute fid\u00e9lit\u00e9, Weno est d\u00e9sormais le choix standard.<\/p>\n<h2>D\u00e9fis num\u00e9riques uniques \u00e0 un flux mach \u00e9lev\u00e9<\/h2>\n<p>Plusieurs d\u00e9fis num\u00e9riques surviennent sp\u00e9cifiquement dans le flux compressible\/supsonique qui n&rsquo;apparaissent pas (ou n&rsquo;apparaissent pas diff\u00e9remment) dans le CFD incompressible&nbsp;:<\/p>\n<h3>Contraintes de LFC \u00e0 des nombres mach \u00e9lev\u00e9s<\/h3>\n<p>La condition de LCF (Courant \u2013 Friedrichs-Lewy) r\u00e9git la stabilit\u00e9 pour l&rsquo;int\u00e9gration explicite dans le temps. Pour un \u00e9coulement compressible, le nombre de LCF d\u00e9pend de la somme de la vitesse d&rsquo;\u00e9coulement et de la vitesse du son :<\/p>\n<p>$$CFL = frac{u + a}{delta x} delta t$$<\/p>\n<p>\u00c0 des nombres mach \u00e9lev\u00e9s, $u approx m cdot a$, de sorte que la condition LFC devient extr\u00eamement restrictive. Cela signifie que <strong>pas de temps<\/strong> sont requis, souvent des ordres de grandeur inf\u00e9rieurs \u00e0 ceux des flux incompressibles. Les m\u00e9thodes implicites de pas de temps ou de multi-grilles peuvent att\u00e9nuer cela, mais les sch\u00e9mas explicites n\u00e9cessitent un contr\u00f4le attentif du pas de temps.<\/p>\n<h3>Correction d&rsquo;entropie<\/h3>\n<p>Le sch\u00e9ma ROE de base \u00e9choue \u00e0 la condition d&rsquo;entropie lors de chocs violents&nbsp;: au lieu de l&rsquo;augmentation d&rsquo;entropie physiquement correcte \u00e0 travers le choc, la solution num\u00e9rique peut violer la thermodynamique. La correction d&rsquo;entropie modifie les valeurs propres \u00e0 proximit\u00e9 des chocs pour garantir que le sch\u00e9ma num\u00e9rique respecte la deuxi\u00e8me loi de la thermodynamique. Sans cela, la solution peut converger vers un mauvais \u00e9tat d&rsquo;entropie &#8211; un choc trop fort ou trop faible.<\/p>\n<h3>ph\u00e9nom\u00e8ne de l&rsquo;escarboulement<\/h3>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, le ph\u00e9nom\u00e8ne de carbuncle est une instabilit\u00e9 num\u00e9rique sp\u00e9cifique au sch\u00e9ma ROE sur des grilles non structur\u00e9es. Lorsqu&rsquo;un fort choc s&rsquo;aligne mal avec la grille, le solveur peut d\u00e9velopper un choc secondaire qui se d\u00e9marque du choc principal &#8211; physiquement impossible et num\u00e9riquement catastrophique. Le sch\u00e9ma de ROE stable aux chocs (combinant le correctif d&rsquo;entropie avec le solveur de Riemann pivot\u00e9) gu\u00e9rit cela.<\/p>\n<h3>Interaction de la couche limite choc-limite<\/h3>\n<p>Dans les applications a\u00e9rospatiales, les ondes de choc interagissant avec les couches limites produisent des structures d&rsquo;\u00e9coulement complexes &#8211; s\u00e9paration des flux, rattachement et buffet instable. La r\u00e9solution de ces \u00e9l\u00e9ments n\u00e9cessite :<\/p>\n<ul>\n<li>R\u00e9solution fine de la couche limite (souvent DNS r\u00e9solu en mur)<\/li>\n<li>Capture de choc d&rsquo;ordre \u00e9lev\u00e9 (Weno\/Teno) pour r\u00e9soudre le choc<\/li>\n<li>R\u00e9solution temporelle ad\u00e9quate pour les ph\u00e9nom\u00e8nes instables<\/li>\n<\/ul>\n<p>C&rsquo;est pourquoi la validation d&rsquo;OpenSbli v3.0 se concentre sur SBLI &#8211; c&rsquo;est la physique qui compte le plus pour la conception de v\u00e9hicules transoniques et hypersoniques.<\/p>\n<h2>Quel solveur choisir ?<\/h2>\n<p>Le choix du solveur de flux compressible d\u00e9pend des besoins de votre r\u00e9seau, des besoins de fid\u00e9lit\u00e9 et des ressources de calcul. Voici une comparaison :<\/p>\n<table>\n<thead>\n<tr>\n<th>solveur<\/th>\n<th>Type de grille<\/th>\n<th>capture des chocs<\/th>\n<th>le mieux pour<\/th>\n<th>Mat\u00e9riel<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>pybaram<\/td>\n<td>non structur\u00e9<\/td>\n<td>volume fini<\/td>\n<td>Enseignement, 2D\/3D a\u00e9rospatial, chocs puissants<\/td>\n<td>CPU parall\u00e8le<\/td>\n<\/tr>\n<tr>\n<td>opensbli<\/td>\n<td>Structur\u00e9 (multibloc)<\/td>\n<td>Weno\/Teno<\/td>\n<td>DNS\/ILES, SBLI, buffet transonique, hypersonique<\/td>\n<td>CPU\/GPU (CUDA\/OpenCL)<\/td>\n<\/tr>\n<tr>\n<td>janc<\/td>\n<td>Structur\u00e9 (Bloc AMR)<\/td>\n<td>Jax Auto-Diff<\/td>\n<td>CFD diff\u00e9rentiable, optimisation adjointe, GPU<\/td>\n<td>GPU\/TPU (A100+)<\/td>\n<\/tr>\n<tr>\n<td>Pygasflow<\/td>\n<td>N\/A (analytique)<\/td>\n<td>N\/A<\/td>\n<td>Relations de choc rapide, Fanno\/Rayleigh, balayages param\u00e9triques<\/td>\n<td>Tout<\/td>\n<\/tr>\n<tr>\n<td>su2<\/td>\n<td>Structur\u00e9\/non structur\u00e9<\/td>\n<td>ROE, Ausm, etc.<\/td>\n<td>Suite a\u00e9rospatiale compl\u00e8te, CFD de production, flux N+1<\/td>\n<td>CPU\/MPI<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Recommandation pratique<\/strong>&nbsp;: commencez par PygasFlow pour la compr\u00e9hension analytique des relations de choc et du flux de Fanno\/Rayleigh. Utilisez ensuite le r\u00e9f\u00e9rentiel Python-Shock-Tube pour la pratique de la capture de chocs 1D (ROE, AUSM, WENO). Choisissez Pybaram si vous avez besoin de grilles non structur\u00e9es pour les g\u00e9om\u00e9tries complexes 2D\/3D. Choisissez OpenSBLi si votre recherche implique DNS\/ILES avec WENO\/TENO sur des grilles structur\u00e9es. Choisissez JANC si vous explorez CFD diff\u00e9rentiable avec GPU Acceleration et AMR.<\/p>\n<h2>R\u00e9sum\u00e9 et \u00e9tapes suivantes<\/h2>\n<p>Cet article couvrait ce qui rend le flux compressible\/superonique diff\u00e9rent du flux incompressible, les m\u00e9thodes de capture des chocs (ROE avec entropy Fix, AUSM, TVD, WENO\/TENO) qui g\u00e8rent les discontinuit\u00e9s, les solveurs Python disponibles pour les applications a\u00e9rospatiales (Pybaram, OpenSBLI, JANC, PygasFlow, SU2) et cas de r\u00e9f\u00e9rence pour la validation.<\/p>\n<p><strong>Pour les chercheurs commen\u00e7ant par un flux compressible en Python<\/strong>&nbsp;: commencez par PygasFlow pour des calculs analytiques rapides, pratiquez des m\u00e9thodes de capture de chocs avec Python-Shock-Tube, puis choisissez Pybaram (non structur\u00e9) ou OpenSbli (structur\u00e9) en fonction des exigences de votre grille. Pour les CFD diff\u00e9renciables avec acc\u00e9l\u00e9ration GPU, JANC repr\u00e9sente l&rsquo;\u00e9tat actuel de la technique.<\/p>\n<p><strong>Si vous d\u00e9butez dans Python CFD<\/strong>, commencez par <a href=\"https:\/\/matforge.org\/python-for-computational-cfd-primer-researchers\/\" target=\"_blank\" rel=\"nofollow noopener\">CFD complet<\/a> couvrant Fipy, maillage et les 12&nbsp;\u00e9tapes de Navier\u2013Stokes. Pour les flux domin\u00e9s par l&rsquo;advection o\u00f9 la r\u00e9solution de maillage est importante, <a href=\"https:\/\/matforge.org\/anisotropic-mesh-adaptation-advection-dominated-flows\/\" target=\"_blank\" rel=\"nofollow noopener\">Adaptation du maillage anisotrope<\/a> peut compl\u00e9ter votre sch\u00e9ma de capture de chocs. Lorsque vous avez besoin d&rsquo;une meilleure r\u00e9solution que le volume fini de second ordre, les <a href=\"https:\/\/matforge.org\/high-order-numerical-methods-beyond-fdm-fem-fvm\/\" target=\"_blank\" rel=\"nofollow noopener\">m\u00e9thodes spectrales et DG d&rsquo;ordre \u00e9lev\u00e9<\/a> offrent des alternatives.<\/p>\n<hr>\n<h3>Lecture recommand\u00e9e<\/h3>\n<ul>\n<li><a href=\"https:\/\/quantumzeitgeist.com\/introducing-janc-a-high-performance-python-based-solver-for-compressible-reacting-flows\/\" target=\"_blank\" rel=\"nofollow noopener\">Janc&nbsp;: un solveur de flux r\u00e9actif compressible et diff\u00e9rentiable<\/a> \u2014 Solveur bas\u00e9 sur JAX avec AMR, 1 \u00e0 2&nbsp;% du co\u00fbt d&rsquo;OpenFoam (avril&nbsp;2025)<\/li>\n<li><a href=\"https:\/\/github.com\/opensbli\/opensbli\" target=\"_blank\" rel=\"nofollow noopener\">Opensbli GitHub<\/a> \u2014 g\u00e9n\u00e9ration de code automatis\u00e9e pour Navier\u2013Stokes Avec la capture de choc Weno\/Teno<\/li>\n<li><a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\" target=\"_blank\" rel=\"nofollow noopener\">Python-shock-tube<\/a> \u2014 Solveur d&rsquo;\u00e9quations 1D d&rsquo;Euler avec des impl\u00e9mentations de Godunov, Roe, Ausm, HLLC, MUSCL-TVD et WENO<\/li>\n<li><a href=\"https:\/\/arxiv.org\/pdf\/2103.02794\" target=\"_blank\" rel=\"nofollow noopener\">Introduction \u00e0 la dynamique des fluides et aux m\u00e9thodes num\u00e9riques<\/a> \u2014 Section 13.1 : Mise en \u0153uvre du sch\u00e9ma ROE Python avec tube de choc SOD<\/li>\n<li><a href=\"https:\/\/levelup.gitconnected.com\/create-your-own-riemann-solver-with-python-9e38d64ad2ec\" target=\"_blank\" rel=\"nofollow noopener\">Cr\u00e9ez votre propre solveur Riemann<\/a> \u2014 Le tutoriel exact de Solveur Riemann de Philip Mocz pour les \u00e9quations d&rsquo;Euler<\/li>\n<li><a href=\"https:\/\/pygasflow.readthedocs.io\/en\/stable\/\" target=\"_blank\" rel=\"nofollow noopener\">Docs PygasFlow<\/a> \u2014 Quasi-1D Dynamique des gaz parfaits, choc Relations, flux Fanno\/Rayleigh<\/li>\n<li><a href=\"https:\/\/su2code.github.io\/tutorials\/home\/\" target=\"_blank\" rel=\"nofollow noopener\">tutoriels su2<\/a> \u2014 Supersonic Wedge, OneRam6 Transonic, Buse NICFD<\/li>\n<\/ul>\n<p><!-- Source de contenu\u00a0: Matforge SEO Content Pipeline Research File\u00a0: research\/seo-content\/python-cfd-aerospace-supersonic-shock.md chevauchement Classification\u00a0: nouvel angle (distinct du POST\u00a0390) D\u00e9cision visuelle\u00a0: aucune (Les images GitHub n'\u00e9taient pas disponibles en raison de la limitation de la fr\u00e9quence\u00a0; li\u00e9es \u00e0 des images de r\u00e9f\u00e9rentiel \u00e0 la place) Tous les liens externes utilisent rel=\"nofollow noopener\" target=\"_blank\" --><\/p>\n","protected":false,"raw":"<p>Lorsque les chercheurs passent de simulations de flux incompressibles \u00e0 compressibles en Python, ils rencontrent une physique fondamentalement diff\u00e9rente - la densit\u00e9 devient une variable, l'\u00e9quation d'\u00e9nergie doit \u00eatre r\u00e9solue et les ondes de choc introduisent des discontinuit\u00e9s que les m\u00e9thodes num\u00e9riques standard ne peuvent tout simplement pas g\u00e9rer. Cet article couvre ce qui rend SuperSonic Flow diff\u00e9rent, les m\u00e9thodes de capture des chocs con\u00e7ues pour le g\u00e9rer et les solveurs Python qui impl\u00e9mentent ces m\u00e9thodes pour les applications a\u00e9rospatiales.<\/p>\n<h2>Points \u00e0 retenir cl\u00e9s<\/h2>\n<ul>\n<li>Le flux compressible n\u00e9cessite de r\u00e9soudre les <strong>\u00e9quations compressibles de Navier-Stokes<\/strong> avec la densit\u00e9 comme variable et l'\u00e9quation \u00e9nerg\u00e9tique coupl\u00e9e - contrairement au flux incompressible o\u00f9 la densit\u00e9 est constante.<\/li>\n<li><strong>M\u00e9thodes de capture des chocs<\/strong> (ROE, AUSM, TVD, WENO, Teno) sont essentielles car les chocs introduisent des discontinuit\u00e9s. Le sch\u00e9ma ROE a besoin d'une solution d'entropie et d'une protection contre les carbuncles sur les chocs puissants.<\/li>\n<li><strong>Les solveurs de Python pour le flux compressible<\/strong> sont d\u00e9sormais de niveau de production&nbsp;: pybaram (grilles non structur\u00e9es, 2022), opensbli v3.0 (g\u00e9n\u00e9ration de code automatis\u00e9e, CPC 2025), JANC (Differentiable GPU Solver, avril 2025) et PygasFlow (quasi-1D).<\/li>\n<li><strong>Les cas de rep\u00e8re<\/strong> comme le tube de choc SOD et le probl\u00e8me Shu-Osher fournissent une validation standard pour la pr\u00e9cision de la capture des chocs.<\/li>\n<li><strong>Muscl-TVD est moins cher mais oscille<\/strong> pr\u00e8s des discontinuit\u00e9s&nbsp;; <strong>Weno<\/strong> du 5e ordre donne une r\u00e9solution sup\u00e9rieure mais co\u00fbte plus cher. Pour les DNS\/ILES des interactions entre les couches-limites-couches, WENO\/TENO est la norme actuelle.<\/li>\n<li><strong>Pygasflow<\/strong> et le r\u00e9f\u00e9rentiel open source <strong>python-shock-tube<\/strong> fournissent des points d'entr\u00e9e accessibles pour comprendre la physique des chocs avant de s'engager dans les solveurs de production.<\/li>\n<\/ul>\n<h2>Ce qui diff\u00e9rencie le flux supersonique du flux incompressible<\/h2>\n<p>En flux incompressible, la densit\u00e9 est trait\u00e9e comme une constante. Les \u00e9quations de momentum sont r\u00e9solues ind\u00e9pendamment de l'\u00e9quation d'\u00e9nergie, et la pression est d\u00e9termin\u00e9e uniquement par le champ de vitesse par un algorithme de couplage pression-vitesse (comme simple ou piso). Cela signifie que pour les d\u00e9bits \u00e0 faible vitesse, vous pouvez r\u00e9soudre les \u00e9quations de mouvement et de continuit\u00e9 sans jamais conna\u00eetre la densit\u00e9 du fluide - c'est une donn\u00e9e.<\/p>\n<p>Dans Compressible Flow, tout change. La densit\u00e9 devient une variable qui \u00e9volue en fonction de l'\u00e9quation de continuit\u00e9, des \u00e9quations de mouvement et de l'\u00e9quation d'\u00e9nergie. L'\u00e9tat thermodynamique du fluide - pression, temp\u00e9rature et densit\u00e9 - est coupl\u00e9 par l'\u00e9quation de l'\u00e9tat (g\u00e9n\u00e9ralement la loi sur les gaz parfaits pour les applications a\u00e9rospatiales). Cela signifie que vous ne pouvez pas d\u00e9coupler la quantit\u00e9 de mouvement de l'\u00e9quation de l'\u00e9nergie. Le solveur doit suivre la propagation des ondes de pression \u00e0 travers le fluide, et ces ondes se d\u00e9placent \u00e0 la vitesse du son.<\/p>\n<p>Le param\u00e8tre sans dimension qui r\u00e9git cette transition est le <strong>nombre de Mach<\/strong> - le rapport de la vitesse d'\u00e9coulement \u00e0 la vitesse locale du son. Quand m &lt; 0,3, les changements de densit\u00e9 sont g\u00e9n\u00e9ralement suffisamment faibles pour que l'hypoth\u00e8se incompressible le soit. Quand m &gt; 1 (superonique), le flux contient des ondes de choc - des discontinuit\u00e9s o\u00f9 la densit\u00e9, la pression et la temp\u00e9rature sautent presque instantan\u00e9ment \u00e0 travers une r\u00e9gion \u00e9troite.<\/p>\n<p>Pour les chercheurs en a\u00e9rospatiale utilisant Python, cela signifie l'amorce Python CFD (post 390) - qui couvre les fluides FIPY, SU2 et JAX principalement pour les flux incompressibles - laisse un \u00e9cart important. Vous devez comprendre :<\/p>\n<ol>\n<li><strong>Les \u00e9quations compressibles de Navier-Stokes<\/strong> dans leur forme compl\u00e8te, y compris l'\u00e9quation de l'\u00e9nergie<\/li>\n<li><strong>Riemann Solvers<\/strong> qui calcule les flux sur les faces des cellules l\u00e0 o\u00f9 des discontinuit\u00e9s peuvent exister<\/li>\n<li><strong>M\u00e9thodes de reconstruction<\/strong> qui d\u00e9terminent la fa\u00e7on dont les variables s'interpolent des centres cellulaires aux visages<\/li>\n<li><strong>Sch\u00e9mas d'int\u00e9gration temporelle<\/strong> qui respectent les contraintes de LFC plus strictes \u00e0 des nombres mach \u00e9lev\u00e9s<\/li>\n<li><strong>Traitements num\u00e9riques sp\u00e9ciaux<\/strong> comme la solution d'entropie et la protection des carbuncles<\/li>\n<\/ol>\n<p>Il ne s'agit pas d'une simple extension du flux incompressible - c'est une m\u00e9thodologie num\u00e9rique diff\u00e9rente appliqu\u00e9e \u00e0 un r\u00e9gime physique diff\u00e9rent.<\/p>\n<h2>M\u00e9thodes de capture des chocs : de ROE \u00e0 Weno<\/h2>\n<p>Lorsqu'une onde de choc se forme, les variables de d\u00e9bit changent de mani\u00e8re discontinue sur une distance inf\u00e9rieure \u00e0 celle que n'importe quelle grille physique peut r\u00e9soudre. Au lieu d'essayer de r\u00e9soudre directement les chocs (ce qui n\u00e9cessiterait des grilles incroyablement fines), les m\u00e9thodes de capture des chocs permettent au sch\u00e9ma num\u00e9rique d'absorber la discontinuit\u00e9 dans quelques cellules, en utilisant la dissipation num\u00e9rique pour stabiliser la solution.<\/p>\n<h3>Le sch\u00e9ma ROE et pourquoi il a besoin de corrections<\/h3>\n<p>Le sch\u00e9ma ROE, introduit par Peter Roe en 1978, est un solveur de Riemann approximatif qui lin\u00e9arise les \u00e9quations d'Euler autour de l'\u00e9tat de la cellule-face. Il est efficace en termes de calcul et a \u00e9t\u00e9 la m\u00e9thode de capture de choc dominante pendant des d\u00e9cennies. L'id\u00e9e est simple&nbsp;: \u00e0 chaque face de cellule, vous r\u00e9solvez une version lin\u00e9aris\u00e9e du probl\u00e8me de Riemann (le probl\u00e8me de la valeur initiale pour les donn\u00e9es discontinues), calculez le flux et ajoutez une dissipation num\u00e9rique proportionnelle aux vitesses d'onde.<\/p>\n<p>En Python, la mise en \u0153uvre du sch\u00e9ma ROE \u00e0 partir de ARXIV 2103.02794 suit ce mod\u00e8le&nbsp;:<\/p>\n<pre><code class=\"language-python\"># Roe scheme flux computation (simplified from arXiv 2103.02794)\ndef roe_flux(uL, uR, n):\n    \"\"\"Compute Roe flux for Euler equations.\n    uL, uR: left and right primitive states [rho, u, P]\n    n: normal direction (1 or -1 for 1D)\n    \"\"\"\n    rhoL, uL, P_L = uL\n    rhoR, uR, P_R = uR\n    \n    # Compute interface states\n    rho_hat = (rhoL**2 * rhoR**2 \/ \n               (rhoL + rhoR))**0.5\n    u_hat = (rhoL * uL + rhoR * uR) \/ (rhoL + rhoR)\n    \n    # Speed of sound\n    S_hat = ((P_L + P_R) \/ \n             (2 * (rhoL + rhoR)))**0.5\n    \n    # Compute Roe matrix eigenvalues\n    # |u_hat| +\/- S_hat for acoustic waves\n    # |u_hat| for shear\/convection\n    # ... eigenvalue computation omitted for brevity\n<\/code><\/pre>\n<p>Le probl\u00e8me avec le sch\u00e9ma ROE de base est double. Premi\u00e8rement, lors de chocs violents, le sch\u00e9ma peut d\u00e9velopper une <strong>pression n\u00e9gative<\/strong> - un \u00e9tat non physique qui provoque le crash du solveur. Ceci est abord\u00e9 par la <strong>Fix d'entropie<\/strong>, qui modifie les vitesses d'onde \u00e0 proximit\u00e9 des chocs pour restaurer la convexit\u00e9 de la fonction de flux et pr\u00e9venir les \u00e9tats non physiques.<\/p>\n<p>Deuxi\u00e8mement, sur des grilles non structur\u00e9es, le sch\u00e9ma ROE peut pr\u00e9senter le <strong>ph\u00e9nom\u00e8ne du carbuncle<\/strong> - une instabilit\u00e9 num\u00e9rique o\u00f9 un fort choc (comme celui form\u00e9 derri\u00e8re un corps \u00e9mouss\u00e9) d\u00e9veloppe un deuxi\u00e8me choc non physique ramifi\u00e9 sur le choc principal. Cela se produit parce que le sch\u00e9ma ROE est trop sensible \u00e0 l'orientation de la grille lors de chocs importants. Le \"sch\u00e9ma de ROE stable aux chocs\" combine Entropy Fix avec un solveur Riemann tourn\u00e9 pour r\u00e9soudre ce probl\u00e8me. Pour les chercheurs travaillant sur des g\u00e9om\u00e9tries a\u00e9rospatiales avec de forts chocs (comme des cylindres supersoniques ou des corps \u00e9mouss\u00e9s), l'omission d'une protection contre les carbonules peut entra\u00eener des d\u00e9faillances du solveur.<\/p>\n<h3>Ausm&nbsp;: fractionner le flux<\/h3>\n<p>La m\u00e9thode d'advection en amont (AUSM) adopte une approche diff\u00e9rente. Au lieu de calculer la matrice de ROE, l'AUSM divise le flux en composants d'advection et de pression. Cela le rend robuste \u00e0 la fois \u00e0 des nombres mach \u00e9lev\u00e9s et \u00e0 des chocs puissants sans n\u00e9cessiter de correction d'entropie - la s\u00e9paration g\u00e8re intrins\u00e8quement la condition d'entropie physique. Les variantes AUSM (AUSM+, AUSM+, AUSM+) et leurs successeurs (AUSMPWR+) sont parmi les sch\u00e9mas de capture de choc les plus utilis\u00e9s dans les codes CFD a\u00e9rospatiaux car ils g\u00e8rent la gamme compl\u00e8te de Mach (de Subsonic \u00e0 hypersonique) sans changement de strat\u00e9gie.<\/p>\n<p>Le r\u00e9f\u00e9rentiel Python-Shock-Tube impl\u00e9mente AUSM avec une interface propre qui fonctionne aux c\u00f4t\u00e9s de Godounov, Roe, HLL et HLLC :<\/p>\n<pre><code class=\"language-python\"># AUSM implementation pattern from Python-shock-tube\ndef ausm_flux(uL, uR, n):\n    \"\"\"AUSM flux with pressure splitting.\"\"\"\n    rhoL, uL, P_L = uL\n    rhoR, uR, P_R = uR\n    \n    # Split flux into advective and pressure parts\n    # Advective part uses Mach number-based splitting\n    # Pressure part uses sign function of Mach number\n    # See Toro's \"Riemann Solvers and Numerical Methods \n    # for Fluid Dynamics\" for full derivation\n<\/code><\/pre>\n<h3>Limiteurs de flux TVD et reconstruction MUSCL<\/h3>\n<p>Les limiteurs de flux TVD (diminution totale de la variation) emp\u00eachent les oscillations parasites \u00e0 proximit\u00e9 des discontinuit\u00e9s en contr\u00f4lant la variation totale de la solution. Lorsqu'ils sont combin\u00e9s \u00e0 la reconstruction de MUSCL (monotonic Upstream-Centered for Conservation Laws), ils forment le sch\u00e9ma <strong>MusCl-TVD<\/strong> - une m\u00e9thode de second ordre qui est la bourreau de travail pour la capture de choc au niveau technique.<\/p>\n<p>Le compromis ici est clair : MUSCL-TVD est peu co\u00fbteux et robuste, mais \u00e0 des chocs violents ou \u00e0 des interactions avec des ondes complexes, il peut produire de petites oscillations derri\u00e8re le front de choc. Pour les applications d'ing\u00e9nierie o\u00f9 la r\u00e9solution absolue des chocs n'est pas critique, MUSCL-TVD est souvent suffisant.<\/p>\n<h3>Weno et Teno : capture de chocs d'ordre \u00e9lev\u00e9<\/h3>\n<p>La reconstruction pond\u00e9r\u00e9e essentiellement non oscillatoire (Weno) du 5e ordre aborde les limites de MUSCL-TVD en utilisant une combinaison pond\u00e9r\u00e9e de pochoirs qui s'adaptent automatiquement aux r\u00e9gions lisses et discontinues. Pr\u00e8s d'un d\u00e9bit doux, tous les pochoirs contribuent&nbsp;; Pr\u00e8s des chocs, les poids se concentrent sur le pochoir non oscillatoire. Le r\u00e9sultat est une r\u00e9solution consid\u00e9rablement meilleure des oscillations \u00e0 haute fr\u00e9quence proches des discontinuit\u00e9s - cruciales pour la simulation num\u00e9rique directe haute fid\u00e9lit\u00e9 (DNS) et la simulation implicite des grands Feddy (ILES).<\/p>\n<p>Le r\u00e9f\u00e9rentiel Python-Shock-Tube le d\u00e9montre clairement avec le <strong>Shu\u2013Osher Problem<\/strong> - une r\u00e9f\u00e9rence classique o\u00f9 un choc interagit avec une onde de densit\u00e9. Voir l'image de comparaison <a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\/blob\/main\/gallery\/Shu-Osher.png\">Shu\u2013Osher<\/a> du r\u00e9f\u00e9rentiel, qui montre que WENO du 5e ordre r\u00e9sout bien mieux les oscillations \u00e0 haute fr\u00e9quence derri\u00e8re le choc que MUSCL-TVD.<\/p>\n<p>Pour les DNS et les iles d'interactions entre les couches limite de choc - comme les cas de buffet transonique valid\u00e9s dans OpenSBLI v3.0 - Weno et sa variante teno pr\u00e9servant les bords (enO cibl\u00e9) sont la norme actuelle. La g\u00e9n\u00e9ration de code automatis\u00e9e d'OpenSBLI produit du code C de qualit\u00e9 de production \u00e0 partir de formulations symboliques Python utilisant Weno\/Teno pour la discr\u00e9tisation compressible de Navier-Stokes.<\/p>\n<h2>Solveurs Python pour un flux a\u00e9rospatial compressible<\/h2>\n<p>Le paysage des solveurs de flux compressibles bas\u00e9s sur Python a consid\u00e9rablement m\u00fbri entre 2021 et 2025. Cinq cadres sont d\u00e9sormais disponibles pour les chercheurs en a\u00e9rospatiale, chacun avec des architectures distinctes&nbsp;:<\/p>\n<h3>Pybaram \u2014 Grilles non structur\u00e9es pour les chocs forts<\/h3>\n<p>Pybaram (publi\u00e9 dans SoftwareX, 2022) met en \u0153uvre des m\u00e9thodes de volume fini sur des grilles non structur\u00e9es pour les g\u00e9om\u00e9tries a\u00e9rospatiales 2D et 3D. Il g\u00e8re explicitement les fortes ondes de choc et d'expansion, con\u00e7ues pour l'enseignement et la recherche avec des donn\u00e9es ouvertes sur Mendeley. Avec plus de 10&nbsp;citations, Pybaram repr\u00e9sente un point d'entr\u00e9e accessible pour les chercheurs qui ont besoin d'une prise en charge non structur\u00e9e de la grille sans les frais g\u00e9n\u00e9raux de plus grands packages.<\/p>\n<h3>OpenSBLI v3.0 \u2014 g\u00e9n\u00e9ration de code automatis\u00e9e pour DNS\/ILES<\/h3>\n<p>OpenSbli repr\u00e9sente une approche fondamentalement diff\u00e9rente&nbsp;: au lieu d'\u00e9crire directement du code CFD compil\u00e9, les utilisateurs \u00e9crivent des \u00e9quations dans la notation Einstein \u00e0 l'aide de l'alg\u00e8bre symbolique Python (Sympy) et le g\u00e9n\u00e9rateur de code d'OpenSbli produit un code C optimis\u00e9 via l'OPS DSL. Le framework cible les grilles structur\u00e9es multi-blocs et prend en charge les backends CPU (MPI\/OpenMP) et GPU (CUDA\/OpenCL).<\/p>\n<p>OpenSbli v3.0, publi\u00e9 dans Ordinateurs &amp; Physics (janvier&nbsp;2025), prend en charge explicitement les <strong>Weno et Teno Shock Capture<\/strong> et a \u00e9t\u00e9 valid\u00e9 sur&nbsp;:<\/p>\n<ul>\n<li>Interactions de la couche limite de choc au niveau des nombres de Mach hypersoniques<\/li>\n<li>Buffet transonique sur les profils a\u00e9rodynamiques de la NASA-CRM<\/li>\n<li>DNS du flux hypersonique sur les bosses gaussiennes<\/li>\n<\/ul>\n<p>Le pedigree acad\u00e9mique du cadre est solide - l'\u00e9quipe de Southampton\/Oxford (Lusher, Sandham) a publi\u00e9 plus de 20 articles sur les applications OpenSBLI. Si vos recherches portent sur des DN\/ILES haute fid\u00e9lit\u00e9 de flux compressibles avec interactions de choc, la g\u00e9n\u00e9ration de code automatis\u00e9e d'OpenSBLI est l'option la plus mature.<\/p>\n<p>Le <a href=\"https:\/\/github.com\/opensbli\/opensbli\/blob\/main\/readme_images\/instroduction.png\">diagramme de flux de travail<\/a> d'OpenSBL Framework illustre comment les \u00e9quations symboliques de Python sont traduites en code C optimis\u00e9 via l'OPS DSL.<\/p>\n<h3>JANC \u2014 Flux compressible diff\u00e9rentiable sur GPU<\/h3>\n<p>JANC (publi\u00e9 en avril 2025 par des chercheurs de l'Universit\u00e9 de Tsinghua et des collaborateurs) est sans doute le solveur compressible Python le plus novateur de ces derni\u00e8res ann\u00e9es. Construit enti\u00e8rement sur <strong>JAX-AMR<\/strong> (Raffinement de maillage adaptatif structur\u00e9 bas\u00e9 sur JAX), JANC est un solveur enti\u00e8rement diff\u00e9rentiable pour les flux r\u00e9actifs compressibles. Sa pr\u00e9tention \u00e0 la distinction :<\/p>\n<blockquote><p>Sur un seul GPU A100, JANC r\u00e9alise <strong>1&nbsp;% du co\u00fbt de calcul d'Openfoam<\/strong> (utilisant 384&nbsp;c\u0153urs). Avec l'AMR activ\u00e9e, le co\u00fbt chute \u00e0 1 \u00e0 2 % d'OpenFoam.<\/p><\/blockquote>\n<p>Il ne s'agit pas d'une all\u00e9gation marketing - elle est v\u00e9rifi\u00e9e par rapport aux cas de test signal\u00e9s. Leviers de JANC&nbsp;:<\/p>\n<ul>\n<li>Diff\u00e9renciation automatique (pas besoin de d\u00e9river manuellement les \u00e9quations adjointes)<\/li>\n<li>Compilation XLA JIT (optimisation du calcul du tenseur de XLA)<\/li>\n<li>Raffinement de maillage adaptatif (r\u00e9solution automatique o\u00f9 les gradients sont raides)<\/li>\n<li>Parall\u00e9lisme natif GPU\/TPU<\/li>\n<li>Licence MIT<\/li>\n<\/ul>\n<p>Pour les chercheurs qui explorent les <strong>CFD diff\u00e9renciables<\/strong> - une tendance croissante pour l'optimisation de la conception, l'analyse de sensibilit\u00e9 et l'int\u00e9gration de ML - JANC est le premier solveur python enti\u00e8rement diff\u00e9renciable pour r\u00e9agir des flux compressibles. Le code est disponible sous licence MIT.<\/p>\n<h3>PygasFlow et SU2 \u2014 Calculs rapides et suites a\u00e9rospatiales compl\u00e8tes<\/h3>\n<p><strong>PygasFlow<\/strong> (v1.4.1) est un ensemble l\u00e9ger Python pour la dynamique des gaz parfaits quasi-1D. Il met en \u0153uvre des relations de choc normales et obliques, un flux isentropique, un flux de Fanno et Rayleigh et des corr\u00e9lations a\u00e9rothermodynamiques de plaques plates\/stagnantes. Bien qu'il ne s'agisse pas d'un solveur CFD complet, il est inestimable pour des calculs analytiques rapides - diagrammes interactifs de d\u00e9flexion de pression, contr\u00f4les de relation entre les chocs et balayages param\u00e9triques rapides avant de s'engager dans une simulation compl\u00e8te.<\/p>\n<p><strong>SU2<\/strong> reste la suite CFD open-source la plus cit\u00e9e pour les applications a\u00e9rospatiales. Ses capacit\u00e9s supersoniques\/compressibles comprennent le Wedge Supersonic Supersonic, le profil a\u00e9rodynamique Transonic OneRam6 et le flux compressible non id\u00e9al dans les didacticiels de buses Supersonic. Avec plus de 4 400 \u00e9toiles GitHub, SU2 est le choix \u00e9tabli pour la production a\u00e9rospatiale CFD o\u00f9 Python sert principalement de couche de script et d'automatisation.<\/p>\n<h2>Cas de r\u00e9f\u00e9rence et validation<\/h2>\n<p>Toute impl\u00e9mentation de capture de chocs n\u00e9cessite une validation par rapport aux cas de r\u00e9f\u00e9rence standard. Deux cas sont essentiels :<\/p>\n<h3>Tube de choc de gazon<\/h3>\n<p>Le tube de choc SOD est le test canonique pour les solveurs Riemann. Il initialise un tube avec un \u00e9tat gauche haute pression et un \u00e9tat de droite basse pression. \u00c0 t = 0, le diaphragme se brise et un choc, une discontinuit\u00e9 de contact et une forme de ventilateur d'expansion. Le r\u00e9f\u00e9rentiel <strong>python-shock-tube<\/strong> fournit cette r\u00e9f\u00e9rence. Voir la <a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\/blob\/main\/gallery\/SOD.png\">comparaison de tube de choc SOD<\/a> montrant la r\u00e9solution du flux sur quatre solveurs (Godunov, ROE, HLL, HLLC) sur 300 cellules avec reconstruction d'ordre 0.<\/p>\n<p>L'image montre une r\u00e9solution de flux sur quatre solveurs (Godunov, ROE, HLL, HLLC) sur 300 cellules avec une reconstruction d'ordre 0. HLLC (hybride Lin\u00e9aris\u00e9 LAX \u2013 Friedrich avec contact) fournit g\u00e9n\u00e9ralement le meilleur \u00e9quilibre&nbsp;: il r\u00e9sout mieux la discontinuit\u00e9 de contact que HLL tout en \u00e9tant comparable \u00e0 HLL. C'est pourquoi HLLC est le choix par d\u00e9faut dans l'impl\u00e9mentation WENO du r\u00e9f\u00e9rentiel python-shock-tube.<\/p>\n<h3>Shu-Osher Probl\u00e8me<\/h3>\n<p>Le probl\u00e8me de Shu-Osher teste dans quelle mesure un sch\u00e9ma g\u00e8re l'interaction entre un choc et une onde de densit\u00e9. La condition initiale est une fonction d'\u00e9tape pour la pression avec une perturbation de densit\u00e9 sinuso\u00efdale derri\u00e8re le choc. Ce cas r\u00e9v\u00e8le comment les m\u00e9thodes de reconstruction r\u00e9solvent les oscillations \u00e0 haute fr\u00e9quence :<\/p>\n<ul>\n<li><strong>La reconstruction du 0e ordre<\/strong> (Godunov) subit une dissipation num\u00e9rique excessive lors de chocs violents<\/li>\n<li><strong>Muscl-TVD<\/strong> r\u00e9duit la dissipation mais oscille derri\u00e8re le choc<\/li>\n<li><strong>Weno<\/strong> du 5e ordre r\u00e9sout avec pr\u00e9cision les oscillations \u00e0 haute fr\u00e9quence<\/li>\n<\/ul>\n<p>Pour les simulations a\u00e9rospatiales haute fid\u00e9lit\u00e9, Weno est d\u00e9sormais le choix standard.<\/p>\n<h2>D\u00e9fis num\u00e9riques uniques \u00e0 un flux mach \u00e9lev\u00e9<\/h2>\n<p>Plusieurs d\u00e9fis num\u00e9riques surviennent sp\u00e9cifiquement dans le flux compressible\/supsonique qui n'apparaissent pas (ou n'apparaissent pas diff\u00e9remment) dans le CFD incompressible&nbsp;:<\/p>\n<h3>Contraintes de LFC \u00e0 des nombres mach \u00e9lev\u00e9s<\/h3>\n<p>La condition de LCF (Courant \u2013 Friedrichs-Lewy) r\u00e9git la stabilit\u00e9 pour l'int\u00e9gration explicite dans le temps. Pour un \u00e9coulement compressible, le nombre de LCF d\u00e9pend de la somme de la vitesse d'\u00e9coulement et de la vitesse du son :<\/p>\n<p>$$CFL = frac{u + a}{delta x} delta t$$<\/p>\n<p>\u00c0 des nombres mach \u00e9lev\u00e9s, $u approx m cdot a$, de sorte que la condition LFC devient extr\u00eamement restrictive. Cela signifie que <strong>pas de temps<\/strong> sont requis, souvent des ordres de grandeur inf\u00e9rieurs \u00e0 ceux des flux incompressibles. Les m\u00e9thodes implicites de pas de temps ou de multi-grilles peuvent att\u00e9nuer cela, mais les sch\u00e9mas explicites n\u00e9cessitent un contr\u00f4le attentif du pas de temps.<\/p>\n<h3>Correction d'entropie<\/h3>\n<p>Le sch\u00e9ma ROE de base \u00e9choue \u00e0 la condition d'entropie lors de chocs violents&nbsp;: au lieu de l'augmentation d'entropie physiquement correcte \u00e0 travers le choc, la solution num\u00e9rique peut violer la thermodynamique. La correction d'entropie modifie les valeurs propres \u00e0 proximit\u00e9 des chocs pour garantir que le sch\u00e9ma num\u00e9rique respecte la deuxi\u00e8me loi de la thermodynamique. Sans cela, la solution peut converger vers un mauvais \u00e9tat d'entropie - un choc trop fort ou trop faible.<\/p>\n<h3>ph\u00e9nom\u00e8ne de l'escarboulement<\/h3>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, le ph\u00e9nom\u00e8ne de carbuncle est une instabilit\u00e9 num\u00e9rique sp\u00e9cifique au sch\u00e9ma ROE sur des grilles non structur\u00e9es. Lorsqu'un fort choc s'aligne mal avec la grille, le solveur peut d\u00e9velopper un choc secondaire qui se d\u00e9marque du choc principal - physiquement impossible et num\u00e9riquement catastrophique. Le sch\u00e9ma de ROE stable aux chocs (combinant le correctif d'entropie avec le solveur de Riemann pivot\u00e9) gu\u00e9rit cela.<\/p>\n<h3>Interaction de la couche limite choc-limite<\/h3>\n<p>Dans les applications a\u00e9rospatiales, les ondes de choc interagissant avec les couches limites produisent des structures d'\u00e9coulement complexes - s\u00e9paration des flux, rattachement et buffet instable. La r\u00e9solution de ces \u00e9l\u00e9ments n\u00e9cessite :<\/p>\n<ul>\n<li>R\u00e9solution fine de la couche limite (souvent DNS r\u00e9solu en mur)<\/li>\n<li>Capture de choc d'ordre \u00e9lev\u00e9 (Weno\/Teno) pour r\u00e9soudre le choc<\/li>\n<li>R\u00e9solution temporelle ad\u00e9quate pour les ph\u00e9nom\u00e8nes instables<\/li>\n<\/ul>\n<p>C'est pourquoi la validation d'OpenSbli v3.0 se concentre sur SBLI - c'est la physique qui compte le plus pour la conception de v\u00e9hicules transoniques et hypersoniques.<\/p>\n<h2>Quel solveur choisir ?<\/h2>\n<p>Le choix du solveur de flux compressible d\u00e9pend des besoins de votre r\u00e9seau, des besoins de fid\u00e9lit\u00e9 et des ressources de calcul. Voici une comparaison :<\/p>\n<table>\n<thead>\n<tr>\n<th>solveur<\/th>\n<th>Type de grille<\/th>\n<th>capture des chocs<\/th>\n<th>le mieux pour<\/th>\n<th>Mat\u00e9riel<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>pybaram<\/td>\n<td>non structur\u00e9<\/td>\n<td>volume fini<\/td>\n<td>Enseignement, 2D\/3D a\u00e9rospatial, chocs puissants<\/td>\n<td>CPU parall\u00e8le<\/td>\n<\/tr>\n<tr>\n<td>opensbli<\/td>\n<td>Structur\u00e9 (multibloc)<\/td>\n<td>Weno\/Teno<\/td>\n<td>DNS\/ILES, SBLI, buffet transonique, hypersonique<\/td>\n<td>CPU\/GPU (CUDA\/OpenCL)<\/td>\n<\/tr>\n<tr>\n<td>janc<\/td>\n<td>Structur\u00e9 (Bloc AMR)<\/td>\n<td>Jax Auto-Diff<\/td>\n<td>CFD diff\u00e9rentiable, optimisation adjointe, GPU<\/td>\n<td>GPU\/TPU (A100+)<\/td>\n<\/tr>\n<tr>\n<td>Pygasflow<\/td>\n<td>N\/A (analytique)<\/td>\n<td>N\/A<\/td>\n<td>Relations de choc rapide, Fanno\/Rayleigh, balayages param\u00e9triques<\/td>\n<td>Tout<\/td>\n<\/tr>\n<tr>\n<td>su2<\/td>\n<td>Structur\u00e9\/non structur\u00e9<\/td>\n<td>ROE, Ausm, etc.<\/td>\n<td>Suite a\u00e9rospatiale compl\u00e8te, CFD de production, flux N+1<\/td>\n<td>CPU\/MPI<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Recommandation pratique<\/strong>&nbsp;: commencez par PygasFlow pour la compr\u00e9hension analytique des relations de choc et du flux de Fanno\/Rayleigh. Utilisez ensuite le r\u00e9f\u00e9rentiel Python-Shock-Tube pour la pratique de la capture de chocs 1D (ROE, AUSM, WENO). Choisissez Pybaram si vous avez besoin de grilles non structur\u00e9es pour les g\u00e9om\u00e9tries complexes 2D\/3D. Choisissez OpenSBLi si votre recherche implique DNS\/ILES avec WENO\/TENO sur des grilles structur\u00e9es. Choisissez JANC si vous explorez CFD diff\u00e9rentiable avec GPU Acceleration et AMR.<\/p>\n<h2>R\u00e9sum\u00e9 et \u00e9tapes suivantes<\/h2>\n<p>Cet article couvrait ce qui rend le flux compressible\/superonique diff\u00e9rent du flux incompressible, les m\u00e9thodes de capture des chocs (ROE avec entropy Fix, AUSM, TVD, WENO\/TENO) qui g\u00e8rent les discontinuit\u00e9s, les solveurs Python disponibles pour les applications a\u00e9rospatiales (Pybaram, OpenSBLI, JANC, PygasFlow, SU2) et cas de r\u00e9f\u00e9rence pour la validation.<\/p>\n<p><strong>Pour les chercheurs commen\u00e7ant par un flux compressible en Python<\/strong>&nbsp;: commencez par PygasFlow pour des calculs analytiques rapides, pratiquez des m\u00e9thodes de capture de chocs avec Python-Shock-Tube, puis choisissez Pybaram (non structur\u00e9) ou OpenSbli (structur\u00e9) en fonction des exigences de votre grille. Pour les CFD diff\u00e9renciables avec acc\u00e9l\u00e9ration GPU, JANC repr\u00e9sente l'\u00e9tat actuel de la technique.<\/p>\n<p><strong>Si vous d\u00e9butez dans Python CFD<\/strong>, commencez par <a href=\"https:\/\/matforge.org\/python-for-computational-cfd-primer-researchers\/\" target=\"_blank\" rel=\"nofollow noopener\">CFD complet<\/a> couvrant Fipy, maillage et les 12&nbsp;\u00e9tapes de Navier\u2013Stokes. Pour les flux domin\u00e9s par l'advection o\u00f9 la r\u00e9solution de maillage est importante, <a href=\"https:\/\/matforge.org\/anisotropic-mesh-adaptation-advection-dominated-flows\/\" target=\"_blank\" rel=\"nofollow noopener\">Adaptation du maillage anisotrope<\/a> peut compl\u00e9ter votre sch\u00e9ma de capture de chocs. Lorsque vous avez besoin d'une meilleure r\u00e9solution que le volume fini de second ordre, les <a href=\"https:\/\/matforge.org\/high-order-numerical-methods-beyond-fdm-fem-fvm\/\" target=\"_blank\" rel=\"nofollow noopener\">m\u00e9thodes spectrales et DG d'ordre \u00e9lev\u00e9<\/a> offrent des alternatives.<\/p>\n<hr>\n<h3>Lecture recommand\u00e9e<\/h3>\n<ul>\n<li><a href=\"https:\/\/quantumzeitgeist.com\/introducing-janc-a-high-performance-python-based-solver-for-compressible-reacting-flows\/\" target=\"_blank\" rel=\"nofollow noopener\">Janc&nbsp;: un solveur de flux r\u00e9actif compressible et diff\u00e9rentiable<\/a> \u2014 Solveur bas\u00e9 sur JAX avec AMR, 1 \u00e0 2&nbsp;% du co\u00fbt d'OpenFoam (avril&nbsp;2025)<\/li>\n<li><a href=\"https:\/\/github.com\/opensbli\/opensbli\" target=\"_blank\" rel=\"nofollow noopener\">Opensbli GitHub<\/a> \u2014 g\u00e9n\u00e9ration de code automatis\u00e9e pour Navier\u2013Stokes Avec la capture de choc Weno\/Teno<\/li>\n<li><a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\" target=\"_blank\" rel=\"nofollow noopener\">Python-shock-tube<\/a> \u2014 Solveur d'\u00e9quations 1D d'Euler avec des impl\u00e9mentations de Godunov, Roe, Ausm, HLLC, MUSCL-TVD et WENO<\/li>\n<li><a href=\"https:\/\/arxiv.org\/pdf\/2103.02794\" target=\"_blank\" rel=\"nofollow noopener\">Introduction \u00e0 la dynamique des fluides et aux m\u00e9thodes num\u00e9riques<\/a> \u2014 Section 13.1 : Mise en \u0153uvre du sch\u00e9ma ROE Python avec tube de choc SOD<\/li>\n<li><a href=\"https:\/\/levelup.gitconnected.com\/create-your-own-riemann-solver-with-python-9e38d64ad2ec\" target=\"_blank\" rel=\"nofollow noopener\">Cr\u00e9ez votre propre solveur Riemann<\/a> \u2014 Le tutoriel exact de Solveur Riemann de Philip Mocz pour les \u00e9quations d'Euler<\/li>\n<li><a href=\"https:\/\/pygasflow.readthedocs.io\/en\/stable\/\" target=\"_blank\" rel=\"nofollow noopener\">Docs PygasFlow<\/a> \u2014 Quasi-1D Dynamique des gaz parfaits, choc Relations, flux Fanno\/Rayleigh<\/li>\n<li><a href=\"https:\/\/su2code.github.io\/tutorials\/home\/\" target=\"_blank\" rel=\"nofollow noopener\">tutoriels su2<\/a> \u2014 Supersonic Wedge, OneRam6 Transonic, Buse NICFD<\/li>\n<\/ul>\n<p><!-- Source de contenu\u00a0: Matforge SEO Content Pipeline Research File\u00a0: research\/seo-content\/python-cfd-aerospace-supersonic-shock.md chevauchement Classification\u00a0: nouvel angle (distinct du POST\u00a0390) D\u00e9cision visuelle\u00a0: aucune (Les images GitHub n'\u00e9taient pas disponibles en raison de la limitation de la fr\u00e9quence\u00a0; li\u00e9es \u00e0 des images de r\u00e9f\u00e9rentiel \u00e0 la place) Tous les liens externes utilisent rel=\"nofollow noopener\" target=\"_blank\" --><\/p>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 12<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Couvre Navier-Stokes compressible, les m\u00e9thodes de capture de chocs (ROE, WENO), les solveurs Python (Pybaram, OpenSBLI, JANC) et les cas de r\u00e9f\u00e9rence comme le tube de choc SOD.<\/p>\n","protected":false,"raw":"Couvre Navier-Stokes compressible, les m\u00e9thodes de capture de chocs (ROE, WENO), les solveurs Python (Pybaram, OpenSBLI, JANC) et les cas de r\u00e9f\u00e9rence comme le tube de choc SOD."},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"fr_FR","_original_post":"https:\/\/matforge.org\/?p=1074","iawp_total_views":1,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1205","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","fr-FR"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Python CFD pour l&#039;a\u00e9rospatiale : flux supersonique et capture des chocs - matforge.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python CFD pour l&#039;a\u00e9rospatiale : flux supersonique et capture des chocs - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  12 minutesCouvre Navier-Stokes compressible, les m\u00e9thodes de capture de chocs (ROE, WENO), les solveurs Python (Pybaram, OpenSBLI, JANC) et les cas de r\u00e9f\u00e9rence comme le tube de choc SOD.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T14:28:55+00:00\" \/>\n<meta name=\"author\" content=\"steven\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"steven\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\"},\"author\":{\"name\":\"steven\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"headline\":\"Python CFD pour l&rsquo;a\u00e9rospatiale : flux supersonique et capture des chocs\",\"datePublished\":\"2026-08-21T14:28:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\"},\"wordCount\":3807,\"commentCount\":0,\"articleSection\":[\"Simulation &amp; Projets de mod\u00e9lisation\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\",\"name\":\"Python CFD pour l'a\u00e9rospatiale : flux supersonique et capture des chocs - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-21T14:28:55+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python CFD pour l&#8217;a\u00e9rospatiale : flux supersonique et capture des chocs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\",\"name\":\"steven\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"caption\":\"steven\"},\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/steven\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python CFD pour l'a\u00e9rospatiale : flux supersonique et capture des chocs - matforge.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/","og_locale":"fr_FR","og_type":"article","og_title":"Python CFD pour l'a\u00e9rospatiale : flux supersonique et capture des chocs - matforge.org","og_description":"Reading Time:  12 minutesCouvre Navier-Stokes compressible, les m\u00e9thodes de capture de chocs (ROE, WENO), les solveurs Python (Pybaram, OpenSBLI, JANC) et les cas de r\u00e9f\u00e9rence comme le tube de choc SOD.","og_url":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/","og_site_name":"matforge.org","article_published_time":"2026-08-21T14:28:55+00:00","author":"steven","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"steven","Dur\u00e9e de lecture estim\u00e9e":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/"},"author":{"name":"steven","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"headline":"Python CFD pour l&rsquo;a\u00e9rospatiale : flux supersonique et capture des chocs","datePublished":"2026-08-21T14:28:55+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/"},"wordCount":3807,"commentCount":0,"articleSection":["Simulation &amp; Projets de mod\u00e9lisation"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/","url":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/","name":"Python CFD pour l'a\u00e9rospatiale : flux supersonique et capture des chocs - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-21T14:28:55+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"breadcrumb":{"@id":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/fr\/python-cfd-aerospace-supersonic-shock-capturing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/"},{"@type":"ListItem","position":2,"name":"Python CFD pour l&#8217;a\u00e9rospatiale : flux supersonique et capture des chocs"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03","name":"steven","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","caption":"steven"},"url":"https:\/\/matforge.org\/author\/steven\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1205"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1205\/revisions"}],"predecessor-version":[{"id":1385,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1205\/revisions\/1385"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}