9
光合基金
精华
推荐
【光合基金分享】一种提高OpenFOAM流动求解器求解效率的方法
2022-11-18 16:16:19
240

作为一个通用的CFD框架, OpenFOAM的模拟由三个常见的计算流体力学模拟程序组成:前处理,求解器和后处理,采用C++方式进行实现,如图1所示。其中前处理主要包括了几何建模、网格生成和网格划分等工作。求解器是OpenFOAM的核心部分,包括物理建模,方程离散和数值求解,数据的重构和可视化在后处理中进行管理。

在OpenFOAM中其所支持的线性代数方程求解器很少,方程求解模块一共有三个子模块共同构成,分别是预处理器、光滑求解器和迭代求解器。

共轭梯度求解器(PCG/PBiCG)是核心数求解处理器,其中PCG用于求解对称矩阵。此外,OpenFOAM还实现了一个多重网格求解器GAMG以及一个对角求解器diagonal。在使用迭代法求解线性方程系统时,为了加速方程组的收敛速度,通常会对原始的线性系统进行分解或者对角化处理,完成该工作的模块称为预处理器。OpenFOAM中一共实现了 5 种预处理器,即:对角不完全 Cholesky(DIC)、快速对角不完全 Cholesky(FDIC)、对角不完全LU(DILU)、对角(diagonal)以及多重网格(GAMG)。除此之外还有一类光滑求解器Smoother,可以支持对称和非对称矩阵的求解。这些求解器和预处理器的组合一起构成了全部的线性求解方案,然而在实际使用过程中,由于某些求解器和预处理器只针对特定类型的矩阵系统适用,因此可供用户选择的求解方案大概只有 10 种左右。

除了可供选择的线性系统求解方案种类少之外,OpenFOAM的线性求解性能也一直时研究者关注的热点问题。有研究显示,测试用例中计算最密集的部分是线性方程组的求解过程,大概占据了整个程序执行时间的83%。在OpenFOAM中,物理模型经过有限体积法离散所得到的矩阵都采用一种lduMatrix的格式进行存储,该格式包含L、D和U三个部分,分别存储矩阵中上三角、对角以及下三角位置上的非零元。这种格式的优点是对于稀疏矩阵,其中的大部分零元不占用额外的存储空间,较为节省空间,尤其是在非零元相对对角线对称分布时更是如此。

然而,lduMatrix矩阵在节省空间的同时,也带来了访问效率低的问题,尤其是在线性矩阵系统迭代求解过程中,由于有大量的矩阵向量乘操作,需要频繁地访问矩阵元素,进而形成了性能瓶颈。

通过对OpenFOAM框架进行分析,提出了通过C86+DCU计算平台进行异构加速的策略,形成了高性能加速计算该框架,将LDU矩阵转换为CRS矩阵,能够大幅度提升计算效率

attachmentId-image.png

因此,基于AMD的HIP计算平台实现了常见的线性方程组迭代求解方法,并将之集成到OpenFOAM中,为OpenFOAM的计算过程加速。

全部评论(1)
只看楼主
G
ghdevadmin
1楼
赞:qiang:emoji
2022/11/8
没有更多内容了
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据