国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于并行框架的內(nèi)流數(shù)值仿真代碼重構技術

2021-04-26 06:47:28田曉沛南希宋紅超項洋龍星宇付磊周亦成邵飛中國航發(fā)研究院
航空動力 2021年2期
關鍵詞:數(shù)理存量代碼

■ 田曉沛 南希 宋紅超 項洋 龍星宇 付磊 周亦成 邵飛 / 中國航發(fā)研究院

具備大規(guī)模并行計算能力的全三維內(nèi)流數(shù)值仿真軟件可充分發(fā)揮超算潛能,實現(xiàn)航空發(fā)動機內(nèi)流的高精度仿真。但理論起點高且可靠穩(wěn)定的大規(guī)模并行全三維內(nèi)流數(shù)值仿真軟件的開發(fā),屬于典型的多學科交叉課題,難度很大。而基于并行框架的代碼重構是一種合理可行的軟件研發(fā)技術路徑。

目前,基于個人工作站小規(guī)模并行計算的全三維定常流/非定常流數(shù)值仿真,已經(jīng)被廣泛用于壓氣機氣動性能評估,成為壓氣機氣動設計不可或缺的核心要素[1-2]。但現(xiàn)階段數(shù)值仿真的網(wǎng)格規(guī)模及其時間步長嚴重受限于個人工作站的計算能力,產(chǎn)生一定離散誤差;同時,數(shù)理模型也不可避免地產(chǎn)生不可忽略的誤差。數(shù)值仿真精度并不高,會隨算例及工況的不同出現(xiàn)波動,使壓氣機性能評估存在較大不確定性[1,3]。

提高流場數(shù)值模擬精度,一方面可通過理論突破,減少數(shù)理模型固有偏差;另一方面,可通過增加網(wǎng)格規(guī)模,提高時空分辨率,減小離散偏差。事實上,前者的實現(xiàn)相對困難[4],較為現(xiàn)實的解決方案是通過大量試驗數(shù)據(jù),對數(shù)理模型進行校正,需要消耗大量的人力、物力和時間;而后者則可通過基于超算的大規(guī)模并行計算實現(xiàn),相對容易。同時,航空發(fā)動機精細化設計需求,牽引著跨學科優(yōu)化設計、多學科耦合設計、整機仿真、數(shù)字孿生[5]等技術不斷發(fā)展,而支撐這些技術發(fā)展最基本、不可或缺的工具就是具備大規(guī)模并行計算能力的全三維內(nèi)流數(shù)值仿真軟件。

綜上,發(fā)展大規(guī)模并行全三維內(nèi)流仿真軟件的需求重要且緊迫。但是,理論起點高且可靠穩(wěn)定的大規(guī)模并行全三維內(nèi)流數(shù)值仿真軟件開發(fā)屬于典型的多學科交叉課題,集成了物理、數(shù)學和計算機專業(yè)知識,難度很大。相對而言,基于并行框架的代碼重構,能夠集成國內(nèi)外各專業(yè)優(yōu)勢資源,實現(xiàn)高水平大規(guī)模并行軟件開發(fā),是一種合理可行的軟件研發(fā)技術路徑。

并行框架基本概念及存量代碼現(xiàn)狀

框架(framework)是整個或部分系統(tǒng)的可重用設計,表現(xiàn)為一組抽象構件及構件實例間交互的方法,即針對特定應用領域的、可復用的軟件架構解決方案。并行框架是按框架特定應用領域角度劃分的一類框架的泛稱,所針對的應用領域為由偏微分方程組描述的大規(guī)模并行科學計算問題。并行框架通過封裝高性能的數(shù)據(jù)結構、成熟的并行算法,屏蔽大規(guī)模并行計算技術,使用戶只需按照框架提供的軟件架構方案,就能夠開發(fā)出高效運行于現(xiàn)代高性能超算上的、實施大規(guī)模數(shù)值仿真的并行程序。

目前,國內(nèi)航空發(fā)動機主機所普遍使用的全三維內(nèi)流仿真軟件仍為國外商業(yè)軟件,如Fine/Turbo、CFX、Fluent等,但國內(nèi)多所高校都開發(fā)了具有自主知識產(chǎn)權的全三維內(nèi)流數(shù)值仿真軟件,部分軟件具備并行計算能力。特別是北京航空航天大學寧方飛教授開發(fā)的MAP等內(nèi)流仿真軟件,已在各航空發(fā)動機主機所試用多年,在模擬精度、計算速度、并行效率、工程實用性等方面均有較好表現(xiàn),獲得了業(yè)內(nèi)普遍認可。同時,國內(nèi)高校研發(fā)的全三維內(nèi)流數(shù)值仿真軟件的開發(fā)主體的專業(yè)領域幾乎無一例外為流體動力學,計算機專業(yè)知識相對欠缺,所編制的程序面向過程,缺少封裝和規(guī)范,程序層次不夠清晰嚴謹,可維護性不好,大規(guī)模并行計算方案缺少深度優(yōu)化。因此,直接將國內(nèi)高校研發(fā)的全三維內(nèi)流數(shù)值仿真軟件用于大規(guī)模并行計算,從長遠看并非最佳選擇。

存量代碼重構

圖1 多塊分區(qū)與多patch分區(qū)

存量代碼重構的核心優(yōu)勢在于能夠集成各方優(yōu)勢資源,讓最專業(yè)的人做最擅長的事。而存量代碼重構并非存量代碼的簡單翻譯或復用,有各種問題需要解決和規(guī)范?;诳蚣艿拇媪看a重構,則需要按框架規(guī)定的架構重構存量代碼??蚣艿淖饔檬羌軜嫶罱ā?nèi)存管理、流程控制、并行管理等,存量代碼負責在并行計算單元補?。╬atch)上求解數(shù)理模型,主要包括架構重構、變量重構和流程重構等3個環(huán)節(jié)。本文以針對葉輪機的全三維定常流場數(shù)值仿真程序(簡稱為存量代碼,其部分特征如圖1所示)的重構為例,簡單歸納存量代碼的重構環(huán)節(jié)和重構方案。

架構重構

由于存量代碼是面向過程編制的,所以沒有嚴格意義的架構設計。并行框架則基于邦元(federate)、網(wǎng)格層和網(wǎng)格片,設計了逐層調用的架構模型。

就葉輪機內(nèi)流求解問題而言,葉輪機定常流場求解以葉排為單位,具有當?shù)匦裕煌瑫r,流體域控制方程與轉靜交界面控制方程是完全不同的兩類方程,求解方法不同,求解相互獨立。因此,在架構設計時引入了邦元的概念,即將流體域求解與轉靜交界面求解封裝在不同邦元內(nèi),通過聯(lián)邦(federation)構件,實現(xiàn)流體域與轉靜交界面之間的、由轉靜交界面隔開的不同流體域之間的通信;邦元內(nèi)的通信則由網(wǎng)格層數(shù)值構件實現(xiàn)。從理論上看,邦元層的引入,對葉輪機內(nèi)流的大規(guī)模并行計算和軟件的擴展維護等方面,都會產(chǎn)生積極效果。具體而言,包括流場求解與轉靜交界面求解相互獨立、互不影響,可有效減小協(xié)調拼接、非協(xié)調拼接單元搜索范圍,提高運算速度;由于多數(shù)并行通信只需在邦元內(nèi)進行,所以可有效減小并行通信規(guī)模。

圖2 葉輪機內(nèi)流并行方案

圖3 4層調用架構

重構后程序的分層調用架構如圖2、圖3所示。對于數(shù)理模型求解,建議通過匹配接口,直接將存量代碼接入重構后程序,也就是盡量復用存量代碼。這樣,不僅能夠有效提高重構工作效率,而且在很大程度上能夠避免數(shù)理模型模塊重構出現(xiàn)錯誤。

變量重構

變量按類型分為場變量和非場變量,由于是多核分區(qū)并行,所以場變量要參與分區(qū)并行計算,非場變量一般用于流程控制和邊界條件存儲等。變量按作用域分為全局變量和局部變量。局部變量按作用域一般分為類私有變量,只在某個函數(shù)/子程序內(nèi)定義的局部變量。變量重構的要點是甄別變量的類型和作用域。

針對存量代碼的變量定義方式,可采用如下的變量重構方案。

一是通過Module定義的全局變量。若為場變量,則必須按框架提供的變量定義、內(nèi)存開辟、調用策略,在主流程中統(tǒng)一定義、開辟內(nèi)存,在功能模塊patch層取用。

二是通過Module定義的非場變量。目前的實踐是,用結構體在主流程中定義、開辟內(nèi)存,可以在任意需要的地方調用。從形式上看,Module和結構體的變量定義方式非常相似,通過指針關聯(lián),可以將主流程中定義的結構體變量與存量代碼中定義的Module量對接,從而在存量代碼中可以沿用變量的Module定義方式及使用習慣。

三是用save標記局部變量。所標記局部變量在子程序退出時不被釋放,從而在下次使用時,仍為前次退出值。事實上,現(xiàn)代編譯器對于局部變量,在調用后釋放內(nèi)存,失去取值是正常的,所以重構程序不保留save屬性,也就是將用save標記的變量,按作用域升級為類私有變量或全局變量。

流程重構

流程重構是指在已經(jīng)給定的程序架構下,填充主計算流程及各功能模塊計算流程。

主計算流程主要包括時間推進求解流程、求解前數(shù)據(jù)準備和求解后數(shù)據(jù)處理等。主計算流程重構,主要是將存量代碼的主計算流程重構至程序架構相應位置,即主函數(shù)層與聯(lián)邦層(federal level)。主流程重構是流程控制邏輯的重構,存量代碼不能直接復用。在重構時,還需要在聯(lián)邦層調用邦元并行構件,完成邦元間并行通信。

在主計算流程重構時,要特別注意梳理、優(yōu)化、準確把握主計算流程控制邏輯,否則容易形成混亂、隱藏問題,為軟件調試、使用、維護和發(fā)展留下隱患。

功能模塊計算流程重構,主要是將存量代碼各功能模塊的計算流程重構至程序架構相應位置,即功能模塊Level層。與主流程重構類似,功能模塊流程重構也是流程控制邏輯的重構,主要通過邦元內(nèi)并行構件的搭建實現(xiàn),存量代碼同樣不能直接復用。另外,注意到邦元遍歷等價于葉排遍歷,故而在計算流程重構時,可以利用該特點進行流程簡化。

與主計算流程不同的是,功能模塊計算流程要簡單得多,其重構重點不是流程控制邏輯,而是并行重構。這是由于存量代碼是面向過程編制,并行通信位置靈活多樣,但重構程序必須在架構規(guī)定的層級,用規(guī)定的通信構件完成并行通信。因此,存量代碼涉及并行通信的部分,往往需要按照存量代碼的通信變量/長度、通信類型、通信目的、與前后續(xù)計算的關系等重新組織。例如,存量代碼往往將并行通信置于涵道/葉排/通道的循環(huán)體內(nèi),重構時需要把并行通信置于循環(huán)體外,通過調用規(guī)約構件實現(xiàn)。

顯而易見,存量代碼并行重構后,對于并行通信,特別是涵道/葉排/通道遍歷通信問題,由于需要多次遍歷,可能會犧牲一些運算效率。但毋庸置疑,重構后程序的層次更為嚴謹,具備更好的可維護性。

存量代碼重構結果

數(shù)理模型匯總

中國航發(fā)研究院氣動仿真軟件研發(fā)團隊是一個跨專業(yè)的、以內(nèi)流數(shù)值仿真技術應用研究和代碼編制、測試與維護為主要工作的年輕團隊。團隊基于框架、針對葉輪機內(nèi)流重構的仿真程序采用的主要數(shù)理模型見表1。由于數(shù)理模型源自存量代碼,所以數(shù)理模型的精度、穩(wěn)定性、跨聲內(nèi)流求解適用性等均屬于主流水平。特別是由于程序采用了隱式時間推進求解,并引入了葉輪機初場求解模板,使得該程序具備了與商業(yè)軟件同量級的內(nèi)流求解收斂速度、較商業(yè)軟件更強的葉輪機逆壓流場綜合求解能力的特點。

圖4 單級風扇

表1 氣動仿真模塊數(shù)理模型列表

表2 跨聲單級風扇設計指標

單級風扇校驗

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

圖5 近壁面相對馬赫數(shù)計算結果

圖6 風扇總體性能特性圖

圖7 氣動仿真模塊計算內(nèi)核耗時對比

重構前后風扇流場計算的結果對比如圖5、圖6所示。表3列出100%轉速設計點總體性能計算結果的詳細對比??梢?,重構前后的葉輪機內(nèi)流求解基本一致,重構偏差處于較低水平。事實上,即便存量代碼完全復用,由于計算機截斷誤差、非線性函數(shù)使用、流場求解駐渦、脫落渦等固有非穩(wěn)定結構等,重構過程也不可避免地會引入重構偏差。另外,就本文算例而言,不同的轉靜交界面也是不可忽略的偏差源。

重構前后程序及其與主流商業(yè)軟件并行計算耗時的定性比較如圖7所示。有必要說明,一方面,存量代碼關于轉靜交界面的計算量大于重構后程序,所以重構前后程序計算耗時對比并不嚴謹;另一方面,重構程序并行方案是否較優(yōu)需要基于超算的大規(guī)模并行計算進行評估。此處的耗時比較只是為了對重構代碼的計算速度有初步感性認識。

結束語

隨著計算機軟硬件不斷發(fā)展和數(shù)值仿真技術不斷成熟,內(nèi)流數(shù)值仿真技術被逐漸引入航空發(fā)動機通流部件氣動設計、性能評估等諸多方面并發(fā)揮著越來越重要的作用。與此同時,發(fā)展大規(guī)模并行全三維內(nèi)流仿真軟件的必要性也日益凸顯。綜合考慮目前條件,并通過實踐驗證,基于并行框架的代碼重構不失為一種合理可行的大規(guī)模并行軟件研發(fā)技術路徑,可為航空發(fā)動機的研發(fā)提供助力。

猜你喜歡
數(shù)理存量代碼
踐行“德融數(shù)理” 打造“行知樂園”
中國德育(2022年12期)2022-08-22 06:17:24
存量時代下,房企如何把握舊改成本?
數(shù)理:多少人吃飯
孩子(2019年9期)2019-11-07 01:35:49
創(chuàng)世代碼
動漫星空(2018年11期)2018-10-26 02:24:02
創(chuàng)世代碼
動漫星空(2018年2期)2018-10-26 02:11:00
創(chuàng)世代碼
動漫星空(2018年9期)2018-10-26 01:16:48
創(chuàng)世代碼
動漫星空(2018年5期)2018-10-26 01:15:02
最天然呆筆記 誰說數(shù)理就一定枯燥艱深?
吉林存量收費公路的PPP改造
中國公路(2017年5期)2017-06-01 12:10:10
腐敗存量
東西南北(2015年9期)2015-09-10 07:22:44
荃湾区| 兴城市| 东乌| 普定县| 博野县| 阿拉善右旗| 和硕县| 甘肃省| 山丹县| 孟州市| 手机| 铜川市| 铁岭市| 延边| 柳河县| 商丘市| 大厂| 鄂托克前旗| 临邑县| 共和县| 辽阳县| 武穴市| 桑植县| 宜昌市| 建阳市| 仙桃市| 石首市| 铜陵市| 平定县| 图木舒克市| 永宁县| 陆河县| 常宁市| 陈巴尔虎旗| 北川| 嘉禾县| 永登县| 宜春市| 定日县| 哈巴河县| 龙南县|