असंतृप्त गैलेर्किन / पॉइज़न / फेनिक्स


10

मैं डिसकसेंट गैलरकिन विधि (डीजी) और निम्नलिखित विवेक का उपयोग करके 2 डी पॉइसन समीकरण को हल करने की कोशिश कर रहा हूं (मेरे पास एक पीएनजी फ़ाइल है लेकिन मुझे इसे अपलोड करने की अनुमति नहीं है, माफ करना):

समीकरण:

(κटी)+=0

नए समीकरण:

क्ष=κटीक्ष=-

संख्यात्मक फ़्लक्स और साथ कमजोर रूप : क्षटी^क्ष^

क्षwवी=-टी(κw)वी+κटी^nwएसक्षvवी=vवी+क्ष^nvएस

संख्यात्मक फ़्लक्स (IP विधि):

क्ष^={टी}-सी1 1[टी]टी^={टी}

साथ

{टी}=0.5(टी++टी-)[टी]=टी+n++टी-n-

मैंने समीकरण को हल करने के लिए एक साधारण फेनिक्स पायथन स्क्रिप्ट लिखी। मुझे जो समाधान मिला वह अच्छा नहीं है। मैं वास्तव में सराहना करूंगा कि अगर कोई महानिदेशक विधि से परिचित हो, तो नीचे दी गई स्क्रिप्ट पर एक त्वरित नज़र रख सकता है और मुझे बता सकता है कि मैं क्या गलत कर रहा हूं।

स्क्रिप्ट में मैंने जो निरंतर गैलेरिकिन फॉर्मूलेशन जोड़ा, वह एक अच्छा समाधान देता है।

आपका अग्रिम रूप से बोहोत धन्यवाद।

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()

जवाबों:


10

FEniCS में अपनी समस्या को लागू करने के लिए, आपको किनारों के साथ इंटीग्रल्स द्वारा सीमाओं के संदर्भ में इंटीग्रल्स को बदलना होगा। यह परीक्षण कार्यों में कूद / औसत का परिचय देता है, जिसे आप अपने कार्यान्वयन में पूरी तरह से याद करते हैं। इसलिए, सिस्टम उलटा नहीं है और आपका समाधान सही नहीं दिखता है। अर्नोल्ड एट में समीकरण (3.3)। अल। 2002 आपको कमजोर रूप को फिर से लिखने के लिए एक उपकरण देता है:

Σटीक्षnφरों=Γ[क्ष]{φ}रों+Γ0{क्ष}[φ]रों

यहाँ आपके किनारों का मिलन है और बिना सीमाओं के समान है।ΓΓ0

अब आपके फ्लक्स एकल-मूल्यवान हैं, जिसका अर्थ है कि आप अपने फ़्लक्स की छलांग ड्रॉप कर सकते हैं। इसलिए

Σटीक्ष^nvरों=Γ0क्ष^[v]रों+Ωक्ष^nvरोंΣटीwnκटी^रों=Γ[w]κटी^रों

यह हमें आपके कोड के निम्नलिखित संशोधन की ओर ले जाता है:

C11 = 1.
qhat = avg(grad(T)) - C11 * kappa*jump(T,n)
qhatbnd = grad(T) - C11 * kappa*T*n

a = dot(q,w)*dx + T*div(kappa*w)*dx \
  - kappa*avg(T)*jump(w,n)*dS \
  - kappa*T*dot(w,n)*ds \
  - dot(q,grad(v))*dx \
  + dot( qhat, jump(v,n))*dS \
  + dot( qhatbnd, v*n)*ds

मेरे पास वास्तव में यह कोशिश करने के लिए अभी तक समय नहीं है, इसलिए संभावित संकेत-त्रुटियों आदि से अवगत रहें, लेकिन मुझे आशा है कि यह वैसे भी मदद करता है।

संदर्भ: डीएन अर्नोल्ड, एफ। ब्रेज़ी, बी कॉकबर्न, एलडी मारिनी: अण्डाकार समस्याओं के लिए असंपीड़ित गैलेर्किन विधियों का एकीकृत विश्लेषण SIAM J. Num। गुदा, 39 (2002), 1749-1779


हाँ मुझे सचमुच कुछ याद आ रहा था।
मिकडप

-2

हाँ मुझे सचमुच कुछ याद आ रहा था!

यह अब ठीक काम कर रहा है।

आपकी मदद के लिए बहुत बहुत धन्यवाद!


2
पूर्णता के लिए, क्या आप बता सकते हैं कि यह क्या था आप गायब थे और आपने इसे कैसे तय किया।
पॉल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.