J'essaie de résoudre l'équation de Poisson 2D en utilisant la méthode de Galerkin discontinu (DG) et la discrétisation suivante (j'ai un fichier png mais je ne suis pas autorisé à le télécharger, désolé):
Équation:
Nouvelles équations:
Forme faible avec flux numériques et : q
Flux numériques (méthode IP):
avec
J'ai écrit un simple script python fenics pour résoudre l'équation. La solution que j'obtiens n'est pas bonne. J'apprécierais vraiment que quelqu'un qui connaît la méthode DG puisse jeter un coup d'œil au script ci-dessous et me dire ce que je fais mal.
La formulation de galerkin continue que j'ai ajoutée dans le script donne une bonne solution.
Merci beaucoup d'avance.
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()
la source
Oui, il me manquait vraiment quelque chose!
Cela fonctionne bien maintenant.
Merci beaucoup pour votre aide!
la source