前处理 — CAE用语解说
前处理(Preconditioner)
老师,我看FEM的计算日志时看到了"preconditioner"这个词。这和CAE的前处理(预处理)不是一样的吗?
这是个好问题。虽然名字容易混淆,但两者完全不同。网格生成等前处理(preprocessing)是为求解器准备输入数据的工程。而前处理(preconditioner)是在求解线性方程组 $\mathbf{Ax}=\mathbf{b}$ 时,加速迭代法收敛的数学变换技巧。
为什么需要前处理(preconditioner)?
如果矩阵A的条件数很大,CG法或GMRES等迭代法的收敛会非常缓慢。使用前处理矩阵M将方程变换为 $\mathbf{M}^{-1}\mathbf{A}\mathbf{x} = \mathbf{M}^{-1}\mathbf{b}$ ,条件数会大幅改善,迭代次数急剧减少。在实际应用中,有无前处理的计算时间差异有时超过10倍。
前处理矩阵M应该怎样选择? 好像有很多种类。
应该选ILU还是AMG?
取决于问题规模。对于数十万自由度的问题,ILU通常就足够了。但当超过1000万自由度时,ILU的迭代次数会过多,AMG会显著更快。AMG相对于问题规模的扩展性几乎是线性的,这是它的优势。
并行计算时效果怎样?
雅可比完全可并行,但效果较弱。ILU本质上是串行处理,并行性不高。AMG具有中等并行性。基于区域分割法(DDM)的前处理在并行中最优,在数千核以上的HPC环境中成为主流。
前处理的选择对计算效率影响这么大,之前真没想到。不能盲目相信求解器的默认设置呀。
这种认识很重要。很多人收敛缓慢时都以为是"网格不好",但只改变前处理就能大幅改善的例子不在少数。养成经常检查计算日志中迭代次数的习惯很有帮助。
对CAE用语的准确理解是团队沟通的基础。 — Project NovaSolver也致力于对实务人员的学习支持。
与实务者携手思考CAE的未来
Project NovaSolver直面前处理的实际课题本质,致力于开发支撑工程现场的工具。
查看项目最新信息 →相关主题
价值
更详细
错误