Statistiques
| Révision :

root / ase / lattice / compounds.py @ 16

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

1 1 tkerber
"""Function-like objects creating lattices with more than one element.
2 1 tkerber

3 1 tkerber
These lattice creators are mainly intended as examples for how to build you
4 1 tkerber
own.  The following crystal structures are defined:
5 1 tkerber

6 1 tkerber
    B1 = NaCl = Rocksalt
7 1 tkerber
    B2 = CsCl
8 1 tkerber
    B3 = ZnS = Zincblende
9 1 tkerber
    L1_2 = AuCu3
10 1 tkerber
    L1_0 = AuCu
11 1 tkerber

12 1 tkerber
"""
13 1 tkerber
from ase.lattice.cubic import FaceCenteredCubicFactory,\
14 1 tkerber
    BodyCenteredCubicFactory, DiamondFactory, SimpleCubicFactory
15 1 tkerber
from ase.lattice.tetragonal import SimpleTetragonalFactory
16 1 tkerber
import numpy as np
17 1 tkerber
from ase.data import reference_states as _refstate
18 1 tkerber
19 1 tkerber
20 1 tkerber
# To prevent a layer of element one on one side, and a layer of
21 1 tkerber
# element two on the other side, NaCl is based on SimpleCubic instead
22 1 tkerber
# of on FaceCenteredCubic
23 1 tkerber
class NaClFactory(SimpleCubicFactory):
24 1 tkerber
    "A factory for creating NaCl (B1, Rocksalt) lattices."
25 1 tkerber
26 1 tkerber
    bravais_basis = [[0, 0, 0], [0, 0, 0.5], [0, 0.5, 0], [0, 0.5, 0.5],
27 1 tkerber
                     [0.5, 0, 0], [0.5, 0, 0.5], [0.5, 0.5, 0],
28 1 tkerber
                     [0.5, 0.5, 0.5]]
29 1 tkerber
    element_basis = (0, 1, 1, 0, 1, 0, 0, 1)
30 1 tkerber
31 1 tkerber
32 1 tkerber
B1 = NaCl = Rocksalt = NaClFactory()
33 1 tkerber
34 1 tkerber
class CsClFactory(SimpleCubicFactory):
35 1 tkerber
    "A factory for creating CsCl (B2) lattices."
36 1 tkerber
    bravais_basis = [[0, 0, 0], [0.5, 0.5, 0.5]]
37 1 tkerber
    element_basis = (0, 1)
38 1 tkerber
39 1 tkerber
B2 = CsCl = CsClFactory()
40 1 tkerber
41 1 tkerber
42 1 tkerber
#The zincblende structure is easily derived from Diamond, which
43 1 tkerber
#already has the right basis.
44 1 tkerber
class ZnSFactory(DiamondFactory):
45 1 tkerber
    "A factory for creating ZnS (B3, Zincblende) lattices."
46 1 tkerber
    element_basis = (0, 1)
47 1 tkerber
48 1 tkerber
B3 = ZnS = Zincblende = ZnSFactory()
49 1 tkerber
50 1 tkerber
51 1 tkerber
# The L1_0 structure is "based on FCC", but is a tetragonal distortion
52 1 tkerber
# of fcc.  It must therefore be derived from the base-centered
53 1 tkerber
# tetragonal structure.  That structure, however, does not exist,
54 1 tkerber
# since it is equivalent to a simple tetragonal structure rotated 45
55 1 tkerber
# degrees along the z-axis.  Basing L1_2 on that would however give
56 1 tkerber
# unexpected miller indices.  L1_2 will therefore be based on a simple
57 1 tkerber
# tetragonal structure, but with a basis corresponding to a
58 1 tkerber
# base-centered tetragonal.
59 1 tkerber
class AuCuFactory(SimpleTetragonalFactory):
60 1 tkerber
    "A factory for creating AuCu (L1_0) lattices (tetragonal symmetry)."
61 1 tkerber
    bravais_basis = [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]]
62 1 tkerber
    element_basis = (0, 1, 1, 0)
63 1 tkerber
64 1 tkerber
AuCu = L1_0 = AuCuFactory()
65 1 tkerber
66 1 tkerber
# The L1_2 structure is "based on FCC", but is really simple cubic
67 1 tkerber
# with a basis.
68 1 tkerber
class AuCu3Factory(SimpleCubicFactory):
69 1 tkerber
    "A factory for creating AuCu3 (L1_2) lattices."
70 1 tkerber
    bravais_basis = [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]]
71 1 tkerber
    element_basis = (0, 1, 1, 1)
72 1 tkerber
73 1 tkerber
AuCu3 = L1_2 = AuCu3Factory()