4.2. kwant.rmt – Random matrix theory Hamiltonians

kwant.rmt.gaussian(n, sym='A', v=1.0, rng=None)[source]

Make a n * n random Gaussian Hamiltonian.

Parameters:
n : int

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.

sym : one of ‘A’, ‘AI’, ‘AII’, ‘AIII’, ‘BDI’, ‘CII’, ‘D’, ‘DIII’, ‘C’, ‘CI’

Altland-Zirnbauer symmetry class of the Hamiltonian.

v : float

Variance every degree of freedom of the Hamiltonian. The probaility distribution of the Hamiltonian is P(H) = exp(-Tr(H^2) / 2 v^2).

rng: int or rng (optional)

Seed or random number generator. If no ‘rng’ is provided the random number generator from numpy will be used.

Returns:
h : numpy.ndarray

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.

Chiral (sublattice) symmetry C always reads:
H = -tau_z H tau_z.
Time reversal symmetry T reads:
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.
Particle-hole symmetry reads:
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.

kwant.rmt.circular(n, sym='A', charge=None, rng=None)[source]

Make a n * n matrix belonging to a symmetric circular ensemble.

Parameters:
n : int

Size of the matrix. It should be even for the classes C, CI, CII, AII, DIII (either T^2 = -1 or P^2 = -1).

sym : one of ‘A’, ‘AI’, ‘AII’, ‘AIII’, ‘BDI’, ‘CII’, ‘D’, ‘DIII’, ‘C’, ‘CI’

Altland-Zirnbauer symmetry class of the matrix.

charge : int or None

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.

rng: int or rng (optional)

Seed or random number generator. If no ‘rng’ is passed, the random number generator provided by numpy will be used.

Returns:
s : numpy.ndarray

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.

Chiral (sublattice) symmetry C always reads:
s = s^+.
Time reversal symmetry T reads:
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.
Particle-hole symmetry reads:
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.

Previous topic

4.1. kwant.digest – Random-access random numbers

Next topic

4.3. kwant.kpm – Kernel Polynomial Method

This Page