Operators
There are several different operators defined, which all follow an interface similar to the following:
operator([elt::Type{<:Number}=ComplexF64], [symmetry::Type{<:Sector}=Trivial]; kwargs...)
Here, the scalar type of the operator is defined by elt
, while the symmetry can be chosen through the symmetry
argument. Other parameters are supplied as keywords. The special keyword argument side
can be used for operators that require an additional virtual space to satisfy the symmetry constraints, in which case it determines where this auxiliary space is located, either to the left :L
(default) or to the right :R
.
Spin operators
The spin operators S_x
, S_y
and S_z
are defined such that they obey the spin commutation relations $[S^j, S^k] = i \varepsilon_{jkl} S^l$. Additionally, the ladder operators are defined as $S^{\pm} = S^x \pm i S^y$. Several combinations are defined that act on two spins.
Supported values of symmetry
for spin operators are Trivial
, Z2Irrep
and U1Irrep
. When imposing symmetries, by convention we choose S_z
as the diagonal operator for $\mathrm{U}(1)$, and S_x
as the diagonal operator for $\mathbb{Z}_2$.
MPSKitModels.S_x
— FunctionS_x([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sˣ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin operator along the x-axis.
See also σˣ
MPSKitModels.S_y
— FunctionS_y([eltype::Type{<:Complex}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sʸ([eltype::Type{<:Complex}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin operator along the y-axis.
See also σʸ
MPSKitModels.S_z
— FunctionS_z([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sᶻ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin operator along the z-axis. Possible values for symmetry
are Trivial
, Z2Irrep
, and U1Irrep
.
See also σᶻ
MPSKitModels.S_plus
— FunctionS_plus([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
S⁺([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin plus operator.
See also σ⁺
MPSKitModels.S_min
— FunctionS_min([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
S⁻([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin minus operator.
See also σ⁻
MPSKitModels.S_xx
— FunctionS_xx([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sˣˣ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin xx exchange operator.
See also σˣˣ
MPSKitModels.S_yy
— FunctionS_yy([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sʸʸ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin yy exchange operator.
See also σʸʸ
MPSKitModels.S_zz
— FunctionS_zz([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sᶻᶻ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin zz exchange operator.
See also σᶻᶻ
MPSKitModels.S_plusmin
— FunctionS_plusmin([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
S⁺⁻([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin plusmin exchange operator.
See also σ⁺⁻
MPSKitModels.S_minplus
— FunctionS_minplus([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
S⁻⁺([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin minplus exchange operator.
See also σ⁻⁺
MPSKitModels.S_exchange
— FunctionS_exchange([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
SS([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
The spin exchange operator.
See also σσ
MPSKitModels.spinmatrices
— Functionspinmatrices(spin [, eltype])
the spinmatrices according to Wikipedia.
For convenience, the Pauli matrices can also be recovered as $σⁱ = 2 Sⁱ$.
MPSKitModels.σˣ
— FunctionPauli x operator.
MPSKitModels.σʸ
— FunctionPauli y operator.
MPSKitModels.σᶻ
— FunctionPauli z operator.
MPSKitModels.σ⁺
— FunctionPauli plus operator.
MPSKitModels.σ⁻
— FunctionPauli minus operator.
MPSKitModels.σˣˣ
— FunctionPauli xx operator.
MPSKitModels.σʸʸ
— FunctionPauli yy operator.
MPSKitModels.σᶻᶻ
— FunctionPauli zz operator.
MPSKitModels.σ⁺⁻
— FunctionPauli plusmin operator.
MPSKitModels.σ⁻⁺
— FunctionPauli minplus operator.
MPSKitModels.σσ
— FunctionPauli exchange operator.
Q-state Potts operators
The Q-state Potts operators potts_X
and potts_Z
are defined to fulfill the braiding relation $ZX = \omega XZ$ with $\omega = e^{2\pi i/Q}$.
Supported values of symmetry
for the X
operator are Trivial
and ZNIrrep{Q}
, while for the Z
operator only Trivial
is supported.
MPSKitModels.potts_X
— Functionpotts_X([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; Q=3)
potts_field([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; Q=3)
The Potts X operator, also known as the shift operator, where X^q=1.
MPSKitModels.potts_Z
— Functionpotts_Z([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; Q=3)
The Potts Z operator, also known as the clock operator, where Z^q=1.
MPSKitModels.potts_ZZ
— Functionpotts_ZZ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; q=3)
The Potts operator $Z ⊗ Z'$, where $Z^q = 1$.
MPSKitModels.potts_field
— Functionpotts_X([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; Q=3)
potts_field([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; Q=3)
The Potts X operator, also known as the shift operator, where X^q=1.
MPSKitModels.weyl_heisenberg_matrices
— Functionweyl_heisenberg_matrices(dimension [, eltype])
the Weyl-Heisenberg matrices according to Wikipedia.
Bosonic operators
The bosonic creation and annihilation operators a_plus
($a^+$) and a_min
($a^-$) are defined such that the following holds:
\[a^+ \left|n\right> = \sqrt{n + 1} \left|n+1\right>\]
\[a^- \left|n\right> = \sqrt{n} \left|n-1\right>\]
From these, a number operator a_number
($N$) can be defined:
\[N = a^+ a^-\]
\[N\left|n\right> = n \left|n\right>\]
With these, the following commutators can be obtained:
\[\left[a^-, a^+\right] = 1\]
\[\left[N, a^+\right] = a^+\]
\[\left[N, a^-\right] = -a^-\]
Supported values of symmetry
for bosonic operators are Trivial
and U1Irrep
.
MPSKitModels.a_plus
— Functiona_plus([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; cutoff=5)
a⁺([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; cutoff=5)
The truncated bosonic creation operator, with a maximum of cutoff
bosons per site.
MPSKitModels.a_min
— Functiona_min([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; cutoff=5)
a⁻([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; cutoff=5)
The truncated bosonic annihilation operator, with a maximum of cutoff
bosons per site.
MPSKitModels.a_number
— Functiona_number([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; cutoff=5)
The truncated bosonic number operator, with a maximum of cutoff
bosons per site.
Fermionic operators
Spinless fermions.
MPSKitModels.c_plus
— Functionc_plus([elt::Type{<:Number}=ComplexF64]; side=:L)
c⁺([elt::Type{<:Number}=ComplexF64]; side=:L)
Fermionic creation operator.
MPSKitModels.c_min
— Functionc_min([elt::Type{<:Number}=ComplexF64]; side=:L)
c⁻([elt::Type{<:Number}=ComplexF64]; side=:L)
Fermionic annihilation operator.
MPSKitModels.c_number
— Functionc_number([elt::Type{<:Number}=ComplexF64])
Fermionic number operator.
Spinful fermions.
MPSKitModels.HubbardOperators.e_minplus
— Methode_minplus(T, 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 e_minplus_up
and e_minplus_down
.
MPSKitModels.HubbardOperators.e_minplus_down
— Methode_minplus_down(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})
Return the Hermitian conjugate of e_plusmin_down
, i.e. $(e†_{1,↓}, e_{2,↓})† = -e_{1,↓}, e†_{2,↓}$ (note the extra minus sign). It annihilates a spin-down electron at the first site and creates a spin-down electron at the second.
MPSKitModels.HubbardOperators.e_minplus_up
— Methode_minplus_up(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})
Return the Hermitian conjugate of e_plusmin_up
, i.e. $(e†_{1,↑}, e_{2,↑})† = -e_{1,↑}, e†_{2,↑}$ (note the extra minus sign). It annihilates a spin-up electron at the first site and creates a spin-up electron at the second.
MPSKitModels.HubbardOperators.e_number
— Methode_number(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})
Return the one-body operator that counts the number of particles.
MPSKitModels.HubbardOperators.e_number_down
— Methode_number_down(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})
Return the one-body operator that counts the number of spin-down electrons.
MPSKitModels.HubbardOperators.e_number_up
— Methode_number_up(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})
Return the one-body operator that counts the number of spin-up electrons.
MPSKitModels.HubbardOperators.e_number_updown
— Methode_number_updown(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})
Return the one-body operator that counts the number of doubly occupied sites.
MPSKitModels.HubbardOperators.e_plusmin
— Methode_plusmin(T, 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 e_plusmin_up
and e_plusmin_down
.
MPSKitModels.HubbardOperators.e_plusmin_down
— Methode_plusmin_down(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})
Return the two-body operator $e†_{1,↓}, e_{2,↓}$ that creates a spin-down electron at the first site and annihilates a spin-down electron at the second.
MPSKitModels.HubbardOperators.e_plusmin_up
— Methode_plusmin_up(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})
Return the two-body operator $e†_{1,↑}, e_{2,↑}$ that creates a spin-up electron at the first site and annihilates a spin-up electron at the second.
MPSKitModels.HubbardOperators.hubbard_space
— Functionhubbard_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 possible symmetries are Trivial
, U1Irrep
, and SU2Irrep
, for both particle number and spin.
TJ-model operators.
MPSKitModels.TJOperators.S_exchange
— MethodS_exchange(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the spin exchange operator S⋅S.
MPSKitModels.TJOperators.S_min
— MethodS_min(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool=false)
Return the spin-minus operator.
MPSKitModels.TJOperators.S_minplus
— MethodS_minplus(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the two-body operator S⁻S⁺. The only nonzero matrix element corresponds to |↓↑⟩ <-- |↑↓⟩
.
MPSKitModels.TJOperators.S_plus
— MethodS_plus(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool=false)
Return the spin-plus operator.
MPSKitModels.TJOperators.S_plusmin
— MethodS_plusmin(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the two-body operator S⁺S⁻. The only nonzero matrix element corresponds to |↑↓⟩ <-- |↓↑⟩
.
MPSKitModels.TJOperators.S_x
— FunctionS_x(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool=false)
Return the one-body spin-1/2 x-operator on the electrons.
MPSKitModels.TJOperators.S_y
— FunctionS_y(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool=false)
Return the one-body spin-1/2 x-operator on the electrons (only defined for Trivial
symmetry).
MPSKitModels.TJOperators.S_z
— FunctionS_z(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool=false)
Return the one-body spin-1/2 z-operator on the electrons.
MPSKitModels.TJOperators.e_minmin_downup
— Methode_minmin_downup(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
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 only nonzero matrix element corresponds to |00⟩ <-- |↓↑⟩
.
MPSKitModels.TJOperators.e_minmin_updown
— Methode_minmin_updown(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
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 only nonzero matrix element corresponds to |00⟩ <-- |↑↓⟩
.
MPSKitModels.TJOperators.e_minplus
— Methode_minplus(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
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 e_minplus_up
and e_minplus_down
.
MPSKitModels.TJOperators.e_minplus_down
— Methode_minplus_down(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the Hermitian conjugate of e_plusmin_down
, i.e. $(e†_{1,↓}, e_{2,↓})† = -e_{1,↓}, e†_{2,↓}$ (note the extra minus sign). It annihilates a spin-down electron at the first site and creates a spin-down electron at the second. The only nonzero matrix element corresponds to |0↓⟩ <-- |↓0⟩
.
MPSKitModels.TJOperators.e_minplus_up
— Methode_minplus_up(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the Hermitian conjugate of e_plusmin_up
, i.e. $(e†_{1,↑}, e_{2,↑})† = -e_{1,↑}, e†_{2,↑}$ (note the extra minus sign). It annihilates a spin-up electron at the first site and creates a spin-up electron at the second. The only nonzero matrix element corresponds to |0↑⟩ <-- |↑0⟩
.
MPSKitModels.TJOperators.e_number
— Methode_number(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool=false)
Return the one-body operator that counts the number of particles.
MPSKitModels.TJOperators.e_number_down
— Methode_number_down(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool=false)
Return the one-body operator that counts the number of spin-down electrons.
MPSKitModels.TJOperators.e_number_hole
— Methode_number_hole(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool=false)
Return the one-body operator that counts the number of holes.
MPSKitModels.TJOperators.e_number_up
— Methode_number_up(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the one-body operator that counts the number of spin-up electrons.
MPSKitModels.TJOperators.e_plusmin
— Methode_plusmin(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
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 e_plusmin_up
and e_plusmin_down
.
MPSKitModels.TJOperators.e_plusmin_down
— Methode_plusmin_down(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the two-body operator $e†_{1,↓}, e_{2,↓}$ that creates a spin-down electron at the first site and annihilates a spin-down electron at the second. The only nonzero matrix element corresponds to |↓0⟩ <-- |0↓⟩
.
MPSKitModels.TJOperators.e_plusmin_up
— Methode_plusmin_up(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the two-body operator $e†_{1,↑}, e_{2,↑}$ that creates a spin-up electron at the first site and annihilates a spin-up electron at the second. The only nonzero matrix element corresponds to |↑0⟩ <-- |0↑⟩
.
MPSKitModels.TJOperators.e_singlet
— Methode_singlet(T, particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the two-body singlet operator $(e_{1,↓} e_{2,↑} - e_{1,↓} e_{2,↑}) / sqrt(2)$.
MPSKitModels.TJOperators.tj_space
— Functiontj_space(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)
Return the local hilbert space for a t-J-type model with the given particle and spin symmetries. The possible symmetries are
- Particle number:
Trivial
,U1Irrep
; - Spin:
Trivial
,U1Irrep
,SU2Irrep
.
Setting slave_fermion = true
switches to the slave-fermion basis.