# | Line 179 | Line 179 | template<typename T> void Integrator<T>::integrate(voi | |
---|---|---|
179 | ||
180 | readyCheck(); | |
181 | ||
182 | + | // remove center of mass drift velocity (in case we passed in a configuration |
183 | + | // that was drifting |
184 | + | tStats->removeCOMdrift(); |
185 | + | |
186 | // initialize the forces before the first step | |
187 | ||
188 | calcForce(1, 1); | |
185 | – | |
186 | – | //temp test |
187 | – | tStats->getPotential(); |
189 | ||
190 | if (nConstrained){ | |
191 | preMove(); | |
# | Line 213 | Line 214 | template<typename T> void Integrator<T>::integrate(voi | |
214 | MPIcheckPoint(); | |
215 | #endif // is_mpi | |
216 | ||
217 | < | while (info->getTime() < runTime){ |
217 | > | while (info->getTime() < runTime && !stopIntegrator()){ |
218 | if ((info->getTime() + dt) >= currStatus){ | |
219 | calcPot = 1; | |
220 | calcStress = 1; | |
# | Line 690 | Line 691 | template<typename T> void Integrator<T>::rotationPropa | |
691 | ||
692 | double angle; | |
693 | double A[3][3], I[3][3]; | |
694 | + | int i, j, k; |
695 | ||
696 | // use the angular velocities to propagate the rotation matrix a | |
697 | // full time step | |
# | Line 697 | Line 699 | template<typename T> void Integrator<T>::rotationPropa | |
699 | sd->getA(A); | |
700 | sd->getI(I); | |
701 | ||
702 | < | // rotate about the x-axis |
703 | < | angle = dt2 * ji[0] / I[0][0]; |
704 | < | this->rotate( 1, 2, angle, ji, A ); |
702 | > | if (sd->isLinear()) { |
703 | > | i = sd->linearAxis(); |
704 | > | j = (i+1)%3; |
705 | > | k = (i+2)%3; |
706 | > | |
707 | > | angle = dt2 * ji[j] / I[j][j]; |
708 | > | this->rotate( k, i, angle, ji, A ); |
709 | ||
710 | < | // rotate about the y-axis |
711 | < | angle = dt2 * ji[1] / I[1][1]; |
706 | < | this->rotate( 2, 0, angle, ji, A ); |
710 | > | angle = dt * ji[k] / I[k][k]; |
711 | > | this->rotate( i, j, angle, ji, A); |
712 | ||
713 | < | // rotate about the z-axis |
714 | < | angle = dt * ji[2] / I[2][2]; |
710 | < | this->rotate( 0, 1, angle, ji, A); |
713 | > | angle = dt2 * ji[j] / I[j][j]; |
714 | > | this->rotate( k, i, angle, ji, A ); |
715 | ||
716 | < | // rotate about the y-axis |
717 | < | angle = dt2 * ji[1] / I[1][1]; |
718 | < | this->rotate( 2, 0, angle, ji, A ); |
719 | < | |
720 | < | // rotate about the x-axis |
721 | < | angle = dt2 * ji[0] / I[0][0]; |
722 | < | this->rotate( 1, 2, angle, ji, A ); |
723 | < | |
716 | > | } else { |
717 | > | // rotate about the x-axis |
718 | > | angle = dt2 * ji[0] / I[0][0]; |
719 | > | this->rotate( 1, 2, angle, ji, A ); |
720 | > | |
721 | > | // rotate about the y-axis |
722 | > | angle = dt2 * ji[1] / I[1][1]; |
723 | > | this->rotate( 2, 0, angle, ji, A ); |
724 | > | |
725 | > | // rotate about the z-axis |
726 | > | angle = dt * ji[2] / I[2][2]; |
727 | > | this->rotate( 0, 1, angle, ji, A); |
728 | > | |
729 | > | // rotate about the y-axis |
730 | > | angle = dt2 * ji[1] / I[1][1]; |
731 | > | this->rotate( 2, 0, angle, ji, A ); |
732 | > | |
733 | > | // rotate about the x-axis |
734 | > | angle = dt2 * ji[0] / I[0][0]; |
735 | > | this->rotate( 1, 2, angle, ji, A ); |
736 | > | |
737 | > | } |
738 | sd->setA( A ); | |
739 | } | |
740 |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |