■ 田曉沛 南希 宋紅超 項洋 龍星宇 付磊 周亦成 邵飛 / 中國航發研究院
具備大規模并行計算能力的全三維內流數值仿真軟件可充分發揮超算潛能,實現航空發動機內流的高精度仿真。但理論起點高且可靠穩定的大規模并行全三維內流數值仿真軟件的開發,屬于典型的多學科交叉課題,難度很大。而基于并行框架的代碼重構是一種合理可行的軟件研發技術路徑。
目前,基于個人工作站小規模并行計算的全三維定常流/非定常流數值仿真,已經被廣泛用于壓氣機氣動性能評估,成為壓氣機氣動設計不可或缺的核心要素[1-2]。但現階段數值仿真的網格規模及其時間步長嚴重受限于個人工作站的計算能力,產生一定離散誤差;同時,數理模型也不可避免地產生不可忽略的誤差。數值仿真精度并不高,會隨算例及工況的不同出現波動,使壓氣機性能評估存在較大不確定性[1,3]。
提高流場數值模擬精度,一方面可通過理論突破,減少數理模型固有偏差;另一方面,可通過增加網格規模,提高時空分辨率,減小離散偏差。事實上,前者的實現相對困難[4],較為現實的解決方案是通過大量試驗數據,對數理模型進行校正,需要消耗大量的人力、物力和時間;而后者則可通過基于超算的大規模并行計算實現,相對容易。同時,航空發動機精細化設計需求,牽引著跨學科優化設計、多學科耦合設計、整機仿真、數字孿生[5]等技術不斷發展,而支撐這些技術發展最基本、不可或缺的工具就是具備大規模并行計算能力的全三維內流數值仿真軟件。
綜上,發展大規模并行全三維內流仿真軟件的需求重要且緊迫。但是,理論起點高且可靠穩定的大規模并行全三維內流數值仿真軟件開發屬于典型的多學科交叉課題,集成了物理、數學和計算機專業知識,難度很大。相對而言,基于并行框架的代碼重構,能夠集成國內外各專業優勢資源,實現高水平大規模并行軟件開發,是一種合理可行的軟件研發技術路徑。
框架(framework)是整個或部分系統的可重用設計,表現為一組抽象構件及構件實例間交互的方法,即針對特定應用領域的、可復用的軟件架構解決方案。并行框架是按框架特定應用領域角度劃分的一類框架的泛稱,所針對的應用領域為由偏微分方程組描述的大規模并行科學計算問題。并行框架通過封裝高性能的數據結構、成熟的并行算法,屏蔽大規模并行計算技術,使用戶只需按照框架提供的軟件架構方案,就能夠開發出高效運行于現代高性能超算上的、實施大規模數值仿真的并行程序。
目前,國內航空發動機主機所普遍使用的全三維內流仿真軟件仍為國外商業軟件,如Fine/Turbo、CFX、Fluent等,但國內多所高校都開發了具有自主知識產權的全三維內流數值仿真軟件,部分軟件具備并行計算能力。特別是北京航空航天大學寧方飛教授開發的MAP等內流仿真軟件,已在各航空發動機主機所試用多年,在模擬精度、計算速度、并行效率、工程實用性等方面均有較好表現,獲得了業內普遍認可。同時,國內高校研發的全三維內流數值仿真軟件的開發主體的專業領域幾乎無一例外為流體動力學,計算機專業知識相對欠缺,所編制的程序面向過程,缺少封裝和規范,程序層次不夠清晰嚴謹,可維護性不好,大規模并行計算方案缺少深度優化。因此,直接將國內高校研發的全三維內流數值仿真軟件用于大規模并行計算,從長遠看并非最佳選擇。

圖1 多塊分區與多patch分區
存量代碼重構的核心優勢在于能夠集成各方優勢資源,讓最專業的人做最擅長的事。而存量代碼重構并非存量代碼的簡單翻譯或復用,有各種問題需要解決和規范。基于框架的存量代碼重構,則需要按框架規定的架構重構存量代碼。框架的作用是架構搭建、內存管理、流程控制、并行管理等,存量代碼負責在并行計算單元補丁(patch)上求解數理模型,主要包括架構重構、變量重構和流程重構等3個環節。本文以針對葉輪機的全三維定常流場數值仿真程序(簡稱為存量代碼,其部分特征如圖1所示)的重構為例,簡單歸納存量代碼的重構環節和重構方案。
由于存量代碼是面向過程編制的,所以沒有嚴格意義的架構設計。并行框架則基于邦元(federate)、網格層和網格片,設計了逐層調用的架構模型。
就葉輪機內流求解問題而言,葉輪機定常流場求解以葉排為單位,具有當地性;同時,流體域控制方程與轉靜交界面控制方程是完全不同的兩類方程,求解方法不同,求解相互獨立。因此,在架構設計時引入了邦元的概念,即將流體域求解與轉靜交界面求解封裝在不同邦元內,通過聯邦(federation)構件,實現流體域與轉靜交界面之間的、由轉靜交界面隔開的不同流體域之間的通信;邦元內的通信則由網格層數值構件實現。從理論上看,邦元層的引入,對葉輪機內流的大規模并行計算和軟件的擴展維護等方面,都會產生積極效果。具體而言,包括流場求解與轉靜交界面求解相互獨立、互不影響,可有效減小協調拼接、非協調拼接單元搜索范圍,提高運算速度;由于多數并行通信只需在邦元內進行,所以可有效減小并行通信規模。

圖2 葉輪機內流并行方案

圖3 4層調用架構
重構后程序的分層調用架構如圖2、圖3所示。對于數理模型求解,建議通過匹配接口,直接將存量代碼接入重構后程序,也就是盡量復用存量代碼。這樣,不僅能夠有效提高重構工作效率,而且在很大程度上能夠避免數理模型模塊重構出現錯誤。
變量按類型分為場變量和非場變量,由于是多核分區并行,所以場變量要參與分區并行計算,非場變量一般用于流程控制和邊界條件存儲等。變量按作用域分為全局變量和局部變量。局部變量按作用域一般分為類私有變量,只在某個函數/子程序內定義的局部變量。變量重構的要點是甄別變量的類型和作用域。
針對存量代碼的變量定義方式,可采用如下的變量重構方案。
一是通過Module定義的全局變量。若為場變量,則必須按框架提供的變量定義、內存開辟、調用策略,在主流程中統一定義、開辟內存,在功能模塊patch層取用。
二是通過Module定義的非場變量。目前的實踐是,用結構體在主流程中定義、開辟內存,可以在任意需要的地方調用。從形式上看,Module和結構體的變量定義方式非常相似,通過指針關聯,可以將主流程中定義的結構體變量與存量代碼中定義的Module量對接,從而在存量代碼中可以沿用變量的Module定義方式及使用習慣。
三是用save標記局部變量。所標記局部變量在子程序退出時不被釋放,從而在下次使用時,仍為前次退出值。事實上,現代編譯器對于局部變量,在調用后釋放內存,失去取值是正常的,所以重構程序不保留save屬性,也就是將用save標記的變量,按作用域升級為類私有變量或全局變量。
流程重構是指在已經給定的程序架構下,填充主計算流程及各功能模塊計算流程。
主計算流程主要包括時間推進求解流程、求解前數據準備和求解后數據處理等。主計算流程重構,主要是將存量代碼的主計算流程重構至程序架構相應位置,即主函數層與聯邦層(federal level)。主流程重構是流程控制邏輯的重構,存量代碼不能直接復用。在重構時,還需要在聯邦層調用邦元并行構件,完成邦元間并行通信。
在主計算流程重構時,要特別注意梳理、優化、準確把握主計算流程控制邏輯,否則容易形成混亂、隱藏問題,為軟件調試、使用、維護和發展留下隱患。
功能模塊計算流程重構,主要是將存量代碼各功能模塊的計算流程重構至程序架構相應位置,即功能模塊Level層。與主流程重構類似,功能模塊流程重構也是流程控制邏輯的重構,主要通過邦元內并行構件的搭建實現,存量代碼同樣不能直接復用。另外,注意到邦元遍歷等價于葉排遍歷,故而在計算流程重構時,可以利用該特點進行流程簡化。
與主計算流程不同的是,功能模塊計算流程要簡單得多,其重構重點不是流程控制邏輯,而是并行重構。這是由于存量代碼是面向過程編制,并行通信位置靈活多樣,但重構程序必須在架構規定的層級,用規定的通信構件完成并行通信。因此,存量代碼涉及并行通信的部分,往往需要按照存量代碼的通信變量/長度、通信類型、通信目的、與前后續計算的關系等重新組織。例如,存量代碼往往將并行通信置于涵道/葉排/通道的循環體內,重構時需要把并行通信置于循環體外,通過調用規約構件實現。
顯而易見,存量代碼并行重構后,對于并行通信,特別是涵道/葉排/通道遍歷通信問題,由于需要多次遍歷,可能會犧牲一些運算效率。但毋庸置疑,重構后程序的層次更為嚴謹,具備更好的可維護性。
中國航發研究院氣動仿真軟件研發團隊是一個跨專業的、以內流數值仿真技術應用研究和代碼編制、測試與維護為主要工作的年輕團隊。團隊基于框架、針對葉輪機內流重構的仿真程序采用的主要數理模型見表1。由于數理模型源自存量代碼,所以數理模型的精度、穩定性、跨聲內流求解適用性等均屬于主流水平。特別是由于程序采用了隱式時間推進求解,并引入了葉輪機初場求解模板,使得該程序具備了與商業軟件同量級的內流求解收斂速度、較商業軟件更強的葉輪機逆壓流場綜合求解能力的特點。

圖4 單級風扇

表1 氣動仿真模塊數理模型列表

表2 跨聲單級風扇設計指標
以單級跨聲速風扇為例,其基于重構前存量代碼與重構后并行程序的流程求解結果如圖4所示,重構前后的流場計算除轉靜交界面模型不同外,網格劃分與計算設置方法包括邊界條件、并行計算設置、初場條件等(見表2)保持完全一致。

圖5 近壁面相對馬赫數計算結果

圖6 風扇總體性能特性圖

圖7 氣動仿真模塊計算內核耗時對比
重構前后風扇流場計算的結果對比如圖5、圖6所示。表3列出100%轉速設計點總體性能計算結果的詳細對比。可見,重構前后的葉輪機內流求解基本一致,重構偏差處于較低水平。事實上,即便存量代碼完全復用,由于計算機截斷誤差、非線性函數使用、流場求解駐渦、脫落渦等固有非穩定結構等,重構過程也不可避免地會引入重構偏差。另外,就本文算例而言,不同的轉靜交界面也是不可忽略的偏差源。
重構前后程序及其與主流商業軟件并行計算耗時的定性比較如圖7所示。有必要說明,一方面,存量代碼關于轉靜交界面的計算量大于重構后程序,所以重構前后程序計算耗時對比并不嚴謹;另一方面,重構程序并行方案是否較優需要基于超算的大規模并行計算進行評估。此處的耗時比較只是為了對重構代碼的計算速度有初步感性認識。
隨著計算機軟硬件不斷發展和數值仿真技術不斷成熟,內流數值仿真技術被逐漸引入航空發動機通流部件氣動設計、性能評估等諸多方面并發揮著越來越重要的作用。與此同時,發展大規模并行全三維內流仿真軟件的必要性也日益凸顯。綜合考慮目前條件,并通過實踐驗證,基于并行框架的代碼重構不失為一種合理可行的大規模并行軟件研發技術路徑,可為航空發動機的研發提供助力。