三维多物质欧拉界面处理的并行算法研究(2)
①计算域最外层的循环划分为较多的子域,内层循环尽量少划分子域;
②尽量将计算域划分为正方体,以使通信面积最小;
③在划分过程中,若3个方向的网格划分数目不同,则使外层网格最多。
设npx,npy,npz为X,Y,Z 3个方向的分区数量(都为正整数),那么计算域子区域的数目np=npx×npy×npz,子区域的编号myid可通过MPI库函数中的MPI_Comm_rank来获取,计算机的进程数目可通过MPI_Comm_size来获取,具体实现代码分别为:
MPI _Comm_ rank(MPI _Comm_world,myid, ierr)
MPI_Comm_size(MPI_omm_world,numprocs, ierr)
Mepx,Mepy,Mepz表示3个方向的进程坐标,具体如式(1)所示:
对于距计算边界较近的子区域,若其周围没有其它子区域,可使用MPI 的虚拟化子区域MPI_Proc_null。
用来确定与目标子区域相邻子区域的编号的公式如式(2)所示:
假设取X,Y,Z3个方向的分区数量分别为 2、3、2,那么共有12个子区域,其中一种划分方法如图4所示。
图4 三维拓扑结构示意图
将X方向分为2块,Y方向分为3块,Z方向分为2块,各进程的编号myid的值为0,1,2,…,11。
2.2.2 任意划分区域的实现
为了实现计算域能够在3个方向上的任意划分,最关键的就是要解决网格在3个方向的整除问题。所以需要在无法被整除的方向上附加一些网格,以X向为例,附加网格的数量如式3所示:
附加网格不参与数据计算,只进行存储和通信。但在进行计算域划分的时候,还是应尽量保证整除,因为这样设计的程序会较为简单。
2.2.3 子区域的通信
本文设计的并行化算法需要实现计算域3个方向上的任意划分,但其仅能保证一个方向上的数据连续通信,其它两个方向的数据通过MPI函数库的MPI_TYPE_HVECTOR的自定义数据类型来处理。其调用形式如下:
MPI_TYPE_HVECTOR(COUNT,BLOCKLENGTH,STRIDE,OLDTYPE,NEWTYPE,IERROR)
其中,COUNT表示整合数据的块数,BLOCKLENGTH表示每个子区域中所含元素的个数,STRIDE表示各子区域起始位置间的字节数,OLDTYPE表示旧的数据类型,NEWTYPE表示新的数据类型。
由于Y,Z方向的数据均不连续,以yz平面为例,用户通过自定义一个数据类型,将Y、Z方向的不连续数据进行打包,使他们能够进行正常通信。具体代码如下:
MPI_Type_Hvector (mysizey,1, (mysizex+2)*8,
MPI_R eal8,Txx,ierr) MPI_Type_Hvector(mysizez,1,(mysizex+2)*(mysizey+2)*8,Txx,Tx,ierr)
MPI_Type_commit(Tx,ierr) MPI_Type_free(Txx,ierr)
其中,Txx表示y方向的一组数据,其为最终Tx数据的中间过渡值,在完成最终的数据类型定义后,需将中间过渡的数据类型释放掉。
2.3 并行后处理
并行计算的后处理主要包括对关键点的数据采集、可视化软件的接口设计方面。针对不同的需求可编制不同的后处理程序,本文编制的后处理程序可将并行计算后的结果显示出来,满足所需的后处理要求。
3 并行程序设计及性能分析
3.1 并行程序设计
本文设计的并行程序,由主程序、前处理初始化程序、边界条件处理子程序和主循环计算子程序组成[7],各部分的功能如下所示。
1)主程序:程序的核心构成,贯穿于程序的整个执行过程,完成各子程序的调用,采用最节简的语言设计;
2)前处理初始化程序:主要完成人机交互,能让用户选择计算的种类,并进行有关参数的设置。同时要完成并行计算循环的起始位置设置,各进程的位置及与其相关进程的编号;
3)边界条件处理子程序:处理计算模型的压力,速度,网格标志,介质标志等物理量的边界条件;
4)主循环计算子程序:主循环程序包括人工粘性步、Lagrange步、Euler步、修正步和输出子程序组成。其中,人工粘性步用来计算人工粘性、损伤度和偏应力等;Lagrange步用来计算压力梯度对质团的速度、能量、动量和比内能的影响;Euler步使用改进的Youngs界面处理方法对能量、质量、体积和动量进行输运;修正步子程序主要对计算的数值进行修正,以保证计算能够继续保持下去;输出子程序主要完成计算结果的二维、三维切片输出。
整个并行程序的执行流程如图5所示。
图5 程序执行流程图
3.2 性能分析
1)并行性能测试
选取三介质聚能射流模型[8]为测试算例,处理92×92×300、151×151×200、151×151×300和200×200×300 4个不同网格数的模型,分别记为1,2,3,4号模型。测试共分为8个区,计算步骤为5 000步,取每100步所需的时间作为其运行的平均速度。各模型的加速比如表1所示。
文章来源:《爆炸与冲击》 网址: http://www.bzycjzz.cn/qikandaodu/2021/0709/1296.html