Name

calculateTransmissionEigenvalues Calculates transmission eigenvalues.

Synopsis

Namespace: ATK.TwoProbe
array calculateTransmissionEigenvalues(
self_consistent_calculation,
energy,
quantum_numbers,
eigenvalue_moving,
eigenvalue_propagating,
energy_infinitesimal
)

Description

The function calculateTransmissionEigenvalues() calculates the transmission eigenvalues

\displaystyle

	\lambda_i(E,\mathbf{k},\sigma), \quad i=1,\dots,N_{\rm eigenchannels}

for a given energy E and a given set of quantum numbers (\mathbf{k},\sigma), where \mathbf{k}=(k_x,k_y) is a point in the 2D Brillouin zone perpendicular to the transport direction and \sigma denotes the spin. N_{\rm eigenchannels} indicates the number of eigenchannels which corresponds to non-vanishing eigenvalues.

The transmission eigenvalues \lambda_i(E,\mathbf{k},\sigma) are calculated as the eigenvalues of the Hermitian matrix t^\dagger t, where t(E,\mathbf{k},\sigma) is the transmission matrix.

List of arguments

self_consistent_calculation

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

Default: None

energy

The energy E for which the transmission eigenvalues are to be calculated.

Default: None

quantum_numbers

Sequence of quantum numbers (\mathbf{k},\sigma) for which the transmission eigenvalues are to be calculated (see below).

Default: None

eigenvalue_moving

Criteria to choose the moving mode in the calculation.

Default: 1.0E-13

eigenvalue_propagating

Criteria to choose the propagating mode in the calculation.

Default: 0.90

energy_infinitesimal

Scattering states infinitesimal used as the imaginary part of energy.

Default: 1.0E-5 * Units.eV

Usage examples

from ATK.TwoProbe import *
...
k_point_list = [
    (0.0,0.0),
    (0.0,0.3),
    (0.5,0.5)]
self_consistent_calculation = executeSelfConsistentCalculation(
    atomic_configuration,
    twoprobe_method
    )
transmission_eigenvalues = calculateTransmissionEigenvalues(
    self_consistent_calculation,
    energy = 0*electronVolt,
    quantum_numbers = (k_point_list, Spin.Up)
    )

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. Observe 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 parameter spin could also be a list of spins.

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

The returned eigenvalues are ordered decreasingly according to their value (i.e. \lambda_{i-1}>\lambda_i).

We finally emphasize that the transmission eigenchannels module depends on a new method for calculating the scattering states of the two-probe system. The method can sometimes be sensitive to parameters such as the energy infinitesimal. For this reason, to check correct performance of the algorithm at a particular quantum number, you can verify that the total sum of the transmission eigenvalues is equal to the total sum of the transmission coefficients calculated using the default method in the ATK.TwoProbe module.

Further examples