ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/parallel/ForceMatrixDecomposition.hpp
(Generate patch)

Comparing:
branches/development/src/parallel/ForceDecomposition.hpp (file contents), Revision 1538 by chuckv, Tue Jan 11 18:58:12 2011 UTC vs.
branches/development/src/parallel/ForceMatrixDecomposition.hpp (file contents), Revision 1549 by gezelter, Wed Apr 27 18:38:15 2011 UTC

# Line 1 | Line 1
1 < /**
2 < * @file ForceDecomposition.cpp
3 < * @author Charles Vardeman <cvardema.at.nd.edu>
4 < * @date 08/18/2010
5 < * @time 11:56am
6 < * @version 1.0
1 > /*
2 > * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3   *
8 * @section LICENSE
9 * Copyright (c) 2010 The University of Notre Dame. All Rights Reserved.
10 *
4   * The University of Notre Dame grants you ("Licensee") a
5   * non-exclusive, royalty free, license to use, modify and
6   * redistribute this software in source and binary code form, provided
# Line 45 | Line 38
38   * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).          
39   * [4]  Vardeman & Gezelter, in progress (2009).                        
40   */
41 +
42 + #ifndef PARALLEL_FORCEMATRIXDECOMPOSITION_HPP
43 + #define PARALLEL_FORCEMATRIXDECOMPOSITION_HPP
44  
45 + #include "Parallel/ForceDecomposition.hpp"
46 + #include "math/SquareMatrix3.hpp"
47  
48 < /*  -*- c++ -*-  */
49 < #ifndef FORCEDECOMPOSITION_PARALLEL_HPP
50 < #define FORCEDECOMPOSITION_PARALLEL_HPP
48 > #ifdef IS_MPI
49 > #include "Parallel/Communicator.hpp"
50 > #endif
51  
52 <
53 < namespace OpenMD{
56 <
57 < class ForceDecomposition
58 < {
59 < public:
60 <  ForceDecomposition();
61 <  virtual ~ForceDecomposition();
62 <  void gather();
63 <  void scatter();
52 > using namespace std;
53 > namespace OpenMD {
54    
55 < protected:
56 < private:
57 <  int myRank_;
58 <  static bool isColumn_;
59 <  static int myIndex_:
60 < };
55 >  class ForceMatrixDecomposition : public ForceDecomposition {
56 >  public:
57 >    ForceMatrixDecomposition(SimInfo* info) : ForceDecomposition(info) {sman_ = info_->getSnapshotManager();}
58 >    void distributeInitialData();
59 >    void distributeData();
60 >    void collectIntermediateData();
61 >    void distributeIntermediateData();
62 >    void collectData();
63  
64 +    // neighbor list routines
65 +    bool checkNeighborList();
66 +    vector<pair<int, int> >  buildNeighborList();
67  
68 +    // group bookkeeping
69 +    pair<int, int> getGroupTypes(int cg1, int cg2);
70  
71 < }
71 >    // Group->atom bookkeeping
72 >    vector<int> getAtomsInGroupRow(int cg1);
73 >    vector<int> getAtomsInGroupColumn(int cg2);
74 >    Vector3d getAtomToGroupVectorRow(int atom1, int cg1);
75 >    Vector3d getAtomToGroupVectorColumn(int atom2, int cg2);
76 >    RealType getMfactRow(int atom1);
77 >    RealType getMfactColumn(int atom2);
78  
79 +    // spatial data
80 +    Vector3d getIntergroupVector(int cg1, int cg2);
81 +    Vector3d getInteratomicVector(int atom1, int atom2);
82 +      
83 +    // atom bookkeeping
84 +    vector<int> getAtomList();
85 +    vector<int> getSkipsForAtom(int atom1);
86 +    bool skipAtomPair(int atom1, int atom2);
87 +    void addForceToAtomRow(int atom1, Vector3d fg);
88 +    void addForceToAtomColumn(int atom2, Vector3d fg);
89  
90 +    // filling interaction blocks with pointers
91 +    InteractionData fillInteractionData(int atom1, int atom2);
92 +    InteractionData fillSkipData(int atom1, int atom2);
93 +    SelfData fillSelfData(int atom1);
94  
95 +  private:
96 +    SnapshotManager* sman_;    
97 + #ifdef IS_MPI    
98 +    Communicator<Row, int>* AtomCommIntRow;
99 +    Communicator<Row, RealType>* AtomCommRealRow;
100 +    Communicator<Row, Vector3d>* AtomCommVectorRow;
101 +    Communicator<Row, Mat3x3d>*  AtomCommMatrixRow;
102  
103 +    Communicator<Column, int>* AtomCommIntColumn;
104 +    Communicator<Column, RealType>* AtomCommRealColumn;
105 +    Communicator<Column, Vector3d>* AtomCommVectorColumn;
106 +    Communicator<Column, Mat3x3d>*  AtomCommMatrixColumn;
107  
108 +    Communicator<Row, int>* cgCommIntRow;
109 +    Communicator<Row, Vector3d>* cgCommVectorRow;
110 +    Communicator<Column, int>* cgCommIntColumn;
111 +    Communicator<Column, Vector3d>* cgCommVectorColumn;
112  
113 +    vector<vector<RealType> > pot_row;
114 +    vector<vector<RealType> > pot_col;
115 +    vector<int> identsRow;
116 +    vector<int> identsCol;
117  
118 +    vector<int> AtomLocalToGlobal;
119 +    vector<int> AtomRowToGlobal;
120 +    vector<int> AtomColToGlobal;
121 +    vector<int> cgLocalToGlobal;
122 +    vector<int> cgRowToGlobal;
123 +    vector<int> cgColToGlobal;
124 + #endif
125 +    vector<RealType> pot_local;
126 +  };
127  
128 + }
129   #endif
130  
85

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines