流体力学中的相邻粒子算法中的树形搜索法纠正与实现

本文探讨了流体力学中相邻粒子算法的树形搜索法存在的问题,指出国内教材策略的不足,可能导致搜索遗漏。通过分析外文资料,提出正确的实现方式应从树的根节点开始逐层遍历,确保搜索完整。此外,文章还简要提及了使用Java语言的实现示例,而对Fortran语言在流体力学应用的评价。
摘要由CSDN通过智能技术生成

流体力学中的相邻粒子算法中的树形搜索法纠正与实现

国内的教材中对于树形搜索算法的描述大多如下: image


但是在实际使用的过程中,发现这种策略是有问题的,他们的方法指出:检测粒子i的搜索立方体空间是否与并列的层次内的其他节点所占空间有重合的地方。该方法意图从i的同层次节点开始查找,并从这些层次往下搜索。但实际真应该是这样的吗? 答案是否定的,在实际的实现过程中,我发现查找同层次的节点是会遗漏的,有些论文中指出,应该向上查找,但方法都是不对的,我找到了一篇外文,该文章内容如下: 

image

大概的意思是在树的每一层,去检查i的搜索立方体是否与树形结构的当前节点的问题域有重合,如果有,则继续向下查找直到到达代表粒子的叶子结点,没有重合则停止向下查找。因此,问题就在于这里,应该从树的根节点开始查找,一层一层的去遍历该树。搜索的时间复杂度为Nlg(N)。

在流体力学中,使用fortran语言进行编程,对该语言真的不感冒。(该语言在流体力学应该还能发挥点光和热)。 简单的用java语言给个实现:

import java.util.ArrayList;


class Position{
	public double x;
	public double y;
	public Position(double x, double y) {
		this.x = x;
		this.y = y;
	}
	
	
}
//粒子
class Cell{
	public long id;
	public double h;//平滑度
	public Position position;
	public Cell() {
		position=new Position(0,0);
	}
	
}
//正方形区域
class Rect{
	public Position center;//中心
	public double sideLength;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值