Source code for qmmm_pme.integrators.verlet_integrator

#! /usr/bin/env python3
"""A module defining the :class:`VerletIntegrator` class.
"""
from __future__ import annotations

import numpy as np
from numpy.typing import NDArray

from .integrator import Integrator


[docs]class VerletIntegrator(Integrator): """An :class:`Integrator` based on the Verlet algorithm. """
[docs] def integrate( self, ) -> tuple[NDArray[np.float64], NDArray[np.float64]]: masses = self.system.state.masses().reshape((-1, 1)) momenta = self.system.state.velocities()*masses momenta = momenta + self.timestep*self.system.state.forces()*(10**-4) final_positions = ( self.system.state.positions() + self.timestep*momenta/masses ) final_velocities = momenta/masses return final_positions, final_velocities