| 42 | 
  | 
#ifndef PARALLEL_DECOMPOSITION_HPP | 
| 43 | 
  | 
#define PARALLEL_DECOMPOSITION_HPP | 
| 44 | 
  | 
 | 
| 45 | 
< | 
#include "brains/SnapshotManager.hpp" | 
| 45 | 
> | 
#include "brains/SimInfo.hpp" | 
| 46 | 
  | 
#include "types/AtomType.hpp" | 
| 47 | 
  | 
 | 
| 48 | 
  | 
using namespace std; | 
| 62 | 
  | 
   * | 
| 63 | 
  | 
   *  distributeInitialData      (parallel communication - one time only) | 
| 64 | 
  | 
   *  distributeData             (parallel communication - every ForceLoop) | 
| 65 | 
< | 
   *  loop over i | 
| 66 | 
< | 
   *  | loop over j | 
| 67 | 
< | 
   *  | | localComputation | 
| 65 | 
> | 
   * | 
| 66 | 
> | 
   *  loop iLoop over nLoops     (nLoops may be 1, 2, or until self consistent) | 
| 67 | 
> | 
   *  |  loop over i | 
| 68 | 
> | 
   *  |  | loop over j | 
| 69 | 
> | 
   *  |  | | localComputation | 
| 70 | 
> | 
   *  |  |  end | 
| 71 | 
  | 
   *  |  end | 
| 72 | 
+ | 
   *  |  if (nLoops > 1): | 
| 73 | 
+ | 
   *  |  |   collectIntermediateData    (parallel communication) | 
| 74 | 
+ | 
   *  |  |   distributeIntermediateData (parallel communication) | 
| 75 | 
+ | 
   *  |  endif | 
| 76 | 
  | 
   *  end | 
| 77 | 
< | 
   *  collectIntermediateData    (parallel communication) | 
| 71 | 
< | 
   *  distributeIntermediateData (parallel communication) | 
| 72 | 
< | 
   *  loop over i | 
| 73 | 
< | 
   *  | loop over j | 
| 74 | 
< | 
   *  | | localComputation | 
| 75 | 
< | 
   *  |  end | 
| 76 | 
< | 
   *  end | 
| 77 | 
< | 
   * collectData                  (parallel communication) | 
| 77 | 
> | 
   * collectData                        (parallel communication) | 
| 78 | 
  | 
   * | 
| 79 | 
  | 
   * Decomposition provides the interface for ForceLoop to do the | 
| 80 | 
  | 
   * communication steps and to iterate using the correct set of atoms | 
| 83 | 
  | 
  class Decomposition { | 
| 84 | 
  | 
  public: | 
| 85 | 
  | 
 | 
| 86 | 
< | 
    Decomposition(SnapshotManager* sman) : sman_(sman) {} | 
| 86 | 
> | 
    Decomposition(SimInfo* info) : info_(info) {} | 
| 87 | 
  | 
    virtual ~Decomposition() {} | 
| 88 | 
  | 
     | 
| 89 | 
  | 
    virtual void distributeInitialData() = 0; | 
| 102 | 
  | 
    virtual AtomType* getAtomTypeJ(int whichAtomJ) = 0; | 
| 103 | 
  | 
     | 
| 104 | 
  | 
  protected: | 
| 105 | 
< | 
    SnapshotManager* sman_; | 
| 105 | 
> | 
    SimInfo* info_;    | 
| 106 | 
> | 
    map<pair<int, int>, int> topoDist; //< topoDist gives the | 
| 107 | 
> | 
                                       //topological distance between | 
| 108 | 
> | 
                                       //two atomic sites.  This | 
| 109 | 
> | 
                                       //declaration is agnostic | 
| 110 | 
> | 
                                       //regarding the parallel | 
| 111 | 
> | 
                                       //decomposition.  The two | 
| 112 | 
> | 
                                       //indices could be local or row | 
| 113 | 
> | 
                                       //& column.  It will be up to | 
| 114 | 
> | 
                                       //the specific decomposition | 
| 115 | 
> | 
                                       //method to fill this. | 
| 116 | 
> | 
    map<pair<int, int>, bool> exclude; //< exclude is the set of pairs | 
| 117 | 
> | 
                                       //to leave out of non-bonded | 
| 118 | 
> | 
                                       //force evaluations.  This | 
| 119 | 
> | 
                                       //declaration is agnostic | 
| 120 | 
> | 
                                       //regarding the parallel | 
| 121 | 
> | 
                                       //decomposition.  The two | 
| 122 | 
> | 
                                       //indices could be local or row | 
| 123 | 
> | 
                                       //& column.  It will be up to | 
| 124 | 
> | 
                                       //the specific decomposition | 
| 125 | 
> | 
                                       //method to fill this. | 
| 126 | 
  | 
  };     | 
| 127 | 
  | 
} | 
| 128 | 
  | 
#endif |