Estoy tratando de resolver la ecuación de Poisson en 2D usando el método Discontinuous Galerkin (DG) y la siguiente discretización (tengo un archivo png pero no puedo cargarlo, lo siento):
Ecuación:
Nuevas ecuaciones:
Forma débil con los flujos numéricos T y Q :
Flujos numéricos (método
con
Escribí un sencillo script de Python para resolver la ecuación. La solución que obtengo no es buena. Realmente agradecería si alguien familiarizado con el método DG pudiera echar un vistazo rápido al script a continuación y decirme qué estoy haciendo mal.
La formulación continua de galerkin que agregué en el script brinda una buena solución.
Muchas gracias por adelantado.
from dolfin import *
method = "DG" # CG / DG
# Create mesh and define function space
mesh = UnitSquare(32, 32)
V_q = VectorFunctionSpace(mesh, method, 2)
V_T = FunctionSpace (mesh, method, 1)
W = V_q * V_T
# Define test and trial functions
(q, T) = TrialFunctions(W)
(w, v) = TestFunctions(W)
# Define mehs quantities: normal component, mesh size
n = FacetNormal(mesh)
# define right-hand side
f = Expression("500.0*exp(-(pow(x[0] - 0.5, 2) + pow(x[1] - 0.5, 2)) / 0.02)")
# Define parameters
kappa = 1.0
# Define variational problem
if method == 'CG':
a = dot(q,w)*dx \
+ T*div(kappa*w)*dx \
+ div(q)*v*dx
elif method == 'DG':
#modele = "IP"
C11 = 1.
a = dot(q,w)*dx + T*div(kappa*w)*dx \
- kappa*avg(T)*dot(n('-'),w('-'))*dS \
\
+ dot(q,grad(v))*dx \
- dot( avg(grad(T)) - C11 * jump(T,n) ,n('-'))*v('-')*dS
L = -v*f*dx
# Compute solution
qT = Function(W)
solve(a == L, qT)
# Project solution to piecewise linears
(q , T) = qT.split()
# Save solution to file
file = File("poisson.pvd")
file << T
# Plot solution
plot(T); plot(q)
interactive()