Allow replication to be different along different dimensions

This commit is contained in:
Guilhem Lavaux 2013-03-07 09:45:52 -06:00
parent 766c86247a
commit 01f952865c
2 changed files with 22 additions and 5 deletions

View File

@ -136,7 +136,13 @@ namespace CosmoTool {
void setPeriodic(bool on, CoordType replicate) void setPeriodic(bool on, CoordType replicate)
{ {
periodic = on; periodic = on;
this->replicate = replicate; std::fill(this->replicate, this->replicate+N, replicate);
}
void setPeriodic(bool on, const coords& replicate)
{
periodic = on;
std::copy(replicate, replicate+N, this->replicate);
} }
uint32_t getIntersection(const coords& x, CoordType r, uint32_t getIntersection(const coords& x, CoordType r,
@ -193,7 +199,7 @@ namespace CosmoTool {
Cell *base_cell; Cell *base_cell;
bool periodic; bool periodic;
CoordType replicate; coords replicate;
Node *buildTree(Cell **cell0, Node *buildTree(Cell **cell0,
uint32_t NumCells, uint32_t NumCells,

View File

@ -46,18 +46,29 @@ namespace CosmoTool
{ {
public: public:
typedef Coord Coords[N]; typedef Coord Coords[N];
Coord replicate; Coords replicate;
ReplicateGenerator(const Coords& x, Coord shift) ReplicateGenerator(const Coords& x, Coord shift)
{ {
face = 0; face = 0;
replicate = shift; std::fill(replicate, replicate+N, shift);
numFaces = spower<N,long>(3); numFaces = spower<N,long>(3);
std::copy(x, x+N, x_base); std::copy(x, x+N, x_base);
if (!next()) if (!next())
abort(); abort();
} }
ReplicateGenerator(const Coords& x, Coords& shift)
{
face = 0;
std::copy(shift, shift+N, replicate);
numFaces = spower<N,long>(3);
std::copy(x, x+N, x_base);
if (!next())
abort();
}
bool next() bool next()
{ {
if (face == numFaces) if (face == numFaces)
@ -72,7 +83,7 @@ namespace CosmoTool
int c_face; int c_face;
c_face = q_face % 3; c_face = q_face % 3;
q_face /= 3; q_face /= 3;
x_shifted[i] = x_base[i] + (c_face-1)*replicate; x_shifted[i] = x_base[i] + (c_face-1)*replicate[i];
no_move = no_move && (c_face == 1); no_move = no_move && (c_face == 1);
} }
if (no_move) if (no_move)