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 *base_cell;
|
||||
|
||||
bool periodic;
|
||||
|
||||
Node *buildTree(Cell **cell0,
|
||||
uint32_t NumCells,
|
||||
uint32_t depth,
|
||||
|
@ -31,6 +31,7 @@ namespace CosmoTool {
|
||||
template<int N, typename ValType, typename CType, typename CellSplitter>
|
||||
KDTree<N,ValType,CType,CellSplitter>::KDTree(Cell *cells, uint32_t Ncells)
|
||||
{
|
||||
periodic = false;
|
||||
|
||||
base_cell = cells;
|
||||
numNodes = Ncells;
|
||||
@ -366,6 +367,18 @@ namespace CosmoTool {
|
||||
Cell *best = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
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