Started work to support periodic boundaries in KDTree
This commit is contained in:
parent
d724a7be66
commit
1b06786e63
@ -184,6 +184,8 @@ namespace CosmoTool {
|
|||||||
Cell **sortingHelper;
|
Cell **sortingHelper;
|
||||||
Cell *base_cell;
|
Cell *base_cell;
|
||||||
|
|
||||||
|
bool periodic;
|
||||||
|
|
||||||
Node *buildTree(Cell **cell0,
|
Node *buildTree(Cell **cell0,
|
||||||
uint32_t NumCells,
|
uint32_t NumCells,
|
||||||
uint32_t depth,
|
uint32_t depth,
|
||||||
|
@ -31,7 +31,8 @@ namespace CosmoTool {
|
|||||||
template<int N, typename ValType, typename CType, typename CellSplitter>
|
template<int N, typename ValType, typename CType, typename CellSplitter>
|
||||||
KDTree<N,ValType,CType,CellSplitter>::KDTree(Cell *cells, uint32_t Ncells)
|
KDTree<N,ValType,CType,CellSplitter>::KDTree(Cell *cells, uint32_t Ncells)
|
||||||
{
|
{
|
||||||
|
periodic = false;
|
||||||
|
|
||||||
base_cell = cells;
|
base_cell = cells;
|
||||||
numNodes = Ncells;
|
numNodes = Ncells;
|
||||||
nodes = new Node[numNodes];
|
nodes = new Node[numNodes];
|
||||||
@ -365,7 +366,19 @@ namespace CosmoTool {
|
|||||||
CoordType R2 = INFINITY;
|
CoordType R2 = INFINITY;
|
||||||
Cell *best = 0;
|
Cell *best = 0;
|
||||||
|
|
||||||
recursiveNearest(root, 0, x, R2, best);
|
recursiveNearest(root, 0, x, R2, best);
|
||||||
|
if (periodic)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
ReplicateGenerator<N> replicate(x);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
recursiveNearest(root, 0, replicate.getPosition(), R2, best);
|
||||||
|
}
|
||||||
|
while (replicate.next());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
return best;
|
return best;
|
||||||
}
|
}
|
||||||
|
37
src/replicateGenerator.hpp
Normal file
37
src/replicateGenerator.hpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#ifndef __REPLICATE_GENERATOR_HPP
|
||||||
|
#define __REPLICATE_GENERATOR_HPP
|
||||||
|
|
||||||
|
namespace CosmoTool
|
||||||
|
{
|
||||||
|
|
||||||
|
template<typename Coord, int N>
|
||||||
|
class ReplicateGenerator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ReplicateGenerator(const Coord x[N])
|
||||||
|
{
|
||||||
|
face = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool next()
|
||||||
|
{
|
||||||
|
if (face == (2*N))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
face++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Coord getPosition()
|
||||||
|
{
|
||||||
|
return x_shifted;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Coord x_shifted[N];
|
||||||
|
int face;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user