乔龙,李艳亮,杨思源,唐海龙,尹强,吴奥奇,曾凯,钱战森
1.中国航空工业空气动力研究院高速高雷诺数气动力航空科技重点试验室,辽宁 沈阳 110034
2.西安数峰信息科技有限责任公司,陕西 西安 710005
随着计算机硬件技术及数值计算技术的快速发展,计算流体力学(CFD)已成为航空飞行器设计阶段性能评估的重要手段,并有效地促进飞行器型号的快速迭代。CFD 软件作为航空飞行器设计过程中的重要工具,在飞行器设计的多个阶段得到广泛应用。
早期的航空CFD 软件主要采用面向数据流的结构软件设计技术,具有资源分散、代码独立、研发周期长等特点。同时,受早期软件研发环境影响,这些软件普遍采用Fortran 或C等语言实现向过程的开发,大量代码的积累也使其难以摆脱面向过程的开发模式。这对现代软件工程中代码的复用带来了难以克服的障碍,更阻碍了CFD软件所包含工业知识的共享与传播[1]。随着现代软件工程技术的快速发展,以及相对高级的程序语言的开发推广,基于C++或Python等语言的面向对象程序设计技术得到广泛应用。面向对象程序设计主要利用抽象、封装等机制,实现包含对象、类、继承等内容的软件系统设计[2-3]。其中,类包含了数据和操作,对象是类的实例化,继承是类之间的信息传递关系,对象和继承的功能有效地支撑了代码复用。此外,面向对象所带来的多态性,也能够有效提升操作的透明性、可理解性和维修性。基于上述特点及优势,面向对象程序设计目前已应用于多个相对较新的CFD软件中,如OpenFOAM[4]、SU2[5]等。
国内在CFD 理论研究及软件研发方面已经开展了大量工作,并取得了丰硕的成果。近年来,国内工业CFD 软件研制单位也紧密结合现代软件工程技术开展面向对象CFD 软件研制,如中国空气动力研究与发展中心研发的大规模并行CFD 软件PHengLEI[1,6],该软件基于C++语言和插件化思想开发,具有良好的可扩展性,目前已在国内众多高校、研究所进行了推广应用。
中国航空工业空气动力研究院作为航空工业下属的唯一气动力研究机构,在CFD 理论研究、CFD 软件研发及风洞试验验证方面已有大量积累,初步形成了包含ENSMB[7]、UNSMB[8]、OVERSET[9]等核心模块的专业CFD软件平台,且依靠自主高性能计算硬件在多个航空型号研制中发挥了重要作用。在此基础上,中国航空工业空气动力研究院紧密结合软件工程及国产高性能硬件发展趋势,联合西安交通大学陶文铨院士团队和西安数峰信息科技有限责任公司开展面向对象非结构航空CFD软件体系结构研究,发展大规模航空CFD软件ARI-CFD,为进一步形成可服务于航空器型号设计的生产型CFD工具奠定基础。
本文主要通过航空CFD软件体系结构需求分析、面向对象软件体系结构设计以及软件测试与验证等研究,系统介绍了面向对象非结构航空CFD软件ARI-CFD V1.0的设计思路及软件功能。
作为航空器选型过程中的重要工具,CFD 软件在航空领域具有广泛的应用,同时,飞行器精细化设计也对CFD软件复杂流场仿真能力提出了明确的需求。
首先,航空CFD软件体系结构设计需要满足大规模复杂流动仿真需求。当前,航空型号计算任务具有规模大、工况多、模型复杂、周期短等特点,这也对CFD软件提出了明确的需求,如网格生成耗时短、并行可扩展性强、鲁棒性高、结果精准度高、前后处理接口丰富等。基于非结构网格、粗粒度MPI 并行、二阶精度有限体积法离散的CFD 软件,具有较好的复杂几何适应能力、并行计算效率、鲁棒性及守恒性;同时,通过结合大量风洞数据验证保证CFD 软件的精准性,可以满足常规航空器设计中复杂流动数值仿真的需求,目前已在飞行器型号设计中得到广泛应用。
其次,航空CFD软件体系结构设计需要满足可持续性快速研制需求。目前,以空气动力学为核心的多学科数值仿真已逐渐成为航空飞行器多学科设计的重要手段,国外已形成多个工业级多学科仿真软件。作为飞行器多学科仿真的核心,CFD软件应满足其面向多学科软件快速可持续性扩展的需求,如软件功能模块独立、维护性高、开发周期短、复用性高、可扩展性强、适应多学科多物理场仿真等。采用面向对象程序设计思想,以物理场为数据载体,以微积分方程离散求解为目标,发展用于微积分方程求解的通用基础框架,并基于此研制航空CFD软件,可以保证CFD软件具有良好的可持续性,同时也可满足面向航空飞行器多学科多物理场仿真的可扩展性需求(如高超声速气动热[10]、直升机噪声[11]等)。
基于上述对航空CFD软件体系结构需求的分析,中国航空工业空气动力研究院CFD 软件研发团队结合面向对象程序设计思想,实现基于非结构网格、粗粒度MPI并行及二阶精度有限体积法离散的航空CFD软件体系结构设计,形成了大规模自主航空CFD软件ARI-CFD V1.0。
为保证软件具有较好的易维护性及可扩展性,ARICFD 软件整体采用分层式程序设计,主要包括通用基础功能层、功能模块层和应用程序层。通用基础功能层是软件前处理、求解器及后处理功能实现的基础,也可作为面向不同应用场景其他求解器研制的基础。功能模块层为前处理、求解器及后处理应用程序的核心支撑模块,主要功能是基于基础层模块实现多种CFD 前后处理及求解算法。ARI-CFD软件体系结构如图1所示。
图1 ARI-CFD软件体系结构Fig.1 Architecture of ARI-CFD
以下对ARI-CFD软件通用基础功能层、功能模块层和应用程序层的组成及功能进行介绍。
通用基础功能层主要作用是软件底层数据类型、数据操作及数据接口的定义及实现,主要包括基础工具、网格、场、材料、控制参数、IO 工具、CFD 算子等模块。主要类的功能如下:
(1)网格(mesh)类:存储网格点、网格面、网格单元、拓扑构成等基础数据,并实现网格数据访问、网格拓扑关系查询、网格整体操作(缩放、平移、旋转)等功能。
(2)场(field)类:存储网格类对应的流场物理量,包含内部场、物理边界场、并行边界场的基础数据。场的形式包含标量场、矢量场、张量场三种,可用于实现密度、压强、速度等流场物理量存储,并实现基本的各类数学运算。
(3)材料(materials)类:存储流动介质的基础数据,如本构关系、介质常量、介质关键参数等,可用于实现空气、水等介质的物理性质描述。
(4)控制参数(configure)类:用于管理用户的输入参数,可以实现参数导入、参数检查和给定默认参数等功能。
功能模块层按照应用程序功能需求,分为前处理、求解器及后处理三类功能模块。前处理功能模块主要以网格数据为核心,实现由原始网格到求解器所需网格数据的转换,主要包括网格转换、网格聚合、并行分区、对偶转换等功能模块。求解器功能模块主要针对基于网格的物理场的计算,主要功能模块包括通量计算、湍流模型、时间推进、边界条件等。同时,考虑这些模块内部具体功能的多样性及其继承性,采用“派生+管理器”的方式实现具体功能的组织,保证具体功能与求解器有效隔离。后处理功能主要包括流场合并及流场相关衍生量计算模块。
应用程序层包含多个基于功能模块层构建出的独立应用工具,可根据具体计算需求参数进行应用程序定制,实现面向不同应用场景(串行/并行、无黏/层流/湍流等)的航空流场数值计算。
ARI-CFD软件基于求解器功能模块对象类搭建而成,每个类包含相应的数据成员及操作函数成员。其中类的数据成员主要包括外部传入的数据及内部私有的数据两类。在边界条件、湍流模型、时间推进、通量计算等核心流场求解模块中,主要通过构造流场包(FlowPackage)数据结构,实现不同模块间流场主要求解信息的传递。流场包类图如图2所示。
图2 流场包类图Fig.2 Class diagram of FlowPackage
流场包主要包含流动控制参数对象(FlowConfigure)、网格及其相关参数结构体(MeshStruct)、材料对象(Material)、基本物理场指针结构体(FieldPointer)、梯度场指针结构体(GradientFieldPointer)、残值场指针结构体(Residual FieldPointer)等数据。同时,流场包也提供对其不同私有数据的访问接口函数,可保证数据的有效访问及修改。流场包的设计可有效简化不同功能模块间数据的传递,同时也为流场求解器核心数据的统一管理奠定了良好的基础。
流场包(FlowPackage)中,场指针结构体中是包含多个相关物理场的指针结构体。ARI-FeiLian 软件采用传统有限体积法,因此,这些物理场均为基于控制体单元的单元场(ElementField)。单元场是基本场(BaseField)的派生类,其数据包括场所依赖的网格指针、场的状态、场的名称、场的数值等,这些数据的修改均由场的公开函数接口实现。单元场与基本场的类图如图3所示。基于场指针结构体的流场包(FlowPackage)设计,可以在兼容基本流场求解器基础上实现面向不同物理场求解器的快速扩展。
图3 单元场类图Fig.3 Class diagram of ElementField
ARI-CFD 软件采用基于网格分区的消息传递式并行程序设计,主要通过在并行边界处采用虚单元实现并行边界数据传递,如图4所示。
图4 并行数据传递示意图Fig.4 Diagram of parallel data transfer
ARI-CFD软件采用基于格心数据存储的有限体积法,并行边界虚单元作为单元场(ElementField)的组成与真实控制体单元共同参与计算。通过调用单元场的公开接口函数SetGhostValueParallel,可以实现单元场中虚单元数据的更新。该函数主要通过对同一并行边界上的所有待传递数据进行打包,并利用MPI 的非阻塞式通信实现两个相邻子区域间并行边界处数据的传递。
ARI-CFD 软件将并行通信作为底层单一物理场的基本函数来实现,可避免在不同物理场组合及调用中并行代码的重复编写,具有较好的通用性。同时,单一物理场的并行数据更新采用边界数据打包的形式,可有效减少不同进程间的通信次数,进而可实现并行性能的有效提升。因此,ARI-CFD 软件并行架构的设计即兼顾了面向对象数据私有、功能独立的特性,同时也兼顾了大规模并行计算的可扩展性,这也为后续基于软件基础功能模块开发新求解器奠定了良好基础。
ARI-CFD 软件前处理流程如图5 所示。首先,创建控制参数对象并读入相关参数,控制参数对象主要用于控制整个前处理流程的具体实现,具体参数的初始化主要依据用户输入的xml 格式参数文件。其次,创建网格管理器对象并实现其局部变量初始化,网格管理器为前处理计算功能的核心模块,通过调用具体前处理函数可依据控制参数实现全部前处理操作。网格管理器主要功能包括网格生成、网格操作、网格对偶转化、壁面距离计算、网格聚合、网格分区、前处理结果文件输出等。其中,网格生成过程可根据参数文件读取原始网格信息,建立前处理所需“点-面-体”拓扑关系,并完成网格几何信息计算。
图5 前处理计算流程Fig.5 Flow chart of preprocess
ARI-CFD 软件求解器主要采用双时间迭代求解方法,同时引入多重网格加速求解功能。多重网格迭代中,可依据初始化时所确定的多重网格循环路径,实现细网格向粗网格的插值、粗网格向细网格的修正以及时间推进求解。其中,时间推进求解中包含残值计算、残值光顺、变量更新等功能,相关时间迭代参数设置主要在初始化过程中完成,如通量计算格式、限制器类型、残值光顺类型、CFL 数等。采用多步Runge-Kutta时间迭代的求解器主要流程如图6所示。
图6 ARI-CFD软件求解流程Fig.6 Flow chart of simulation of ARI-CFD
为验证ARI-CFD软件的有效性,本文分别选取NASA湍流资源网站[12]的二维零压力梯度平板算例和NACA0012翼型算例进行计算,对软件湍流模型正确性及升阻力计算精准性进行对比分析。
在二维零压力梯度平板算例中,通过研究湍流边界层的发展,可证实软件湍流模型的正确性。来流条件给定为:马赫数Maref=0.2、温度Tref=300K、参考长度L=1m下的来流雷诺数为Reref=5×106。平板长为2m,平板前缘位于x=0 位置,具体边界条件及模型尺寸如图7所示。
图7 湍流平板边界条件示意图Fig.7 Boundary conditions of turbulent plate
本文采用Spalart-Allmaras 湍流模型进行计算,计算结果与美国国家航空航天局(NASA)文献提供结果对比如图8 和图9 所示。可以看出,ARI-FeiLian 软件计算所得无量纲湍流变量及无量纲速度分布与NASA 数据基本一致,这表明ARI-CFD软件黏性计算及湍流模型合理,可以有效地对湍流边界层发展进行描述。
图8 x=0.97m处μt/μinf分布对比Fig.8 Comparison between μt/μinf at x=0.97m
图9 不同位置无量纲速度分布曲线对比Fig.9 Comparison between dimensionless velocity distribution at different stations
NACA0012 翼型主要用来测试不同迎角下,ARI-Fei Lian软件对表面压力和升阻力系数的计算能力。来流条件为:马赫数Maref=0.15、温度Tref=300K、参考长度L=1m 下的来流雷诺数为Reref=5×106,来流迎角依次选取α=0、2、4、6、8、10、12、15、16,侧滑角β=0,翼型表面采用无滑移绝热壁面条件,远场采用黎曼远场条件。采用Spalart-Allmaras湍流模型计算所得结果如图10所示,升力系数CL随来流迎角变化曲线与CFL3D 计算结果完全一致,同时α=0 和15的Cp曲线也与NASA 公布的CFL3D 软件计算结果一致。测试结果也证实了ARI-CFD 软件可以较好地捕捉大迎角条件下的流场基本特征。
图10 NACA0012翼型测试结果Fig.10 Results of NACA0012 test
在航空CFD软件体系结构需求分析的基础上,本文主要介绍了基于面向对象思想的非结构航空CFD 软件ARICFD V1.0的架构设计和数据结构设计,阐述了软件前处理及解算器流程设计。同时,也结合二维零压力梯度平板和NACA0012 翼型等标准算例,对软件的典型流动模拟能力进行了验证。此外,当前非结构软件底层通用基础模块已经成功应用于航空飞行器结冰软件研制,后续也可为进一步研制面向航空飞行器空气动力学多学科模拟的自主工业软件提供有力支撑。