孫豪宇,鄔群勇*
(1. 福州大學(xué)空間數(shù)據(jù)挖掘與信息共享教育部重點實驗室,福建 福州 350108;2. 衛(wèi)星空間信息技術(shù)綜合應(yīng)用國家地方聯(lián)合工程研究中心,福建 福州 350108;3. 數(shù)字中國研究院(福建),福建 福州 350108)
近年來,城市空氣污染問題愈演愈烈[1],直接影響到人們的身體健康[2]。研究城市街區(qū)大氣污染源擴散規(guī)律,進(jìn)而預(yù)防或者減少城市中大氣污染物,對于改善和保護(hù)人類的生存環(huán)境具有重要意義。
隨著計算機技術(shù)的迅猛發(fā)展,計算流體動力學(xué)(Computa-tional Fluid Dynamics,CFD)技術(shù)得到飛速進(jìn)步與成熟[3]。Fluent是一款國際流行的商用CFD軟件包,在流體、熱傳遞和化學(xué)反應(yīng)等領(lǐng)域有廣泛的應(yīng)用。Fluent對污染物傳輸和擴散有較好的模擬能力[4-6],但是,F(xiàn)luent為適應(yīng)各個領(lǐng)域的需求,設(shè)計了復(fù)雜的面板參數(shù),計算中需要用戶輸入的操作較多且專業(yè)要求較高,導(dǎo)致操作困難。因此,研究人員基于Fluent軟件擴展衍生了針對于不同領(lǐng)域的易于操作和理解的仿真平臺。如李湘平等[7]實現(xiàn)電磁軌道發(fā)射彈丸內(nèi)部磁場仿真;宋先知等[8]開發(fā)熱力射流調(diào)制與流場計算分析軟件;李慧等[9]研發(fā)地鐵通風(fēng)系統(tǒng);鄭朝亮等[10]實現(xiàn)裝甲車輛紅外仿真程序;Mengqi Li等[11]實現(xiàn)油罐車流場分析及仿真;Qiang Liu等12]研發(fā)板坯連鑄機二冷系統(tǒng)的凝固與優(yōu)化研究平臺。這些仿真平臺主要是對Fluent最基本的日志文件或者用戶自定義函數(shù)進(jìn)行簡單修改操作,并未真正實現(xiàn)基于Fluent二次開發(fā)的接口,因此,軟件的功能可擴展和維護(hù)性較差。
本文的創(chuàng)新在于提出GUI命令流參數(shù)化設(shè)計方法及TUI命令流封裝方法,解決了Fluent命令編寫困難,復(fù)雜和可讀性差的問題,為不同領(lǐng)域Fluent定制開發(fā)提供統(tǒng)一接口。城市街區(qū)大氣污染擴散仿真軟件(PSDS)具有參數(shù)設(shè)置少,功能可擴展,操作簡單,良好維護(hù)性等特征,可以簡單快速的實現(xiàn)城市街區(qū)大氣污染擴散仿真。
Fluent仿真首先需要解析以網(wǎng)格劃分文件(.msh)形式存儲的計算幾何模型,獲取邊界條件等計算幾何模型參數(shù)信息,其次根據(jù)Fluent提供的GUI和TUI兩種命令流設(shè)置模擬參數(shù)[7]。本文解析計算幾何模型文件,研究GUI命令流參數(shù)化設(shè)計方法及TUI命令流封裝方法,實現(xiàn)對Fluent二次開發(fā)的仿真簡化方法。
計算幾何模型文件(.msh)是Fluent進(jìn)行計算的基礎(chǔ)和前提,也是獲取計算幾何模型信息的必要途徑。計算幾何模型文件實質(zhì)上是以.msh為后綴的文本文件,按照lisp語句的結(jié)構(gòu)進(jìn)行組織。表1是計算幾何模型文件的數(shù)據(jù)類型和組織格式。
計算幾何模型文件主要是由維度、節(jié)點、面、單元和區(qū)域構(gòu)成,節(jié)點組成面,面圍成單元,單元組成區(qū)域。通過表1數(shù)據(jù)類型及組織格式對文件進(jìn)行讀取,可以獲取計算幾何模型的邊界條件等信息,為Fluent計算模型的封裝提供必要輸入。
作為設(shè)置邊界條件的輸入?yún)?shù),需要自動獲取計算幾何模型中各種邊界類型的邊界名,基于以上對于.msh文件的解析,邊界在.msh文件中的組織類似(45 (7 pres-sure-outlet outlet1)()),其中45為標(biāo)識數(shù)、7為邊界id、pressure-outlet為邊界類型、outlet1為邊界名。因此,本文提出逐行讀取文件流,對文件中以(45開頭的行字符串進(jìn)行截取,得到計算幾何模型的邊界類型及邊界名。偽代碼如下:
streamReader獲取逐行讀取網(wǎng)格文件流
While(line為空)
if(line的開頭字符串為:”(45”)
boundary[0]賦值邊界類型
boundary[1]賦值邊界名
將boundary二維數(shù)組添加到boundarys列表
表1 計算幾何模型文件數(shù)據(jù)類型及組織格式
Fluent GUI(Graphical User Interface)腳本命令流可以通過兩種方式獲得。一是通過操作Fluent軟件,而生成記錄每一步操作的日志文件(Journal File),這種方式可以方便的獲取腳本命令流,但因Fluent軟件的復(fù)雜性,對其進(jìn)行修改非常繁瑣;二是使用文本編輯器用Scheme語言編寫,這種方式編寫腳本命令工作量巨大且復(fù)雜。本文研究GUI命令流參數(shù)化設(shè)計方法,通過界面編程的方式自動編寫腳本命令,既解決腳本命令編寫復(fù)雜,又能解決腳本命令修改困難的問題。
Fluent GUI以命令流的形式將計算過程中的每一步操作記錄在日志文件中(.jou),通過研究Fluent生成的日志文件,其命令流組織規(guī)則如下:
第一,每種操作函數(shù)的第一個參數(shù)為文本類型的參數(shù),這個參數(shù)用于指定操作位置。
第二,每條操作函數(shù)命令后有一條激活函數(shù)命令(cx-gui-do cx-activate-item)。
第三,操作函數(shù)中若是有列表類型的參數(shù),且列表參數(shù)值為索引號,那么可以用對應(yīng)的實際名稱替換該索引號。
基于GUI命令流組織規(guī)則,搭建交互窗口進(jìn)行參數(shù)傳遞,通過文件流寫入方式實現(xiàn)journal文件的參數(shù)化自動生成。如對于穩(wěn)態(tài)計算中迭代步數(shù)設(shè)置的腳本命令,可以利用上述方法思想編寫偽代碼如下:
streamWriterLine("(cx-gui-do cx-set-integer-entry "Run Calculation*Table1*IntegerEntry10(Number of Iterations)" "+numberOFIterations+")");
streamWriterLine ("(cx-gui-do cx-activate-item "Run Calculation*Table1*IntegerEntry10(Number of Iterations)")");
其中streamWriterLine為文件流寫入方法,numberOFIterations為傳入的迭代步數(shù)參數(shù),這就是將參數(shù)化思想融入腳本命令編程的體現(xiàn)。
通過GUI命令流參數(shù)化設(shè)計方法可以實現(xiàn)對GUI腳本命令進(jìn)行參數(shù)化編程,進(jìn)而開發(fā)出符合針對各領(lǐng)域的仿真平臺。但是,GUI命令流組織比較松散,很難將其封裝為可以通用的方法模塊進(jìn)行調(diào)用,而且GUI命令需要調(diào)用窗口顯示,執(zhí)行效率相對較低。Fluent TUI(Text-based User Interface)命令可以直接在Fluent的控制臺(Console)窗口中輸入并執(zhí)行,也可以在文本編輯器中編寫命令代碼并保存為日志文件(.jou),由Fluent讀取日志文件來執(zhí)行文件中的命令,可以很好的解決GUI存在的以上問題。
TUI腳本命令由目錄和命令組成,即首先選擇目錄,然后執(zhí)行該目錄下相應(yīng)的命令,F(xiàn)luent TUI提供了14大類一級目錄,分別對應(yīng)功能如表2。
表2 Fluent TUI一級目錄命令
本文提出將TUI命令封裝為一系列簡單易用的方法模塊,解決TUI命令可讀性差且編寫復(fù)雜的問題。TUI命令由目錄和目錄下的命令函數(shù)以及命令函數(shù)的輸入?yún)?shù)值三個部分組成,輸入?yún)?shù)值最常用的有yes(縮寫y),no(縮寫n)和文本,yes和no用于詢問是否選擇某操作(方法),文本用于設(shè)置實數(shù)值等。參照表2以及TUI命令的組成規(guī)則,可以得到Fluent功能對應(yīng)的TUI命令。如定義邊界條件的目錄為/define/boundary-conditions/,定義速度入口邊界條件的命令函數(shù)為velocity-inlet,命令函數(shù)需要的輸入?yún)?shù)根據(jù)模型選擇的不同而不同,如湍流模型選擇層流,其它模型方程全部關(guān)閉,則需要輸入的參數(shù)有邊界名、速度方法(三種)、參考框架(兩種)、速度大小和初始表壓。如果設(shè)置邊界名為inlet1的速度入口邊界條件,速度方法選擇第三種,參考框架選擇第一種,速度大小為10m/s,初始表壓為101325pa,則對應(yīng)的參數(shù)為inlet1 n n y y n 10 n 101325。因此完整的TUI命令為:/define/boundary-conditions/ velocity-inlet inlet1 n n y y n 10 n 101325。
通過以上研究發(fā)現(xiàn)對于TUI命令的使用有兩個主要的難點:一是參數(shù)非固定,根據(jù)不同情況會發(fā)生相應(yīng)的變化;二是參數(shù)多用n y這樣的值,可讀性差,不利于理解和編寫。本文提出利用面向?qū)ο蠓椒▽崿F(xiàn)TUI腳本命令的封裝,將各功能的TUI命令流封裝為簡單易用的功能對象。具體封裝流程為:根據(jù)封裝的功能對象所包含的方法設(shè)計各接口類,逐一實現(xiàn)各接口中的方法,形成實現(xiàn)類;將接口中各方法復(fù)雜的輸入?yún)?shù)封裝為參數(shù)類,便于方法調(diào)用,最后得到繼承于實現(xiàn)類的功能對象類,該類中方法的參數(shù)為便于調(diào)用的參數(shù)封裝類。
以設(shè)置邊界條件TUI命令的封裝過程為例闡述以上封裝方法,封裝流程如圖1。城市街區(qū)污染擴散仿真涉及能量方程模型、湍流模型、輻射模型、組分模型四種模型,根據(jù)對Fluent TUI命令的研究,共需要設(shè)計十個接口;邊界條件涉及速度入口(velocity-inlet)、壓力入口(pressure-inlet)、質(zhì)量流入口(mass-flow-inlet)、壓力出口(pressure-outlet)、質(zhì)量流出口(mass-flow-outlet)五種邊界類型,對應(yīng)需要在上面十個接口下分別設(shè)計五個方法。接口設(shè)計完成后,提供一個實現(xiàn)類實現(xiàn)所有接口。但是,由于Fluent軟件操作的復(fù)雜性,實現(xiàn)類中的每個方法涉及參數(shù)眾多,導(dǎo)致開發(fā)者調(diào)用這些方法仍然比較復(fù)雜,因此,對每個方法的參數(shù)進(jìn)行封裝形成參數(shù)類。最后設(shè)計一個最終對開發(fā)者開放的邊界條件設(shè)置類對象(BoundaryConditionSet)。該對象簡單明了,易用理解和調(diào)用,可以非常簡單的返回所需邊界條件設(shè)置的TUI命令。如選擇湍流模型為層流時,獲取設(shè)置速度入口的邊界條件TUI命令偽代碼為:
圖1 邊界條件TUI封裝流程
創(chuàng)建邊界條件設(shè)置類對象BoundaryConditionSet BCS
創(chuàng)建參數(shù)封裝類對象BCP_OFFOFF.VI vi
輸入vi成員變量值
輸出TUI命令字符串TUI=BCS.Set_OFFOFF(vi: vi)
依據(jù)上述設(shè)計思路,完成邊界條件設(shè)置的TUI命令流封裝,為Fluent提供簡單易用的二次開發(fā)庫,解決Fluent TUI腳本命令可讀性差,難以編寫的難題。最后可以利用文件流的方式實現(xiàn)TUI命令的寫入,靈活方便的得到自組織的Fluent腳本命令流日志文件(.jou)。對于得到的命令流日志文件(.jou)可以后臺調(diào)用Fluent進(jìn)行執(zhí)行。后臺執(zhí)行Fluent日志文件的命令格式為fluent x1d -g -tx2-i journal,其中x1取值為2或3,代表計算模型的維度;x2取值為處理器個數(shù),即并行核數(shù);journal為日志文件(.jou)路徑;-g代表Fluent后臺運行。
利用上文研究的GUI命令流參數(shù)化設(shè)計方法及TUI命令流封裝方法,采用VS2015開發(fā)平臺,基于.NET Framework技術(shù)開發(fā)城市街區(qū)大氣污染擴散仿真平臺(PSDS)。該平臺源碼已上傳至GitHub托管平臺:https:∥github.com/Mekeater/PSDS。PSDS仿真操作流程如圖2所示。
圖2 仿真操作流程
通過簡單界面交互而實現(xiàn)自動組織和生成復(fù)雜的腳本命令日志文件(.jou)。模擬參數(shù)設(shè)置包括兩種模式,一種是簡要模式,交互界面如圖3,該模式所需參數(shù)設(shè)置較少,根據(jù)常規(guī)污染源擴散模擬計算的參數(shù)設(shè)置經(jīng)驗[13-14],對專業(yè)性參數(shù)進(jìn)行了默認(rèn)設(shè)置,如物理模型選擇能量方程,標(biāo)準(zhǔn)k-ε雙方程湍流模型以及組分運輸方程等,該模式簡單易操作,適合沒有太多流體力學(xué)基礎(chǔ)的用戶,可以快速對污染擴散進(jìn)行計算模擬;另一種是專家模式,交互界面如圖4,適合有較強流體力學(xué)基礎(chǔ)的用戶,可以進(jìn)行更多模擬參數(shù)的設(shè)置,專家模式相比簡要模式開放了更多的參數(shù)設(shè)置,可以由用戶根據(jù)情況選擇和設(shè)置更多合適的參數(shù),共包括八大模塊。兩種模式的交互界面如圖3。模型參數(shù)設(shè)置完成后生成腳本命令日志文件(.jou)。
圖3 簡要模式交互界面
圖4 專家模式交互界面
生成的日志文件(.jou)需要后臺調(diào)用Fluent執(zhí)行文件中的腳本命令內(nèi)容,首先自動獲取模擬參數(shù)設(shè)置所生成的日志文件(.jou),然后,后臺調(diào)用Fluent執(zhí)行該日志文件中的腳本命令,交互界面如圖5。ANSYS Fluent具有成熟的并行策略[7],PSDS計算求解模塊可以選擇并行或者串行執(zhí)行腳本命令,通過并行的方式調(diào)用Fluent執(zhí)行腳本命令,可以很大程度上提高計算效率,使得計算時間大大縮短。
圖5 計算求解交互界面
模擬計算求解完成后會自動生成整個模型和指定模型截面處的相關(guān)計算值存儲于文本類型文件中,生成文件存儲內(nèi)容包括節(jié)點數(shù)、xyz坐標(biāo)值,以及坐標(biāo)值處對應(yīng)的壓力值、速度大小值、速度角度值以及各個組分質(zhì)量分?jǐn)?shù)值。同時將利用Fluent后處理生成的整個模型以及指定模型截面處的壓力云圖和矢量圖,速度大小云圖和矢量圖,以及各個組分質(zhì)量分?jǐn)?shù)的云圖和矢量圖以圖片的形式存儲。文本數(shù)據(jù)用作污染擴散分析的基礎(chǔ)數(shù)據(jù),圖片用作對計算結(jié)果的基礎(chǔ)可視化和分析。
數(shù)據(jù)采用本地文件目錄樹的方式進(jìn)行存儲管理,如圖6所示。根目錄下包含以模擬計算工程名為名稱的子目錄,即每次模擬計算都會自動在根目錄創(chuàng)建一個子目錄,該子目錄的名稱以工程名命名,同時會自動在子目錄下再創(chuàng)建三個子目錄用以存儲日志文件(.jou)、整個模型以及指定模型截面處的計算值文本文件和圖片文件。對于整個模型的圖片命名規(guī)則為“工程名_Body_2個整數(shù)組合_time”,指定模型截面處的圖片命名規(guī)則為“工程名_截面名_2個整數(shù)組合_time”,2個整數(shù)組合為n行2列的二維網(wǎng)格的索引號,如圖7所示,time為時間值,對于穩(wěn)態(tài)計算time取值為空,對于瞬態(tài)計算time代表時間值。如test_Body_10_0001.jpg為test模擬計算工程中在1秒時的速度云圖;test_y26_01_為test穩(wěn)態(tài)模擬計算工程中在截面y26處的壓力矢量圖。該命名規(guī)則可以在程序中快速的調(diào)用所需的圖片進(jìn)行展示。
圖6 數(shù)據(jù)存儲目錄樹
圖7 二維網(wǎng)格索引號
影響城市大氣污染擴散的因素主要包括泄漏源(形態(tài)、位置、泄漏氣體密度等)、氣象條件(風(fēng)向風(fēng)速、濕度、大氣穩(wěn)定度等)以及地表情況等[15]。利用PSDS軟件進(jìn)行城市街區(qū)氯氣擴散仿真,驗證依據(jù)論文提出的Fluent二次開發(fā)技術(shù)方法研發(fā)的PSDS平臺,簡單易用,可以快速實現(xiàn)城市街區(qū)大氣污染擴散的仿真。根據(jù)仿真結(jié)果分析風(fēng)速以及污染源釋放的質(zhì)量通量大小對于氯氣擴散的影響。研究區(qū)域為簡化城市街區(qū),街區(qū)內(nèi)有大小不一的建筑樓,污染源為持續(xù)釋放氯氣污染物的簡化立方體。模擬區(qū)域示意圖如圖8所示。
本文采用ANSYS集成到Workbench中的DesignModeler進(jìn)行幾何建模,采用Meshing軟件對幾何模型進(jìn)行非結(jié)構(gòu)化網(wǎng)格劃分。模型選擇能量方程、標(biāo)準(zhǔn)k-ε雙方程湍流模型以及組分運輸方程,考慮重力且重力方向為Z軸方向,重力大小為-9.81m/s2。利用基于壓力基求解器的非穩(wěn)態(tài)流算法,速度壓力用SIMPLE法耦合,在時間方向上采用二階隱式格式離散。左側(cè)面(left)和前方面(front)設(shè)置為速度入口邊界條件;右側(cè)面(right)和后方面(behind)設(shè)置為出流邊界條件;污染源(pollution)設(shè)置為質(zhì)量流入口邊界條件;剩余研究區(qū)域的上方和下方以及建筑物設(shè)置為無滑移壁面。以上設(shè)置既可以通過PSDS軟件的專家模式進(jìn)行設(shè)置,也可以通過PSDS軟件的簡要模式進(jìn)行快速設(shè)置,本實驗采用簡要模式進(jìn)行參數(shù)設(shè)置。
圖8 模擬區(qū)域示意圖
設(shè)置污染源以6kg/m2-s的質(zhì)量通量釋放氯氣,分別對速度入口風(fēng)速為6m/s、9m/s、12m/s的氯氣擴散情況進(jìn)行快速仿真。
仿真結(jié)果在建筑物的水平截面處,時間分別為5s、10s、20s、30s、40s五個時刻的氯氣擴散情況對比如圖9所示。由圖分析可得到以下氯氣擴散規(guī)律:①氯氣整體向下風(fēng)方向擴散,且在擴散初始時間段,風(fēng)速越大向下風(fēng)向的擴散范圍越大,但污染源周邊的高濃度范圍越少。這是因為較小的風(fēng)速導(dǎo)致氯氣擴散速度較慢,使得大多氯氣集中在污染源周邊形成高濃度區(qū)域,而較大的風(fēng)速導(dǎo)致氯氣擴散速度快,使得污染源周邊的氯氣快速向遠(yuǎn)處擴散,進(jìn)而污染源周邊高濃度區(qū)域越少,下風(fēng)向的氯氣擴散范圍越大。②隨著擴散時間的增加,風(fēng)速越小下風(fēng)向氯氣范圍越大且濃度越高。這是因為風(fēng)速越大氯氣就被越快的吹散,擴散范圍及濃度增長速度較慢,而風(fēng)速越小氯氣就有更多的時間積累,擴散范圍及濃度增長速度較快。③建筑物對于氯氣擴散具有明顯的阻擋作用。由圖可明顯看出污染源所在街道的氯氣經(jīng)過第一排建筑物的阻擋后,在第二條街道濃度驟減。
由以上分析可以證實風(fēng)速以及建筑物在城市污染源擴散中的重要作用,合理的規(guī)劃城市建筑,建造具有更好通風(fēng)效應(yīng)和建筑物布局的城市街區(qū)對于污染擴散具有重要的意義。
圖9 不同風(fēng)速氯氣擴散仿真
設(shè)置速度入口風(fēng)速為6m/s,分別對污染源釋放質(zhì)量通量為3kg/m2-s和6kg/m2-s的氯氣擴散情況進(jìn)行快速仿真。
仿真結(jié)果在建筑物的水平截面處,時間分別為5s、10s、20s、30s、40s五個時刻的氯氣擴散情況對比如圖10所示。由圖中可以看出污染物整體向下風(fēng)向擴散,在同一時間,污染源處質(zhì)量通量越大,下風(fēng)向污染范圍越大濃度越高,隨著時間的增加,下風(fēng)向污染擴散范圍不斷增加。這是因為污染源質(zhì)量通量越大,每一時刻就有更多的氯氣被風(fēng)帶到下風(fēng)向,使得下風(fēng)向污染范圍越大濃度越高,隨著時間的增加,污染物持續(xù)向下風(fēng)向擴散,導(dǎo)致下風(fēng)向污染擴散范圍不斷增加。
圖10 不同質(zhì)量通量氯氣擴散仿真
本文提出GUI命令流參數(shù)化設(shè)計方法及TUI命令流封裝方法,研發(fā)了城市街區(qū)大氣污染擴散仿真軟件(PSDS),實現(xiàn)了城市街區(qū)氯氣擴散的仿真,主要結(jié)論如下:
1) 通過界面編程的方式自動編寫腳本命令,實現(xiàn)了GUI命令流參數(shù)化設(shè)計方法,解決了GUI命令編寫困難和修改復(fù)雜的問題。
2) TUI命令流封裝方法將TUI命令封裝為一系列簡單易用的方法模塊,解決了TUI命令可讀性差且編寫復(fù)雜的問題,為Fluent擴展定制開發(fā)提供統(tǒng)一接口。
3) PSDS軟件操作簡便,易于理解,解決Fluent軟件操作復(fù)雜,專業(yè)理論知識要求過高等問題,可為城市街區(qū)大氣污染擴散模擬提供簡單易用的研究工具。