hopping_phases
full name: tenpy.models.hofstadter.hopping_phases
parent module:
tenpy.models.hofstadtertype: function
- tenpy.models.hofstadter.hopping_phases(p: int, q: int, Lx: int, Ly: int, pbc_x: bool, pbc_y: bool, gauge)[source]
Calculate the complex hopping phases for Hofstadter models.
To achieve a uniform magnetic flux density per plaquette of
phi = p / q, we use complex hopping phases \(e^{2 \pi i a_x(x, y)}\) for hopping to the left, from(x + 1, y)to(x, y)and \(e^{2 \pi i a_y(x, y)}\) for hopping down from(x, y + 1)to(x, y). For hopping in the opposite directions on a given bond, we get the conjugate prefactor, i.e. the negative phase.The phase picked up when hopping around a plaquette clockwise (i.e. in mathematically negative orientation, matching the negative charge of the electron), must add up to the flux density. Let us add up the phases for a hopping loop, starting at the bottom left of a plaquette, at
(x, y)and going up, right, down, left. We then must have\[- a_y(x, y) - a_x(x, y + 1) + a_y(x + 1, y) + a_x(x, y) = phi\]There are many gauge choices that achieve this. We support the following choices:
=========== =============== ============== ==================== gauge a_x(x, y) a_y(x, y) magnetic unit cell =========== =============== ============== ==================== landau_x 0 phi * x (q, 1) ----------- --------------- -------------- -------------------- landau_y -phi * y 0 (1, q) ----------- --------------- -------------- -------------------- symmetric -.5 * phi * y .5 * phi * x (2 * q, 2 * q) =========== =============== ============== ====================
Warning
Note how the size of the “magnetic unit cell” after which the phase factors repeat (s.t. the \(a_i\) repeat modulo \(2\pi\)) depends on the gauge choice. In any direction with periodic boundaries, we need this unit cell of hopping phases to commensurately tile the lattice unit cell. This also guarantees that the plaquettes that cross the periodic boundary have the correct flux. For directions with open boundaries, this technical aspect of commensuration is not relevant, and we can write down the model for any system size.
- Parameters:
p (int) – Specifies the flux per plaquette as a fraction
phi = p / qq (int) – Specifies the flux per plaquette as a fraction
phi = p / qlx (int) – System size (for finite systems) or unit cell size (for infinite systems)
ly (int) – System size (for finite systems) or unit cell size (for infinite systems)
pbc_x (int) – If the boundary conditions in the particular direction are periodic, else open.
pbc_y (int) – If the boundary conditions in the particular direction are periodic, else open.
gauge ('landau_x' | 'landau_y' | 'symmetric' | None) – Choices for the gauge, see table above. If
None, we try them in order and use the first that is commensurate with all periodic boundaries.
- Returns:
phases_x, phases_y – Complexes phases \(\mathtt{phases_j[x, y]} = e^{2 \pi i a_j(x, y)}`\). Shape matches the bonds of the orientation in the given system, i.e.
(lx, ly)or reduced by one at open boundaries.- Return type:
2D array