快速行进方法的自适应网格数据结构以克服 RAM 限制

计算科学 C++ 稀疏矩阵 自适应网格细化
2021-12-18 08:37:24

在空间位置的均匀网格上 (xi,yj,zk)

 xi=x0+iΔx,i=0,,nx
 yj=y0+jΔy,j=0,,ny
 zk=z0+kΔz,k=0,,nz

我有一个速度函数:V(xi,yj,zk)

给定一个起始位置我可以通过快速行进方法 (FMM)计算到达空间中所有点所需的时间: ) 。(xs,ys,zs)T(xi,yj,zk)

但是,我想在大于 RAM 的网格上执行此操作,例如nx=ny=nz=2000

FMM 需要访问所有速度数据。不可能只在网格的一部分上运行它,然后以某种方式组合结果。

然而,存储速度数据的数据结构可以是稀疏的。只要 FMM 可以请求任何的值,它就不会关心它是如何在内部存储的。(xi,yj,zk)

我想象一次设置值块:

struct SparseArray3D {
public:
    SparseArray3D(int nx, int ny, int nz);
    void setBlock(int i0, int j0, int k0, float block[64][64][64]); // i0 <= i < i0 + 64, j0 <= j < j0 + 64, k0 <= k < k0 + 64  
    float& operator()(int i, int j, int k); // needed by FMM
}; 

你对我可以使用哪种数据结构有什么建议吗?

(您可能已经猜到了)我正在使用 C/C++ 编程。

0个回答
没有发现任何回复~