diff --git a/src/core/Atoms.cpp b/src/core/Atoms.cpp index 9f713ebf300d8b959a33e3d578e92882bbd67fe8..636f526fabc7342b5784c4d5afdacb857add44e5 100644 --- a/src/core/Atoms.cpp +++ b/src/core/Atoms.cpp @@ -52,7 +52,7 @@ Atoms::Atoms(PlumedMain&plumed): forcesHaveBeenSet(0), virialHasBeenSet(false), massAndChargeOK(false), - shuffledAtoms(false), + shuffledAtoms(0), plumed(plumed), naturalUnits(false), timestep(0.0), @@ -141,7 +141,7 @@ void Atoms::share(){ shareAll(); return; } - if(dd && shuffledAtoms){ + if(dd && shuffledAtoms>0){ for(unsigned i=0;i<actions.size();i++) if(actions[i]->isActive()) { unique.insert(actions[i]->getUnique().begin(),actions[i]->getUnique().end()); } @@ -151,7 +151,7 @@ void Atoms::share(){ void Atoms::shareAll(){ std::set<AtomNumber> unique; - if(dd && shuffledAtoms) + if(dd && shuffledAtoms>0) for(int i=0;i<natoms;i++) unique.insert(AtomNumber::index(i)); share(unique); } @@ -167,7 +167,7 @@ void Atoms::share(const std::set<AtomNumber>& unique){ mdatoms->getCharges(gatindex,charges); mdatoms->getMasses(gatindex,masses); } - if(dd && shuffledAtoms){ + if(dd && shuffledAtoms>0){ if(dd.async){ for(unsigned i=0;i<dd.mpi_request_positions.size();i++) dd.mpi_request_positions[i].wait(); for(unsigned i=0;i<dd.mpi_request_index.size();i++) dd.mpi_request_index[i].wait(); @@ -237,7 +237,7 @@ void Atoms::wait(){ if(collectEnergy) energy=md_energy; - if(dd && shuffledAtoms){ + if(dd && shuffledAtoms>0){ // receive toBeReceived Communicator::Status status; if(dd.async){ @@ -322,21 +322,24 @@ void Atoms::setAtomsGatindex(int*g){ for(unsigned i=0;i<gatindex.size();i++) gatindex[i]=g[i]; for(unsigned i=0;i<dd.g2l.size();i++) dd.g2l[i]=-1; if( gatindex.size()==natoms ){ - shuffledAtoms=false; + shuffledAtoms=0; for(unsigned i=0;i<gatindex.size();i++){ - if( gatindex[i]!=i ){ shuffledAtoms=true; break; } + if( gatindex[i]!=i ){ shuffledAtoms=1; break; } } } else { - shuffledAtoms=true; + shuffledAtoms=1; + } + if(dd){ + dd.Sum(shuffledAtoms); + for(unsigned i=0;i<gatindex.size();i++) dd.g2l[gatindex[i]]=i; } - if(dd) for(unsigned i=0;i<gatindex.size();i++) dd.g2l[gatindex[i]]=i; } void Atoms::setAtomsContiguous(int start){ for(unsigned i=0;i<gatindex.size();i++) gatindex[i]=start+i; for(unsigned i=0;i<dd.g2l.size();i++) dd.g2l[i]=-1; if(dd) for(unsigned i=0;i<gatindex.size();i++) dd.g2l[gatindex[i]]=i; - if(gatindex.size()<natoms) shuffledAtoms=true; + if(gatindex.size()<natoms) shuffledAtoms=1; } void Atoms::setRealPrecision(int p){ diff --git a/src/core/Atoms.h b/src/core/Atoms.h index 74f523d3ba5ffa7ef9e2c454c1436e118ae2c2ea..6673a51e83457218f4010b3c1ce909e437d66bd5 100644 --- a/src/core/Atoms.h +++ b/src/core/Atoms.h @@ -70,7 +70,7 @@ class Atoms unsigned forcesHaveBeenSet; bool virialHasBeenSet; bool massAndChargeOK; - bool shuffledAtoms; + unsigned shuffledAtoms; std::map<std::string,std::vector<AtomNumber> > groups; diff --git a/src/multicolvar/AdjacencyMatrixAction.cpp b/src/multicolvar/AdjacencyMatrixAction.cpp index 968d32c5d95ff7c2d4929ee3430a7cde9e9986b4..92ef381f4bfc7b68cefbf6ba67a1477f366015d8 100644 --- a/src/multicolvar/AdjacencyMatrixAction.cpp +++ b/src/multicolvar/AdjacencyMatrixAction.cpp @@ -60,7 +60,6 @@ tmpdf(1) } for(unsigned j=i;j<nfunc;++j){ - plumed_assert( j*(i+1)<0.5*(nfunc*nfunc+nfunc) ); std::string sw, errors; parseNumbered("SWITCH",ibase+j+1,sw); if(sw.length()==0){ std::string num; Tools::convert(ibase+j+1,num);