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