Name

DoubleContourIntegralParameters — Class for representing the contour parameters when using a double contour.

Synopsis

Namespace: NanoLanguage
DoubleContourIntegralParameters(
integral_lower_bound,
circle_eccentricity,
logarithmic_bunching,
circle_points,
real_axis_point_density,
real_axis_infinitesimal,
real_axis_kbt_padding_factor,
fermi_line_points,
fermi_function_poles
)

Description

DoubleContourIntegralParameters Arguments

integral_lower_bound

The distance between the lowest Fermi-level to the lowest energy circle contour point.

Type: PhysicalQuantity with type energy

Default: 1.5*Hartree
circle_eccentricity

The eccentricity of the circle contour, 0 -> circle, 1 -> line.

Type: float > 0.0

Default: 0.3
logarithmic_bunching

Logarithmic bunching of the circle contour points, 0 -> no bunching, 1 -> all bunched.

Type: float > 0.0

Default: 0.3
circle_points

The number of points on the circle contour.

Type: int > 2

Default: 30
real_axis_point_density

Spacing between the points on bias window integration line close to the real axis.

Type: PhysicalQuantity of type energy

Default: 0.001*Hartree
real_axis_infinitesimal

Small imaginary shift of the bias window integration line from the real axis.

Type: PhysicalQuantity of type energy

Default: 0.001*Hartree
real_axis_kbt_padding_factor

The integration line is extended with the amount real_axis_kbt_padding_factor*k_b*T below and above the electrode Fermi levels.

Type: float > 0.0

Default: 5.0
fermi_line_points

The number of points on the line from the Fermi energy level up to infinity.

Type: int > 0

Default: 11
fermi_function_poles

The number of poles the Fermi function should have between the Fermi energy level and infinity.

Type: int > 0

Default: 4

DoubleContourIntegralParameters Methods

A DoubleContourIntegralParameters object provides the following methods:

  • This object supports cloning. See the section called “Cloning of ATK Python objects”.

  • circleEccentricity(): Return the eccentricity of circle contour, 0 -> circle, 1 -> line.

  • circlePoints(): Return the number of points on the circle contour.

  • fermiFunctionPoles(): The number of poles, the Fermi function should have between the Fermi energy level and infinity.

  • fermiLinePoints(): The number of points on the line from the Fermi energy level up to infinity.

  • integralLowerBound(): Return the distance from the lowest Fermi-level to the lowest energy circle contour point.

  • logarithmicBunching(): Return the logarithmic bunching of the circle contour points, 0 -> no bunching, 1 -> all points close to upper circle contour point.

  • realAxisInfinitesimal(): Return the complex shift of the the non-equilibrium integration line above the real axis.

  • realAxisKbtPaddingFactor(): Return the scaling of k_b*T used for extending the line integration line below and above the electrode Fermi levels.

  • realAxisPointDensity(): Return the density of the points on the non-equilibrium integration line.

Usage Examples

Define the most important DoubleContourIntegralParameters

contour_parameters = DoubleContourIntegralParameters(
    integral_lower_bound = 5.*Hartree, 
    circle_points = 30,
    real_axis_point_density = 0.002*eV,
    real_axis_infinitesimal=1e-05*eV
    ) 

Notes

The double contour calculates both a left and right single contour and perform a mixing of the contour integrals to obtain an accurate and reliable calculation of the Density Matrix at finite bias. The scheme is related to the contour mixing scheme in [2],[25], and can handle systems where there are bound states in the bias window.

The left and right SingleContourIntegralParameters gives two equivalent estimates of the total density matrix (D), i.e. for a left contour we have

\displaystyle

D  =  D^L + \Delta D^R,

and for a right contour we have

\displaystyle

D  =  D^R + \Delta D^L,

where D^L,( D^R) are the equilibrium Density Matrix integrated to the left (right) Fermi Level, and \Delta D^L (\Delta D^R) the non-equilibrium Density Matrix from states in the left (right) electrode integrated between the two Fermi levels.

See the section called “Notes” for single contours for more information on the left and right single contours.

Weighting Scheme

In the following we describe the weighting scheme for the left and right Density Matrix.

Calculate the non-equilibrium atom Mulliken populations

\displaystyle

      \alpha^L_{i}   =  ( \Delta D^L S)_{ii},

\displaystyle

      \alpha^R_{i}  =  ( \Delta D^R S)_{ii}.

From the \alpha coefficients, calculate the weights

\displaystyle

w^L_{ij} = \frac{\sqrt{\alpha^L_{i} \alpha^L_{j}}}{\sqrt{\alpha^L_{i}
    \alpha^L_{j}}+\sqrt{\alpha^R_{i} \alpha^R_{j}}},

\displaystyle

w^R_{ij} = \frac{\sqrt{\alpha^R_{i} \alpha^R_{j}}}{\sqrt{\alpha^L_{i}
    \alpha^L_{j}}+\sqrt{\alpha^R_{i} \alpha^R_{j}}}.

The weighted estimate for the Density Matrix is then

\displaystyle

        D_{ij} = w^L (D^L + \Delta D^R) + w^R (D^R + \Delta D^L)

This weighting scheme optimizes at each site, that a maximum part of the Density Matrix is obtained from the equilibrium part. Since the equilibrium part of the Density Matrix is calculated from a complex contour it is usually much more accurate than the non-equilibrium part.

Bound states in the bias window

Assume the right Fermi level is higher than the left Fermi level, then a bound state in the bias window will only be included in D^R. The occupation of the bound state is then given by w^R, which favors occupation of bound states at sites that are strongly connected with the right electrode. This is similar to the scheme proposed in [25]