50 |
|
class CutoffGroup { |
51 |
|
public: |
52 |
|
|
53 |
< |
CutoffGroup() { |
53 |
> |
CutoffGroup() : snapshotMan_(NULL) { |
54 |
> |
|
55 |
> |
storage_ = &Snapshot::cgData; |
56 |
|
haveTotalMass = false; |
57 |
|
totalMass = 0.0; |
58 |
|
} |
59 |
|
|
60 |
+ |
/** |
61 |
+ |
* Sets the Snapshot Manager of this cutoffGroup |
62 |
+ |
*/ |
63 |
+ |
void setSnapshotManager(SnapshotManager* sman) { |
64 |
+ |
snapshotMan_ = sman; |
65 |
+ |
} |
66 |
+ |
|
67 |
+ |
|
68 |
|
void addAtom(Atom *atom) { |
69 |
|
cutoffAtomList.push_back(atom); |
70 |
|
} |
99 |
|
return totalMass; |
100 |
|
} |
101 |
|
|
102 |
< |
void getCOM(Vector3d & com) { |
102 |
> |
void updateCOM() { |
103 |
|
std::vector<Atom *>::iterator i; |
104 |
|
Atom * atom; |
105 |
< |
Vector3d pos; |
106 |
< |
RealType mass; |
107 |
< |
|
98 |
< |
com[0] = 0; |
99 |
< |
com[1] = 0; |
100 |
< |
com[2] = 0; |
105 |
> |
|
106 |
> |
DataStorage& data = snapshotMan_->getCurrentSnapshot()->*storage_; |
107 |
> |
|
108 |
|
totalMass = getMass(); |
109 |
|
|
110 |
|
if (cutoffAtomList.size() == 1) { |
111 |
< |
com = beginAtom(i)->getPos(); |
111 |
> |
data.position[localIndex_] = beginAtom(i)->getPos(); |
112 |
|
} else { |
113 |
+ |
data.position[localIndex_] = V3Zero; |
114 |
|
for(atom = beginAtom(i); atom != NULL; atom = nextAtom(i)) { |
115 |
< |
mass = atom->getMass(); |
116 |
< |
pos = atom->getPos(); |
117 |
< |
com += pos * mass; |
110 |
< |
} |
111 |
< |
|
112 |
< |
com /= totalMass; |
115 |
> |
data.position[localIndex_] += atom->getMass() * atom->getPos(); |
116 |
> |
} |
117 |
> |
data.position[localIndex_] /= totalMass; |
118 |
|
} |
119 |
|
} |
120 |
+ |
|
121 |
+ |
|
122 |
+ |
Vector3d getPos() { |
123 |
+ |
return ((snapshotMan_->getCurrentSnapshot())->*storage_).position[localIndex_]; |
124 |
+ |
} |
125 |
|
|
126 |
|
int getNumAtom() { |
127 |
|
return cutoffAtomList.size(); |
134 |
|
void setGlobalIndex(int id) { |
135 |
|
this->globalIndex = id; |
136 |
|
} |
137 |
+ |
|
138 |
+ |
/** |
139 |
+ |
* Returns the local index of this cutoffGroup |
140 |
+ |
* @return the local index of this cutoffGroup |
141 |
+ |
*/ |
142 |
+ |
int getLocalIndex() { |
143 |
+ |
return localIndex_; |
144 |
+ |
} |
145 |
+ |
|
146 |
+ |
/** |
147 |
+ |
* Sets the local index of this cutoffGroup |
148 |
+ |
* @param index new index to be set |
149 |
+ |
*/ |
150 |
+ |
void setLocalIndex(int index) { |
151 |
+ |
localIndex_ = index; |
152 |
+ |
} |
153 |
|
|
154 |
|
private: |
155 |
|
|
156 |
|
std::vector<Atom *>cutoffAtomList; |
157 |
|
bool haveTotalMass; |
158 |
|
RealType totalMass; |
159 |
< |
int globalIndex; |
159 |
> |
int globalIndex; |
160 |
> |
|
161 |
> |
int localIndex_; |
162 |
> |
DataStoragePointer storage_; |
163 |
> |
SnapshotManager* snapshotMan_; |
164 |
> |
|
165 |
|
}; |
166 |
|
} //end namespace OpenMD |
167 |
|
#endif //PRIMITIVES_CUTOFFGROUP_HPP |