Molecular dynamics

A molecular dynamics simulation is started by setting the propagator type to "MolecularDynamics". The only needed key is the timestep, which is the time step to use in the integration of forces and velocities to positions.

[[simulations]]
nsteps = 1_000_000

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
integrator = {type = "BerendsenBarostat", pressure = "100 bar", timestep = 1000}
thermostat = {type = "Berendsen", temperature = "400 K", timestep = 100}

Other options are the integrator key to use another integration scheme, the thermostat key to set a thermostat, and the controls key to add some additional control algorithm to the simulation.

Integrators

Integrators are algorithms that propagate the forces acting on the particles to compute their motions. The simplest ones performs an NVE integration, but some integrators allow to work in different ensembles. All NVE integrators can be turned into NVT integrators by adding a thermostat to the simulation. In the input, if the integrator key is absent, the default integrator is a Velocity-Verlet integrator.

Velocity-Verlet integrator

Velocity-Verlet is the most common NVE integrator for molecular dynamics. See this page for more information about the algorithm.

In the input, it can be specified by using the VelocityVerlet integrator type:

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
integrator = {type = "VelocityVerlet"}

Verlet integrator

Verlet algorithm is another simple NVE integrator. See this page for more information. Most of the time, the Velocity-Verlet algorithm is preferable, since it produces more precise velocities.

In the input, it can be specified by using the Verlet integrator type:

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
integrator = {type = "Verlet"}

Leap-Frog integrator

The Leap-Frog algorithm is a third NVE integrator. See this page for details about the algorithm.

In the input, it can be specified by using the LeapFrog integrator type:

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
integrator = {type = "LeapFrog"}

Berendsen barostat

The Berendsen barostat integrator algorithm use the Berendsen barostat with a Velocity-Verlet integrator to achieve NPT integration. It must be use together with a thermostat, preferentially the Berendsen thermostat. See this page for more information about the algorithm.

This algorithm exists in two versions: an isotropic one and an anisotropic one. The isotropic version of the barostat scale all the cell parameter by the same value using the scalar pressure. The anisotropic version scale the different cell parameters by different values, using the stress tensor instead.

In the input, the isotropic barostat can be specified by using the BerendsenBarostat integrator type:

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
integrator = {type = "BerendsenBarostat", pressure = "100 bar", timestep = 1000}
thermostat = {type = "Berendsen", temperature = "400 K", timestep = 100}

The pressure key specify the target pressure for the simulation, and the timestep is the relaxation time step of the barostat.

The anisotropic version of the Berendsen barostat can be specified by using the AnisoBerendsenBarostat integrator type:

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
integrator = {type = "AnisoBerendsenBarostat", pressure = "100 bar", timestep = 1000}
thermostat = {type = "Berendsen", temperature = "400 K", timestep = 100}

The pressure key specify the target hydrostatic pressure for the simulation, and the timestep is the relaxation time step of the barostat.

In both cases, the barostat time step is expressed in fraction of the main integration time step. Using a main time step of 2 fs and a barostat time step of 1000 will yield an effective relaxation time of 2000 fs or 2 ps.

Thermostats

Thermostats are algorithms used to maintain the temperature of a system at a given value. They are specified in the input by the thermostat key.

Canonical Sampling through Velocity Rescaling (CSVR)

The CSVR thermostat implement the algorithm in [Bussi2012]. This algorithm provides a cheap, efficient and correct thermostat, sampling the right dstribution in the canonical (NVT) ensemble. In the input, it is declared with the CSVR thermostat type, a target temperature value, and a timestep. The time step control the relaxation rate of this thermostat, and is expressed in fraction of the main integration time step.

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
thermostat = {type = "CSVR", temperature = "400 K", timestep = 100}

Berendsen thermostat

The Berendsen thermostat is described here, and provide a simple exponential relaxation of the temperature to a target value. In the input, it is declared with the Berendsen thermostat type, a target temperature value, and a timestep. The time step is expressed in fraction of the main integration time step.

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
thermostat = {type = "Berendsen", temperature = "400 K", timestep = 100}

Rescaling thermostat

A rescaling thermostat is the simplest thermostat algorithm possible: it just rescale all the velocities to set the temperature to the wanted value. It can be useful for equilibration as it converges quickly. In the input, it is specified by the Rescale thermostat type, a target temperature value, and a tolerance value. The tolerance value is optional, and is used to let the system fluctuate around the wanted temperature: while the instant temperature is inside the [temperature - tolerance : temperature + tolerance] range, no rescale happen.

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
thermostat = {type = "Rescale", temperature = "250 K", tolerance = "10 K"}

Controls

Control algorithm are supplementary steps that modify the system to ensure some invariant, or apply some constraint. They are specified in the controls array, by giving a control type. The every key specifies that the algorithm should only be run every n step of the simulation (optional, defaults to 1).

[simulations.propagator]
type = "MolecularDynamics"
timestep = "1 fs"
controls = [
    # Remove global rotation of the system every 4 timestep
    {type = "RemoveRotation", every = 4}
]
  • The RemoveTranslation control removes the global system rotation;
  • The RemoveRotation control removes the global system translation.
  • The Rewrap control rewraps all molecules’ centers of mass to lie within the unit cell. Individual atoms in a molecule may still lie outside of the cell.