郭曉威,李 超,劉 杰,徐傳福,龔春葉,陳麗娟
(國防科技大學(xué)計(jì)算機(jī)學(xué)院,湖南 長沙 410073)
隨著高性能計(jì)算技術(shù)的發(fā)展,計(jì)算流體力學(xué)CFD(Computational Fluid Dynamics)軟件已經(jīng)在眾多工業(yè)和非工業(yè)應(yīng)用領(lǐng)域成為一種強(qiáng)大的計(jì)算工具[1]。典型的CFD應(yīng)用領(lǐng)域包括飛機(jī)和車輛氣動力學(xué)、船舶的流體動力學(xué)、內(nèi)燃發(fā)動機(jī)、燃?xì)廨啓C(jī)、環(huán)境工程和生物醫(yī)學(xué)工程等。以通用CFD軟件為代表的數(shù)字仿真平臺已成為諸多關(guān)鍵領(lǐng)域高端裝備研制及試驗(yàn)鑒定評估等的核心軟件工具之一,歐美等發(fā)達(dá)國家已將包括通用CFD軟件在內(nèi)的諸多數(shù)字仿真軟件視為國家競爭力的核心。
從20世紀(jì)90年代開始,歐美發(fā)達(dá)國家的CFD軟件發(fā)展迅速,一大批優(yōu)秀的知名商業(yè)軟件開始占領(lǐng)市場,包括Fluent[2]、CFX[3]、Star-CCM[4]和CFD-FASTRAN[5]等;同時(shí)CFL3D、FUN3D和USM3D等眾多知名的In-house專業(yè)軟件也開始流行。經(jīng)過數(shù)十年的發(fā)展,國際CFD軟件市場已經(jīng)基本被美國、法國和德國的少數(shù)幾家大型商業(yè)軟件公司所壟斷。另一方面,開源CFD軟件也發(fā)展迅速,OpenFOAM[6,7]、SU2[8]和Code_Saturne[9]等大型開源軟件逐漸積累了大量用戶,功能不斷完善,用戶認(rèn)可度不斷提升。
國內(nèi)CFD軟件起步相對較晚,與國外優(yōu)秀的商業(yè)CFD軟件相比差距較大,尚未形成可持續(xù)發(fā)展的局面。近來,國內(nèi)一些單位也推出了一些有代表性的CFD軟件,包括中國空氣動力研究與發(fā)展中心的CFD軟件平臺“風(fēng)雷PHengLEI”[10]和HyperFlow[11]、中國航空工業(yè)氣動研究院用于航空數(shù)值模擬的ARI_CFD[12]等;同時(shí)一些初創(chuàng)CAE軟件公司開始嘗試進(jìn)行通用CFD軟件的商業(yè)化,包括上海索辰信息科技、成都勵(lì)頤拓軟件等均推出了具有自主知識產(chǎn)權(quán)的商業(yè)CFD軟件產(chǎn)品??傮w來看,國產(chǎn)的通用CFD軟件在軟件功能的完備性、用戶界面的易用性和仿真結(jié)果的可信度等方面仍與國外主流商業(yè)軟件存在較大差距,在技術(shù)先進(jìn)性、用戶認(rèn)可度等方面尚未形成競爭力。
從目前應(yīng)用最為廣泛的開源CFD軟件來看,一款通用CFD軟件的代碼量至少在百萬行量級。大型軟件的開發(fā)必然需要對軟件架構(gòu)進(jìn)行深入研究,以保證其良好的可擴(kuò)展性和可維護(hù)性,從而實(shí)現(xiàn)軟件功能和性能的可持續(xù)發(fā)展。由于歷史原因,包括歐美主流商業(yè)軟件在內(nèi)的許多歷史悠久的CFD軟件大都是從20世紀(jì)六七十年代開始基于Fortan語言開發(fā)的,隨著代碼逐步積累,已經(jīng)難以對軟件的基本架構(gòu)進(jìn)行大的重構(gòu)與修改,軟件的核心算法也以70年代的經(jīng)典算法為主??傮w來看,當(dāng)前的大型CFD軟件通過全面的軟件功能、高度魯棒的計(jì)算方法、經(jīng)過長期驗(yàn)證的核心算法以及數(shù)十年的市場推廣,確認(rèn)了今天的市場壟斷地位。但是,這些軟件在軟件架構(gòu)、代碼結(jié)構(gòu)甚至圖形界面等方面都沒有應(yīng)用新的先進(jìn)軟件工程技術(shù),存在較大的重構(gòu)與改進(jìn)空間。
目前CFD軟件開發(fā)領(lǐng)域已經(jīng)認(rèn)識到,基于Fortran的結(jié)構(gòu)化程序編寫方式漸漸地不能適應(yīng)新的軟件架構(gòu)發(fā)展。目前傳播和應(yīng)用較為廣泛的開源CFD軟件OpenFOAM和SU2等均采用C++面向?qū)ο蟮姆绞綐?gòu)建,而由法國電力開發(fā)的Code_Saturne軟件的核心代碼采用Fortran和C語言編寫,為了提供友好的用戶接口,也通過Python語言對核心接口進(jìn)行了包裝。中國空氣動力學(xué)研究與發(fā)展中心研制的混合網(wǎng)格CFD軟件HyperFlow[11]也采用了面向?qū)ο笤O(shè)計(jì)來提升軟件架構(gòu)的合理性。然而,CFD軟件研制領(lǐng)域的面向?qū)ο笤O(shè)計(jì)主要考慮了數(shù)據(jù)結(jié)構(gòu)的封裝,而在接口的抽象、依賴關(guān)系的管理和層次隔離等方面仍存在缺陷。為了基于國產(chǎn)高性能計(jì)算機(jī)系統(tǒng)設(shè)計(jì)大型的通用CFD計(jì)算軟件,有必要分析通用CFD軟件架構(gòu)設(shè)計(jì)的需求和目標(biāo),并提出對應(yīng)的設(shè)計(jì)方案,為自主知識產(chǎn)權(quán)的國產(chǎn)通用CFD軟件設(shè)計(jì)與實(shí)現(xiàn)提供參考。
本文主要基于國產(chǎn)高性能計(jì)算機(jī)技術(shù)的最新發(fā)展趨勢,針對自主知識產(chǎn)權(quán)的大型通用CFD軟件研制需求,結(jié)合現(xiàn)有大型開源軟件的特色及優(yōu)缺點(diǎn),分析通用CFD軟件架構(gòu)設(shè)計(jì)的目標(biāo),提出一種高可擴(kuò)展的通用CFD軟件架構(gòu)設(shè)計(jì)方案,并對軟件架構(gòu)中各個(gè)層次和模塊功能及接口進(jìn)行詳細(xì)分析。最后,本文基于該架構(gòu)設(shè)計(jì)方案開發(fā)了對應(yīng)的CFD軟件原型系統(tǒng),通過初步測試對軟件架構(gòu)的可行性進(jìn)行了驗(yàn)證。
CFD軟件的主要工作是通過特定的離散方法來求解由一組微分方程描述的流體運(yùn)動問題。與其它領(lǐng)域的大型軟件相比,CFD軟件的內(nèi)部結(jié)構(gòu)并不復(fù)雜。然而,與特定物理問題緊密相關(guān)的特性,給通用CFD軟件帶來了額外的復(fù)雜性,這種復(fù)雜性主要包括以下幾個(gè)方面:(1)軟件涉及多學(xué)科的領(lǐng)域知識。多相流、燃燒、傳熱與輻射等特定應(yīng)用問題均屬于通用CFD軟件的覆蓋范圍,而在CFD軟件中支持這些功能,通常需要實(shí)現(xiàn)這些領(lǐng)域相關(guān)的理論模型;同樣地,高精度離散格式、快速穩(wěn)定的線性系統(tǒng)求解算法都需要不同的知識背景;而CFD應(yīng)用的性能需求則需要高性能計(jì)算領(lǐng)域的知識。 多學(xué)科領(lǐng)域知識的需求一方面導(dǎo)致通用CFD軟件的設(shè)計(jì)很難做到各方面兼顧;另一方面隨著軟件規(guī)模的增大,其開發(fā)和維護(hù)越來越困難。(2)軟件的驗(yàn)證與確認(rèn)尤其重要。CFD軟件的核心是要實(shí)現(xiàn)對自然現(xiàn)象的模擬,因此首先需要通過精密的軟件驗(yàn)證過程保證代碼沒有明顯缺陷,同時(shí),需要通過全面的確認(rèn)手段對預(yù)期的模擬結(jié)果與實(shí)驗(yàn)結(jié)果進(jìn)行對比,以確認(rèn)軟件代碼的計(jì)算結(jié)果和精度滿足要求;由于計(jì)算幾何的復(fù)雜性和理論模型的多樣性,需要在設(shè)計(jì)初期就考慮通過自動化和強(qiáng)制測試等手段加強(qiáng)通用CFD軟件的驗(yàn)證與確認(rèn)過程管理。(3)物理模型與計(jì)算方法的持續(xù)發(fā)展?;镜牧黧w運(yùn)動方程通常由N-S方程來描述,當(dāng)前主流的商業(yè)CFD軟件和開源CFD軟件均采用有限體積法對理論模型進(jìn)行離散求解。由于軟件架構(gòu)設(shè)計(jì)缺乏靈活性,目前的大型通用CFD軟件在算法上進(jìn)展較慢,并不能兼容最近數(shù)十年出現(xiàn)的一些新的模型和算法。例如,新的多相流模型和材料模型集成、高階精度算法的應(yīng)用等在現(xiàn)有的軟件框架下都存在較大困難。新的物理模型和計(jì)算方法的持續(xù)發(fā)展為可擴(kuò)展的CFD軟件架構(gòu)設(shè)計(jì)提出了新的要求。(4)對計(jì)算性能的高要求。軟件的并行計(jì)算性能是CFD軟件必須關(guān)注的重點(diǎn)問題。目前商業(yè)CFD軟件通過License授權(quán)限制等方式對軟件的并行性能進(jìn)行了限制,導(dǎo)致超大規(guī)模網(wǎng)格的應(yīng)用案例無法進(jìn)行模擬。一些專用CFD軟件則針對特定領(lǐng)域應(yīng)用進(jìn)行了專門的并行設(shè)計(jì)與優(yōu)化,能夠模擬數(shù)十億以上網(wǎng)格案例,但通用性不足,難以對標(biāo)國際上先進(jìn)的通用CFD軟件。
綜上所述,通用CFD軟件相對于普通的大型軟件,在架構(gòu)設(shè)計(jì)方面面臨著多學(xué)科交叉、驗(yàn)證與確認(rèn)、物理模型與計(jì)算方法以及高性能等多方面的特殊需求。為了解決這些問題,本文設(shè)計(jì)的通用CFD軟件架構(gòu)主要實(shí)現(xiàn)了以下主要目標(biāo):(1)依賴倒置的層次結(jié)構(gòu),實(shí)現(xiàn)了不同學(xué)科相關(guān)代碼的隔離。通過面向?qū)ο蟮能浖Y(jié)構(gòu),可以實(shí)現(xiàn)不同層次之間依賴關(guān)系的倒置:即高層模塊不依賴于低層模塊,而應(yīng)該依賴于抽象接口。通過這種方式改變了結(jié)構(gòu)化的CFD軟件中從高層到低層的逐層依賴關(guān)系,能夠?qū)崿F(xiàn)理論模型、數(shù)值離散、線性求解算法等不同學(xué)科相關(guān)代碼之間的松耦合,從而有效提高軟件的可擴(kuò)展性。(2)支持自動化的單元測試。軟件設(shè)計(jì)的初期就應(yīng)該考慮模塊測試的可行性和自動化。單元測試在軟件架構(gòu)設(shè)計(jì)階段主要考慮2個(gè)方面的目標(biāo):第1是每個(gè)模塊的可測試性,軟件模塊是否可獨(dú)立測試從側(cè)面反映了模塊之間的松耦合特性;第2是測試代碼與核心代碼之間的獨(dú)立性以及測試的自動化。 (3)接口與抽象分離。相對于基于結(jié)構(gòu)化編程語言的軟件架構(gòu),良好的面向?qū)ο筌浖軜?gòu)最大的特點(diǎn)就在于接口與實(shí)現(xiàn)之間的分離。由于軟件中的接口總是相對穩(wěn)定,而具體實(shí)現(xiàn)則可能不斷發(fā)生變化,這種變化與物理模型和計(jì)算方法的發(fā)展有關(guān),與性能的優(yōu)化有關(guān),也可能與需求的變化和驗(yàn)證確認(rèn)的反饋有關(guān)。軟件架構(gòu)中將具體實(shí)現(xiàn)與抽象接口完全分離,就實(shí)現(xiàn)了良好的可擴(kuò)展性。(4)高性能的數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)。CFD 軟件作為典型的計(jì)算密集型應(yīng)用,計(jì)算性能對軟件的可用性和應(yīng)用場景都極為重要。面向?qū)ο蟮哪K化設(shè)計(jì)相對于基于Fortran等結(jié)構(gòu)化語言而言會帶來一定的性能損失,但我們應(yīng)該盡可能地提高數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)的高效性,尤其在架構(gòu)設(shè)計(jì)方面考慮大規(guī)模并行和大型稀疏矩陣運(yùn)算的計(jì)算效率。
圍繞以上設(shè)計(jì)目標(biāo),本文提出了一種高可擴(kuò)展的通用工程計(jì)算軟件架構(gòu)。這里的“通用”主要指該軟件架構(gòu)不針對具體的CFD應(yīng)用問題,而是適用于所有可以通過微分方程描述的應(yīng)用,包括不可壓縮流體、可壓縮流體、湍流、多相流和燃燒等應(yīng)用問題都可以集成到該架構(gòu)中進(jìn)行實(shí)現(xiàn)。
本文將通用CFD軟件中的核心計(jì)算過程抽象為4個(gè)層次:應(yīng)用層、算法模型層、時(shí)空離散層和線性系統(tǒng)層??傮w架構(gòu)如圖1所示。
應(yīng)用層是頂層應(yīng)用主程序,包括求解不可壓縮流、可壓縮流和多相流等具體應(yīng)用問題的主程序。實(shí)際軟件實(shí)現(xiàn)過程中,應(yīng)用層代碼主要調(diào)用算法和模型接口來完成應(yīng)用問題的求解。圖1中的SegaregatedAlgo是分離式求解算法接口,為了直觀性這里沒有考慮耦合式算法的情形。Model接口則對CFD領(lǐng)域的多種理論模型進(jìn)行了抽象。
算法模型層則主要包括求解算法和理論模型的具體實(shí)現(xiàn)模塊,這些模塊最終通過調(diào)用時(shí)空離散接口discreteMethod將理論模型轉(zhuǎn)化為線性系統(tǒng)。
時(shí)空離散層實(shí)現(xiàn)了discreteMethod接口,通過特定的離散方法將模型中包含的微分方程組裝為多個(gè)線性系統(tǒng)。典型的離散方法包括有限體積法、有限元法和有限差分法等。時(shí)空離散層通過Matrix接口操作線性系統(tǒng)中的稀疏矩陣,并調(diào)用LinSolver接口來求解各個(gè)線性系統(tǒng)。
線性系統(tǒng)層主要包括2個(gè)模塊實(shí)現(xiàn):稀疏矩陣格式Matrix和線性求解器LinSolver。為了描述完整的線性系統(tǒng)Ax=b,還需要提供物理場數(shù)據(jù)結(jié)構(gòu)等。通過求解線性系統(tǒng),CFD軟件能夠得到各個(gè)微分方程的解,從而完成對應(yīng)用案例中所包含的理論模型的求解。
Figure 1 A highly scalable general purpose CFD software architecture圖1 一種高可擴(kuò)展的通用CFD軟件架構(gòu)
與現(xiàn)有的主流CFD軟件架構(gòu)相比,該軟件架構(gòu)設(shè)計(jì)的層次結(jié)構(gòu)主要有以下3個(gè)特色:(1)模塊抽象的一般性,即應(yīng)用、算法模型、時(shí)空離散和線性系統(tǒng)的抽象并不針對特定的CFD應(yīng)用,而是面向所有CFD領(lǐng)域的一般化抽象。因此,本文設(shè)計(jì)的是一種通用CFD軟件架構(gòu),能夠兼容空氣動力學(xué)、水動力學(xué)、反應(yīng)堆熱工水力和發(fā)動機(jī)內(nèi)流仿真等多種應(yīng)用領(lǐng)域軟件的開發(fā);另一方面這種高層次抽象增加的軟件代碼的可讀性和可維護(hù)性,開發(fā)人員不需要深入理解具體的CFD領(lǐng)域計(jì)算方法就能很容易找到各個(gè)層次需要維護(hù)和開發(fā)的接口。(2)層次之間的依賴關(guān)系倒置。從圖1中可以看到,模塊之間的依賴關(guān)系打破了傳統(tǒng)的面向過程軟件結(jié)構(gòu)中上層依賴下層的樹狀關(guān)聯(lián):高層模塊僅依賴接口,而不依賴低層實(shí)現(xiàn),而低層模塊通過接口實(shí)現(xiàn)(繼承)關(guān)系依賴于上層模塊。這種軟件架構(gòu)使得CFD軟件中具體算法或?qū)崿F(xiàn)代碼的修改和擴(kuò)展完全不影響其它模塊,從而實(shí)現(xiàn)了更大程度的可擴(kuò)展性。由于在軟件中接口相對穩(wěn)定,而具體實(shí)現(xiàn)總是隨著技術(shù)的發(fā)展和需求的變化需要不斷地?cái)U(kuò)展和修改,將代碼盡可能地脫離對具體實(shí)現(xiàn)的依賴能更好地保證軟件架構(gòu)的穩(wěn)定性。(3)多個(gè)層次的可擴(kuò)展性。通過接口與實(shí)現(xiàn)的分離,可以在軟件中不斷擴(kuò)充新的實(shí)現(xiàn)代碼,例如,線性系統(tǒng)層可以增加PETSC求解器,并使用新的壓縮矩陣格式,而這種代碼擴(kuò)展完全不影響其他模塊的功能和代碼,只需在輸入配置文件中指明需要調(diào)用的模塊就可以動態(tài)加載?;谠摷軜?gòu)可以實(shí)現(xiàn)多個(gè)層次的二次開發(fā)接口,并設(shè)計(jì)具有高度易用性的軟件開發(fā)包(SDK)以兼容第三方開發(fā)模塊。
通用CFD軟件中的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)包括配置參數(shù)Config、網(wǎng)格數(shù)據(jù)Mesh、物理場Field和稀疏矩陣Matrix。Config類通過讀取YAML格式的輸入文件來初始化各個(gè)案例配置參數(shù),其主要數(shù)據(jù)成員如下所示:
class Config{
private:
std::shared_ptr〈Reader〉 reader_;
PartitionConfig *partition_ = nullptr;
GeometryConfig *geometry_ = nullptr;
MeshConfig *mesh_ = nullptr;
PhysicsConfig *physics_ = nullptr;
BoundaryConfig *boundary_ =nullptr;
AlgorithmConfig *algorithm_ = nullptr;
DiscreteConfig *discrete_ = nullptr;
ControlConfig *control = nullptr;
SolverConfig *solver_ = nullptr;
AssembleConfig *assemble_ = nullptr;
SolutionConfig *solution_ = nullptr;
}
本文將配置數(shù)據(jù)分為partition、geometry、mesh、physics、boundary、algorithm、discrete、control、solver、assemble和solution 共11個(gè)部分。每部分的含義與變量名相符,例如partition中包含并行劃分相關(guān)配置,mesh中指明網(wǎng)格文件的名稱和位置等,boundary中包含所有邊界條件設(shè)置,control配置了時(shí)間步大小及總模擬時(shí)長等控制參數(shù)。更多細(xì)節(jié)本文不再一一列舉。
根據(jù)Config 中指明的網(wǎng)格文件名稱和位置讀入網(wǎng)格之后,數(shù)據(jù)存儲在mesh中,class Mesh的主要數(shù)據(jù)成員如下所示:
class Mesh{
vector〈Node〉 nodeList_;
vector〈Face〉 faceList_;
vector〈Element〉 elementList_;
vector〈Boundary〉 boundaryList_;
vector〈Domain〉 domainList_;
}
網(wǎng)格中的節(jié)點(diǎn)、面、單元體、邊界和區(qū)域都通過連續(xù)數(shù)組vector的形式存儲,保證了最高的訪問效率。本文采用非結(jié)構(gòu)網(wǎng)格格式,同時(shí)所有的離散格式和算法都基于非結(jié)構(gòu)網(wǎng)格的一般形式,能夠兼容結(jié)構(gòu)網(wǎng)格。
物理場Field則依次將與網(wǎng)格單元對應(yīng)的物理場的值存儲在連續(xù)數(shù)組中,具體軟件實(shí)現(xiàn)中將Field定義為vector的子類。Matrix則存儲了離散后的稀疏矩陣,稀疏矩陣可以有多種存儲格式,現(xiàn)有軟件版本中實(shí)現(xiàn)了一種標(biāo)準(zhǔn)的CSR格式。
基于以上軟件架構(gòu)設(shè)計(jì)方案,本文實(shí)現(xiàn)了一款通用CFD軟件原型系統(tǒng)CFD-Prototype。原型系統(tǒng)源碼結(jié)構(gòu)如圖2所示。etc 目錄中包含基本的配置腳本,src 目錄包含所有核心軟件源代碼,目前的軟件版本中實(shí)現(xiàn)了Simple迭代算法、不可壓縮流體模型和簡單的GaussSeidel線性迭代求解算法,離散方法方面實(shí)現(xiàn)了基本的有限體積法時(shí)空離散。該原型系統(tǒng)可以求解基本的不可壓縮流體層流應(yīng)用問題,支持穩(wěn)態(tài)和瞬態(tài)求解。
Figure 2 Source code structure of the highly scalable general purpose CFD software prototype圖2 高可擴(kuò)展通用CFD軟件原型系統(tǒng)源碼結(jié)構(gòu)
原型系統(tǒng)支持cgns 網(wǎng)格格式,通過YAML格式的輸入文件定義模擬案例。一種典型的案例配置文件模板中的典型內(nèi)容如下所示:
mesh:
fileName:../test/test.cgns #網(wǎng)格數(shù)據(jù)文件
fileType:cgns
dimension:3
scaleFactor:
x:0.01
y:0.01
z:0.01
physics:
state:steady #/transient,確定模擬類型是瞬態(tài)還 #是穩(wěn)態(tài)
gravity:
x:0
y:0
z:-9.18
model:incompressible # compressible,multiphase, #…
turbulenceModel:lamilar #kEpsilon,k-omega,les,
material:air
refPressure:0.1 # MPa,指定參考壓力為1個(gè)大氣 #壓,有利于減少壓差變化較小時(shí),計(jì)算產(chǎn)生的舍入 #誤差
refDensity:1.25 # kg/m3
refTemperature:298.16 # K ,確定參考溫度為25 #攝氏度,便于確定熱力學(xué)比焓、比熵,計(jì)算流體內(nèi)能
refSpecificEnthalpy:0 #J/kg,設(shè)置參考狀態(tài)比焓
refSpecificEntropy:0 # J/(kg K)設(shè)置參考狀態(tài)比熵
stateEquation:generalMaterial # 對于非理想介質(zhì), #需要同時(shí)定義密度與摩爾分子量從而確定壓力
molarMass:28.96 # kg/kmol,分子摩爾質(zhì)量
density:1.0
viscosity:0.01 #kg/(ms),動力粘度
heatCapacity:1004.4 #J/(kg K)
heatConductivity:0.0261 # W/(m K)
boundary:
definedBoundary:
-wall_1
-wall_2
flowIn:
type:inlet
patchName:flowIn #設(shè)置該邊界對應(yīng)的網(wǎng)格面
massAndMoment:velocity #還有其他2種方式 #進(jìn)行選擇,massFlow和pressure
velocity:
x:0.8
y:1
z:1.2#指定速度大小,其方向默認(rèn)與邊界面垂直
massFlow:
massFlowRate:0.5 # kg/s,方向默認(rèn)與邊界 #面垂直
pressure:
totalPressure:100000 # Pa,kg/(s2m),一般 #入口壓力邊界設(shè)置為總壓
……
輸入文件中包含了完整的CFD案例需要的參數(shù)配置,包括邊界條件、初始條件、理論模型參數(shù)和材料參數(shù)等。網(wǎng)格文件則通過mesh:fileName指定。YAML文件的可讀性較高,用戶可以方便地進(jìn)行修改。
test 目錄下是基于GoogleTest建立的單元測試和集成測試庫,可以針對每個(gè)獨(dú)立的模塊進(jìn)行測試。這些測試模塊將是下一步建立自動測試系統(tǒng)和持續(xù)集成的基礎(chǔ)。
為了驗(yàn)證本文設(shè)計(jì)的通用CFD軟件架構(gòu)的可行性,本文對基于該架構(gòu)實(shí)現(xiàn)的原型系統(tǒng)進(jìn)行了測試與分析。受限于論文篇幅,這里以一個(gè)簡單的三角腔頂壁運(yùn)動問題作為測試案例進(jìn)行分析。案例的幾何結(jié)構(gòu)和網(wǎng)格劃分情況如圖3所示。
Figure 3 Geometry and mesh configuration of laminar flow in a triangular cavity圖3 三角腔層流測試案例幾何結(jié)構(gòu)與網(wǎng)格
測試案例的幾何尺寸、材料屬性和物理屬性如表1所示。
Table 1 Configuration parameters of laminar flow in a triangular cavity表1 三角腔層流案例基本參數(shù)配置
三角腔頂壁運(yùn)動會引起腔內(nèi)流體發(fā)生層流流動,將三角腔頂壁垂直平分線上水平分量速度模擬值與實(shí)驗(yàn)結(jié)果進(jìn)行對比驗(yàn)證。計(jì)算域?yàn)楦叨葹? m,寬度為2 m,厚度為0.2 m的三棱柱。如圖3所示,網(wǎng)格劃分為全六面體結(jié)構(gòu)網(wǎng)格,網(wǎng)格數(shù)量總計(jì)分別為1 749,12 370個(gè)。模擬結(jié)果如圖4 所示。
Figure 4 Simulation results of laminar flow in a triangular cavity圖4 三角腔層流測試結(jié)果
本文將x=0.0,y=-4.0-0.0,z=0.1直線上的速度分布曲線與實(shí)驗(yàn)值進(jìn)行比較,其中橫坐標(biāo)為y向坐標(biāo)值,縱坐標(biāo)為x向無量綱速度(也稱歸一化速度)。CFD-Prototype的計(jì)算結(jié)果與實(shí)驗(yàn)值趨勢一致,但仍存在一定的誤差,另外,隨著網(wǎng)格細(xì)化計(jì)算結(jié)果的最大值與實(shí)驗(yàn)值更為接近。
通過以上測試,驗(yàn)證了本文設(shè)計(jì)的通用CFD軟件架構(gòu)的可行性:即可以基于該架構(gòu)開發(fā)出高可擴(kuò)展的通用CFD軟件,軟件高度模塊化,可運(yùn)行完整案例。但是,目前的原型系統(tǒng)僅用作驗(yàn)證,在核心算法方面仍存在較大缺陷,下一步需要持續(xù)改進(jìn)。
在此原型系統(tǒng)基礎(chǔ)上,我們制定了長期的研制計(jì)劃,預(yù)計(jì)通過5年左右的軟件開發(fā),將該通用軟件架構(gòu)原型系統(tǒng)發(fā)展為一款支持工程實(shí)用案例的通用CFD軟件系統(tǒng),并應(yīng)用到國產(chǎn)高性能計(jì)算機(jī)系統(tǒng)上。軟件研制的初步路線和計(jì)劃如圖5所示。
Figure 5 Development plan of the highly scalable general purpose CFD software圖5 高可擴(kuò)展的通用CFD軟件研制計(jì)劃
目前的軟件原型系統(tǒng)僅對軟件基本架構(gòu)進(jìn)行了實(shí)現(xiàn),并基于GoogleTest建立了自動測試框架,支持基本的Simple系列解耦式求解算法,支持穩(wěn)態(tài)和瞬態(tài)的不可壓縮流體模型;下一步將通過集成PETSC來提升軟件的線性系統(tǒng)求解能力,并通過大量工程案例的測試與優(yōu)化來提升軟件對復(fù)雜網(wǎng)格的兼容性和穩(wěn)定性,同時(shí)進(jìn)一步擴(kuò)展多種三階TVD(Total Variation Diminishing)格式來提高數(shù)值離散的精度。由于該軟件采用了高度可擴(kuò)展的軟件架構(gòu),可以不斷地添加新的算法與模型。
本文基于國內(nèi)自主通用CFD軟件研制的現(xiàn)狀,分析了高可擴(kuò)展的通用CFD軟件架構(gòu)設(shè)計(jì)的目標(biāo),并提出了一種基于面向?qū)ο蟮?、高度解耦的層次化通用CFD軟件架構(gòu),并基于該架構(gòu)設(shè)計(jì)實(shí)現(xiàn)了一款通用CFD軟件原型系統(tǒng),最后通過一個(gè)完整的CFD案例對原型系統(tǒng)進(jìn)行了測試與分析,驗(yàn)證了該軟件架構(gòu)的可行性。
該通用軟件原型系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)仍存在較大缺陷,在理論模型支持、數(shù)值算法完備性、并行計(jì)算效率等方面仍有大量工作需要開展。在此基礎(chǔ)上,我們制定了初步的軟件研制計(jì)劃,預(yù)計(jì)通過5年以上的軟件開發(fā),完成一款支持核反應(yīng)堆熱工水力仿真、飛行器空氣動力學(xué)分析、大型船舶水動力學(xué)分析等復(fù)雜應(yīng)用案例的自主知識產(chǎn)權(quán)通用CFD軟件產(chǎn)品。