Statistiques
| Révision :

root / ase / test / emt.py @ 1

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

1
import numpy as np
2
from ase.calculators.emt import EMT
3
from ase import Atoms
4

    
5
a = 3.60
6
b = a / 2
7
cu = Atoms('Cu',
8
           positions=[(0, 0, 0)],
9
           cell=[(0, b, b),
10
                 (b, 0, b),
11
                 (b, b, 0)],
12
           pbc=1,
13
           calculator=EMT())
14
e0 = cu.get_potential_energy()
15
print e0
16

    
17
cu.set_cell(cu.get_cell() * 1.001, scale_atoms=True)
18
e1 = cu.get_potential_energy()
19
V = a**3 / 4
20
B = 2 * (e1 - e0) / 0.003**2 / V * 160.2
21
print B
22

    
23
for i in range(4):
24
    x = 0.001 * i
25
    A = np.array([(x, b, b+x),
26
                  (b, 0, b),
27
                  (b, b, 0)])
28
    cu.set_cell(A, scale_atoms=True)
29
    e = cu.get_potential_energy() - e0
30
    if i == 0:
31
        print i, e
32
    else:
33
        print i, e, e / x**2
34

    
35
A = np.array([(0, b, b),
36
              (b, 0, b),
37
              (6*b, 6*b, 0)])
38
R = np.zeros((2, 3))
39
for i in range(1, 2):
40
    R[i] = i * A[2] / 6
41
print (Atoms('Cu2', positions=R,
42
             pbc=1, cell=A,
43
             calculator=EMT()).get_potential_energy() - 2 * e0) / 2
44

    
45
A = np.array([(0, b, b),
46
              (b, 0, b),
47
              (10*b, 10*b, 0)])
48
R = np.zeros((3, 3))
49
for i in range(1, 3):
50
    R[i] = i * A[2] / 10
51
print (Atoms('Cu3', positions=R,
52
             pbc=1, cell=A,
53
             calculator=EMT()).get_potential_energy() - 3 * e0) / 2
54

    
55
A = np.array([(0, b, b),
56
              (b, 0, b),
57
              (b, b, 0)])
58
R = np.zeros((3, 3))
59
for i in range(1, 3):
60
    R[i] = i * A[2]
61
print (Atoms('Cu3', positions=R,
62
             pbc=(1, 1, 0), cell=A,
63
             calculator=EMT()).get_potential_energy() - 3 * e0) / 2
64