The function calculateDensityOfStates() calculates and returns the density of states (DOS) as a function of energy for a two-probe system.
List of arguments
An object returned from a previously performed self-consistent calculation for a TwoProbeConfiguration.
Default:
None
A list of the energies for which the DOS should be calculated,
e.g. [0.0*eV,0.5*eV,1.0*eV]. Must be specified.
Default:
None
The k-point sampling used for integrating over the 2D Brillouin zone transverse to the transport direction.
The imaginary infinitesimal added to the energy of the retarded Green's function.
Default: 1.0e-5*eV
The returned object has the following query method:
Array densityOfStates():
Returns the Density Of States (DOS) as a NumPy array with dimensionality
for spin-polarized calculations.
for spin-unpolarized calculations.
where
is the number of energy points. Use the
shape property to check if the calculation is
spin-polarized or not (see examples below).
Array energies(): Returns
the corresponding energies of the Density Of States (DOS) in a NumPy array.
Calculate and print the DOS (cf. the similar script for the transmission spectrum):
from ATK.TwoProbe import * import numpy # scf = restoreSelfConsistentCalculation ('lih2li-scf.nc') density_of_states = calculateDensityOfStates( self_consistent_calculation = scf, energies = [0.*electronVolt] ) energies = density_of_states.energies() dos = density_of_states.densityOfStates() if len(dos.shape)==2: # spin-polarized print ' Density of states' print 'Energy (eV) Spin-up Spin-down' print '------------------------------------------' for i in range(len(energies)): print "%g\t%g\t%g" % ( energies[i].inUnitsOf(eV), dos[0,i].inUnitsOf(eV**(-1)),dos[1,i].inUnitsOf(eV**(-1)) ) else: print 'Energy (eV) Density of states' print '-----------------------------------' for i in range(len(energies)): print "%g\t%g" % ( energies[i].inUnitsOf(eV),dos[i].inUnitsOf(eV**(-1)) )
The zero-point energy for the DOS is the average Fermi level of the two electrodes.
The default k-point sampling (Γ point only) is a crude approximation if the electrodes are three-dimensional (e.g. Au fcc), but on the other hand completely sufficient if the electrodes are effectively one-dimensional (atomic chain, carbon nanotube, etc).
The transmission coefficient can be larger than unity if multiple transmission channels are available for a certain energy. Also, a transmission coefficient less than unity, does not imply that the state is not transmitted - only that the probability of the incoming wave function to be transmitted is smaller than one (quantum mechanics is inherently statistical).
To obtain the individual k-point resolved transmission coefficients
, use the function calculateTransmissionCoefficients().