불연속 Galerkin 방법 (DG)과 다음과 같은 이산화를 사용하여 2D 푸 아송 방정식을 풀려고합니다 (PNG 파일이 있지만 업로드 할 수 없습니다, 죄송합니다).
방정식 :
새로운 방정식 :
숫자에 약한 형태의 플럭스 T 및 Q를 :
수치 플럭스 (IP 법)
와
방정식을 풀기 위해 간단한 fenics python 스크립트를 작성했습니다. 내가 얻는 해결책이 좋지 않습니다. DG 방법에 익숙한 사람이 아래 스크립트를 빠르게 살펴보고 내가 뭘 잘못하고 있는지 말해 주시면 정말 감사하겠습니다.
스크립트에 추가 한 연속 galerkin 공식은 훌륭한 솔루션을 제공합니다.
많은 감사드립니다.
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()