Bravais Lattices

ATK has built-in support for all 14 three-dimensional Bravais lattices along with an additional possibility to specify the unit cell directly. To allow QuantumATK to take advantage of the symmetries of the lattice and define the relevant high-symmetry points in the Brillouin zone, e.g. for band structure calculations, the lattice must be constructed using the correct Bravais lattice class, cf. the list below. If the lattice is defined using the UnitCell class, it is internally categorized as triclinic.

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

Lattice types

class SimpleCubic(a)

A simple cubic Bravais lattice.

Parameters:a (PhysicalQuantity of type length) – Lattice parameter a.
class BodyCenteredCubic(a)

A body centered cubic Bravais lattice.

Parameters:a (PhysicalQuantity of type length) – Lattice parameter a.
class FaceCenteredCubic(a)

A face centered cubic Bravais lattice.

Parameters:a (PhysicalQuantity of type length) – Lattice parameter a.
class Rhombohedral(a, alpha)

A rhombohedral Bravais lattice.

Parameters:
class Hexagonal(a, c)

A hexagonal Bravais lattice.

Parameters:
class SimpleTetragonal(a, c)

A simple tetragonal Bravais lattice.

Parameters:
class BodyCenteredTetragonal(a, c)

A body centered tetragonal Bravais lattice.

Parameters:
class SimpleOrthorhombic(a, b, c)

A simple orthorhombic Bravais lattice.

Parameters:
class BodyCenteredOrthorhombic(a, b, c)

A body centered orthorhombic Bravais lattice.

Parameters:
class FaceCenteredOrthorhombic(a, b, c)

A face centered orthorhombic Bravais lattice.

Parameters:
class BaseCenteredOrthorhombic(a, b, c)

A base centered orthorhombic Bravais lattice.

Parameters:
class SimpleMonoclinic(a, b, c, beta)

A simple monoclinic Bravais lattice.

Parameters:
class BaseCenteredMonoclinic(a, b, c, beta)

A base centered monoclinic Bravais lattice.

Parameters:
class Triclinic(a, b, c, alpha, beta, gamma)

A triclinic Bravais lattice.

Parameters:
class UnitCell(vector_a, vector_b, vector_c, origin=None)

Class for representing a generic unit cell.

Parameters:

Common methods

All Bravais lattice classes share the following member functions:

class BravaisLattice

Base class cannot be constructed.

conventionalVectors()

Get the vectors of the conventional unit cell.

Returns:The conventional lattice vectors.
Return type:PhysicalQuantity of type length
convertFractionalKPoint(kpoint=None)

Method for converting a k-point from fractional to Cartesian coordinates.

Parameters:kpoint (array of floats) – The k-point in fractional coordinates.
Returns:The k-point in Cartesian coordinates.
Return type:PhysicalQuantity of type inverse length
isOrthorhombic()

Determine whether the lattice unit cell satisfies the orthorhombic constraints, that is, the cell vectors are orthogonal.

Returns:Whether the cell is Orthorhombic.
Return type:bool
monoclinicAxes()

Determine along each axis whether the lattice unit cell is monoclinic.

Returns:The result of the check for each axis.
Return type:list of bools
nlprint(stream=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>, name='Bravais lattice')

Print a string containing an ASCII description of the BravaisLattice.

Parameters:
  • stream (Stream based object) – The io to write to.
    Default: sys.stdout
  • name (string) – The name of the configuration being printed.
    Default: ‘Bravais lattice’
origin()
Get the origin of the unit cell.
Returns:The origin vector of the unit cell.
Return type:PhysicalQuantity of type length
primitiveVectors()

Return the primitive vectors.

Returns:A list with the three vectors of the primitive unit cell.
Return type:PhysicalQuantity of type length
reciprocalVectors()

Get the reciprocal lattice vectors.

Returns:The reciprocal lattice vectors.
Return type:PhysicalQuantity of type inverse length
symmetryPoints2D()

Get the high symmetry points in the reciprocal XY-plane.

Returns:Mapping between symmetry label and position.
Return type:dict
unitCellDirectionalVolume()

Calculate the directional volume of the lattice unit cell. Directional volume is a volume whose sign depends on the handedness of the primitive vectors.

Returns:The directional volume of the cell.
Return type:PhysicalQuantity of type volume
unitCellVolume()

Calculate the volume of the lattice unit cell.

Returns:The volume of the cell.
Return type:PhysicalQuantity of type volume.

The Bravais lattices are classes, and their constructors take at most 6 arguments, corresponding to the lattice parameters \(a\), \(b\), \(c\), \(\alpha\), \(\beta\), \(\gamma\). In all cases, these refer to the corresponding conventional cell — not the primitive one. That is, the parameter a for the face-centered cubic cell is not the length of the first primitive lattice vector, but the side length of the corresponding conventional cubic cell. The cell created by QuantumATK and used in the calculations is, however, the primitive cell.

All seven crystal systems, except the 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\) and \(\mathrm{\alpha} = \mathrm{\beta} = \mathrm{\gamma} =\) 90. 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.

The seven crystal systems; the dots indicate the free lattice parameters.
Bravais lattice \(a\) \(b\) \(c\) \(\alpha\) \(\beta\) \(\gamma\)
Cubic \(\bullet\)          
Hexagonal \(\bullet\)   \(\bullet\)      
Rhombohedral \(\bullet\)     \(\bullet\)    
Tetragonal \(\bullet\)   \(\bullet\)      
Orthorhombic \(\bullet\) \(\bullet\) \(\bullet\)      
Monoclinic \(\bullet\) \(\bullet\) \(\bullet\)   \(\bullet\)  
Triclinic \(\bullet\) \(\bullet\) \(\bullet\) \(\bullet\) \(\bullet\) \(\bullet\)

The UnitCell class behaves differently. Instead of providing the lattice parameters, you directly specify the three lattice vectors, each one provided as an array with three arguments (see the example below). For this reason, this class does not have query methods for the lattice parameters.

Usage examples

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

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\(^{\circ}\):

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

Specify a lattice by providing the unit cell vectors:

lattice = UnitCell(
    [19.3,  1.0, 0.0]*Angstrom,
    [-2.0, 15.0, 1.0]*Angstrom,
    [ 0.2,  0.4, 4.9]*Angstrom
    )

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

lattice = Hexagonal(
    a = 4.07*Angstrom,
    c = 2.04*Angstrom
    )
print("a = %g Bohr" % (lattice.a().inUnitsOf(Bohr)))
print("c/a = %g" % (lattice.a()/lattice.c()))

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),'    ')
    print()

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

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

gives the output

[ 0.    1.25  1.25] Ang
[ 1.25  0.    1.25] Ang
[ 1.25  1.25  0.  ] Ang
0.0 Ang
1.25 Ang

Notes

Use BulkConfiguration to insert atoms in the lattice.