| 91 |  | class ForceDecomposition { | 
| 92 |  | public: | 
| 93 |  |  | 
| 94 | < | ForceDecomposition(SimInfo* info); | 
| 94 | > | ForceDecomposition(SimInfo* info, InteractionManager* iMan); | 
| 95 |  | virtual ~ForceDecomposition() {} | 
| 96 |  |  | 
| 97 |  | virtual void distributeInitialData() = 0; | 
| 100 |  | virtual void collectIntermediateData() = 0; | 
| 101 |  | virtual void distributeIntermediateData() = 0; | 
| 102 |  | virtual void collectData() = 0; | 
| 103 | < | virtual potVec getLongRangePotential() { return longRangePot_; } | 
| 103 | > | virtual potVec* getEmbeddingPotential() { return &embeddingPot; } | 
| 104 | > | virtual potVec* getPairwisePotential() { return &pairwisePot; } | 
| 105 |  |  | 
| 106 |  | // neighbor list routines | 
| 107 |  | virtual bool checkNeighborList(); | 
| 129 |  |  | 
| 130 |  | // atom bookkeeping | 
| 131 |  | virtual int getNAtomsInRow() = 0; | 
| 132 | < | virtual vector<int> getSkipsForRowAtom(int atom1) = 0; | 
| 132 | > | virtual vector<int> getExcludesForAtom(int atom1) = 0; | 
| 133 |  | virtual bool skipAtomPair(int atom1, int atom2) = 0; | 
| 134 | + | virtual bool excludeAtomPair(int atom1, int atom2) = 0; | 
| 135 | + | virtual int getTopologicalDistance(int atom1, int atom2) = 0; | 
| 136 |  | virtual void addForceToAtomRow(int atom1, Vector3d fg) = 0; | 
| 137 |  | virtual void addForceToAtomColumn(int atom2, Vector3d fg) = 0; | 
| 138 |  |  | 
| 139 | + |  | 
| 140 |  | // filling interaction blocks with pointers | 
| 141 | < | virtual InteractionData fillInteractionData(int atom1, int atom2) = 0; | 
| 142 | < | virtual void unpackInteractionData(InteractionData idat, int atom1, int atom2) = 0; | 
| 143 | < | virtual InteractionData fillSkipData(int atom1, int atom2) = 0; | 
| 144 | < | virtual SelfData fillSelfData(int atom1); | 
| 141 | > | virtual void fillInteractionData(InteractionData &idat, int atom1, int atom2) = 0; | 
| 142 | > | virtual void unpackInteractionData(InteractionData &idat, int atom1, int atom2) = 0; | 
| 143 | > |  | 
| 144 | > | virtual void fillSelfData(SelfData &sdat, int atom1); | 
| 145 |  |  | 
| 146 |  | protected: | 
| 147 |  | SimInfo* info_; | 
| 154 |  | RealType skinThickness_;   /**< Verlet neighbor list skin thickness */ | 
| 155 |  | RealType largestRcut_; | 
| 156 |  |  | 
| 157 | < | map<pair<int, int>, int> topoDist; //< topoDist gives the | 
| 158 | < | //topological distance between | 
| 159 | < | //two atomic sites.  This | 
| 156 | < | //declaration is agnostic | 
| 157 | < | //regarding the parallel | 
| 158 | < | //decomposition.  The two | 
| 159 | < | //indices could be local or row | 
| 160 | < | //& column.  It will be up to | 
| 161 | < | //the specific decomposition | 
| 162 | < | //method to fill this. | 
| 163 | < | map<pair<int, int>, bool> exclude; //< exclude is the set of pairs | 
| 164 | < | //to leave out of non-bonded | 
| 165 | < | //force evaluations.  This | 
| 166 | < | //declaration is agnostic | 
| 167 | < | //regarding the parallel | 
| 168 | < | //decomposition.  The two | 
| 169 | < | //indices could be local or row | 
| 170 | < | //& column.  It will be up to | 
| 171 | < | //the specific decomposition | 
| 172 | < | //method to fill this. | 
| 157 | > | vector<int> idents; | 
| 158 | > | potVec pairwisePot; | 
| 159 | > | potVec embeddingPot; | 
| 160 |  |  | 
| 161 | + | /** | 
| 162 | + | * The topological distance between two atomic sites is handled | 
| 163 | + | * via two vector structures for speed.  These structures agnostic | 
| 164 | + | * regarding the parallel decomposition.  The index for | 
| 165 | + | * toposForAtom could be local or row, while the values could be | 
| 166 | + | * local or column.  It will be up to the specific decomposition | 
| 167 | + | * method to fill these. | 
| 168 | + | */ | 
| 169 | + | vector<vector<int> > toposForAtom; | 
| 170 | + | vector<vector<int> > topoDist; | 
| 171 | + | vector<vector<int> > excludesForAtom; | 
| 172 |  | vector<vector<int> > groupList_; | 
| 173 | + | vector<RealType> massFactors; | 
| 174 |  |  | 
| 175 |  | vector<Vector3i> cellOffsets_; | 
| 176 |  | Vector3i nCells_; | 
| 177 |  | vector<vector<int> > cellList_; | 
| 178 |  | vector<Vector3d> saved_CG_positions_; | 
| 180 | – | potVec longRangePot_; | 
| 179 |  |  | 
| 180 |  | bool userChoseCutoff_; | 
| 181 |  | RealType userCutoff_; |