高若辰,淮曉永,張志達(dá),李佰文
(華北計算機(jī)系統(tǒng)工程研究所,北京 100083)
計算流體力學(xué)(Computational Fluid Dynamics,CFD)是流體力學(xué)和計算機(jī)科學(xué)相互融合的一門新興交叉學(xué)科,其基本原理是把待求解的連續(xù)物理場(如速度場和壓力場)分解成有限個離散點的集合,然后建立控制流體流動的控制方程,通過求解方程組得到的近似解來模擬流體流動情況[1-2]。CFD 在汽車、船舶、航空航天、工業(yè)設(shè)計等多個領(lǐng)域具有廣泛的應(yīng)用[3-4]。
CFD 的基本結(jié)構(gòu)組成一般分為前處理、數(shù)值求解和后處理分析三部分。其中,網(wǎng)格生成是前處理的關(guān)鍵步驟之一,在計算流體力學(xué)的工業(yè)應(yīng)用實踐中,一般有40%~45%的時間耗費在前處理階段[5]。
網(wǎng)格生成是對連續(xù)計算流場的離散化,把一個連續(xù)的幾何區(qū)域分割成許多很小的單元,以便在離散的單元上進(jìn)行流場代數(shù)方程的數(shù)值求解[6]。為了獲得高精度的數(shù)值仿真解,需要將計算域劃分為盡可能小的網(wǎng)格單元,質(zhì)量好的網(wǎng)格通??梢赃_(dá)到千萬甚至上億的數(shù)量級。網(wǎng)格數(shù)量越多,對CPU、內(nèi)存等計算資源的需求也會越高。因此,復(fù)雜大型模型的網(wǎng)格生成計算需要耗費巨大的計算資源。
為了解決網(wǎng)格生成技術(shù)計算量大、耗時長的問題,一方面是優(yōu)化網(wǎng)格生成技術(shù),如動網(wǎng)格生成技術(shù)[7]、重疊網(wǎng)格生成技術(shù)[8]和自適應(yīng)網(wǎng)格生成技術(shù)[9-12];另一方面,利用云端的高性能服務(wù)器資源進(jìn)行網(wǎng)格生成計算也是工程技術(shù)發(fā)展的方向之一[13]。本文對云計算技術(shù)與網(wǎng)格生成技術(shù)進(jìn)行集成,設(shè)計開發(fā)了一個網(wǎng)格生成服務(wù)原型系統(tǒng),并基于OpenFOAM 網(wǎng)格生成器設(shè)計實現(xiàn)了一個面向云計算環(huán)境的網(wǎng)格生成服務(wù)原型軟件。
網(wǎng)格生成服務(wù)模型如圖1 所示。網(wǎng)格生成服務(wù)模型通過定義網(wǎng)格生成應(yīng)用協(xié)議,對網(wǎng)格生成API 方法進(jìn)行服務(wù)接口封裝,建立支持WAMP(Web Application Messaging Protocol,一種在Websocket 協(xié)議基礎(chǔ)上的應(yīng)用層協(xié)議標(biāo)準(zhǔn))的服務(wù)接口協(xié)議。
圖1 網(wǎng)格生成服務(wù)模型
網(wǎng)格生成的一般步驟如下:
(1)導(dǎo)入算例的幾何模型;
(2)選擇合適的網(wǎng)格劃分算法;
(3)根據(jù)網(wǎng)格劃分算法設(shè)置相應(yīng)的網(wǎng)格參數(shù);
(4)執(zhí)行網(wǎng)格劃分計算;
(5)檢查生成網(wǎng)格的質(zhì)量;
(6)根據(jù)求解器網(wǎng)格格式執(zhí)行相應(yīng)的網(wǎng)格類型轉(zhuǎn)換,轉(zhuǎn)換為可用于求解器的網(wǎng)格。
根據(jù)網(wǎng)格生成步驟分析,網(wǎng)格生成服務(wù)一般包括查詢可用的網(wǎng)格劃分方法、獲取網(wǎng)格劃分方法的網(wǎng)格設(shè)置參數(shù)內(nèi)容、設(shè)置算例的網(wǎng)格參數(shù)、劃分網(wǎng)格、檢查網(wǎng)格質(zhì)量、網(wǎng)格類型轉(zhuǎn)換等功能。面向網(wǎng)格生成服務(wù)需求,設(shè)計網(wǎng)格生成應(yīng)用協(xié)議MeshProtocol 的接口方法如表1 所示。
表1 MeshProtocol 應(yīng)用協(xié)議接口
基于MeshProtocol 網(wǎng)格應(yīng)用協(xié)議建立一個網(wǎng)格生成Server,通過ClientFactory 管理客戶端連接,當(dāng)Client 成功連接時則創(chuàng)建協(xié)議對象接收Client 請求執(zhí)行相應(yīng)計算功能。
基于客戶端/服務(wù)器模型的網(wǎng)格生成計算序列圖如圖2 所示。
圖2 基于服務(wù)的網(wǎng)格生成序列圖
(1)用戶選擇要仿真分析方案的幾何模型文件,客戶端導(dǎo)入其幾何模型文件;
(2)客戶端調(diào)用方法查詢服務(wù),查詢服務(wù)中可用的網(wǎng)格劃分方法;
(3)服務(wù)器返回可供用戶使用的劃分方法;
(4)客戶端根據(jù)網(wǎng)格劃分方法名稱初始化網(wǎng)格生成用戶界面的劃分方法選擇部分;
(5)用戶選擇一種網(wǎng)格劃分方法;
(6)客戶端調(diào)用獲取參數(shù)內(nèi)容服務(wù),查詢該網(wǎng)格劃分方法中各個設(shè)置參數(shù)的參數(shù)名、默認(rèn)值、參數(shù)說明等信息;
(7)服務(wù)器返回查詢到的網(wǎng)格設(shè)置參數(shù)內(nèi)容;
(8)客戶端根據(jù)網(wǎng)格設(shè)置參數(shù)內(nèi)容生成網(wǎng)格生成用戶界面的網(wǎng)格參數(shù)設(shè)置部分;
(9)用戶根據(jù)算例需求在網(wǎng)格設(shè)置界面中設(shè)置適當(dāng)?shù)木W(wǎng)格參數(shù),客戶端調(diào)用參數(shù)設(shè)置服務(wù)將參數(shù)上傳至服務(wù)器;
(10)客戶端調(diào)用網(wǎng)格劃分服務(wù)執(zhí)行網(wǎng)格劃分;
(11)服務(wù)器生成網(wǎng)格文件并返回網(wǎng)格劃分日志;
(12)若網(wǎng)格劃分成功,客戶端顯示生成的網(wǎng)格數(shù)據(jù)的圖像,否則顯示執(zhí)行錯誤信息,由用戶根據(jù)錯誤信息修正,直到執(zhí)行成功;
(13)客戶端調(diào)用網(wǎng)格檢查服務(wù)檢查網(wǎng)格質(zhì)量;
(14)服務(wù)器返回網(wǎng)格質(zhì)量檢查結(jié)果;
(15)客戶端調(diào)用網(wǎng)格轉(zhuǎn)換服務(wù),根據(jù)求解器網(wǎng)格格式執(zhí)行相應(yīng)的網(wǎng)格類型轉(zhuǎn)換;
(16)服務(wù)器返回轉(zhuǎn)換后的網(wǎng)格文件。
網(wǎng)格生成計算需要對算例進(jìn)行計算域的網(wǎng)格設(shè)置,如設(shè)置幾何縮放因子、計算域范圍、網(wǎng)格疏密和邊界部件等網(wǎng)格設(shè)置,不同劃分方法根據(jù)算法特征提供不同的參數(shù)設(shè)置。服務(wù)提供不同方法的交互參數(shù)模板規(guī)范,客戶端根據(jù)模板動態(tài)創(chuàng)建交互面板,給用戶提供交互界面。
網(wǎng)格參數(shù)設(shè)置的主要類型包括單值輸入和多參數(shù)表格輸入兩類組件。單值輸入組件應(yīng)當(dāng)定義組件類型、參數(shù)標(biāo)簽、參數(shù)類型、參數(shù)名、參數(shù)默認(rèn)值和參數(shù)的用戶幫助說明信息。具體代碼如下:
多參數(shù)表格輸入組件應(yīng)當(dāng)定義組件類型、表名、表頭內(nèi)容、參數(shù)類型、每行表格參數(shù),每行表格參數(shù)又應(yīng)分別設(shè)置參數(shù)標(biāo)簽、參數(shù)名、參數(shù)默認(rèn)值和參數(shù)的用戶幫助說明信息。具體代碼如下:
OpenFOAM 是由OpenCFD Ltd 于2004 年開發(fā)的一款免費、開源的CFD 軟件[14]。OpenFOAM 提供的典型網(wǎng)格劃分方法有blockMesh、snappyHexMesh 等。其中blockMesh用于生成簡單幾何結(jié)構(gòu)網(wǎng)格,snappyHexMesh 用于快速高效地劃分六面體+多面體網(wǎng)格[15]。采用上述網(wǎng)格服務(wù)模型,下面對OpenFOAM 的網(wǎng)格劃分方法進(jìn)行服務(wù)化封裝,實現(xiàn)了一個基于OpenFOAM 的網(wǎng)格生成服務(wù)原型系統(tǒng)ofMeshService。
ofMeshService 的原型框架組成如圖3 所示。其中:MeshProtocol 協(xié)議針對網(wǎng)格生成服務(wù)為客戶端提供的基本接口,包括劃分方法查詢接口、參數(shù)獲取接口、參數(shù)設(shè)置接口、網(wǎng)格劃分接口、網(wǎng)格檢查接口、網(wǎng)格轉(zhuǎn)換接口等;ws-link 提供基于websocket 的rpc 網(wǎng)絡(luò)通信基礎(chǔ)服務(wù);blockMesh、snappyHexMesh 是兩種網(wǎng)格劃分方法;checkMesh 提供網(wǎng)格質(zhì)量檢查處理;foamMeshToFluent 提供把OpenFOAM 網(wǎng)格格式轉(zhuǎn)換為Fluent 網(wǎng)格格式的轉(zhuǎn)換工具。
圖3 ofMeshService 網(wǎng)格服務(wù)框架
根據(jù)OpenFOAM 的參數(shù)文件分析,blockMesh 劃分方法提供的參數(shù)設(shè)置有幾何縮放因子、包圍盒大小、計算域范圍、網(wǎng)格疏密、網(wǎng)格單元膨脹率和邊界部件等。幾何縮放因子和包圍盒大小使用單值輸入組件,其余參數(shù)可分為計算域和邊界部件兩大類,分別用多參數(shù)表格輸入組件。客戶端解析blockMesh 的用戶交互參數(shù)模板信息后動態(tài)生成的參數(shù)設(shè)置界面如圖4 所示。
圖4 blockMesh 參數(shù)設(shè)置界面示意圖
snappyHexMesh 首先使用blockMesh 進(jìn)行初始化網(wǎng)格劃分,在此基礎(chǔ)上對網(wǎng)格做進(jìn)一步精細(xì)劃分,因此snappyHexMesh 劃分界面首先需要繼承blockMesh 界面的功能。此外,還需增加幾何細(xì)化等級、材質(zhì)點坐標(biāo)等參數(shù)設(shè)置,分別用多參數(shù)表格輸入組件定義??蛻舳私馕鰏nappy-HexMesh 的用戶交互參數(shù)配置信息后生成的參數(shù)設(shè)置界面如圖5 所示(較blockMesh 新增部分)。
圖5 snappyHexMesh 參數(shù)設(shè)置界面示意圖
如圖6 所示,將網(wǎng)格生成服務(wù)部署在云服務(wù)上,在云上創(chuàng)建服務(wù)器實例。服務(wù)器實例基本計算資源配置為CPU:FT2000+,16 核,32 GB 內(nèi)存。測試算例為摩托車外流場網(wǎng)格劃分,使用snappyHexMesh 劃分方法生成摩托車外流場計算域網(wǎng)格。
圖6 “云+端”的網(wǎng)格生成服務(wù)結(jié)構(gòu)
分別通過測試1、測試2 測試單機(jī)網(wǎng)格劃分、“云+端”網(wǎng)格劃分兩種情況下的網(wǎng)格劃分執(zhí)行時間。
測試1:對算例調(diào)用本地的snappyHexMesh 劃分方法,記錄其網(wǎng)格劃分執(zhí)行時間。
測試2:通過服務(wù)器上的網(wǎng)格生成服務(wù)執(zhí)行網(wǎng)格劃分,測試記錄網(wǎng)格劃分執(zhí)行時間。
測試結(jié)果如表2 所示。
表2 單機(jī)版與云服務(wù)版網(wǎng)格生成計算對比
測試結(jié)果表明,網(wǎng)格生成服務(wù)能夠給客戶端提供網(wǎng)格生成計算基本服務(wù)接口,滿足網(wǎng)格生成計算需求;由于利用了云上的高性能計算資源,有效提高了網(wǎng)格生成計算效率,減少了網(wǎng)格生成執(zhí)行時間,增強(qiáng)了用戶體驗友好性。
針對網(wǎng)格劃分計算量大、計算耗時長的問題,本文提出了一種面向云計算的網(wǎng)格生成服務(wù)模型,從而使網(wǎng)格生成可以部署在高性能的云服務(wù)器上,客戶端可以遠(yuǎn)程通過網(wǎng)格生成應(yīng)用協(xié)議與網(wǎng)格生成計算進(jìn)行通信。客戶端只負(fù)責(zé)GUI 人機(jī)交互,大規(guī)模的網(wǎng)格生成處理在云上高性能能服務(wù)器上執(zhí)行,從而提高了網(wǎng)格生成計算的效率,增強(qiáng)了網(wǎng)格生成處理計算用戶體驗的友好性。