田晓沛 南希 宋红超 项洋 龙星宇 付磊 周亦成 邵飞 2021年04月18日
目前,基于个人工作站小规模并行计算的全三维定常流/非定常流数值仿真,已经被广泛用于压气机气动性能评估,成为压气机气动设计不可或缺的核心要素[1-2]。但现阶段数值仿真的网格规模及其时间步长严重受限于个人工作站的计算能力,产生一定离散误差;同时,数理模型也不可避免地产生不可忽略的误差。数值仿真精度并不高,会随算例及工况的不同出现波动,使压气机性能评估存在较大不确定性[1,3]。
提高流场数值模拟精度,一方面可通过理论突破,减少数理模型固有偏差;另一方面,可通过增加网格规模,提高时空分辨率,减小离散偏差。事实上,前者的实现相对困难[4],较为现实的解决方案是通过大量试验数据,对数理模型进行校正,需要消耗大量的人力、物力和时间;而后者则可通过基于超算的大规模并行计算实现,相对容易。同时,航空发动机精细化设计需求,牵引着跨学科优化设计、多学科耦合设计、整机仿真、数字孪生[5]等技术不断发展,而支撑这些技术发展最基本、不可或缺的工具就是具备大规模并行计算能力的全三维内流数值仿真软件。
综上,发展大规模并行全三维内流仿真软件的需求重要且紧迫。但是,理论起点高且可靠稳定的大规模并行全三维内流数值仿真软件开发属于典型的多学科交叉课题,集成了物理、数学和计算机专业知识,难度很大。相对而言,基于并行框架的代码重构,能够集成国内外各专业优势资源,实现高水平大规模并行软件开发,是一种合理可行的软件研发技术路径。
框架(framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法,即针对特定应用领域的、可复用的软件架构解决方案。并行框架是按框架特定应用领域角度划分的一类框架的泛称,所针对的应用领域为由偏微分方程组描述的大规模并行科学计算问题。并行框架通过封装高性能的数据结构、成熟的并行算法,屏蔽大规模并行计算技术,使用户只需按照框架提供的软件架构方案,就能够开发出高效运行于现代高性能超算上的、实施大规模数值仿真的并行程序。
目前,国内航空发动机主机所普遍使用的全三维内流仿真软件仍为国外商业软件,如Fine/Turbo、CFX、Fluent等,但国内多所高校都开发了具有自主知识产权的全三维内流数值仿真软件,部分软件具备并行计算能力。特别是北京航空航天大学宁方飞教授开发的MAP等内流仿真软件,已在各航空发动机主机所试用多年,在模拟精度、计算速度、并行效率、工程实用性等方面均有较好表现,获得了业内普遍认可。同时,国内高校研发的全三维内流数值仿真软件的开发主体的专业领域几乎无一例外为流体动力学,计算机专业知识相对欠缺,所编制的程序面向过程,缺少封装和规范,程序层次不够清晰严谨,可维护性不好,大规模并行计算方案缺少深度优化。因此,直接将国内高校研发的全三维内流数值仿真软件用于大规模并行计算,从长远看并非最佳选择。
存量代码重构的核心优势在于能够集成各方优势资源,让最专业的人做最擅长的事。而存量代码重构并非存量代码的简单翻译或复用,有各种问题需要解决和规范。基于框架的存量代码重构,则需要按框架规定的架构重构存量代码。框架的作用是架构搭建、内存管理、流程控制、并行管理等,存量代码负责在并行计算单元补丁(patch)上求解数理模型,主要包括架构重构、变量重构和流程重构等3个环节。本文以针对叶轮机的全三维定常流场数值仿真程序(简称为存量代码,其部分特征如图1所示)的重构为例,简单归纳存量代码的重构环节和重构方案。
图1 多块分区与多patch分区 |
由于存量代码是面向过程编制的,所以没有严格意义的架构设计。并行框架则基于邦元(federate)、网格层和网格片,设计了逐层调用的架构模型。
就叶轮机内流求解问题而言,叶轮机定常流场求解以叶排为单位,具有当地性;同时,流体域控制方程与转静交界面控制方程是完全不同的两类方程,求解方法不同,求解相互独立。因此,在架构设计时引入了邦元的概念,即将流体域求解与转静交界面求解封装在不同邦元内,通过联邦(federation)构件,实现流体域与转静交界面之间的、由转静交界面隔开的不同流体域之间的通信;邦元内的通信则由网格层数值构件实现。从理论上看,邦元层的引入,对叶轮机内流的大规模并行计算和软件的扩展维护等方面,都会产生积极效果。具体而言,包括流场求解与转静交界面求解相互独立、互不影响,可有效减小协调拼接、非协调拼接单元搜索范围,提高运算速度;由于多数并行通信只需在邦元内进行,所以可有效减小并行通信规模。
重构后程序的分层调用架构如图2、图3所示。对于数理模型求解,建议通过匹配接口,直接将存量代码接入重构后程序,也就是尽量复用存量代码。这样,不仅能够有效提高重构工作效率,而且在很大程度上能够避免数理模型模块重构出现错误。
图2 叶轮机内流并行方案 |
图3 4层调用架构 |
变量按类型分为场变量和非场变量,由于是多核分区并行,所以场变量要参与分区并行计算,非场变量一般用于流程控制和边界条件存储等。变量按作用域分为全局变量和局部变量。局部变量按作用域一般分为类私有变量,只在某个函数/子程序内定义的局部变量。变量重构的要点是甄别变量的类型和作用域。
针对存量代码的变量定义方式,可采用如下的变量重构方案。
一是通过Module定义的全局变量。若为场变量,则必须按框架提供的变量定义、内存开辟、调用策略,在主流程中统一定义、开辟内存,在功能模块patch层取用。
二是通过Module定义的非场变量。目前的实践是,用结构体在主流程中定义、开辟内存,可以在任意需要的地方调用。从形式上看,Module和结构体的变量定义方式非常相似,通过指针关联,可以将主流程中定义的结构体变量与存量代码中定义的Module量对接,从而在存量代码中可以沿用变量的Module定义方式及使用习惯。
三是用save标记局部变量。所标记局部变量在子程序退出时不被释放,从而在下次使用时,仍为前次退出值。事实上,现代编译器对于局部变量,在调用后释放内存,失去取值是正常的,所以重构程序不保留save属性,也就是将用save标记的变量,按作用域升级为类私有变量或全局变量。
流程重构是指在已经给定的程序架构下,填充主计算流程及各功能模块计算流程。
主计算流程主要包括时间推进求解流程、求解前数据准备和求解后数据处理等。主计算流程重构,主要是将存量代码的主计算流程重构至程序架构相应位置,即主函数层与联邦层(federal level)。主流程重构是流程控制逻辑的重构,存量代码不能直接复用。在重构时,还需要在联邦层调用邦元并行构件,完成邦元间并行通信。
在主计算流程重构时,要特别注意梳理、优化、准确把握主计算流程控制逻辑,否则容易形成混乱、隐藏问题,为软件调试、使用、维护和发展留下隐患。
功能模块计算流程重构,主要是将存量代码各功能模块的计算流程重构至程序架构相应位置,即功能模块Level层。与主流程重构类似,功能模块流程重构也是流程控制逻辑的重构,主要通过邦元内并行构件的搭建实现,存量代码同样不能直接复用。另外,注意到邦元遍历等价于叶排遍历,故而在计算流程重构时,可以利用该特点进行流程简化。
与主计算流程不同的是,功能模块计算流程要简单得多,其重构重点不是流程控制逻辑,而是并行重构。这是由于存量代码是面向过程编制,并行通信位置灵活多样,但重构程序必须在架构规定的层级,用规定的通信构件完成并行通信。因此,存量代码涉及并行通信的部分,往往需要按照存量代码的通信变量/长度、通信类型、通信目的、与前后续计算的关系等重新组织。例如,存量代码往往将并行通信置于涵道/叶排/通道的循环体内,重构时需要把并行通信置于循环体外,通过调用规约构件实现。
显而易见,存量代码并行重构后,对于并行通信,特别是涵道/叶排/通道遍历通信问题,由于需要多次遍历,可能会牺牲一些运算效率。但毋庸置疑,重构后程序的层次更为严谨,具备更好的可维护性。
中国航发研究院气动仿真软件研发团队是一个跨专业的、以内流数值仿真技术应用研究和代码编制、测试与维护为主要工作的年轻团队。团队基于框架、针对叶轮机内流重构的仿真程序采用的主要数理模型见表1。由于数理模型源自存量代码,所以数理模型的精度、稳定性、跨声内流求解适用性等均属于主流水平。特别是由于程序采用了隐式时间推进求解,并引入了叶轮机初场求解模板,使得该程序具备了与商业软件同量级的内流求解收敛速度、较商业软件更强的叶轮机逆压流场综合求解能力的特点。
表1 气动仿真模块数理模型列表
以单级跨声速风扇为例,其基于重构前存量代码与重构后并行程序的流程求解结果如图4所示,重构前后的流场计算除转静交界面模型不同外,网格划分与计算设置方法包括边界条件、并行计算设置、初场条件等(见表2)保持完全一致。
图4 单级风扇 |
表2 跨声单级风扇设计指标
重构前后风扇流场计算的结果对比如图5、图6所示。表3列出100%转速设计点总体性能计算结果的详细对比。可见,重构前后的叶轮机内流求解基本一致,重构偏差处于较低水平。事实上,即便存量代码完全复用,由于计算机截断误差、非线性函数使用、流场求解驻涡、脱落涡等固有非稳定结构等,重构过程也不可避免地会引入重构偏差。另外,就本文算例而言,不同的转静交界面也是不可忽略的偏差源。
图5 近壁面相对马赫数计算结果 |
图6 风扇总体性能特性图 |
重构前后程序及其与主流商业软件并行计算耗时的定性比较如图7所示。有必要说明,一方面,存量代码关于转静交界面的计算量大于重构后程序,所以重构前后程序计算耗时对比并不严谨;另一方面,重构程序并行方案是否较优需要基于超算的大规模并行计算进行评估。此处的耗时比较只是为了对重构代码的计算速度有初步感性认识。
图7 气动仿真模块计算内核耗时对比 |
随着计算机软硬件不断发展和数值仿真技术不断成熟,内流数值仿真技术被逐渐引入航空发动机通流部件气动设计、性能评估等诸多方面并发挥着越来越重要的作用。与此同时,发展大规模并行全三维内流仿真软件的必要性也日益凸显。综合考虑目前条件,并通过实践验证,基于并行框架的代码重构不失为一种合理可行的大规模并行软件研发技术路径,可为航空发动机的研发提供助力。
(田晓沛,中国航发研究院,高级工程师,主要从事航空发动机压气机气动设计方法与内流仿真技术研究)
参考文献
[1] 陈懋章, 刘宝杰. 风扇/压气机气动设计技术发展趋势:用于大型客机的大涵道比涡扇发动机[J]. 航空动力学报, 2008, 23(6): 961-975.
[2] 陈懋章. 叶轮机气动力学研究及其发展趋势[C]// 中国航空学会航空百年学术论坛动力学分论坛. 中国航空学会, 2003.
[3] 刘宝杰, 邹正平, 严明,等. 叶轮机计算流体动力学技术现状与发展趋势[J]. 航空学报, 2002, 23(5): 394-404.
[4] 陈懋章. 粘性流体动力学基础[M]. 北京: 高等教育出版社, 2002.
[5] 刘魁, 刘婷, 魏杰,等. 数字孪生在航空发动机可靠性领域的应用探索[J]. 航空动力, 2019(4): 61-64.
《航空动力》期刊由中国航空发动机集团有限公司主管、中国航空发动机研究院主办,《航空动力》编辑部出版。国内统一连续出版物号为 CN10-1570/V;国际标准连续出版物号为 ISSN 2096-5702;邮发代号为82-467;广告发布登记号为京顺工商广告登字20190001号 。
关注世界航空发动机前沿动态,反映国内外航空发动机管理与技术创新成果,传播航空发动机知识与文化,促进我国航空发动机自主创新能力的提升。
《航空动力》设有专稿、综述、技术、管理、市场、维修、动态等主要栏目,每期还围绕航空发动机及燃气轮机在技术、管理等方面的新理论和新方法策划相应的专题。
《航空动力》面向航空发动机及燃气轮机领域的决策、管理、科研、生产、使用、维护的专业人士,高校师生,以及关注航空发动机及燃气轮机事业发展的热心人士。
《航空动力》所刊登的文章密切跟踪世界航空动力、燃气轮机领域的最新科技动态,准确把握发展规律,权威预测发展趋势,及时展示创新成果,为科研和管理工作提供支撑。
以Word文件格式,发送至:
tg@aerospacepower.cn
请在邮件主题中注明:
《航空动力》投稿+作者姓名+联系电话
地址:北京市顺义区顺兴路21号
邮编:101304
电话:010-56680887
网址:https://www.aerospacepower.cn
本刊享有以数字化方式复制、汇编、发行并由互联网传播所刊载文章的权利,相关著作权使用费均包含在本刊一次性支付的稿酬中。作者向本刊投稿,即视为同意我刊上述声明。如有特殊要求,请在投稿时声明。未经本刊书面授权擅自使用上述版权作品之个人、机构或媒体,均属侵犯本刊合法权益,本刊保留依法追究的权利。
ICP备案/许可证编号:京ICP备18031095号
《航空动力》编辑部 版权所有