ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/brains/ForceManager.cpp
(Generate patch)

Comparing branches/development/src/brains/ForceManager.cpp (file contents):
Revision 1540 by gezelter, Mon Jan 17 21:34:36 2011 UTC vs.
Revision 1544 by gezelter, Fri Mar 18 19:31:52 2011 UTC

# Line 57 | Line 57
57   #include "primitives/Bend.hpp"
58   #include "primitives/Torsion.hpp"
59   #include "primitives/Inversion.hpp"
60 + #include "parallel/ForceDecomposition.hpp"
61 + //#include "parallel/SerialDecomposition.hpp"
62  
63   namespace OpenMD {
64    
65    ForceManager::ForceManager(SimInfo * info) : info_(info),
66                                                 NBforcesInitialized_(false) {
67 + #ifdef IS_MPI
68 +    decomp_ = new ForceDecomposition(info_);
69 + #else
70 +    //  decomp_ = new SerialDecomposition(info);
71 + #endif
72    }
73  
74    void ForceManager::calcForces() {
# Line 70 | Line 77 | namespace OpenMD {
77      if (!info_->isFortranInitialized()) {
78        info_->update();
79        nbiMan_->setSimInfo(info_);
80 <      nbiMan_->initialize();    
80 >      nbiMan_->initialize();
81 >      decomp_->distributeInitialData();
82        info_->setupFortran();
83      }
76    
77    preCalculation();
84      
85 +    preCalculation();  
86      calcShortRangeInteraction();
80
87      calcLongRangeInteraction();
82
88      postCalculation();
89      
90    }
# Line 285 | Line 290 | namespace OpenMD {
290        longRangePotential[i]=0.0; //Initialize array
291      }
292      
293 <    doForceLoop(pos,
294 <                rc,
295 <                A,
296 <                electroFrame,
297 <                frc,
298 <                trq,
299 <                tau.getArrayPointer(),
300 <                longRangePotential,
301 <                particlePot,
302 <                &isError );
303 <    
293 >    decomp_->distributeData();
294 >
295 >    int nLoops = 1;
296 >    for (int iLoop = 0; iLoop < nLoops; iLoop++) {
297 >      doForceLoop(pos,
298 >                  rc,
299 >                  A,
300 >                  electroFrame,
301 >                  frc,
302 >                  trq,
303 >                  tau.getArrayPointer(),
304 >                  longRangePotential,
305 >                  particlePot,
306 >                  &isError );  
307 >
308 >      if (nLoops > 1) {
309 >        decomp_->collectIntermediateData();
310 >        decomp_->distributeIntermediateData();
311 >      }
312 >    }
313 >  
314 >    decomp_->collectData();
315 >
316      if( isError ){
317        sprintf( painCave.errMsg,
318                 "Error returned from the fortran force calculation.\n" );

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines