一种基于任意多面体非结构网格的MPI并行数据结构制造技术

技术编号:31800420 阅读:23 留言:0更新日期:2022-01-08 11:01
本发明专利技术涉及一种基于任意多面体非结构网格的MPI并行数据结构,使用多面体非结构网格对流场区域进行网格划分,按照划分网格的网格元素进行全局编号,并记录不同网格元素之间的连接关系,其中,网格元素包括点、线、面、单元,通过自定义分区程序对网格进行分区生成若干网格块,并将网格块分配至不同的进程且每个进程分配至少一个网格块,创建并存储进程内不同网格元素的分布式列表,将网格元素的分布式列表结合全局的网格连接关系生成当前进程中的网格连接关系,并使用稀疏矩阵CSR方式存储当前进程内的网格连接关系;本发明专利技术的MPI并行数据结构,能够降低单CPU存储负荷保证CFD程序求解规模,同时可以保持较高的并行效率。同时可以保持较高的并行效率。同时可以保持较高的并行效率。

【技术实现步骤摘要】
一种基于任意多面体非结构网格的MPI并行数据结构


[0001]本专利技术属于算流体力学计算领域,尤其是MPI并行数据结构领域。

技术介绍

[0002]随着飞行器外形日益复杂,网格规模日益扩大,同时高精度格式需要巨大的计算开销,传统单处理器的串行求解将很难满足实际需求,因此流体力学CFD的实际应用需要借助高性能的并行计算方法,CFD中常用的并行编程模型主要包括OpenMP、CUDA等共享存储模型和MPI等分布式存储模型;由于CFD数值求解中,网格单元之间的求解是耦合的,因此直接使用OpenMP等共享存储模型其并行效率很低,同时对于大规模网格,单机内存可能无法存储所有网格数据;MPI等分布式存储模型配合自定义分区工具(如Metis)的使用,将整体网格的求解划分到多个进程中,通过MPI函数实现进程之间的通信。这种分布式存储的方式很适合CFD的并行计算;尽管MPI并行编程模型很适合CFD的并行计算,但是程序的结构设计比较复杂,具体的对于网格元素如何分布式表示,网格元素之间的连接关系如何分布式存储,是实现并行的难点,尤其对于任意多面体非结构网格,其网格信息较于结构网格更难处理。

技术实现思路

[0003]为了解决上述的问题,本专利技术通过以下技术方案来实现上述目的:
[0004]一种基于任意多面体非结构网格的MPI并行数据结构,包括以下步骤,
[0005]S1、使用多面体非结构网格对流场区域进行网格划分;
[0006]S2、按照划分网格的网格元素进行全局编号,并记录不同网格元素之间的连接关系,其中,网格元素包括点、线、面、单元;
[0007]S3、通过自定义分区程序对网格进行分区生成若干网格块,并将网格块分配至不同的进程且每个进程分配至少一个网格块,其中,进程数为m,m≥1;
[0008]S4、创建并存储第i进程内不同网格元素的分布式列表,其中,1≤i≤m;
[0009]S5、将网格元素的分布式列表结合全局的网格连接关系生成当前i进程中的网格连接关系,并使用稀疏矩阵CSR方式存储i进程内的网格连接关系,其中,1≤i≤m。
[0010]作为本专利技术的进一步优化方案,所述网格元素进行全局编号的步骤为:
[0011]S21、由网格元素的点坐标和点、线之间的连接关系,确定点和线的全局编号;
[0012]S22、采用网格拓扑结构依次确定网格元素中面的全局编号和单元的全局编号。
[0013]作为本专利技术的进一步优化方案,所述网格分区的方式包括多级递归二分法和多级k路划分,其中,若分区个数小于8时,采用多级递归二分法;若分区个数大于等于8时,采用多级k路划分。
[0014]作为本专利技术的进一步优化方案,所述创建i进程中分布式列表的步骤包括:
[0015]S41、在每个进程中生成单元局部编号和全局编号的映射数组;
[0016]S42、根据网格拓扑结构在编号映射数组中增加虚拟单元编号,其中,虚拟单元指的是与当前进程相邻的单元;
[0017]S43、创建单元的分布式列表,然后生成其他网格元素的分布式列表。
[0018]作为本专利技术的进一步优化方案,所述创建单元的分布式列表的内容包括用于进程之间通信的单元,该单元包括网格块内边界单元和虚拟单元。
[0019]作为本专利技术的进一步优化方案,所述存储第i进程内不同网格元素的分布式列表的内容包括网格元素的全局编号、当前进程中局部编号、在相邻进程中的局部编号。
[0020]作为本专利技术的进一步优化方案,所述进程之间的通信采用MPI并行通信方式,且每个进程均遍历所有网格块;当所遍历的网格块属于当前进程时,则向邻居网格块所在进程发送数据;当所遍历的网格块属于其邻居时,则从邻居网格块所在进程接收数据;其中,发送和接受数据使用MPI非阻塞式发送接受函数,实际计算部分在MPI后台进行。
[0021]作为本专利技术的进一步优化方案,所述进程内的网格连接关系包括进程内网格元素的分布式列表、CSR存储信息、连接关系局部编号对应的全局编号。
[0022]作为本专利技术的进一步优化方案,所述稀疏矩阵CSR方式存储i进程内的单元和面之间网格连接关系的实现方式包括记录单元周围面数量的一维数组及记录单元周围面进程内局部编号的一维数组。
[0023]本专利技术的有益效果在于:
[0024]1)本专利技术通过采用Metis分区和MPI并行通信的策略,等效于将任务分成多个子任务,可以有效降低单CPU存储负荷,保证CFD程序求解规模;
[0025]2)MPI通信模式使用非阻塞式通信,可以实现计算与通信的重叠,保持较高的并行效率;
[0026]3)分布式列表和网格连接关系分布式CSR存储方式,适应于任意多面体非结构网格,可以有效提高并行CFD程序的运行;并且按行压缩稀疏矩阵CSR方式可以减少网格连接关系所占存储空间。
附图说明
[0027]图1是本专利技术中多面体非结构网格的MPI并行数据结构实现的流程图;
[0028]图2为本专利技术中分布式数据的产生与存储示意图;
[0029]图3为本专利技术中进程内单元属性分类图;
具体实施方式
[0030]下面结合附图对本申请作进一步详细描述,有必要在此指出的是,以下具体实施方式只用于对本申请进行进一步的说明,不能理解为对本申请保护范围的限制,该领域的技术人员可以根据上述申请内容对本申请作出一些非本质的改进和调整。
[0031]如图1至图3所示的一种基于任意多面体非结构网格的MPI并行数据结构,通过网格信息的分布式存储,提高网格求解规模并且提升并行求解效率;
[0032]其中,如图1所示的并行数据结构实现步骤包括:
[0033]步骤1:使用任意多面体非结构网格对所研究的流场区域进行网格划分;
[0034]步骤2:创建点、线、面、单元等网格元素的编号信息,根据网格拓扑结构,记录网格元素之间连接关系;
[0035]步骤3:使用Metis分区程序包对网格进行分区,根据为当前求解任务设置的进程
数,一个进程分配一个或多个网格块;
[0036]步骤4:运行CFD并行程序,为各进程创建网格元素的分布式列表;
[0037]步骤5:根据点、线、面、单元等网格元素的分布式列表数据以及全局网格连接关系,通过分布式CSR存储方式存储进程内网格连接关系;
[0038]具体的,步骤S1如图2所示包括:使用网格划分软件对所研究流场使用非结构网格进行网格划分,网格数据保持成自定义后缀.emesh的网格文件;网格文件内容主要包括:

网格点的坐标;

网格线与点的连接关系,即网格线两端的点编号;

边界的网格线编号;优选的可以选择专利技术人研究团队自主研发的CFD解算器EasyCFD求解流场;
[0039]步骤S2、将网格划分软件中生成的网格文件(后缀为.emesh)导入CFD解算器中,根据程序前处理模块功能,生成点、线、面、单元等网格元素本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于任意多面体非结构网格的MPI并行数据结构,其特征在于:包括以下步骤,S1、使用多面体非结构网格对流场区域进行网格划分;S2、按照划分网格的网格元素进行全局编号,并记录不同网格元素之间的连接关系,其中,网格元素包括点、线、面、单元;S3、通过自定义分区程序对网格进行分区生成若干网格块,并将网格块分配至不同的进程且每个进程分配至少一个网格块,其中,进程数为m,m≥1;S4、创建并存储第i进程内不同网格元素的分布式列表,其中,1≤i≤m;S5、将网格元素的分布式列表结合全局的网格连接关系生成当前i进程中的网格连接关系,并使用稀疏矩阵CSR方式存储i进程内的网格连接关系,其中,1≤i≤m。2.根据权利要求1所述的一种基于任意多面体非结构网格的MPI并行数据结构,其特征在于:所述网格元素进行全局编号的步骤为:S21、由网格元素的点坐标和点、线之间的连接关系,确定点和线的全局编号;S22、采用网格拓扑结构依次确定网格元素中面的全局编号和单元的全局编号。3.根据权利要求2所述的一种基于任意多面体非结构网格的MPI并行数据结构,其特征在于:所述网格分区的方式包括多级递归二分法和多级k路划分,其中,若分区个数小于8时,采用多级递归二分法;若分区个数大于等于8时,采用多级k路划分。4.根据权利要求3所述的一种基于任意多面体非结构网格的MPI并行数据结构,其特征在于:所述创建的第i进程中分布式列表的步骤包括:S41、在每个进程中生成单元局部编号和全局编号的映射数组;S42、根据网格拓扑结构在编号映射...

【专利技术属性】
技术研发人员:张兵周汉生马培勇
申请(专利权)人:合肥工业大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1