Hamiltonian

The Hamiltonian for the lattice Schwinger model is

\[\begin{split} H = &\frac{(qg)^2 a}{2}\sum_{n=1}^N \left(L_n + \frac{\theta}{2\pi}\right)^2 - \frac{i}{2a}\sum_{n=1}^N\sum_{\alpha=1}^F \left(\chi^\dagger_{n,\alpha} \chi_{n+1,\alpha} - \chi^\dagger_{n+1,\alpha} \chi_{n,\alpha}\right) \\ &+\underbrace{\left(m - \frac{(qg)^2 F a}{8}\right)}_{m_\text{lat}}\sum_{n=1}^N \sum_{\alpha=1}^F (-1)^n \chi^\dagger_{n,\alpha} \chi_{n,\alpha} + m' \sum_{n=1}^N\sum_{\alpha=1}^F (-1)^{n+1}\left(\chi^\dagger_{n-1,\alpha}\chi_{n,\alpha} + \chi^\dagger_{n+1,\alpha}\chi_{n,\alpha}\right) \end{split}\]

This is supplemented by the Gauss law

\[L_n = L_{n-1} + Q_n, \qquad Q_n \equiv q\left(\sum_{\alpha=1}^F \chi^\dagger_{n,\alpha} \chi_{n,\alpha} - \begin{cases} F & n\text{ odd} \\ 0 & n\text{ even} \end{cases}\right).\]

In Schwinger.jl this be constructed using two strategies, exact diagonalization (ED) or matrix product operators (MPO).

Exact diagonalization

When using exact diagonalization, Schwinger.jl constructs a basis of states that diagonalize the operators $\chi^\dagger_{n,\alpha} \chi_{n,\alpha}$ and $L_0$. It then builds a sparse matrix for the Hamiltonian acting on this basis.

using Schwinger
lat = SchwingerLattice{12,1}();
ham = EDHamiltonian(lat);

ham.matrix
924×924 SparseArrays.SparseMatrixCSC{ComplexF64, Int64} with 6468 stored entries:
⎡⢻⣶⣄⢠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎤
⎢⠀⣙⠻⣦⡙⢦⡀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠈⠳⣌⠿⣧⡦⡀⠀⠙⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠈⠈⠫⣻⣾⣄⠀⠀⠙⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠠⣄⠀⠀⠙⠻⣦⣄⠀⠀⠙⠦⠀⠀⠀⠀⠀⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠈⠳⣄⠀⠀⠙⡻⣮⡢⡀⢀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠈⠪⢿⣷⡀⠱⢄⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠈⠃⠀⠐⢄⡈⠻⣦⣄⠓⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢤⠙⡻⣮⡢⡀⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠪⢿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣷⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠀⠀⠀⠀⠀⠈⠪⡻⣮⣄⠓⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠀⠀⠀⠀⠀⢤⠙⠻⣦⡈⠑⠄⠀⢠⡀⠀⠀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠀⠀⠀⠀⠑⢆⠈⢿⣷⡢⡀⠀⠙⢦⡀⠀⠀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠀⠀⠀⠀⠁⠈⠪⡻⣮⣄⠀⠀⠙⢦⡀⠀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠀⠀⠀⠀⠀⠲⣄⠀⠀⠙⠻⣦⣄⠀⠀⠙⠂⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠙⡿⣯⣢⡀⡀⠀⠀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠈⠺⢻⣶⡙⢦⡀⠀⎥
⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠈⠳⣌⠻⣦⣍⠀⎥
⎣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠃⠙⠿⣧⎦

When $q > 1$, the universe (i.e., the allowed values of $L_n$ modulo $q$) can be specified; the default value is 0. When the lattice is periodic, the maximum absolute value of $L_0$ can be set using L_max; the default value is 3.

Using Arpack.jl, Schwinger.jl can find the lowest eigenstates of a Hamiltonian.

using Schwinger
lat = SchwingerLattice{10,1}(periodic = true);
ham = EDHamiltonian(lat);

map(energy, loweststates(ham, 5))
5-element Vector{Float64}:
 -1.9903699416046092
 -1.4257050000651357
 -1.1927317764793883
 -1.1927317764793888
 -0.903954948059417
Schwinger.EDHamiltonianFunction

EDHamiltonian(lattice) Computes the Hamiltonian for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source
Schwinger.EDGaugeKineticFunction

EDGaugeKinetic(lattice) Computes the gauge kinetic operator ∑(Lₙ+θ/2π)² for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source
Schwinger.EDHoppingFunction

EDHopping(lattice) Computes the hopping term -i ∑(χ†ₙ χₙ₊₁ - χ†ₙ₊₁ χₙ) for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source
Schwinger.EDMassFunction

EDMass(lattice) Computes the mass operator ∑ (-1)ⁿ χ†ₙχₙ for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source
Schwinger.EDHoppingMassFunction

EDHoppingMass(lattice) Computes the hopping-type mass term i/2 ∑(-1)^n (χ†ₙ₊₁ χₙ + χ†ₙ₋₁ χₙ) for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source

Matrix product operator

Especially for larger lattice sizes where exact diagonalization is infeasible, Schwinger.jl can instead construct a matrix product operator representation of the Hamiltonian. It uses ITensors.jl and ITensorMPS.jl as the backend for all calculations with this form of the Hamiltonian.

using Schwinger
lat = SchwingerLattice{10,1}(periodic = true);

[energygap(EDHamiltonian(lat)), energygap(MPOHamiltonian(lat))]
2-element Vector{Float64}:
 0.5646649415394731
 0.5646651202716388
Schwinger.MPOHamiltonianFunction

MPOHamiltonian(lattice)

Computes the MPO Hamiltonian for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source
Schwinger.MPOGaugeKineticFunction

MPOGaugeKinetic(lattice)

Computes the MPO gauge kinetic operator for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source
Schwinger.MPOHoppingFunction

MPOHopping(lattice)

Computes the MPO hopping operator for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source
Schwinger.MPOMassFunction

MPOMass(lattice)

Computes the MPO mass operator for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source
Schwinger.MPOHoppingMassFunction

MPOHoppingMass(lattice)

Computes the MPO hopping-mass operator for the Schwinger model.

Arguments

  • lattice::SchwingerLattice: Schwinger model lattice.
source