The function calculateTransmissionEigenstates()
calculates and returns the transmission eigenstates
corresponding to a given energy
and a given set of quantum numbers
.
The transmission eigenstates
are calculated
as the eigenvectors (expressed in real space) of the Hermitian matrix
, where
is the transmission matrix.
The states can be stored in a VNLFile for visualization.
List of arguments
An object returned from a previously performed self-consistent calculation for a TwoProbeConfiguration.
Default:
None
The energy
for which the transmission eigenstates
are to be calculated.
Default:
None
Sequence of quantum numbers
for which
the transmission eigenstates are to be calculated (see below).
Default:
None
Criteria to choose the moving mode in the calculation.
Default: 1.0E-13
Criteria to choose the propagating mode in the calculation.
Default: 0.90
Scattering states infinitesimal used as the imaginary part of energy.
Default: 1.0E-5 * Units.eV
Each item in the list corresponds to a particular eigenstate, and has the following query methods:
Array toArray(): Returns the
real-space representation of the transmission eigenstate in the region defined by the
central region plus one unit cell for both the left and right electrodes.
The returned values
are complex numbers in a NumPy array with dimensions
(n1, n2,
n3).
PhysicalUnit toUnit():
Returns the unit of the real-space representation of the eigenstate.
Tuple quantumNumber():
Returns the quantum numbers of the transmission
eigenstate. The format of the quantum depends
on the type of system (see below).
PhysicalQuantity
eigenvalue(): Returns the (dimensionless)
transmission eigenvalue of the
transmission eigenstate.
from ATK.TwoProbe import * ... # Define output on VNL file vnl_file = VNLFile("myfile.vnl") ... # Set the quantum numbers index_list = [0, 1] k_point_list =[(0.0,0.0), (0.0,0.3), (0.5,0.5)] spin = Spin.Up ... # Set up and perform calculations self_consistent_calculation = executeSelfConsistentCalculation( atomic_configuration, twoprobe_method ) for index in index_list: transmission_eigenstate = calculateTransmissionEigenstates( self_consistent_calculation, energy = 0*electronVolt, quantum_numbers = (index, k_point_list, spin) ) for k_index in range(len(k_point_list)): vnl_file.addToSample(transmission_eigenstate[k_index],"My Sample")
In this example for each of the three k-points
(
,
, and
)
the first two transmission
eigenstates with spin up are calculated. Then, the transmission eigenstates
are stored for visualization in a VNLFile.
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:
(index, [k_point_list], spin) for spin-polarized systems.
(index, [k_point_list]) for unpolarized systems.
where:
index is the transmission eigenvalue index (see
calculateTransmissionEigenvalues()).
The transmission eigenvalue index may assume
any integer value within the range
,
where
indicates the number of eigenchannels
which corresponds to non-vanishing transmission eigenvalues.
k_point_list is a list of two-dimensional, dimensionless
coordinates representing a list of 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
.
The dimensionality of the returned array corresponds to the number of elements in
the quantum_numbers list.