Statistiques
| Révision :

root / ase / md / md.py @ 1

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

1
"""Molecular Dynamics."""
2

    
3
import numpy as np
4

    
5
from ase.optimize.optimize import Dynamics
6
from ase.data import atomic_masses
7
from ase.md.logger import MDLogger
8

    
9

    
10
class MolecularDynamics(Dynamics):
11
    """Base-class for all MD classes."""
12
    def __init__(self, atoms, timestep, trajectory, logfile=None,
13
                 loginterval=1):
14
        Dynamics.__init__(self, atoms, logfile=None, trajectory=trajectory)
15
        self.dt = timestep
16
        self.masses = self.atoms.get_masses()
17
        self.masses.shape = (-1, 1)
18
        if logfile:
19
            self.attach(MDLogger(dyn=self, atoms=atoms, logfile=logfile),
20
                        interval=loginterval)
21

    
22
    def run(self, steps=50):
23
        """Integrate equation of motion."""
24
        f = self.atoms.get_forces()
25

    
26
        if not self.atoms.has('momenta'):
27
            self.atoms.set_momenta(np.zeros_like(f))
28

    
29
        for step in xrange(steps):
30
            f = self.step(f)
31
            self.nsteps += 1
32
            self.call_observers()
33

    
34
    def get_time(self):
35
        return self.nsteps * self.dt
36