不連続ガラーキン/ポアソン/フェニックス


10

不連続ガラーキン法(DG)と次の離散化を使用して2Dポアソン方程式を解こうとしています(pngファイルがありますが、アップロードできません。申し訳ありません)。

方程式:

(κT)+f=0

新しい方程式:

q=κTq=f

数値フラックスおよび弱い形式:T^q^

qwdV=T(κw)dV+κT^nwdSqvdV=vfdV+q^nvdS

数値フラックス(IPメソッド):

q^={T}C11[T]T^={T}

{T}=0.5(T++T)[T]=T+n++Tn

方程式を解くための簡単なfenics pythonスクリプトを作成しました。私が得た解決策は良くありません。DGメソッドに詳しい誰かが以下のスクリプトをざっと見て、私が間違っていることを教えていただければ幸いです。

スクリプトに追加した連続的なガレルキン配合は、素晴らしい解決策を与えます。

よろしくお願いします。

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)al。2002は、弱い形式を書き換えるツールを提供します:

KThKqKnKϕKds=Γ[q]{ϕ}ds+Γ0{q}[ϕ]ds

ここで、はエッジの和集合であり、は境界なしで同じです。ΓΓ0

これで、フラックスは単一値になります。つまり、フラックスのジャンプをドロップできます。したがって、

KThKq^nKvKds=Γ0q^[v]ds+Ωq^nvdsKThKwnKκT^ds=Γ[w]κT^ds

これにより、コードが次のように変更されます。

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

実際に試す時間はありませんでしたので、サインエラーなどが発生する可能性があるので注意してください。

参考文献: DNアーノルド、F。ブレッツィ、B。コックバーン、LDマリーニ:楕円問題の不連続ガラーキン法の統一分析 SIAM J. Num。アナル、39(2002)、1749-1779


はい、私は本当に何かが欠けていました。
micdup 2013年

-2

はい、本当に何かが足りませんでした!

現在は正常に動作しています。

ご協力ありがとうございます!


2
完全を期すために、何が欠けていたか、どのように修正したかを説明してください。
ポール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.