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