赫 新,張來平,趙 鐘,鄧小剛
(中國空氣動力研究與發(fā)展中心 空氣動力學(xué)國家重點實驗室,四川 綿陽 621000)
從20世紀(jì)90年代開始,國外的CFD軟件開發(fā)機(jī)構(gòu)開始大量應(yīng)用面向?qū)ο蠹夹g(shù),在計算機(jī)圖形學(xué)、數(shù)據(jù)庫技術(shù)、標(biāo)準(zhǔn)輸入輸出等方面做了大量工作,在軟件的穩(wěn)定性和可用性方面取得豐碩成果,相繼推出了Fluent、ICEM-CFD、Fastran、CFX等知名商業(yè)軟件,同時開發(fā)了眾多知名的In-h(huán)ouse專業(yè)軟件,如CFL3D、FUN3D、USM3D、TAU、elsA 等[1]。
國內(nèi)的CFD軟件研制起步較晚,和國外優(yōu)秀CFD軟件相比還有較大的差距,其主要體現(xiàn)為:(1)多數(shù)軟件采用Fortran語言的結(jié)構(gòu)化體系結(jié)構(gòu),軟件的通用性、可擴(kuò)展性和可維護(hù)性差,軟件架構(gòu)相對落后,升級換代遇到難以克服的困難;(2)CFD軟件開發(fā)模式有待提高,項目管理手段簡單,難以保證軟件質(zhì)量;(3)CFD軟件接口沒有統(tǒng)一標(biāo)準(zhǔn),限制了不同CFD軟件之間的數(shù)據(jù)共享和交流。
從國外CFD軟件的現(xiàn)狀來看,遵循著功能更全、求解速度更快、資源消耗更少的發(fā)展思路,強(qiáng)調(diào)面向用戶和多學(xué)科集成的研發(fā)模式,以更好地滿足客戶和研究的需求。眾所周知,對于復(fù)雜外形飛行器的數(shù)值模擬,綜合了結(jié)構(gòu)網(wǎng)格和非結(jié)構(gòu)網(wǎng)格優(yōu)勢的混合網(wǎng)格技術(shù)代表了未來網(wǎng)格技術(shù)的發(fā)展趨勢[2]。但是,當(dāng)前絕大多數(shù)基于混合網(wǎng)格的CFD軟件一般將結(jié)構(gòu)網(wǎng)格視為非結(jié)構(gòu)網(wǎng)格的特例,因此仍按照統(tǒng)一的非結(jié)構(gòu)網(wǎng)格進(jìn)行數(shù)值計算。這實際上沒有充分發(fā)揮結(jié)構(gòu)網(wǎng)格的優(yōu)勢。一種最佳的選擇是在結(jié)構(gòu)網(wǎng)格上運行結(jié)構(gòu)化解算器,而在非結(jié)構(gòu)網(wǎng)格上運行非結(jié)構(gòu)解算器,在算法層次上實現(xiàn)真正的結(jié)構(gòu)/非結(jié)構(gòu)網(wǎng)格耦合計算。
由于結(jié)構(gòu)網(wǎng)格和非結(jié)構(gòu)網(wǎng)格的數(shù)據(jù)結(jié)構(gòu)差異很大,因此需要構(gòu)建能夠涵蓋混合網(wǎng)格的規(guī)范的數(shù)據(jù)結(jié)構(gòu),同時需要建立適應(yīng)性好的軟件體系結(jié)構(gòu),因為軟件的體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)是大型通用軟件的基礎(chǔ)。體系結(jié)構(gòu)是軟件的框架,數(shù)據(jù)結(jié)構(gòu)貫穿于軟件體系結(jié)構(gòu)之中。將之比之為大廈,則軟件的體系結(jié)構(gòu)是大廈的主要承重框架,而數(shù)據(jù)結(jié)構(gòu)則是大廈內(nèi)部的連通道路。因此,一個好的CFD軟件必須具有科學(xué)的體系結(jié)構(gòu)以保證其良好的可擴(kuò)展性;必須具有規(guī)范的數(shù)據(jù)結(jié)構(gòu)以提高數(shù)據(jù)的利用效率,保證數(shù)據(jù)的安全性。
為了促進(jìn)我國大型CFD軟件開發(fā)、推出具有自主知識產(chǎn)權(quán)的CFD軟件,我們有必要開展大型通用CFD軟件的體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)研究,借鑒國外知名CFD軟件的成功經(jīng)驗,發(fā)展具有良好的通用性、易用性、可擴(kuò)展性和易維護(hù)性的CFD軟件。
本文針對大型通用CFD軟件研制的需求,從新一代結(jié)構(gòu)/非結(jié)構(gòu)混合流場解算器的研制出發(fā),著重研究了大型CFD軟件的體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。首先,針對未來計算流體力學(xué)對大型通用CFD軟件的需求進(jìn)行了分析,對軟件研制中將要面對的各種計算網(wǎng)格、物理模型、計算方法以及未來多學(xué)科耦合計算的發(fā)展趨勢進(jìn)行了充分的需求評估。進(jìn)一步提出了采用面向?qū)ο筌浖O(shè)計技術(shù),進(jìn)行大型CFD軟件體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)設(shè)計的方法,包括軟件的整體架構(gòu)、層次結(jié)構(gòu)等,其間提出了運行數(shù)據(jù)庫的概念,設(shè)計了能夠涵蓋結(jié)構(gòu)網(wǎng)格、非結(jié)構(gòu)網(wǎng)格和混合網(wǎng)格的規(guī)范的數(shù)據(jù)結(jié)構(gòu)。在此基礎(chǔ)上,研制了基于結(jié)構(gòu)/非結(jié)構(gòu)網(wǎng)格的結(jié)構(gòu)/非結(jié)構(gòu)混合解算器(HyperFlow),并通過典型算例對軟件進(jìn)行了驗證,同時推廣應(yīng)用于不可壓縮非定常流計算、高階精度DG/FV混合算法等領(lǐng)域。大量的應(yīng)用實踐表明本文提出的CFD軟件體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)具有良好的通用性和可擴(kuò)展性,具有廣闊的應(yīng)用前景。
未來CFD軟件的發(fā)展趨勢是結(jié)構(gòu)/非結(jié)構(gòu)混合網(wǎng)格耦合求解?;旌暇W(wǎng)格技術(shù)一方面提高了網(wǎng)格對復(fù)雜外形的適應(yīng)能力,另一方面又能充分提高計算效率和計算精度。對于復(fù)雜外形飛行器的數(shù)值模擬,一般在幾何外形比較復(fù)雜的地方用非結(jié)構(gòu)網(wǎng)格,而在幾何外形比較簡單的地方用結(jié)構(gòu)網(wǎng)格填充。這其中,結(jié)構(gòu)網(wǎng)格又主要包括多塊對接網(wǎng)格、重疊網(wǎng)格、搭接網(wǎng)格;非結(jié)構(gòu)網(wǎng)格主要包括三棱柱、四面體、金字塔、多面體等各種基本單元。
為了適應(yīng)變形體或多體分離問題非定常計算的需要,必須考慮動態(tài)網(wǎng)格技術(shù);為了提高計算效率,需要發(fā)展多重網(wǎng)格計算和并行計算方法,并實現(xiàn)并行/多重的耦合計算,這就涉及到多重網(wǎng)格和并行分區(qū)網(wǎng)格的自動生成及數(shù)據(jù)的存取問題;為了提高計算精度,需要發(fā)展網(wǎng)格自適應(yīng)方法,同樣涉及到自適應(yīng)網(wǎng)格的存取問題。
因此,在通用CFD軟件研制過程中,需要充分考慮各種網(wǎng)格拓?fù)浣Y(jié)構(gòu)的差異,設(shè)計規(guī)范的數(shù)據(jù)結(jié)構(gòu),提高數(shù)據(jù)結(jié)構(gòu)對各種計算網(wǎng)格的適應(yīng)性。
當(dāng)前CFD軟件求解的物理模型主要包括雷諾平均的N-S方程(包括可壓縮流和不可壓縮流)、湍流模型和轉(zhuǎn)捩模型、化學(xué)反應(yīng)動力學(xué)模型等,未來還需要考慮多學(xué)科耦合計算,如電磁流體/N-S方程耦合求解等。
目前的CFD軟件一般采用二階精度的有限體積計算方法。隨著高精度格式日新月異的發(fā)展,高精度格式將在實際工程中得到深入的研究和應(yīng)用,因此,通用CFD軟件在體系結(jié)構(gòu)設(shè)計時,必須考慮到容納高精度格式計算的需要。這其中主要包括結(jié)構(gòu)網(wǎng)格下的 WCNS[3],WENO[4-5]等和非結(jié)構(gòu)網(wǎng)格下的 DG方法[6]、DG/FV 混合方法[7]等。
隨著CFD面臨的問題越來越復(fù)雜,復(fù)雜外形粘性流動數(shù)值模擬所需網(wǎng)格量越來越大。為了縮短計算周期,需要發(fā)展高效率的時間推進(jìn)方法。就目前而言,主要包括顯式多步Runge-Kutta迭代和殘值光順耦合計算方法,隱式LU-SGS和BLU-SGS[8-10],GMERS[11]等;針對不可壓流,需要集成虛擬壓縮法、預(yù)處理方法或SIMPLE算法等。為了進(jìn)一步提高計算效率,還需要將分區(qū)并行和多重網(wǎng)格耦合計算。
因此,在通用CFD軟件的體系結(jié)構(gòu)設(shè)計過程中需要充分考慮各種計算方法和物理模型的特性,設(shè)計合理靈活的、具有良好可擴(kuò)展性的體系結(jié)構(gòu),不至于在軟件功能擴(kuò)充時需要重新設(shè)計體系結(jié)構(gòu)。
大型CFD軟件耦合了結(jié)構(gòu)/非結(jié)構(gòu)網(wǎng)格的拓?fù)浣Y(jié)構(gòu)和計算方法,還包括各種模型的計算,使得軟件的各模塊之間、軟件與其他配套軟件之間的通信非常復(fù)雜,建立統(tǒng)一的、標(biāo)準(zhǔn)的數(shù)據(jù)接口可以極大地增強(qiáng)軟件的可維護(hù)性和魯棒性。
和配套軟件的數(shù)據(jù)接口主要包括前置軟件數(shù)據(jù)接口和后置軟件數(shù)據(jù)接口。前置軟件主要包括網(wǎng)格生成軟件的接口,比如Gridgen、ICEM-CFD等,后置軟件的數(shù)據(jù)接口主要包括Tecplot、ParaView、Field-View等。因此,在軟件體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)設(shè)計時要充分考慮和這些前后置處理軟件的接口需求。
以CFD為核心的多學(xué)科多目標(biāo)優(yōu)化設(shè)計是當(dāng)前及未來發(fā)展的重點,其中將涉及到靜動態(tài)網(wǎng)格自動生成、優(yōu)化計算方法、氣動聲學(xué)特性分析、RCS隱身特性分析、飛行力學(xué)特性分析等。因此大型通用CFD軟件的體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)應(yīng)該充分考慮未來多學(xué)科多目標(biāo)優(yōu)化設(shè)計的需求。
大型通用CFD軟件體系結(jié)構(gòu)的構(gòu)建原則是可擴(kuò)展性和易維護(hù)性??蓴U(kuò)展型指軟件體系結(jié)構(gòu)要在適應(yīng)當(dāng)前CFD技術(shù)的同時也能適應(yīng)可預(yù)見的未來CFD發(fā)展趨勢;可維護(hù)性指軟件體系結(jié)構(gòu)應(yīng)能適應(yīng)未來模塊功能改進(jìn)、軟件更新的維護(hù)成本和功能增強(qiáng)達(dá)到最優(yōu)。
目前在CFD界比較流行的程序語言是Fortran和C++(包括C),二者各有優(yōu)缺點。Fortran是針對科學(xué)計算開發(fā)的語言,在復(fù)數(shù)運算、數(shù)組運算等方面具有得天獨厚的優(yōu)勢。但是一般認(rèn)為其為一種“面向過程”的計算機(jī)語言,盡管新版Fortran語言(Fortran90及升級版)逐步具備了某些“面向?qū)ο蟆惫δ?,但是其在?shù)據(jù)的抽象、對象的封裝、可繼承性上還有所欠缺,不利于大型CFD軟件的擴(kuò)展。相比而言,C++是一種“面向?qū)ο蟆钡挠嬎銠C(jī)語言,長期的發(fā)展已使其在數(shù)據(jù)封裝、面向?qū)ο笊嫌兄渌Z言難以匹敵的優(yōu)勢。雖然C++在科學(xué)計算時的計算效率常為人所詬病,但近來已經(jīng)發(fā)展出多種知名的多維數(shù)組算法庫,比如blitz++,從而使得在C++上進(jìn)行多維數(shù)組運算業(yè)已不成問題。
正是因為C++不僅能滿足大型CFD軟件對可繼承性、可擴(kuò)展性的需求,又能方便、高效地進(jìn)行多維數(shù)組的運算,因此,我們建議采用C++語言進(jìn)行大型CFD軟件的開發(fā)。利用C++的面向?qū)ο蠹夹g(shù),我們可以根據(jù)CFD軟件的特殊需求,設(shè)計各種基類和派生類,從而將各功能模塊合理封裝,即相對獨立又相互關(guān)聯(lián),并可通過派生類實現(xiàn)新的功能模塊的有機(jī)集成。
無論是分區(qū)并行計算,還是多重網(wǎng)格計算,CFD軟件的本質(zhì)實際上是在每個網(wǎng)格塊上的科學(xué)計算。根據(jù)CFD軟件的上述特點,我們設(shè)計了如圖1所示的軟件體系結(jié)構(gòu)。整個軟件系統(tǒng)由計算任務(wù)控制類(Simulation類)、計算區(qū)域類(Zone類)、網(wǎng)格信息類(Grid類)、解算器類(Solver類)、后置處理輸出類(Post類)和“運行數(shù)據(jù)庫”組成(“運行數(shù)據(jù)庫”將在第三節(jié)詳細(xì)介紹)??刂茀?shù)輸入包含在Simulation類之中,而網(wǎng)格數(shù)據(jù)信息在創(chuàng)建Zone類時輸入,同時創(chuàng)建Grid類。各類之間的關(guān)系類似于一種“網(wǎng)絡(luò)”結(jié)構(gòu),彼此相對獨立,而又通過Simulation類初始化時形成的“計算任務(wù)配置表”相互關(guān)聯(lián)。這一設(shè)計理念與“結(jié)構(gòu)化”軟件的設(shè)計思想存在本質(zhì)的不同。
整個軟件的核心是Zone類,Zone之間通過邊界信息(InterFace類)交換數(shù)據(jù)交換。這樣做既有利于對大網(wǎng)格進(jìn)行分區(qū)串行計算,也有利于進(jìn)行多個CPU的并行/多重耦合計算,還可以在同一個Zone上加載若干個相關(guān)解算器,或者在不同的Zone上加載不同的解算器,這對多學(xué)科耦合計算是大有裨益的。
關(guān)于各主要類的功能簡述如下:
(1)Simulation類
Simulation類起到對整個模擬進(jìn)程的控制作用,通過對成員變量及函數(shù)的調(diào)用,形成“計算任務(wù)配置表”,實現(xiàn)對控制參數(shù)讀入、網(wǎng)格數(shù)據(jù)讀入、計算任務(wù)初始化、流場解算器選取和后置處理輸入等操作的配置。
(2)Zone類
在進(jìn)行并行計算或者分區(qū)計算時,每一個網(wǎng)格分區(qū)可以視為一個Zone對象,其中即包括了網(wǎng)格信息,又包括了解算器信息、流場控制信息以及流場數(shù)據(jù),網(wǎng)格信息和解算器都以各自的類的方式存在于Zone類中,做為其成員變量。Zone類的主要作用是負(fù)責(zé)各個模塊之間的調(diào)度工作,包括創(chuàng)建網(wǎng)格Grid信息、加載解算器并執(zhí)行求解任務(wù)等。
(3)Grid類
Grid類中包括了網(wǎng)格的全部信息,包括點的坐標(biāo)、單元及其關(guān)聯(lián)信息、單元面積/體積信息等,同時還包括多重網(wǎng)格計算中的“粗-細(xì)”網(wǎng)格信息、非定常計算中動網(wǎng)格的新舊時刻坐標(biāo)信息等。Grid類作為基類,又可從中派生出非結(jié)構(gòu)網(wǎng)格子類(UnsGrid子類)、結(jié)構(gòu)網(wǎng)格子類(StrGrid子類)以及混合計算時二者之間的交界面類(InterFace子類)。UnsGrid類中包括了非結(jié)構(gòu)網(wǎng)格的點-面-單元的連接信息,StrGrid類中包括了結(jié)構(gòu)網(wǎng)格的網(wǎng)格點標(biāo)號,InterFace子類中包括了混合網(wǎng)格交界面處的面的編號、網(wǎng)格點編號、交界面交界單元數(shù)目等信息。Grid類的功能是負(fù)責(zé)Grid的幾何量計算、存儲網(wǎng)格信息、構(gòu)建多重網(wǎng)格信息等。
(4)Solver類
Solver類是解算器類,根據(jù)任務(wù)需求,可以派生出不同的子類,如基于結(jié)構(gòu)網(wǎng)格的NS方程解算器(StrSolver子類)和基于非結(jié)構(gòu)網(wǎng)格的解算器(UnsSolver子類)等,同時還可以派生出湍流模型方程解算器(如SA_Solver、KE_Solver、KW_Solver等)、不可壓縮NS方程解算器(IncompNS_Solver)、高階精度DG解算器(DG_Solver)、高階精度DG/FV混合解算器(DG/FV_Solver)、電磁流體解算器(MHD_Solver)等等。未來,還可以在Solver類基礎(chǔ)上派生出其他學(xué)科的解算器。在整個Solver類中,各個不同的解算器之間地位平等,可以隨時方便、安全地調(diào)用不同的解算器。
圖1 通用CFD軟件體系結(jié)構(gòu)Fig.1 Frame of CFD software
為了有效集成各種計算模型和計算方法,我們在流場解算器設(shè)計中應(yīng)用了分層模型,如圖2所示。整個解算器分為五個層次。第一層,根據(jù)不同的計算需要,將計算分為定常計算和非定常計算;第二層,根據(jù)流場性質(zhì)分為無粘流、層流或湍流;第三層,針對非定常流中的動態(tài)網(wǎng)格性質(zhì)以及不同的算法,將網(wǎng)格分為靜態(tài)網(wǎng)格和動態(tài)網(wǎng)格;第四層,針對不同的方程,分別就方程中的空間項、時間項和源項進(jìn)行離散;第五層是整個軟件的最底層,其中包括了CFD技術(shù)中的各種離散方法、求解方法等具體算法。這種分層結(jié)構(gòu)使得軟件體系結(jié)構(gòu)清晰明確,軟件模塊化規(guī)范,易于軟件的維護(hù)和擴(kuò)展。
圖2 解算器層次結(jié)構(gòu)Fig.2 Frame of solvers
一旦Simulation類通過讀入用戶自定義的“動態(tài)參數(shù)控制文件”(所有控制參數(shù)存儲于“運行數(shù)據(jù)庫”之中),即可形成“計算任務(wù)配置表”。隨后根據(jù)“計算任務(wù)配置表”讀入網(wǎng)格數(shù)據(jù)信息,同時創(chuàng)建Zone類、Grid類,完成網(wǎng)格幾何信息量的計算并存儲至“運行數(shù)據(jù)庫”之中;進(jìn)而加載Solver類(選取不同的解算器),執(zhí)行計算任務(wù),在計算過程中和計算結(jié)束后輸出計算結(jié)果。整個計算任務(wù)流程如圖3所示。由此,原先各類之間的“網(wǎng)絡(luò)”結(jié)構(gòu)關(guān)系,根據(jù)具體任務(wù)需求,轉(zhuǎn)化為自定義“局部結(jié)構(gòu)化”計算任務(wù)流程。
圖3 軟件運行流程圖Fig.3 Flow chart of CFD software
在CFD軟件運行過程中,會涉及到各種各樣的數(shù)據(jù)存取與更新。這些數(shù)據(jù)主要包括:
(1)網(wǎng)格數(shù)據(jù):網(wǎng)格點坐標(biāo)、網(wǎng)格點編號(結(jié)構(gòu)網(wǎng)格)、“點-線-面-體”連接關(guān)系(非結(jié)構(gòu)網(wǎng)格)、面積、體積、動網(wǎng)格計算時的單元面運動速度等;
(2)流場數(shù)據(jù):流場密度、速度、壓力、溫度、組分濃度、渦粘性系數(shù)、湍流相關(guān)參數(shù)等;
(3)狀態(tài)參數(shù):來流條件如馬赫數(shù)、雷諾數(shù)、攻角等;
(4)控制參數(shù):計算格式、限制器、湍流模型、時間推進(jìn)格式等;
(5)其他數(shù)據(jù):比如計算過程中的臨時存儲數(shù)據(jù)(如物理量梯度、殘值)、一些用于流動顯示和計算過程監(jiān)控的數(shù)據(jù)等。
所有數(shù)據(jù)根據(jù)權(quán)限分為兩類:永久保護(hù)數(shù)據(jù)和限制保護(hù)數(shù)據(jù)。永久保護(hù)數(shù)據(jù)是在整個計算過程中不能改變的量,如來流狀態(tài)參數(shù)、計算控制參數(shù)、網(wǎng)格信息數(shù)據(jù)等。限制保護(hù)數(shù)據(jù)只能對某些特定的對象才能修改,如流場數(shù)據(jù),其在計算過程中需隨時間推進(jìn)不斷更新。
為了便于CFD數(shù)據(jù)的跨平臺和跨網(wǎng)絡(luò)共享,以美國為主導(dǎo)的西方國家提出了CFD通用符號標(biāo)準(zhǔn)(CGNS)[12]數(shù)據(jù)格式,并開發(fā)了適應(yīng)各種計算機(jī)軟硬件環(huán)境的CGNS庫。CGNS庫是一個龐大的數(shù)據(jù)管理函數(shù)庫,其幾乎涵蓋了所有CFD數(shù)據(jù)類型,其作為輸入輸出標(biāo)準(zhǔn)是很好的。但是在CFD軟件中內(nèi)嵌龐大臃腫的CGNS庫,將大幅降低計算效率。為此,我們借鑒CGNS的數(shù)據(jù)定義方法,結(jié)合CFD軟件運行的實際需求,定義了如下輕量級的層次數(shù)據(jù)結(jié)構(gòu):
1)變量名:如迭代步數(shù)iter、馬赫數(shù)Ma、雷諾數(shù)Re等單變量參數(shù),流場壓力p、速度u/v/w、溫度T等數(shù)組數(shù)據(jù)。
2)數(shù)據(jù)類型:整型、字符、浮點。
3)數(shù)據(jù)精度:單精度、雙精度等。
4)數(shù)據(jù)維度:單參數(shù)、數(shù)組長度/維度等。
對于所有的數(shù)組數(shù)據(jù)均采用一維數(shù)組(指針)存取。在結(jié)構(gòu)網(wǎng)格計算中,其隱含的i,j,k指標(biāo)關(guān)系由特定函數(shù)(SetArrayLayout)給出,這樣就保證了結(jié)構(gòu)網(wǎng)格和非結(jié)構(gòu)網(wǎng)格存取方式的統(tǒng)一。為了保證結(jié)構(gòu)網(wǎng)格計算時多維數(shù)組運算的順利進(jìn)行,同時為了避免內(nèi)嵌龐大臃腫的多維數(shù)組運算庫,我們參考blitz++等開源軟件,編制了一個輕量級的多維數(shù)組算法庫。這里采用了C++最新的模板編程技術(shù),并利用模板偏特化的一些成果,有效解決了C++中多維數(shù)組的運算問題。
大型通用CFD軟件的一個重要基礎(chǔ)是能夠可靠、安全、高效地存取數(shù)據(jù)。數(shù)據(jù)流設(shè)計的合理性直接影響到軟件平臺設(shè)計的好壞和計算效率。為了保證數(shù)據(jù)的安全性和使用方便性,我們提出了“運行數(shù)據(jù)庫”的概念。在CFD軟件運行過程中涉及到的所有數(shù)據(jù)均按照統(tǒng)一的規(guī)范存儲于“運行數(shù)據(jù)庫”之中?!斑\行數(shù)據(jù)庫”不是傳統(tǒng)意義上的“固態(tài)”數(shù)據(jù)庫,而是伴隨CFD軟件平臺的運行自動生成,并隨軟件運行的結(jié)束而自動釋放。其具體實現(xiàn)方式如下:
(1)限制保護(hù)數(shù)據(jù)類
(2)永久保護(hù)數(shù)據(jù)類
(3)數(shù)據(jù)庫類
數(shù)據(jù)的存儲通過“運行數(shù)據(jù)庫”成員函數(shù)UpdataData(單參數(shù)存儲)和UpdataDataPtr(數(shù)組數(shù)據(jù)或指針數(shù)據(jù)存?。崿F(xiàn);數(shù)據(jù)的提取通過成員函數(shù)Get-Data(單參數(shù)提?。┖虶etDataPtr(數(shù)組數(shù)據(jù)或指針數(shù)據(jù)提取)實現(xiàn)。所有數(shù)據(jù)均“封裝”于“運行數(shù)據(jù)庫”中。由此,在每個獨立的模塊內(nèi),編程人員可以根據(jù)自己的習(xí)慣自由定義局部變量,只需在使用該變量的值時采用上述規(guī)范統(tǒng)一的提取和更新方式,避免了各模塊間數(shù)據(jù)(變量)定義和調(diào)用混亂。
基于以上研究成果,作者開發(fā)了集結(jié)構(gòu)網(wǎng)格解算器和非結(jié)構(gòu)網(wǎng)格解算器于一體的新一代CFD軟件平臺:HyperFlow。目前,我們已經(jīng)對其中的結(jié)構(gòu)網(wǎng)格NS方程解算器和非結(jié)構(gòu)網(wǎng)格NS方程解算器進(jìn)行了多方測試,并進(jìn)行了二者同時運行的混合NS方程解算器進(jìn)行了初步的測試。此外,我們在該軟件平臺上還集成了不可壓縮虛擬壓縮法解算器、高階精度DG/FV混合解算器(二維標(biāo)量方程和Euler方程)等多種解算器。以下給出了一下典型計算結(jié)果。
M6機(jī)翼是一個標(biāo)準(zhǔn)的三維跨聲速算例,來流條件取為:Ma=0.8395,雷諾數(shù)為1.172×107,攻角為3.06°。計算網(wǎng)格分別采用了結(jié)構(gòu)網(wǎng)格和非結(jié)構(gòu)網(wǎng)格(圖4a、b),非結(jié)構(gòu)網(wǎng)格分為8個區(qū)并行計算,空間離散方法采用基于Roe分裂的MUSCL型格式,隱式時間推進(jìn)采用BLU-SGS方法,湍流模型采用一方程S-A模型和二方程k-ε模型。圖4(c、d)分別給出了結(jié)構(gòu)網(wǎng)格和非結(jié)構(gòu)網(wǎng)格計算得到的壓力等值線,可以看到二者得到的流場結(jié)構(gòu)大體一致,但結(jié)構(gòu)網(wǎng)格的計算結(jié)果明顯較非結(jié)構(gòu)網(wǎng)格計算結(jié)果光滑。圖4(e~h)給出了在四個典型站位的壓力分布和實驗結(jié)果的比較,其中同時給出了結(jié)構(gòu)網(wǎng)格無粘流計算結(jié)果,對比風(fēng)洞試驗結(jié)果,可見粘流計算結(jié)果明顯好于無粘流結(jié)果。
DLR-F6翼身組合體外形是AIAA阻力預(yù)測研討會(DWP)[13]的標(biāo)準(zhǔn)算例。對于該復(fù)雜外形,我們采用三棱柱/四面體混合網(wǎng)格進(jìn)行計算,圖5(a)所示為DLR-F6翼身組合體(帶發(fā)動機(jī)和翼吊構(gòu)型)的表面網(wǎng)格,半場空間網(wǎng)格總共有779萬,分為30個區(qū)并行計算。計算狀態(tài)與DPW-II的CASE2相同:Ma=0.75,雷諾數(shù)為3.0×106,攻角從-3°到1.5°范圍內(nèi)變化。計算方法仍采用與M6機(jī)翼計算相同的非結(jié)構(gòu)流場解算器,湍流模型采用SST湍流模型。圖5(b、c)所示為計算得到的氣動力系數(shù)曲線,分別和實驗結(jié)果以及國外軟件FUN3D、USM3D、NSU3D的對比[13]。結(jié)果顯示,HyperFlow計算結(jié)果和實驗值及國外CFD軟件的計算結(jié)果符合良好。
圖4 M6機(jī)翼計算網(wǎng)格、壓力等值線及典型站位壓力分布Fig.4 Grid,pressure contours and pressure coefficient distributions of M6wing at z/b=0.2,0.44,0.8,0.95
圖5 DLR-F6表面網(wǎng)格及氣動特性曲線Fig.5 Surface grid of DLR-F6wing-body configuration and Aerodynamic coefficients
為了驗證HyperFlow中不可壓流非定常計算模塊,我們數(shù)值模擬了在初始靜止流場中橫向振動的圓柱問題。該算例為經(jīng)典不可壓縮流非定常算例。圓柱中心點的運動方程為:
A表示振幅,f表示振動頻率。Keulegan-Carpenter數(shù)(KC)是表示圓柱振動的無量綱數(shù)之一,其定義如下:
其中D代表圓柱的直徑。雷諾數(shù)定義為:
Umax表示圓柱振動過程中的最大速度(經(jīng)過中心點時的速度)。這里參照文獻(xiàn)[14],取Re=100,KC=5。圖6(a)顯示了一周期內(nèi)壓差阻力、摩擦阻力、總阻力與Dutsch的實驗結(jié)果[15]的比較,可見二者結(jié)果符合很好。圖6(b)表示的是不同的時間步長下的計算結(jié)果對比,可見一周期內(nèi)取不同的真實時間步數(shù)對結(jié)果影響并不大。我們還對不同截面上(x=-0.6d,0d,0.6d,1.2d)的速度剖面(u,v)進(jìn)行了對比,如圖6(c~h)所示,它們與Guilmineau的數(shù)值結(jié)果[14]、Dutsch的實驗結(jié)果[15]都吻合的相當(dāng)好。
為了展示不可壓縮非定常計算模塊對復(fù)雜非定常流動的模擬能力,我們數(shù)值模擬了三維魚體巡游的非定常流場,圖7所示為某時刻魚體尾部的漩渦形態(tài)及相應(yīng)的表面壓力云圖,并進(jìn)行了層流和湍流狀態(tài)的比較。
圖6 圓柱在靜止流場中橫向振動計算結(jié)果Fig.6 Numerical results of oscillating cylinder
高精度格式是CFD發(fā)展的總體趨勢,面向未來的CFD軟件必須考慮到高精度格式計算的需要。DG格式是未來高精度格式研究的熱點之一,因其對各種網(wǎng)格的適應(yīng)能力而備受青睞,但是其計算量頗大。為此,我們發(fā)展了一類混合DG格式和有限體積的DG/FV格式[7,16],該格式的基本思想是利用較低階的DG格式“動態(tài)重構(gòu)”較低階的自由度,利用FV格式“靜態(tài)重構(gòu)”高階自由度,從而實現(xiàn)高階精度計算。該格式已集成于HyperFlow之中。目前三階精度的DG/FV混合格式已推廣應(yīng)用于二維Euler方程的求解,在提高計算精度的同時降低計算所需時間和內(nèi)存需求,詳見參考文獻(xiàn)[7,16]。圖8是利用三階DG/FV混合解算器計算的繞NACA0012翼型跨聲速流動的Mach等值線圖和壓力分布圖。通過和實驗數(shù)據(jù)以及其他學(xué)者的高精度格式計算結(jié)果對比,DG/FV混合計算格式的精度令人鼓舞。
圖7 魚體游動時的流動結(jié)構(gòu)及壓力云圖Fig.7 The flow structure of fish swimming
圖8 DG/FV格式計算NACA0012跨聲速流動Fig.8 Pressure coefficient of NACA0012using DG/FV scheme
結(jié)構(gòu)/非結(jié)構(gòu)解算器混合求解是HyperFlow的目標(biāo),目前正在發(fā)展之中?;旌锨蠼獾碾y點是如何將結(jié)構(gòu)網(wǎng)格求解和非結(jié)構(gòu)網(wǎng)格求解耦合起來,其關(guān)鍵在交界處的邊界信息處理。目前我們僅針對簡單的二維圓柱繞流算例進(jìn)行了驗證。圖9(a)所示為計算網(wǎng)格,在邊界層內(nèi)用結(jié)構(gòu)網(wǎng)格填充并用基于結(jié)構(gòu)網(wǎng)格的有限體積法求解,以很好地模擬邊界層的流場結(jié)構(gòu),在外場用非結(jié)構(gòu)網(wǎng)格填充并用基于非結(jié)構(gòu)網(wǎng)格的有限體積法求解。圖9(b)為計算結(jié)果,由結(jié)果可見,混合求解算法能很好地模擬流場結(jié)構(gòu),在交接面處流場過渡光滑。
圖9 基于結(jié)構(gòu)/非結(jié)構(gòu)網(wǎng)格混合求解圓柱繞流問題Fig.9 The flow past cylinder by hybrid solver
針對未來大型CFD軟件發(fā)展的趨勢,在綜合調(diào)研、分析國外優(yōu)秀CFD軟件的基礎(chǔ)上,設(shè)計了一套面向?qū)ο蟮?、適用于計算流體力學(xué)的軟件體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),并開發(fā)了集結(jié)構(gòu)網(wǎng)格解算器和非結(jié)構(gòu)網(wǎng)格解算器于一體的新一代CFD軟件平臺HyperFlow。面向?qū)ο蟮捏w系結(jié)構(gòu)使得軟件有極強(qiáng)的擴(kuò)展性和良好的維護(hù)性,很容易集成不同的物理模型解算器,為將來多學(xué)科耦合計算奠定堅實的基礎(chǔ)。
HyperFlow軟件目前業(yè)已集成了包含多種湍流模型的雷諾平均N-S方程的二階精度解算器,正在進(jìn)一步發(fā)展全流場結(jié)構(gòu)/非結(jié)構(gòu)混合求解、高階精度DG/FV混合求解等先進(jìn)算法。通過對典型算例的驗證,確保了軟件基本框架的正確性,為將來進(jìn)一步的發(fā)展打下了基礎(chǔ)。
[1]CFD resources at NASA Langley,Computational Fluid Dynamics:Codes development and applications.http://aaac.larc.nasa.gov/tsab/cfdlarc.
[2]BAKER T J.Mesh generation:art or science?[J].Prog.Aero.Sci.,2005,41:29-63.
[3]DENG X,ZHANG H.Developing high-order weighted compact nonlinear schemes[J].J.Comput.Phys,2000,165(1):22-44.
[4]LIU X D,OSHER S.Weighted essentially non-oscillatory schemes[J].J.Comput.Phys.,1994,115:200-212.
[5]JIANG G S,SHU C W.Efficient implementation of weighted ENO schemes[R].ICASE Report,1995,No.95-73.
[6]COCKBURN B,SHU C W.Discontinuous Galerkin methods[M].Berlin:Springer,2000.
[7]ZHANG L P,LIU W,HE L X,DENG X G.A class of hybrid DG/FV methods for conservation laws II:Two-dimensional cases[J].J.Comput.Phys.,2011,231:1104-1120.
[8]CHEN R F,WANG Z J.Fast,block lower-upper symmetric Gauss Seidel scheme for arbitrary grids[J].AIAA Journal,2000,38(12):2238-2245.
[9]ZHANG L P,WANG Z J.A block LU-SGS implicit dual time-stepping algorithm for hybrid dynamic meshes[J].Computers & Fluids,2004,33:891-916.
[10]ZHANG L P,ZHANG H X,CHANG X H,DUAN X P.A block LU-SGS implicit dual time-Stepping algorithm on hybrid dynamic meshes for bio-fluid simulations[J].Computers & Fluids,2009,38:290-308.
[11]SHAROV D,LUO H,BAUM J D,LOHNER R.Implementation of unstructured grid GMRES+ LUSGS method on shared-memory,cache-based parallel computers[R].2000,AIAA 2000-0927.
[12]STEVEN R,DOUGLAS R,MATTHEW F.The CGNS System[R].1998,AIAA 98-3007.
[13]LAFLIN K R,BRODERSEN O.Summary of data from the second AIAA CFD Drag Prediction Workshop[R].2004,AIAA 2004-0555.
[14]GUILMINEAU E,QUEUTEY P.A numerical simulation of vortex shedding from an oscillation circular cylinder[J].Journal of Fluids and Structures,2002,16:773-749.
[15]DUTSCH H,DURST F,BECHER.Low-Reynoldsnumber flow around an oscillating circular cylinder at low Keulegan-Carpenter number[J].J.Fluid Mech.,1998,360:249-271.
[16]張來平,劉偉,賀立新,等.基于靜動態(tài)重構(gòu)的高階DG/FV混合格式在二維非結(jié)構(gòu)網(wǎng)格中的推廣[J].計算物理,2011,28(2):309-319.