Tôi đang cố gắng giải phương trình Poisson 2D bằng phương pháp Galerkin không liên tục (DG) và sự rời rạc sau đây (tôi có tệp png nhưng tôi không được phép tải lên, xin lỗi):
Phương trình:
Phương trình mới:
Dạng yếu với thông lượng số và : q
Thông lượng số (phương thức IP):
với
Tôi đã viết một kịch bản python fenics đơn giản để giải phương trình. Giải pháp tôi nhận được là không tốt. Tôi thực sự đánh giá cao nếu ai đó quen thuộc với phương pháp DG có thể xem nhanh kịch bản dưới đây và cho tôi biết tôi đang làm gì sai.
Công thức galerkin liên tục mà tôi đã thêm trong kịch bản cho một giải pháp tốt đẹp.
Cảm ơn rất nhiều trước.
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()