爆炸与冲击问题的大规模高精度计算(3)
图4 两个不同时刻的爆轰波波阵面精细结构(密度梯度)Fig.4 Detonation wave front fin structure at two different times(density gradient)
图5 实验胞格结构[23]Fig.5 Experimental cell structures[23]
图6 数值胞格结构Fig.6 Numerical cell structures
当前,对气相爆炸机理的研究是数值模拟的研究热点[24-25].图7和图8分别是通过数值计算得到的爆轰波马赫反射的胞格结构和爆轰波在弯管中传播的胞格结构.前者可以观察到爆轰波在单独压缩作用下的变化,包括三波点方向和尺寸的变化.对后者而言,爆轰波在上壁面受到稀疏作用的影响,胞格尺寸变大,强度降低;在下壁面受到不断地压缩作用,胞格尺寸变小,强度增加.当爆轰波通过弯管段后,经过一段距离后重新恢复到初始的状态.通过对两者进行分析,可以研究爆轰波在反射或者衍射等作用下不同的响应机理.
图7 爆轰波马赫反射的胞格结构Fig.7 The cell structure of detonation wave Mach reflectio
图8 爆轰波在30°弯管中传播的胞格结构Fig.8 The cell structure of detonation wave propagation in 30°bend
3 三维爆炸与冲击问题的大规模并行计算
针对未来新型高效毁伤战斗部及防护结构的发展需求,仿真软件需具备从炸药爆轰、毁伤元形成直至毁伤元与目标作用全物理过程的仿真计算能力,特别是由于欧拉型软件涉及武器弹药设计和国防安全,以美国为代表的西方国家对我国是完全禁运的,必须依靠自主开发,因此开展大规模并行计算方法研究和欧拉型爆炸与冲击问题大规模仿真软件的开发是十分必要的.
针对爆炸与冲击问题的大规模计算需求,重点开展了三维多物质流体动力学欧拉数值方法特别是三维多物质界面处理算法的并行化方法研究,开发了基于消息传递接口(message passing interface,MPI)的爆炸与冲击问题并行计算程序[26].
3.1 子区域间的关联性
子区域间的关联性反映了子区域与邻近子区域的重叠程度.为了计算需要,往往要在子区域的边界增加一些网格来储存临近子区域的信息.如图9所示,将一个二维的计算域分解成九个子区域,其中灰色网格为子区域4与周围子区域的重叠网格,称为“子区域重叠网格”.欧拉方法的子区域的关联性来源于两个方面:输运带来的关联性及数值格式带来的关联性.
图9 重叠子区域Fig.9 The overlapping subdomain
网格物理量的改变量等于该网格在3个方向流进量与流出量的差,因此在欧拉输运歩里一个网格正确的更新包含该网格与邻近网格的输运.以单方向输运为例,如图10所示,流场速度沿着正方向,则单方向k网格一次正确的更新包含k?1和k网格的输运,即k网格物理量的改变等于k?1网格流进量(速度为负方向值为负)与k网格流出量(速度为负方向值为负)的差.因此对于图1子区域4来说,要在其左边及下边各增加一层网格,如图11所示.
图10 单方向输运Fig.10 The single direction transport
图11 输运带来的关联性Fig.11 The relevance caused by transport
由于在实际的更新运算中,采用的数值格式往往会需要周边的网格物理量.考虑一个简单的数值格式
则k网格更新需要k和k+1网格的物理量,则需要在子区域4的右边界及上边界各增加一层网格,如图12所示,由输运及格式带来的关联性,其中灰色实线网格参与计算更新,而灰色虚线网格只临时存储周边网格的信息,不参与计算更新.
图12 输运及数值格式带来的关联性Fig.12 The relevance caused by transport and numerical format
3.2 数据相关性分析
由图10可知,k?1网格的输运会造成k?1和k网格物理量的改变,因此当k网格输运时,k?1和k网格物理量已经改变.并且由于受制于CFL条件,当前网格的输运只会影响到周围26个网格,即当前网格的某种物质的输运量可写作如下函数关系式
式中,?t为时间步长,?x,?y,?z为网格步长,V为物质体积,jflag为网格中物质种类标志,u为网格速度,?V为某种物质的输运量,下标ijk为当前网格,(i±1)(j±1)(k±1)为相邻的26个网格.由于当前网格输运时,相邻及自身网格物理量已更新,若输运算法中V,jflag采用输运更新后的值,则算法中存在数据相关性.为消除数据相关性,采用V,jflag未更新的值,同时为了消除因此而带来的过量输运问题,将原串行算法中在一个三重空间循环下完成三个方向的输运,改为在一个三重空间循环下只进行一个方向的输运,伪代码见表1.
通过大量的爆炸与冲击问题算例,对并行程序进行了测试.考虑到基于消息传递接口并行程序的测试与调试的困难,把对并行程序的测试分为2个阶段[27]:在阶段1,不依赖于实际的物理模型,测试分区对计算结果的影响;在阶段2,设计合理的物理模型,测试计算结果是否符合物理规律.
文章来源:《爆炸与冲击》 网址: http://www.bzycjzz.cn/qikandaodu/2021/0709/1298.html