--- branches/development/src/parallel/ForceMatrixDecomposition.hpp 2011/05/24 21:24:45 1567 +++ branches/development/src/parallel/ForceMatrixDecomposition.hpp 2011/06/09 20:26:29 1579 @@ -55,52 +55,57 @@ namespace OpenMD { class ForceMatrixDecomposition : public ForceDecomposition { public: - ForceMatrixDecomposition(SimInfo* info) : ForceDecomposition(info) {sman_ = info_->getSnapshotManager();} + ForceMatrixDecomposition(SimInfo* info, InteractionManager* iMan) : ForceDecomposition(info, iMan) {}; + void distributeInitialData(); + void zeroWorkArrays(); void distributeData(); void collectIntermediateData(); void distributeIntermediateData(); void collectData(); // neighbor list routines - bool checkNeighborList(); vector > buildNeighborList(); // group bookkeeping - pair getGroupTypes(int cg1, int cg2); + groupCutoffs getGroupCutoffs(int cg1, int cg2); // Group->atom bookkeeping vector getAtomsInGroupRow(int cg1); vector getAtomsInGroupColumn(int cg2); Vector3d getAtomToGroupVectorRow(int atom1, int cg1); Vector3d getAtomToGroupVectorColumn(int atom2, int cg2); - RealType getMfactRow(int atom1); - RealType getMfactColumn(int atom2); + RealType getMassFactorRow(int atom1); + RealType getMassFactorColumn(int atom2); // spatial data Vector3d getIntergroupVector(int cg1, int cg2); Vector3d getInteratomicVector(int atom1, int atom2); // atom bookkeeping - vector getAtomList(); - vector getSkipsForAtom(int atom1); + int getNAtomsInRow(); + int getTopologicalDistance(int atom1, int atom2); + vector getSkipsForAtom(int atom1); 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); - SelfData fillSelfData(int atom1); private: - SnapshotManager* sman_; - Snapshot* snap_; - int storageLayout_; - vector Cells; + void createGtypeCutoffMap(); int nLocal_; int nGroups_; + vector identsLocal; + vector AtomLocalToGlobal; + vector cgLocalToGlobal; + vector massFactorsLocal; + vector groupCutoff; + vector groupToGtype; #ifdef IS_MPI DataStorage atomRowData; @@ -117,35 +122,50 @@ 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 AtomLocalToGlobal; + vector atypesRow; + vector atypesCol; + vector AtomRowToGlobal; vector AtomColToGlobal; - vector cgLocalToGlobal; + vector cgRowToGlobal; vector cgColToGlobal; - vector > CellListRow; - vector > CellListCol; -#else - vector > CellList; + vector groupCutoffRow; + vector groupCutoffCol; + vector groupColToGtype; + vector groupRowToGtype; + + vector > cellListRow_; + vector > cellListCol_; + + vector > groupListRow_; + vector > groupListCol_; + + vector massFactorsRow; + vector massFactorsCol; #endif - vector pot_local; };