| 65 |  | AtomLocalToGlobal = info_->getGlobalAtomIndices(); | 
| 66 |  | cgLocalToGlobal = info_->getGlobalGroupIndices(); | 
| 67 |  | vector<int> globalGroupMembership = info_->getGlobalGroupMembership(); | 
| 68 | < | vector<RealType> massFactorsLocal = info_->getMassFactors(); | 
| 68 | > | massFactors = info_->getMassFactors(); | 
| 69 |  | PairList excludes = info_->getExcludedInteractions(); | 
| 70 |  | PairList oneTwo = info_->getOneTwoInteractions(); | 
| 71 |  | PairList oneThree = info_->getOneThreeInteractions(); | 
| 117 |  | cgCommIntRow->gather(cgLocalToGlobal, cgRowToGlobal); | 
| 118 |  | cgCommIntColumn->gather(cgLocalToGlobal, cgColToGlobal); | 
| 119 |  |  | 
| 120 | < | AtomCommRealRow->gather(massFactorsLocal, massFactorsRow); | 
| 121 | < | AtomCommRealColumn->gather(massFactorsLocal, massFactorsCol); | 
| 120 | > | AtomCommRealRow->gather(massFactors, massFactorsRow); | 
| 121 | > | AtomCommRealColumn->gather(massFactors, massFactorsCol); | 
| 122 |  |  | 
| 123 |  | groupListRow_.clear(); | 
| 124 |  | groupListRow_.resize(nGroupsInRow_); | 
| 691 |  | #ifdef IS_MPI | 
| 692 |  | return massFactorsRow[atom1]; | 
| 693 |  | #else | 
| 694 | < | return massFactorsLocal[atom1]; | 
| 694 | > | return massFactors[atom1]; | 
| 695 |  | #endif | 
| 696 |  | } | 
| 697 |  |  | 
| 699 |  | #ifdef IS_MPI | 
| 700 |  | return massFactorsCol[atom2]; | 
| 701 |  | #else | 
| 702 | < | return massFactorsLocal[atom2]; | 
| 702 | > | return massFactors[atom2]; | 
| 703 |  | #endif | 
| 704 |  |  | 
| 705 |  | } | 
| 776 |  | } | 
| 777 |  |  | 
| 778 |  | // filling interaction blocks with pointers | 
| 779 | < | InteractionData ForceMatrixDecomposition::fillInteractionData(int atom1, int atom2) { | 
| 780 | < | InteractionData idat; | 
| 781 | < |  | 
| 779 | > | void ForceMatrixDecomposition::fillInteractionData(InteractionData &idat, | 
| 780 | > | int atom1, int atom2) { | 
| 781 |  | #ifdef IS_MPI | 
| 782 |  |  | 
| 783 |  | idat.atypes = make_pair( ff_->getAtomType(identsRow[atom1]), | 
| 784 |  | ff_->getAtomType(identsCol[atom2]) ); | 
| 786 | – |  | 
| 785 |  |  | 
| 786 |  | if (storageLayout_ & DataStorage::dslAmat) { | 
| 787 |  | idat.A1 = &(atomRowData.aMat[atom1]); | 
| 859 |  | } | 
| 860 |  |  | 
| 861 |  | #endif | 
| 864 | – | return idat; | 
| 862 |  | } | 
| 863 |  |  | 
| 864 |  |  | 
| 865 | < | void ForceMatrixDecomposition::unpackInteractionData(InteractionData idat, int atom1, int atom2) { | 
| 865 | > | void ForceMatrixDecomposition::unpackInteractionData(InteractionData &idat, int atom1, int atom2) { | 
| 866 |  | #ifdef IS_MPI | 
| 867 |  | pot_row[atom1] += 0.5 *  *(idat.pot); | 
| 868 |  | pot_col[atom2] += 0.5 *  *(idat.pot); | 
| 879 |  | } | 
| 880 |  |  | 
| 881 |  |  | 
| 882 | < | InteractionData ForceMatrixDecomposition::fillSkipData(int atom1, int atom2){ | 
| 883 | < |  | 
| 887 | < | InteractionData idat; | 
| 882 | > | void ForceMatrixDecomposition::fillSkipData(InteractionData &idat, | 
| 883 | > | int atom1, int atom2) { | 
| 884 |  | #ifdef IS_MPI | 
| 885 |  | idat.atypes = make_pair( ff_->getAtomType(identsRow[atom1]), | 
| 886 |  | ff_->getAtomType(identsCol[atom2]) ); | 
| 953 |  | #ifdef IS_MPI | 
| 954 |  | for (int i = 0; i < nGroupsInRow_; i++) { | 
| 955 |  | rs = cgRowData.position[i]; | 
| 956 | + |  | 
| 957 |  | // scaled positions relative to the box vectors | 
| 958 |  | scaled = invHmat * rs; | 
| 959 | + |  | 
| 960 |  | // wrap the vector back into the unit box by subtracting integer box | 
| 961 |  | // numbers | 
| 962 | < | for (int j = 0; j < 3; j++) | 
| 962 | > | for (int j = 0; j < 3; j++) { | 
| 963 |  | scaled[j] -= roundMe(scaled[j]); | 
| 964 | + | scaled[j] += 0.5; | 
| 965 | + | } | 
| 966 |  |  | 
| 967 |  | // find xyz-indices of cell that cutoffGroup is in. | 
| 968 |  | whichCell.x() = nCells_.x() * scaled.x(); | 
| 971 |  |  | 
| 972 |  | // find single index of this cell: | 
| 973 |  | cellIndex = Vlinear(whichCell, nCells_); | 
| 974 | + |  | 
| 975 |  | // add this cutoff group to the list of groups in this cell; | 
| 976 |  | cellListRow_[cellIndex].push_back(i); | 
| 977 |  | } | 
| 978 |  |  | 
| 979 |  | for (int i = 0; i < nGroupsInCol_; i++) { | 
| 980 |  | rs = cgColData.position[i]; | 
| 981 | + |  | 
| 982 |  | // scaled positions relative to the box vectors | 
| 983 |  | scaled = invHmat * rs; | 
| 984 | + |  | 
| 985 |  | // wrap the vector back into the unit box by subtracting integer box | 
| 986 |  | // numbers | 
| 987 | < | for (int j = 0; j < 3; j++) | 
| 987 | > | for (int j = 0; j < 3; j++) { | 
| 988 |  | scaled[j] -= roundMe(scaled[j]); | 
| 989 | + | scaled[j] += 0.5; | 
| 990 | + | } | 
| 991 |  |  | 
| 992 |  | // find xyz-indices of cell that cutoffGroup is in. | 
| 993 |  | whichCell.x() = nCells_.x() * scaled.x(); | 
| 996 |  |  | 
| 997 |  | // find single index of this cell: | 
| 998 |  | cellIndex = Vlinear(whichCell, nCells_); | 
| 999 | + |  | 
| 1000 |  | // add this cutoff group to the list of groups in this cell; | 
| 1001 |  | cellListCol_[cellIndex].push_back(i); | 
| 1002 |  | } | 
| 1003 |  | #else | 
| 1004 |  | for (int i = 0; i < nGroups_; i++) { | 
| 1005 |  | rs = snap_->cgData.position[i]; | 
| 1006 | + |  | 
| 1007 |  | // scaled positions relative to the box vectors | 
| 1008 |  | scaled = invHmat * rs; | 
| 1009 | + |  | 
| 1010 |  | // wrap the vector back into the unit box by subtracting integer box | 
| 1011 |  | // numbers | 
| 1012 | < | for (int j = 0; j < 3; j++) | 
| 1012 | > | for (int j = 0; j < 3; j++) { | 
| 1013 |  | scaled[j] -= roundMe(scaled[j]); | 
| 1014 | + | scaled[j] += 0.5; | 
| 1015 | + | } | 
| 1016 |  |  | 
| 1017 |  | // find xyz-indices of cell that cutoffGroup is in. | 
| 1018 |  | whichCell.x() = nCells_.x() * scaled.x(); | 
| 1020 |  | whichCell.z() = nCells_.z() * scaled.z(); | 
| 1021 |  |  | 
| 1022 |  | // find single index of this cell: | 
| 1023 | < | cellIndex = Vlinear(whichCell, nCells_); | 
| 1023 | > | cellIndex = Vlinear(whichCell, nCells_); | 
| 1024 | > |  | 
| 1025 |  | // add this cutoff group to the list of groups in this cell; | 
| 1026 |  | cellList_[cellIndex].push_back(i); | 
| 1027 |  | } | 
| 1079 |  | } | 
| 1080 |  | } | 
| 1081 |  | #else | 
| 1082 | + |  | 
| 1083 |  | for (vector<int>::iterator j1 = cellList_[m1].begin(); | 
| 1084 |  | j1 != cellList_[m1].end(); ++j1) { | 
| 1085 |  | for (vector<int>::iterator j2 = cellList_[m2].begin(); | 
| 1086 |  | j2 != cellList_[m2].end(); ++j2) { | 
| 1087 | < |  | 
| 1087 | > |  | 
| 1088 |  | // Always do this if we're in different cells or if | 
| 1089 |  | // we're in the same cell and the global index of the | 
| 1090 |  | // j2 cutoff group is less than the j1 cutoff group | 
| 1104 |  | } | 
| 1105 |  | } | 
| 1106 |  | } | 
| 1107 | < |  | 
| 1107 | > |  | 
| 1108 |  | // save the local cutoff group positions for the check that is | 
| 1109 |  | // done on each loop: | 
| 1110 |  | saved_CG_positions_.clear(); | 
| 1111 |  | for (int i = 0; i < nGroups_; i++) | 
| 1112 |  | saved_CG_positions_.push_back(snap_->cgData.position[i]); | 
| 1113 | < |  | 
| 1113 | > |  | 
| 1114 |  | return neighborList; | 
| 1115 |  | } | 
| 1116 |  | } //end namespace OpenMD |