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.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.5646651202716388
Schwinger.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.