泊肃叶流

计算科学 流体动力学 芬尼克斯
2021-12-06 09:59:28

我可能有一个非常愚蠢的问题。我无法解决由压降驱动的直二维通道中的简单泊肃叶流。结果完全是胡说八道。(在流出物上设置零压力会产生微不足道的解决方案/没有流动。在流出物上施加非零压力(但仍然有一些压降)会产生从两端流入通道的溶液)。对不可压缩性的满足也很模糊。请你看看我的代码好吗?我不知道我做错了什么。

马立克

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()
2个回答

您的部分问题是您选择的边界条件。这篇论文(我写的)开发了在不可压缩的 Navier-Stokes 方程上施加压力边界条件的标准。简短的版本是,您需要将法向牵引力的法向分量施加在入口和出口上,使其成为您想要在每个表面上的压力,并迫使流动垂直于这些表面。第一个条件是通过自然边界条件实现的,如果表面是轴对齐且平坦的,则后者可以通过 Dirichlet 条件实现(否则您将不得不使用大朗日乘数、惩罚或约束)。

在典型的 Taylor-Hood FEM 公式中,您不应对压力施加 Dirichlet 条件。在我看来,您正在尝试使用这些元素(分段二次速度和分段线性压力),但我对我猜测的 FENIC 不是专家(所以我无法帮助您处理代码本身)。

如果您不按部分整合压力项并将变分问题编写如下,这实际上可以正常工作:

a = nu*inner(grad(u),grad(v))*dx + dot(grad(p), v)*dx + div(u)*q*dx

您还需要在流出边界的定义中写入实际数值(不是 L)。否则将不会使用您的变量 L。我很惊讶您没有收到 L 未定义的错误消息。