三维多物质欧拉界面处理的并行算法研究
0 引言
爆炸冲击涉及大量的非线性瞬态动力学问题,属于复杂大变形的流体弹塑性力学范畴,而Euler算法[1-2]对于解决该类问题具有很大的优势,但其很难描述各介质的界面,所以界面处理的精度问题一直是Euler算法的核心问题。Youngs界面技术能够对两种物质界面进行精确的处理,但在爆炸过程中,会涉及到多种物质的混合,只有各物质界面能实现网格类型的精确区分,才能得到正确的计算结果,故需对现有的Youngs界面技术进行改进以解决其无法对两种以上物质混合进行界面处理的问题。
针对上述问题,本文通过使用网格中量最大的物质来代替量最少的物质对Youngs界面技术进行改进,使其能够处理多物质混合界面,然后将其与Euler算法结合用来处理爆炸冲击问题。最后对改进的算法进行了并行设计及程序编写,并对空中爆炸和聚能射流进行了数值模拟,证明了算法及程序的正确性。
1 改进的多物质欧拉界面处理算法概述
在笛卡尔坐标系下,Euler方法对控制方程组采用算子分裂算进行离散。一方面,按物理效应分裂为Lagrange步和Euler步,Lagrange步计算偏应力、压力对内能和速度的影响,Euler步计算各网格之间质量、体积、动量和能量输运。另一方面,通过交替输运方法将多维输运问题转化为多个一维问题,同时能保证按网格间物质流通的方向完成输运。
在Euler算法中,当混合网格中有3种物质的时候,无法直接使用Youngs界面技术进行界面处理。为了使计算继续进行,将Youngs界面技术进行如下改进:首先按物质的体积份额进行从大打小排序,用最大的物质替代最少的物质,如此就将3种物质就转化为两种物质了,从而就可以继续应用Youngs界面技术进行界面处理。
2 算法的并行化及实现
2.1 Euler方法的并行计算理论分析
在Euler方法数值模拟的过程中,网格固定,物质在网格间流进流出。各网格的物质输运会导致其周围网格部分物理量的变化,而在输运算法中隐含的子区域间的关联性和数据相关性不容易被发现,而这两个问题仅存在于Euler的输运步中,是Euler方法并行计算[3-6]实现的关键。
2.1.1 数据子区域的划分和特点
并行计算需要将计算域划分为若干块来独立进行计算,那么各子区域间必然会存在重叠和相关的部分,具体如图1所示。
图1 重叠子区域
网格物理量的改变量等于该网格3个方向上的流进量减去流出量的差值,故Euler方法的输运歩里各网格的更新应包含该网格与邻近网格的输运。
以图2中的单方向输运为例,流场速度为正,则单方向k网格一次物理量的改变包含k-1和k网格的输运,其值为k-1网格流进量减去k网格流出量的差值。
图2 单向输运
因此对于图1中的区域4而言,需在其下边和左边分别增加一层网格,具体如图3所示。
图3 输运相关性
此外,在实际运算中,k网格物理量的数值更新也需要知道k,k+1网格物理量的值,因此4号区域的右边和上边也要增加一层网格,但所增加的网络为虚拟网格,无需参与数据更新。在实际的并行算法设计中,要尽量避免在虚拟网格上进行通信,以免出错。
2.1.2 数据更新与通信的分析
由图2的分析可知,单方向输运的时候,网格物理量的输运变化会导致自身网格和其下阶段网格的物理量产生变化,但在实际计算中,由于CFL条件的限制,各网格的输运变化只会对其周围26个网格的物理量产生更新和影响,即网格输运的数据相关性。
可以使用原本未被更新的物理量来消除网格输运的数据相关性,但这样又会出现过量输运的问题。故综合考虑,将3个方向的输运转变为三重循环下的单一方向的输运,这是本文进行并行算法设计的基础。
2.1.3 变量数据的定义
并行计算设计中,涉及大量变量的定义和MPI库函数的调用。在变量的定义过程中,需注意各进程内私有变量的数据更新无法对其它进程中该变量的数据进行同步更新,这样就会出现错误,所以当私有变量的数据更新会对周围网格产生影响的时候,必须要将更新后的变量数据向相关进程进行传递。全局变量的数据一经改变,所有进程中该变量的数据都可以得到相应的更新。
2.2 并行前处理
2.2.1 创建可以任意划分的计算域
设计的并行程序能够完成计算域3个方向任意维度的划分,划分原则如下:
文章来源:《爆炸与冲击》 网址: http://www.bzycjzz.cn/qikandaodu/2021/0709/1296.html