用 Neumann 边界条件求解泊松方程 - 有限差分,BiCGSTAB

计算科学 有限差分 边界条件 泊松 共轭梯度
2021-11-28 03:11:16

我正在尝试使用具有矩形网格的有限差分方案在矩形域中求解泊松方程。

我很高兴地生成了需要求解的方程 Ax = b 的矩阵系统,但是当我尝试施加零梯度的 Neumann 边界条件(使用幽灵单元)时,我遇到了问题,我相信因为矩阵是奇异的.

我知道关于这个主题有几个类似的线程:Discrete Poisson Equation with Pure Neumann Boundary ConditionsWrite the Poisson equation limited-difference matrix with Neumann boundary conditionsSolving a linear equation system with pure Neumann condition but I can't find how to fix我的问题。有人建议我应该在边界上的某个点施加狄利克雷条件,但是当我尝试这个时,我在这一点上得到了一个尖峰。

我正在使用 Gauss-Seidel 程序来求解系统,并且在每次迭代中,我都会将解决方案重新设置为平均值为 0。但是,由于这非常慢,我转而使用 Bicongugate Gradient Stabilized Method,这非常更快。但是,我看不到在这种情况下做类似事情的方法,所以欢迎任何帮助或建议。

我认为可能是这种情况的一个原因是我使用的测试问题可能是非物理的。对于我有 b 是正弦强迫的情况,在域上平均为零(-2 pi^2 cos(pi x)cos(pi y) from 0-1 in x and y),将一个角设置为狄利克雷条件似乎工作正常。但是,对于域中心的点源,在一个角落设置 Dirichlet 条件会导致那里出现尖峰。在我的头脑/物理推理中,具有诺伊曼条件的域中心的点源将继续“推动”,并且解决方案将随着不断增长的任意常数浮动到无穷大并且无法锚定。所以有某种条件说我需要 b 在我的封闭域上的零净强制必须为零,即跨域的源项的积分必须为零。

如果有帮助,它的应用是在流体动力学压力校正方案中求解压力的泊松方程。在这里,我不能保证 b 的平均值为零,尽管它应该很接近。

我很乐意根据需要提供更多信息。

1个回答

处理奇异问题的标准方法之一,例如使用 Neumann 边界条件导致奇异问题的泊松问题,如果您使用类似Krylov 子空间方法。Ax=b

例如,您可以使用共轭梯度 (CG) 求解您的系统,然后使该解决方案与内核正交,即从您的解决方案中减去平均值。但在求解线性系统之前,请确保您的右侧向量也与内核正交(再次减去其值的平均值),这是奇异系统的兼容条件。

众所周知,具有 1 点 Dirichlet 条件的方法很糟糕,因为您破坏了潜在的边界值问题(这是奇异的,但很好),通常应该避免这种方式。