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 [1].

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

uniqueString()

Return a unique string representing the state of the object.

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 [1].