Saya mencoba menyelesaikan persamaan 2D Poisson menggunakan metode Discontinuous Galerkin (DG) dan diskritisasi berikut (saya punya file png tapi saya tidak diizinkan mengunggahnya, maaf):
Persamaan:
Persamaan baru:
Bentuk lemah dengan numerik fluks T dan q :
Fluks numerik (metode IP):
dengan
Saya menulis skrip python fenics sederhana untuk menyelesaikan persamaan. Solusi yang saya dapatkan tidak baik. Saya akan sangat menghargai jika seseorang yang akrab dengan metode DG bisa melihat skrip di bawah ini dan memberi tahu saya apa yang saya lakukan salah.
Formulasi galerkin terus menerus yang saya tambahkan dalam skrip memberikan solusi yang bagus.
Terima kasih banyak sebelumnya.
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()
sumber
Ya saya benar-benar kehilangan sesuatu!
Sekarang berfungsi dengan baik.
Terima kasih banyak atas bantuannya!
sumber