{"id":1098,"date":"2026-08-19T09:48:40","date_gmt":"2026-08-19T09:48:40","guid":{"rendered":"https:\/\/matforge.org\/?p=1098","raw":"https:\/\/matforge.org\/?p=1098"},"modified":"2026-08-19T09:48:40","modified_gmt":"2026-08-19T09:48:40","slug":"python-cfd-aerospace-supersonic-shock-capturing","status":"publish","type":"post","link":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/","title":{"rendered":"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque","raw":"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque"},"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>Cuando los investigadores hacen la transici\u00f3n de simulaciones de flujo incompresibles a compresibles en Python, se encuentran con una f\u00edsica fundamentalmente diferente: la densidad se convierte en una variable, la ecuaci\u00f3n de energ\u00eda debe resolverse y las ondas de choque introducen discontinuidades que los m\u00e9todos num\u00e9ricos est\u00e1ndar simplemente no pueden manejar. Este art\u00edculo cubre lo que hace que Supersonic Flow sea diferente, los m\u00e9todos de captura de choque dise\u00f1ados para manejarlo y los solucionadores de Python que implementan estos m\u00e9todos para aplicaciones aeroespaciales.<\/p>\n<h2>Comida clave<\/h2>\n<ul>\n<li>El flujo compresible requiere resolver las <strong>ecuaciones de Navier-Stokes comprimibles<\/strong> con la densidad como variable y la ecuaci\u00f3n de energ\u00eda acoplada, a diferencia del flujo incompresible donde la densidad es constante.<\/li>\n<li><strong>M\u00e9todos de captura de choque<\/strong> (ROE, AUSM, TVD, WENO, TENO) son esenciales porque los choques introducen discontinuidades. El esquema ROE necesita una soluci\u00f3n de entrop\u00eda y protecci\u00f3n de carbunco en choques fuertes.<\/li>\n<li><strong>Los solucionadores de Python para el flujo compresible<\/strong> ahora son de producci\u00f3n: Pybaram (no estructuradas, 2022), OpenSBLI v3.0 (generaci\u00f3n de c\u00f3digo automatizada, CPC 2025), JANC (Diferencial de GPU Solver, abril de 2025) y PyGasFlow (Quasi-1D Analytical).<\/li>\n<li><strong>Casos de referencia<\/strong> como el tubo de choque SOD y el problema de SHU-OSHER proporcionan una validaci\u00f3n est\u00e1ndar para la precisi\u00f3n de captura de golpes.<\/li>\n<li><strong>MusCl-TVD es m\u00e1s barato pero oscila<\/strong> cerca de las discontinuidades; <strong> WENO de 5.\u00ba orden <\/strong> da una resoluci\u00f3n superior pero cuesta m\u00e1s. Para DNS\/ILES de interacciones shock-boundary-capa, Weno\/Teno es el est\u00e1ndar actual.<\/li>\n<li><strong>PygasFlow<\/strong> y el repositorio de c\u00f3digo abierto <strong>python-shock-tube<\/strong> proporcionan puntos de entrada accesibles para comprender la f\u00edsica de choque antes de comprometerse con los solucionadores de producci\u00f3n.<\/li>\n<\/ul>\n<h2>\u00bfQu\u00e9 hace que el flujo supers\u00f3nico sea diferente del flujo incompresible?<\/h2>\n<p>En el flujo incompresible, la densidad se trata como una constante. Las ecuaciones de momento se resuelven independientemente de la ecuaci\u00f3n de energ\u00eda, y la presi\u00f3n est\u00e1 determinada \u00fanicamente por el campo de velocidad a trav\u00e9s de un algoritmo de acoplamiento presi\u00f3n-velocidad (como simple o piso). Esto significa que para los flujos de baja velocidad, puede resolver las ecuaciones de impulso y continuidad sin saber nunca los cambios de densidad del fluido, es un hecho.<\/p>\n<p>En el flujo compresible, todo cambia. La densidad se convierte en una variable que evoluciona de acuerdo con la ecuaci\u00f3n de continuidad, las ecuaciones de momento y la ecuaci\u00f3n de energ\u00eda. El estado termodin\u00e1mico del fluido (presi\u00f3n, temperatura y densidad) se acoplan a trav\u00e9s de la ecuaci\u00f3n de estado (t\u00edpicamente la ley de gas ideal para aplicaciones aeroespaciales). Esto significa que no puedes desacoplar el impulso de la ecuaci\u00f3n de energ\u00eda. El solucionador debe rastrear c\u00f3mo las ondas de presi\u00f3n se propagan a trav\u00e9s del fluido, y estas ondas viajan a la velocidad del sonido.<\/p>\n<p>El par\u00e1metro adimensional que gobierna esta transici\u00f3n es el <strong>n\u00famero MACH<\/strong>, la relaci\u00f3n entre la velocidad del flujo y la velocidad local del sonido. Cuando m &lt; 0.3, los cambios de densidad suelen ser lo suficientemente peque\u00f1os como para que se mantenga la suposici\u00f3n incompresible. Cuando m &gt; 1 (supersonic), el flujo contiene ondas de choque: discontinuidades donde la densidad, la presi\u00f3n y la temperatura saltan casi instant\u00e1neamente a trav\u00e9s de una regi\u00f3n estrecha.<\/p>\n<p>Para los investigadores aeroespaciales que usan Python, esto significa que el cebador CFD de Python (post 390), que cubre los fluidos fipy, su2 y jax, principalmente para flujos incompresibles, deja una brecha significativa. Necesitas entender:<\/p>\n<ol>\n<li><strong>Las ecuaciones compresibles de Navier-Stokes<\/strong> en su forma completa, incluida la ecuaci\u00f3n de energ\u00eda<\/li>\n<li><strong>Resolvedores de Riemann<\/strong> que calculan los flujos a trav\u00e9s de las caras de las celdas donde pueden existir discontinuidades<\/li>\n<li><strong>M\u00e9todos de reconstrucci\u00f3n<\/strong> que determinan c\u00f3mo las variables se interpolan desde los centros celulares a las caras<\/li>\n<li><strong>Esquemas de integraci\u00f3n de tiempo<\/strong> que respetan las restricciones de CFL m\u00e1s estrictas en n\u00fameros altos de Mach<\/li>\n<li><strong>Tratamientos num\u00e9ricos especiales<\/strong> como la soluci\u00f3n de entrop\u00eda y la protecci\u00f3n del carbunco<\/li>\n<\/ol>\n<p>Esta no es una simple extensi\u00f3n del flujo incompresible, es una metodolog\u00eda num\u00e9rica diferente aplicada a un r\u00e9gimen f\u00edsico diferente.<\/p>\n<h2>M\u00e9todos de captura de choque: de ROE a WENO<\/h2>\n<p>Cuando se forma una onda de choque, las variables de flujo cambian discontinuamente en una distancia m\u00e1s peque\u00f1a de lo que puede resolver cualquier cuadr\u00edcula f\u00edsica. En lugar de tratar de resolver los choques directamente (lo que requerir\u00eda cuadr\u00edculas imposiblemente finas), los m\u00e9todos de captura de golpes permiten que el esquema num\u00e9rico absorba la discontinuidad dentro de unas pocas celdas, utilizando la disipaci\u00f3n num\u00e9rica para estabilizar la soluci\u00f3n.<\/p>\n<h3>El esquema ROE y por qu\u00e9 necesita arreglos<\/h3>\n<p>El esquema ROE, introducido por Peter Roe en 1978, es un solucionador de Riemann aproximado que linealiza las ecuaciones de Euler alrededor del estado de la cara de la celda. Es computacionalmente eficiente y fue el m\u00e9todo dominante de captura de choque durante d\u00e9cadas. La idea es simple: en cada cara de celda, se resuelve una versi\u00f3n linealizada del problema de Riemann (el problema del valor inicial para los datos discontinuos), calcula el flujo y agrega la disipaci\u00f3n num\u00e9rica proporcional a las velocidades de onda.<\/p>\n<p>En Python, la implementaci\u00f3n del esquema ROE de ARXIV 2103.02794 sigue este patr\u00f3n:<\/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>El problema con el esquema ROE b\u00e1sico es doble. En primer lugar, con fuertes choques, el esquema puede desarrollar <strong>presi\u00f3n negativa<\/strong>, un estado no f\u00edsico que hace que el solucionador se bloquee. Esto es abordado por el arreglo de <strong>entrop\u00eda<\/strong>, que modifica las velocidades de onda cerca de los choques para restaurar la convexidad de la funci\u00f3n de flujo y evitar estados no f\u00edsicos.<\/p>\n<p>En segundo lugar, en las cuadr\u00edculas no estructuradas, el esquema ROE puede exhibir el <strong>fen\u00f3meno del carbuncle<\/strong>, una inestabilidad num\u00e9rica en la que un fuerte choque (como el que se forma detr\u00e1s de un cuerpo contundente) desarrolla un segundo choque no f\u00edsico que se deriva del choque principal. Esto ocurre porque el esquema ROE es demasiado sensible a la orientaci\u00f3n de la cuadr\u00edcula con fuertes choques. El \u00abesquema de ROE estable en choque\u00bb combina la soluci\u00f3n de entrop\u00eda con un solucionador de Riemann girado para curar esto. Para los investigadores que trabajan en geometr\u00edas aeroespaciales con fuertes choques (como cilindros supers\u00f3nicos o cuerpos romos), omitir la protecci\u00f3n del buncle puede causar fallas en el solucionador.<\/p>\n<h3>AUSM: dividir el flujo<\/h3>\n<p>El m\u00e9todo de divisi\u00f3n ascendente de advecci\u00f3n (AUSM) adopta un enfoque diferente. En lugar de calcular la matriz de ROE, AUSM divide el flujo en componentes advectivos y de presi\u00f3n. Esto lo hace robusto tanto con n\u00fameros de Mach altos como con fuertes amortiguadores sin requerir una correcci\u00f3n de entrop\u00eda: la divisi\u00f3n maneja inherentemente la condici\u00f3n de entrop\u00eda f\u00edsica. Las variantes AUSM (AUSM+, AUSM+, AUSM+) y sus sucesores (AusMPWR+) se encuentran entre los esquemas de captura de choque m\u00e1s utilizados en los c\u00f3digos CFD aeroespaciales porque manejan el rango completo de Mach (desde subs\u00f3nica hasta hipers\u00f3nico) sin estrategias de cambio.<\/p>\n<p>El repositorio Python-Shock-Tube implementa AUSM con una interfaz limpia que funciona junto con los solucionadores de GoDunov, ROE, HLL y 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>Limitadores de flujo de TVD y reconstrucci\u00f3n MUSCL<\/h3>\n<p>Los limitadores de flujo de TVD (disminuci\u00f3n total de la variaci\u00f3n) evitan las oscilaciones espurias cerca de las discontinuidades al controlar la variaci\u00f3n total de la soluci\u00f3n. Cuando se combinan con la reconstrucci\u00f3n de MUSCL (Esquema Monot\u00f3nico Centrado Upstream para las Leyes de Conservaci\u00f3n), forman el esquema <strong>muscl-TVD<\/strong>, un m\u00e9todo de segundo orden que es el caballo de batalla para la captura de choque a nivel de ingenier\u00eda.<\/p>\n<p>La compensaci\u00f3n aqu\u00ed es clara: MUSCL-TVD es computacionalmente barato y robusto, pero con fuertes choques o interacciones de onda complejas, puede producir peque\u00f1as oscilaciones detr\u00e1s del frente de choque. Para aplicaciones de ingenier\u00eda donde la resoluci\u00f3n absoluta de choques no es cr\u00edtica, MUSCL-TVD suele ser suficiente.<\/p>\n<h3>Weno y Teno: captura de choque de alto orden<\/h3>\n<p>La reconstrucci\u00f3n esencialmente no oscilatoria ponderada de quinto orden (WENO) aborda las limitaciones de MUSCL-TVD mediante el uso de una combinaci\u00f3n ponderada de plantillas que se adaptan autom\u00e1ticamente a regiones lisas versus discontinuas. Casi flujo suave, todas las plantillas contribuyen; Cerca de los choques, los pesos se concentran en la plantilla no oscilatoria. El resultado es una resoluci\u00f3n dram\u00e1ticamente mejor de las oscilaciones de alta frecuencia cerca de las discontinuidades, cruciales para la simulaci\u00f3n num\u00e9rica directa (DNS) de alta fidelidad y la simulaci\u00f3n de remolinos grandes impl\u00edcitas (ILES).<\/p>\n<p>El repositorio Python-Shock-Tube lo demuestra claramente con el problema <strong>shu\u2013osher<\/strong>, un punto de referencia cl\u00e1sico donde un choque interact\u00faa con una onda de densidad. Vea la <a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\/blob\/main\/gallery\/Shu-Osher.png\">imagen de comparaci\u00f3n shu\u2013osher<\/a> del repositorio, que muestra que WENO de 5.\u00b0 orden resuelve las oscilaciones de alta frecuencia detr\u00e1s del choque mucho mejor que MUSCL-TVD.<\/p>\n<p>Para DNS e ILEs de interacciones de choque-capa l\u00edmite, como los casos de buffet trans\u00f3nico validados en OpenSBLI V3.0, Weno y su variante TENO de preservaci\u00f3n de borde (Eno objetivo) son el est\u00e1ndar actual. La generaci\u00f3n de c\u00f3digo automatizado de OpenSBLI produce c\u00f3digo C de producci\u00f3n a partir de formulaciones simb\u00f3licas de Python utilizando Weno\/Teno para la discretizaci\u00f3n compresible de Navier-Stokes.<\/p>\n<h2>Soludores de Python para flujo aeroespacial compresible<\/h2>\n<p>El panorama de los solucionadores de flujo compresible basados en Python ha madurado significativamente entre 2021 y 2025. Ahora hay cinco marcos disponibles para investigadores aeroespaciales, cada uno con arquitecturas distintas:<\/p>\n<h3>Pybaram: cuadr\u00edculas no estructuradas para golpes fuertes<\/h3>\n<p>Pybaram (publicado en SoftwareX, 2022) implementa m\u00e9todos de volumen finito en cuadr\u00edculas no estructuradas para geometr\u00edas aeroespaciales 2D y 3D. Maneja expl\u00edcitamente fuertes ondas de choque y expansi\u00f3n, dise\u00f1adas tanto para la ense\u00f1anza como para la investigaci\u00f3n con datos abiertos sobre Mendeley. Con m\u00e1s de 10 citas, Pybaram representa un punto de entrada accesible para los investigadores que necesitan soporte de red no estructurado sin la sobrecarga de paquetes m\u00e1s grandes.<\/p>\n<h3>OpenSBL V3.0 \u2014 Generaci\u00f3n de c\u00f3digo automatizada para DNS\/ILES<\/h3>\n<p>OpenSBLI representa un enfoque fundamentalmente diferente: en lugar de escribir el c\u00f3digo CFD compilado directamente, los usuarios escriben ecuaciones en notaci\u00f3n Einstein usando Python Symbolic Algebra (simpy), y el generador de c\u00f3digo de OpenSBLI produce un c\u00f3digo C optimizado a trav\u00e9s del OPS DSL. El framework apunta a cuadr\u00edculas estructuradas de varios bloques y admite backends de CPU (MPI\/OpenMP) y GPU (CUDA\/OpenCL).<\/p>\n<p>opensbli v3.0, publicado en Computadoras &amp; F\u00edsica (enero de 2025), apoya expl\u00edcitamente <strong>weno y teno shock-capture<\/strong> y ha sido validado en:<\/p>\n<ul>\n<li>Interacciones de capas l\u00edmite de choque en n\u00fameros de Mach hipers\u00f3nicos<\/li>\n<li>Buffet Transonic en los perfiles aerodin\u00e1micos de la NASA-CRM<\/li>\n<li>DNS de flujo hipers\u00f3nico sobre protuberancias gaussianas<\/li>\n<\/ul>\n<p>El pedigr\u00ed acad\u00e9mico del marco es fuerte: el equipo de Southampton\/Oxford (Lusher, Sandham) ha publicado m\u00e1s de 20 art\u00edculos sobre aplicaciones de OpenSBL. Si su investigaci\u00f3n involucra DNS\/ILE de alta fidelidad de flujos compresibles con interacciones de choque, la generaci\u00f3n de c\u00f3digo automatizada de OpenSBLI es la opci\u00f3n m\u00e1s madura.<\/p>\n<p><a href=\"https:\/\/github.com\/opensbli\/opensbli\/blob\/main\/readme_images\/instroduction.png\">diagrama de flujo de trabajo<\/a> ilustra c\u00f3mo son las ecuaciones simb\u00f3licas de Python Traducido al c\u00f3digo C optimizado a trav\u00e9s del OPS DSL.<\/p>\n<h3>JANC \u2014 Flujo compresible diferenciable en GPU<\/h3>\n<p>Janc (publicado en abril de 2025 por investigadores de la Universidad y colaboradores de Tsinghua) es posiblemente el solucionador de Python compresible m\u00e1s novedoso en los \u00faltimos a\u00f1os. Construido completamente sobre <strong>JAX-AMR<\/strong> (refinamiento de malla adaptativa estructurada en bloques basada en JAX), JANC es un solucionador totalmente diferenciable para flujos de reacci\u00f3n compresibles. Su pretensi\u00f3n de distinci\u00f3n:<\/p>\n<blockquote>\n<p>En una sola GPU A100, JANC logra <strong>1% del costo computacional de OpenFOAM<\/strong> (usando 384 n\u00facleos de CPU). Con AMR habilitado, el costo cae al 1-2% de OpenFoam.<\/p>\n<\/blockquote>\n<p>Esta no es una afirmaci\u00f3n de marketing, se verifica contra los casos de prueba informados. Apalancamiento de Janc:<\/p>\n<ul>\n<li>Diferenciaci\u00f3n autom\u00e1tica (no hay necesidad de derivar ecuaciones adjuntas manualmente)<\/li>\n<li>Compilaci\u00f3n XLA JIT (optimizaci\u00f3n de c\u00e1lculo de tensor de XLA)<\/li>\n<li>Refinamiento de malla adaptativa (resoluci\u00f3n autom\u00e1tica donde los gradientes son pronunciados)<\/li>\n<li>Paralelismo nativo de GPU\/TPU<\/li>\n<li>Licencias del MIT<\/li>\n<\/ul>\n<p>Para los investigadores que exploran <strong>diferenciable CFD<\/strong>, una tendencia creciente de optimizaci\u00f3n del dise\u00f1o, an\u00e1lisis de sensibilidad e integraci\u00f3n de ML, JANC es el primer solucionador de Python completamente diferenciable para reaccionar los flujos compresibles. El c\u00f3digo est\u00e1 disponible bajo una licencia MIT.<\/p>\n<h3>PygasFlow y SU2: c\u00e1lculos r\u00e1pidos y suites aeroespaciales completas<\/h3>\n<p><strong>Pygasflow<\/strong> (v1.4.1) es un paquete de Python ligero para la din\u00e1mica de gas ideal cuasi-1D. Implementa relaciones de choque normales y oblicuas, flujo isoentr\u00f3pico, flujo de Fanno y Rayleigh, y correlaciones de placa plana\/estancamiento aerotermodin\u00e1mica. Si bien no es un solucionador de CFD completo, es invaluable para c\u00e1lculos anal\u00edticos r\u00e1pidos: diagramas interactivos de deflexi\u00f3n de presi\u00f3n, controles de relaci\u00f3n de choque y barridos param\u00e9tricos r\u00e1pidos antes de comprometerse con una simulaci\u00f3n completa.<\/p>\n<p><strong>Su2<\/strong> sigue siendo el conjunto de CFD de c\u00f3digo abierto m\u00e1s citado para aplicaciones aeroespaciales. Sus capacidades supers\u00f3nicas\/comprimibles incluyen la cu\u00f1a supers\u00f3nica inviscida, el perfil aerodin\u00e1mico Transonic ONERAM6 y el flujo compresible no ideal en los tutoriales de boquillas supers\u00f3nicas. Con m\u00e1s de 4400 estrellas de GitHub, SU2 es la opci\u00f3n establecida para la producci\u00f3n de CFD aeroespacial, donde Python sirve principalmente como capa de script y automatizaci\u00f3n.<\/p>\n<h2>Casos de referencia y validaci\u00f3n<\/h2>\n<p>Cualquier implementaci\u00f3n de captura de choque necesita validaci\u00f3n contra casos de referencia est\u00e1ndar. Son fundamentales dos casos:<\/p>\n<h3>Tubo de choque de c\u00e9sped<\/h3>\n<p>El tubo de choque SOD es la prueba can\u00f3nica para los solucionadores de Riemann. Inicializa un tubo con un estado izquierdo de alta presi\u00f3n y un estado derecho de baja presi\u00f3n. En t = 0, el diafragma se rompe y se forma un choque, discontinuidad de contacto y forma de ventilador de expansi\u00f3n. El repositorio <strong>python-shock-tube<\/strong> proporciona este punto de referencia. Consulte la <a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\/blob\/main\/gallery\/SOD.png\">Comparaci\u00f3n de tubos de choque SOD<\/a> que muestra la resoluci\u00f3n de flujo en cuatro solucionadores (Godunov, ROE, HLL, HLLC) en 300 celdas con reconstrucci\u00f3n de orden 0.<\/p>\n<p>La imagen muestra la resoluci\u00f3n de flujo en cuatro solucionadores (Godunov, ROE, HLL, HLLC) en 300 celdas con reconstrucci\u00f3n de orden 0. HLLC (lax-Friedrichs linealizado h\u00edbrido con contacto) generalmente proporciona el mejor equilibrio: resuelve la discontinuidad de contacto mejor que HLL y es computacionalmente comparable a HLL. Esta es la raz\u00f3n por la que HLLC es la opci\u00f3n predeterminada en la implementaci\u00f3n WENO del repositorio Python-Shock-Tube.<\/p>\n<h3>Problema Shu-Osher<\/h3>\n<p>El problema Shu-Osher prueba qu\u00e9 tan bien un esquema maneja la interacci\u00f3n entre una onda de choque y una onda de densidad. La condici\u00f3n inicial es una funci\u00f3n de paso para la presi\u00f3n con una perturbaci\u00f3n de densidad sinusoidal detr\u00e1s del choque. Este caso revela c\u00f3mo los m\u00e9todos de reconstrucci\u00f3n resuelven las oscilaciones de alta frecuencia:<\/p>\n<ul>\n<li><strong>Reconstrucci\u00f3n de orden 0\u00b0<\/strong> (Godunov) sufre una disipaci\u00f3n num\u00e9rica excesiva en choques fuertes<\/li>\n<li><strong>MUSCL-TVD<\/strong> reduce la disipaci\u00f3n pero oscila detr\u00e1s del shock<\/li>\n<li><strong>weno de 5to orden<\/strong> Resuelve las oscilaciones de alta frecuencia con precisi\u00f3n<\/li>\n<\/ul>\n<p>Para simulaciones aeroespaciales de alta fidelidad, WENO es ahora la opci\u00f3n est\u00e1ndar.<\/p>\n<h2>Desaf\u00edos num\u00e9ricos exclusivos del flujo de alto mach<\/h2>\n<p>Varios desaf\u00edos num\u00e9ricos surgen espec\u00edficamente en un flujo compresible\/supersonic que no aparecen (o aparecen de manera diferente) en CFD incompresible:<\/p>\n<h3>Restricciones de CFL en n\u00fameros mach altos<\/h3>\n<p>La condici\u00f3n CFL (Courant-Friedrichs-Lewy) gobierna la estabilidad para la integraci\u00f3n del tiempo expl\u00edcita. Para el flujo compresible, el n\u00famero CFL depende de la suma de la velocidad del flujo y la velocidad del sonido:<\/p>\n<p>$$CFL = frac{u + A}{Delta X} Delta T$$<\/p>\n<p>En n\u00fameros de mach altos, $u approx m cdot a$, por lo que la condici\u00f3n de CFL se vuelve extremadamente restrictiva. Esto significa que se requieren <strong>peque\u00f1os pasos de tiempo<\/strong>, a menudo \u00f3rdenes de magnitud m\u00e1s peque\u00f1os que para flujos incompresibles. Los m\u00e9todos impl\u00edcitos de paso de tiempo o multigrid pueden mitigar esto, pero los esquemas expl\u00edcitos necesitan un control de paso de tiempo cuidadoso.<\/p>\n<h3>arreglo de entrop\u00eda<\/h3>\n<p>El esquema b\u00e1sico de ROE falla la condici\u00f3n de entrop\u00eda en choques fuertes: en lugar del aumento de entrop\u00eda f\u00edsicamente correcto a trav\u00e9s del choque, la soluci\u00f3n num\u00e9rica puede violar la termodin\u00e1mica. El arreglo de entrop\u00eda modifica los valores propios cerca de los choques para garantizar que el esquema num\u00e9rico respete la segunda ley de la termodin\u00e1mica. Sin \u00e9l, la soluci\u00f3n puede converger a un estado de entrop\u00eda equivocado: un choque que es demasiado fuerte o demasiado d\u00e9bil.<\/p>\n<h3>Fen\u00f3meno de carbunco<\/h3>\n<p>Como se mencion\u00f3 anteriormente, el fen\u00f3meno de Carbuncle es una inestabilidad num\u00e9rica espec\u00edfica del esquema ROE en redes no estructuradas. Cuando un choque fuerte se alinea mal con la red, el solucionador puede desarrollar un choque secundario que se ramifica del choque principal, f\u00edsicamente imposible y num\u00e9ricamente catastr\u00f3fico. El esquema de ROE estable a los golpes (combinaci\u00f3n de correcci\u00f3n de entrop\u00eda con solucionador de Riemann rotado) lo cura.<\/p>\n<h3>Interacci\u00f3n de la capa l\u00edmite-Shock<\/h3>\n<p>En las aplicaciones aeroespaciales, las ondas de choque que interact\u00faan con las capas l\u00edmite producen estructuras de flujo complejas: separaci\u00f3n de flujo, reincorporaci\u00f3n y buffet inestable. Resolver estos requiere:<\/p>\n<ul>\n<li>Resoluci\u00f3n fina de la capa l\u00edmite (a menudo DNS resuelto en la pared)<\/li>\n<li>Captura de golpes de alto orden (WENO\/Teno) para resolver el choque<\/li>\n<li>Resoluci\u00f3n temporal adecuada para fen\u00f3menos inestables<\/li>\n<\/ul>\n<p>Esta es la raz\u00f3n por la que la validaci\u00f3n de OpenSBLI V3.0 se centra en SBLI: es la f\u00edsica lo que m\u00e1s importa para el dise\u00f1o de veh\u00edculos trans\u00f3nicos e hipers\u00f3nicos.<\/p>\n<h2>\u00bfQu\u00e9 solucionador deber\u00edas elegir?<\/h2>\n<p>La elecci\u00f3n del solucionador de flujo compresible depende de los requisitos de la red, las necesidades de fidelidad y los recursos computacionales. Aqu\u00ed hay una comparaci\u00f3n:<\/p>\n<table>\n<thead>\n<tr>\n<th>solidista<\/th>\n<th>Tipo de cuadr\u00edcula<\/th>\n<th>captura de choque<\/th>\n<th>mejor para<\/th>\n<th>hardware<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>p\u00edbara<\/td>\n<td>desestructurado<\/td>\n<td>Volumen finito<\/td>\n<td>Ense\u00f1anza, Aeroespacial 2D\/3D, Golpes fuertes<\/td>\n<td>CPU paralelo<\/td>\n<\/tr>\n<tr>\n<td>AbiertosBLI<\/td>\n<td>Estructurado (multibloqueo)<\/td>\n<td>Weno\/Teno<\/td>\n<td>DNS\/ILES, SBLI, Tras\u00f3nico Buffet, Hipers\u00f3nico<\/td>\n<td>CPU\/GPU (CUDA\/OpenCL)<\/td>\n<\/tr>\n<tr>\n<td>enderezado<\/td>\n<td>Estructurado (Bloque AMR)<\/td>\n<td>Diferencia autom\u00e1tica de Jax<\/td>\n<td>CFD diferenciable, optimizaci\u00f3n adjunta, GPU<\/td>\n<td>GPU\/TPU (A100+)<\/td>\n<\/tr>\n<tr>\n<td>flujo de pigas<\/td>\n<td>N\/A (anal\u00edtica)<\/td>\n<td>N\/A<\/td>\n<td>Relaciones r\u00e1pidas de choque, Fanno\/Rayleigh, barridos param\u00e9tricos<\/td>\n<td>Cualquier<\/td>\n<\/tr>\n<tr>\n<td>su2<\/td>\n<td>Estructurado\/no estructurado<\/td>\n<td>ROE, AUSM, etc.<\/td>\n<td>Suite aeroespacial completa, CFD de producci\u00f3n, flujos N+1<\/td>\n<td>CPU\/MPI<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Recomendaci\u00f3n pr\u00e1ctica<\/strong>: Comience con PyGasFlow para comprender anal\u00edticamente las relaciones de choque y el flujo de Fanno\/Rayleigh. Luego use el repositorio Python-Shock-Tube para la pr\u00e1ctica de captura de golpes 1D (ROE, AUSM, Weno). Elija Pybaram si necesita cuadr\u00edculas no estructuradas para geometr\u00edas complejas 2D\/3D. Elija opensbli si su investigaci\u00f3n involucra DNS\/ILES con WENO\/TENO en cuadr\u00edculas estructuradas. Elija Janc si est\u00e1 explorando CFD diferenciable con GPU Acceleration y AMR.<\/p>\n<h2>Resumen y pr\u00f3ximos pasos<\/h2>\n<p>Este art\u00edculo cubri\u00f3 lo que hace que el flujo compresible\/supersonic sea diferente del flujo incompresible, los m\u00e9todos de captura de choque (ROE con Entropy Fix, AUSM, TVD, Weno\/Teno) que manejan discontinuidades, los solucionadores de Python disponibles para aplicaciones aeroespaciales (Pybaram, OpenSBL, JANC, PygasFlow, SU2) y casos de referencia para la validaci\u00f3n.<\/p>\n<p><strong>Para los investigadores que comienzan con el flujo compresible en Python<\/strong>: comience con PyGasFlow para realizar c\u00e1lculos anal\u00edticos r\u00e1pidos, practique m\u00e9todos de captura de choque con Python-Shock-Tube, luego elija Pybaram (no estructurado) o OpensBLI (estructurado) seg\u00fan los requisitos de su red. Para CFD diferenciable con aceleraci\u00f3n de GPU, JANC representa el estado actual del arte.<\/p>\n<p><strong>Si es nuevo en Python CFD<\/strong>, comience con nuestro <a href=\"https:\/\/matforge.org\/python-for-computational-cfd-primer-researchers\/\" target=\"_blank\" rel=\"nofollow noopener\">Comprensivo CFD Primer<\/a> cubriendo fipy, malla y el 12 Pasos a Navier-Stokes. Para los flujos dominados por la advecci\u00f3n donde es importante la resoluci\u00f3n de la malla, <a href=\"https:\/\/matforge.org\/anisotropic-mesh-adaptation-advection-dominated-flows\/\" target=\"_blank\" rel=\"nofollow noopener\">Adaptaci\u00f3n de malla anisotr\u00f3pica<\/a> puede complementar su esquema de captura de choque. Cuando necesite una mejor resoluci\u00f3n que el volumen finito de segundo orden, <a href=\"https:\/\/matforge.org\/high-order-numerical-methods-beyond-fdm-fem-fvm\/\" target=\"_blank\" rel=\"nofollow noopener\">M\u00e9todos espectrales y DG de orden alto<\/a> ofrecen alternativas.<\/p>\n<hr>\n<h3>lectura recomendada<\/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: un solucionador de flujo de reacci\u00f3n compresible diferenciable rentable<\/a> \u2014 Solucionador basado en JAX con AMR, 1\u20132% del costo de OpenFoam (abril 2025)<\/li>\n<li><a href=\"https:\/\/github.com\/opensbli\/opensbli\" target=\"_blank\" rel=\"nofollow noopener\">opensbli github<\/a> \u2014 Generaci\u00f3n de c\u00f3digo automatizada para compresible Navier\u2013Stokes con Captura de choque de WENO\/Teno<\/li>\n<li><a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\" target=\"_blank\" rel=\"nofollow noopener\">Python-Shock-Tube<\/a> \u2014 Solucionador de ecuaciones de Euler 1D con implementaciones de Godunov, ROE, AUSM, HLLC, MUSCL-TVD y WENO<\/li>\n<li><a href=\"https:\/\/arxiv.org\/pdf\/2103.02794\" target=\"_blank\" rel=\"nofollow noopener\">Una introducci\u00f3n a la din\u00e1mica de fluidos y los m\u00e9todos de soluci\u00f3n num\u00e9rica<\/a> \u2014 secci\u00f3n 13.1: Implementaci\u00f3n de Python del esquema ROE con tubo de choque SOD<\/li>\n<li><a href=\"https:\/\/levelup.gitconnected.com\/create-your-own-riemann-solver-with-python-9e38d64ad2ec\" target=\"_blank\" rel=\"nofollow noopener\">Crea tu propio Solver Riemann<\/a> \u2014 Tutorial exacto de Riemann Solver de Philip Mocz para Ecuaciones de Euler<\/li>\n<li><a href=\"https:\/\/pygasflow.readthedocs.io\/en\/stable\/\" target=\"_blank\" rel=\"nofollow noopener\">Docs de PygasFlow<\/a> \u2014 cuasi-1D Din\u00e1mica de gas ideal, Relaciones de choque, Flujo de Fanno\/Rayleigh<\/li>\n<li><a href=\"https:\/\/su2code.github.io\/tutorials\/home\/\" target=\"_blank\" rel=\"nofollow noopener\">tutoriales su2<\/a> \u2014 cu\u00f1a supers\u00f3nica, oneram6 transonic, Boquilla NICFD<\/li>\n<\/ul>\n<p><!-- Fuente de contenido: Matforge SEO Content Pipeline Archivo de investigaci\u00f3n: Research\/SEO-Content\/Python-CFD-Aerospace-Supersonic-Shock.md Clasificaci\u00f3n de superposici\u00f3n: Nuevo \u00e1ngulo (distinto del Post 390) Decisi\u00f3n visual: Ninguno (Las im\u00e1genes de GitHub no estaban disponibles debido a la limitaci\u00f3n de la velocidad; vinculados a las im\u00e1genes del repositorio como referencias) Todos los enlaces externos usan rel=\"nofollow noopener\" target=\"_blank\" --><\/p>\n","protected":false,"raw":"<p>Cuando los investigadores hacen la transici\u00f3n de simulaciones de flujo incompresibles a compresibles en Python, se encuentran con una f\u00edsica fundamentalmente diferente: la densidad se convierte en una variable, la ecuaci\u00f3n de energ\u00eda debe resolverse y las ondas de choque introducen discontinuidades que los m\u00e9todos num\u00e9ricos est\u00e1ndar simplemente no pueden manejar. Este art\u00edculo cubre lo que hace que Supersonic Flow sea diferente, los m\u00e9todos de captura de choque dise\u00f1ados para manejarlo y los solucionadores de Python que implementan estos m\u00e9todos para aplicaciones aeroespaciales.<\/p>\n<h2>Comida clave<\/h2>\n<ul>\n<li>El flujo compresible requiere resolver las <strong>ecuaciones de Navier-Stokes comprimibles<\/strong> con la densidad como variable y la ecuaci\u00f3n de energ\u00eda acoplada, a diferencia del flujo incompresible donde la densidad es constante.<\/li>\n<li><strong>M\u00e9todos de captura de choque<\/strong> (ROE, AUSM, TVD, WENO, TENO) son esenciales porque los choques introducen discontinuidades. El esquema ROE necesita una soluci\u00f3n de entrop\u00eda y protecci\u00f3n de carbunco en choques fuertes.<\/li>\n<li><strong>Los solucionadores de Python para el flujo compresible<\/strong> ahora son de producci\u00f3n: Pybaram (no estructuradas, 2022), OpenSBLI v3.0 (generaci\u00f3n de c\u00f3digo automatizada, CPC 2025), JANC (Diferencial de GPU Solver, abril de 2025) y PyGasFlow (Quasi-1D Analytical).<\/li>\n<li><strong>Casos de referencia<\/strong> como el tubo de choque SOD y el problema de SHU-OSHER proporcionan una validaci\u00f3n est\u00e1ndar para la precisi\u00f3n de captura de golpes.<\/li>\n<li><strong>MusCl-TVD es m\u00e1s barato pero oscila<\/strong> cerca de las discontinuidades; <strong> WENO de 5.\u00ba orden <\/strong> da una resoluci\u00f3n superior pero cuesta m\u00e1s. Para DNS\/ILES de interacciones shock-boundary-capa, Weno\/Teno es el est\u00e1ndar actual.<\/li>\n<li><strong>PygasFlow<\/strong> y el repositorio de c\u00f3digo abierto <strong>python-shock-tube<\/strong> proporcionan puntos de entrada accesibles para comprender la f\u00edsica de choque antes de comprometerse con los solucionadores de producci\u00f3n.<\/li>\n<\/ul>\n<h2>\u00bfQu\u00e9 hace que el flujo supers\u00f3nico sea diferente del flujo incompresible?<\/h2>\n<p>En el flujo incompresible, la densidad se trata como una constante. Las ecuaciones de momento se resuelven independientemente de la ecuaci\u00f3n de energ\u00eda, y la presi\u00f3n est\u00e1 determinada \u00fanicamente por el campo de velocidad a trav\u00e9s de un algoritmo de acoplamiento presi\u00f3n-velocidad (como simple o piso). Esto significa que para los flujos de baja velocidad, puede resolver las ecuaciones de impulso y continuidad sin saber nunca los cambios de densidad del fluido, es un hecho.<\/p>\n<p>En el flujo compresible, todo cambia. La densidad se convierte en una variable que evoluciona de acuerdo con la ecuaci\u00f3n de continuidad, las ecuaciones de momento y la ecuaci\u00f3n de energ\u00eda. El estado termodin\u00e1mico del fluido (presi\u00f3n, temperatura y densidad) se acoplan a trav\u00e9s de la ecuaci\u00f3n de estado (t\u00edpicamente la ley de gas ideal para aplicaciones aeroespaciales). Esto significa que no puedes desacoplar el impulso de la ecuaci\u00f3n de energ\u00eda. El solucionador debe rastrear c\u00f3mo las ondas de presi\u00f3n se propagan a trav\u00e9s del fluido, y estas ondas viajan a la velocidad del sonido.<\/p>\n<p>El par\u00e1metro adimensional que gobierna esta transici\u00f3n es el <strong>n\u00famero MACH<\/strong>, la relaci\u00f3n entre la velocidad del flujo y la velocidad local del sonido. Cuando m &lt; 0.3, los cambios de densidad suelen ser lo suficientemente peque\u00f1os como para que se mantenga la suposici\u00f3n incompresible. Cuando m &gt; 1 (supersonic), el flujo contiene ondas de choque: discontinuidades donde la densidad, la presi\u00f3n y la temperatura saltan casi instant\u00e1neamente a trav\u00e9s de una regi\u00f3n estrecha.<\/p>\n<p>Para los investigadores aeroespaciales que usan Python, esto significa que el cebador CFD de Python (post 390), que cubre los fluidos fipy, su2 y jax, principalmente para flujos incompresibles, deja una brecha significativa. Necesitas entender:<\/p>\n<ol>\n<li><strong>Las ecuaciones compresibles de Navier-Stokes<\/strong> en su forma completa, incluida la ecuaci\u00f3n de energ\u00eda<\/li>\n<li><strong>Resolvedores de Riemann<\/strong> que calculan los flujos a trav\u00e9s de las caras de las celdas donde pueden existir discontinuidades<\/li>\n<li><strong>M\u00e9todos de reconstrucci\u00f3n<\/strong> que determinan c\u00f3mo las variables se interpolan desde los centros celulares a las caras<\/li>\n<li><strong>Esquemas de integraci\u00f3n de tiempo<\/strong> que respetan las restricciones de CFL m\u00e1s estrictas en n\u00fameros altos de Mach<\/li>\n<li><strong>Tratamientos num\u00e9ricos especiales<\/strong> como la soluci\u00f3n de entrop\u00eda y la protecci\u00f3n del carbunco<\/li>\n<\/ol>\n<p>Esta no es una simple extensi\u00f3n del flujo incompresible, es una metodolog\u00eda num\u00e9rica diferente aplicada a un r\u00e9gimen f\u00edsico diferente.<\/p>\n<h2>M\u00e9todos de captura de choque: de ROE a WENO<\/h2>\n<p>Cuando se forma una onda de choque, las variables de flujo cambian discontinuamente en una distancia m\u00e1s peque\u00f1a de lo que puede resolver cualquier cuadr\u00edcula f\u00edsica. En lugar de tratar de resolver los choques directamente (lo que requerir\u00eda cuadr\u00edculas imposiblemente finas), los m\u00e9todos de captura de golpes permiten que el esquema num\u00e9rico absorba la discontinuidad dentro de unas pocas celdas, utilizando la disipaci\u00f3n num\u00e9rica para estabilizar la soluci\u00f3n.<\/p>\n<h3>El esquema ROE y por qu\u00e9 necesita arreglos<\/h3>\n<p>El esquema ROE, introducido por Peter Roe en 1978, es un solucionador de Riemann aproximado que linealiza las ecuaciones de Euler alrededor del estado de la cara de la celda. Es computacionalmente eficiente y fue el m\u00e9todo dominante de captura de choque durante d\u00e9cadas. La idea es simple: en cada cara de celda, se resuelve una versi\u00f3n linealizada del problema de Riemann (el problema del valor inicial para los datos discontinuos), calcula el flujo y agrega la disipaci\u00f3n num\u00e9rica proporcional a las velocidades de onda.<\/p>\n<p>En Python, la implementaci\u00f3n del esquema ROE de ARXIV 2103.02794 sigue este patr\u00f3n:<\/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>El problema con el esquema ROE b\u00e1sico es doble. En primer lugar, con fuertes choques, el esquema puede desarrollar <strong>presi\u00f3n negativa<\/strong>, un estado no f\u00edsico que hace que el solucionador se bloquee. Esto es abordado por el arreglo de <strong>entrop\u00eda<\/strong>, que modifica las velocidades de onda cerca de los choques para restaurar la convexidad de la funci\u00f3n de flujo y evitar estados no f\u00edsicos.<\/p>\n<p>En segundo lugar, en las cuadr\u00edculas no estructuradas, el esquema ROE puede exhibir el <strong>fen\u00f3meno del carbuncle<\/strong>, una inestabilidad num\u00e9rica en la que un fuerte choque (como el que se forma detr\u00e1s de un cuerpo contundente) desarrolla un segundo choque no f\u00edsico que se deriva del choque principal. Esto ocurre porque el esquema ROE es demasiado sensible a la orientaci\u00f3n de la cuadr\u00edcula con fuertes choques. El \"esquema de ROE estable en choque\" combina la soluci\u00f3n de entrop\u00eda con un solucionador de Riemann girado para curar esto. Para los investigadores que trabajan en geometr\u00edas aeroespaciales con fuertes choques (como cilindros supers\u00f3nicos o cuerpos romos), omitir la protecci\u00f3n del buncle puede causar fallas en el solucionador.<\/p>\n<h3>AUSM: dividir el flujo<\/h3>\n<p>El m\u00e9todo de divisi\u00f3n ascendente de advecci\u00f3n (AUSM) adopta un enfoque diferente. En lugar de calcular la matriz de ROE, AUSM divide el flujo en componentes advectivos y de presi\u00f3n. Esto lo hace robusto tanto con n\u00fameros de Mach altos como con fuertes amortiguadores sin requerir una correcci\u00f3n de entrop\u00eda: la divisi\u00f3n maneja inherentemente la condici\u00f3n de entrop\u00eda f\u00edsica. Las variantes AUSM (AUSM+, AUSM+, AUSM+) y sus sucesores (AusMPWR+) se encuentran entre los esquemas de captura de choque m\u00e1s utilizados en los c\u00f3digos CFD aeroespaciales porque manejan el rango completo de Mach (desde subs\u00f3nica hasta hipers\u00f3nico) sin estrategias de cambio.<\/p>\n<p>El repositorio Python-Shock-Tube implementa AUSM con una interfaz limpia que funciona junto con los solucionadores de GoDunov, ROE, HLL y 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>Limitadores de flujo de TVD y reconstrucci\u00f3n MUSCL<\/h3>\n<p>Los limitadores de flujo de TVD (disminuci\u00f3n total de la variaci\u00f3n) evitan las oscilaciones espurias cerca de las discontinuidades al controlar la variaci\u00f3n total de la soluci\u00f3n. Cuando se combinan con la reconstrucci\u00f3n de MUSCL (Esquema Monot\u00f3nico Centrado Upstream para las Leyes de Conservaci\u00f3n), forman el esquema <strong>muscl-TVD<\/strong>, un m\u00e9todo de segundo orden que es el caballo de batalla para la captura de choque a nivel de ingenier\u00eda.<\/p>\n<p>La compensaci\u00f3n aqu\u00ed es clara: MUSCL-TVD es computacionalmente barato y robusto, pero con fuertes choques o interacciones de onda complejas, puede producir peque\u00f1as oscilaciones detr\u00e1s del frente de choque. Para aplicaciones de ingenier\u00eda donde la resoluci\u00f3n absoluta de choques no es cr\u00edtica, MUSCL-TVD suele ser suficiente.<\/p>\n<h3>Weno y Teno: captura de choque de alto orden<\/h3>\n<p>La reconstrucci\u00f3n esencialmente no oscilatoria ponderada de quinto orden (WENO) aborda las limitaciones de MUSCL-TVD mediante el uso de una combinaci\u00f3n ponderada de plantillas que se adaptan autom\u00e1ticamente a regiones lisas versus discontinuas. Casi flujo suave, todas las plantillas contribuyen; Cerca de los choques, los pesos se concentran en la plantilla no oscilatoria. El resultado es una resoluci\u00f3n dram\u00e1ticamente mejor de las oscilaciones de alta frecuencia cerca de las discontinuidades, cruciales para la simulaci\u00f3n num\u00e9rica directa (DNS) de alta fidelidad y la simulaci\u00f3n de remolinos grandes impl\u00edcitas (ILES).<\/p>\n<p>El repositorio Python-Shock-Tube lo demuestra claramente con el problema <strong>shu\u2013osher<\/strong>, un punto de referencia cl\u00e1sico donde un choque interact\u00faa con una onda de densidad. Vea la <a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\/blob\/main\/gallery\/Shu-Osher.png\">imagen de comparaci\u00f3n shu\u2013osher<\/a> del repositorio, que muestra que WENO de 5.\u00b0 orden resuelve las oscilaciones de alta frecuencia detr\u00e1s del choque mucho mejor que MUSCL-TVD.<\/p>\n<p>Para DNS e ILEs de interacciones de choque-capa l\u00edmite, como los casos de buffet trans\u00f3nico validados en OpenSBLI V3.0, Weno y su variante TENO de preservaci\u00f3n de borde (Eno objetivo) son el est\u00e1ndar actual. La generaci\u00f3n de c\u00f3digo automatizado de OpenSBLI produce c\u00f3digo C de producci\u00f3n a partir de formulaciones simb\u00f3licas de Python utilizando Weno\/Teno para la discretizaci\u00f3n compresible de Navier-Stokes.<\/p>\n<h2>Soludores de Python para flujo aeroespacial compresible<\/h2>\n<p>El panorama de los solucionadores de flujo compresible basados en Python ha madurado significativamente entre 2021 y 2025. Ahora hay cinco marcos disponibles para investigadores aeroespaciales, cada uno con arquitecturas distintas:<\/p>\n<h3>Pybaram: cuadr\u00edculas no estructuradas para golpes fuertes<\/h3>\n<p>Pybaram (publicado en SoftwareX, 2022) implementa m\u00e9todos de volumen finito en cuadr\u00edculas no estructuradas para geometr\u00edas aeroespaciales 2D y 3D. Maneja expl\u00edcitamente fuertes ondas de choque y expansi\u00f3n, dise\u00f1adas tanto para la ense\u00f1anza como para la investigaci\u00f3n con datos abiertos sobre Mendeley. Con m\u00e1s de 10 citas, Pybaram representa un punto de entrada accesible para los investigadores que necesitan soporte de red no estructurado sin la sobrecarga de paquetes m\u00e1s grandes.<\/p>\n<h3>OpenSBL V3.0 \u2014 Generaci\u00f3n de c\u00f3digo automatizada para DNS\/ILES<\/h3>\n<p>OpenSBLI representa un enfoque fundamentalmente diferente: en lugar de escribir el c\u00f3digo CFD compilado directamente, los usuarios escriben ecuaciones en notaci\u00f3n Einstein usando Python Symbolic Algebra (simpy), y el generador de c\u00f3digo de OpenSBLI produce un c\u00f3digo C optimizado a trav\u00e9s del OPS DSL. El framework apunta a cuadr\u00edculas estructuradas de varios bloques y admite backends de CPU (MPI\/OpenMP) y GPU (CUDA\/OpenCL).<\/p>\n<p>opensbli v3.0, publicado en Computadoras &amp; F\u00edsica (enero de 2025), apoya expl\u00edcitamente <strong>weno y teno shock-capture<\/strong> y ha sido validado en:<\/p>\n<ul>\n<li>Interacciones de capas l\u00edmite de choque en n\u00fameros de Mach hipers\u00f3nicos<\/li>\n<li>Buffet Transonic en los perfiles aerodin\u00e1micos de la NASA-CRM<\/li>\n<li>DNS de flujo hipers\u00f3nico sobre protuberancias gaussianas<\/li>\n<\/ul>\n<p>El pedigr\u00ed acad\u00e9mico del marco es fuerte: el equipo de Southampton\/Oxford (Lusher, Sandham) ha publicado m\u00e1s de 20 art\u00edculos sobre aplicaciones de OpenSBL. Si su investigaci\u00f3n involucra DNS\/ILE de alta fidelidad de flujos compresibles con interacciones de choque, la generaci\u00f3n de c\u00f3digo automatizada de OpenSBLI es la opci\u00f3n m\u00e1s madura.<\/p>\n<p><a href=\"https:\/\/github.com\/opensbli\/opensbli\/blob\/main\/readme_images\/instroduction.png\">diagrama de flujo de trabajo<\/a> ilustra c\u00f3mo son las ecuaciones simb\u00f3licas de Python Traducido al c\u00f3digo C optimizado a trav\u00e9s del OPS DSL.<\/p>\n<h3>JANC \u2014 Flujo compresible diferenciable en GPU<\/h3>\n<p>Janc (publicado en abril de 2025 por investigadores de la Universidad y colaboradores de Tsinghua) es posiblemente el solucionador de Python compresible m\u00e1s novedoso en los \u00faltimos a\u00f1os. Construido completamente sobre <strong>JAX-AMR<\/strong> (refinamiento de malla adaptativa estructurada en bloques basada en JAX), JANC es un solucionador totalmente diferenciable para flujos de reacci\u00f3n compresibles. Su pretensi\u00f3n de distinci\u00f3n:<\/p>\n<blockquote><p>En una sola GPU A100, JANC logra <strong>1% del costo computacional de OpenFOAM<\/strong> (usando 384 n\u00facleos de CPU). Con AMR habilitado, el costo cae al 1-2% de OpenFoam.<\/p><\/blockquote>\n<p>Esta no es una afirmaci\u00f3n de marketing, se verifica contra los casos de prueba informados. Apalancamiento de Janc:<\/p>\n<ul>\n<li>Diferenciaci\u00f3n autom\u00e1tica (no hay necesidad de derivar ecuaciones adjuntas manualmente)<\/li>\n<li>Compilaci\u00f3n XLA JIT (optimizaci\u00f3n de c\u00e1lculo de tensor de XLA)<\/li>\n<li>Refinamiento de malla adaptativa (resoluci\u00f3n autom\u00e1tica donde los gradientes son pronunciados)<\/li>\n<li>Paralelismo nativo de GPU\/TPU<\/li>\n<li>Licencias del MIT<\/li>\n<\/ul>\n<p>Para los investigadores que exploran <strong>diferenciable CFD<\/strong>, una tendencia creciente de optimizaci\u00f3n del dise\u00f1o, an\u00e1lisis de sensibilidad e integraci\u00f3n de ML, JANC es el primer solucionador de Python completamente diferenciable para reaccionar los flujos compresibles. El c\u00f3digo est\u00e1 disponible bajo una licencia MIT.<\/p>\n<h3>PygasFlow y SU2: c\u00e1lculos r\u00e1pidos y suites aeroespaciales completas<\/h3>\n<p><strong>Pygasflow<\/strong> (v1.4.1) es un paquete de Python ligero para la din\u00e1mica de gas ideal cuasi-1D. Implementa relaciones de choque normales y oblicuas, flujo isoentr\u00f3pico, flujo de Fanno y Rayleigh, y correlaciones de placa plana\/estancamiento aerotermodin\u00e1mica. Si bien no es un solucionador de CFD completo, es invaluable para c\u00e1lculos anal\u00edticos r\u00e1pidos: diagramas interactivos de deflexi\u00f3n de presi\u00f3n, controles de relaci\u00f3n de choque y barridos param\u00e9tricos r\u00e1pidos antes de comprometerse con una simulaci\u00f3n completa.<\/p>\n<p><strong>Su2<\/strong> sigue siendo el conjunto de CFD de c\u00f3digo abierto m\u00e1s citado para aplicaciones aeroespaciales. Sus capacidades supers\u00f3nicas\/comprimibles incluyen la cu\u00f1a supers\u00f3nica inviscida, el perfil aerodin\u00e1mico Transonic ONERAM6 y el flujo compresible no ideal en los tutoriales de boquillas supers\u00f3nicas. Con m\u00e1s de 4400 estrellas de GitHub, SU2 es la opci\u00f3n establecida para la producci\u00f3n de CFD aeroespacial, donde Python sirve principalmente como capa de script y automatizaci\u00f3n.<\/p>\n<h2>Casos de referencia y validaci\u00f3n<\/h2>\n<p>Cualquier implementaci\u00f3n de captura de choque necesita validaci\u00f3n contra casos de referencia est\u00e1ndar. Son fundamentales dos casos:<\/p>\n<h3>Tubo de choque de c\u00e9sped<\/h3>\n<p>El tubo de choque SOD es la prueba can\u00f3nica para los solucionadores de Riemann. Inicializa un tubo con un estado izquierdo de alta presi\u00f3n y un estado derecho de baja presi\u00f3n. En t = 0, el diafragma se rompe y se forma un choque, discontinuidad de contacto y forma de ventilador de expansi\u00f3n. El repositorio <strong>python-shock-tube<\/strong> proporciona este punto de referencia. Consulte la <a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\/blob\/main\/gallery\/SOD.png\">Comparaci\u00f3n de tubos de choque SOD<\/a> que muestra la resoluci\u00f3n de flujo en cuatro solucionadores (Godunov, ROE, HLL, HLLC) en 300 celdas con reconstrucci\u00f3n de orden 0.<\/p>\n<p>La imagen muestra la resoluci\u00f3n de flujo en cuatro solucionadores (Godunov, ROE, HLL, HLLC) en 300 celdas con reconstrucci\u00f3n de orden 0. HLLC (lax-Friedrichs linealizado h\u00edbrido con contacto) generalmente proporciona el mejor equilibrio: resuelve la discontinuidad de contacto mejor que HLL y es computacionalmente comparable a HLL. Esta es la raz\u00f3n por la que HLLC es la opci\u00f3n predeterminada en la implementaci\u00f3n WENO del repositorio Python-Shock-Tube.<\/p>\n<h3>Problema Shu-Osher<\/h3>\n<p>El problema Shu-Osher prueba qu\u00e9 tan bien un esquema maneja la interacci\u00f3n entre una onda de choque y una onda de densidad. La condici\u00f3n inicial es una funci\u00f3n de paso para la presi\u00f3n con una perturbaci\u00f3n de densidad sinusoidal detr\u00e1s del choque. Este caso revela c\u00f3mo los m\u00e9todos de reconstrucci\u00f3n resuelven las oscilaciones de alta frecuencia:<\/p>\n<ul>\n<li><strong>Reconstrucci\u00f3n de orden 0\u00b0<\/strong> (Godunov) sufre una disipaci\u00f3n num\u00e9rica excesiva en choques fuertes<\/li>\n<li><strong>MUSCL-TVD<\/strong> reduce la disipaci\u00f3n pero oscila detr\u00e1s del shock<\/li>\n<li><strong>weno de 5to orden<\/strong> Resuelve las oscilaciones de alta frecuencia con precisi\u00f3n<\/li>\n<\/ul>\n<p>Para simulaciones aeroespaciales de alta fidelidad, WENO es ahora la opci\u00f3n est\u00e1ndar.<\/p>\n<h2>Desaf\u00edos num\u00e9ricos exclusivos del flujo de alto mach<\/h2>\n<p>Varios desaf\u00edos num\u00e9ricos surgen espec\u00edficamente en un flujo compresible\/supersonic que no aparecen (o aparecen de manera diferente) en CFD incompresible:<\/p>\n<h3>Restricciones de CFL en n\u00fameros mach altos<\/h3>\n<p>La condici\u00f3n CFL (Courant-Friedrichs-Lewy) gobierna la estabilidad para la integraci\u00f3n del tiempo expl\u00edcita. Para el flujo compresible, el n\u00famero CFL depende de la suma de la velocidad del flujo y la velocidad del sonido:<\/p>\n<p>$$CFL = frac{u + A}{Delta X} Delta T$$<\/p>\n<p>En n\u00fameros de mach altos, $u approx m cdot a$, por lo que la condici\u00f3n de CFL se vuelve extremadamente restrictiva. Esto significa que se requieren <strong>peque\u00f1os pasos de tiempo<\/strong>, a menudo \u00f3rdenes de magnitud m\u00e1s peque\u00f1os que para flujos incompresibles. Los m\u00e9todos impl\u00edcitos de paso de tiempo o multigrid pueden mitigar esto, pero los esquemas expl\u00edcitos necesitan un control de paso de tiempo cuidadoso.<\/p>\n<h3>arreglo de entrop\u00eda<\/h3>\n<p>El esquema b\u00e1sico de ROE falla la condici\u00f3n de entrop\u00eda en choques fuertes: en lugar del aumento de entrop\u00eda f\u00edsicamente correcto a trav\u00e9s del choque, la soluci\u00f3n num\u00e9rica puede violar la termodin\u00e1mica. El arreglo de entrop\u00eda modifica los valores propios cerca de los choques para garantizar que el esquema num\u00e9rico respete la segunda ley de la termodin\u00e1mica. Sin \u00e9l, la soluci\u00f3n puede converger a un estado de entrop\u00eda equivocado: un choque que es demasiado fuerte o demasiado d\u00e9bil.<\/p>\n<h3>Fen\u00f3meno de carbunco<\/h3>\n<p>Como se mencion\u00f3 anteriormente, el fen\u00f3meno de Carbuncle es una inestabilidad num\u00e9rica espec\u00edfica del esquema ROE en redes no estructuradas. Cuando un choque fuerte se alinea mal con la red, el solucionador puede desarrollar un choque secundario que se ramifica del choque principal, f\u00edsicamente imposible y num\u00e9ricamente catastr\u00f3fico. El esquema de ROE estable a los golpes (combinaci\u00f3n de correcci\u00f3n de entrop\u00eda con solucionador de Riemann rotado) lo cura.<\/p>\n<h3>Interacci\u00f3n de la capa l\u00edmite-Shock<\/h3>\n<p>En las aplicaciones aeroespaciales, las ondas de choque que interact\u00faan con las capas l\u00edmite producen estructuras de flujo complejas: separaci\u00f3n de flujo, reincorporaci\u00f3n y buffet inestable. Resolver estos requiere:<\/p>\n<ul>\n<li>Resoluci\u00f3n fina de la capa l\u00edmite (a menudo DNS resuelto en la pared)<\/li>\n<li>Captura de golpes de alto orden (WENO\/Teno) para resolver el choque<\/li>\n<li>Resoluci\u00f3n temporal adecuada para fen\u00f3menos inestables<\/li>\n<\/ul>\n<p>Esta es la raz\u00f3n por la que la validaci\u00f3n de OpenSBLI V3.0 se centra en SBLI: es la f\u00edsica lo que m\u00e1s importa para el dise\u00f1o de veh\u00edculos trans\u00f3nicos e hipers\u00f3nicos.<\/p>\n<h2>\u00bfQu\u00e9 solucionador deber\u00edas elegir?<\/h2>\n<p>La elecci\u00f3n del solucionador de flujo compresible depende de los requisitos de la red, las necesidades de fidelidad y los recursos computacionales. Aqu\u00ed hay una comparaci\u00f3n:<\/p>\n<table>\n<thead>\n<tr>\n<th>solidista<\/th>\n<th>Tipo de cuadr\u00edcula<\/th>\n<th>captura de choque<\/th>\n<th>mejor para<\/th>\n<th>hardware<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>p\u00edbara<\/td>\n<td>desestructurado<\/td>\n<td>Volumen finito<\/td>\n<td>Ense\u00f1anza, Aeroespacial 2D\/3D, Golpes fuertes<\/td>\n<td>CPU paralelo<\/td>\n<\/tr>\n<tr>\n<td>AbiertosBLI<\/td>\n<td>Estructurado (multibloqueo)<\/td>\n<td>Weno\/Teno<\/td>\n<td>DNS\/ILES, SBLI, Tras\u00f3nico Buffet, Hipers\u00f3nico<\/td>\n<td>CPU\/GPU (CUDA\/OpenCL)<\/td>\n<\/tr>\n<tr>\n<td>enderezado<\/td>\n<td>Estructurado (Bloque AMR)<\/td>\n<td>Diferencia autom\u00e1tica de Jax<\/td>\n<td>CFD diferenciable, optimizaci\u00f3n adjunta, GPU<\/td>\n<td>GPU\/TPU (A100+)<\/td>\n<\/tr>\n<tr>\n<td>flujo de pigas<\/td>\n<td>N\/A (anal\u00edtica)<\/td>\n<td>N\/A<\/td>\n<td>Relaciones r\u00e1pidas de choque, Fanno\/Rayleigh, barridos param\u00e9tricos<\/td>\n<td>Cualquier<\/td>\n<\/tr>\n<tr>\n<td>su2<\/td>\n<td>Estructurado\/no estructurado<\/td>\n<td>ROE, AUSM, etc.<\/td>\n<td>Suite aeroespacial completa, CFD de producci\u00f3n, flujos N+1<\/td>\n<td>CPU\/MPI<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Recomendaci\u00f3n pr\u00e1ctica<\/strong>: Comience con PyGasFlow para comprender anal\u00edticamente las relaciones de choque y el flujo de Fanno\/Rayleigh. Luego use el repositorio Python-Shock-Tube para la pr\u00e1ctica de captura de golpes 1D (ROE, AUSM, Weno). Elija Pybaram si necesita cuadr\u00edculas no estructuradas para geometr\u00edas complejas 2D\/3D. Elija opensbli si su investigaci\u00f3n involucra DNS\/ILES con WENO\/TENO en cuadr\u00edculas estructuradas. Elija Janc si est\u00e1 explorando CFD diferenciable con GPU Acceleration y AMR.<\/p>\n<h2>Resumen y pr\u00f3ximos pasos<\/h2>\n<p>Este art\u00edculo cubri\u00f3 lo que hace que el flujo compresible\/supersonic sea diferente del flujo incompresible, los m\u00e9todos de captura de choque (ROE con Entropy Fix, AUSM, TVD, Weno\/Teno) que manejan discontinuidades, los solucionadores de Python disponibles para aplicaciones aeroespaciales (Pybaram, OpenSBL, JANC, PygasFlow, SU2) y casos de referencia para la validaci\u00f3n.<\/p>\n<p><strong>Para los investigadores que comienzan con el flujo compresible en Python<\/strong>: comience con PyGasFlow para realizar c\u00e1lculos anal\u00edticos r\u00e1pidos, practique m\u00e9todos de captura de choque con Python-Shock-Tube, luego elija Pybaram (no estructurado) o OpensBLI (estructurado) seg\u00fan los requisitos de su red. Para CFD diferenciable con aceleraci\u00f3n de GPU, JANC representa el estado actual del arte.<\/p>\n<p><strong>Si es nuevo en Python CFD<\/strong>, comience con nuestro <a href=\"https:\/\/matforge.org\/python-for-computational-cfd-primer-researchers\/\" target=\"_blank\" rel=\"nofollow noopener\">Comprensivo CFD Primer<\/a> cubriendo fipy, malla y el 12 Pasos a Navier-Stokes. Para los flujos dominados por la advecci\u00f3n donde es importante la resoluci\u00f3n de la malla, <a href=\"https:\/\/matforge.org\/anisotropic-mesh-adaptation-advection-dominated-flows\/\" target=\"_blank\" rel=\"nofollow noopener\">Adaptaci\u00f3n de malla anisotr\u00f3pica<\/a> puede complementar su esquema de captura de choque. Cuando necesite una mejor resoluci\u00f3n que el volumen finito de segundo orden, <a href=\"https:\/\/matforge.org\/high-order-numerical-methods-beyond-fdm-fem-fvm\/\" target=\"_blank\" rel=\"nofollow noopener\">M\u00e9todos espectrales y DG de orden alto<\/a> ofrecen alternativas.<\/p>\n<hr>\n<h3>lectura recomendada<\/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: un solucionador de flujo de reacci\u00f3n compresible diferenciable rentable<\/a> \u2014 Solucionador basado en JAX con AMR, 1\u20132% del costo de OpenFoam (abril 2025)<\/li>\n<li><a href=\"https:\/\/github.com\/opensbli\/opensbli\" target=\"_blank\" rel=\"nofollow noopener\">opensbli github<\/a> \u2014 Generaci\u00f3n de c\u00f3digo automatizada para compresible Navier\u2013Stokes con Captura de choque de WENO\/Teno<\/li>\n<li><a href=\"https:\/\/github.com\/chairmanmao256\/Python-shock-tube\" target=\"_blank\" rel=\"nofollow noopener\">Python-Shock-Tube<\/a> \u2014 Solucionador de ecuaciones de Euler 1D con implementaciones de Godunov, ROE, AUSM, HLLC, MUSCL-TVD y WENO<\/li>\n<li><a href=\"https:\/\/arxiv.org\/pdf\/2103.02794\" target=\"_blank\" rel=\"nofollow noopener\">Una introducci\u00f3n a la din\u00e1mica de fluidos y los m\u00e9todos de soluci\u00f3n num\u00e9rica<\/a> \u2014 secci\u00f3n 13.1: Implementaci\u00f3n de Python del esquema ROE con tubo de choque SOD<\/li>\n<li><a href=\"https:\/\/levelup.gitconnected.com\/create-your-own-riemann-solver-with-python-9e38d64ad2ec\" target=\"_blank\" rel=\"nofollow noopener\">Crea tu propio Solver Riemann<\/a> \u2014 Tutorial exacto de Riemann Solver de Philip Mocz para Ecuaciones de Euler<\/li>\n<li><a href=\"https:\/\/pygasflow.readthedocs.io\/en\/stable\/\" target=\"_blank\" rel=\"nofollow noopener\">Docs de PygasFlow<\/a> \u2014 cuasi-1D Din\u00e1mica de gas ideal, Relaciones de choque, Flujo de Fanno\/Rayleigh<\/li>\n<li><a href=\"https:\/\/su2code.github.io\/tutorials\/home\/\" target=\"_blank\" rel=\"nofollow noopener\">tutoriales su2<\/a> \u2014 cu\u00f1a supers\u00f3nica, oneram6 transonic, Boquilla NICFD<\/li>\n<\/ul>\n<p><!-- Fuente de contenido: Matforge SEO Content Pipeline Archivo de investigaci\u00f3n: Research\/SEO-Content\/Python-CFD-Aerospace-Supersonic-Shock.md Clasificaci\u00f3n de superposici\u00f3n: Nuevo \u00e1ngulo (distinto del Post 390) Decisi\u00f3n visual: Ninguno (Las im\u00e1genes de GitHub no estaban disponibles debido a la limitaci\u00f3n de la velocidad; vinculados a las im\u00e1genes del repositorio como referencias) Todos los enlaces externos usan 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>Cubre los Navier-Stokes compresibles, los m\u00e9todos de captura de golpes (ROE, Weno), los solucionadores de Python (Pybaram, OpenSBL, JANC) y los casos de referencia como el tubo de choque SOD.<\/p>\n","protected":false,"raw":"Cubre los Navier-Stokes compresibles, los m\u00e9todos de captura de golpes (ROE, Weno), los solucionadores de Python (Pybaram, OpenSBL, JANC) y los casos de referencia como el tubo de choque SOD."},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"es_ES","_original_post":"https:\/\/matforge.org\/?p=1074","iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1098","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","es-ES"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque - 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\/es\/python-cfd-aerospace-supersonic-shock-capturing\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  12 minutesCubre los Navier-Stokes compresibles, los m\u00e9todos de captura de golpes (ROE, Weno), los solucionadores de Python (Pybaram, OpenSBL, JANC) y los casos de referencia como el tubo de choque SOD.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-19T09:48:40+00:00\" \/>\n<meta name=\"author\" content=\"steven\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"steven\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\"},\"author\":{\"name\":\"steven\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"headline\":\"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque\",\"datePublished\":\"2026-08-19T09:48:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\"},\"wordCount\":3690,\"commentCount\":0,\"articleSection\":[\"Simulaci\u00f3n &amp; Proyectos de modelado\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\",\"name\":\"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-19T09:48:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/python-cfd-aerospace-supersonic-shock-capturing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque\"}]},{\"@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\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\",\"name\":\"steven\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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 para aeroespacial: flujo supers\u00f3nico y captura de choque - 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\/es\/python-cfd-aerospace-supersonic-shock-capturing\/","og_locale":"es_ES","og_type":"article","og_title":"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque - matforge.org","og_description":"Reading Time:  12 minutesCubre los Navier-Stokes compresibles, los m\u00e9todos de captura de golpes (ROE, Weno), los solucionadores de Python (Pybaram, OpenSBL, JANC) y los casos de referencia como el tubo de choque SOD.","og_url":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/","og_site_name":"matforge.org","article_published_time":"2026-08-19T09:48:40+00:00","author":"steven","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"steven","Tiempo de lectura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/"},"author":{"name":"steven","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"headline":"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque","datePublished":"2026-08-19T09:48:40+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/"},"wordCount":3690,"commentCount":0,"articleSection":["Simulaci\u00f3n &amp; Proyectos de modelado"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/","url":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/","name":"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-19T09:48:40+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"breadcrumb":{"@id":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/es\/python-cfd-aerospace-supersonic-shock-capturing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/es\/"},{"@type":"ListItem","position":2,"name":"Python CFD para aeroespacial: flujo supers\u00f3nico y captura de choque"}]},{"@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":"es"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03","name":"steven","image":{"@type":"ImageObject","inLanguage":"es","@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\/1098","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=1098"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1098\/revisions"}],"predecessor-version":[{"id":1158,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1098\/revisions\/1158"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}