SUNSpinWaveTheory

Documentation for SUNSpinWaveTheory.

Introduction

SU(N) spin wave theory for free quantum lattice systems based on the QuantumLattices pack and the TightBindingApproximation pack.

Installation

Getting Started

Examples of SU(N) spin-wave theory for quantum lattice system

Manuals

QuantumLattices.DegreesOfFreedom.HilbertMethod
Hilbert(hilbert::Hilbert{<:Fock{:b}}, magneticstructure::MagneticStructure)

Get the corresponding Hilbert space of the original one after the Holstein-Primakoff transformation.

source
QuantumLattices.DegreesOfFreedom.MetricMethod
Metric(::SUNMagnonic, hilbert::Hilbert{<:Fock{:b}}) -> OperatorUnitToTuple

Get the index-to-tuple metric for a quantum spin system after the Holstein-Primakoff transformation.

source
SUNSpinWaveTheory.MagneticStructureType
MagneticStructure{L<:AbstractLattice, P<:Int, D<:Number, T<:Complex}

The magnetic structure of an ordered quantum lattice system. The cell is a magnetic cell.

source
SUNSpinWaveTheory.MagneticStructureMethod
MagneticStructure(cell::AbstractLattice, moments::Dict{<:Int, <:AbstractVector})
(ms::MagneticStructure)(orders::Dict{<:Int, <:AbstractMatrix}) -> Dict{<:Int, <:Number}

1).Construct the magnetic structure on a given lattice with the given moments. The moment is given by the angles (θ₁,θ₂,...,ψ₁,ψ₂,...). 2).Get order parameters for every site. e.g. |gs⟩ = ms.rotations[i][1,:] where gs = classical ground state; ⟨σᵢˣ⟩ = ⟨gs|σᵢˣ|gs⟩.

source
SUNSpinWaveTheory.SUNLSWTType
SUNLSWT{K<:TBAKind{:BdG}, L<:AbstractLattice, Hₛ<:OperatorGenerator, HP<:HPTransformation, Ω<:Image, H<:Image} <: AbstractTBA{K, H, AbstractMatrix}

SU(N) Linear spin wave theory for magnetically ordered quantum lattice systems.

source
SUNSpinWaveTheory.SUNLSWTMethod
SUNLSWT(
    lattice::AbstractLattice, 
    hilbert::Hilbert, 
    terms::Tuple{Vararg{Term}}, 
    magneticstructure::MagneticStructure; 
    neighbors::Union{Nothing, Int, Neighbors}=nothing, 
    boundary::Boundary=plain
)

Construct a SUNLSWT. lattice is the original lattice.

source
SUNSpinWaveTheory.SpectraType
Spectra{K<:SpectraKind, P<:ReciprocalSpace, E<:AbstractVector, S<:Operators, O} <: Action

Spectra of 'magnetically' ordered quantum lattice systems by SU(N) linear spin wave theory.

source
Base.nameofMethod
nameof(alg::Algorithm, assign::Assignment, ecut::Float64) -> String

Get the name of the combination of an algorithm, an assignment and ecut.

source
QuantumLattices.add!Method
add!(dest::Matrix,
    mr::TBAMatrixRepresentation{SUNMagnonic},
    m::Operator{<:Number, <:ID{CompositeIndex{<:Index{Int, <:FID{:b}}}, 2}};
    atol=atol/5, 
    kwargs...
) -> typeof(dest)

Get the matrix representation of an operator and add it to destination.

source
RecipesBase.apply_recipeFunction
@recipe  plot(pack::Tuple{Algorithm{<:SUNLSWT}, Assignment{<:Spectra}}, Ecut::Float64, dE::Float64=1e-3)

Define the recipe for the visualization of an assignment with Ecut and data of an algorithm.

source
RecipesBase.apply_recipeMethod
@recipe plot(pack::Tuple{Algorithm{<:SUNLSWT}, Assignment{<:Spectra}}, parameters::AbstractVector{Float64})

Define the recipe for the visualization of an assignment with parameters (title) of an algorithm.

source
SUNSpinWaveTheory.SUNTermFunction
SUNTerm(
    id::Symbol, 
    J₁₂₃₄::Array{<:Number, 4}, 
    bondkind::Int=1;
    value = 1,
    amplitude::Union{Function, Nothing}=nothing, 
    modulate::Union{Function, Bool}=false
) -> Coulomb

Hamiltionian: $∑(J_{i1,i2;j3,j4}b†_{i1}b_{i2}b†_{j3}b_{j4})$

source
SUNSpinWaveTheory.SUNTermFunction
SUNTerm(
    id::Symbol, 
    Jᵤᵥ::Array{<:Number, 2}, 
    bondkind::Int=0;
    value = 1, 
    amplitude::Union{Function, Nothing}=nothing,
    modulate::Union{Function, Bool}=false
    ) -> Onsite
source
SUNSpinWaveTheory.SUNTermFunction
SUNTerm(
    id::Symbol, 
    J₁₂₃₄::Array{<:Number, 2}, 
    dimᵢ::Int, 
    dimⱼ::Int, 
    bondkind::Int=1;
    value=1, 
    amplitude::Union{Function, Nothing}=nothing, 
    modulate::Union{Function, Bool}=false
) -> Term

Return the Term type. J₁₂₃₄ is the coefficience of Hamiltionian including the exchange term and onsite term, i.e. $∑(J_{i1,j2;i3,j4}b†_{i1}b†_{j2}b_{i3}b_{j4}) + ∑(Bᵢᵤᵥb†ᵢᵤbᵢᵥ )$ dimᵢ and dimⱼ are the dimensions of local Hilbert space on sites i and j, respectively.

source
SUNSpinWaveTheory.fluctuationMethod
fluctuation(sunlswt::SUNLSWT, bz::BrillouinZone, site::Int, nbonson::Int; imagtol=1e-8) -> Float64
fluctuation(sunlswt::SUNLSWT, bz::BrillouinZone; imagtol=1e-8) -> Dict{<:Int, Float64}

To calculate $⟨b_0^†b_0⟩$ with respect to the quantum ground state |0⟩ at zero temperature.

source
SUNSpinWaveTheory.kdosOperatorMethod
kdosOperator(u::Matrix{<:Number}, site::Int, lattice::Union{<:AbstractLattice, Int}) -> Operators

Return Operators for kDOS case. u = ⟨α|site,orbital⟩, where |site,orbital⟩ => b_{site,orbital}, |α⟩ is the target state.

source
SUNSpinWaveTheory.localorderMethod
localorder(sunlswt::SUNLSWT, orders::Dict{Int, <:Matrix{T}}) where T<:Number -> Dict{Int, <:Number}

Return order parameters of each site, <classical gs|o|classical gs>. orders[pid] is the matrix of physical observable.

source
SUNSpinWaveTheory.matrixcoefMethod
matrixcoef(sunlswt::SUNLSWT) -> Hermitian

Return the coefficience of exchange interactions, i.e. ∑(Jᵢ₁ⱼ₂ⱼ₃ᵢ₄b†ᵢ₁b†ⱼ₂bⱼ₃bᵢ₄) + ∑(Bᵢᵤᵥb†ᵢᵤbᵢᵥ )

source
SUNSpinWaveTheory.multipoleOperatorMethod
multipoleOperator(j₁::Union{Int,Rational{Int}}, j₂::Union{Int,Rational{Int}}, j::Union{Int,Rational{Int}}, m::Union{Int,Rational{Int}}) -> Array{Float64}

Construct the matrix of multipole operator, i.e. $M_{jm}^{j₁j₂} = ∑_{m₁m₂} (-1)^{j₂-m₂}C_{m₁,-m₂,m}^{j₁j₂j} b†_{j₁m₁}b_{j₂m₂}$ with $M_{jm}^{†j₁j₂}=M_{j-m}^{j₂j₁}(-1)^{j₂-j₁+m}$. e.g. the basis of dipole matrix is [|1⟩, |0⟩, |-1⟩].

source
SUNSpinWaveTheory.optimorderMethod
optimorder(sunlswt::SUNLSWT; numrand::Int = 0, method = LBFGS(), g_tol = 1e-12, optionskwargs... ) -> Tuple{SUNLSWT,Union{Optim.MultivariateOptimizationResults,Nothing}}

Optimize the ground state of Hamiltionian, i.e. ⟨T|H|T⟩, see DOI: 10.1103/PhysRevB.97.205106 numrand is the number of the optimization. optionskwargs is the keywords of Optim.Options(gtol=gtol,optionskwargs...)

References

  • Zhao-Yang Dong, Wei Wang, and Jian-Xin Li, SU(N) spin-wave theory: Application to spin-orbital Mott insulators, Physical Review B 97, 205106 (2018)
source
SUNSpinWaveTheory.optimorder2Method
optimorder2(sunlswt::SUNLSWT, ub::Vector{Float64}, x₀::Vector{Float64}; numrand::Int = 0, rule::Function=x->x, method = LBFGS(), g_tol = 1e-12, optionskwargs... ) -> Tuple{SUNLSWT, Union{Optim.MultivariateOptimizationResults, Nothing}}

Optimize the ground state of Hamiltionian. If the all degrees of freedom is considered, the Function optimorder is recommended. Function rule gives the transformation of the selected degrees of freedom to all degrees of freedom.

source
SUNSpinWaveTheory.optimorder2Method
optimorder2(sunlswt::SUNLSWT; numrand::Int = 0,rule::Function=x->x, method = LBFGS(), g_tol = 1e-12, optionskwargs... ) -> Tuple{SUNLSWT, Union{Optim.MultivariateOptimizationResults, Nothing}}

Optimize the ground state of Hamiltionian, i.e. ⟨T|H|T⟩. If the all degrees of freedom is considered, the Function optimorder is recommended.

source
SUNSpinWaveTheory.quantumGSenergyMethod
quantumGSenergy(sunlswt::SUNLSWT, bz::BrillouinZone; imagtol=1e-8) -> Float64
quantumGSenergy(sunlswt::SUNLSWT, nk::Int; imagtol=1e-8) -> Float64

Calculate the quantum-ground-state energy per magnetic unit cell. $E=E_{calssical}/N_{mc}-1/(2N_{mc})*∑_{kα}ω_{kα} - 1/(4N_{mc})∑_kTr(H(k))$, where $N_{mc}$ is the number of magnetic unit cell

source
SUNSpinWaveTheory.rotationMethod
rotation(sitapsi::T, generators::Vector{Matrix{Complex{Int}}}}) where T<:AbstractVector{<:Number} -> Matrix{ComplexF64}

Get the rotation matrix which rotates the |0⟩ state to the target state |T⟩=U(θ₁,θ₂,...,ψ₁,ψ₂,...)b⁰† |0⟩; T†ᵥ = ∑ᵤUᵥᵤ*bᵘ†. The detail is given in doi:10.1103/PhysRevB.97.205106.

source
SUNSpinWaveTheory.spectraEcutMethod
spectraEcut(ass::Assignment{<:Spectra}, Ecut::Float64, dE::Float64) -> Tuple{Vector{Float64}, Vector{Float64}, Matrix{Float64}}

Construct the spectra with fixed energy. The energy of abs(energy-Ecut) <= dE is selected. nx and ny are the number of x and y segments of ReciprocalZone, respectively.

source
SUNSpinWaveTheory.suncouplingsMethod
suncouplings(J₁₂₃₄::Array{<:Number,4}) -> OperatorSum

Obtain the Couplings for exchange term in Hamiltionian. Like $∑(J_{i1,i2;j3,j4}b†_{i1}b_{i2}b†_{j3}b_{j4})$

source
SUNSpinWaveTheory.suncouplingsMethod
suncouplings(Bᵤᵥ::Array{<:Number, 2})   -> MatrixCoupling

Obtain the Couplings for onsite term in Hamiltionian. Like ∑(Bᵢᵤᵥb†ᵢᵤbᵢᵥ )

source