Statistiques
| Révision :

root / ase / optimize / mdmin.py @ 1

Historique | Voir | Annoter | Télécharger (986 octet)

1 1 tkerber
import numpy as np
2 1 tkerber
3 1 tkerber
from ase.optimize.optimize import Optimizer
4 1 tkerber
5 1 tkerber
6 1 tkerber
class MDMin(Optimizer):
7 1 tkerber
    def __init__(self, atoms, restart=None, logfile='-', trajectory=None,
8 1 tkerber
                 dt=None):
9 1 tkerber
        Optimizer.__init__(self, atoms, restart, logfile, trajectory)
10 1 tkerber
11 1 tkerber
        if dt is not None:
12 1 tkerber
            self.dt = dt
13 1 tkerber
14 1 tkerber
    def initialize(self):
15 1 tkerber
        self.v = None
16 1 tkerber
        self.dt = 0.2
17 1 tkerber
18 1 tkerber
    def read(self):
19 1 tkerber
        self.v, self.dt = self.load()
20 1 tkerber
21 1 tkerber
    def step(self, f):
22 1 tkerber
        atoms = self.atoms
23 1 tkerber
24 1 tkerber
        if self.v is None:
25 1 tkerber
            self.v = np.zeros((len(atoms), 3))
26 1 tkerber
        else:
27 1 tkerber
            self.v += 0.5 * self.dt * f
28 1 tkerber
            # Correct velocities:
29 1 tkerber
            vf = np.vdot(self.v, f)
30 1 tkerber
            if vf < 0.0:
31 1 tkerber
                self.v[:] = 0.0
32 1 tkerber
            else:
33 1 tkerber
                self.v[:] = f * vf / np.vdot(f, f)
34 1 tkerber
35 1 tkerber
        self.v += 0.5 * self.dt * f
36 1 tkerber
        r = atoms.get_positions()
37 1 tkerber
        atoms.set_positions(r + self.dt * self.v)
38 1 tkerber
        self.dump((self.v, self.dt))