--- branches/development/src/parallel/ForceMatrixDecomposition.hpp 2011/06/09 20:26:29 1579 +++ branches/development/src/parallel/ForceMatrixDecomposition.hpp 2011/11/22 20:38:56 1665 @@ -36,7 +36,8 @@ * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). - * [4] Vardeman & Gezelter, in progress (2009). + * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). + * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). */ #ifndef PARALLEL_FORCEMATRIXDECOMPOSITION_HPP @@ -55,7 +56,7 @@ namespace OpenMD { class ForceMatrixDecomposition : public ForceDecomposition { public: - ForceMatrixDecomposition(SimInfo* info, InteractionManager* iMan) : ForceDecomposition(info, iMan) {}; + ForceMatrixDecomposition(SimInfo* info, InteractionManager* iMan); void distributeInitialData(); void zeroWorkArrays(); @@ -85,25 +86,23 @@ namespace OpenMD { // atom bookkeeping int getNAtomsInRow(); int getTopologicalDistance(int atom1, int atom2); - vector getSkipsForAtom(int atom1); + vector getExcludesForAtom(int atom1); bool skipAtomPair(int atom1, int atom2); + bool excludeAtomPair(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); + void fillInteractionData(InteractionData &idat, int atom1, int atom2); + void unpackInteractionData(InteractionData &idat, int atom1, int atom2); private: void createGtypeCutoffMap(); int nLocal_; int nGroups_; - vector identsLocal; vector AtomLocalToGlobal; vector cgLocalToGlobal; - vector massFactorsLocal; vector groupCutoff; vector groupToGtype; @@ -118,27 +117,29 @@ namespace OpenMD { int nGroupsInRow_; int nGroupsInCol_; - Communicator* AtomCommIntRow; - Communicator* AtomCommRealRow; - Communicator* AtomCommVectorRow; - Communicator* AtomCommMatrixRow; - Communicator* AtomCommPotRow; + Communicator rowComm; + Communicator colComm; - Communicator* AtomCommIntColumn; - Communicator* AtomCommRealColumn; - Communicator* AtomCommVectorColumn; - Communicator* AtomCommMatrixColumn; - Communicator* AtomCommPotColumn; + Plan* AtomPlanIntRow; + Plan* AtomPlanRealRow; + Plan* AtomPlanVectorRow; + Plan* AtomPlanMatrixRow; + Plan* AtomPlanPotRow; - Communicator* cgCommIntRow; - Communicator* cgCommVectorRow; - Communicator* cgCommIntColumn; - Communicator* cgCommVectorColumn; + Plan* AtomPlanIntColumn; + Plan* AtomPlanRealColumn; + Plan* AtomPlanVectorColumn; + Plan* AtomPlanMatrixColumn; + Plan* AtomPlanPotColumn; + Plan* cgPlanIntRow; + Plan* cgPlanVectorRow; + Plan* cgPlanIntColumn; + Plan* cgPlanVectorColumn; + // work arrays for assembling potential energy vector pot_row; vector pot_col; - potVec pot_local; vector identsRow; vector identsCol; @@ -149,9 +150,11 @@ namespace OpenMD { vector AtomRowToGlobal; vector AtomColToGlobal; +public: vector cgRowToGlobal; vector cgColToGlobal; +private: vector groupCutoffRow; vector groupCutoffCol; vector groupColToGtype;