jaxdem.integrators.velocity_verlet_spiral#
Angular-velocity integrator based on the spiral scheme.
Functions
|
Compute the time derivative of the angular velocity for diagonal inertia. |
Classes
Leapfrog spiral integrator for angular velocities adapted to Velocity Verlet. |
- class jaxdem.integrators.velocity_verlet_spiral.VelocityVerletSpiral[source]#
Bases:
RotationIntegratorLeapfrog spiral integrator for angular velocities adapted to Velocity Verlet.
The implementation follows the velocity update described in del Valle et al. (2023).
- static step_before_force(state: State, system: System) Tuple['State', 'System'][source][source]#
Advances the simulation state by one half-step before the force calculation using the Velocity Verlet scheme.
A third-order Runge–Kutta scheme (SSPRK3) integrates the rigid-body angular momentum equations in the principal axis frame. The quaternion is updated based on the spiral leapfrog algorithm to implement a velocity verlet like version.
SPIRAL algorithm:
\[q(t + \Delta t) = q(t) \cdot e^\left(\frac{\Delta t}{2}\omega(t + \Delta t/2)\right)\]Where the angular velocity and its derivative are purely imaginary quaternions (scalar part is zero and the vector part is equal to the vector). The exponential map of a purely imaginary quaternion is
\[e^u = \cos(|u|) + \frac{\vec{u}}{|u|}\sin(|u|)\]Angular velocity is then updated using SSPRK3 wich we:
\[\begin{split}& \vec{\omega}(t + \Delta t/2) = \vec{\omega}(t) + \frac{1}{6}(k_1 + k_2 + 4k_3) \\ & k_1 = \Delta t/2\; \dot{\vec{\omega}}(\vec{\omega}(t), \vec{\tau}(t)) \\ & k_2 = \Delta t/2\; \dot{\vec{\omega}}(\vec{\omega}(t) + k1, \vec{\tau}(t)) \\ & k_3 = \Delta t/2\; \dot{\vec{\omega}}(\vec{\omega}(t) + (k1 + k2)/4, \vec{\tau}(t)) \\\end{split}\]Where the angular velocity derivative is a function of the torque and angular velocity:
\[\dot{\vec{\omega}} = (\tau - \vec{\omega} \times (I \vec{\omega}))I^{-1}\]- Parameters:
- Returns:
Tuple[State, System] – The updated state and system after one time step.
Reference
———–
del Valle et. al, SPIRAL (An efficient algorithm for the integration of the equation of rotational motion, https://doi.org/10.1016/j.cpc.2023.109077.)
Note
This method donates state and system
- static step_after_force(state: State, system: System) Tuple['State', 'System'][source][source]#
Advances the simulation state by one half-step after the force calculation using the Velocity Verlet scheme.
A third-order Runge–Kutta scheme (SSPRK3) integrates the rigid-body angular momentum equations in the principal axis frame. The quaternion is updated based on the spiral leapfrog algorithm to implement a velocity verlet like version.
\[\begin{split}& \vec{\omega}(t + \Delta t) = \vec{\omega}(t + \Delta t/2) + \frac{1}{6}(k_1 + k_2 + 4k_3) \\ & k_1 = \Delta t/2\; \dot{\vec{\omega}}(\vec{\omega}(t), \vec{\tau}(t)) \\ & k_2 = \Delta t/2\; \dot{\vec{\omega}}(\vec{\omega}(t) + k1, \vec{\tau}(t)) \\ & k_3 = \Delta t/2\; \dot{\vec{\omega}}(\vec{\omega}(t) + (k1 + k2)/4, \vec{\tau}(t)) \\\end{split}\]Where the angular velocity derivative is a function of the torque and angular velocity:
\[\dot{\vec{\omega}} = (\tau + \vec{\omega} \times (I \vec{\omega}))I^{-1}\]- Parameters:
- Returns:
Tuple[State, System] – The updated state and system after one time step.
Reference
———–
del Valle et. al, SPIRAL (An efficient algorithm for the integration of the equation of rotational motion, https://doi.org/10.1016/j.cpc.2023.109077.)
Note
This method donates state and system