Statistiques
| Révision :

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)