Statistiques
| Révision :

root / ase / md / verlet.py @ 13

Historique | Voir | Annoter | Télécharger (1,04 ko)

1 1 tkerber
import numpy as np
2 1 tkerber
3 1 tkerber
from ase.md.md import MolecularDynamics
4 1 tkerber
5 1 tkerber
6 1 tkerber
class VelocityVerlet(MolecularDynamics):
7 1 tkerber
    def __init__(self, atoms, dt, trajectory=None, logfile=None,
8 1 tkerber
                 loginterval=1):
9 1 tkerber
        MolecularDynamics.__init__(self, atoms, dt, trajectory, logfile,
10 1 tkerber
                                   loginterval)
11 1 tkerber
12 1 tkerber
    def step(self, f):
13 1 tkerber
        atoms = self.atoms
14 1 tkerber
        p = self.atoms.get_momenta()
15 1 tkerber
        p += 0.5 * self.dt * f
16 1 tkerber
        self.atoms.set_positions(self.atoms.get_positions() +
17 1 tkerber
            self.dt * p / self.atoms.get_masses()[:,np.newaxis])
18 1 tkerber
        # We need to store the momenta on the atoms before calculating
19 1 tkerber
        # the forces, as in a parallel Asap calculation atoms may
20 1 tkerber
        # migrate during force calculations, and the momenta need to
21 1 tkerber
        # migrate along with the atoms.  For the same reason, we
22 1 tkerber
        # cannot use self.masses in the line above.
23 1 tkerber
        self.atoms.set_momenta(p)
24 1 tkerber
        f = self.atoms.get_forces()
25 1 tkerber
        atoms.set_momenta(self.atoms.get_momenta() + 0.5 * self.dt * f)
26 1 tkerber
        return f