hopping_phases

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 / q

  • q (int) – Specifies the flux per plaquette as a fraction phi = p / q

  • lx (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