A simple flag-like class representing a double contour.
contour_parameters = ContourParameters(method=DoubleContour())
When there is a finite bias in the system there are different equivalent ways to obtain the density matrix (see ContourParameters). In principle the left and right estimates of the density matrix are equivalent:
where \(D^L\), (\(D^R\)) is the equilibrium density matrix, calculated using one of the equilibrium methods, and \(\Delta^L\) (\(\Delta^R\)) the non-equilibrium density matrix contribution.
Due to the finite accuracy of the integration along the real axis these results are not exactly the same. Therefore, if the double contour option is specified both the left and right part are calculated and mixed together to obtain an accurate and reliable calculation of the density matrix at finite bias.
Calculate the non-equilibrium atom Mulliken populations
From the \(\alpha\) coefficients, calculate the weights
The weighted estimate for the density matrix is then
This weighting scheme guarantees at each site that the equilibrium part of the density matrix is the largest contribution. 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.