ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/primitives/CutoffGroup.hpp
(Generate patch)

Comparing branches/development/src/primitives/CutoffGroup.hpp (file contents):
Revision 1465 by chuckv, Fri Jul 9 23:08:25 2010 UTC vs.
Revision 1540 by gezelter, Mon Jan 17 21:34:36 2011 UTC

# Line 50 | Line 50 | namespace OpenMD {
50    class CutoffGroup {
51    public:
52      
53 <    CutoffGroup() {
53 >    CutoffGroup() :  snapshotMan_(NULL) {
54 >
55 >      storage_ = &Snapshot::cgData;
56 > #ifdef IS_MPI
57 >      iStorage_ = &Snapshot::cgIData;
58 >      jStorage_ = &Snapshot::cgJData;
59 > #endif
60        haveTotalMass = false;
61        totalMass = 0.0;
62      }
63      
64 +    /**
65 +     * Sets the Snapshot Manager of this cutoffGroup
66 +     */
67 +    void setSnapshotManager(SnapshotManager* sman) {
68 +      snapshotMan_ = sman;
69 +    }
70 +
71 +
72      void addAtom(Atom *atom) {
73        cutoffAtomList.push_back(atom);
74      }
# Line 89 | Line 103 | namespace OpenMD {
103        return totalMass;
104      }
105      
106 <    void getCOM(Vector3d & com) {
106 >    void updateCOM() {
107        std::vector<Atom *>::iterator i;
108        Atom * atom;
109 <      Vector3d pos;
110 <      RealType mass;
111 <      
98 <      com[0] = 0;
99 <      com[1] = 0;
100 <      com[2] = 0;
109 >
110 >      DataStorage&  data = snapshotMan_->getCurrentSnapshot()->*storage_;
111 >    
112        totalMass = getMass();
113        
114        if (cutoffAtomList.size() == 1) {
115 <        com = beginAtom(i)->getPos();
115 >        std::cerr << "YO!\n";
116 >        std::cerr << "atipos = " << beginAtom(i)->getPos() << "\n";
117 >        std::cerr << "lI = " << localIndex_ << "\n";
118 >
119 >        data.position[localIndex_] = beginAtom(i)->getPos();
120 >        std::cerr << "YOYO!\n";
121        } else {
122 +        data.position[localIndex_] = V3Zero;
123          for(atom = beginAtom(i); atom != NULL; atom = nextAtom(i)) {
124 <          mass = atom->getMass();
125 <          pos = atom->getPos();
126 <          com += pos * mass;
110 <        }
111 <        
112 <        com /= totalMass;
124 >          data.position[localIndex_] += atom->getMass() * atom->getPos();
125 >        }        
126 >        data.position[localIndex_] /= totalMass;
127        }
128      }
129 +
130 +
131 +    /**
132 +     * Returns the current position of this cutoffGroup for the outer
133 +     * iteration over the cutoff groups.  For Force decomposition,
134 +     * this is the position of the cutoff groups ordered by row index.
135 +     * For serial calculations, this is just the position of the
136 +     * cutoff group.
137 +     */    
138 +    Vector3d getPosI() {
139 + #ifdef IS_MPI
140 +      return ((snapshotMan_->getCurrentSnapshot())->*iStorage_).position[iIndex_];
141 + #else
142 +      return ((snapshotMan_->getCurrentSnapshot())->*storage_).position[localIndex_];      
143 + #endif
144 +    }
145 +
146 +    /**
147 +     * Returns the current position of this cutoffGroup for the inner
148 +     * iteration over the cutoff groups.  For Force decomposition,
149 +     * this is the position of the cutoff groups ordered by column
150 +     * index.  For serial calculations, this is just the position of
151 +     * the cutoff group.
152 +     */    
153 +    Vector3d getPosJ() {
154 + #ifdef IS_MPI
155 +      return ((snapshotMan_->getCurrentSnapshot())->*jStorage_).position[jIndex_];
156 + #else
157 +      return ((snapshotMan_->getCurrentSnapshot())->*storage_).position[localIndex_];      
158 + #endif
159 +    }
160      
161      int getNumAtom() {
162        return cutoffAtomList.size();
# Line 124 | Line 169 | namespace OpenMD {
169      void setGlobalIndex(int id) {
170        this->globalIndex = id;
171      }
172 +
173 +    /**
174 +     * Returns the local index of this cutoffGroup
175 +     * @return the local index of this cutoffGroup
176 +     */
177 +    int getLocalIndex() {
178 +      return localIndex_;
179 +    }
180 +
181 +    /**
182 +     * Sets the local index of this cutoffGroup
183 +     * @param index new index to be set
184 +     */        
185 +    void setLocalIndex(int index) {
186 +      localIndex_ = index;
187 +    }
188      
189    private:
190      
191      std::vector<Atom *>cutoffAtomList;
192      bool haveTotalMass;
193      RealType totalMass;
194 <    int globalIndex;
194 >    int globalIndex;    
195 >
196 >    int localIndex_;
197 >    DataStoragePointer storage_;
198 >    SnapshotManager* snapshotMan_;
199 > #ifdef IS_MPI
200 >    int iIndex_;
201 >    int jIndex_;
202 >    DataStoragePointer iStorage_;
203 >    DataStoragePointer jStorage_;
204 > #endif
205 >
206    };  
207   } //end namespace OpenMD
208   #endif //PRIMITIVES_CUTOFFGROUP_HPP  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines