root / ase / optimize / test / N2Cu_relax.py @ 1
Historique | Voir | Annoter | Télécharger (4,19 ko)
1 | 1 | tkerber | from ase import Atoms, Atom |
---|---|---|---|
2 | 1 | tkerber | from ase.calculators.emt import EMT |
3 | 1 | tkerber | from ase.constraints import FixAtoms |
4 | 1 | tkerber | from ase.optimize.test import run_test |
5 | 1 | tkerber | |
6 | 1 | tkerber | name = 'N2Cu'
|
7 | 1 | tkerber | |
8 | 1 | tkerber | def get_atoms_surf(): |
9 | 1 | tkerber | a = 2.70
|
10 | 1 | tkerber | c = 1.59 * a
|
11 | 1 | tkerber | h = 1.85
|
12 | 1 | tkerber | d = 1.10
|
13 | 1 | tkerber | |
14 | 1 | tkerber | slab = Atoms('2Cu', [(0., 0., 0.), (1/3., 1/3., -0.5*c)], |
15 | 1 | tkerber | tags=(0, 1), |
16 | 1 | tkerber | pbc=(1, 1, 0)) |
17 | 1 | tkerber | slab.set_cell([(a, 0, 0), |
18 | 1 | tkerber | (a / 2, 3**0.5 * a / 2, 0), |
19 | 1 | tkerber | (0, 0, 1)]) |
20 | 1 | tkerber | slab = slab.repeat((4, 4, 1)) |
21 | 1 | tkerber | mask = [a.tag == 1 for a in slab] |
22 | 1 | tkerber | slab.set_constraint(FixAtoms(mask=mask)) |
23 | 1 | tkerber | return slab
|
24 | 1 | tkerber | |
25 | 1 | tkerber | def get_atoms_adsorbate(): |
26 | 1 | tkerber | # We need the relaxed slab here!
|
27 | 1 | tkerber | slab = Atoms([ |
28 | 1 | tkerber | Atom('Cu', [ -1.028468159509163, -0.432387156877267, -0.202086055768265]), |
29 | 1 | tkerber | Atom('Cu', [ 0.333333333333333, 0.333333333333333, -2.146500000000000]), |
30 | 1 | tkerber | Atom('Cu', [ 1.671531840490805, -0.432387156877287, -0.202086055768242]), |
31 | 1 | tkerber | Atom('Cu', [ 3.033333333333334, 0.333333333333333, -2.146500000000000]), |
32 | 1 | tkerber | Atom('Cu', [ 4.371531840490810, -0.432387156877236, -0.202086055768261]), |
33 | 1 | tkerber | Atom('Cu', [ 5.733333333333333, 0.333333333333333, -2.146500000000000]), |
34 | 1 | tkerber | Atom('Cu', [ 7.071531840490944, -0.432387156877258, -0.202086055768294]), |
35 | 1 | tkerber | Atom('Cu', [ 8.433333333333335, 0.333333333333333, -2.146500000000000]), |
36 | 1 | tkerber | Atom('Cu', [ 0.321531840490810, 1.905881433340708, -0.202086055768213]), |
37 | 1 | tkerber | Atom('Cu', [ 1.683333333333333, 2.671601923551318, -2.146500000000000]), |
38 | 1 | tkerber | Atom('Cu', [ 3.021531840490771, 1.905881433340728, -0.202086055768250]), |
39 | 1 | tkerber | Atom('Cu', [ 4.383333333333334, 2.671601923551318, -2.146500000000000]), |
40 | 1 | tkerber | Atom('Cu', [ 5.721531840490857, 1.905881433340735, -0.202086055768267]), |
41 | 1 | tkerber | Atom('Cu', [ 7.083333333333333, 2.671601923551318, -2.146500000000000]), |
42 | 1 | tkerber | Atom('Cu', [ 8.421531840490820, 1.905881433340739, -0.202086055768265]), |
43 | 1 | tkerber | Atom('Cu', [ 9.783333333333335, 2.671601923551318, -2.146500000000000]), |
44 | 1 | tkerber | Atom('Cu', [ 1.671531840490742, 4.244150023558601, -0.202086055768165]), |
45 | 1 | tkerber | Atom('Cu', [ 3.033333333333334, 5.009870513769302, -2.146500000000000]), |
46 | 1 | tkerber | Atom('Cu', [ 4.371531840490840, 4.244150023558694, -0.202086055768265]), |
47 | 1 | tkerber | Atom('Cu', [ 5.733333333333333, 5.009870513769302, -2.146500000000000]), |
48 | 1 | tkerber | Atom('Cu', [ 7.071531840490880, 4.244150023558786, -0.202086055768352]), |
49 | 1 | tkerber | Atom('Cu', [ 8.433333333333335, 5.009870513769302, -2.146500000000000]), |
50 | 1 | tkerber | Atom('Cu', [ 9.771531840491031, 4.244150023558828, -0.202086055768371]), |
51 | 1 | tkerber | Atom('Cu', [ 11.133333333333335, 5.009870513769302, -2.146500000000000]), |
52 | 1 | tkerber | Atom('Cu', [ 3.021531840490714, 6.582418613776583, -0.202086055768197]), |
53 | 1 | tkerber | Atom('Cu', [ 4.383333333333334, 7.348139103987287, -2.146500000000000]), |
54 | 1 | tkerber | Atom('Cu', [ 5.721531840490814, 6.582418613776629, -0.202086055768203]), |
55 | 1 | tkerber | Atom('Cu', [ 7.083333333333333, 7.348139103987287, -2.146500000000000]), |
56 | 1 | tkerber | Atom('Cu', [ 8.421531840490985, 6.582418613776876, -0.202086055768357]), |
57 | 1 | tkerber | Atom('Cu', [ 9.783333333333335, 7.348139103987287, -2.146500000000000]), |
58 | 1 | tkerber | Atom('Cu', [ 11.121531840490929, 6.582418613776676, -0.202086055768221]), |
59 | 1 | tkerber | Atom('Cu', [ 12.483333333333334, 7.348139103987287, -2.146500000000000]), |
60 | 1 | tkerber | ]) |
61 | 1 | tkerber | mask = [a.position[2] < -1 for a in slab] |
62 | 1 | tkerber | slab.set_constraint(FixAtoms(mask=mask)) |
63 | 1 | tkerber | |
64 | 1 | tkerber | a = 2.70
|
65 | 1 | tkerber | c = 1.59 * a
|
66 | 1 | tkerber | h = 1.85
|
67 | 1 | tkerber | d = 1.10
|
68 | 1 | tkerber | x = slab.positions[0, 2] / (c / 2) * 100 |
69 | 1 | tkerber | |
70 | 1 | tkerber | molecule = Atoms('2N', positions=[(0., 0., h), |
71 | 1 | tkerber | (0., 0., h + d)]) |
72 | 1 | tkerber | molecule.set_calculator(EMT()) |
73 | 1 | tkerber | slab.extend(molecule) |
74 | 1 | tkerber | return slab
|
75 | 1 | tkerber | |
76 | 1 | tkerber | def get_calculator(): |
77 | 1 | tkerber | return EMT()
|
78 | 1 | tkerber | |
79 | 1 | tkerber | run_test(get_atoms_surf, get_calculator, name + '-surf', steps=200) |
80 | 1 | tkerber | run_test(get_atoms_adsorbate, get_calculator, name + '-N2', steps=200) |