具有纯 Neumann 边界条件的离散 Poisson 方程

计算科学 有限差分 边界条件 离散化 泊松
2021-12-15 00:19:38

我正在尝试在 2D 中实现 Helmholtz-Hodge 分解,它指出矢量场由自由旋转分量、无发散分量和谐波分量组成。

这将我引向泊松方程:

{F=Δφ(J)F=Δψ

我正在尝试使用有限差分来解决它。

为了计算梯度,我使用:

(101)

对于dx.

(101)

对于dy.

对于Laplacian,我正在使用:

(0101+41010)

然后,例如,对于 2 x 2 输入,我将有一个如下形式的方程:

(F11F12F21F22) = (4.1.0.1.1.4.1.0.0.1.4.0.1.0.0.4) (φ11φ12φ21φ22)

解决F=Δφ

使用这种方法,我可以求解系统并获得矢量场分量。但是,我在边界处遇到问题

研究时,我读到了纯诺伊曼边界条件。但是,我不知道如何将它们包含在方程组中。我想知道该怎么做。

谢谢你。

3个回答

以前的评论给了你很好的建议,我试着补充一些。

首先,您的示例 2x2 确实不对应于零纽曼边界条件。事实上,可以证明您的选择导致了零狄利克雷边界条件。

如果您的域是一个矩形,则可以轻松实现零诺伊曼条件。您必须将边界处的值包含在未知数中(您可能已经这样做了)。对于矩形角落的四个节点,您必须在矩阵的相应行中将两个-1更改为-2,对于边界节点对应的所有其他行仅更改一个-1到-2,它必须完全是单位于矩形内部的条目,因此不在边界上。正如其他人之前所指出的,矩阵中每一行的所有条目的总和必须等于零,如果你做得正确,这是对你的另一次检查。

零纽曼边界条件的有限差分离散化背后的想法是,您想象在矩形的每一侧旁边有一行或一列节点,并带有额外的(人工)未知数。这意味着您可以使用标准模板,对角线为 4,非对角线为四倍 -1。可以通过添加对应于零诺依曼边界条件的离散方程来消除额外的未知数,例如xφ=0,采用离散形式(希望符号清晰),例如(φ1jφ1j)/dx=0, 所以人工未知数相等φ1j=φ1j. 将其代入未知数的离散方程φ0j你得到了我的建议。顺便说一句,这对应于您应该更喜欢的二阶精确近似值。

另一点是,对泊松方程应用零诺依曼边界条件会给你提供形式上无限多个解的欠定系统,但它们的区别仅在于常数(这意味着如果你减去两个解函数,你会得到常数函数)。一旦您将一个值固定为 0(如其他人所建议的那样),您就可以选择那些无限多的解决方案之一,这样您的问题就有了唯一的解决方案。就像您定义狄利克雷边界条件(例如φ=0) 在边界的一个点上。当然,这样的节点必须从你的未知数中排除,所以你的矩阵中没有这个节点的行。

有时你的线性求解器可以解决这个问题,但这是另一回事,上面的建议可能要简单得多。

纯 Neumann 边界条件给出了非唯一解。您将需要设置一些其他条件以使其独一无二。最简单的方法是在某处选择某个解值并将其设置为任何常数,我会选择一个角或中间并将其设置为 0。另一种常见的方法是应用零均值条件,即整个解的积分解为零。

对于边界处的节点(在您的 2x2 情况下恰好是每一行),您的差异模具是错误的。看到这一点的一个简单方法是意识到如果将拉普拉斯运算符应用于常量函数,结果为零。同样,如果您将拉普拉斯矩阵应用于所有分量都具有相同值的向量(常数函数的离散化版本),那么您需要获得零向量。这意味着每行中元素的总和必须为零 - 这是您在内部节点处使用的 5 点模板,但它不是您写下来的方式。您只需要在对应于边界节点的那些行中做一些不同的事情。