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

Comparing trunk/OOPSE/libmdtools/RigidBody.cpp (file contents):
Revision 1120 by tim, Mon Apr 19 20:54:58 2004 UTC vs.
Revision 1284 by tim, Mon Jun 21 18:52:21 2004 UTC

# Line 8 | Line 8 | RigidBody::RigidBody() : StuntDouble() {
8    objType = OT_RIGIDBODY;
9    is_linear = false;
10    linear_axis =  -1;
11 +  momIntTol = 1e-6;
12   }
13  
14   RigidBody::~RigidBody() {
# Line 261 | Line 262 | void RigidBody::body2Lab( double r[3] ){
262  
263   }
264  
265 + double RigidBody::getZangle( ){
266 +    return zAngle;
267 + }
268 +
269 + void RigidBody::setZangle( double zAng ){
270 +    zAngle = zAng;
271 + }
272 +
273 + void RigidBody::addZangle( double zAng ){
274 +    zAngle += zAng;
275 + }
276 +
277   void RigidBody::calcRefCoords( ) {
278  
279    int i,j,k, it, n_linear_coords;
# Line 632 | Line 645 | void RigidBody::accept(BaseVisitor* v){
645  
646    //for(atomIter = myAtoms.begin(); atomIter != myAtoms.end(); ++atomIter)
647    //  (*atomIter)->accept(v);
648 < }
648 > }
649 > void RigidBody::getAtomRefCoor(double pos[3], int index){
650 >  vec3 ref;
651 >
652 >  ref = refCoords[index];
653 >  pos[0] = ref[0];
654 >  pos[1] = ref[1];
655 >  pos[2] = ref[2];
656 >  
657 > }
658 >
659 >
660 > void RigidBody::getAtomPos(double theP[3], int index){
661 >  vec3 ref;
662 >
663 >  if (index >= myAtoms.size())
664 >    cerr << index << " is an invalid index, current rigid body contains " << myAtoms.size() << "atoms" << endl;
665 >
666 >  ref = refCoords[index];
667 >  body2Lab(ref.vec);
668 >  
669 >  theP[0] = pos[0] + ref[0];
670 >  theP[1] = pos[1] + ref[1];
671 >  theP[2] = pos[2] + ref[2];
672 > }
673 >
674 >
675 > void RigidBody::getAtomVel(double theV[3], int index){
676 >  vec3 ref;
677 >  double velRot[3];
678 >  double skewMat[3][3];
679 >  double aSkewMat[3][3];
680 >  double aSkewTransMat[3][3];
681 >  
682 >  //velRot = $(A\cdot skew(I^{-1}j))^{T}refCoor$
683 >
684 >  if (index >= myAtoms.size())
685 >    cerr << index << " is an invalid index, current rigid body contains " << myAtoms.size() << "atoms" << endl;
686 >
687 >  ref = refCoords[index];
688 >
689 >  skewMat[0][0] =0;
690 >  skewMat[0][1] = ji[2] /I[2][2];
691 >  skewMat[0][2] = -ji[1] /I[1][1];
692 >
693 >  skewMat[1][0] = -ji[2] /I[2][2];
694 >  skewMat[1][1] = 0;
695 >  skewMat[1][2] = ji[0]/I[0][0];
696 >
697 >  skewMat[2][0] =ji[1] /I[1][1];
698 >  skewMat[2][1] = -ji[0]/I[0][0];
699 >  skewMat[2][2] = 0;
700 >  
701 >  matMul3(A, skewMat, aSkewMat);
702 >
703 >  transposeMat3(aSkewMat, aSkewTransMat);
704 >
705 >  matVecMul3(aSkewTransMat, ref.vec, velRot);
706 >  theV[0] = vel[0] + velRot[0];
707 >  theV[1] = vel[1] + velRot[1];
708 >  theV[2] = vel[2] + velRot[2];
709 > }
710 >
711 >

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines