我在有限元设置中使用牛顿法求解非线性时间相关方程组,即首先我为当前时间创建雅可比矩阵,然后尝试求解系统(使用 GMRES 求解器,使用 AMG 方法进行预处理)以获取解决方案更新。重复此过程,直到残差不再变小,然后将时间增加一个时间步长。对于每个时间步,记录必要的 GMRES 迭代。
现在我注意到,最初 GMRES 迭代在每个时间步保持 50 次迭代不变,但在一段时间后(取决于输入参数)它们突然增加到 75-100 次迭代,并且在下一个时间步求解器无法收敛完全没有(即使在 >10000 次迭代之后)。
这里给出了几个建议:为什么我的迭代线性求解器不收敛?,但实施这些建议需要一些时间,因此,如果已经有一些基于我可以使用的行为的提示给我一个初步的想法,那将减少查找错误所需的时间。
此外,在我目前使用 > 40kk 个元素之后,使用直接求解器是不可能的(这对于可用内存来说太大了)。为了在不引入振荡的情况下正确计算方程,我不能减少元素的数量。
关于评论:
- 我正在使用 Crank-Nicholson 方法离散化我的时间步,以避免不稳定
- 我的系统由三个耦合的非线性热方程类方程组成,它们在求解过程中是强耦合的
- 我正在使用固定的时间步长和固定的网格密度
- 我的系统有大约 40e6 个自由度。通常(对于较小的系统)我允许求解器使用尽可能多的迭代,因为我有自由度,但在这里我想研究系统的行为,因此我减少了允许的迭代量。此外,约 50 次迭代需要约 50 秒,因此允许 40e6 次迭代将完全停止求解程序。
- 目前我正在使用 28 个 krylov 向量(求解器的默认设置),但可以更改它。如果有关于我应该使用的尺寸的建议,我可以实现它,虽然
- 预处理从左边开始