ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/parallel/ForceMatrixDecomposition.cpp
(Generate patch)

Comparing branches/development/src/parallel/ForceMatrixDecomposition.cpp (file contents):
Revision 1756 by gezelter, Mon Jun 18 18:23:20 2012 UTC vs.
Revision 1761 by gezelter, Fri Jun 22 20:01:37 2012 UTC

# Line 176 | Line 176 | namespace OpenMD {
176      pot_row.resize(nAtomsInRow_);
177      pot_col.resize(nAtomsInCol_);
178  
179 +    expot_row.resize(nAtomsInRow_);
180 +    expot_col.resize(nAtomsInCol_);
181 +
182      AtomRowToGlobal.resize(nAtomsInRow_);
183      AtomColToGlobal.resize(nAtomsInCol_);
184      AtomPlanIntRow->gather(AtomLocalToGlobal, AtomRowToGlobal);
# Line 484 | Line 487 | namespace OpenMD {
487    void ForceMatrixDecomposition::zeroWorkArrays() {
488      pairwisePot = 0.0;
489      embeddingPot = 0.0;
490 +    excludedPot = 0.0;
491 +    excludedSelfPot = 0.0;
492  
493   #ifdef IS_MPI
494      if (storageLayout_ & DataStorage::dslForce) {
# Line 502 | Line 507 | namespace OpenMD {
507      fill(pot_col.begin(), pot_col.end(),
508           Vector<RealType, N_INTERACTION_FAMILIES> (0.0));  
509  
510 +    fill(expot_row.begin(), expot_row.end(),
511 +         Vector<RealType, N_INTERACTION_FAMILIES> (0.0));
512 +
513 +    fill(expot_col.begin(), expot_col.end(),
514 +         Vector<RealType, N_INTERACTION_FAMILIES> (0.0));  
515 +
516      if (storageLayout_ & DataStorage::dslParticlePot) {    
517        fill(atomRowData.particlePot.begin(), atomRowData.particlePot.end(),
518             0.0);
# Line 780 | Line 791 | namespace OpenMD {
791  
792      vector<potVec> pot_temp(nLocal_,
793                              Vector<RealType, N_INTERACTION_FAMILIES> (0.0));
794 +    vector<potVec> expot_temp(nLocal_,
795 +                              Vector<RealType, N_INTERACTION_FAMILIES> (0.0));
796  
797      // scatter/gather pot_row into the members of my column
798            
799      AtomPlanPotRow->scatter(pot_row, pot_temp);
800 +    AtomPlanPotRow->scatter(expot_row, expot_temp);
801  
802 <    for (int ii = 0;  ii < pot_temp.size(); ii++ )
802 >    for (int ii = 0;  ii < pot_temp.size(); ii++ )
803        pairwisePot += pot_temp[ii];
804 +
805 +    for (int ii = 0;  ii < expot_temp.size(); ii++ )
806 +      excludedPot += expot_temp[ii];
807          
808      if (storageLayout_ & DataStorage::dslParticlePot) {
809        // This is the pairwise contribution to the particle pot.  The
# Line 804 | Line 821 | namespace OpenMD {
821  
822      fill(pot_temp.begin(), pot_temp.end(),
823           Vector<RealType, N_INTERACTION_FAMILIES> (0.0));
824 +    fill(expot_temp.begin(), expot_temp.end(),
825 +         Vector<RealType, N_INTERACTION_FAMILIES> (0.0));
826        
827      AtomPlanPotColumn->scatter(pot_col, pot_temp);    
828 +    AtomPlanPotColumn->scatter(expot_col, expot_temp);    
829      
830      for (int ii = 0;  ii < pot_temp.size(); ii++ )
831        pairwisePot += pot_temp[ii];    
832  
833 +    for (int ii = 0;  ii < expot_temp.size(); ii++ )
834 +      excludedPot += expot_temp[ii];    
835 +
836      if (storageLayout_ & DataStorage::dslParticlePot) {
837        // This is the pairwise contribution to the particle pot.  The
838        // embedding contribution is added in each of the low level
# Line 849 | Line 872 | namespace OpenMD {
872        RealType ploc2 = 0.0;
873        MPI::COMM_WORLD.Allreduce(&ploc1, &ploc2, 1, MPI::REALTYPE, MPI::SUM);
874        pairwisePot[ii] = ploc2;
875 +    }
876 +
877 +    for (int ii = 0; ii < N_INTERACTION_FAMILIES; ii++) {
878 +      RealType ploc1 = excludedPot[ii];
879 +      RealType ploc2 = 0.0;
880 +      MPI::COMM_WORLD.Allreduce(&ploc1, &ploc2, 1, MPI::REALTYPE, MPI::SUM);
881 +      excludedPot[ii] = ploc2;
882      }
883  
884      // Here be dragons.
# Line 878 | Line 908 | namespace OpenMD {
908        MPI::COMM_WORLD.Allreduce(&ploc1, &ploc2, 1, MPI::REALTYPE, MPI::SUM);
909        embeddingPot[ii] = ploc2;
910      }    
911 +    for (int ii = 0; ii < N_INTERACTION_FAMILIES; ii++) {
912 +      RealType ploc1 = excludedSelfPot[ii];
913 +      RealType ploc2 = 0.0;
914 +      MPI::COMM_WORLD.Allreduce(&ploc1, &ploc2, 1, MPI::REALTYPE, MPI::SUM);
915 +      excludedSelfPot[ii] = ploc2;
916 +    }    
917   #endif
918      
919    }
# Line 1194 | Line 1230 | namespace OpenMD {
1230   #ifdef IS_MPI
1231      pot_row[atom1] += RealType(0.5) *  *(idat.pot);
1232      pot_col[atom2] += RealType(0.5) *  *(idat.pot);
1233 +    expot_row[atom1] += RealType(0.5) *  *(idat.excludedPot);
1234 +    expot_col[atom2] += RealType(0.5) *  *(idat.excludedPot);
1235  
1236      atomRowData.force[atom1] += *(idat.f1);
1237      atomColData.force[atom2] -= *(idat.f1);
# Line 1210 | Line 1248 | namespace OpenMD {
1248  
1249   #else
1250      pairwisePot += *(idat.pot);
1251 +    excludedPot += *(idat.excludedPot);
1252  
1253      snap_->atomData.force[atom1] += *(idat.f1);
1254      snap_->atomData.force[atom2] -= *(idat.f1);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines