Statistiques
| Révision :

root / ase / md / md.py @ 18

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

1 1 tkerber
"""Molecular Dynamics."""
2 1 tkerber
3 1 tkerber
import numpy as np
4 1 tkerber
5 1 tkerber
from ase.optimize.optimize import Dynamics
6 1 tkerber
from ase.data import atomic_masses
7 1 tkerber
from ase.md.logger import MDLogger
8 1 tkerber
9 1 tkerber
10 1 tkerber
class MolecularDynamics(Dynamics):
11 1 tkerber
    """Base-class for all MD classes."""
12 1 tkerber
    def __init__(self, atoms, timestep, trajectory, logfile=None,
13 1 tkerber
                 loginterval=1):
14 1 tkerber
        Dynamics.__init__(self, atoms, logfile=None, trajectory=trajectory)
15 1 tkerber
        self.dt = timestep
16 1 tkerber
        self.masses = self.atoms.get_masses()
17 1 tkerber
        self.masses.shape = (-1, 1)
18 1 tkerber
        if logfile:
19 1 tkerber
            self.attach(MDLogger(dyn=self, atoms=atoms, logfile=logfile),
20 1 tkerber
                        interval=loginterval)
21 1 tkerber
22 1 tkerber
    def run(self, steps=50):
23 1 tkerber
        """Integrate equation of motion."""
24 1 tkerber
        f = self.atoms.get_forces()
25 1 tkerber
26 1 tkerber
        if not self.atoms.has('momenta'):
27 1 tkerber
            self.atoms.set_momenta(np.zeros_like(f))
28 1 tkerber
29 1 tkerber
        for step in xrange(steps):
30 1 tkerber
            f = self.step(f)
31 1 tkerber
            self.nsteps += 1
32 1 tkerber
            self.call_observers()
33 1 tkerber
34 1 tkerber
    def get_time(self):
35 1 tkerber
        return self.nsteps * self.dt