From b411e856071ff18415b0d2b32fc6874822906dfe Mon Sep 17 00:00:00 2001 From: quemy Date: Thu, 7 Feb 2013 23:24:15 +0100 Subject: [PATCH] The topology is reconstructed even if the number of nodes did not change in order to start the model more than once (Nils Mangelsen) --- smp/src/topology/complete.cpp | 21 +++++++--------- smp/src/topology/hypercubic.cpp | 43 +++++++++++++++------------------ smp/src/topology/ring.cpp | 20 +++++++-------- 3 files changed, 38 insertions(+), 46 deletions(-) diff --git a/smp/src/topology/complete.cpp b/smp/src/topology/complete.cpp index c50fc1cfe..354e79df6 100644 --- a/smp/src/topology/complete.cpp +++ b/smp/src/topology/complete.cpp @@ -32,18 +32,15 @@ Contact: paradiseo-help@lists.gforge.inria.fr void paradiseo::smp::Complete::operator()(unsigned nbNode, std::vector>& 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 line; - line.assign(nbNode,true); - matrix.assign(nbNode, line); - for(unsigned i = 0; i < nbNode; i++) - matrix[i][i]=false; - } + std::vector line; + line.assign(nbNode,true); + matrix.assign(nbNode, line); + for(unsigned i = 0; i < nbNode; i++) + matrix[i][i]=false; } diff --git a/smp/src/topology/hypercubic.cpp b/smp/src/topology/hypercubic.cpp index 67001cf79..29c041008 100644 --- a/smp/src/topology/hypercubic.cpp +++ b/smp/src/topology/hypercubic.cpp @@ -34,32 +34,29 @@ Contact: paradiseo-help@lists.gforge.inria.fr void paradiseo::smp::Hypercubic::operator()(unsigned nbNode, std::vector>& 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 + } } } diff --git a/smp/src/topology/ring.cpp b/smp/src/topology/ring.cpp index ab5b9721e..0c966c18e 100644 --- a/smp/src/topology/ring.cpp +++ b/smp/src/topology/ring.cpp @@ -32,19 +32,17 @@ Contact: paradiseo-help@lists.gforge.inria.fr void paradiseo::smp::Ring::operator()(unsigned nbNode, std::vector>& 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 line; - line.assign(nbNode, false); - matrix.assign(nbNode, line); + std::vector 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; } }