一千萬個為什麽

搜索

Poiseuille流動


我可能有一個非常愚蠢的問題。我無法解決由壓降驅動的直線2-D通道中的簡單Poiseuille流量。結果完全是胡說八道。 (在流出物上設置零壓力會產生微不足道的溶液/無流量。對流出的壓力非零(但仍然有一些壓降)會使溶液從兩端流入通道)。同樣滿足不可壓縮性是非常模糊的。請你看看我的代碼嗎?我不知道我做錯了什麽。

馬雷克

from dolfin import *
mesh = Mesh("P.xml")

V = VectorFunctionSpace(mesh,"CG",2)
Q = FunctionSpace(mesh,"CG",1)
W = V*Q

w = Function(W)

nu = 100
L = 20

noslip = DirichletBC(W.sub(0),(0,0),"on_boundary && (x[1] > 4.0 - DOLFIN_EPS | x[1] < DOLFIN_EPS)")
inflow = DirichletBC(W.sub(1),10,"on_boundary && x[0] < DOLFIN_EPS")
outflow = DirichletBC(W.sub(1),2,"on_boundary && x[0] > L - DOLFIN_EPS")

bcs = [noslip,inflow,outflow]

(u,p) = TrialFunctions(W)
(v,q) = TestFunctions(W)

f = Constant((0,0))
a = nu*inner(grad(u),grad(v))*dx + p*div(v)*dx + div(u)*q*dx
L = inner(f,v)*dx

problem = LinearVariationalProblem(a,L,w,bcs=bcs)
solver = LinearVariationalSolver(problem)
solver.solve()
(u,p) = split(w)

plot(p)
plot(div(u))
plot(u)
interactive()

最佳答案

您的部分問題是您選擇的邊界條件。 本文(我寫的)制定了對不可壓縮Navier施加壓力邊界條件的標準-Stokes方程式。簡短的版本是,您需要將入口和出口處的正常牽引力的正常分量施加到您想要的每個表面上的壓力,並且還迫使流動垂直於這些表面。第一個條件是通過自然邊界條件實現的,而後者可以通過Dirichlet條件完成,如果表面是軸對齊和平坦的(否則你將不得不使用Largrange乘數,懲罰或約束)。

在典型的泰勒 - 胡德有限元公式中,您不應對壓力施加Dirichlet條件。它看起來像你在嘗試使用這些元素(分段二次速度和分段線性壓力),但我不是我猜的是FENIC的專家(所以我無法幫助你解決代碼本身)。

轉載註明原文: Poiseuille流動

猜你喜歡