三维多物质弹塑性流体动力学方法的并行算法研(2)
为考核因解除数据相关性而带来的精度影响,采用Harive和Fletche[7-8]设计的测试精度的方法。该方法定义了L1误差,其公式如下
式中:为网格的体积,为数值计算的网格介质体积分数,为准确的网格介质体积分数。数值算例计算参数见表1,其结果为计算到400步的结果。由表1可以看出,并行算法的精度和原有串行算法的精度基本一致,说明所采用的解除数据相关性的策略是可行的。
表1 计算参数和结果Table 1 Calculation parameters and resultsCellnumberSpatialstepTimestepFluidvelocityEParallelalgorithmSerialalgorithm50×50×500.10.1ux=0.5;uy=0.50.1640.162
3.2 子区域边界网格(层)数量的确定
子区域边界网格是用来储存临近子区域相关变量的额外网格。采用Euler数值方法,子区域间的关联性,即子区域边界网格的数量取决于两个因素:(1) 因算法本身所固有的因素,当前网格物理量依赖于周边网格物理量的更新;(2) 当前网格物理量的更新需要周边网格的物理量。考虑到通信所占用的开销,子区域边界网格(层)的数量应该考虑以上两个因素所增加的网格(层)数的最小值。以一维Euler输运步为例,说明子区域边界网格数量的确定过程。
如图1(a)所示,其中u为当前k网格的速度值。k网格的更新(输运)影响k+1网格的物理量,也就是说k+1网格的物理量依赖于k网格和k+1网格物理量的更新(输运),即k网格为k+1网格的依赖网格,k+1网格为k网格的影响网格。因此若想保证图1(a)左端1网格更新正确,需要在计算域左侧增加1层网格,并参与计算更新(输运),如图1(a)的灰色虚网格。由于在实际的更新运算中,往往需要周边网格物理量的信息,因此考虑如下的差分格式
则k网格更新需要k、k+1、k-1网格的物理量。综合以上两种因素,对于一维Euler输运步的运算来说,需要在计算域增加3层子区域边界网格,左边增加2层,右边增加1层,如图1(b)所示,其中左边灰色虚网格参与运算,两端的虚网格不参与运算更新。
(a) Extra cell added considering the first factor (b) Extra cells added considering two factors图1 一维Euler输运步子区域边界虚网格确定过程Fig.1 The process of extra cells added in Euler model
4 PMMIC-3D并行程序测试
在他的名著《软件的测试技巧》一书中给出测试的定义:“程序测试是为了发现错误而执行程序的过程”[9]。基于MPI并行程序的测试与调试的主要困难在于:除了串行程序的所有问题之外,并行程序还会有一些其它的问题存在。具体体现在:(1) 并行算法设计的复杂性,对于一个串行程序很容易实现的问题,并行实现起来可能就困难重重,潜在的算法逻辑错误不易发现;(2) 多进程之间协同作业(任务的映射与分发),导致并行程序比串行程序难于驾驭;(3) 基于MPI 的并行程序增加了通信、进程同步等操作,增加了程序潜在的风险,一些不当的操作可能会导致程序异常中断或死锁。
考虑到基于MPI并行程序的测试与调试的困难,把对PMMIC-3D并行程序的测试分为2个阶段:阶段1,不依赖于实际的物理模型、测试分区对计算结果的影响;阶段2,设计合理的物理模型,测试计算结果是否符合物理规律。阶段1是阶段2的基础,只有在阶段1测试正确的基础上才能进行阶段2的测试。
(a) 2D geometric model (b) 3D model图2 聚能装药二维几何模型及三维模型图Fig.2 2D geometric model and 3D model of shaped charge
聚能射流算例的计算几何模型如图2所示,其中图2(a)为二维尺寸结构图,图2(b)为三维模型图。药柱直径为60 mm,高为90 mm。依据网格步长设计了4个算例,见表2。聚能射流的数值模拟涉及到的材料包括炸药、金属药型罩及空气3种介质。炸药采用B炸药,金属罩采用45钢。爆轰产物采用JWL状态方程;空气采用理想气体状态方程;对于金属材料,考虑其在高温、高压、高应变率下表现的动态行为,采用Mie-Grüneisen状态方程描述。起爆方式采用点起爆,并采用简单的燃烧模型模拟爆轰波在炸药中的传播过程。
ModelChargemass/(g)Spatialstep/(mm×mm×mm)CellnumberModelChargemass/(g)Spatialstep/(mm×mm×mm)CellnumberExample.00×1.00×1.0080×80×180Example.04×0.04×0.04227×227×480Example.06×0.06×0.06151×151×300Example.03×0.03×0.03301×301×600
对于射流算例,阶段1的测试采用射流头部速度作为监测变量,监测精度为10-11 m/s,算例1的分区方式为:3×1×1,1×3×1,1×1×3;算例2的分区方式为:1×4×1,1×1×4;算例3的分区方式为:2×2×2,1×2×4;算例4的分区方式为:2×2×8,2×2×6。测试表明,不同分区方式下的计算结果保持一致,表明PMMIC-3D并行程序在网格数较多的情况下,分区方式不影响计算结果(算例4网格数为5 436万)。
文章来源:《爆炸与冲击》 网址: http://www.bzycjzz.cn/qikandaodu/2021/0709/1302.html