Name

Bravais lattices The 14 Bravais lattices used to describe crystal structures.

Synopsis

Namespace: ATK.KohnSham or ATK.TwoProbe
Object SimpleCubic(a)
Object BodyCenteredCubic(a)
Object FaceCenteredCubic(a)
Object Rhombohedral(
a,
alpha
)
Object Hexagonal(
a,
c
)
Object SimpleTetragonal(
a,
c
)
Object BodyCenteredTetragonal(
a,
c
)
Object SimpleOrthorhombic(
a,
b,
c
)
Object BodyCenteredOrthorhombic(
a,
b,
c
)
Object FaceCenteredOrthorhombic(
a,
b,
c
)
Object BaseCenteredOrthorhombic(
a,
b,
c
)
Object SimpleMonoclinic(
a,
b,
c,
beta
)
Object BaseCenteredMonoclinic(
a,
b,
c,
beta
)
Object Triclinic(
a,
b,
c,
alpha,
beta,
gamma
)

Description

NanoLanguage has built-in support for all 14 three-dimensional Bravais lattices. In fact, in order to perform proper calculations for bulk systems, it is necessary to use these classes, instead of defining your own lattice vectors. This will (at least in the future) allow ATK to take advantage of the symmetries of the lattice, and the user does not have to worry about the exact definition of the lattice vectors, symmetry points in the Brillouin zone, and so on.

None of the parameters have any default value, and they must all be specified with units (see the examples below).

Returned object methods

All Bravais lattice classes share the following member functions:

  • Array primitiveVectors(): Returns a NumPy array containing the vectors of the primitive unit cell. The dimensions of this array will be (nvectors,ndimensions).

  • List conventionalVectors(): Returns a list containing the vectors of the conventional unit cell.

  • Float getA(): Returns the lattice constant a.

  • Float getB(): Returns the lattice constant b.

  • Float getC(): Returns the lattice constant c.

  • Float getAlpha(): Returns the angle alpha.

  • Float getBeta(): Returns the angle beta.

  • Float getGamma(): Returns the angle gamma.

Thus, Bravais lattices are classes, and to each one belongs a constructor, as listed below. The constructors take at most 6 arguments, corresponding to the lattice parameters:

For the non-primitive lattices, such as face-centered cubic, the lattice constants correspond to the conventional cell, not the primitive one. The cell created by ATK and used in the calculations is, however, the primitive one.

Finally, all Bravais lattices except triclinic have a higher degree of symmetry. This means, that the lattice parameters are constrained to certain values or relationships. For example, in a simple cubic lattice, a = b =
      c,\mathrm{alpha} = \mathrm{beta} = \mathrm{gamma}. In those cases, the constructors only accept the free parameters as arguments (a, in the cubic case). For a complete list of the free parameters of each lattice, see the table below.

Table 8: The seven crystal classes; the dots indicate the free lattice parameters.

Bravais lattice a b c alpha beta gamma
Cubic          
Hexagonal        
Rhombohedral        
Tetragonal        
Orthorhombic      
Monoclinic    
Triclinic

Usage examples

Specify a face-centered cubic lattice with lattice constants a = 5.1 Å:

from ATK.KohnSham import *

      lattice = FaceCenteredCubic(5.1*Ang)

Specify a base-centered monoclinic lattice with lattice constants a = 4.07 Å, b = 8.02 Å, c = 2.04 Å, and angle beta = 56°:

lattice = BaseCenteredMonoclinic(
    a = 4.07*Angstrom,
    b = 8.02*Angstrom,
    c = 2.04*Angstrom,
    beta = 56*degrees
    )

Print a in Bohr, and the c/a ratio, of a hexagonal lattice:

lattice = Hexagonal(...)
print "a = %g Bohr" % (lattice.getA().inUnitsOf(Bohr))
print "c/a = %g" % (lattice.getA()/lattice.getC())

Function that prints the lattice vectors, in Angstrom, of a given lattice:

def printLatticeVectors(lattice):
    for vector in lattice.primitiveVectors():
        for i in range(3):
            print vector[i].inUnitsOf(Ang),TAB,
    print

Print the primitive vectors of a Bravais lattice and the x-coordinate of the first and third primitive vector:

from ATK.KohnSham import *
lattice = FaceCenteredCubic(2.5*Angstrom)
vectors = lattice.primitiveVectors()
for vector in vectors:
    print vector
print vectors[0][0] #x-coordinate of the first vector
print vectors[2][0] #x-coordinate of the third vector
    
[0.0 Ang 1.25 Ang 1.25 Ang]
[1.25 Ang 0.0 Ang 1.25 Ang]
[1.25 Ang 1.25 Ang 0.0 Ang]
0.0 Ang
1.25 Ang
    

Notes

Use BulkConfiguration to insert atoms in the lattice.