Hubbard operators
TensorKitTensors.HubbardOperators.S_exchange — Method
S_exchange([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the spin exchange operator S⋅S.
TensorKitTensors.HubbardOperators.S_min — Method
S_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
S⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the spin-minus operator S⁻ = e†_↓ e_↑ (only compatible with Trivial spin symmetry).
TensorKitTensors.HubbardOperators.S_min_S_plus — Method
S_min_S_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
S⁻S⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator S⁻S⁺. The only nonzero matrix element corresponds to |↓,↑⟩ <-- |↑,↓⟩.
TensorKitTensors.HubbardOperators.S_plus — Method
S_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
S⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the spin-plus operator S⁺ = e†_↑ e_↓ (only compatible with Trivial spin symmetry).
TensorKitTensors.HubbardOperators.S_plus_S_min — Method
S_plus_S_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
S⁺S⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator S⁺S⁻. The only nonzero matrix element corresponds to |↑,↓⟩ <-- |↓,↑⟩.
TensorKitTensors.HubbardOperators.S_x — Method
S_x([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Sˣ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body spin-1/2 x-operator on the electrons (only compatible with Trivial spin symmetry).
TensorKitTensors.HubbardOperators.S_y — Method
S_y([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Sʸ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body spin-1/2 y-operator on the electrons (only compatible with Trivial spin symmetry).
TensorKitTensors.HubbardOperators.S_z — Method
S_z([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Sᶻ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body spin-1/2 z-operator on the electrons.
TensorKitTensors.HubbardOperators.basis_transform — Method
basis_transform(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})Return the unitary basis transformation that maps the basis $\{|0⟩, |↑↓⟩, |↑⟩, |↓⟩\}$ of hubbard_space(Trivial, Trivial) (fermion-parity even states first) onto the basis of hubbard_space(particle_symmetry, spin_symmetry), as a TensorMap between the desymmetrized versions of these spaces (see desymmetrize), as required by symmetrize.
For all symmetry combinations the transformation is a permutation, determined by the sector order of the target space, where the states are identified as follows:
- For
U1Irrepparticle symmetry, the particle number is used as charge, distinguishing $|0⟩$ (charge 0) from $|↑↓⟩$ (charge 2). - For
SU2Irrepparticle symmetry, $(|↑↓⟩, |0⟩)$ forms the $η$-pairing doublet, ordered by descending $η^z = (n - 1)/2$. - For
U1Irrepspin symmetry, the $S^z$ eigenvalue $±1/2$ is used as charge, distinguishing $|↑⟩$ from $|↓⟩$. - For
SU2Irrepspin symmetry, $(|↑⟩, |↓⟩)$ forms the spin doublet (descending $m$).
The $η$-pairing SU(2) symmetry only commutes with the Hubbard model after a staggered gauge transformation $c_{j,σ} → i^j c_{j,σ}$ on a bipartite lattice. Accordingly, for SU2Irrep particle symmetry the operators of this module act on site $k$ with the additional gauge factor $G^{k-1}$, where $G = i^n = \mathrm{diag}(1, -1, i, i)$ in the basis above. Operators that commute with the staggered gauge are unaffected by it; the remaining ones (e.g. e_hopping) are genuinely complex, require a complex scalar type, and are the gauge-transformed versions of their Trivial counterparts: they generate the same physics on bipartite lattices but are not elementwise equal to them.
The $η$-pairing SU(2) and the gauge transformation making it a symmetry of the Hubbard model are due to C. N. Yang and S. C. Zhang, SO₄ symmetry in a Hubbard model, Mod. Phys. Lett. B 4, 759 (1990), doi:10.1142/S0217984990000933; see also C. N. Yang, η pairing and off-diagonal long-range order in a Hubbard model, Phys. Rev. Lett. 63, 2144 (1989), doi:10.1103/PhysRevLett.63.2144.
The transformations have exact integer entries and are therefore returned with integer scalar type, such that they promote to any scalar type without loss of precision.
TensorKitTensors.HubbardOperators.d_min_d_min — Method
d_min_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁻d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↓} e_{2,↓}$ that annihilates a spin-down particle at both sites. The nonzero matrix elements are
-|0,0⟩ ↤ |↓,↓⟩, +|0,↑⟩ ↤ |↓,↑↓⟩
-|↑,0⟩ ↤ |↑↓,↓⟩, +|↑,↑⟩ ↤ |↑↓,↑↓⟩TensorKitTensors.HubbardOperators.d_min_d_plus — Method
d_min_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁻d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↓}, e†_{2,↓}$ that annihilates a spin-down particle at the first site and creates a spin-down particle at the second.
TensorKitTensors.HubbardOperators.d_min_u_min — Method
d_min_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁻u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↓} e_{2,↑}$ that annihilates a spin-down particle at the first site and a spin-up particle at the second site. The nonzero matrix elements are
-|0,0⟩ ↤ |↓,↑⟩, -|0,↓⟩ ↤ |↓,↑↓⟩
-|↑,0⟩ ↤ |↑↓,↑⟩, -|↑,↓⟩ ↤ |↑↓,↑↓⟩TensorKitTensors.HubbardOperators.d_num — Method
d_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
nꜜ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator that counts the number of spin-down particles.
TensorKitTensors.HubbardOperators.d_plus_d_min — Method
d_plus_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁺d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e†_{1,↓}, e_{2,↓}$ that creates a spin-down particle at the first site and annihilates a spin-down particle at the second.
TensorKitTensors.HubbardOperators.d_plus_d_plus — Method
d_plus_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁺d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e†_{1,↓} e†_{2,↓}$ that creates a spin-down particle at both sites.
TensorKitTensors.HubbardOperators.d_plus_u_plus — Method
d_plus_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁺u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e†_{1,↓} e†_{2,↑}$ that creates a spin-down particle at the first site and a spin-up particle at the second site.
TensorKitTensors.HubbardOperators.e_hopping — Method
e_hopping([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
e_hop([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator that describes a particle that hops between the first and the second site.
For SU2Irrep particle symmetry, the hopping operator is expressed in the staggered gauge $c_{j,σ} → i^j c_{j,σ}$ and requires a complex scalar type; see basis_transform for details.
TensorKitTensors.HubbardOperators.e_min_e_plus — Method
e_min_e_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
e⁻e⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator that annihilates a particle at the first site and creates a particle at the second. This is the sum of u_min_u_plus and d_min_d_plus.
TensorKitTensors.HubbardOperators.e_num — Method
e_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
n([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator that counts the number of particles.
TensorKitTensors.HubbardOperators.e_plus_e_min — Method
e_plus_e_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
e⁺e⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator that creates a particle at the first site and annihilates a particle at the second. This is the sum of u_plus_u_min and d_plus_d_min.
TensorKitTensors.HubbardOperators.h_num — Method
h_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
nʰ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator that counts the number of holes, i.e. the number of non-occupied sites.
TensorKitTensors.HubbardOperators.half_ud_num — Method
half_ud_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the the one-body operator that is equivalent to (nꜛ - 1/2)(nꜜ - 1/2), which respects the particle-hole symmetry.
TensorKitTensors.HubbardOperators.hubbard_space — Function
hubbard_space(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})Return the local hilbert space for a Hubbard-type model with the given particle and spin symmetries. The four basis states are
|0⟩ (vacuum), |↑⟩ = (c↑)†|0⟩, |↓⟩ = (c↓)†|0⟩, |↑↓⟩ = (c↑)†(c↓)†|0⟩.The possible symmetries are Trivial, U1Irrep, and SU2Irrep, for both particle number and spin.
TensorKitTensors.HubbardOperators.singlet_min — Method
singlet_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
singlet⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the adjoint of singlet_plus operator, which is $(-e_{1,↑} e_{2,↓} + e_{1,↓} e_{2,↑}) / \sqrt{2}$.
TensorKitTensors.HubbardOperators.singlet_plus — Method
singlet_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
singlet⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body singlet operator $(e^†_{1,↑} e^†_{2,↓} - e^†_{1,↓} e^†_{2,↑}) / \sqrt{2}$, which creates the singlet state when acting on vaccum.
TensorKitTensors.HubbardOperators.singlet_plus_singlet_min_3site — Method
singlet_plus_singlet_min_3site([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Δ⁺ij_Δjk([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Returns the 3-site term $O_{ijk} = Δ^†_{ij} Δ_{jk}$, where $Δ^†_{ij} = (e^†_{1,↑} e^†_{2,↓} - e^†_{1,↓} e^†_{2,↑}) / \sqrt{2}$. It describes the hopping of a singlet pair from bond (j,k) to a nearest neighbor bond (i,j) sharing site j.
TensorKitTensors.HubbardOperators.singlet_plus_singlet_min_4site — Method
singlet_plus_singlet_min_4site([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Δ⁺ij_Δkl([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Returns the 4-site term $O_{ijkl} = Δ^†_{ij} Δ_{kl}$, where $Δ^†_{ij} = (e^†_{1,↑} e^†_{2,↓} - e^†_{1,↓} e^†_{2,↑}) / \sqrt{2}$. It measures the singlet pair correlation between two bonds (i,j) and (k,l).
TensorKitTensors.HubbardOperators.u_min_d_min — Method
u_min_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁻d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↑} e_{2,↓}$ that annihilates a spin-up particle at the first site and a spin-down particle at the second site. The nonzero matrix elements are
-|0,0⟩ ↤ |↑,↓⟩, +|0,↑⟩ ↤ |↑,↑↓⟩,
+|↓,0⟩ ↤ |↑↓,↓⟩, -|↓,↑⟩ ↤ |↑↓,↑↓⟩TensorKitTensors.HubbardOperators.u_min_u_min — Method
u_min_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁻u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↑} e_{2,↑}$ that annihilates a spin-up particle at both sites. The nonzero matrix elements are
-|0,0⟩ ↤ |↑,↑⟩, -|0,↓⟩ ↤ |↑,↑↓⟩
+|↓,0⟩ ↤ |↑↓,↑⟩, +|↓,↓⟩ ↤ |↑↓,↑↓⟩TensorKitTensors.HubbardOperators.u_min_u_plus — Method
u_min_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁻u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↑}, e†_{2,↑}$ that annihilates a spin-up particle at the first site and creates a spin-up particle at the second.
TensorKitTensors.HubbardOperators.u_num — Method
u_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
nꜛ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator that counts the number of spin-up particles.
TensorKitTensors.HubbardOperators.u_plus_d_plus — Method
u_plus_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁺d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e†_{1,↑} e†_{2,↓}$ that creates a spin-up particle at the first site and a spin-down particle at the second site.
TensorKitTensors.HubbardOperators.u_plus_u_min — Method
u_plus_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁺u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e†_{1,↑}, e_{2,↑}$ that creates a spin-up particle at the first site and annihilates a spin-up particle at the second.
TensorKitTensors.HubbardOperators.u_plus_u_plus — Method
u_plus_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁺u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e†_{1,↑} e†_{2,↑}$ that creates a spin-up particle at both sites.
TensorKitTensors.HubbardOperators.ud_num — Method
ud_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
nꜛꜜ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator that counts the number of doubly occupied sites.