ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/primitives/RigidBody.cpp
(Generate patch)

Comparing trunk/OOPSE-2.0/src/primitives/RigidBody.cpp (file contents):
Revision 2204 by gezelter, Fri Apr 15 22:04:00 2005 UTC vs.
Revision 2341 by tim, Mon Oct 3 15:54:23 2005 UTC

# Line 164 | Line 164 | namespace oopse {
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  
177 <    //project the inertial moment of directional atoms into this rigid body
179 <    for (std::size_t i = 0; i < atoms_.size(); i++) {
177 >      //project the inertial moment of directional atoms into this rigid body
178        if (atoms_[i]->isDirectional()) {
179 <        RectMatrix<double, 3, 3> Iproject = refOrients_[i].transpose() * atoms_[i]->getI();
180 <        Itmp(0, 0) += Iproject(0, 0);
181 <        Itmp(1, 1) += Iproject(1, 1);
182 <        Itmp(2, 2) += Iproject(2, 2);
179 >        IAtom += atoms_[i]->getI();
180 >        Itmp += refOrients_[i].transpose() * IAtom * refOrients_[i];
181 >      } else {
182 >        Itmp += IAtom;
183        }
184      }
185  
# Line 273 | Line 271 | namespace oopse {
271        if (atoms_[i]->isDirectional()) {
272            
273          dAtom = (DirectionalAtom *) atoms_[i];
274 <        dAtom->setA(a * refOrients_[i]);
277 <        //dAtom->rotateBy( A );      
274 >        dAtom->setA(refOrients_[i] * a);
275        }
276  
277      }
# Line 301 | Line 298 | namespace oopse {
298        if (atoms_[i]->isDirectional()) {
299            
300          dAtom = (DirectionalAtom *) atoms_[i];
301 <        dAtom->setA(a * refOrients_[i], frame);
301 >        dAtom->setA(refOrients_[i] * a, frame);
302        }
303  
304      }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines