流体力学中的相邻粒子算法中的树形搜索法纠正与实现
国内的教材中对于树形搜索算法的描述大多如下:
但是在实际使用的过程中,发现这种策略是有问题的,他们的方法指出:检测粒子i的搜索立方体空间是否与并列的层次内的其他节点所占空间有重合的地方。该方法意图从i的同层次节点开始查找,并从这些层次往下搜索。但实际真应该是这样的吗? 答案是否定的,在实际的实现过程中,我发现查找同层次的节点是会遗漏的,有些论文中指出,应该向上查找,但方法都是不对的,我找到了一篇外文,该文章内容如下:
大概的意思是在树的每一层,去检查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;