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.matrix924×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.903954948059417Schwinger.EDHamiltonian — FunctionEDHamiltonian(lattice) Computes the Hamiltonian for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
Schwinger.EDGaugeKinetic — FunctionEDGaugeKinetic(lattice) Computes the gauge kinetic operator ∑(Lₙ+θ/2π)² for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
Schwinger.EDHopping — FunctionEDHopping(lattice) Computes the hopping term -i ∑(χ†ₙ χₙ₊₁ - χ†ₙ₊₁ χₙ) for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
Schwinger.EDMass — FunctionEDMass(lattice) Computes the mass operator ∑ (-1)ⁿ χ†ₙχₙ for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
Schwinger.EDHoppingMass — FunctionEDHoppingMass(lattice) Computes the hopping-type mass term i/2 ∑(-1)^n (χ†ₙ₊₁ χₙ + χ†ₙ₋₁ χₙ) for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
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.5646651202716388Schwinger.MPOHamiltonian — FunctionMPOHamiltonian(lattice)
Computes the MPO Hamiltonian for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
Schwinger.MPOGaugeKinetic — FunctionMPOGaugeKinetic(lattice)
Computes the MPO gauge kinetic operator for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
Schwinger.MPOHopping — FunctionMPOHopping(lattice)
Computes the MPO hopping operator for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
Schwinger.MPOMass — FunctionMPOMass(lattice)
Computes the MPO mass operator for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.
Schwinger.MPOHoppingMass — FunctionMPOHoppingMass(lattice)
Computes the MPO hopping-mass operator for the Schwinger model.
Arguments
lattice::SchwingerLattice: Schwinger model lattice.