# | Line 57 | Line 57 | namespace OpenMD { | |
---|---|---|
57 | nLocal_ = snap_->getNumberOfAtoms(); | |
58 | nGroups_ = snap_->getNumberOfCutoffGroups(); | |
59 | ||
60 | + | // gather the information for atomtype IDs (atids): |
61 | + | vector<int> identsLocal = info_->getIdentArray(); |
62 | + | AtomLocalToGlobal = info_->getGlobalAtomIndices(); |
63 | + | cgLocalToGlobal = info_->getGlobalGroupIndices(); |
64 | + | vector<int> globalGroupMembership = info_->getGlobalGroupMembership(); |
65 | + | vector<RealType> massFactorsLocal = info_->getMassFactors(); |
66 | + | vector<RealType> pot_local(N_INTERACTION_FAMILIES, 0.0); |
67 | + | |
68 | #ifdef IS_MPI | |
69 | ||
70 | AtomCommIntRow = new Communicator<Row,int>(nLocal_); | |
# | Line 93 | Line 101 | namespace OpenMD { | |
101 | vector<RealType> (nAtomsInRow_, 0.0)); | |
102 | vector<vector<RealType> > pot_col(N_INTERACTION_FAMILIES, | |
103 | vector<RealType> (nAtomsInCol_, 0.0)); | |
96 | – | |
97 | – | |
98 | – | vector<RealType> pot_local(N_INTERACTION_FAMILIES, 0.0); |
104 | ||
100 | – | // gather the information for atomtype IDs (atids): |
101 | – | vector<int> identsLocal = info_->getIdentArray(); |
105 | identsRow.reserve(nAtomsInRow_); | |
106 | identsCol.reserve(nAtomsInCol_); | |
107 | ||
108 | AtomCommIntRow->gather(identsLocal, identsRow); | |
109 | AtomCommIntColumn->gather(identsLocal, identsCol); | |
110 | ||
108 | – | AtomLocalToGlobal = info_->getGlobalAtomIndices(); |
111 | AtomCommIntRow->gather(AtomLocalToGlobal, AtomRowToGlobal); | |
112 | AtomCommIntColumn->gather(AtomLocalToGlobal, AtomColToGlobal); | |
113 | ||
112 | – | cgLocalToGlobal = info_->getGlobalGroupIndices(); |
114 | cgCommIntRow->gather(cgLocalToGlobal, cgRowToGlobal); | |
115 | cgCommIntColumn->gather(cgLocalToGlobal, cgColToGlobal); | |
116 | ||
117 | + | AtomCommRealRow->gather(massFactorsLocal, massFactorsRow); |
118 | + | AtomCommRealColumn->gather(massFactorsLocal, massFactorsCol); |
119 | + | |
120 | + | groupListRow_.clear(); |
121 | + | groupListRow_.reserve(nGroupsInRow_); |
122 | + | for (int i = 0; i < nGroupsInRow_; i++) { |
123 | + | int gid = cgRowToGlobal[i]; |
124 | + | for (int j = 0; j < nAtomsInRow_; j++) { |
125 | + | int aid = AtomRowToGlobal[j]; |
126 | + | if (globalGroupMembership[aid] == gid) |
127 | + | groupListRow_[i].push_back(j); |
128 | + | } |
129 | + | } |
130 | + | |
131 | + | groupListCol_.clear(); |
132 | + | groupListCol_.reserve(nGroupsInCol_); |
133 | + | for (int i = 0; i < nGroupsInCol_; i++) { |
134 | + | int gid = cgColToGlobal[i]; |
135 | + | for (int j = 0; j < nAtomsInCol_; j++) { |
136 | + | int aid = AtomColToGlobal[j]; |
137 | + | if (globalGroupMembership[aid] == gid) |
138 | + | groupListCol_[i].push_back(j); |
139 | + | } |
140 | + | } |
141 | + | |
142 | + | #endif |
143 | + | |
144 | + | groupList_.clear(); |
145 | + | groupList_.reserve(nGroups_); |
146 | + | for (int i = 0; i < nGroups_; i++) { |
147 | + | int gid = cgLocalToGlobal[i]; |
148 | + | for (int j = 0; j < nLocal_; j++) { |
149 | + | int aid = AtomLocalToGlobal[j]; |
150 | + | if (globalGroupMembership[aid] == gid) |
151 | + | groupList_[i].push_back(j); |
152 | + | } |
153 | + | } |
154 | + | |
155 | + | |
156 | // still need: | |
157 | // topoDist | |
158 | // exclude | |
159 | < | #endif |
159 | > | |
160 | } | |
161 | ||
162 | ||
# | Line 244 | Line 284 | namespace OpenMD { | |
284 | #endif | |
285 | } | |
286 | ||
287 | + | /** |
288 | + | * returns the list of atoms belonging to this group. |
289 | + | */ |
290 | + | vector<int> ForceMatrixDecomposition::getAtomsInGroupRow(int cg1){ |
291 | + | #ifdef IS_MPI |
292 | + | return groupListRow_[cg1]; |
293 | + | #else |
294 | + | return groupList_[cg1]; |
295 | + | #endif |
296 | + | } |
297 | + | |
298 | + | vector<int> ForceMatrixDecomposition::getAtomsInGroupColumn(int cg2){ |
299 | + | #ifdef IS_MPI |
300 | + | return groupListCol_[cg2]; |
301 | + | #else |
302 | + | return groupList_[cg2]; |
303 | + | #endif |
304 | + | } |
305 | ||
306 | Vector3d ForceMatrixDecomposition::getIntergroupVector(int cg1, int cg2){ | |
307 | Vector3d d; | |
# | Line 284 | Line 342 | namespace OpenMD { | |
342 | ||
343 | snap_->wrapVector(d); | |
344 | return d; | |
345 | + | } |
346 | + | |
347 | + | RealType ForceMatrixDecomposition::getMassFactorRow(int atom1) { |
348 | + | #ifdef IS_MPI |
349 | + | return massFactorsRow[atom1]; |
350 | + | #else |
351 | + | return massFactorsLocal[atom1]; |
352 | + | #endif |
353 | + | } |
354 | + | |
355 | + | RealType ForceMatrixDecomposition::getMassFactorColumn(int atom2) { |
356 | + | #ifdef IS_MPI |
357 | + | return massFactorsCol[atom2]; |
358 | + | #else |
359 | + | return massFactorsLocal[atom2]; |
360 | + | #endif |
361 | + | |
362 | } | |
363 | ||
364 | Vector3d ForceMatrixDecomposition::getInteratomicVector(int atom1, int atom2){ |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |