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)
|
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,
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user