Skip to content

md

Molecular dynamics primitives.

import mlx_atomistic.md

class VelocityVerlet
def __init__(dt: float)

Velocity Verlet integrator.

Parameters

NameTypeDefaultDescription
dtfloat

Methods

def step(positions: mx.array, velocities: mx.array, masses: mx.array, potential: LennardJonesPotential, *, cell: Cell | None = None, forces: mx.array | None = None, pairs: object | None = None) -> StepState

Advance one MD step.

Parameters

NameTypeDefaultDescription
positionsmx.arrayCurrent coordinates, shape (n_particles, 3).
velocitiesmx.arrayCurrent velocities, shape (n_particles, 3).
massesmx.arrayPer-particle masses, shape (n_particles,).
potentialLennardJonesPotentialForce model providing energy_forces.
cellCell | NoneNoneOptional periodic cell; positions are wrapped into it when given. Defaults to None.
forcesmx.array | NoneNoneOptional forces at the current positions to skip a recompute; None evaluates them. Defaults to None.
pairsobject | NoneNoneOptional neighbor/pair structure passed to the potential. Defaults to None.

Returns

  • StepState — The StepState after one Velocity Verlet step (new positions, velocities, forces, and energies).
def analytic_configurational_virial_tensor(positions: mx.array, forces: mx.array, force_terms: tuple[ForceTerm, ...], *, cell: Cell | None, pairs: object | None, masses: mx.array | None = None, molecule_ids: object | None = None) -> mx.array

Return the production analytic diagonal configurational virial.

Parameters

NameTypeDefaultDescription
positionsmx.array
forcesmx.array
force_termstuple[ForceTerm, ...]
cellCell | None
pairsobject | None
massesmx.array | NoneNone
molecule_idsobject | NoneNone

Returns

  • mx.array
def configurational_virial_tensor(positions: mx.array, forces: mx.array, force_terms: tuple[ForceTerm, ...], *, cell: Cell | None, pairs: object | None, virtual_sites: VirtualSiteManager | None = None, strain_epsilon: float = 0.001, masses: mx.array | None = None, molecule_ids: object | None = None, virial_mode: str = VIRIAL_SUPPORT_ANALYTIC) -> mx.array

Return an analytic production virial or the named validation oracle.

Parameters

NameTypeDefaultDescription
positionsmx.arrayParticle coordinates, shape (n_particles, 3).
forcesmx.arrayForces used for the non-periodic fallback.
force_termstuple[ForceTerm, ...]Force terms contributing to the configurational virial.
cellCell | NonePeriodic cell; None uses the non-periodic force virial.
pairsobject | NoneOptional neighbor/pair structure forwarded to analytic terms.
virtual_sitesVirtualSiteManager | NoneNoneOptional virtual-site manager applied before energy evaluation. Defaults to None.
strain_epsilonfloat0.001Half-width used only by the finite-difference oracle.
massesmx.array | NoneNoneOptional particle masses for molecular center construction.
molecule_idsobject | NoneNoneOptional contiguous per-particle molecule identifiers; absent identifiers treat every particle as its own molecule.
virial_modestrVIRIAL_SUPPORT_ANALYTICanalytic for production or finite_difference_oracle for validation.

Returns

  • mx.array — The diagonal (3, 3) configurational virial tensor.

Raises

  • ValueError — If the requested support level or cell is invalid.

finite_difference_configurational_virial_oracle

Section titled “finite_difference_configurational_virial_oracle”
def finite_difference_configurational_virial_oracle(positions: mx.array, forces: mx.array, force_terms: tuple[ForceTerm, ...], *, cell: Cell | None, pairs: object | None, virtual_sites: VirtualSiteManager | None = None, strain_epsilon: float = 0.001, masses: mx.array | None = None, molecule_ids: object | None = None) -> mx.array

Return the validation-only molecular cell-strain virial oracle.

Parameters

NameTypeDefaultDescription
positionsmx.array
forcesmx.array
force_termstuple[ForceTerm, ...]
cellCell | None
pairsobject | None
virtual_sitesVirtualSiteManager | NoneNone
strain_epsilonfloat0.001
massesmx.array | NoneNone
molecule_idsobject | NoneNone

Returns

  • mx.array
def missing_analytic_virial_support(force_terms: ForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]) -> tuple[str, ...]

Return exact force-term names lacking production analytic virial support.

Parameters

NameTypeDefaultDescription
force_termsForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]

Returns

  • tuple[str, ...]
def missing_virial_support(force_terms: ForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]) -> tuple[str, ...]

Return exact force-term names without a supported virial diagnostics path.

Parameters

NameTypeDefaultDescription
force_termsForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]A single force term or a list/tuple of force terms to inspect.

Returns

  • tuple[str, ...] — The names of the terms lacking virial support, in input order (empty if all are supported).
def pressure_tensor(positions: mx.array, velocities: mx.array, masses: mx.array, forces: mx.array, force_terms: tuple[ForceTerm, ...], *, cell: Cell | None, pairs: object | None, kinetic_energy_scale: float = 1.0, virtual_sites: VirtualSiteManager | None = None, molecule_ids: object | None = None, virial_mode: str = VIRIAL_SUPPORT_ANALYTIC) -> tuple[mx.array, mx.array, mx.array]

Return virial tensor, pressure tensor, and scalar pressure diagnostics.

The pressure tensor uses the reduced-unit convention P = (kinetic tensor + configurational virial) / V. Periodic virials are diagonal-only orthorhombic cell-strain diagnostics; non-periodic runs report finite zero pressure diagnostics because no volume is defined.

Parameters

NameTypeDefaultDescription
positionsmx.arrayParticle coordinates, shape (n_particles, 3).
velocitiesmx.arrayPer-particle velocities, shape (n_particles, 3).
massesmx.arrayPer-particle masses, shape (n_particles,).
forcesmx.arrayForces on each particle, shape (n_particles, 3).
force_termstuple[ForceTerm, ...]Force terms supplying the configurational virial; each must support virial diagnostics.
cellCell | NonePeriodic cell; None reports zero pressure (no volume defined).
pairsobject | NoneOptional neighbor/pair structure forwarded to the force terms.
kinetic_energy_scalefloat1.0Energy-unit factor for the kinetic tensor. Defaults to 1.0.
virtual_sitesVirtualSiteManager | NoneNoneOptional virtual-site manager applied before energy evaluation. Defaults to None.
molecule_idsobject | NoneNoneOptional exact molecule membership for molecular configurational and kinetic pressure.
virial_modestrVIRIAL_SUPPORT_ANALYTICanalytic for production or finite_difference_oracle for validation.

Returns

  • tuple[mx.array, mx.array, mx.array] — A (virial, pressure, scalar) tuple: the (3, 3) configurational virial, the (3, 3) pressure tensor (kinetic + virial) / V, and the scalar pressure tr(P) / 3.

Raises

  • ValueError — If a periodic cell has non-positive volume.
def simulate(positions, velocities, *, masses = None, cell: Cell | None = None, potential: LennardJonesPotential | None = None, pairs: object | None = None, dt: float = 0.005, steps: int = 100) -> SimulationResult

Run a short NVE MD simulation in reduced units.

Parameters

NameTypeDefaultDescription
positionsInitial coordinates, shape (n_particles, 3).
velocitiesInitial velocities, shape (n_particles, 3).
massesNonePer-particle masses, shape (n_particles,); None uses unit masses. Defaults to None.
cellCell | NoneNoneOptional periodic cell for minimum-image distances and wrapping. Defaults to None.
potentialLennardJonesPotential | NoneNoneForce model to integrate; None uses a default LennardJonesPotential. Defaults to None.
pairsobject | NoneNoneOptional precomputed neighbor/pair structure passed to the potential. Defaults to None.
dtfloat0.005Integration time step. Defaults to 0.005.
stepsint100Number of Velocity Verlet steps. Defaults to 100.

Returns

  • SimulationResult — A SimulationResult with stacked per-frame positions, velocities, and energy/temperature series (steps + 1 frames).
def simulate_npt(positions, velocities, *, masses = None, cell: Cell | None = None, force_terms: ForceTerm | list[ForceTerm] | tuple[ForceTerm, ...] | None = None, neighbor_manager: NeighborListManager | None = None, config: SimulationConfig | None = None, thermostat: Thermostat | None = None, barostat: MonteCarloBarostat | None = None, barostat_state: dict[str, Any] | None = None, constraints: DistanceConstraints | None = None, molecule_ids: object | None = None, reporters: RuntimeReporter | list[RuntimeReporter] | tuple[RuntimeReporter, ...] | None = None) -> NPTResult

Run molecular Monte Carlo pressure coupling at exact in-loop intervals.

Parameters

NameTypeDefaultDescription
positionsInitial coordinates, shape (n_particles, 3).
velocitiesInitial velocities, shape (n_particles, 3).
massesNonePer-particle masses, shape (n_particles,); None uses unit masses. Defaults to None.
cellCell | NoneNonePeriodic cell (required for NPT). Defaults to None.
force_termsForceTerm | list[ForceTerm] | tuple[ForceTerm, ...] | NoneNoneOne or more force terms; None uses a default LennardJonesPotential. Defaults to None.
neighbor_managerNeighborListManager | NoneNoneOptional neighbor-list manager. Defaults to None.
configSimulationConfig | NoneNoneRun configuration; None uses defaults. Defaults to None.
thermostatThermostat | NoneNoneThermostat for the NVT stage; None uses a default LangevinThermostat. Defaults to None.
barostatMonteCarloBarostat | NoneNoneMonte Carlo barostat; None uses one matched to the thermostat temperature. Defaults to None.
barostat_statedict[str, Any] | NoneNoneOptional serialized persistent barostat state from a prior committed NPT boundary. Defaults to None.
constraintsDistanceConstraints | NoneNoneOptional distance constraints applied each step. Defaults to None.
molecule_idsobject | NoneNoneOptional contiguous per-particle molecule identifiers. When omitted, each particle is treated as a separate molecule.
reportersRuntimeReporter | list[RuntimeReporter] | tuple[RuntimeReporter, ...] | NoneNoneOptional runtime reporter(s). Defaults to None.

Returns

  • NPTResult — An NPTResult with the integrated trajectory, sampled cell history, and persistent barostat counters.

Raises

  • ValueError — If cell is None (NPT requires a periodic cell).
def simulate_nve(positions, velocities, *, masses = None, cell: Cell | None = None, force_terms: ForceTerm | list[ForceTerm] | tuple[ForceTerm, ...] | None = None, neighbor_manager: NeighborListManager | None = None, config: SimulationConfig | None = None, constraints: DistanceConstraints | None = None, reporters: RuntimeReporter | list[RuntimeReporter] | tuple[RuntimeReporter, ...] | None = None) -> NVEResult

Run NVE molecular dynamics with sparse trajectory and configurable diagnostics.

sample_interval controls trajectory storage. diagnostic_interval controls energy, temperature, pair-count, and constraint diagnostics.

Parameters

NameTypeDefaultDescription
positionsInitial coordinates, shape (n_particles, 3).
velocitiesInitial velocities, shape (n_particles, 3).
massesNonePer-particle masses, shape (n_particles,); None uses unit masses. Defaults to None.
cellCell | NoneNoneOptional periodic cell. Defaults to None.
force_termsForceTerm | list[ForceTerm] | tuple[ForceTerm, ...] | NoneNoneOne or more force terms; None uses a default LennardJonesPotential. Defaults to None.
neighbor_managerNeighborListManager | NoneNoneOptional neighbor-list manager for compact nonbonded backends. Defaults to None.
configSimulationConfig | NoneNoneRun configuration (step count, sampling/diagnostic intervals, virtual sites); None uses defaults. Defaults to None.
constraintsDistanceConstraints | NoneNoneOptional distance constraints applied each step. Defaults to None.
reportersRuntimeReporter | list[RuntimeReporter] | tuple[RuntimeReporter, ...] | NoneNoneOptional runtime reporter(s) invoked on diagnostic events. Defaults to None.

Returns

  • NVEResult — An NVEResult with the sparse trajectory, diagnostics, and energy-drift metrics.
def simulate_nvt(positions, velocities, *, masses = None, cell: Cell | None = None, force_terms: ForceTerm | list[ForceTerm] | tuple[ForceTerm, ...] | None = None, neighbor_manager: NeighborListManager | None = None, config: SimulationConfig | None = None, thermostat: Thermostat | None = None, constraints: DistanceConstraints | None = None, reporters: RuntimeReporter | list[RuntimeReporter] | tuple[RuntimeReporter, ...] | None = None) -> NVTResult

Run NVT molecular dynamics with Langevin BAOAB or Nose-Hoover dynamics.

Parameters

NameTypeDefaultDescription
positionsInitial coordinates, shape (n_particles, 3).
velocitiesInitial velocities, shape (n_particles, 3).
massesNonePer-particle masses, shape (n_particles,); None uses unit masses. Defaults to None.
cellCell | NoneNoneOptional periodic cell. Defaults to None.
force_termsForceTerm | list[ForceTerm] | tuple[ForceTerm, ...] | NoneNoneOne or more force terms; None uses a default LennardJonesPotential. Defaults to None.
neighbor_managerNeighborListManager | NoneNoneOptional neighbor-list manager for compact nonbonded backends. Defaults to None.
configSimulationConfig | NoneNoneRun configuration; None uses defaults. Defaults to None.
thermostatThermostat | NoneNoneLangevin (BAOAB) or Nose-Hoover thermostat; None uses a default LangevinThermostat. Defaults to None.
constraintsDistanceConstraints | NoneNoneOptional distance constraints applied each step. Defaults to None.
reportersRuntimeReporter | list[RuntimeReporter] | tuple[RuntimeReporter, ...] | NoneNoneOptional runtime reporter(s). Defaults to None.

Returns

  • NVTResult — An NVTResult with the trajectory, diagnostics, and temperature-control metrics.
def validate_analytic_virial_support(force_terms: ForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]) -> None

Fail closed when production pressure sees an oracle-only force term.

Parameters

NameTypeDefaultDescription
force_termsForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]

Returns

  • None
def validate_virial_support(force_terms: ForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]) -> None

Fail closed when future pressure-coupled runtimes see unsupported terms.

Parameters

NameTypeDefaultDescription
force_termsForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]A single force term or a list/tuple of force terms to validate.

Returns

  • None

Raises

  • ValueError — If any term lacks a supported virial diagnostics path.
def virial_readiness_report(force_terms: ForceTerm | list[ForceTerm] | tuple[ForceTerm, ...], *, require_analytic: bool = False) -> ReadinessReport

Return per-term analytic, oracle-only, or unsupported virial readiness.

Parameters

NameTypeDefaultDescription
force_termsForceTerm | list[ForceTerm] | tuple[ForceTerm, ...]
require_analyticboolFalse

Returns

  • ReadinessReport
def virial_support_state(term: ForceTerm) -> str

Return one force term’s truthful virial capability.

Parameters

NameTypeDefaultDescription
termForceTerm

Returns

  • str