불연속 Galerkin / Poisson / Fenics


10

불연속 Galerkin 방법 (DG)과 다음과 같은 이산화를 사용하여 2D 푸 아송 방정식을 풀려고합니다 (PNG 파일이 있지만 업로드 할 수 없습니다, 죄송합니다).

방정식 :

∇⋅(κ∇티)+에프=0

새로운 방정식 :

큐=κ∇티∇⋅큐=−에프

숫자에 약한 형태의 플럭스 T 및 Q를 :티^큐^

∫큐⋅승디V=−∫티∇⋅(κ승)디V+∫κ티^엔⋅승디에스∫큐⋅∇V디V=∫V에프디V+∫큐^⋅엔V디에스

수치 플럭스 (IP 법)

큐^={∇티}–씨11[티]티^={티}

와

{티}=0.5(티++티−)[티]=티+엔++티−엔−

방정식을 풀기 위해 간단한 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()

답변:


10

∑케이∈티h∫∂케이큐케이⋅엔케이ϕ케이디에스=∫Γ[큐]⋅{ϕ}디에스+∫Γ0{큐}⋅[ϕ]디에스

ΓΓ0

∑케이∈티h∫∂케이큐^⋅엔케이V케이디에스=∫Γ0큐^⋅[V]디에스+∫∂Ω큐^⋅엔V디에스∑케이∈티h∫∂케이승⋅엔케이κ티^디에스=∫Γ[승]⋅κ티^디에스

이로 인해 코드가 다음과 같이 수정됩니다.

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 Marini : 타원 문제에 대한 불연속 Galerkin 방법의 통합 분석 SIAM J. Num. 애널, 39 (2002), 1749-1779


네, 정말 뭔가 빠졌습니다.
— micdup

-2

네, 정말 뭔가 빠졌어요!

지금 잘 작동하고 있습니다.

도와 주셔서 감사합니다!


2
완벽을 기하기 위해 누락 된 내용과 해결 방법을 설명 할 수 있습니까?
— Paul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.