Hubbard operators

TensorKitTensors.HubbardOperators.S_minMethod
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).

source
TensorKitTensors.HubbardOperators.S_min_S_plusMethod
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 |↓,↑⟩ <-- |↑,↓⟩.

source
TensorKitTensors.HubbardOperators.S_plusMethod
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).

source
TensorKitTensors.HubbardOperators.S_plus_S_minMethod
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 |↑,↓⟩ <-- |↓,↑⟩.

source
TensorKitTensors.HubbardOperators.S_xMethod
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).

source
TensorKitTensors.HubbardOperators.S_yMethod
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).

source
TensorKitTensors.HubbardOperators.S_zMethod
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.

source
TensorKitTensors.HubbardOperators.basis_transformMethod
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 U1Irrep particle symmetry, the particle number is used as charge, distinguishing $|0⟩$ (charge 0) from $|↑↓⟩$ (charge 2).
  • For SU2Irrep particle symmetry, $(|↑↓⟩, |0⟩)$ forms the $η$-pairing doublet, ordered by descending $η^z = (n - 1)/2$.
  • For U1Irrep spin symmetry, the $S^z$ eigenvalue $±1/2$ is used as charge, distinguishing $|↑⟩$ from $|↓⟩$.
  • For SU2Irrep spin symmetry, $(|↑⟩, |↓⟩)$ forms the spin doublet (descending $m$).
Staggered gauge for SU2Irrep particle symmetry

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.

source
TensorKitTensors.HubbardOperators.d_min_d_minMethod
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⟩ ↤ |↑↓,↓⟩,    +|↑,↑⟩ ↤ |↑↓,↑↓⟩
source
TensorKitTensors.HubbardOperators.d_min_d_plusMethod
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.

source
TensorKitTensors.HubbardOperators.d_min_u_minMethod
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⟩ ↤ |↑↓,↑⟩,    -|↑,↓⟩ ↤ |↑↓,↑↓⟩
source
TensorKitTensors.HubbardOperators.d_numMethod
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.

source
TensorKitTensors.HubbardOperators.d_plus_d_minMethod
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.

source
TensorKitTensors.HubbardOperators.d_plus_d_plusMethod
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.

source
TensorKitTensors.HubbardOperators.d_plus_u_plusMethod
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.

source
TensorKitTensors.HubbardOperators.e_hoppingMethod
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.

source
TensorKitTensors.HubbardOperators.e_min_e_plusMethod
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.

source
TensorKitTensors.HubbardOperators.e_numMethod
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.

source
TensorKitTensors.HubbardOperators.e_plus_e_minMethod
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.

source
TensorKitTensors.HubbardOperators.h_numMethod
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.

source
TensorKitTensors.HubbardOperators.half_ud_numMethod
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.

source
TensorKitTensors.HubbardOperators.hubbard_spaceFunction
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.

source
TensorKitTensors.HubbardOperators.singlet_minMethod
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}$.

source
TensorKitTensors.HubbardOperators.singlet_plusMethod
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.

source
TensorKitTensors.HubbardOperators.singlet_plus_singlet_min_3siteMethod
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.

source
TensorKitTensors.HubbardOperators.singlet_plus_singlet_min_4siteMethod
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).

source
TensorKitTensors.HubbardOperators.u_min_d_minMethod
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⟩ ↤ |↑↓,↓⟩,    -|↓,↑⟩ ↤ |↑↓,↑↓⟩
source
TensorKitTensors.HubbardOperators.u_min_u_minMethod
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⟩ ↤ |↑↓,↑⟩,    +|↓,↓⟩ ↤ |↑↓,↑↓⟩
source
TensorKitTensors.HubbardOperators.u_min_u_plusMethod
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.

source
TensorKitTensors.HubbardOperators.u_numMethod
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.

source
TensorKitTensors.HubbardOperators.u_plus_d_plusMethod
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.

source
TensorKitTensors.HubbardOperators.u_plus_u_minMethod
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.

source
TensorKitTensors.HubbardOperators.u_plus_u_plusMethod
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.

source
TensorKitTensors.HubbardOperators.ud_numMethod
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.

source