Name

calculateEnergyBands Calculates the band structure of a bulk system.

Synopsis

Namespace: ATK.KohnSham
EnergyBands calculateEnergyBands(
self_consistent_calculation,
k_point_list,
spin
)

Description

Supplied with a list of k-points this function will calculate the energy bands of bulk system.

List of arguments

self_consistent_calculation

An object returned from a previously performed self-consistent calculation for a BulkConfiguration.

Default: None

k_point_list

A list of k-points, for example [(0,0,0),(0.1,0.1,0.1),(0.5,0.5,0.5)], given in units of the reciprocal lattice vectors.

Default: None

spin

The electron spin (up or down) must be defined for spin-polarized calculations.

Default: None

Returned object methods

The returned object from the function calculateEnergyBands() has the following two query methods:

  • int numberOfBands(): Returns the number of bands, i.e. the number of energy levels for each k-point.

  • Array band(bandnumber): Returns a NumPy array, which contains the energies of the band specified by the index bandnumber. The maximum value of bandnumber is numberOfBands() - 1 and it must therefore be represented by an integer between 0 and numberOfBands() - 1.

Usage examples

Setup a line with 20 points from [0,0,0] to [1,1,1] in the first Brillouin zone and calculate and print the band structure along this line (for more elaborate examples, see Spin-polarized iron)

from ATK.KohnSham import *

my_bulk = BulkConfiguration(...)
scf = executeSelfConsistentCalculation(my_bulk)
n_points = 20
brillouin_zone_line = [(float(i)/(n_points-1),)*3 for i in range(n_points)]
for k in brillouin_zone_line:
    energy_bands = calculateEnergyBands(scf,[k])
    for band_ix in range(energy_bands.numberOfBands()):
        energies = energy_bands.band(band_ix)
    print k,
    for E in energies:
        print E.inUnitsOf(eV),
    print

Notes

The k-points are dimensionless, and given in units of the reciprocal lattice vectors.

The zero-level energy for the band structure is the Fermi energy.