Statistiques
| Révision :

root / ase / test / vacancy.py @ 1

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

1 1 tkerber
from ase import Atoms
2 1 tkerber
from ase.optimize import QuasiNewton
3 1 tkerber
from ase.neb import NEB
4 1 tkerber
from ase.optimize.mdmin import MDMin
5 1 tkerber
try:
6 1 tkerber
    from asap3 import EMT
7 1 tkerber
except ImportError:
8 1 tkerber
    pass
9 1 tkerber
else:
10 1 tkerber
11 1 tkerber
    a = 3.6
12 1 tkerber
    b = a / 2
13 1 tkerber
    initial = Atoms('Cu4',
14 1 tkerber
                    positions=[(0, 0, 0),
15 1 tkerber
                               (0, b, b),
16 1 tkerber
                               (b, 0, b),
17 1 tkerber
                               (b, b, 0)],
18 1 tkerber
                    cell=(a, a, a),
19 1 tkerber
                    pbc=True)
20 1 tkerber
    initial *= (4, 4, 4)
21 1 tkerber
    del initial[0]
22 1 tkerber
    images = [initial] + [initial.copy() for i in range(6)]
23 1 tkerber
    images[-1].positions[0] = (0, 0, 0)
24 1 tkerber
    for image in images:
25 1 tkerber
        image.set_calculator(EMT())
26 1 tkerber
        #image.set_calculator(ASAP())
27 1 tkerber
28 1 tkerber
    for image in [images[0], images[-1]]:
29 1 tkerber
        QuasiNewton(image).run(fmax=0.01)
30 1 tkerber
    neb = NEB(images)
31 1 tkerber
    neb.interpolate()
32 1 tkerber
33 1 tkerber
    for a in images:
34 1 tkerber
        print a.positions[0], a.get_potential_energy()
35 1 tkerber
36 1 tkerber
    dyn = MDMin(neb, dt=0.1, trajectory='mep1.traj')
37 1 tkerber
    #dyn = QuasiNewton(neb)
38 1 tkerber
    print dyn.run(fmax=0.01, steps=25)
39 1 tkerber
    for a in images:
40 1 tkerber
        print a.positions[0], a.get_potential_energy()