玩了这么久OpenFOAM,你了解OpenFOAM中方程的求解算法吗?

使用过OpenFOAM的小伙伴一定对PCG、PBiCG以及GAMG这些名词比较熟悉,因为它们都是求解线性方程组系统Ax=b的经典算法,而使用OpenFOAM进行计算的本质就是利用数值方法对连续的偏微分方程(PDEs)进行离散,然后得到一系列的线性方程组系统,最后采用数值算法对方程组进行求解。以Laplace方程为例,使用有限体积法(FVM)对其进行离散后,得到线性方程组系统Ax=b,由于该系统中系数矩阵A是对称正定的,因此,对于该系统的求解,最常用的算法就是预处理共轭梯度法,也即OpenFOAM中的PCG算法。一般地,对于规模较小的问题,PCG算法的求解效率还能接受,但是当问题规模较大时,PCG的求解效率就有点捉襟见肘了。近十多年来,多重网格算法获得了大量关注,也被看做是最有潜力的数值算法之一。在OpenFOAM中,作者也实现了一个代数几何多重网格算法,即GAMG。然而,相信用过OpenFOAM中的GAMG方法的小伙伴一定跟小编一样,对它又爱又恨,因为这个算法配置起来太麻烦了,如果没配好,求解起来比乌龟还慢不说,更让人抓狂的是有可能算了大半天,得到的结果根本就不对。

Fig.1 OpenFOAM 架构

Fig.2 OpenFOAM计算流程

其实,线性方程组的求解是数值领域一个非常基础的学科,而对于线性方程组求解的研究,也早已经是非常成熟,专门致力于数值求解的软件包层出不穷,比较著名的包括:PETSc,Hypre,Trilinos等等。这些软件的共同特点是能力强(提供非常丰富的高效求解方法)、背景厚(多由著名的实验室维护),因此,许多新算法的研究都是基于它们实现的。以美国阿贡实验室负责开发和维护的PETSc为例,经小编初略统计,其所支持的线性求解算法大约有40多种,更详细的信息可以参考其官方网。

(https://www.mcs.anl.gov/petsc/documentation/linearsolvertable.html)

Fig.3 PETSc架构

大牛William D. Gropp(MPICH的主要开发者)就基于PETSc做了许多针对PCG算法的加速与优化,其优化后的算法,比如groppcg和pipecg,在PETSc的官方版本中就可以直接使用。因此,一个大胆想法在小编脑海中慢慢浮现,能不能把OpenFOAM跟PETSc这类专业的数值求解软件,嫁接起来呢?

幸运的是,已经有一些研究者在尝试这么做了。来自NUDT的Exercise团队就在《ACM Transactions on Modeling and Performance Evaluation of Computing Systems》期刊上发表了他们最新的研究成果,通过移植PETSc来改进OpenFOAM现有的数值求解模块,不但极大地丰富了OpenFOAM的数值求解算法选择,而且对于实际的模拟,通过选择PETSc中更高效的数值算法,能带来求解性能的显著提升。

Fig.4 OpenFOAM-PETSc架构

Fig.5 OpenFOAM-PETSc计算流程

Fig.6 不同矩阵求解方法性能对比(案例:cavity)

对这一工作感兴趣的可以直接参考论文原文,在此附上文章链接如下:

Hao Li, Xinhai Xu, Miao Wang, Chao Li, Xiaoguang Ren, and Xuejun Yang. 2017. Insertion of PETSc in the OpenFOAM Framework. ACM Trans. Model. Perform. Eval. Comput. Syst. 2, 3, Article 16 (August 2017), 19 pages. DOI:https://doi.org/10.1145/3098821

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180327G0ATLJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券