--- branches/development/src/parallel/ForceMatrixDecomposition.hpp 2011/05/26 13:55:04 1569 +++ branches/development/src/parallel/ForceMatrixDecomposition.hpp 2011/06/08 16:05:07 1576 @@ -58,6 +58,7 @@ namespace OpenMD { ForceMatrixDecomposition(SimInfo* info) : ForceDecomposition(info) {}; void distributeInitialData(); + void zeroWorkArrays(); void distributeData(); void collectIntermediateData(); void distributeIntermediateData(); @@ -67,7 +68,7 @@ namespace OpenMD { vector > buildNeighborList(); // group bookkeeping - pair getGroupTypes(int cg1, int cg2); + groupCutoffs getGroupCutoffs(int cg1, int cg2); // Group->atom bookkeeping vector getAtomsInGroupRow(int cg1); @@ -82,23 +83,32 @@ namespace OpenMD { Vector3d getInteratomicVector(int atom1, int atom2); // atom bookkeeping - vector getAtomList(); - vector getSkipsForAtom(int atom1); + int getNAtomsInRow(); + vector getSkipsForRowAtom(int atom1); + int getTopoDistance(int atom1, int atom2); bool skipAtomPair(int atom1, int atom2); void addForceToAtomRow(int atom1, Vector3d fg); void addForceToAtomColumn(int atom2, Vector3d fg); // filling interaction blocks with pointers InteractionData fillInteractionData(int atom1, int atom2); + void unpackInteractionData(InteractionData idat, int atom1, int atom2); InteractionData fillSkipData(int atom1, int atom2); private: + void createGtypeCutoffMap(); + int nLocal_; int nGroups_; + vector identsLocal; vector AtomLocalToGlobal; vector cgLocalToGlobal; - vector pot_local; vector massFactorsLocal; + vector > skipsForLocalAtom; + vector > toposForLocalAtom; + vector > topoDistLocal; + vector groupCutoff; + vector groupToGtype; #ifdef IS_MPI DataStorage atomRowData; @@ -115,29 +125,41 @@ namespace OpenMD { Communicator* AtomCommRealRow; Communicator* AtomCommVectorRow; Communicator* AtomCommMatrixRow; + Communicator* AtomCommPotRow; Communicator* AtomCommIntColumn; Communicator* AtomCommRealColumn; Communicator* AtomCommVectorColumn; - Communicator* AtomCommMatrixColumn; + Communicator* AtomCommMatrixColumn; + Communicator* AtomCommPotColumn; Communicator* cgCommIntRow; Communicator* cgCommVectorRow; Communicator* cgCommIntColumn; Communicator* cgCommVectorColumn; - vector > pot_row; - vector > pot_col; + // work arrays for assembling potential energy + vector pot_row; + vector pot_col; + potVec pot_local; vector identsRow; vector identsCol; + vector atypesRow; + vector atypesCol; + vector AtomRowToGlobal; vector AtomColToGlobal; vector cgRowToGlobal; vector cgColToGlobal; + vector groupCutoffRow; + vector groupCutoffCol; + vector groupColToGtype; + vector groupRowToGtype; + vector > cellListRow_; vector > cellListCol_; @@ -147,6 +169,9 @@ namespace OpenMD { vector massFactorsRow; vector massFactorsCol; + vector > skipsForRowAtom; + vector > toposForRowAtom; + vector > topoDistRow; #endif };