一种用于SPH算法的邻近粒子搜索方法及系统技术方案

技术编号:21035906 阅读:38 留言:0更新日期:2019-05-04 06:00
本发明专利技术公开了一种用于SPH算法的邻近粒子搜索方法及系统,涉及计算流体力学技术领域。本发明专利技术通过构建预置单胞网格并计算每个粒子所在位置的网格单元编号;将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元;逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对。该方法可以有效提高软件的鲁棒性。通过算例验证,使用本发明专利技术进行流体力学问题的数值计算仿真是可行的,有效提高了计算效率。

【技术实现步骤摘要】
一种用于SPH算法的邻近粒子搜索方法及系统
本专利技术涉及计算流体力学
,具体是涉及一种用于SPH算法的邻近粒子搜索方法及系统。
技术介绍
随着计算机技术和CFD计算方法的迅速发展,SPH法逐渐用于流体数值计算过程中,但是传统的SPH法计算规模大,计算效率低,因此,在现有有效研究手段缺乏的情况下,开展SPH法改进算法研究工作来提高计算效率显得尤为重要。对于流体域内任一个粒子,其核函数有一个支持域,在支持域内的所有粒子都会与该粒子发生相互作用,都是该粒子的临近粒子。临近粒子会随计算时间的变化而改变,因此在每一个迭代步都必须进行临近粒子的搜索算法,才能确定并计算粒子对之间的相互作用。相对于整个计算域来说,单个粒子的支持域非常小,因此其临近粒子数相对于整个计算域粒子数来说也很少,因SPH方法是无网格法,粒子之间无连接关系,因此如何高效地从数量庞大、散乱无规则的粒子群中找出它们的临近粒子,是亟待解决的重要问题。粒子的排列顺序对计算速度也有较明显的影响,因为在计算粒子对之间相互作用的时候,需要访问两个粒子的数据。CPU访问数据时,总线往往会将数据所在的内存及附近的数据调入缓存区,若两粒子在内存中的位置相距较远,则CPU从缓存区取得数据的几率下降。对于整个计算域来说,若每个粒子与它的配对粒子相隔较远,则会耗费大量的CPU处理时间,导致程序的整体计算效率降低。
技术实现思路
本专利技术的目的是为了克服上述
技术介绍
的不足,提供一种用于SPH算法的邻近粒子搜索方法及系统,在大规模无网格流体计算时,提高计算效率。本专利技术提供一种用于SPH算法的邻近粒子搜索方法,包括以下步骤:建立所有粒子区域的笛卡尔坐标系,构建预置单胞网格并计算每个粒子所在位置的网格单元编号;将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元;逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对。在上述方案的基础上,所述构建预置单胞网格并计算每个粒子所在位置的网格单元编号,具体包括以下步骤:遍历所有粒子,计算出粒子所在坐标系的最大坐标值(Xmax,Ymax,Zmax)、最小坐标值(Xmin,Ymin,Zmin)和粒子的最大光滑长度hmax;计算预置单胞网格的边长d,ε为容差,计算公式为:d=2hmax+ε(1)将粒子所在坐标系用边长d等分成大小相同的网格单元,计算网格单元编号最大值:(imax,jmax,kmax):计算网格单元总数CellNum:CellNum=imax*jmax*kmax(3);计算每个粒子所在位置的网格单元编号(i,j,k),将粒子对号入座:在上述方案的基础上,所述将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元,具体包括以下步骤:将所有粒子根据计算出的每个粒子的网格单元编号映射到网格单元中;获取每个粒子所对应的网格单元编号(i,j,k);根据网格单元位置,找出粒子的相邻网格单元,2维情况下相邻网格单元有8个,3维情况下相邻网格单元有26个。在上述方案的基础上,所述逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对,具体包括以下步骤:逐个比较与相邻网格单元中的粒子的距离,若距离小于2倍光滑长度,则与其建立粒子对,若距离大于2倍光滑长度,则认为两个粒子之间没有相互作用,不建立粒子对。在上述方案的基础上,该方法还包括以下步骤,逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对之前,对粒子在内存中的存储顺序进行排序,排序方法为:对每个粒子,计算:根据(ip,jp,kp),按位置顺序计算每个粒子的Mortonkey,转换成二进制码后,按照编码插空顺序排列;将所有粒子按照Mortonkey值从小到大调整在内存中的存储顺序,最后按照Z-curveorder算法重新排序。在上述方案的基础上,当第一次粒子排序之后,后续的SPH计算中再次进行粒子排序时,比较当前粒子排序结果和上一次粒子排序结果,仅对顺序发生改变的粒子进行内存数据移动操作。本专利技术还提供一种用于SPH算法的邻近粒子搜索系统,包括:网格编号计算模块,其用于:建立所有粒子区域的笛卡尔坐标系,构建预置单胞网格并计算每个粒子所在位置的网格单元编号;相邻网格获取模块,其用于:将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元;粒子对建立模块,其用于:逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对。在上述方案的基础上,该系统还包括粒子排序模块,其用于:逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对之前,对粒子在内存中的存储顺序进行排序,排序方法为:根据(ip,jp,kp),按位置顺序计算每个粒子的Mortonkey,转换成二进制码后,按照编码插空顺序排列;将所有粒子按照Mortonkey值从小到大调整在内存中的存储顺序,最后按照Z-curveorder算法重新排序。与现有技术相比,本专利技术的优点如下:(1)本专利技术通过构建预置单胞网格并计算每个粒子所在位置的网格单元编号;将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元;逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对。该方法可以有效提高软件的鲁棒性。通过算例验证,使用本专利技术进行流体力学问题的数值计算仿真是可行的,有效提高了计算效率。(2)本专利技术逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对之前,根据Mortonkey对粒子在内存中的存储顺序进行排序。采用本专利技术的方法进行粒子排序后,粒子与临近粒子的内存位置相距较近,可明显改观程序的计算效率,对并行计算速度的影响尤其显著。(3)当第一次粒子排序之后,后续的SPH计算中再次进行粒子排序时,比较当前粒子排序结果和上一次粒子排序结果,仅对顺序发生改变的粒子进行内存数据移动操作。而不必对所有的粒子都重新操作一次,大大提升计算效率。附图说明图1是本专利技术实施例的预置单胞网格和粒子配对算法示意图;图2是本专利技术实施例的计算MortonKey的方法示意图;图3是本专利技术实施例的粒子排序前的示意图;图4是本专利技术实施例的粒子排序后的示意图;图5是本专利技术实施例的不同水粒子尺寸;图6是本专利技术实施例的水粒子在0.01s时刻的半球运动状态;图7是本专利技术实施例的水粒子在0.02s时刻的半球运动状态;图8是本专利技术实施例的水粒子在0.03s时刻的半球运动状态。具体实施方式下面结合附图及具体实施例对本专利技术作进一步的详细描述。实施例1:本专利技术实施例提供一种用于SPH算法的邻近粒子搜索方法,包括以下步骤:参见图1所示,建立所有粒子区域的笛卡尔坐标系,构建预置单胞网格并计算每个粒子所在位置的网格单元编号;将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元;逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对。所述构建预置单胞网格并计算每个粒子所在位置的网格单元编号,具体包括以下步骤:遍历所有粒子,计算出粒子所在坐标系的最大坐标值(Xmax,Ymax,Zmax)、最小坐标值(Xmin,Ymin,Zmin)和粒子的最大光滑长度hmax;计算预置单胞网格的边长d,本文档来自技高网...

【技术保护点】
1.一种用于SPH算法的邻近粒子搜索方法,其特征在于,包括以下步骤:建立所有粒子区域的笛卡尔坐标系,构建预置单胞网格并计算每个粒子所在位置的网格单元编号;将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元;逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对。

【技术特征摘要】
1.一种用于SPH算法的邻近粒子搜索方法,其特征在于,包括以下步骤:建立所有粒子区域的笛卡尔坐标系,构建预置单胞网格并计算每个粒子所在位置的网格单元编号;将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元;逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对。2.如权利要求1所述的方法,其特征在于:所述构建预置单胞网格并计算每个粒子所在位置的网格单元编号,具体包括以下步骤:遍历所有粒子,计算出粒子所在坐标系的最大坐标值(Xmax,Ymax,Zmax)、最小坐标值(Xmin,Ymin,Zmin)和粒子的最大光滑长度hmax;计算预置单胞网格的边长d,ε为容差,计算公式为:d=2hmax+ε(1)将粒子所在坐标系用边长d等分成大小相同的网格单元,计算网格单元编号最大值:(imax,jmax,kmax):计算网格单元总数CellNum:CellNum=imax*jmax*kmax(3)计算每个粒子所在位置的网格单元编号(i,j,k),将粒子对号入座:i=int[(X-Xmin)/d]+1(4)。j=int[(Y-Ymin)/d]+1k=int[(Z-Zmin)/d]+13.如权利要求1所述的方法,其特征在于:所述将粒子映射到网格单元中,获取每个粒子所对应的网格单元编号,根据网格单元编号找出粒子的相邻网格单元,具体包括以下步骤:将所有粒子根据计算出的每个粒子的网格单元编号映射到网格单元中;获取每个粒子所对应的网格单元编号(i,j,k);根据网格单元位置,找出粒子的相邻网格单元,2维情况下相邻网格单元有8个,3维情况下相邻网格单元有26个。4.如权利要求1所述的方法,其特征在于:所述逐个比较每个粒子与相邻网格单元中的粒子的距离并建立粒子对,具体包括以下步骤:逐...

【专利技术属性】
技术研发人员:孙旋涂正光印强强郭江涛舒孟炯周律何乾坤
申请(专利权)人:湖北航天技术研究院总体设计所
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1