RealAxisContour

class RealAxisContour(real_axis_point_density=None, real_axis_infinitesimal=None, real_axis_kbt_padding_factor=None)

A non-equilibrium contour using the real axis contour points and weights defined in [gBMO+02].

Parameters:
  • real_axis_point_density (PhysicalQuantity of type energy) – Spacing between the points on bias window integration line close to the real axis.
    Default: 0.001 * Hartree
  • real_axis_infinitesimal (PhysicalQuantity of type energy) – Small imaginary shift of the bias window integration line from the real axis.
    Default: 0.001 * Hartree
  • real_axis_kbt_padding_factor (float > 0.0) – The integration line is extended with the amount \(f k_b T\) below and above the electrode Fermi levels where \(f\) is this value.
    Default: 5.0
realAxisInfinitesimal()
Returns:The imaginary shift.
Return type:PhysicalQuantity of type energy
realAxisKbtPaddingFactor()
Returns:The padding factor.
Return type:float
realAxisPointDensity()
Returns:The spacing between the points.
Return type:PhysicalQuantity of type energy

Usage Example

One can use the RealAxisContour by defining it as an non-equilibrium contour

non_equilibrium_contour = RealAxisContour()

which constructs a RealAxisContour with all defaults. Alternatively, more parameters that alter the accuracy of the approximation can be specified, e.g.

non_equilibrium_contour = RealAxisContour(
    real_axis_point_density=0.002*Hartree,
    real_axis_infinitesimal=0.003*Hartree,
    real_axis_kbt_padding_factor=10.0)

To use it in a calculation of a the density matrix for a system with finite bias, the NonEquilibriumContour object is passed to the ContourParameters object,

contour_parameters = ContourParameters(non_equilibrium_contour=non_equilibrium_contour)

and saved on the calculator

device_calculator = DeviceLCAOCalculator(contour_parameters=contour_parameters)

Notes

If a system has a finite bias, the density matrix has both an equilibrium and a non-equilibrium contribution (See Notes):

\[D_{\mu\nu} = D^L_{\mu\nu} + \Delta^R_{\mu\nu} = D^R_{\mu\nu} + \Delta^L_{\mu\nu}\]

The RealAxisContour provides a method to solve the non-equilibrium part \(\Delta\) through a numerical integration of:

\[\Delta^R_{\mu\nu} = \int_{-\infty}^{+\infty} d\epsilon~\rho^L_{\mu\nu}(\epsilon)\left[ f(\epsilon -\mu_R) - f(\epsilon - \mu_L)\right]\]

in which \(\rho^L\) is the spectral density matrix. The integration is performed over the bias window, extended by the real_axis_kbt_padding_factor.

To increase the accuracy of the approximation the user can specify the real_axis_point_density.

Because of the finite accuracy of the approximation the left and right approaches to calculate the density matrix can lead to a different result. The integration error can be quantified by:

\[e_{\mu\nu} = D^L_{\mu\nu} + \Delta^R_{\mu\nu} - (D^R_{\mu\nu} + \Delta^L_{\mu\nu})\]

For ways to deal with this error see DoubleContour.

More information about this approach can be found in [fBMO+02].

[fBMO+02]M. Brandbyge, J.-L. Mozos, P. Ordejón, J. Taylor, and K. Stokbro. Density-functional method for nonequilibrium electron transport. Phys. Rev. B, 65:165401, Mar 2002. doi:10.1103/PhysRevB.65.165401.