使用有限差分法求解二维泊松方程的免费开源 C/C++ 库

计算科学 有限差分 C
2021-12-17 17:49:57

我一直在用 C 语言编写一些代码来进行细胞内粒子模拟。PIC算法的步骤之一需要求解(数值)泊松方程

Δφ=4πρ.

最初我想将程序限制为 2d 情况(而不是 3d)并使用有限差分法(而不是有限元)。

令我惊讶的是,我找不到任何免费的开源 C 库来完成这项任务(即使用有限差分法求解 2d Poisson 方程)。我发现的唯一东西是 FISHPACK - FORTRAN77 例程的集合,是著名的 SLATEC 库的一部分。

我对 fortran 很好,但是从 C 调用 fortran 例程需要一些不必要的数组转换,并且“本机”C 解决方案似乎更方便。我犹豫使用 FISSHPACK 的另一个原因是它使用带有隐式类型声明的单精度浮点数。使用 gcc '-fdefault-real-8' 标志我能够将其转换为双精度,但我不确定在此之后一切是否仍然正常工作。

所以,我的问题是:是否有任何免费(如自由)C/C++ 库来使用有限差分法求解 2d Poisson 方程?由于我确实打算切换到 3d 和有限元,因此也欢迎为此目的提供有关 C 库的建议。

1个回答

有限差分二维泊松看起来是 PETSc 中的几个例子(KSP:ex29、ex32、ex50)。无论如何,为了增加灵活性,我可能会在 PETSc 中使用非线性求解器 (SNES) 或时间步进器 (TS)。通过有限差分的二维泊松可能是其他包中的一个例子(例如,可能是 Trilinos)。我知道这是使用 MPI 中给出的示例。

有许多免费的 C/C++ 库可以通过有限元求解 Poisson。您可以再次尝试 PETSc、deal.II、DUNE、FEniCS、Wikipedia 上此列表中的任何其他库,或(可能)Trilinos。使用 deal.II 或 FEniCS 之类的库,更改代码的维度看起来相对容易(即从 2-D 变为 3-D),因此您可以考虑编写 2-D 有限元代码来开始,然后将其转换为 3-D。