The topology is reconstructed even if the number of nodes did not change in order to start the model more than once (Nils Mangelsen)

This commit is contained in:
quemy 2013-02-07 23:24:15 +01:00
commit b411e85607
3 changed files with 41 additions and 49 deletions

View file

@ -32,18 +32,15 @@ Contact: paradiseo-help@lists.gforge.inria.fr
void paradiseo::smp::Complete::operator()(unsigned nbNode, std::vector<std::vector<bool>>& matrix) const
{
if(nbNode != matrix.size())
{
matrix.clear();
matrix.clear();
matrix.resize(nbNode);
for(auto& line : matrix)
line.resize(nbNode);
matrix.resize(nbNode);
for(auto& line : matrix)
line.resize(nbNode);
std::vector<bool> line;
line.assign(nbNode,true);
matrix.assign(nbNode, line);
for(unsigned i = 0; i < nbNode; i++)
matrix[i][i]=false;
}
std::vector<bool> line;
line.assign(nbNode,true);
matrix.assign(nbNode, line);
for(unsigned i = 0; i < nbNode; i++)
matrix[i][i]=false;
}

View file

@ -34,32 +34,29 @@ Contact: paradiseo-help@lists.gforge.inria.fr
void paradiseo::smp::Hypercubic::operator()(unsigned nbNode, std::vector<std::vector<bool>>& matrix) const
{
if(nbNode != matrix.size())
{
// Check if the number of node is coherent with an hypercube
assert((nbNode & (nbNode-1)) == 0);
// Check if the number of node is coherent with an hypercube
assert((nbNode & (nbNode-1)) == 0);
unsigned power = 0, i, j;
while((nbNode & 1 << power) == 0)
power++;
unsigned power = 0, i, j;
while((nbNode & 1 << power) == 0)
power++;
matrix.clear();
matrix.resize(nbNode);
matrix.clear();
matrix.resize(nbNode);
for(auto& line : matrix)
line.resize(nbNode);
for(auto& line : matrix)
line.resize(nbNode);
// Construction
matrix[0][0] = false;
for(unsigned dim = 1; dim <= power; dim ++)
{
unsigned stepNbNode = 1 << (dim-1); //represents the number of nodes for the current step.
for(i = 0; i < stepNbNode; i++)
for(j = 0; j < stepNbNode; j++)
{
matrix[i+stepNbNode][j+stepNbNode]=matrix[i][j]; //Diagonal part
matrix[i][j+stepNbNode]= matrix[i+stepNbNode][j] = (i == j); //Identity
}
}
// Construction
matrix[0][0] = false;
for(unsigned dim = 1; dim <= power; dim ++)
{
unsigned stepNbNode = 1 << (dim-1); //represents the number of nodes for the current step.
for(i = 0; i < stepNbNode; i++)
for(j = 0; j < stepNbNode; j++)
{
matrix[i+stepNbNode][j+stepNbNode] = matrix[i][j]; //Diagonal part
matrix[i][j+stepNbNode] = matrix[i+stepNbNode][j] = (i == j); //Identity
}
}
}

View file

@ -32,19 +32,17 @@ Contact: paradiseo-help@lists.gforge.inria.fr
void paradiseo::smp::Ring::operator()(unsigned nbNode, std::vector<std::vector<bool>>& matrix) const
{
if(nbNode != matrix.size())
{
matrix.clear();
matrix.clear();
matrix.resize(nbNode);
for(auto& line : matrix)
line.resize(nbNode);
matrix.resize(nbNode);
for(auto& line : matrix)
line.resize(nbNode);
std::vector<bool> line;
line.assign(nbNode, false);
matrix.assign(nbNode, line);
std::vector<bool> line;
line.assign(nbNode, false);
matrix.assign(nbNode, line);
for(unsigned i=0; i < nbNode; i++)
matrix[i][(i+1)%nbNode]=true;
for(unsigned i=0; i < nbNode; i++)
matrix[i][(i+1)%nbNode]=true;
}
}