--- trunk/OOPSE/libmdtools/Integrator.cpp 2004/04/15 16:18:26 1113 +++ trunk/OOPSE/libmdtools/Integrator.cpp 2004/04/19 03:52:27 1118 @@ -687,6 +687,7 @@ template void Integrator::rotationPropa double angle; double A[3][3], I[3][3]; + int i, j, k; // use the angular velocities to propagate the rotation matrix a // full time step @@ -694,6 +695,21 @@ template void Integrator::rotationPropa sd->getA(A); sd->getI(I); + if (sd->isLinear()) { + i = sd->linearAxis(); + j = (i+1)%3; + k = (i+2)%3; + + angle = dt2 * ji[j] / I[j][j]; + this->rotate( k, i, angle, ji, A ); + + angle = dt * ji[k] / I[k][k]; + this->rotate( i, j, angle, ji, A); + + angle = dt2 * ji[j] / I[j][j]; + this->rotate( k, i, angle, ji, A ); + + } else { // rotate about the x-axis angle = dt2 * ji[0] / I[0][0]; this->rotate( 1, 2, angle, ji, A ); @@ -714,6 +730,7 @@ template void Integrator::rotationPropa angle = dt2 * ji[0] / I[0][0]; this->rotate( 1, 2, angle, ji, A ); + } sd->setA( A ); }