張迪博,施鎏鎏,張文杰
(上海理工大學(xué)能源與動(dòng)力工程學(xué)院,上海 200093)
“雙碳”背景下,氫能得到了人們的重點(diǎn)關(guān)注。氫能的應(yīng)用方式之一:質(zhì)子交換膜燃料電池(PEMFC)具有零污染、轉(zhuǎn)化過(guò)程噪聲低、電池效率高的優(yōu)點(diǎn)[1]。由于電池處于變工況的工作環(huán)境下,通過(guò)供應(yīng)過(guò)量氫氣的方法來(lái)保證輸出功率的穩(wěn)定,導(dǎo)致部分氫氣未被完全消耗,目前常用引射器(圖1)對(duì)該部分氫氣進(jìn)行回收利用。
圖1 引射器
根據(jù)目前主流引射器設(shè)計(jì)方法所得到的引射器存在嚴(yán)重的設(shè)計(jì)點(diǎn)偏離問(wèn)題[2]。對(duì)前人的工作進(jìn)行研究總結(jié),發(fā)現(xiàn)優(yōu)化引射器的結(jié)構(gòu)尺寸可以提高引射器的性能[3]。引射器的優(yōu)化通常經(jīng)過(guò)以下幾個(gè)步驟:結(jié)構(gòu)參數(shù)計(jì)算、計(jì)算域建模、網(wǎng)格劃分和數(shù)值模擬,再經(jīng)過(guò)多輪迭代從而得到一個(gè)性能較優(yōu)的設(shè)計(jì)方案。手動(dòng)進(jìn)行多次迭代所需時(shí)間成本較高,尚不一定能找到最佳方案,且不考慮人為因素帶來(lái)的各種影響。本文針對(duì)PEMFC 引射器,通過(guò)Python 將結(jié)構(gòu)參數(shù)計(jì)算、計(jì)算域建模、網(wǎng)格劃分、數(shù)值模擬、代理模型、優(yōu)化算法等功能集成,形成一套參數(shù)化自動(dòng)仿真設(shè)計(jì)平臺(tái),提升引射器性能以及提高開(kāi)發(fā)速度。
PEMFC 引射器優(yōu)化設(shè)計(jì)平臺(tái)的功能分為5 個(gè)模塊:1)引射器設(shè)計(jì)工況點(diǎn)參數(shù)的輸入;2)引射器結(jié)構(gòu)參數(shù)初步計(jì)算及結(jié)果展示;3)調(diào)節(jié)優(yōu)化參數(shù)范圍;4)選擇文件保存目錄并輸入SSH遠(yuǎn)程連接所需參數(shù);5)優(yōu)化結(jié)果展示等功能。
Qt是一個(gè)C++可視化開(kāi)發(fā)平臺(tái),是一個(gè)跨平臺(tái)的C++圖形用戶(hù)界面應(yīng)用程序框架(C++ GUI),能夠?yàn)閼?yīng)用程序開(kāi)發(fā)者提供建立圖形用戶(hù)界面所需的功能。Qt是完全面向?qū)ο蟮?、易擴(kuò)展,可應(yīng)用于組件編程,并可以用于嵌入式開(kāi)發(fā)。它是目前流行的Linux桌面環(huán)境KDE 的基礎(chǔ),是Linux 和嵌入式操作系統(tǒng)下的主流圖形界面開(kāi)發(fā)環(huán)境,其最大優(yōu)勢(shì)在于只需編寫(xiě)一次代碼,就能編譯部署在任何操作系統(tǒng)和硬件上。
PyQt是一個(gè)創(chuàng)建Python GUI應(yīng)用程序的工具包,是Qt 和Python 結(jié)合的一個(gè)產(chǎn)物,可以說(shuō)是為了將Qt的功能用于Python 開(kāi)發(fā)的一個(gè)Qt 的Python 包裝器。它是Python編程語(yǔ)言和Qt庫(kù)的成功融合。
Qt Designer 是一個(gè)使用PyQt 庫(kù)進(jìn)行圖形化界面開(kāi)發(fā)時(shí)可視化的界面設(shè)計(jì)工具,可以方便地通過(guò)拖拽等方式來(lái)設(shè)計(jì)界面。
如圖2所示,來(lái)自高壓氫氣罐的氣體(工作流體)通過(guò)壓力調(diào)節(jié)器達(dá)到適當(dāng)?shù)膲毫Γ?jīng)噴嘴加速后在噴嘴出口處會(huì)產(chǎn)生一個(gè)低壓區(qū),在壓差的作用下使來(lái)自燃料電池中未被完全消耗的氫氣(引射流體)到達(dá)吸入腔,二者在混合室充分混合后進(jìn)入擴(kuò)壓室,經(jīng)減速擴(kuò)壓達(dá)到允許壓力后通過(guò)電池陽(yáng)極側(cè)入口進(jìn)入電池,重新參與反應(yīng)[2]。
圖2 PEMFC氫氣循環(huán)流程
通常用引射系數(shù)(ER)來(lái)評(píng)價(jià)引射器的性能[2],它表示引射流體質(zhì)量流量與工作流體質(zhì)量流量之比:
式中:ms為引射流體的質(zhì)量流量,kg/s;mp為工作流體的質(zhì)量流量,kg/s。
基于Python 的PEMFC 引射器優(yōu)化設(shè)計(jì)平臺(tái)是一個(gè)可以通過(guò)輸入引射器設(shè)計(jì)點(diǎn)工況參數(shù)、參數(shù)的變化范圍、優(yōu)化過(guò)程文件的存儲(chǔ)位置及SSH遠(yuǎn)程連接所需的參數(shù)后實(shí)現(xiàn)引射器結(jié)構(gòu)參數(shù)的初步計(jì)算、拉丁超立方(LHS)實(shí)驗(yàn)設(shè)計(jì)方案(DOE)的設(shè)計(jì)、Python 調(diào)用OpenFOAM進(jìn)行流體域建模,網(wǎng)格劃分,數(shù)值模擬、基于試驗(yàn)設(shè)計(jì)方案和數(shù)值模擬結(jié)果構(gòu)建代理模型并進(jìn)行超參數(shù)尋優(yōu)、使用優(yōu)化算法進(jìn)行全局尋優(yōu)并判斷是否達(dá)到收斂結(jié)果等功能,最后將展示優(yōu)化結(jié)果。具體優(yōu)化流程如圖3所示。
圖3 基于Python的引射器自動(dòng)設(shè)計(jì)流程
1)PEMFC 引射器結(jié)構(gòu)參數(shù)初步計(jì)算。使用Python編程語(yǔ)言并參照索科洛夫引射器設(shè)計(jì)方法[2]編寫(xiě)引射器結(jié)構(gòu)參數(shù)計(jì)算程序,對(duì)引射器的結(jié)構(gòu)尺寸進(jìn)行初步計(jì)算。
Python 作為一門(mén)簡(jiǎn)單易用且功能強(qiáng)大的開(kāi)源免費(fèi)計(jì)算機(jī)語(yǔ)言,其以學(xué)習(xí)成本相較于其他編程語(yǔ)言較低、應(yīng)用范圍廣等優(yōu)點(diǎn)得到人們的廣泛使用。
2)拉丁超立方(LHS)實(shí)驗(yàn)設(shè)計(jì)方案(DOE)的設(shè)計(jì)。基于上一步獲得的PEMFC引射器的初步結(jié)構(gòu)尺寸,采用拉丁超立方(LHS)試驗(yàn)設(shè)計(jì)方法,創(chuàng)建PEMFC 引射器結(jié)構(gòu)優(yōu)化參數(shù)的初始樣本點(diǎn)集合,樣本點(diǎn)個(gè)數(shù)為n= 90個(gè)。
由于PEMFC 引射器噴嘴的等熵效率較高,引射流體入口處的形狀對(duì)引射器效率的影響可以忽略不計(jì)[4]。因此,引射器的幾何形狀可以簡(jiǎn)化為如圖4 所示的軸對(duì)稱(chēng)形式,并且該軸對(duì)稱(chēng)模型完全可由圖4中所標(biāo)識(shí)的9 個(gè)PEMFC 引射器幾何參數(shù)進(jìn)行數(shù)學(xué)計(jì)算得到。為了最大限度地提高引射器的性能,對(duì)這9個(gè)幾何參數(shù)進(jìn)行全因子優(yōu)化。
圖4 PEMFC引射器對(duì)稱(chēng)計(jì)算模型
試驗(yàn)設(shè)計(jì)方法(DOE)主要對(duì)試驗(yàn)進(jìn)行合理安排,以較小的試驗(yàn)規(guī)模(試驗(yàn)次數(shù))、較短的試驗(yàn)周期和較低的試驗(yàn)成本,獲得理想的試驗(yàn)結(jié)果以及得出科學(xué)的結(jié)論。LHS試驗(yàn)設(shè)計(jì)方法通過(guò)保證各水平距離均勻、避免重復(fù)與隨機(jī)化,能高效生成高質(zhì)量的試驗(yàn)設(shè)計(jì)方案。
3)Python 調(diào)用OpenFOAM 進(jìn)行流體域建模、網(wǎng)格劃分、數(shù)值模擬。針對(duì)各樣本點(diǎn),通過(guò)OpenFOAM 中的blockMesh 工具和rhoSimpleF-oam 求解器分別進(jìn)行計(jì)算域建模、網(wǎng)格劃分和數(shù)值模擬計(jì)算,獲得各樣本點(diǎn)的真實(shí)響應(yīng)值。
Windows 系統(tǒng)下的Python 調(diào)用Linux 系統(tǒng)下的OpenFOAM進(jìn)行相關(guān)操作時(shí)需要注意以下兩點(diǎn):
①Windows 系統(tǒng)與Linux 系統(tǒng)是通過(guò)Secure Shell(SSH)進(jìn)行遠(yuǎn)程連接的。首先在Linux 系統(tǒng)下通過(guò)鍵入“sudo apt install openssh-server”和“sudo apt install openssh-clien”命令分別安裝SSH 服務(wù)的服務(wù)器與客戶(hù)端;接著鍵入“sudo service ssh status”命令查詢(xún)sshserver 是否已經(jīng)啟動(dòng),若未啟動(dòng)則鍵入“sudo service ssh start”命令打開(kāi)ssh-server。SSH 有兩種遠(yuǎn)程登錄方式,分別是口令登錄與公鑰登錄。使用口令方式登錄遠(yuǎn)程主機(jī)時(shí),每次都需要鍵入“ssh 客戶(hù)端用戶(hù)名@服務(wù)器ip 地址”和密碼(其中服務(wù)器ip 地址可以通過(guò)鍵入“ip a”來(lái)獲得服務(wù)器的ip地址),在優(yōu)化過(guò)程中并不能實(shí)現(xiàn)自動(dòng)化。而使用公鑰登錄則可以解決該問(wèn)題,利用密鑰對(duì)進(jìn)行連接,還可以提高安全性。首先鍵入“ssh-keygen-t rsa”命令生成密鑰對(duì),執(zhí)行結(jié)束以后會(huì)在“/home/當(dāng)前用戶(hù)目錄”下生成一個(gè).ssh文件夾,其中包含“私鑰文件id_rsa”和“公鑰文件id_rsa.pub”,接著可將“公鑰文件id_rsa.pub”復(fù)制到遠(yuǎn)程主機(jī)。經(jīng)過(guò)以上兩個(gè)步驟,以后再登錄這個(gè)遠(yuǎn)程主機(jī)就無(wú)須再輸入密碼。
②通過(guò)SSH 遠(yuǎn)程連接Linux 成功后,調(diào)用Open-FOAM 執(zhí)行流體域建模、網(wǎng)格劃分、數(shù)值模擬等功能時(shí),建議使用OpenFOAM 案例中的“./Allrun”腳本進(jìn)行,這樣可以省去重復(fù)且費(fèi)時(shí)的操作步驟。但是在編寫(xiě)“./Allrun”腳本文件時(shí),須特地在文件頭部加上如下4句命令,否則并不能成功調(diào)用OpenFOAM相關(guān)功能,這是筆者經(jīng)過(guò)大量試錯(cuò)所得到的經(jīng)驗(yàn):
4)構(gòu)建代理模型并進(jìn)行超參數(shù)尋優(yōu)。根據(jù)樣本數(shù)據(jù)中的所有樣本點(diǎn)及其對(duì)應(yīng)的真實(shí)響應(yīng)值,構(gòu)造徑向基函數(shù)(RBF)代理模型,并對(duì)該代理模型進(jìn)行Bayes超參數(shù)調(diào)優(yōu),提高代理模型性能。
采用代理模型方法不僅可大大提高優(yōu)化設(shè)計(jì)效率,而且可降低優(yōu)化難度,并有利于濾除數(shù)值噪聲和實(shí)現(xiàn)并行優(yōu)化設(shè)計(jì)。常用的代理模型有多項(xiàng)式響應(yīng)曲面模型、徑向基函數(shù)模型、Kriging 模型等。由于徑向基函數(shù)模型的預(yù)測(cè)精度高、模型預(yù)測(cè)曲線的光順程度好[5],故選擇徑向基函數(shù)模型。
Bayes 超參數(shù)優(yōu)化[6]是在已有的超參數(shù)設(shè)置和對(duì)應(yīng)的模型性能的基礎(chǔ)上,通過(guò)不斷地探索新的超參數(shù)組合來(lái)更新超參數(shù)的后驗(yàn)分布,并最終選擇能夠提高代理模型性能的超參數(shù)組合。
5)全局優(yōu)化及加點(diǎn)策略。首先對(duì)構(gòu)造的徑向基函數(shù)代理模型進(jìn)行Bayes 超參數(shù)優(yōu)化,在已有的超參數(shù)設(shè)置和對(duì)應(yīng)的模型性能的基礎(chǔ)上,通過(guò)不斷地探索新的超參數(shù)組合來(lái)更新超參數(shù)的后驗(yàn)分布,并最終選擇能夠提高代理模型性能的超參數(shù)組合;接著使用粒子群優(yōu)化算法(PSO)[7]對(duì)超參數(shù)優(yōu)化過(guò)后的徑向基函數(shù)代理模型進(jìn)行全局尋優(yōu);最后判斷是否滿(mǎn)足收斂條件,如果滿(mǎn)足則停止優(yōu)化并輸出結(jié)果,否則,將尋優(yōu)后的最優(yōu)解加入樣本點(diǎn)中構(gòu)造新的代理模型進(jìn)行迭代。
6)判斷是否滿(mǎn)足收斂條件。若滿(mǎn)足,則停止優(yōu)化并輸出優(yōu)化結(jié)果;否則,繼續(xù)迭代。
通過(guò)使用Python 編程語(yǔ)言并結(jié)合PyQt5、Qt Designer設(shè)計(jì)出如圖5所示的PEMFC引射器優(yōu)化設(shè)計(jì)平臺(tái)的GUI 界面。界面共分為5 個(gè)部分:1)引射器設(shè)計(jì)工況參數(shù)的輸入;2)引射器結(jié)構(gòu)參數(shù)初步計(jì)算結(jié)果的展示;3)調(diào)節(jié)優(yōu)化參數(shù)的可變范圍;4)選擇文件保存目錄并輸入SSH 遠(yuǎn)程連接所需參數(shù);5)優(yōu)化結(jié)果的展示。
圖5 PEMFC引射器優(yōu)化設(shè)計(jì)平臺(tái)界面
輸入如圖5 中第①部分所示的PEMFC 引射器的設(shè)計(jì)工況點(diǎn)參數(shù),點(diǎn)擊“計(jì)算結(jié)構(gòu)參數(shù)”按鈕后會(huì)自動(dòng)執(zhí)行使用Python編寫(xiě)的引射器結(jié)構(gòu)尺寸計(jì)算程序,運(yùn)行結(jié)構(gòu)尺寸計(jì)算程序后會(huì)將引射器結(jié)構(gòu)參數(shù)具體數(shù)據(jù)展示在第②部分中以及第③部分的原始設(shè)計(jì)數(shù)據(jù)列。
第③部分中變化范圍(其值介于0~1)決定的是第②部分中所示的結(jié)構(gòu)參數(shù)可以變化的上、下限具體值。調(diào)節(jié)好所需的變化范圍值后點(diǎn)擊確認(rèn)即可固定引射器所有結(jié)構(gòu)參數(shù)的具體變化范圍。以擴(kuò)壓室長(zhǎng)度Ld為例,圖5 中第③部分所示變化范圍的值為0.1,意味著擴(kuò)壓室長(zhǎng)度Ld的可變范圍為[0.9*Ld,1.1*Ld];同理0.2即意味著[0.8*Ld,1.2*Ld]。
確定好具體的變化范圍后,通過(guò)點(diǎn)擊圖5 中第④部分中的“瀏覽”按鈕,選擇具體的文件存放位置,將優(yōu)化時(shí)所產(chǎn)生的數(shù)據(jù)文件保存在其中。接著通過(guò)輸入U(xiǎn)buntu 中的用戶(hù)名以及相應(yīng)的IP 地址用以使用SSH 進(jìn)行遠(yuǎn)程連接調(diào)用OpenFOAM 功能進(jìn)行計(jì)算域建模、網(wǎng)格劃分、數(shù)值模擬計(jì)算。最后,點(diǎn)擊開(kāi)始優(yōu)化后即可進(jìn)行如圖3所示的引射器的設(shè)計(jì)優(yōu)化流程。
優(yōu)化完成后的結(jié)果將在圖5中的第⑤部分進(jìn)行展示。二者中,位置居上的為優(yōu)化后引射器的二維模型,居下位的是優(yōu)化后引射器的內(nèi)部速度云圖。
本文針對(duì)PEMFC 引射器,通過(guò)Python 編程語(yǔ)言將結(jié)構(gòu)參數(shù)計(jì)算、計(jì)算域建模、網(wǎng)格劃分、數(shù)值模擬、代理模型、優(yōu)化算法等功能集成,形成一套參數(shù)化的自動(dòng)仿真設(shè)計(jì)平臺(tái)。該平臺(tái)可以顯著加快引射器的設(shè)計(jì)優(yōu)化過(guò)程,降低研發(fā)人員所需投入的時(shí)間,促進(jìn)相關(guān)行業(yè)的發(fā)展。
該平臺(tái)尚有進(jìn)一步的提升空間,如:提高網(wǎng)格質(zhì)量以適應(yīng)各種引射器模型、提高數(shù)值模擬的精度等,這也是以后要努力的方向。