164 |
|
} |
165 |
|
|
166 |
|
// Moment of Inertia calculation |
167 |
< |
Mat3x3d Itmp(0.0); |
168 |
< |
|
167 |
> |
Mat3x3d Itmp(0.0); |
168 |
|
for (std::size_t i = 0; i < atoms_.size(); i++) { |
169 |
+ |
Mat3x3d IAtom(0.0); |
170 |
|
mtmp = atoms_[i]->getMass(); |
171 |
< |
Itmp -= outProduct(refCoords_[i], refCoords_[i]) * mtmp; |
171 |
> |
IAtom -= outProduct(refCoords_[i], refCoords_[i]) * mtmp; |
172 |
|
double r2 = refCoords_[i].lengthSquare(); |
173 |
< |
Itmp(0, 0) += mtmp * r2; |
174 |
< |
Itmp(1, 1) += mtmp * r2; |
175 |
< |
Itmp(2, 2) += mtmp * r2; |
176 |
< |
} |
173 |
> |
IAtom(0, 0) += mtmp * r2; |
174 |
> |
IAtom(1, 1) += mtmp * r2; |
175 |
> |
IAtom(2, 2) += mtmp * r2; |
176 |
> |
Itmp += IAtom; |
177 |
|
|
178 |
< |
//project the inertial moment of directional atoms into this rigid body |
179 |
< |
for (std::size_t i = 0; i < atoms_.size(); i++) { |
180 |
< |
if (atoms_[i]->isDirectional()) { |
181 |
< |
Itmp += refOrients_[i].transpose() * atoms_[i]->getI() * refOrients_[i]; |
182 |
< |
} |
178 |
> |
//project the inertial moment of directional atoms into this rigid body |
179 |
> |
if (atoms_[i]->isDirectional()) { |
180 |
> |
Itmp += refOrients_[i].transpose() * atoms_[i]->getI() * refOrients_[i]; |
181 |
> |
} |
182 |
|
} |
183 |
|
|
184 |
+ |
// std::cout << Itmp << std::endl; |
185 |
+ |
|
186 |
|
//diagonalize |
187 |
|
Vector3d evals; |
188 |
|
Mat3x3d::diagonalize(Itmp, evals, sU_); |