Statistiques
| Révision :

root / ase / lattice / monoclinic.py @ 12

Historique | Voir | Annoter | Télécharger (1,64 ko)

1 1 tkerber
"""Function-like object creating monoclinic lattices.
2 1 tkerber

3 1 tkerber
The following lattice creator is defined:
4 1 tkerber
    SimpleMonoclinic
5 1 tkerber
    BaseCenteredMonoclinic
6 1 tkerber
"""
7 1 tkerber
8 1 tkerber
from ase.lattice.triclinic import TriclinicFactory
9 1 tkerber
import numpy as np
10 1 tkerber
from ase.data import reference_states as _refstate
11 1 tkerber
12 1 tkerber
13 1 tkerber
class SimpleMonoclinicFactory(TriclinicFactory):
14 1 tkerber
    "A factory for creating simple monoclinic lattices."
15 1 tkerber
    # The name of the crystal structure in ChemicalElements
16 1 tkerber
    xtal_name = "monoclinic"
17 1 tkerber
18 1 tkerber
    def make_crystal_basis(self):
19 1 tkerber
        "Make the basis matrix for the crystal unit cell and the system unit cell."
20 1 tkerber
        # First convert the basis specification to a triclinic one
21 1 tkerber
        if type(self.latticeconstant) == type({}):
22 1 tkerber
            self.latticeconstant['beta'] = 90
23 1 tkerber
            self.latticeconstant['gamma'] = 90
24 1 tkerber
        else:
25 1 tkerber
            if len(self.latticeconstant) == 4:
26 1 tkerber
                self.latticeconstant = self.latticeconstant + (90,90)
27 1 tkerber
            else:
28 1 tkerber
                raise ValueError, "Improper lattice constants for monoclinic crystal."
29 1 tkerber
30 1 tkerber
        TriclinicFactory.make_crystal_basis(self)
31 1 tkerber
32 1 tkerber
SimpleMonoclinic = SimpleMonoclinicFactory()
33 1 tkerber
34 1 tkerber
class BaseCenteredMonoclinicFactory(SimpleMonoclinicFactory):
35 1 tkerber
    # The natural basis vectors of the crystal structure
36 1 tkerber
    int_basis = np.array([[1, -1, 0],
37 1 tkerber
                          [1, 1, 0],
38 1 tkerber
                          [0, 0, 2]])
39 1 tkerber
    basis_factor = 0.5
40 1 tkerber
41 1 tkerber
    # Converts the natural basis back to the crystallographic basis
42 1 tkerber
    inverse_basis = np.array([[1, 1, 0],
43 1 tkerber
                              [-1, 1, 0],
44 1 tkerber
                              [0, 0, 1]])
45 1 tkerber
    inverse_basis_factor = 1.0
46 1 tkerber
47 1 tkerber
BaseCenteredMonoclinic = BaseCenteredMonoclinicFactory()