Source code for hymd.integrator

"""Integrates equations of motion.

Implements the Velocity Verlet integrator. The *reversible reference system
propagator algorithm* (rRESPA) integrator uses the Velocity Verlet functions
inside the MD loop in the main module.
"""


[docs]def integrate_velocity(velocities, accelerations, time_step): """Velocity update step of the Velocity Verlet integration algorithm. Computes the velocity update step of the Velocity Verlet algorithm. The :code:`velocities` argument is **not** changed in place. Parameters ---------- velocities : (N, D) numpy.ndarray Array of velocities of :code:`N` particles in :code:`D` dimensions. accelerations : (N, D) numpy.ndarray Array of accelerations of :code:`N` particles in :code:`D` dimensions. time_step : float The time step used in the integration. Notes ----- The Velocity Verlet algorithm contains two steps, first the velocties are integrated one half step forward in time by applying the forces from the previous step .. math:: \\mathbf{v}_{\\text{new}} = \\mathbf{v} + \\frac{\\Delta t}{2m} \\mathbf{f} before the positions are moved a full step using the updated half-step velocities. See Also -------- integrate_position : The position update step of the Velocity Verlet algorithm. """ return velocities + 0.5 * time_step * accelerations
[docs]def integrate_position(positions, velocities, time_step): """Position update step of the Velocity Verlet integration algorithm. Computes the position update step of the Velocity Verlet algorithm. The :code:`positions` argument is **not** changed in place. Parameters ---------- positions : (N, D) numpy.ndarray Array of positions of :code:`N` particles in :code:`D` dimensions. velocities : (N, D) numpy.ndarray Array of velocities of :code:`N` particles in :code:`D` dimensions. time_step : float The time step used in the integration. Notes ----- The Velocity Verlet algorithm contains two steps, first the velocties are integrated one half step forward in time by applying the forces from the previous step, then the positions are updated a full step using the updated velocities .. math:: \\mathbf{x}_{\\text{new}} = \\mathbf{x} + \\Delta t \\mathbf{v} See Also -------- integrate_velocity : The velocity update step of the Velocity Verlet algorithm. """ return positions + time_step * velocities