Name

calculateTransmissionSpectrum Calculates transmission spectrum for a two-probe system.

Synopsis

Namespace: ATK.TwoProbe
TransmissionSpectrum calculateTransmissionSpectrum(
self_consistent_calculation,
energies,
brillouin_zone_integration_parameters,
green_function_infinitesimal
)

Description

The function calculateTransmissionSpectrum() calculates and returns the total transmission coefficient T_\sigma(E), where \sigma is the spin as a function of the energy E based on a self-consistent two-probe calculation. The total transmission coefficient is defined as an integral of the k-point dependent transmission coefficients T_E(\mathbf{k},\sigma) over the k-points (k_x,k_y) in the 2D Brillouin zone perpendicular to the transport direction.

List of arguments

self_consistent_calculation

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

Default: None

energies

A list of the energies for which the transmission spectrum should be calculated, e.g. [0.0*eV,0.5*eV,1.0*eV].

Default: None

brillouin_zone_integration_parameters

The k-point sampling used for integrating over the 2D Brillouin zone transverse to the transport direction.

Default: brillouinZoneIntegrationParameters((1,1))

green_function_infinitesimal

The imaginary infinitesimal added to the energy of the retarded Green's function.

Default: 1.0e-5*eV

Returned object methods

The return object has the following two query methods:

  • Array energies(): Returns the energies for each of the calculated transmission coefficients.

  • Array coefficients(): Returns the calculated transmission coefficients.

The ordering of the array returned by coefficients() follows the ordering of the array returned by energies().

Usage examples

Calculate and print the transmission spectrum (cf. the similar script for the density of states):

from ATK.TwoProbe import *
import numpy
...
electron_transmission = calculateTransmissionSpectrum(
    self_consistent_calculation = scf_calc,
    energies = numpy.arange(-5,5,0.1)*electronVolt
    )
energies = electron_transmission.energies()
coefficients = electron_transmission.coefficients()
if len(coefficients.shape)==2:
    # spin-polarized
    print '                     Transmission'
    print 'Energy (eV)     Spin-up       Spin-down'
    print '------------------------------------------'
    for i in range(len(energies)):
        print "%g\t%g\t%g" % ( energies[i].inUnitsOf(eV),
            coefficients[0,i],coefficients[1,i] )
else:
    print 'Energy (eV)     Transmission'
    print '-----------------------------------'
    for i in range(len(energies)):
        print "%g\t%g" % ( energies[i].inUnitsOf(eV),coefficients[i] )

Notes

The energy is measured relative to the average Fermi level of the two electrodes. These Fermi levels are, in turn, aligned with the applied bias on each electrode. Note that this means that if the same bias is applied to both electrodes, the energy zero-level (and of course the entire transmission spectrum) is unchanged.

The quantum numbers depend on whether the system is spin-polarized or not, and should be specified according to the rules:

  • ([list_of_k_points], spin) for spin-polarized systems.

  • [list_of_k_points] for unpolarized systems.

where:

  • list_of_k_points is a list of two-dimensional, dimensionless coordinates representing k-points in the 2D Brillouin zone of the unit cell transverse to the transport direction. The coordinates must be given in units of the reciprocal lattice vectors.

  • spin is the spin \sigma

The dimensionality of the returned array corresponds to the number of elements in the quantum_numbers list.

Further examples