《爆炸与冲击》
1 引 言
近年来,随着大规模科学与工程计算的需求,许多计算问题已经超出单机所能承受的能力范围,并行计算对于大规模科学与工程计算越来越重要[1]。目前,并行计算机的基本存储方式主要有共享存储与分布式存储两种。MPI(Message Passing Interface)——消息传递接口是消息传递函数库的标准规范,是目前广泛使用的并行编程工具[2],MPI基于分布式存储,但同样适应于共享存储,具有移植性好、功能强大、效率高等多种优点。
MMIC-3D(Multi-Material in Cell for 3D)[3]是基于Euler型有限差分方法的用于爆炸与冲击问题仿真计算的三维多物质弹塑性流体动力学程序,能处理3种及3种以上物质混合格的界面计算问题,解决了三维Euler方法中多物质计算的难题,实现了对空中爆炸、密实介质中爆炸及聚能射流形成等典型的爆炸与冲击问题的数值模拟。在单机32位操作系统下,受限于计算机内存和计算速度,原有MMIC-3D串行程序最多只能计算200万网格的问题,远远达不到工程和科研的需求,迫切需要将原有的串行程序改造为并行程序,以扩大计算规模,加快求解速度。
并行程序设计不但包含了串行程序设计,而且还包含了更多富有挑战性的问题[4],由于并行程序需要通信、同步等操作,使得并行程序设计远比串行程序设计复杂得多。Lagrange方法,无论采用显式或隐式差分格式,最后都会归结为代数或矩阵运算,对于这类运算都有现成的并行算法可用。采用Euler方法,由于需要处理物质在网格间的输运问题,隐含在输运算法中的数据相关性及子区域间的关联性不易发现。本文针对Euler方法并行设计的复杂性,阐述了处理Euler输运算法中处理数据相关性的一种方法,以及挖掘子区域间关联性的过程。程序测试是程序开发的一个重要环节,考虑到并行程序的测试复杂性,将测试分为两个阶段,提出了一些实用的测试策略,缩短了整个程序的开发周期,并在八节点集群上测试了程序的并行性能。
2 MMIC-3D数学模型及数值方法介绍
MMIC-3D串行程序采用不考虑外力、外源和热传导,非守恒形式的Euler 流体弹塑性动力学偏微分方程组[5]。数值计算采用算子分裂格式,将上述非守恒形式的方程组分为Lagrange步和Euler步进行计算,并在计算中按空间x、y、z 3个方向进行分裂。
MMIC-3D采用模糊界面方法,该方法是指在一个混合网格中,不区分物质界面;根据模糊方法计算体积比,把体积比作为模糊权重系数;对网格进行分类,不同类网格之间视为物质界面;对介质进行模糊排序,决定输运优先权和模糊输运表;根据模糊权重计算输运量;按模糊输运表进行输运;在建模和计算中应用模糊方法,故称为“模糊界面方法”[6]。
3 PMMIC-3D并行算法实现的关键性问题
PMMIC-3D (Parallelization for Multi-Material in Cell-3D)采用域分解并行策略,域分解是指把计算域分成若干子区域,一个处理器处理一个或多个子区域。采用域分解并行策略,PMMIC-3D的并行算法设计主要应考虑如下问题:(1) 如果原有串行算法有数据相关性,如何解除相关性;(2) 采用计算域分区的并行方式,各子区域间关联性如何,即需要多少额外的网格储存临近子区域的信息。
3.1 数据相关性分析
MMIC-3D程序采用欧拉型有限差分算法,分Lagrange步和Euler输运步分别进行计算,使得当前计算网格最多受到周围26个网格的影响,这是能采用计算域分区方式对MMIC-3D并行的有利条件,同时必须分析计算程序所有语句间的依赖关系,称之为相关分析(Dependency Analysis)。对于采用域分解策略的三维多物质流体弹塑性并行程序来说,在1个时间步内,在同1个空间三重循环下若满足:当前网格物理量的更新依赖于周围网格相关变量更新后的值,则该算法会存在数据相关性。用表达式表示为
其中a的更新直接或间接依赖于周边网格a更新后的值。
采用Euler方法的数值模拟,数据相关性一般出现在Euler输运步上。模糊界面方法采用“方向分裂”输运,3个方向的输运在1个空间三重循环下进行,当前网格的物理量的更新依赖于周边相关物理量更新后的值,更新后网格物理量影响周围网格相关量的更新,因此存在数据依赖性,且这种依赖关系影响到整个计算域。如何解除数据相关性,且保持原有的计算精度,要与具体算法结合起来。为消除PMMIC-3D中Euler输运步的数据相关性,当前网格输运采用相邻网格更新前的值,同时为了消除因此而带来过量输运的问题,将原有在1个空间三重循环下完成的3个方向的输运改为在3个空间三重循环下完成,即每个空间三重循环只进行1个方向的输运,3个方向的输运顺序随时间步交替变换。
上一篇:光纤光栅应变传感器在霍普金森压杆上的冲击试
下一篇:没有了