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

Comparing branches/development/src/parallel/Communicator.hpp (file contents):
Revision 1541 by gezelter, Fri Feb 4 20:04:56 2011 UTC vs.
Revision 1549 by gezelter, Wed Apr 27 18:38:15 2011 UTC

# Line 46 | Line 46
46   * [4]  Vardeman & Gezelter, in progress (2009).                        
47   */
48  
49 < #ifndef FORCEDECOMPOSITION_COMMUNICATOR_HPP
50 < #define FORCEDECOMPOSITION_COMMUNICATOR_HPP
49 > #ifndef PARALLEL_COMMUNICATOR_HPP
50 > #define PARALLEL_COMMUNICATOR_HPP
51  
52   #include <config.h>
53   #include <mpi.h>
# Line 57 | Line 57 | namespace OpenMD{
57    
58   #ifdef IS_MPI
59  
60 <  enum direction {
61 <    Row = 0,
62 <    Column = 1
60 >  enum communicatorType {
61 >    Global = 0,
62 >    Row = 1,
63 >    Column = 2
64    };
65      
66    template<typename T>
# Line 78 | Line 79 | namespace OpenMD{
79    template<> const MPI::Datatype MPITraits<Mat3x3d>::datatype = MPI_REALTYPE;
80    template<> const int MPITraits<Mat3x3d>::dim = 9;
81    
82 <  template<direction D, typename T>
82 >  template<communicatorType D, typename T>
83    class Communicator {
84    public:
85      
# Line 98 | Line 99 | namespace OpenMD{
99        rowIndex_ = myRank / nColumns;      
100        columnIndex_ = myRank % nColumns;
101  
102 <      if (D == Row) {
102 >      switch(D) {
103 >      case Row :
104          myComm = MPI::COMM_WORLD.Split(rowIndex_, 0);
105 <      } else {
105 >        break;
106 >      case Column:
107          myComm = MPI::COMM_WORLD.Split(columnIndex_, 0);
108 +        break;
109 +      case Global:
110 +        myComm = MPI::COMM_WORLD.Split(myRank, 0);
111        }
112          
113        int nCommProcs = myComm.Get_size();
# Line 113 | Line 119 | namespace OpenMD{
119  
120        myComm.Allgather(&planSize_, 1, MPI::INT, &counts[0], 1, MPI::INT);
121  
116
122        displacements[0] = 0;
123        for (int i = 1; i < nCommProcs; i++) {
124          displacements[i] = displacements[i-1] + counts[i-1];
125 <        size_ += count[i-1];
125 >        size_ += counts[i-1];
126        }
127  
128        size_ = 0;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines