Source code for qmmm_pme.dynamics.dynamics
#! /usr/bin/env python3
"""A module for defining the :class:`Dynamics` base and derived classes.
"""
from __future__ import annotations
from abc import ABC
from abc import abstractmethod
from dataclasses import asdict
from dataclasses import dataclass
from typing import TYPE_CHECKING
from qmmm_pme.integrators import LangevinIntegrator
from qmmm_pme.integrators import VelocityVerletIntegrator
from qmmm_pme.integrators import VerletIntegrator
if TYPE_CHECKING:
from qmmm_pme import System
from qmmm_pme.integrators.integrator import Integrator
[docs]@dataclass
class Dynamics(ABC):
"""A base class for defining dynamics.
:param timestep: |timestep|
"""
timestep: float | int
[docs] @abstractmethod
def build_integrator(self, system: System) -> Integrator:
"""Build the :class:`Integrator` corresponding to the
:class:`Dynamics` object.
:param system: |system| to integrate forces for.
:return: |Integrator|.
"""
[docs]@dataclass
class VelocityVerlet(Dynamics):
"""A :class:`Dynamics` object storing parameters necessary for
creating the Velocity Verlet integrator.
:param temperature: |temperature|
"""
temperature: float | int
[docs] def build_integrator(self, system: System) -> Integrator:
integrator = VelocityVerletIntegrator(system=system, **asdict(self))
return integrator
[docs]@dataclass
class Verlet(Dynamics):
"""A :class:`Dynamics` object storing parameters necessary for
creating the Verlet integrator.
:param temperature: |temperature|
"""
temperature: float | int
[docs] def build_integrator(self, system: System) -> Integrator:
integrator = VerletIntegrator(system=system, **asdict(self))
return integrator
[docs]@dataclass
class Langevin(Dynamics):
"""A :class:`Dynamics` object storing parameters necessary for
creating the Langevin integrator.
:param temperature: |temperature|
:param friction: |friction|
"""
temperature: float | int
friction: float | int
[docs] def build_integrator(self, system: System) -> Integrator:
integrator = LangevinIntegrator(system=system, **asdict(self))
return integrator