Método de Galerkin Discontinuo (DGM): Discretización de alta precisión para el análisis de flujos compresibles en mallas no estructuradas
Resumen paso a paso desde la derivación de la forma débil de DGM hasta la cuadratura de Gauss y la implementación en mallas no estructuradas.
El Método de Galerkin Discontinuo (Discontinuous Galerkin Method, DGM) es una técnica de análisis numérico que combina las ventajas del Método de Elementos Finitos (FEM) y el Método de Volúmenes Finitos (FVM). Utiliza funciones de base polinómicas de alto orden dentro de cada celda e intercambia información en los límites de la celda mediante flujos numéricos. Es una opción poderosa para el análisis de alta precisión de flujos compresibles en mallas no estructuradas.
Ecuación de Gobierno y Separación de Flujos#
Ecuación de conservación para flujo compresible:
Donde:
- : Vector de variables conservativas
- : Flujo convectivo (convective)
- : Flujo viscoso (viscous)
- : Término fuente
Expansión de Funciones de Base y Derivación de la Forma Débil#
Dentro de la celda , la solución se aproxima como una combinación lineal de funciones de base:
es el número de grados de libertad dentro de la celda, determinado por el grado del polinomio de aproximación ( en 3D).
Multiplicando por una función de prueba e integrando sobre :
Al aplicar la fórmula de Green (integración por partes), se divide en integral de volumen e integral de superficie (contorno):
en el contorno es el flujo numérico calculado utilizando información de las celdas adyacentes (por ejemplo, Roe, HLLC, etc.).
Matriz de Masa e Integración Temporal#
Organizando como una Ecuación Diferencial Ordinaria (ODE) para el -ésimo coeficiente de la función de base:
Donde la matriz de masa (mass matrix) es:
Si se utilizan funciones de base ortogonales (como la base de Taylor o los polinomios de Legendre), se convierte en una matriz diagonal, eliminando el costo de calcular la matriz inversa. El vector residual es la suma del término de integral de volumen y el término de flujo de superficie:
Aplicación de la Cuadratura de Gauss#
Las integrales de volumen y superficie se calculan numéricamente mediante la cuadratura de Gauss-Legendre. Para integrar con precisión un polinomio de grado , se requiere una integración de al menos orden .
Número de puntos de Gauss por tipo de celda (por grados representativos):
| Tipo de celda | 1er orden | 2do orden | 3er orden |
|---|---|---|---|
| Tetraedro | 1 | 4 | 10 |
| Hexaedro | 1 | 8 | 27 |
| Prisma | 3 | 9 | 18 |
| Pirámide | 1 | 5 | 15 |
Para los tipos de cara (face), se utiliza el triple de los puntos de la celda (proyección 3D).
Secuencia de Implementación del Algoritmo#
En la implementación real, se procede en el siguiente orden:
- Clasificación de celdas y caras: Tetra/Hexa/Prisma/Pirámide/Poliedro.
- Preparación de funciones de base: Calcular adecuadas para cada tipo de celda × grado de aproximación.
- Caché de puntos de Gauss: Almacenar las coordenadas y pesos del elemento de referencia (reference element) en la memoria.
- Inicialización de variables: Establecer (condiciones de flujo libre, etc.).
- Bucle (avance temporal):
- Integral de volumen: — Calcular y sumar flujos en cada punto de Gauss.
- Flujo de superficie: — Calcular el flujo numérico.
- Actualización RK: Integración temporal explícita como SSP-RK3.
import numpy as np
def compute_volume_residual(U_hat, phi, dphi, gauss_w, flux_func):
"""Cálculo del residual de volumen (celda individual)"""
Np, Ng = phi.shape # (número de funciones de base, número de puntos de Gauss)
R = np.zeros_like(U_hat)
for g in range(Ng):
# Reconstrucción de magnitudes físicas en el punto de Gauss
U_g = phi[:, g] @ U_hat # shape: (nvar,)
F_g = flux_func(U_g) # (nvar, ndim)
# Contribución al residual de volumen
for k in range(Np):
R[k] += gauss_w[g] * (dphi[k, :, g] @ F_g.T)
return RSelección del Flujo Numérico — Advertencias Prácticas#
En DGM, el flujo numérico está directamente relacionado con la estabilidad y la precisión.
- Flujo de Roe: Captura bien las discontinuidades de contacto, pero puede provocar choques de expansión (expansion shock) si no hay corrección de entropía.
- HLLC: Más estable que Roe, pero en casos raros puede ocurrir una disipación excesiva.
- LxF (Lax-Friedrichs): Implementación simple, pero la disipación es grande, lo que reduce la ganancia de alto orden.
Errores comunes:
- Puntos de Gauss insuficientes: En flujos no lineales, se producen errores de aliasing que reducen el orden.
- Ignorar la diagonalización de la matriz de masa: Si se utilizan funciones de base de FEM comunes, se requiere resolver un sistema lineal en cada paso, lo cual es ineficiente.
- Inconsistencia en la dirección normal de la cara: Verificar siempre que el signo de la normal de la celda adyacente sea opuesto en la cara compartida.
Verificación de Precisión — Vórtice de Taylor-Green#
Al comparar la solución analítica incompresible con los resultados de DGM, el DGM de orden debería mostrar teóricamente una convergencia de . En la práctica, si el error no disminuye veces cuando la malla se refina al doble, revise el orden de cuadratura o el tratamiento de contorno.
Referencias#
- Luo, H. et al., "A discontinuous Galerkin method based on a Taylor basis for the compressible flows on arbitrary grids," J. Comput. Phys. 227 (2008).
- Luo, H. et al., "Hybrid discontinuous Galerkin–finite volume techniques for compressible flows on unstructured meshes," AIAA Paper (2012).
Cambia p y el número de elementos para ver los saltos y la convergencia DG.
DG는 각 요소 안에서만 다항식 — 요소 경계에 점프가 보인다. p=3까지 올리면 부드러운 함수는 거의 일치, step은 Gibbs 진동이 나타난다.
Comparte si te resultó útil.