Statistiques
| Révision :

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)