Dynamics

Molecular dynamics based on Newton’s classical equations of motion, integrated with the velocity Verlet algorithm.

Note

For production MD simulations, consider using integrations with LAMMPS or ASE for more efficient dynamics. The eOn dynamics engine is primarily used as a building block for accelerated methods (Parallel Replica, TAD, Hyperdynamics).

To run a standalone dynamics simulation, set job to dynamics in the [Main] section:

[Main]
job = dynamics
temperature = 300

[Dynamics]
time_step = 1.0
time = 1000.0
thermostat = andersen

Or via rgpycrumbs:

from rgpycrumbs.eon.helpers import write_eon_config

config = {
    "Main": {"job": "dynamics", "temperature": 300},
    "Dynamics": {"time_step": 1.0, "time": 1000.0, "thermostat": "andersen"},
}
write_eon_config(config, Path("config.ini"))

Thermostats

Four thermostat options are available:

Thermostat

Key

Description

Andersen

andersen

Stochastic velocity reassignment with collision probability per step

Nose-Hoover

nose_hoover

Deterministic extended-system thermostat (chains of length 2)

Langevin

langevin

Stochastic friction + random force, good for non-equilibrium

None

none

NVE ensemble (constant energy, no temperature control)

Andersen thermostat

Controls temperature via random velocity reassignment. The collision period determines how frequently atoms are thermalized:

[Dynamics]
thermostat = andersen
andersen_alpha = 1.0
andersen_collision_period = 100.0

Langevin thermostat

Applies friction and random forces. The friction coefficient controls the coupling strength to the heat bath:

[Dynamics]
thermostat = langevin
langevin_friction = 0.01

Time parameters

All times are specified in femtoseconds (fs). The internal time unit conversion is handled automatically.

  • time_step: integration timestep (default: 1.0 fs)

  • time: total simulation time (default: 1000.0 fs)

The number of steps is computed as floor(time / time_step).

Configuration

[Dynamics]
pydantic model eon.schema.DynamicsConfig[source]

Show JSON schema
{
   "title": "DynamicsConfig",
   "type": "object",
   "properties": {
      "time_step": {
         "default": 1.0,
         "description": "The duration of each MD step, in femtoseconds.",
         "title": "Time Step",
         "type": "number"
      },
      "time": {
         "default": 1000.0,
         "description": "Total MD time, in femtoseconds.",
         "title": "Time",
         "type": "number"
      },
      "thermostat": {
         "default": "none",
         "description": "Thermostat to use for the dynamics simulation.",
         "enum": [
            "none",
            "andersen",
            "langevin",
            "nose_hoover"
         ],
         "title": "Thermostat",
         "type": "string"
      },
      "andersen_collision_period": {
         "default": 100.0,
         "description": "The collision period (in fs) for the Andersen thermostat.",
         "title": "Andersen Collision Period",
         "type": "number"
      },
      "andersen_alpha": {
         "default": 1.0,
         "description": "The collision strength in the Andersen thermostat.",
         "title": "Andersen Alpha",
         "type": "number"
      },
      "nose_mass": {
         "default": 1.0,
         "description": "The effective mass of the additional degree of freedom in the Nos\u00e9-Hoover thermostat, which determines the coupling frequency of the thermostat.",
         "title": "Nose Mass",
         "type": "number"
      },
      "langevin_friction": {
         "default": 0.01,
         "description": "The damping coefficient for Langevin dynamics (1/fs).",
         "title": "Langevin Friction",
         "type": "number"
      }
   }
}

Config:
  • use_attribute_docstrings: bool = True

Fields:
field andersen_alpha: float = 1.0

The collision strength in the Andersen thermostat.

field andersen_collision_period: float = 100.0

The collision period (in fs) for the Andersen thermostat.

field langevin_friction: float = 0.01

The damping coefficient for Langevin dynamics (1/fs).

field nose_mass: float = 1.0

The effective mass of the additional degree of freedom in the Nosé-Hoover thermostat, which determines the coupling frequency of the thermostat.

field thermostat: Literal['none', 'andersen', 'langevin', 'nose_hoover'] = 'none'

Options: - none: NVE dynamics with the verlet algorithm. Initial velocities set by temperature. - andersen: Andersen thermostat with the Verlet algorithm. - langevin: Langevin thermostat with the Verlet algorithm. - nose_hoover: Nosé-Hoover thermostat with the Verlet algorithm.

Thermostat to use for the dynamics simulation.

field time: float = 1000.0

Total MD time, in femtoseconds.

field time_step: float = 1.0

The duration of each MD step, in femtoseconds.

See also