Allow replication to be different along different dimensions
This commit is contained in:
parent
766c86247a
commit
01f952865c
@ -136,7 +136,13 @@ namespace CosmoTool {
|
||||
void setPeriodic(bool on, CoordType replicate)
|
||||
{
|
||||
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,
|
||||
@ -193,7 +199,7 @@ namespace CosmoTool {
|
||||
Cell *base_cell;
|
||||
|
||||
bool periodic;
|
||||
CoordType replicate;
|
||||
coords replicate;
|
||||
|
||||
Node *buildTree(Cell **cell0,
|
||||
uint32_t NumCells,
|
||||
|
@ -46,18 +46,29 @@ namespace CosmoTool
|
||||
{
|
||||
public:
|
||||
typedef Coord Coords[N];
|
||||
Coord replicate;
|
||||
Coords replicate;
|
||||
|
||||
ReplicateGenerator(const Coords& x, Coord shift)
|
||||
{
|
||||
face = 0;
|
||||
replicate = shift;
|
||||
std::fill(replicate, replicate+N, shift);
|
||||
numFaces = spower<N,long>(3);
|
||||
std::copy(x, x+N, x_base);
|
||||
if (!next())
|
||||
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()
|
||||
{
|
||||
if (face == numFaces)
|
||||
@ -72,7 +83,7 @@ namespace CosmoTool
|
||||
int c_face;
|
||||
c_face = 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);
|
||||
}
|
||||
if (no_move)
|
||||
|
Loading…
Reference in New Issue
Block a user