--- trunk/OOPSE/libmdtools/Integrator.cpp 2004/04/12 20:32:20 1097 +++ trunk/OOPSE/libmdtools/Integrator.cpp 2004/04/19 03:52:27 1118 @@ -182,9 +182,6 @@ template void Integrator::integrate(voi // initialize the forces before the first step calcForce(1, 1); - - //temp test - tStats->getPotential(); if (nConstrained){ preMove(); @@ -213,7 +210,7 @@ template void Integrator::integrate(voi MPIcheckPoint(); #endif // is_mpi - while (info->getTime() < runTime){ + while (info->getTime() < runTime && !stopIntegrator()){ if ((info->getTime() + dt) >= currStatus){ calcPot = 1; calcStress = 1; @@ -690,13 +687,29 @@ 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 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 ); @@ -717,6 +730,7 @@ template void Integrator::rotationPropa angle = dt2 * ji[0] / I[0][0]; this->rotate( 1, 2, angle, ji, A ); + } sd->setA( A ); }