Süreksiz Galerkin yöntemini (DG) ve aşağıdaki takdir yetkisini kullanarak 2D Poisson denklemini çözmeye çalışıyorum (bir png dosyası var, ancak yüklememe izin verilmiyor, üzgünüm):
Denklem:
Yeni denklemler:
ve sayısal akıları ile zayıf form :
Sayısal akışlar (IP yöntemi):
ile
Denklemi çözmek için basit bir fenik python betiği yazdım. Aldığım çözüm iyi değil. DG yöntemine aşina birisinin aşağıdaki senaryoya hızlı bir şekilde bakıp neyi yanlış yaptığımı söylemesi gerçekten çok memnun olur.
Senaryoya eklediğim sürekli galerkin formülasyonu güzel bir çözüm sunuyor.
Şimdiden çok teşekkürler.
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()