Statistiques
| Révision :

root / ase / optimize / mdmin.py @ 3

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

1
import numpy as np
2

    
3
from ase.optimize.optimize import Optimizer
4

    
5

    
6
class MDMin(Optimizer):
7
    def __init__(self, atoms, restart=None, logfile='-', trajectory=None,
8
                 dt=None):
9
        Optimizer.__init__(self, atoms, restart, logfile, trajectory)
10

    
11
        if dt is not None:
12
            self.dt = dt
13

    
14
    def initialize(self):
15
        self.v = None
16
        self.dt = 0.2
17

    
18
    def read(self):
19
        self.v, self.dt = self.load()
20
        
21
    def step(self, f):
22
        atoms = self.atoms
23

    
24
        if self.v is None:
25
            self.v = np.zeros((len(atoms), 3))
26
        else:
27
            self.v += 0.5 * self.dt * f
28
            # Correct velocities:
29
            vf = np.vdot(self.v, f)
30
            if vf < 0.0:
31
                self.v[:] = 0.0
32
            else:
33
                self.v[:] = f * vf / np.vdot(f, f)
34

    
35
        self.v += 0.5 * self.dt * f
36
        r = atoms.get_positions()
37
        atoms.set_positions(r + self.dt * self.v)
38
        self.dump((self.v, self.dt))