使用 Fenics 同时求解两个 PDE两个向量

问题描述

我是 fenics 和 python 环境的初学者。请不要用力打我:)

我正在尝试同时求解具有两个速度的两个 PDE。在 fenics-tutorials 中已经存在类似的问题,但感兴趣的变量是标量(而不是向量)。所以我尝试为 VectorFunctionSpace 更改 MixedElement - 不幸的是它不起作用。

错误:NotImplementedError:无法获取非向量表达式的长度。

当我使用 FunctionSpace 而不是 VectorFunctionSpace 时,它​​不会将我的变量识别为向量而不是标量。这会导致 BoundaryCondition 和 DotProduct 出现问题。

# ----- minimal workspace -------
from mshr import *
from fenics import *

#Geometry mesh
mesh = RectangleMesh(Point(0.0,0.0),Point(2.2,0.41),21,21)

#discr. Elements
P1              = FiniteElement('P',triangle,1)
V1              = FiniteElement('P',2)
TH              = MixedElement([V1,P1])
V               = VectorFunctionSpace(mesh,TH,2)

# set Variable,split and Testfunc
v1,v2          = TestFunction(V)
u               = Function(V)
u_n             = Function(V)
u1,u2          = split(u)
u1_n,u2_n      = split(u_n)

# set BC - no Slip
walls           = 'near(x[1],0) || near(x[1],0.41)'
inflow          = 'near(x[0],0)'
inflow_profile  = ('4.0*1.5*x[1]*(0.41 - x[1]) / pow(0.41,2)','0')
bcu_inflow      = DirichletBC(V.sub(1).collapse(),Expression(inflow_profile,degree=2),inflow)
bcu_walls       = DirichletBC(V.sub(1).collapse(),Constant((0,0)),walls)
bcu             = [bcu_inflow,bcu_walls]

#coupled PDE
F1      = dot( (u1 - u1_n)/k,v1)*dx  \
    + dot( dot( u1_n,nabla_grad(u1) ),v1)*dx \
    + dot( u1 - u2,v1)*dx\
    + dot( (u2 - u2_n)/k,v1)*dx  \
    + dot( dot( u2_n,nabla_grad(u2) ),v2)*dx \
    + dot( u2 - u1,v2)*dx

# loop for calculating
t = 0
for n in range(num_steps):
    solve(F1 == 0,u,bcu)

感谢您对本主题的任何帮助和讨论。我也希望这个最小的工作空间足以理解我的问题。

干杯和新年快乐 - 在 PDE 中迎接新的挑战!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)