间断的Galerkin / Poisson / Fenics


10

我正在尝试使用Discontinuous Galerkin方法(DG)和以下离散化方法求解二维Poisson方程(抱歉,我有一个png文件,但不允许上传):

方程:

(κT)+f=0

新的方程:

q=κTq=f

弱形式与数值通量ŤqT^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方法的人可以快速浏览下面的脚本并告诉我我在做什么错,我将不胜感激。

我在脚本中添加的连续galerkin公式提供了一个不错的解决方案。

非常感谢。

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

Answers:


10

要在FEniCS中实现您的问题,您必须将边界上的积分替换为边上的积分。这会在测试功能中引入跳跃/平均值,而您在实现过程中会完全错过这些跳跃/平均值。因此,系统不可逆,您的解决方案看起来也不正确。Arnold等人的公式(3.3)。等 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 Arnold,F。Brezzi,B。Cockburn,LD马里尼:椭圆形问题的间断Galerkin方法的统一分析。肛门,39(2002),1749-1779


是的,我真的很想念东西。
micdup

-2

是的,我真的很想念东西!

现在工作正常。

非常感谢您的帮助!


2
为了完整起见,请您描述一下丢失的内容以及解决方法。
保罗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.