From 32de30f7c45158d8a3413d5e8a6a872bcfe15b16 Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Wed, 21 Aug 2013 12:11:41 +0200
Subject: [PATCH] Replacements with enhanced Communicator class

I replaced everywhere it made sense the new Communicator class
syntax. This commit is not strictly necessary, but provides
examples of the simpler syntax so I think should be merged
---
 src/bias/MetaD.cpp                          |  8 +++----
 src/cltools/Driver.cpp                      | 10 ++++-----
 src/colvar/CoordinationBase.cpp             |  4 ++--
 src/colvar/PathMSDBase.cpp                  |  4 ++--
 src/core/Atoms.cpp                          |  6 +++---
 src/core/GREX.cpp                           | 24 ++++++++++-----------
 src/multicolvar/StoreCentralAtomsVessel.cpp |  2 +-
 src/multicolvar/StoreColvarVessel.cpp       |  2 +-
 src/tools/BiasRepresentation.cpp            |  4 ++--
 src/tools/OFile.cpp                         |  2 +-
 src/vesselbase/ActionWithVessel.cpp         |  2 +-
 11 files changed, 34 insertions(+), 34 deletions(-)

diff --git a/src/bias/MetaD.cpp b/src/bias/MetaD.cpp
index b241afa03..4e4602fce 100644
--- a/src/bias/MetaD.cpp
+++ b/src/bias/MetaD.cpp
@@ -651,8 +651,8 @@ void MetaD::addGaussian(const Gaussian& hill)
      BiasGrid_->getPoint(ineigh,xx);
      allbias[i]=evaluateGaussian(xx,hill,&allder[ncv*i]);
     }
-    comm.Sum(&allbias[0],allbias.size());
-    comm.Sum(&allder[0],allder.size());
+    comm.Sum(allbias);
+    comm.Sum(allder);
     for(unsigned i=0;i<neighbors.size();++i){
      unsigned ineigh=neighbors[i];
      for(unsigned j=0;j<ncv;++j){der[j]=allder[ncv*i+j];}
@@ -719,8 +719,8 @@ double MetaD::getBiasAndDerivatives(const vector<double>& cv, double* der)
    //finite difference test 
    //finiteDifferenceGaussian(cv,hills_[i]);
   }
-  comm.Sum(&bias,1);
-  if(der) comm.Sum(&der[0],getNumberOfArguments());
+  comm.Sum(bias);
+  if(der) comm.Sum(der,getNumberOfArguments());
  }else{
   if(der){
    vector<double> vder(getNumberOfArguments());
diff --git a/src/cltools/Driver.cpp b/src/cltools/Driver.cpp
index e23712919..9d586582a 100644
--- a/src/cltools/Driver.cpp
+++ b/src/cltools/Driver.cpp
@@ -380,8 +380,8 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
           start[i+1]=start[i]+loc[i];
         }
         loc[npe-1]=natoms-start[npe-1];
-        intracomm.Bcast(&loc[0],npe,0);
-        intracomm.Bcast(&start[0],npe,0);
+        intracomm.Bcast(loc,0);
+        intracomm.Bcast(start,0);
         pd_nlocal=loc[intracomm.Get_rank()];
         pd_start=start[intracomm.Get_rank()];
         if(intracomm.Get_rank()==0){
@@ -516,8 +516,8 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
    p.cmd("calc");
 
 // this is necessary as only processor zero is adding to the virial:
-   intracomm.Bcast(&virial[0],9,0);
-   if(debug_pd) intracomm.Sum(&forces[0],natoms*3);
+   intracomm.Bcast(virial,0);
+   if(debug_pd) intracomm.Sum(forces);
    if(debug_dd){
      for(int i=0;i<dd_nlocal;i++){
        forces[3*dd_gatindex[i]+0]=dd_forces[3*i+0];
@@ -525,7 +525,7 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
        forces[3*dd_gatindex[i]+2]=dd_forces[3*i+2];
      }
      dd_forces.assign(3*natoms,0.0);
-     intracomm.Sum(&forces[0],natoms*3);
+     intracomm.Sum(forces);
    }
    if(debug_grex &&step%grex_stride==0){
      p.cmd("GREX savePositions");
diff --git a/src/colvar/CoordinationBase.cpp b/src/colvar/CoordinationBase.cpp
index 3da9a230b..680e112c2 100644
--- a/src/colvar/CoordinationBase.cpp
+++ b/src/colvar/CoordinationBase.cpp
@@ -163,9 +163,9 @@ void CoordinationBase::calculate()
  }
 
  if(!serial){
-   comm.Sum(&ncoord,1);
+   comm.Sum(ncoord);
    if(!deriv.empty()) comm.Sum(&deriv[0][0],3*deriv.size());
-   comm.Sum(&virial[0][0],9);
+   comm.Sum(virial);
  }
 
  for(unsigned i=0;i<deriv.size();++i) setAtomsDerivatives(i,deriv[i]);
diff --git a/src/colvar/PathMSDBase.cpp b/src/colvar/PathMSDBase.cpp
index e741bc582..7913eddda 100644
--- a/src/colvar/PathMSDBase.cpp
+++ b/src/colvar/PathMSDBase.cpp
@@ -137,8 +137,8 @@ void PathMSDBase::calculate(){
     for(unsigned j=0;j<nat;j++) tmp_derivs2[i*nat+j]=tmp_derivs[j];
   }
 // reduce over all processors
-  comm.Sum(&tmp_distances[0],imgVec.size());
-  comm.Sum(&tmp_derivs2[0][0],3*imgVec.size()*nat);
+  comm.Sum(tmp_distances);
+  comm.Sum(tmp_derivs2);
 // assign imgVec[i].distance and imgVec[i].distder
   for(unsigned i=0;i<imgVec.size();i++){
     imgVec[i].distance=tmp_distances[i];
diff --git a/src/core/Atoms.cpp b/src/core/Atoms.cpp
index ce3ec1455..4fc70c706 100644
--- a/src/core/Atoms.cpp
+++ b/src/core/Atoms.cpp
@@ -172,7 +172,7 @@ void Atoms::share(const std::set<AtomNumber>& unique){
       vector<int> displ(n);
       vector<int> counts5(n);
       vector<int> displ5(n);
-      dd.Allgather(&count,1,&counts[0],1);
+      dd.Allgather(count,counts);
       displ[0]=0;
       for(int i=1;i<n;++i) displ[i]=displ[i-1]+counts[i-1];
       for(int i=0;i<n;++i) counts5[i]=counts[i]*5;
@@ -199,7 +199,7 @@ void Atoms::wait(){
   dataCanBeSet=false; // Everything should be set by this stage
 
   if(dd){
-    dd.Bcast(&box[0][0],9,0);
+    dd.Bcast(box,0);
   }
   pbc.setBox(box);
 
@@ -224,7 +224,7 @@ void Atoms::wait(){
         charges[dd.indexToBeReceived[i]]     =dd.positionsToBeReceived[5*i+4];
       }
     }
-    if(collectEnergy) dd.Sum(&energy,1);
+    if(collectEnergy) dd.Sum(energy);
   }
 }
 
diff --git a/src/core/GREX.cpp b/src/core/GREX.cpp
index 081f5ddce..1e0250e13 100644
--- a/src/core/GREX.cpp
+++ b/src/core/GREX.cpp
@@ -72,13 +72,13 @@ void GREX::cmd(const string&key,void*val){
     std::string s;
 // note that for PEs!=root this is automatically 0 (comm defaults to MPI_COMM_SELF)
     myreplica=intercomm.Get_rank();
-    intracomm.Sum(&myreplica,1);
+    intracomm.Sum(myreplica);
     Tools::convert(myreplica,s);
     plumedMain.setSuffix("."+s);
   }else if(key=="prepare"){
     CHECK_INIT(initialized,key);
     if(intracomm.Get_rank()==0) return;
-    intracomm.Bcast(&partner,1,0);
+    intracomm.Bcast(partner,0);
     calculate();
   }else if(key=="setPartner"){
     CHECK_INIT(initialized,key);
@@ -89,7 +89,7 @@ void GREX::cmd(const string&key,void*val){
   }else if(key=="calculate"){
     CHECK_INIT(initialized,key);
     if(intracomm.Get_rank()!=0) return;
-    intracomm.Bcast(&partner,1,0);
+    intracomm.Bcast(partner,0);
     calculate();
   }else if(key=="getLocalDeltaBias"){
     CHECK_INIT(initialized,key);
@@ -102,14 +102,14 @@ void GREX::cmd(const string&key,void*val){
     double x;
     atoms.MD2double(val,x);
     localUNow=x*(atoms.getMDUnits().getEnergy()/atoms.getUnits().getEnergy());
-    intracomm.Sum(&localUNow,1);
+    intracomm.Sum(localUNow);
   }else if(key=="cacheLocalUSwap"){
     CHECK_INIT(initialized,key);
     CHECK_NULL(val,key);
     double x;
     atoms.MD2double(val,x);
     localUSwap=x*(atoms.getMDUnits().getEnergy()/atoms.getUnits().getEnergy());
-    intracomm.Sum(&localUSwap,1);
+    intracomm.Sum(localUSwap);
   }else if(key=="getForeignDeltaBias"){
     CHECK_INIT(initialized,key);
     CHECK_NULL(val,key);
@@ -120,7 +120,7 @@ void GREX::cmd(const string&key,void*val){
     if(intracomm.Get_rank()!=0) return;
     allDeltaBias.assign(intercomm.Get_size(),0.0);
     allDeltaBias[intercomm.Get_rank()]=localDeltaBias;
-    intercomm.Sum(&allDeltaBias[0],intercomm.Get_size());
+    intercomm.Sum(allDeltaBias);
   }else{
 // multi word commands
      std::vector<std::string> words=Tools::getWords(key);
@@ -158,11 +158,11 @@ void GREX::calculate(){
   vector<char> rbuf(nn);
   localDeltaBias=-plumedMain.getBias();
   if(intracomm.Get_rank()==0){
-    Communicator::Request req=intercomm.Isend(&buffer.c_str()[0],nn,partner,1066);
-    intercomm.Recv(&rbuf[0],rbuf.size(),partner,1066);
+    Communicator::Request req=intercomm.Isend(buffer,partner,1066);
+    intercomm.Recv(rbuf,partner,1066);
     req.wait();
   }
-  intracomm.Bcast(&rbuf[0],nn,0);
+  intracomm.Bcast(rbuf,0);
   istringstream i(string(&rbuf[0],rbuf.size()));
   atoms.readBinary(i);
   plumedMain.setExchangeStep(true);
@@ -172,12 +172,12 @@ void GREX::calculate(){
   localDeltaBias+=plumedMain.getBias();
   localDeltaBias+=localUSwap-localUNow;
   if(intracomm.Get_rank()==0){
-    Communicator::Request req=intercomm.Isend(&localDeltaBias,1,partner,1067);
-    intercomm.Recv(&foreignDeltaBias,1,partner,1067);
+    Communicator::Request req=intercomm.Isend(localDeltaBias,partner,1067);
+    intercomm.Recv(foreignDeltaBias,partner,1067);
     req.wait();
 //fprintf(stderr,">>> %d %d %20.12f %20.12f %20.12f %20.12f\n",intercomm.Get_rank(),partner,localDeltaBias,foreignDeltaBias,localUSwap,localUNow);
   }
-  intracomm.Bcast(&foreignDeltaBias,1,0);
+  intracomm.Bcast(foreignDeltaBias,0);
 }
 
 }
diff --git a/src/multicolvar/StoreCentralAtomsVessel.cpp b/src/multicolvar/StoreCentralAtomsVessel.cpp
index d34f14cd8..833d008f0 100644
--- a/src/multicolvar/StoreCentralAtomsVessel.cpp
+++ b/src/multicolvar/StoreCentralAtomsVessel.cpp
@@ -79,7 +79,7 @@ bool StoreCentralAtomsVessel::calculate(){
 }
 
 void StoreCentralAtomsVessel::finish(){
-  comm.Sum( &active_atoms[0], active_atoms.size() );
+  comm.Sum(active_atoms);
 }
 
 Vector StoreCentralAtomsVessel::getPosition( const unsigned& ivec ) const {
diff --git a/src/multicolvar/StoreColvarVessel.cpp b/src/multicolvar/StoreColvarVessel.cpp
index 4ea5301c2..893252a2c 100644
--- a/src/multicolvar/StoreColvarVessel.cpp
+++ b/src/multicolvar/StoreColvarVessel.cpp
@@ -98,7 +98,7 @@ bool StoreColvarVessel::calculate(){
 }
 
 void StoreColvarVessel::finish(){
-  comm.Sum( &active_atoms[0], active_atoms.size() );
+  comm.Sum(active_atoms);
   performCalculationUsingAllValues();
 }
 
diff --git a/src/tools/BiasRepresentation.cpp b/src/tools/BiasRepresentation.cpp
index 66c3033cb..25d35ee9b 100644
--- a/src/tools/BiasRepresentation.cpp
+++ b/src/tools/BiasRepresentation.cpp
@@ -189,8 +189,8 @@ void BiasRepresentation::pushKernel( IFile *ifile ){
 		   // a pointer of double as it was in old gaussian 
                    for(int j=0;j<ndim;++j){ allder[ndim*i+j]=tmpder[j];tmpder[j]=0.;}
                   }
-                  mycomm.Sum(&allbias[0],allbias.size());
-                  mycomm.Sum(&allder[0],allder.size());
+                  mycomm.Sum(allbias);
+                  mycomm.Sum(allder);
                   for(unsigned i=0;i<neighbors.size();++i){
                    unsigned ineigh=neighbors[i];
                    for(unsigned j=0;j<ndim;++j){der[j]=allder[ndim*i+j];}
diff --git a/src/tools/OFile.cpp b/src/tools/OFile.cpp
index 7820ee202..f61d89d3a 100644
--- a/src/tools/OFile.cpp
+++ b/src/tools/OFile.cpp
@@ -42,7 +42,7 @@ size_t OFile::llwrite(const char*ptr,size_t s){
     if(!fp) plumed_merror("writing on uninitilized File");
     r=fwrite(ptr,1,s,fp);
   }
-  if(comm) comm->Bcast(&r,1,0);
+  if(comm) comm->Bcast(r,0);
   return r;
 }
 
diff --git a/src/vesselbase/ActionWithVessel.cpp b/src/vesselbase/ActionWithVessel.cpp
index b9b3436f3..6ed5e7a2a 100644
--- a/src/vesselbase/ActionWithVessel.cpp
+++ b/src/vesselbase/ActionWithVessel.cpp
@@ -227,7 +227,7 @@ bool ActionWithVessel::calculateAllVessels(){
 
 void ActionWithVessel::finishComputations(){
   // MPI Gather everything
-  if(!serial && buffer.size()>0) comm.Sum( &buffer[0],buffer.size() ); 
+  if(!serial && buffer.size()>0) comm.Sum( buffer);
 
   // Set the final value of the function
   for(unsigned j=0;j<functions.size();++j) functions[j]->finish(); 
-- 
GitLab