車霖源
(上海船舶運輸科學(xué)研究所 a.航運技術(shù)與安全國家重點實驗室; b.航運技術(shù)交通行業(yè)重點實驗室,上海 200135)
在船型優(yōu)化工作中,計算流體力學(xué)(Computational Fluid Dynamics,CFD)工具已成為不可或缺的計算工具之一。為獲得性能優(yōu)良的船舶線型,需借助經(jīng)驗或優(yōu)化算法對多個方案進行對比。CFD計算需耗費大量的計算資源,一般在計算機集群或?qū)S玫姆?wù)器上通過相應(yīng)的軟件實現(xiàn),這些高性能計算機通常采用linux系統(tǒng)。CFD計算對CFD工具使用者有較高的要求,不僅要求其熟悉計算機系統(tǒng),而且要求其能很好地把握軟件的參數(shù)設(shè)置,保證計算的合理性和準確性。在實際工作中,這會影響一部人使用CFD工具的效率,任務(wù)多時還會出現(xiàn)浪費計算資源的問題,影響工作進度。因此,需在船型優(yōu)化設(shè)計人員與計算工具之間建立一座“橋梁”,使船型優(yōu)化設(shè)計人員將更多精力投入到優(yōu)化設(shè)計工作中,減少對計算工具的關(guān)注。
R語言的Shiny包可用來構(gòu)建交互式網(wǎng)頁,便于部署,能滿足常用的交互式應(yīng)用的需求。OpenFOAM是一款CFD開源平臺,從本質(zhì)上看是采用C++語言編寫的面向?qū)ο蟮念悗?,具有極強的擴展性和強大的底層數(shù)學(xué)場量操作類庫,可實現(xiàn)大規(guī)模的并行計算。OpenFOAM已在多個領(lǐng)域得到深入研究,在船舶水動力領(lǐng)域得到了廣泛應(yīng)用。本文以O(shè)penFOAM為求解器,以Shiny為操作界面界面,以linux腳本為控制后臺,建立針對船模阻力計算的遠程應(yīng)用。
基本技術(shù)路線示意見圖1。首先,用戶利用瀏覽器輸入計算參數(shù),并將其與幾何文件一同上傳至服務(wù)器端;隨后,腳本執(zhí)行相關(guān)動作,實現(xiàn)計算和信息展示等功能。
圖1 基本技術(shù)路線示意
R-Shiny在整個技術(shù)路線中起到傳遞數(shù)據(jù)和信息的作用,連接用戶與服務(wù)器。輸入數(shù)據(jù),在服務(wù)器端生成可供腳本使用的,用于生成OpenFOAM計算策略的參數(shù)文件。調(diào)用生成的結(jié)果文件和計算排隊文件,返回至瀏覽器,供用戶參考。
腳本功能分為3部分,即:執(zhí)行計算;監(jiān)測計算收斂情況,控制OpenFOAM;收集、匯總信息。提交計算方案之后,腳本探測到新的文件,調(diào)用OpenFOAM執(zhí)行網(wǎng)格劃分和計算等任務(wù)。同時,根據(jù)計算的阻力時歷數(shù)據(jù)判斷計算是否收斂,以及是否結(jié)束本案例的計算,實現(xiàn)對多個方案的自動、連續(xù)計算,生成計算結(jié)果和多個方案的計算排隊文件。
OpenFOAM設(shè)置以模板的形式存儲在服務(wù)器內(nèi),其中參數(shù)設(shè)置隨計算條件的改變而改變,計算條件來源于用戶提交的參數(shù)文件。腳本自動生成供OpenFOAM計算使用的參數(shù),如邊界條件和網(wǎng)格劃分參數(shù)等。
Shiny的代碼由ui和server組成,其中:ui用于設(shè)計瀏覽器展示內(nèi)容的布局和用戶交互的信息;server用于處理相應(yīng)的邏輯關(guān)系,對輸入的信息進行處理,對輸出的信息進行控制,對用戶的操作作出反應(yīng),產(chǎn)出對應(yīng)的結(jié)果。
網(wǎng)頁界面由信息輸入和信息展示2個區(qū)域組成。信息輸入?yún)^(qū)域見圖2,計算參數(shù)可通過讀取文件和在頁面中填寫2種方式提交;上傳的幾何文件為stl格式的文件,可通過三維建模軟件(如Rhino)導(dǎo)出獲得。通過下載數(shù)據(jù)功能可獲得當前輸入的參數(shù)文件和結(jié)果查詢編號,方便下次計算時直接讀取參數(shù)文件,不需要重新在界面中填寫;同時,可通過查詢編號查詢本方案的計算結(jié)果和排隊情況。圖3為查詢編號輸入?yún)^(qū)域。
當計算完成之后,輸入查詢編號即可獲得計算結(jié)果,包括阻力值和收斂過程。在阻力計算中采用半船,圖4為半船的阻力時歷曲線,表1為處理后的全船阻力。若查詢的方案沒有計算結(jié)束或沒有開始計算,則顯示該方案的排隊情況。
圖2 信息輸入?yún)^(qū)域
圖3 查詢編號輸入?yún)^(qū)域
圖4 半船的阻力時歷曲線
表1 處理后的全船阻力
server負責從讀入的文件或界面中獲取數(shù)據(jù),并將其轉(zhuǎn)換為可被腳本讀入的格式,同時將參數(shù)文件和幾何文件放在指定位置,供腳本調(diào)用。對于信息展示的處理,則是從指定位置讀取結(jié)果文件,并將其傳遞給網(wǎng)頁。
在執(zhí)行計算的腳本中,參考OpenFOAM的官方示例,將計算過程分為幾何特征提取、背景網(wǎng)格劃分、多次局部加密、有幾何物體的網(wǎng)格劃分、網(wǎng)格檢查、多相流設(shè)置、計算域拆分、并行計算和計算結(jié)果組合等過程。由于要在不同情況下應(yīng)用計算策略,在執(zhí)行上述計算任務(wù)之前,根據(jù)提交的參數(shù)文件獲得OpenFOAM配置文件中不同參數(shù)的數(shù)值,并對模板文件進行替換,得到當前算例的完整計算文件。具體腳本執(zhí)行計算流程見圖5。
在進行數(shù)值模擬過程中,需高效利用計算資源和時間資源,及時判斷模擬結(jié)果是否穩(wěn)定收斂,結(jié)束當前過程,并對后續(xù)方案進行計算。OpenFOAM中的控制文件controlDict可在計算過程中進行修改并立即起效。利用該特性修改controlDict中的endTime,使計算立即結(jié)束。
利用腳本監(jiān)測計算總阻力,以最新的300個計算步的變異系數(shù)為評估變量,設(shè)定的準則為變異系數(shù)等于0.1。變異系數(shù)用于反映一組數(shù)據(jù)的離散程度,本文借此概念評估計算阻力的振蕩情況,進而判斷計算是否穩(wěn)定。變異系數(shù)的表達式為
(1)
判斷標準為
<01
(2)
若當前進行了1 000個時間步的計算,則計算700~1 000個時間步內(nèi)總阻力的變異系數(shù),判斷其數(shù)值是否小于0.1。若該變異系數(shù)的值小于0.1,則自動修改配置文件controlDict中的endTime字段數(shù)值為當前對應(yīng)的模擬時間,結(jié)束本方案的計算;若該變異系數(shù)的值大于等于0.1,則繼續(xù)計算,以此類推,直至計算穩(wěn)定。腳本處理流程見圖6。
圖5 腳本執(zhí)行計算流程
圖6 腳本處理流程
計算結(jié)束之后,原始的計算結(jié)果被存儲到了服務(wù)器中,用戶無法直接讀取,需通過Shiny將計算結(jié)果傳遞到瀏覽器端,實現(xiàn)信息展示。腳本對阻力時歷結(jié)果中的最后300個時間步的數(shù)據(jù)取平均值,將其存儲在相應(yīng)的文件中和特定的位置上,內(nèi)容包括壓阻力、黏性阻力和總阻力。同時,腳本控制Gnuplot繪圖工具,處理得到阻力時歷曲線,為用戶提供收斂過程,幫助其判斷計算是否正常。
獲取多個方案的計算排隊情況有助于用戶合理規(guī)劃工作時間。應(yīng)用腳本監(jiān)測待計算文件夾內(nèi)的方案和正在計算的方案,形成排隊情況信息匯總,以表格的形式在瀏覽器中展示。
OpenFOAM的配置文件包含眾多內(nèi)容,軟件的使用門檻較高。本文針對船舶阻力計算,基于大量水池試驗,總結(jié)一套可靠的計算策略,建立相應(yīng)的模板文件。用戶無需知道參數(shù)如何設(shè)置,在瀏覽器中填寫好計算條件之后,腳本自動生成符合當前方案的配置文件。
下面以網(wǎng)格加密的參數(shù)設(shè)置說明如何利用模板和腳本生成計算配置文件。文件topoSetDict.1用于對船體周圍的某個長方形區(qū)域進行1次加密標記,因此區(qū)域的大小與船模尺度有關(guān),否則將導(dǎo)致加密區(qū)域過大,網(wǎng)格數(shù)量過多,或沒有將船模包圍進去,在劃分網(wǎng)格時出現(xiàn)錯誤。
模板中topoSetDict.1文件中的box字段按以下方式編寫:
box (x1min y1min-3) (x1max 0 z1max);
腳本中采用以下命令:
sed-i "s/x1min/$x1min/g" system/topoSetDict.1
sed-i "s/x1max/$x1max/g" system/topoSetDict.1
將模板中的x1min和x1max替換為對應(yīng)的數(shù)值。x1min和x1max是與船模長有關(guān)的變量,本文取
x1min=-pp
(3)
x1max=1.5pp
(4)
式(3)和式(4)中:pp為船模垂線間長,根據(jù)實船垂線間長和縮尺比計算得到。其他的字段采用類似的方式替換,最終獲得用于計算的配置文件。
首先校核計算精度,為后續(xù)改進提供基礎(chǔ)。從上海船舶運輸科學(xué)研究所的模型試驗數(shù)據(jù)庫中隨機抽取31艘船的試驗數(shù)據(jù)作為樣本,選擇設(shè)計吃水和設(shè)計航速狀態(tài),采用該應(yīng)用進行計算校核,得到的誤差分布柱形圖和核密度估計曲線見圖7。
圖7 誤差分布柱形圖和核密度估計曲線
計算誤差基本集中在±4%以內(nèi),占總計算樣本的93.5%,且在0附近比例最高,均值為-0.42%,說明該應(yīng)用對船模阻力具有很好的模擬效果,可作為船型優(yōu)化和性能評估的輔助工具。
在該應(yīng)用發(fā)布之后的20 d內(nèi)共對4艘船的近50個方案進行了計算,包括1艘客船、2艘多用途船和1艘大型散貨船,幫助完成了相關(guān)的優(yōu)化選型和性能評估工作。
為合理利用計算資源,方便船型優(yōu)化設(shè)計人員使用CFD工具評估船舶性能,結(jié)合R-Shiny和linux腳本實現(xiàn)了基于OpenFOAM的遠程應(yīng)用開發(fā)。該應(yīng)用在輸入計算參數(shù)和幾何文件之后能自動配置好OpenFOAM所需文件并執(zhí)行計算;計算過程中可判斷收斂情況,在保證結(jié)果穩(wěn)定的情況下,結(jié)束當前算例并進行后續(xù)計算。該應(yīng)用能極大地提高計算資源的使用效率,縮短不必要的模擬時間;同時,能為用戶反饋必要的信息,實現(xiàn)關(guān)鍵信息展示。
該應(yīng)用使用簡單,計算精度高,展示結(jié)果清晰,方便用戶進行批量多方案計算;輸入的參數(shù)較少且能重復(fù)利用,同時對輸入的幾何文件要求低,無需額外進行修整。
本文涉及到的服務(wù)器端的信息是在文件中存儲和傳遞的,在處理過程中略顯繁瑣。后續(xù)將考慮采用數(shù)據(jù)庫技術(shù),通過數(shù)據(jù)庫實現(xiàn)信息存儲,高效地管理輸入信息和輸出信息。此外,可融入幾何變形工具和優(yōu)化算法,實現(xiàn)自主或半自主式優(yōu)化,提升船型優(yōu)化效率。