## molecular_dynamics() — optimize atoms given restraints, with MD

`molecular_dynamics(output='NO_REPORT', cap_atom_shift=0.2, md_time_step=4.0, init_velocities=True, temperature=293.0, md_return='FINAL', equilibrate=999999, guide_factor=0.0, guide_time=0.0, friction=0.0, residue_span_range=(0, 99999), **vars)`

Output:
  molpdf

Requirements:
  restraints

> This command creates a new Python optimizer object. Calling the object's `optimize` method with an atom selection then performs a molecular dynamics optimization at a fixed temperature. This is the most basic version of the iterative solver of the Newton's equations of motion. The integrator uses the Verlet algorithm [Verlet, 1967]. All atomic masses are set to that of carbon 12. A brief description of the algorithm is given in Section A.2.

> The molecular dynamics optimizer pretends that the natural logarithm of the molecular pdf is energy in kcal/mole. md_time_step is the time step in femtoseconds. temperature is the temperature of the system in Kelvin. max_iterations determines the number of MD steps. If md_return is `'FINAL'` the last structure is returned as the MODEL. If md_return is `'MINIMAL'` then the structure with the lowest value of the objective function on the whole trajectory is returned as the MODEL. Rescaling of velocities is done every equilibrate steps to match the specified temperature. Atomic shifts along one axis are limited by cap_atom_shift (in angstroms). This value should be smaller than energy_data.update_dynamic. If init_velocities = `True`, the velocity arrays are initialized, otherwise they are not. In that case, the final velocities from the previous run are used as the initial velocities for the current run.

> If both guide_factor and guide_time are non-zero, self-guided molecular dynamics [Wu & Wang, 1999] is carried out.

> See conjugate_gradients() for a description of the other parameters and the edat and actions optional keyword arguments.

Example: See conjugate_gradients() command.