張欣超,彭 飛,2*,張洪輝
(1. 中車工業(yè)研究院有限公司,北京100071;2. 清華大學(xué)工業(yè)工程系,北京100084)
隨著人工智能、數(shù)字孿生、5G等技術(shù)的快速發(fā)展,以“數(shù)據(jù)+算力+算法”為核心的智能制造技術(shù)體系日趨成熟。工業(yè)多場(流-固-熱-電-磁-聲)仿真軟件作為大型裝備智能制造實(shí)現(xiàn)的必需使能工具,是企業(yè)數(shù)字化轉(zhuǎn)型和智能化升級的關(guān)鍵。流體通常為大型裝備(航天器、機(jī)車、汽車等)實(shí)際服役過程的激勵(lì)源,易引發(fā)氣動(dòng)噪聲、流致振動(dòng)、生熱等問題,為此類裝備的精準(zhǔn)設(shè)計(jì)、安全服役和失效評估帶來諸多困難。因此,如何實(shí)現(xiàn)大型裝備流場性能準(zhǔn)確模擬和量化預(yù)測具有重要的理論研究價(jià)值和現(xiàn)實(shí)意義。
OpenFOAM是一個(gè)完全由C++編寫的,在Linux下運(yùn)行,面向?qū)ο蟮挠?jì)算流體力學(xué)類庫。OpenFOAM跟商用的CFD軟件Ansys Fluent,CFX類似,但其作為開源,采用類似于我們?nèi)粘A?xí)慣的方法在軟件中描述偏微分方程的有限元體積離散化。目前很多學(xué)者對OpenFOAM理論進(jìn)行了研究。鄭澄遠(yuǎn)[1]對OpenFOAM中的核心代碼進(jìn)行了提取分析。孟德龍[2]將OpenFOAM移植到超級計(jì)算機(jī)神威太湖之光上,體現(xiàn)了OpenFOAM軟件的重要性。黃剛[3]基于OpenFOAM設(shè)計(jì)了一種兩相復(fù)雜流體數(shù)值求解器:FHRP-FOAM,用于研究二元聚合物混合液在相分離時(shí)的非平衡穩(wěn)態(tài)現(xiàn)象,同時(shí)分析了求解器的并行瓶頸,提出了基于異步規(guī)約通信的并行性能優(yōu)化方法。由于OpenFOAM的使用基本是在Linux或者Windows下虛擬機(jī)進(jìn)行,對于大部分Windows系統(tǒng)使用者需要花費(fèi)大量精力進(jìn)行學(xué)習(xí),因此在Windows為其開發(fā)界面是具有重要研究意義的。
針對熱-流-固耦合,一直是國內(nèi)外計(jì)算流體力學(xué)專家所研究的問題,其需要將復(fù)雜模型中的流場、溫度場及應(yīng)力場等多物理場之間的耦合關(guān)系進(jìn)行研究,已經(jīng)成為目前多場耦合的重點(diǎn)研究之一。Li等[4]基于不可壓縮流體的N-S方程及能量方程,對飛機(jī)電動(dòng)靜液壓執(zhí)行器中軸向柱塞泵閥板摩擦副進(jìn)行了熱-流-固耦合分析。趙飛云等人[5]針對吊籃結(jié)構(gòu)模型的熱-流-固耦合問題進(jìn)行了分析。黨旭光[6]從理論上對三個(gè)物理場耦合模型進(jìn)行了介紹,并在熱-流-固耦合的基礎(chǔ)上提出了如何建立其有限元仿真模型。Lei等[7]對超聲速流動(dòng)的復(fù)雜服役情況進(jìn)行了熱-流-固耦合的模型設(shè)計(jì)并進(jìn)行了分析。而OpenFOAM在進(jìn)行流-固耦合及熱-流-固耦合工作時(shí),往往需要與Windows系統(tǒng)下其他軟件(如Ansys等)結(jié)合使用,由于OpenFOAM輸出數(shù)據(jù)結(jié)構(gòu)格式固定,難以與其他軟件進(jìn)行數(shù)據(jù)交互,使得自動(dòng)化過程變得困難。
針對大型裝備,如機(jī)車、飛機(jī)、汽車等,對這類模型進(jìn)行流場分析時(shí),由于其服役情況基本相同,其仿真分析過程便逐漸趨向流程化。劉洪泉[8]采用ANSYS FLUENT軟件對飛行器進(jìn)行模擬,獲得模型外流場的溫度、壓力、密度、速度等物理參數(shù)的分布,并將流場結(jié)果導(dǎo)入進(jìn)行耦合模擬,獲得結(jié)構(gòu)場的物理參數(shù)分布。彭佳艷等人[9]通過對高速機(jī)車車頭運(yùn)動(dòng)過程進(jìn)行流程分析,研究分析了高速機(jī)車車頭壓力隨速度的變化情況,通過仿真得出高速機(jī)車車尾流線和湍流變化。黃森仁等人[10]針對某SUV車型的中后期造型階段的CAS面模型,經(jīng)過幾何清理和模型網(wǎng)格劃分,構(gòu)建了整車CFD計(jì)算模型并進(jìn)行了模擬仿真分析,通過分析結(jié)果指出了影響氣動(dòng)阻力的車身關(guān)鍵部件,為后續(xù)汽車外形的進(jìn)一步優(yōu)化指出了方向。彭昌明[11]討論了汽車外流場仿真分析方法,建立了汽車外流場有限元仿真模型并進(jìn)行了數(shù)值模擬,通過對汽車外流場參數(shù)分析來獲得汽車外流場空氣動(dòng)力學(xué)的主要特性并進(jìn)行優(yōu)化研究。目前大多數(shù)人都還采用商業(yè)軟件進(jìn)行流場計(jì)算,如ANSYS等,但其對于企業(yè)來說,使用成本較高,同時(shí)其開發(fā)接口存在諸多限制,二次開發(fā)的難度較大,不便于后續(xù)研究的進(jìn)行。
本文基于OpenFOAM交叉編譯可執(zhí)行文件及C++語言開發(fā)了大型裝備用流場仿真定制軟件平臺,旨在對大型裝備進(jìn)行流-固耦合及熱-流-固耦合中的流場及傳熱分析。針對大型裝備,其服役環(huán)境往往相差不大,在進(jìn)行類似大型裝備的流場分析時(shí),僅需要修改其模型即可。本研究將OpenFOAM集成到C++平臺下,通過界面參數(shù)輸入及按鈕驅(qū)動(dòng)來調(diào)用OpenFOAM,增強(qiáng)了其自動(dòng)化功能。同時(shí),便于研究者進(jìn)行模型、自研算法等源碼的集成,適用于行業(yè)知識沉淀,同時(shí)為后續(xù)軌道交通等裝備多場多層級多尺度性能自動(dòng)仿真及面向數(shù)字孿生下的產(chǎn)品正向設(shè)計(jì)和自主創(chuàng)新,提供了有效的使能工具。
鑒于OpenFOAM軟件基于Linux系統(tǒng)開發(fā),當(dāng)用于Windows環(huán)境與自編程序或力學(xué)仿真軟件(ANSYS、ABAQUS等)進(jìn)行流固耦合仿真時(shí),需實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)傳遞。故需實(shí)現(xiàn)OpenFOAM的交叉編譯來獲得其在Windows環(huán)境下的可執(zhí)行文件。
OpenFOAM的交叉編譯采用Ubuntu系統(tǒng)來實(shí)現(xiàn),其實(shí)現(xiàn)方法為:
在SourceForm頁面獲取OpenFOAM及ThirdParty壓縮包;
安裝交叉編譯所需要的安裝包,如mingw32、w3m、flex、wget、zlib等;
下載PatchesNBatches170壓縮包,并將其放入OpenFOAM目錄下進(jìn)行解壓,用于修補(bǔ)程序。
修改ThirdParty-1.7.0文件內(nèi)的Build-mingw44及Build-mingw45;
設(shè)置環(huán)境選項(xiàng);
運(yùn)行build-mingw44或build-mingw45,構(gòu)建MinGW交叉編譯器;
運(yùn)行OpenFOAM內(nèi)的wmake文件進(jìn)行交叉編譯;
將文件復(fù)制到Windows下,即可進(jìn)行使用。
交叉編譯實(shí)現(xiàn)路徑如圖1所示。
圖1 OpenFOAM交叉編譯實(shí)現(xiàn)圖
軟件編寫流程圖如圖2所示。
圖2 軟件設(shè)計(jì)思路流程圖
圖2中,軟件界面采用MFC進(jìn)行設(shè)計(jì),算例模板內(nèi)容包含于設(shè)計(jì)文件中,調(diào)用OpenFOAM則采用CreateProcess函數(shù)完成,輸入命令則通過管道技術(shù)完成。
OpenFOAM作為CFD開源軟件,主要包括前處理、求解器、后處理三個(gè)部分,其中,前處理主要包括計(jì)算模型的網(wǎng)格劃分,初始條件和邊界條件的設(shè)置,物性參數(shù)的設(shè)置、控制方程和離散方程的設(shè)置和離散方程的求解設(shè)置等,本文在前處理中,將網(wǎng)格細(xì)化參數(shù)、初始條件等設(shè)置為界面輸入,控制方程和離散方程內(nèi)容則采用模板內(nèi)容;求解器作為OpenFOAM的核心部分,每個(gè)求解器都可以對不同的流體類型進(jìn)行求解,其中包括不可壓縮流體求解器、燃燒求解器及應(yīng)力分析求解器等,本文以不可壓縮流體求解器中的simpleFoam求解器為例,進(jìn)行開發(fā),本文方亦適用于其他類型求解器。
OpenFOAM算例由三個(gè)文件夾組成,分別是0、constant及system,使用時(shí),需要調(diào)用這三個(gè)文件夾下的字典來進(jìn)行求解。
1) 外網(wǎng)格及模型網(wǎng)格劃分模板及參數(shù)設(shè)置
在OpenFOAM中,首先需要生成外部網(wǎng)格,外網(wǎng)格是采用blockMesh命令來生成,其調(diào)用的是blockMeshDict字典,該字典內(nèi)命令如表1所示[12]。
表1 blockMeshDict字典命令
對于本文研究對象,將block設(shè)定為大于飛機(jī)模型的模板,以保證模型改為機(jī)車或汽車時(shí),模型能夠在block里面,同時(shí)也方便操作者的使用。
生成外網(wǎng)格后,第二步是使用snappyHexMesh調(diào)用位于system文件夾下的snappyHexMeshDict文件,該文件用于在block劃分出所需要的復(fù)雜模型的網(wǎng)格,其主要字典命令如表2所示[12]。
表2 snappyHexMeshDict字典命令
其中,castellatedMeshControls主要用來控制網(wǎng)格切分,其主要信息如表3所示[12]。
表3 castellatedMeshControls字典命令
在snappyHexMeshDict文件中,大多數(shù)參數(shù)可以按照模板給定,但geometry以及refinementSurfaces需要按照實(shí)際進(jìn)行修改,本文將geometry及refinementSurfaces需要修改的內(nèi)容通過界面給定,geometry及refinementSurfaces使用如下:
geometry
{
chetif.stl ∥需要用到的stl模型文件名稱
{
type triSurfaceMesh;
name chetif; ∥按照模型文件名稱進(jìn)行修改
}
refinementSurfaces
{
chetif
{
level (3 5); ∥用于指定需要細(xì)化的STL幾何面及它們細(xì)化的最小和最大程度(
}
}
2)計(jì)算流程及數(shù)據(jù)文件模板
在進(jìn)行計(jì)算之前,需要對許多參數(shù)進(jìn)行設(shè)置,由于OpenFOAM需要設(shè)置的內(nèi)容過多,本文只對需要修改的重要參數(shù)進(jìn)行說明,其他參數(shù)均為OpenFOAM自帶摩托車算例模板內(nèi)容。
1) 修改速度及壓強(qiáng)
這兩個(gè)參數(shù)位于0文件夾下initialConditions,速度設(shè)置格式為(Ux Uy Uz),壓強(qiáng)通常設(shè)置為0,除此之外,由于采用的kOmegaSST湍流模型(可壓縮-多相),還需在該文件中設(shè)置k及ω,ω表示的是每單位體積單位時(shí)間的能量耗散,ω的倒數(shù)表示湍流的時(shí)間尺度,kω則類似于湍流耗散率ε。在本文中,這兩個(gè)參數(shù)均采用模板數(shù)值。
2) 動(dòng)力粘度系數(shù)v
該參數(shù)位于constant文件夾下的transportProperties文件中,通常設(shè)置為1.5e-5。
3) 求解器選則
該部分參數(shù)位于system文件夾中的fvSolution中,用于設(shè)置矩陣求解器、殘差及其他算法控制,本文求解器選擇simpleFoam求解器,其余參數(shù)均使用默認(rèn)值。
simpleFoam為OpenFOAM中穩(wěn)態(tài)不可壓縮流動(dòng)(層流或者RAS湍流)求解器,其壓力速度耦合采用的simple算法,simple算法的基本思想為:在流場仿真中,速度場是根據(jù)設(shè)定的壓力場通過離散形式的控制方程 求得的[13],其通過迭代方法求解耦合的Navier-Stokes方程。N-S方程表達(dá)式如(1)式所示[14]。
(1)
4) 離散格式
該部分參數(shù)位于system文件夾中的fvShcemes中,本文均采用默認(rèn)參數(shù)值。
5) controlDict設(shè)置
該文件位于system文件夾下,主要用于控制求解開始/終止時(shí)間,時(shí)間步及輸出數(shù)據(jù)參數(shù),本文采用輸出數(shù)據(jù)為acsii碼格式。
在完成snappyHexMesh后,算例文件下會(huì)生成1、2、3三個(gè)文件夾,代表三個(gè)時(shí)間步,此時(shí)需要將0文件夾中修改好的問價(jià)復(fù)制到3文件夾下,該部分操作通過C++代碼實(shí)現(xiàn)。
完成上述所有步驟后,向OpenFOAM中輸入simpleFoam命令使其開始計(jì)算,計(jì)算耗費(fèi)時(shí)間較長。
完成計(jì)算后,OpenFOAM會(huì)輸出網(wǎng)格信息及每個(gè)時(shí)間步的速度、壓強(qiáng)變化。網(wǎng)格信息位于constant文件下的polyMesh文件夾,主要有faces、neighbour、owner、points等文件,其中,points內(nèi)容為每個(gè)節(jié)點(diǎn)的坐標(biāo);faces內(nèi)容為組成每個(gè)面單元的節(jié)點(diǎn);owner內(nèi)容對應(yīng)于faces內(nèi)容,映射了面單元所屬于的體單元;neighbour內(nèi)容同樣對應(yīng)于faces,映射了面單元相鄰的體單元,該文件只包含內(nèi)部單元,不說包含邊界單元。OpenFOAM輸出文件內(nèi)容如圖3。
圖3 OpenFOAM輸出文件格式
由此,完成了OpenFOAM仿真計(jì)算及參數(shù)輸出,結(jié)果可視化可以選用ParaView等軟件進(jìn)行。
工具為OpenFOAM開發(fā)了友好的界面,讓操作者能夠直觀的通過界面輸入求解內(nèi)容并調(diào)用OpenFOAM進(jìn)行求解,同時(shí),本文為簡單的流場求解,如機(jī)車、汽車等提供了模板算例,使操作者能夠大大節(jié)約時(shí)間,解決了OpenFOAM操作繁瑣的問題。
軟件主要分為四個(gè)區(qū)域,第一個(gè)區(qū)域?yàn)楣ぷ髀窂皆O(shè)置區(qū)域,內(nèi)容為輸入OpenFOAM可執(zhí)行文件路徑、算例路徑、模型路徑及模型名稱;第二個(gè)區(qū)域?yàn)閰?shù)設(shè)置區(qū)域,內(nèi)容為速度、湍動(dòng)能、湍流頻率及運(yùn)動(dòng)粘度系數(shù)等參數(shù)的輸入;第三個(gè)區(qū)域?yàn)榍蠼鈪?shù)設(shè)置,內(nèi)容為網(wǎng)格細(xì)化程度、求解時(shí)長及輸出結(jié)果文件的時(shí)間間隔設(shè)置。
軟件的主要功能分為:
1) 界面部分:軟件界面通過C++及MFC編寫,通過將輸入到界面的OpenFOAM執(zhí)行文件、算例文件、模型文件路徑,及用于求解的速度等參數(shù)傳遞到求解器中進(jìn)行求解,并將結(jié)果文件輸出到指定文件夾。
2)求解部分:通過C++中的CreateProcess函數(shù)及管道技術(shù)來調(diào)用OpenFOAM可執(zhí)行文件,并向其傳遞運(yùn)算命令,求解部分則使用OpenFOAM內(nèi)的simpleFoam求解器。本文以SimpleFoam求解器為例進(jìn)行相關(guān)功能展示,其他求解器開發(fā)亦可采用該方式實(shí)現(xiàn)。
3) 數(shù)據(jù)處理:用于提取計(jì)算生成的流場壓力、速度、加速度、溫度等結(jié)果,并生成可視化所需圖像。
軟件功能流程圖如圖5所示。
軟件的操作流程較為簡單。在運(yùn)行軟件后,首先進(jìn)入一個(gè)初始操作界面,軟件操作界面如圖4所示。操作界面提供了OpenFOAM可執(zhí)行文件路徑輸入框、算例文件輸入框及STL模型文件輸入框,同時(shí)提供了速度、網(wǎng)格細(xì)化等級、求解時(shí)長及輸出數(shù)據(jù)時(shí)間間隔等參數(shù)輸入框。計(jì)算結(jié)果采用ParaView查看,并將圖像返回到軟件界面,如圖5所示。
圖4 軟件初始操作界面示意圖
圖5 軟件功能流程圖
采用上述軟件開發(fā)方法,實(shí)現(xiàn)了三類重要裝備流場性能仿真。
由于缺少航天器相關(guān)知識,無法獲得航天器在運(yùn)行時(shí)的環(huán)境參數(shù),本文選用飛機(jī)著陸時(shí)的環(huán)境參數(shù)及速度。在飛機(jī)著陸時(shí),由于硬著陸或不適當(dāng)?shù)闹懠夹g(shù),導(dǎo)致輪胎(由于空氣或陸地撞擊)及減震支柱產(chǎn)生較高應(yīng)力,導(dǎo)致它們更快磨損或斷裂,對飛機(jī)造成損壞,因此對飛機(jī)的仿真是十分有必要的。本文選用著陸速度為35m/s,湍動(dòng)能為8,湍流頻率為52,運(yùn)動(dòng)粘度系數(shù)為1.5e-05。計(jì)算后通過ParaView返回圖像如圖6所示。
圖6 飛機(jī)模型壓力場
電力機(jī)車作為鐵路運(yùn)輸?shù)闹匾巧?研究其運(yùn)動(dòng)時(shí)車頭壓力分布是十分有必要的。本文取電力機(jī)車運(yùn)行速度132km/h、湍動(dòng)能0.24、湍流頻率1.78、運(yùn)動(dòng)粘度系數(shù)1.5e-05[15]。在界面輸入?yún)?shù)后,通過ParaView輸出其壓力云圖,并返回到界面如圖7所示。
圖7 機(jī)車模型壓力場
對汽車而言,CFD對計(jì)算其車體所受壓力及汽車車身造型設(shè)計(jì)都具有重要作用,在高速運(yùn)行時(shí),汽車服役環(huán)境與電力機(jī)車相差很小,本文取汽車速度為120km/h[10],其余參數(shù)參照4.2節(jié)中電力機(jī)車參數(shù),計(jì)算后通過ParaView返回圖像如圖8所示。
圖8 汽車模型壓力場
1)開發(fā)的OpenFOAM界面軟件能夠?qū)崿F(xiàn)對常態(tài)服役情況的機(jī)車、汽車及飛機(jī)等交通工具進(jìn)行流場仿真并計(jì)算出其壓力場用于應(yīng)力計(jì)算。
2)軟件具有簡單、友好的界面,操作簡潔,使操作者能夠準(zhǔn)確在界面輸入求解來獲得壓力場結(jié)果。
3)通過上述算例可以發(fā)現(xiàn),對機(jī)車、汽車及飛機(jī)等進(jìn)行壓力場計(jì)算是十分有必要的,可以用來預(yù)測壓力是否會(huì)引起這些大型裝備外部的變形。
4)由于軟件局限性,只能對單一服役情況的機(jī)車、汽車及飛機(jī)進(jìn)行流場計(jì)算,并且在軟件開發(fā)過程中只使用了OpenFOAM中的simpleFoam求解器,OpenFOAM所包含的內(nèi)容還有很多沒有進(jìn)行開發(fā),需要進(jìn)一步改善。