FEniCS:网格边界法线和切线方向的分离边界条件

计算科学 边界条件 纳维斯托克斯 芬尼克斯
2021-12-14 14:44:11

给定向量值 PDE,我想强制执行边界条件

nu=gn(tu)=0
关于解决方案u. 如果边界恰好与坐标轴之一对齐,我可以使用

bcs = DirichletBC(V.sub(0), g, 'on_boundary')

作为狄利克雷条件。但是,对于其他几何形状该怎么办?

2个回答

您可以为此使用 Nitsche 类型的方法。请参阅以下参考:

J. Freund,R. 斯坦伯格。关于二阶问题的弱边界条件。第九届国际会议记录。会议。流体中的有限元,威尼斯 1995 年。M. Morandi Cecchi 等人,Eds。第 327-336 页。

不久前,我在一些简单的 FEniCS 代码中实现了这一点,以处理一般二维几何中的自由滑动边界。在此处查找演示代码和此处的网格(使用 FEniCS 1.3 测试)。

圆柱凸块:通过 Nitsche 方法的自由滑移边界条件

更新:同时,其他人也提供了类似的实现。例如,参见这个github 存储库

这可能引发的问题多于答案,但这是我认为应该做的。

让我们假设在边界点p,速度u定义为

u(p)=u1ϕk(p)+u2ϕk+1(p),

在哪里

ϕk=[ϕ0],ϕk+1=[0ϕ]
是对应 2D 中对应的节点基函数VectorFunctionSpace

n=[n1n2]andn=[n1n2]
是边界处的法向量和切向量p. 那么与TrialFunction正常v分量相对应的将是
ϕn=n1ϕ1+n2ϕ2
ϕt=n1ϕ1n2ϕ2
将对应于切向分量。

我不确定是否FEniCS允许重新定义TrialFunctionsorTestFunctions以及相应地调整DirichletBCs 的处理方式。

如果将组装的算子导出到矩阵,现在可以应用法线和切线边界条件p如下。

  1. k第 -th 列替换为n1乘以k-th n2-times k+1-st 列(这就像我们有ϕn在试验空间而不是ϕk)。

  2. k+1-st 列替换为n1乘以k-th n2-times k+1-st 列(这就像我们有ϕt在试验空间而不是ϕk+1)。

  3. 那么第k-th 自由度v_k可以固定为边界条件的法向分量或k+1-st ( v_{k+1}) 为切向分量。

  4. 如果对称性是一个问题,可以对矩阵的列执行相同的操作。

  5. 然后将实际坐标中的解建立为

    u(p)=vkn(p)+vk+1n(p).