kwant.rmt
– Random matrix theory Hamiltonians¶kwant.rmt.
circular
(n, sym='A', charge=None, rng=None)[source]¶Make a n * n matrix belonging to a symmetric circular ensemble.
Size of the matrix. It should be even for the classes C, CI, CII, AII, DIII (either T^2 = -1 or P^2 = -1).
Altland-Zirnbauer symmetry class of the matrix.
Topological invariant of the matrix. Should be one of 1, -1 in symmetry classes D and DIII, should be from 0 to n in classes AIII and BDI, and should be from 0 to n / 2 in class CII. If charge is None, it is drawn from a binomial distribution with p = 1 / 2.
Seed or random number generator. If no ‘rng’ is passed, the random number generator provided by numpy will be used.
A numpy array drawn from a corresponding circular ensemble.
Notes
The representations of symmetry operators are chosen according to Phys. Rev. B 85, 165409, except class D.
Matrix indices are grouped first according to channel number, then sigma-index.
s = s^+.
AI, BDI: r = r^T. CI: r = -sigma_y r^T sigma_y. AII, DIII: r = -r^T. CII: r = sigma_y r^T sigma_y.
CI: r = -sigma_y r^* sigma_y C, CII: r = sigma_y r^* sigma_y D, BDI: r = r^*. DIII: -r = r^*.
This function uses QR decomposition to probe symmetric compact groups, as detailed in arXiv:math-ph/0609050. For a reason as yet unknown, scipy implementation of QR decomposition also works for symplectic matrices.
kwant.rmt.
gaussian
(n, sym='A', v=1.0, rng=None)[source]¶Make a n * n random Gaussian Hamiltonian.
Size of the Hamiltonian. It should be even for all the classes except A, D, and AI, and in class CII it should be a multiple of 4.
Altland-Zirnbauer symmetry class of the Hamiltonian.
Variance every degree of freedom of the Hamiltonian. The probaility distribution of the Hamiltonian is P(H) = exp(-Tr(H^2) / 2 v^2).
Seed or random number generator. If no ‘rng’ is provided the random number generator from numpy will be used.
A numpy array drawn from a corresponding Gaussian ensemble.
Notes
The representations of symmetry operators are chosen according to Phys. Rev. B 85, 165409.
Matrix indices are grouped first according to orbital number, then sigma-index, then tau-index.
H = -tau_z H tau_z.
AI: H = H^*. BDI: H = tau_z H^* tau_z. CI: H = tau_x H^* tau_x. AII, CII: H = sigma_y H^* sigma_y. DIII: H = tau_y H^* tau_y.
C, CI: H = -tau_y H^* tau_y. CII: H = -tau_z sigma_y H^* tau_z sigma_y. D, BDI: H = -H^*. DIII: H = -tau_x H^* tau_x.
This implementation should be sufficiently efficient for large matrices, since it avoids any matrix multiplication.