Name

ComplexBandstructure — Class for representing the complex band structure for a given configuration and calculator.

Synopsis

Namespace: NanoLanguage
ComplexBandstructure(
configuration,
energies,
k_point,
energy_zero_parameter
)

Description

Constructor for the ComplexBandstructure object.

ComplexBandstructure Arguments

configuration

The bulk configuration with attached calculator for which the complex bandstructure should be calculated.

Type: A BulkConfiguration.

Default: None
energies

The energies for which the complex bandstructure should be calculated.

Type: List containing elements of the type PhysicalQuantity of with energy unit.

Default: numpy.linspace(-2, 2, 101)*eV
k_point

The k-point (in the A-B plane) for which the complex bandstructure should be calculated.

Type: Tuple of length 2

Default: (0, 0)
energy_zero_parameter

Specifies the choice for the energy zero.

Type: FermiLevel | AbsoluteEnergy.

Default: FermiLevel.

ComplexBandstructure Methods

A ComplexBandstructure object provides the following methods:

  • energies(): Query function for the energies

  • energyZero(): Return the energy zero

  • evaluate(spin): Method for obtaining the complex bandstructure k vectors, i.e. the touple (k_propagating, k_decaying)

    spin

    The spin to calcualte for.

    Type: Spin.Up | Spin.Down

    Default: Spin.Up
  • fermiLevel(): Return the Fermi level in absolute energy

  • fermiTemperature(): Return the Fermi_temperatures

  • kPoint(): Query function for the k_point

  • nlprint(stream): Print a string containing an ASCII table useful for plotting the complex bandstructure.

    stream

    The stream the complex bandstructure should be written to.

    Type: A stream that supports strings being written to using 'write'.

    Default: sys.stdout
  • repetition(): Return the repetition used

  • spins(): Query function for the spins

Usage Examples

Calculate the complex bandstructure of silicon in the (100) direction and save it to a file

# Set up si (100) surface
bulk_configuration = BulkConfiguration(
    bravais_lattice=SimpleTetragonal(3.84*Angstrom, 5.43*Angstrom),
    elements=[Silicon, Silicon, Silicon, Silicon],
    fractional_coordinates=[[0.0, 0.0, 0.00],
                            [0.5, 0.0, 0.25],
                            [0.5, 0.5, 0.50],
                            [0.0, 0.5, 0.75]]
    )

# Define calculator
calculator = SlaterKosterCalculator(
    basis_set=Vogl.Si_Basis,
    numerical_accuracy_parameters=NumericalAccuracyParameters(
                k_point_sampling=(4, 4, 2))
     )

bulk_configuration.setCalculator(calculator)

# Calculate and save the complex bandstructure
complex_bandstructure = ComplexBandstructure(
    configuration=bulk_configuration,
    energies=numpy.linspace(-2,2,501)*eV,
    )
nlsave('si_complex_band.nc', complex_bandstructure)
nlprint(complex_bandstructure)

si_complex_band.py

Complex bandstructure for Silicon in the (100) direction. The right part of the plots illustrates the real bands, while the left hand side of the plot shows the complex bands.

Figure 10: Complex bandstructure for Silicon in the (100) direction. The right part of the plots illustrates the real bands, while the left hand side of the plot shows the complex bands.


Notes

The complex bandstructure is obtained by for a specified energy,  E and parallel k-point  k_x, k_y finding the eigenstates, \psi_{n k}, with no imposed boundary conditions in the z direction,

\displaystyle

      H \psi_{n k} = E \psi_{n k}.

We may write the eigenstates as

\displaystyle

      \psi_{n k}({\bf r}) = u_k({\bf r}) e^{i k z},

where u_k is a periodic function and  k is a complex number.

  • To calculate the complex bandstructure you must have a BulkConfiguration that could be used as a valid electrode in a DeviceConfiguration. This means that the geometry must be sufficiently long in the z-direction(typically > 7 Å), such that there are only matrix elements with atoms in the nearest cell along the z-direction.

  • In case the cell is too small in the z-direction, the structure will automatically be repeated along the z-direction. The repetition will give rise to zone folding of the calculated bands.

  • To print the data of a complex bandstructure, use the method nlprint.