【原創】玩了這麼久OpenFOAM,你了解OpenFOAM中方程的求解演算法嗎?

本文原創作者:國防科技大學 Howe 博士


使用過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多種,更詳細的信息可以參考其官方網:

mcs.anl.gov/petsc/docum

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: doi.org/10.1145/3098821

(版權所有 侵權必究)


推薦閱讀:

Matplotlib中線條的風格
翼子板主要工藝成形過程模擬
第1節.Matlab中的fft

TAG:openfoam | 計算流體力學CFD | 數值模擬 |