class kwant.physics.StabilizedModes(vecs, vecslmbdainv, nmodes, sqrt_hop)[source]#

Bases: object

Stabilized eigendecomposition of the translation operator.

Due to the lack of Hermiticity of the translation operator, its eigendecomposition is frequently poorly conditioned. Solvers in Kwant use this stabilized decomposition of the propagating and evanescent modes in the leads. If the hopping between the unit cells of an infinite system is invertible, the translation eigenproblem is written in the basis psi_n, h_hop^+ * psi_(n+1), with h_hop the hopping between unit cells. If h_hop is not invertible, and has the singular value decomposition u s v^+, then the eigenproblem is written in the basis sqrt(s) v^+ psi_n, sqrt(s) u^+ psi_(n+1). In this basis we calculate the eigenvectors of the propagating modes, and the Schur vectors (an orthogonal basis) in the space of evanescent modes.

vecs and vecslmbdainv are the first and the second halves of the wave functions. The first nmodes are eigenmodes moving in the negative direction (hence they are incoming into the system in Kwant convention), the second nmodes are eigenmodes moving in the positive direction. The remaining modes are the Schur vectors of the modes evanescent in the positive direction. Propagating modes with the same eigenvalue are orthogonalized, and all the propagating modes are normalized to carry unit current. Finally the sqrt_hop attribute is v sqrt(s).


Translation eigenvectors.


numpy array


Translation eigenvectors divided by the corresponding eigenvalues.


numpy array


Number of left-moving (or right-moving) modes.




Part of the SVD of h_hop.


numpy array



Compute the self-energy generated by lead modes.


Sigma – The computed self-energy. Note that even if h_cell and h_hop are both real, Sigma will typically be complex. (More precisely, if there is a propagating mode, Sigma will definitely be complex.)

Return type:

numpy array, real or complex, shape (M,M)