具有病态稀疏矩阵的 Poisson-Nernst-Planck 方程

计算科学 稀疏矩阵 泊松 牛顿法 雅可比
2021-12-12 17:52:19

我正在尝试使用有限体积法解决离子扩散问题的 Poisson-Nernst-Planck 方程组。质量传输的能斯特-普朗克方程和静电荷分布的泊松方程。

其中 c 是浓度,t,时间,D,扩散系数,β = 常数,z,价数,psi 是电场,ε 是介质介电常数,F 是法拉第常数

我的 jacobian 稀疏且病态(条件编号 ~ 1E+14)。对于 4 个离子和三个控制体积的系统,雅可比示意图如下所示:

前四行质量和第五行电位

我使用 Newton-Raphson 方法来解决它。时间步长不超过 1E-7 秒,最终它不会收敛并崩溃。同时,当我暂停运行并检查结果时,它们不正确。
我发现的一种解决方案是假设)。在这种情况下,条件数变为 ~1E+12,尽管在 ~2000 个时间步之后条件数会跳转到 1E+30。但是代码的时间步长更大(最多 1E-3 秒),结果似乎正确但不是很精确。我需要加快代码速度,因为这个时间步不切实际。ϵ/F=0ϵ/F1E14

  1. 您认为使用直接求解器是一种选择吗?
  2. 你认为更高质量的电势初始猜测会有所帮助吗?
  3. 使用四精度求解器有用吗?
  4. 雅可比大会是否可能不正确?

非常感谢

2个回答

在过去的几个月里,我一直在研究类似的问题。假设均匀的稳态离子浓度,我暂时只求解稳态电位方程。

缩放你的方程将是一个基本的预处理器。我发现我使用代数多重网格 (AMG) 进行预处理得到了很好的结果,因为我的问题简化为耦合反应扩散方程(即,具有非线性源项的泊松问题)。您可以尝试不完整的 LU (ILU) 来启动,因为它是一个强大的、较慢的预调节器,如果可行,请尝试其他预调节器,如 AMG。

使用直接求解器可能会有所帮助,但这实际上取决于问题的大小。即使是稀疏的 LU 分解也会因为填充足够大的问题而耗尽可用内存(该点发生在 100,000-1,000,000 个变量附近的某个地方)。如果您的雅可比矩阵是秩不足的(正如我的问题中的情况,由于某些单元中的非导电填充材料),那么直接方法也会有问题。

非线性求解器的单个更高质量的猜测将无济于事。您的问题是暂时的,因此您需要对每个时间步进行猜测,如果您使用的是隐式方法(鉴于这是一个扩散问题,您可能应该这样做,除非您希望您的时间步受到严格限制扩散稳定性极限)。已建立的实现数值积分方法(即时间步进器)的库可以很好地为每个时间步构建初始猜测,如果猜测不是很好(它们通常来自与问题无关的启发式算法),时间将减少步骤以保持准确性。

如果您的问题无法进行预处理,四倍精度可能会有所帮助。我知道使用四精度的库并不多。PETSc 可以,但我相信如果您使用四倍精度进行配置,您将仅限于 PETSc 原生求解器和预处理器。

这是可能的。出于调试目的,您应该针对有限差分近似测试您组装的雅可比行列式。如果您在实际模拟中使用有限差分近似,您的问题中有效数字的数量将大致减半,这可能会严重削弱您的准确性,因为您的问题是病态的;也就是说,您似乎没有在模拟中使用该近似值。

如果您将系统编写为单个矩阵,则可能需要缩放这两个方程,以使它们具有大致相同的数量级。与其详细描述要做什么以及为什么要做,让我简单地链接到一个我们这样做的例子:http ://dealii.org/developer/doxygen/deal.II/step_32.html#Thescalingofdiscretizedequations