李佰文 ,淮曉永 ,高若辰 ,陳 博 ,蔣金虎
(1.華北計算機系統(tǒng)工程研究所,北京 100083;2.一汽(南京)科技開發(fā)有限公司,江蘇 南京 211100;3.復(fù)旦大學(xué) 大數(shù)據(jù)研究院,上海 200433)
計算流體力學(xué)(Computational Fluid Dynamics,CFD)是流體力學(xué)、數(shù)值求解計算和計算機科學(xué)與技術(shù)結(jié)合的一門新興交叉學(xué)科[1]。目前CFD 已被廣泛應(yīng)用于汽車、船舶、航空航天等多個工業(yè)設(shè)計領(lǐng)域[2-3]。
CFD 的基本結(jié)構(gòu)一般分為前處理、數(shù)值求解和后處理分析三部分[4]。后處理分析是對求解器計算出的結(jié)果數(shù)據(jù)進行可視化,以直觀的可視化方式呈現(xiàn)給用戶[5]。
仿真模擬人員在后處理時往往需要面對大量抽象的時空物理量,整理分析這些數(shù)據(jù)將占據(jù)整個仿真模擬計算流程中的大部分時間。得益于計算機技術(shù)的發(fā)展,如今使用后處理軟件處理仿真模擬計算結(jié)果已經(jīng)非常靈活和直觀。但復(fù)雜大型的計算流體動力學(xué)仿真后處理仍需要耗費大量的計算資源[6]。另外,研究人員常需要在不同的平臺以不同的形式進行后處理分析。
針對目前CFD 軟件后處理所需計算量較大、操作平臺不靈活等問題,本文將后處理計術(shù)與云計算技術(shù)進行集成,設(shè)計了一個面向云計算環(huán)境的后處理服務(wù)模型,根據(jù)該模型基于ParaView 模塊設(shè)計實現(xiàn)了一個面向云計算環(huán)境的后處理服務(wù)原型軟件。
后處理分析的主要功能包括:殘差圖、等值面圖、等值線圖、矢量圖、流線圖、流場特征動畫、仿真分析報告等[7]。
用戶通過殘差圖了解求解過程中求解值的收斂特性;通過模型的等值面圖、流場切面等值面圖分析流場的速度、壓力、溫度、湍動能等在流場中的分布情況;通過速度矢量圖、流線圖分析了解流體在流場中運動特性[8];幀動畫將流場分析的動態(tài)過程保存,以方便用戶使用;仿真分析報告將較為全面的后處理分析結(jié)果整合在一個報告中供用戶查閱。
WAMP(Websocket Application Messaging Protocol)是一種建立在Websocket 之上可以進行發(fā)布、訂閱和遠程調(diào)用的通信協(xié)議[9]。
根據(jù)后處理服務(wù)的主要功能需求,可以設(shè)計一個后處理服務(wù)模型,模型包含了常用功能的應(yīng)用協(xié)議,客戶端使用支持WAMP 的通信協(xié)議向服務(wù)端發(fā)送包含不同應(yīng)用協(xié)議的信息即可完成對具體后處理服務(wù)的調(diào)用。最終實現(xiàn)后處理功能的服務(wù)化。
后處理服務(wù)模型如圖1 所示。
圖1 后處理服務(wù)模型
由后處理服務(wù)模型可知,由通信協(xié)議傳遞至服務(wù)端的信息,通過后處理服務(wù)應(yīng)用協(xié)議調(diào)用具體的后處理計算功能。
根據(jù)后處理服務(wù)模型可以設(shè)計后處理服務(wù)應(yīng)用協(xié)議類Postprocess Protocols,Postprocess Protocols 類中包含了后處理服務(wù)功能的應(yīng)用協(xié)議與實現(xiàn)方法,不同的方法使用不同的應(yīng)用協(xié)議,通過對類中協(xié)議與方法的添加與修改即可完成后處理服務(wù)功能的增加與修改。類中包含的主要協(xié)議及功能如表1 所示。
表1 后處理協(xié)議類的主要接口協(xié)議
基于后處理服務(wù)協(xié)議和后處理服務(wù)模型建立一個后處理服務(wù),通過Client Factory 管理客戶端連接,當(dāng)Client成功連接時則創(chuàng)建協(xié)議對象接收Client 請求執(zhí)行相應(yīng)計算功能。
基于本后處理服務(wù)模型的后處理分析流程時序圖如圖2 所示。
圖2 后處理分析流程時序圖
主要有如下步驟:
(1)客戶端獲取到流場工程列表,用戶點擊要打開的流場工程文件,服務(wù)器端執(zhí)行打開操作進行圖像渲染并將圖像發(fā)送給客戶端,客戶端顯示出幾何模型的圖像;
(2)用戶點擊想要使用的可視化功能按鈕,客戶端向服務(wù)器端發(fā)送新建可視化功能申請,服務(wù)器端接收到申請后將更新后的圖像信息和可視化功能相關(guān)的設(shè)置項信息傳送回客戶端,最后客戶端完成UI 界面的更新;
(3)用戶調(diào)整幾何模型及可視化功能的設(shè)置項,調(diào)整設(shè)置完成后應(yīng)用設(shè)置項,此時客戶端向服務(wù)區(qū)端發(fā)送更新設(shè)置項請求,服務(wù)器端更新圖像信息并將信息返回至客戶端,客戶端接收信息后完成UI 的更新;
(4)用戶點擊想要使用的后處理其他功能,如生成幀動畫等功能,客戶端向服務(wù)器端發(fā)送相應(yīng)的請求,服務(wù)器端接收到信息后執(zhí)行相關(guān)指令,執(zhí)行完成后將圖像與結(jié)果返回給客戶端??蛻舳嗽賵?zhí)行相應(yīng)的顯示功能。
在后處理服務(wù)模型和協(xié)議的基礎(chǔ)上,使用wslink 模塊[10]作為通信協(xié)議,以Postprocess Protocols 作為應(yīng)用協(xié)議,配合ParaView 等多個模塊,設(shè)計實現(xiàn)一個后處理服務(wù)架構(gòu)實例架構(gòu),如圖3 所示。
圖3 后處理服務(wù)架構(gòu)
本后處理服務(wù)運行在Python3.7 及以上版本,服務(wù)包含了后處理使用的各種模塊,如ParaView、Wslink、docx、ImageIO、Matplotlib 以及連接VTK 的庫包vtkmodules 等。
Wslink 基于autobahn 實現(xiàn)了WAMP 協(xié)議,可以實現(xiàn)Python Server 與JavaScript 之間的雙向通信。
ParaView 模塊是一個用于構(gòu)建科學(xué)可視化應(yīng)用服務(wù)的Python 模塊[11]。由于ParaView 模塊提供了較為完整的圖形處理接口,因此可以按需求使用ParaView 模塊中的所需可視化算法構(gòu)建后處理服務(wù)[12]。在本后處理服務(wù)中通過對ParaView 模塊的圖形處理接口,按照此前后處理服務(wù)模型的設(shè)計進行服務(wù)化封裝,實現(xiàn)了后處理中與圖形顯示及操控有關(guān)的功能,如創(chuàng)建過濾器、獲得設(shè)置項、應(yīng)用設(shè)置項等。
2.2.1 可視化功能相關(guān)設(shè)計項設(shè)計
根據(jù)需求本后處理服務(wù)需要提供等值面圖、等值線圖、速度矢量圖與流線圖4 種可視化功能,并且在可視化功能執(zhí)行后客戶端需要展示相應(yīng)的設(shè)置項,因此需要對主要設(shè)置項進行設(shè)計。
本服務(wù)中針對不同的可視化功能的主要設(shè)置項設(shè)計如表2 所示。
表2 可視化功能主要設(shè)置項類型
等值面圖中的等值面屬性可以選擇p 或u 等選項,等值面值是可以由用戶輸入的數(shù)值,服務(wù)在應(yīng)用設(shè)置后則根據(jù)所選屬性生成相應(yīng)數(shù)值的等值面。等值面可以以點陣或者面的形式進行顯示。
等值線圖通過設(shè)置截面中心點3 個數(shù)值和截面法向量3 個數(shù)值來確定截面在空間中的位置。在生成的截面上會顯示指定屬性如p、u 或者k 的等值線。可以通過設(shè)置一個或多個等值線值調(diào)整截面上的等值線。
速度矢量圖以箭頭方向和不同顏色表示經(jīng)過某些預(yù)設(shè)點的速度方向和大小,通常這些預(yù)設(shè)點的位置由求解計算過程確定。在速度矢量圖中可以設(shè)置矢量箭頭的放大比例和顯示類型。矢量圖顯示類型可以選擇面或者體兩種,面類型下可以設(shè)置速度顯示面的中心點和法向量,即展示包含在此面中的預(yù)設(shè)點的速度矢量箭頭。體類型則直接展示此模型中所有預(yù)設(shè)點的速度矢量箭頭。
流線圖顯示了流體質(zhì)點具體的流動軌跡,可以設(shè)置顯示類型和流線長度。顯示類型包括線、面、體3 種。在線類型下輸入一個點坐標(biāo)即可顯示通過此坐標(biāo)點的流線圖;在面類型下可以設(shè)置面中心點位置和法向量。此外在面或體類型下可以設(shè)置流線數(shù)量。
在完成本后處理服務(wù)提供的功能類型及對應(yīng)設(shè)置項的設(shè)計之后,即可進行可視化相關(guān)協(xié)議方法的設(shè)計與實現(xiàn)。
2.2.2 基于過濾器的可視化功能
下面以創(chuàng)建等值線圖功能為例,介紹功能方法的設(shè)計與實現(xiàn)。方法的實現(xiàn)主要包括三步:(1)對流場功能調(diào)用ParaView 模塊的生成切面圖過濾器展示某個流場切面;(2)在此切面內(nèi)調(diào)用ParaView 模塊的生成等值圖過濾器完成等值線圖的創(chuàng)建;(3)獲取功能的設(shè)置項。具體實現(xiàn)如下:
客戶端在選定工程的情況下通過通信協(xié)議向服務(wù)端發(fā)送創(chuàng)建等值線圖消息,消息中包含工程參數(shù);服務(wù)端收到消息開始執(zhí)行創(chuàng)建等值線圖功能,首先解析出客戶端發(fā)送協(xié)議中的工程參數(shù),根據(jù)參數(shù)創(chuàng)建對象,將此對象設(shè)置為活動實例,讀取流場文件的數(shù)據(jù)信息,然后調(diào)用paraview.simple 中的創(chuàng)建流場切面過濾器方法為活動用例創(chuàng)建流場切面過濾器;從流場數(shù)據(jù)中根據(jù)默認等值線屬性獲得該屬性值的數(shù)值范圍,在數(shù)值范圍取N 等分值,調(diào)用paraview.simple 中的創(chuàng)建流場等值圖過濾器方法,并將N 等分值作為創(chuàng)建等值線過濾器的等值線值;調(diào)用simple.Show()和simple.Render()方法更新VTK 模塊顯示的圖像;使用等值線圖實例對象下的ListProperties方法獲取對象中的所有屬性名,然后循環(huán)遍歷屬性列表,根據(jù)列表中的值執(zhí)行GetProperty 方法獲得列表中屬性值對應(yīng)的具體設(shè)置項,將其中的屬性值和設(shè)置項組成字典;最后將執(zhí)行結(jié)果和字典發(fā)送給客戶端。
程序基本流程圖如圖4 所示。
圖4 創(chuàng)建等值面圖程序流程圖
2.2.3 生成殘差圖功能
當(dāng)用戶調(diào)用生成殘差圖協(xié)議方法時,服務(wù)端將生成能夠反映選定工程在求解計算過程中求解值收斂情況的殘差圖。
方法執(zhí)行后,首先打開當(dāng)前流場工程中的殘差數(shù)據(jù)文件,讀取文件中的數(shù)據(jù),將表頭儲存并根據(jù)表頭將數(shù)據(jù)保存在列表中,再根據(jù)時間變量進行行列轉(zhuǎn)換等預(yù)處理得到最終的繪圖列表,對繪圖列表調(diào)用Matplotlib 的plot 方法進行二維繪圖,最后將圖像發(fā)送給客戶端進行展示。
2.2.4 幀動畫功能
幀動畫根據(jù)實現(xiàn)反映了流場的動態(tài)變化情況,實現(xiàn)中使用ParaView 模塊實現(xiàn)了流場文件的讀取,使用ImageIO模塊完成場景動畫的保存。
主要實現(xiàn)如下:方法執(zhí)行后首先讀取當(dāng)前工程的流場數(shù)據(jù),獲得流場中的動畫和動畫步長;然后根據(jù)預(yù)設(shè)數(shù)據(jù)設(shè)置具體的屬性與設(shè)置項,創(chuàng)建一個用來顯示的觀察器,將活動用例的數(shù)據(jù)顯示在觀察視角當(dāng)中,調(diào)整觀察視角的方位;再把所有動畫步數(shù)的視角數(shù)據(jù)存入數(shù)組,調(diào)用ImageIO 模塊的方法將數(shù)組中的數(shù)據(jù)保存到本地gif 文件;最后將幀動畫數(shù)據(jù)打包返回客戶端。程序基本流程圖如圖5 所示。
圖5 生成幀動畫程序流程圖
2.2.5 生成仿真分析報告功能
仿真分析報告較為全面地整合了后處理分析結(jié)果,在功能實現(xiàn)中使用了paraview-docx 模塊完成文檔文件的創(chuàng)建與內(nèi)容的添加。如使用Document 方法創(chuàng)建文檔對象,使用add_heading 與add_paragraph 方法添加段落和標(biāo)題,使用save 方法保存文檔。主要實現(xiàn)步驟如下:
調(diào)用docx 模塊中的Document 創(chuàng)建文檔對象;根據(jù)網(wǎng)格劃分數(shù)據(jù)和求解器參數(shù)設(shè)置生成工程概述段;讀取殘差圖數(shù)據(jù)生成工程計算收斂圖,將圖片添加在殘差圖段落;在默認設(shè)置項下獲取各個可視化分析圖并保存在可視化分析段落。
將后處理服務(wù)部署在云端,用戶可以通過客戶端實現(xiàn)后處理分析功能。
這里通過一個基于React 框架的Web 后處理分析客戶端對后處理分析服務(wù)功能進行測試,選擇打開一個工程,如摩托車外流場仿真工程,驗證創(chuàng)建等值面圖、等值線圖、矢量云圖、流線圖等可視化分析功能的可用性,然后驗證生成殘差圖、幀動畫和生成報告等功能的響應(yīng)情況。
其中,生成等值面圖及等值線圖功能測試結(jié)果如圖6、圖7 所示。
經(jīng)過測試,面向云計算環(huán)境的后處理服務(wù)能夠給客戶端提供后處理計算相關(guān)接口,滿足了后處理分析需求;由于利用了云上的高性能計算資源,后處理計算效率也得到了有效提高。
圖6 等值面圖測試結(jié)果
圖7 等值線圖測試結(jié)果
本文通過對ParaView 等模塊進行服務(wù)化封裝,設(shè)計實現(xiàn)了一種基于云計算環(huán)境的后處理服務(wù)框架。這種“云+端”的后處理服務(wù)架構(gòu)同時具有服務(wù)器端的高性能和客戶端的便捷性,實現(xiàn)了云端協(xié)同的優(yōu)化計算,且具有良好的可擴展性。