# ContourParameters¶

class ContourParameters(equilibrium_contour=None, non_equilibrium_contour=None, method=None)

Generic object representing the contour segments to use in a device calculation.

Parameters: equilibrium_contour (OzakiContour | SemiCircleContour) – The equilibrium contour to use. non_equilibrium_contour (RealAxisContour) – The non-equilibrium contour to use. method (SingleContour | DoubleContour) – The contour method to use, either a single contour or a double contour. Default: DoubleContour for finite bias, SingleContour for zero bias.
equilibriumContour()
Returns: The equilibrium contour. OzakiContour | SemiCircleContour
method()
Returns: The contour method used. SingleContour | DoubleContour
nonEquilibriumContour()
Returns: The non-equilibrium contour. RealAxisContour

## Usage Example¶

The ContourParameters class sets the contours used to calculate the density matrix. Both the equilibrium and non-equilibrium contour can be specified, e.g. to combine an OzakiContour with a RealAxisContour:

equilibrium_contour = OzakiContour(number_of_poles=128)

non_equilibrium_contour = RealAxisContour(
real_axis_point_density=0.002*Hartree,
real_axis_infinitesimal=0.003*Hartree,

contour_parameters = ContourParameters(
equilibrium_contour=equilibrium_contour,
non_equilibrium_contour=non_equilibrium_contour)


The keyword method is used to specify how to deal with the numerical inaccuracy which causes a discrepancy between the left and right approach to obtain the density matrix, e.g.:

contour_parameters = ContourParameters(
method=SingleContour(direction=Left))


will only calculate the Left part (see SingleContour). If the DoubleContour option is specified:

contour_parameters = ContourParameters(method=DoubleContour())


the left and right parts are both calculated and added up with a special weighting to obtain the best result (See DoubleContour).

## Notes¶

The ContourParameters object specifies the contour points for integrating the density matrix in a DeviceConfiguration with or without bias.

The equilibrium part of the density matrix is obtained by integrating up to the left (right) Fermi level $$\mu_{L(R)}$$:

$\begin{split}D_L = \Im\left[-\frac{2}{\pi} \int_{-\infty}^{+\infty} dE~ f(E - \mu_L)~ G(E + i0^+)\right]~,\\ D_R = \Im\left[-\frac{2}{\pi} \int_{-\infty}^{+\infty} dE~ f(E - \mu_R)~ G(E + i0^+)\right]~,\end{split}$

in which $$f(E-\mu)$$ is the Fermi-Dirac distribution. The equilibrium density matrix is calculated with an EquilibriumContour method. At zero bias $$D^L$$ and $$D^R$$ yield identical results.

The non-equilibrium contribution to the density matrix is calculated using a NonEquilibriumContour method, which integrates the spectral density matrix from states in the left (right) electrode between the two Fermi levels:

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

in which $$\rho^{L(R)}$$ is the left (right) spectral density matrix.

It follows there are two equivalent ways to calculate the total density matrix $$D$$:

$\begin{split}D = D^L + \Delta^R~,\\ D = D^R + \Delta^L~,\end{split}$

When there is a finite bias in the system both expressions yield different estimates for the density matrix due to the finite accuracy of the integration. The method parameter determines how the density matrix is obtained from both expressions.