Skip to content
cfd-lab:~/es/posts/riemann-solvers● online

Traducción del original en coreano escrito por el autor. Leer el original (한국어)

NOTE #002DAY THU 유체역학DATE 2026.03.05UPDATED 2026.10.19READ 5 min read#Riemann-Solver#Godunov#Numerical-Methods

Del problema de Riemann al esquema de Godunov: la esencia del flujo numérico

Si la discontinuidad de contacto se descarta, HLL alcanza. Si se conserva, el flujo necesita la velocidad intermedia S* de HLLC.

El problema de Riemann: El corazón de CFD#

En el método de volúmenes finitos (FVM), la precisión y la estabilidad dependen del flujo numérico (numerical flux) en la cara de la celda. La clave es un problema de Riemann: dos estados constantes y un solo salto.

Al llevar el control de la razón de presiones desde cerca de 1 hasta 1000:1, las dos ondas exteriores pasan de rarefacción a choque.

x–t 다이어그램에서 좌·우로 가는 파(shock 또는 rarefaction)와 가운데 접촉 불연속이 보인다. p_L > p_R이 충분히 크면 양쪽 모두 shock이 된다.

El contacto del medio sigue ahí aunque la razón crezca. Las dos ondas exteriores son choques a la vez solo cuando la presión de la estrella p∗p^* queda por encima de la presión de cada lado.

¿Qué es el problema de Riemann?#

Es un problema de valor inicial donde las condiciones iniciales consisten en dos estados constantes separados por una única discontinuidad:

U(x,0)={ULif x<0URif x>0\mathbf{U}(x, 0) = \begin{cases} \mathbf{U}_L & \text{if } x < 0 \\ \mathbf{U}_R & \text{if } x > 0 \end{cases}

Para las ecuaciones de Euler en 1D, la solución analítica de este problema consta de tres ondas (waves):

  1. Onda hacia la izquierda (rarefacción o choque)
  2. Discontinuidad de contacto (contact discontinuity)
  3. Onda hacia la derecha (rarefacción o choque)

La idea de Godunov (1959)#

La visión fundamental de Godunov es simple pero poderosa:

Para obtener el flujo en el límite de una celda, se deben tomar los valores promedio de las dos celdas adyacentes como los estados izquierdo y derecho, y resolver el problema de Riemann.

Fórmula de actualización del Método de Volúmenes Finitos:

Uin+1=Uin−ΔtΔx(F^i+1/2−F^i−1/2)\mathbf{U}_i^{n+1} = \mathbf{U}_i^n - \frac{\Delta t}{\Delta x}\left(\hat{\mathbf{F}}_{i+1/2} - \hat{\mathbf{F}}_{i-1/2}\right)

Donde F^i+1/2\hat{\mathbf{F}}_{i+1/2} es precisamente el flujo numérico determinado a partir de la solución del problema de Riemann.

Exact Riemann Solver (Solucionador exacto)#

El solucionador exacto de Riemann encuentra la presión en la región central (star region), p∗p^*, utilizando el método iterativo de Newton-Raphson. Se aplican las relaciones de Rankine-Hugoniot o las relaciones isentrópicas dependiendo del tipo de onda (choque/rarefacción).

Relación para la onda de choque (Shock wave) (p∗>pKp^* > p_K, K=LK = L o RR):

fK(p∗)=(p∗−pK)[AKp∗+BK]1/2f_K(p^*) = (p^* - p_K)\left[\frac{A_K}{p^* + B_K}\right]^{1/2}

Donde AK=2(γ+1)ρKA_K = \frac{2}{(\gamma+1)\rho_K}, BK=γ−1γ+1pKB_K = \frac{\gamma-1}{\gamma+1}p_K.

Relación para la onda de rarefacción (Rarefaction wave) (p∗≤pKp^* \leq p_K):

fK(p∗)=2cKγ−1[(p∗pK)γ−12γ−1]f_K(p^*) = \frac{2c_K}{\gamma - 1}\left[\left(\frac{p^*}{p_K}\right)^{\frac{\gamma-1}{2\gamma}} - 1\right]

p∗p^* satisface la siguiente condición:

fL(p∗)+fR(p∗)+(uR−uL)=0f_L(p^*) + f_R(p^*) + (u_R - u_L) = 0

El corte es una sola comparación entre p∗p^* y pKp_K. Si p∗p^* queda por encima de pKp_K, ese lado es un choque. fKf_K es el salto de presión por [AK/(p∗+BK)]1/2[A_K/(p^*+B_K)]^{1/2}. Como AK=2/((γ+1)ρK)A_K=2/((\gamma+1)\rho_K), un fluido más denso cambia menos de velocidad ante el mismo salto. BK=(γ−1)pK/(γ+1)B_K=(\gamma-1)p_K/(\gamma+1) ensancha un poco el denominador por encima de p∗p^*. Si p∗p^* no supera a pKp_K, ese lado es una rarefacción. El factor 2cK/(γ−1)2c_K/(\gamma-1) crece con la velocidad del sonido y otra vez cuando γ\gamma se acerca a 1. El exponente de la razón de presiones es (γ−1)/(2γ)(\gamma-1)/(2\gamma). Si γ\gamma baja, el exponente baja y fKf_K depende menos de esa razón.

La suma de las dos ff más uR−uLu_R-u_L tiene que dar cero. Si uRu_R es menor que uLu_L, el fluido se acumula en el centro. Entonces fL+fRf_L+f_R es positiva y p∗p^* queda por encima de ambas presiones laterales. Las dos ondas exteriores son choques. El extremo 1000:1 del control es ese límite. El pKp_K del lado bajo queda bajo la presión de la estrella, así que esa fKf_K se queda en la rama de choque. El lado alto puede seguir en rarefacción, según la razón. Los dos lados son choques solo cuando la diferencia de velocidad que cierra sobre el contacto es bastante grande. Tratar una celda como su propio tubo de choque es el cálculo de el tubo de choque de Godunov dentro de una celda.

Approximate Riemann Solver: ¿Por qué es necesario?#

Los solucionadores exactos son costosos porque requieren cálculos iterativos. En la mayoría de los códigos CFD prácticos, se utilizan solucionadores de Riemann aproximados (approximate Riemann solvers).

Roe Solver (1981)#

Roe linealiza el problema de Riemann no lineal, convirtiéndolo en un problema de Riemann lineal para la matriz A^\hat{\mathbf{A}}:

F^i+1/2=12(FL+FR)−12∑k=13∣λ^k∣α^kr^k\hat{\mathbf{F}}_{i+1/2} = \frac{1}{2}(\mathbf{F}_L + \mathbf{F}_R) - \frac{1}{2}\sum_{k=1}^{3}|\hat{\lambda}_k|\hat{\alpha}_k\hat{\mathbf{r}}_k

Se construye A^\hat{\mathbf{A}} utilizando el promedio de Roe (Roe average):

u^=ρL uL+ρR uRρL+ρR,H^=ρL HL+ρR HRρL+ρR\hat{u} = \frac{\sqrt{\rho_L}\,u_L + \sqrt{\rho_R}\,u_R}{\sqrt{\rho_L} + \sqrt{\rho_R}}, \quad \hat{H} = \frac{\sqrt{\rho_L}\,H_L + \sqrt{\rho_R}\,H_R}{\sqrt{\rho_L} + \sqrt{\rho_R}}

Ventajas: Captura con precisión las discontinuidades de contacto. Desventajas: Puede violar las condiciones de entropía (requiere una corrección de entropía o "entropy fix").

HLLC Solver (Toro, 1994)#

HLLC es una mejora del solucionador HLL que restaura la discontinuidad de contacto (Contact). Estima tres velocidades de onda SLS_L, S∗S^*, SRS_R:

F^i+1/2={FLif SL>0FL∗if SL≤0<S∗FR∗if S∗≤0≤SRFRif SR<0\hat{\mathbf{F}}_{i+1/2} = \begin{cases} \mathbf{F}_L & \text{if } S_L > 0 \\ \mathbf{F}^*_L & \text{if } S_L \leq 0 < S^* \\ \mathbf{F}^*_R & \text{if } S^* \leq 0 \leq S_R \\ \mathbf{F}_R & \text{if } S_R < 0 \end{cases}

Flujo en la región central:

FK∗=FK+SK(UK∗−UK)\mathbf{F}^*_K = \mathbf{F}_K + S_K(\mathbf{U}^*_K - \mathbf{U}_K)

HLLC es sencillo de implementar y robusto, por lo que es el más utilizado en códigos de flujo multifásico compresible.

AUSM+ (Liou, 1996)#

La familia AUSM separa el flujo en términos convectivos (convective) y de presión (pressure):

F^i+1/2=m˙1/2Ψ1/2+p^1/2D\hat{\mathbf{F}}_{i+1/2} = \dot{m}_{1/2}\boldsymbol{\Psi}_{1/2} + \hat{p}_{1/2}\mathbf{D}

Donde m˙1/2\dot{m}_{1/2} es el flujo másico en el límite de la celda y Ψ\boldsymbol{\Psi} es la cantidad convectada. Es estable incluso en flujos de bajo Mach, lo que lo hace ideal para extenderlo a esquemas de todas las velocidades (all-speed schemes).

Extensión a flujos multifásicos#

En flujos multifásicos, dado que las EOS en ambos lados de la interfaz son diferentes, los solucionadores de Riemann deben generalizarse a versiones multi-material.

Enfoques representativos:

  • Ghost Fluid Method: Construye celdas fantasma (ghost cells) del fluido del lado opuesto cerca de la interfaz y resuelve problemas de Riemann de un solo material independientes en cada fase.
  • HLLC para multi-material: Determina p∗p^*, u∗u^* aplicando cada EOS a ambos lados de la región central.

El artículo siguiente compara las técnicas de captura de interfaz (VOF, Level Set, Diffuse Interface).

Separar la advección de la presión en un flujo multifásico sigue en la separación TV del flujo de Baer–Nunziato.

Comparte si te resultó útil.