मैं डिसकसेंट गैलरकिन विधि (डीजी) और निम्नलिखित विवेक का उपयोग करके 2 डी पॉइसन समीकरण को हल करने की कोशिश कर रहा हूं (मेरे पास एक पीएनजी फ़ाइल है लेकिन मुझे इसे अपलोड करने की अनुमति नहीं है, माफ करना):
समीकरण:
नए समीकरण:
संख्यात्मक फ़्लक्स और साथ कमजोर रूप : क्ष
संख्यात्मक फ़्लक्स (IP विधि):
साथ
मैंने समीकरण को हल करने के लिए एक साधारण फेनिक्स पायथन स्क्रिप्ट लिखी। मुझे जो समाधान मिला वह अच्छा नहीं है। मैं वास्तव में सराहना करूंगा कि अगर कोई महानिदेशक विधि से परिचित हो, तो नीचे दी गई स्क्रिप्ट पर एक त्वरित नज़र रख सकता है और मुझे बता सकता है कि मैं क्या गलत कर रहा हूं।
स्क्रिप्ट में मैंने जो निरंतर गैलेरिकिन फॉर्मूलेशन जोड़ा, वह एक अच्छा समाधान देता है।
आपका अग्रिम रूप से बोहोत धन्यवाद।
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()