SecondOrderPerturbationTheory
Documentation for SecondOrderPerturbationTheory.
QuantumLattices.DegreesOfFreedom.MetricSecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasesSecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasesSecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasesSecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasisSecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasisSecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasisRangeSecondOrderPerturbationTheory.ExactDiagonalization5.EDSecondOrderPerturbationTheory.ExactDiagonalization5.EDSecondOrderPerturbationTheory.ExactDiagonalization5.EDKindSecondOrderPerturbationTheory.ExactDiagonalization5.EDMatrixSecondOrderPerturbationTheory.ExactDiagonalization5.EDMatrixSecondOrderPerturbationTheory.ExactDiagonalization5.EDMatrixRepresentationSecondOrderPerturbationTheory.ExactDiagonalization5.EDMatrixRepresentationSecondOrderPerturbationTheory.ExactDiagonalization5.SectorSecondOrderPerturbationTheory.ExactDiagonalization5.SectorFilterSecondOrderPerturbationTheory.ExactDiagonalization5.TargetSpaceSecondOrderPerturbationTheory.ExactDiagonalization5.TargetSpaceSecondOrderPerturbationTheory.SOPCore.BinaryConfigureSecondOrderPerturbationTheory.SOPCore.CoefficienceSecondOrderPerturbationTheory.SOPCore.CoefficienceSecondOrderPerturbationTheory.SOPCore.PickStateSecondOrderPerturbationTheory.SOPCore.ProjectStateSecondOrderPerturbationTheory.SOPCore.ProjectStateSecondOrderPerturbationTheory.SOPCore.ProjectStateBondSecondOrderPerturbationTheory.SOPCore.ProjectStateBondSecondOrderPerturbationTheory.SOPCore.SOPTSecondOrderPerturbationTheory.SOPCore.SOPTSecondOrderPerturbationTheory.SOPCore.SOPTMatrixSecondOrderPerturbationTheory.SOPCore.SecondOrderPerturationMetricSecondOrderPerturbationTheory.SOPCore.SecondOrderPerturbationBase.:<<Base.:<<Base.countBase.isoneBase.iszeroBase.iterateBase.oneBase.zeroLinearAlgebra.eigenQuantumLattices.:⊕QuantumLattices.:⊕QuantumLattices.:⊗QuantumLattices.:⊗QuantumLattices.:⊗QuantumLattices.QuantumOperators.matrixQuantumLattices.QuantumOperators.matrixQuantumLattices.QuantumOperators.matrixQuantumLattices.QuantumOperators.matrixQuantumLattices.dimensionQuantumLattices.dimensionQuantumLattices.expandSecondOrderPerturbationTheory.ExactDiagonalization5.productableSecondOrderPerturbationTheory.ExactDiagonalization5.sumableSecondOrderPerturbationTheory.SOPCore.:⊠SecondOrderPerturbationTheory.SOPCore.SpinOperatorGeneratorSecondOrderPerturbationTheory.SOPCore.coefficience_projectSecondOrderPerturbationTheory.SOPCore.coefficience_projectSecondOrderPerturbationTheory.SOPCore.hamiltonianeffSecondOrderPerturbationTheory.SOPCore.observables_projectSecondOrderPerturbationTheory.SOPCore.projectstate_pointsSecondOrderPerturbationTheory.SOPCore.projectstate_points
Getting Started
Examples of second order perturbation theory
<!– ## Manuals
QuantumLattices.DegreesOfFreedom.Metric — MethodMetric(::EDKind{:FED}, hilbert::Hilbert{<:Fock}) -> OperatorUnitToTuple
Metric(::EDKind{:SED}, hilbert::Hilbert{<:Spin}) -> OperatorUnitToTupleGet the index-to-tuple metric for a free fermionic/bosonic system or a free phononic system.
SecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBases — TypeBinaryBases{B<:BinaryBasis, T<:AbstractVector{B}} <: SectorA set of binary bases.
SecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBases — MethodBinaryBases(nstate::Integer, nparticle::Integer)
BinaryBases(states, nparticle::Integer)Construct a set of binary bases that preserves the particle number conservation.
SecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBases — MethodBinaryBases(nstate::Integer)
BinaryBases(states)Construct a set of binary bases that does not preserve the particle number conservation.
SecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasis — TypeBinaryBasis{I<:Unsigned}Binary basis represented by an unsigned integer.
SecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasis — MethodBinaryBasis(states; filter=index->true)
BinaryBasis{I}(states; filter=index->true) where {I<:Unsigned}Construct a binary basis with the given occupied orbitals.
SecondOrderPerturbationTheory.ExactDiagonalization5.BinaryBasisRange — TypeBinaryBasisRange{I<:Unsigned} <: VectorSpace{BinaryBasis{I}}A continuous range of binary basis.
SecondOrderPerturbationTheory.ExactDiagonalization5.ED — TypeED{K<:EDKind, L<:AbstractLattice, G<:OperatorGenerator, M<:Image} <: FrontendExact diagonalization method of a quantum lattice system.
SecondOrderPerturbationTheory.ExactDiagonalization5.ED — MethodED(lattice::AbstractLattice, hilbert::Hilbert, terms::Tuple{Vararg{Term}}, targetspace::TargetSpace; neighbors::Union{Nothing, Int, Neighbors}=nothing, boundary::Boundary=plain)Construct the exact diagonalization method for a quantum lattice system.
SecondOrderPerturbationTheory.ExactDiagonalization5.EDKind — TypeEDKind{K}The kind of the exact diagonalization method applied to a quantum lattice system.
SecondOrderPerturbationTheory.ExactDiagonalization5.EDMatrix — TypeEDMatrix{S<:Sector, M<:SparseMatrixCSC} <: OperatorPack{M, Tuple{S, S}}Matrix representation of quantum operators between a ket and a bra Hilbert space.
SecondOrderPerturbationTheory.ExactDiagonalization5.EDMatrix — MethodEDMatrix(sector::Sector, m::SparseMatrixCSC)Construct a matrix representation when the ket and bra spaces share the same bases.
SecondOrderPerturbationTheory.ExactDiagonalization5.EDMatrixRepresentation — TypeEDMatrixRepresentation{S<:Sector, T} <: MatrixRepresentationExact matrix representation of a quantum lattice system on a target Hilbert space.
SecondOrderPerturbationTheory.ExactDiagonalization5.EDMatrixRepresentation — MethodEDMatrixRepresentation(target::TargetSpace, table)Construct a exact matrix representation.
SecondOrderPerturbationTheory.ExactDiagonalization5.Sector — Typeabstract type Sector <: OperatorUnitA sector of the Hilbert space which form the bases of an irreducible representation of the Hamiltonian of a quantum lattice system.
SecondOrderPerturbationTheory.ExactDiagonalization5.SectorFilter — TypeSectorFilter{S} <: LinearTransformationFilter the target bra and ket Hilbert spaces.
SecondOrderPerturbationTheory.ExactDiagonalization5.TargetSpace — TypeTargetSpace{S<:Sector} <: VectorSpace{S}The target Hilbert space in which the exact diagonalization method is performed, which could be the direct sum of several sectors.
SecondOrderPerturbationTheory.ExactDiagonalization5.TargetSpace — MethodTargetSpace(sector::Sector, sectors::Sector...)Construct a target space from sectors.
Base.count — Methodcount(basis::BinaryBasis) -> Int
count(basis::BinaryBasis, start::Integer, stop::Integer) -> IntCount the number of occupied single-particle states.
Base.isone — Methodisone(basis::BinaryBasis, state::Integer) -> BoolJudge whether the specified single-particle state is occupied for a basis.
Base.iszero — Methodiszero(basis::BinaryBasis, state::Integer) -> BoolJudge whether the specified single-particle state is unoccupied for a basis.
Base.iterate — Functioniterate(basis::BinaryBasis, state=nothing)Iterate over the numbers of the occupied single-particle orbitals.
Base.one — Methodone(basis::BinaryBasis, state::Integer) -> BinaryBasisGet a new basis with the specified single-particle state occupied.
Base.zero — Methodzero(basis::BinaryBasis, state::Integer) -> BinaryBasisGet a new basis with the specified single-particle state unoccupied.
LinearAlgebra.eigen — Methodeigen(m::EDMatrix; nev=6, which=:SR, tol=0.0, maxiter=300, sigma=nothing, v₀=dtype(m)[]) -> EigenSolve the eigen problem by the restarted Lanczos method provided by the Arpack package.
QuantumLattices.:⊕ — Method⊕(sector::Sector, sectors::Union{Sector, TargetSpace}...) -> TargetSpace
⊕(target::TargetSpace, sectors::Union{Sector, TargetSpace}...) -> TargetSpaceGet the direct sum of sectors and target spaces.
QuantumLattices.:⊗ — Method⊗(bs₁::BinaryBases, bs₂::BinaryBases) -> BinaryBasesGet the direct product of two sets of binary bases.
QuantumLattices.:⊗ — Method⊗(basis₁::BinaryBasis, basis₂::BinaryBasis) -> BinaryBasisGet the direct product of two binary bases.
QuantumLattices.QuantumOperators.matrix — Methodmatrix(ed::ED, sector::Sector; kwargs...) -> EDMatrix
matrix(ed::ED, sector=first(ed.Hₘ.transformation.brakets); kwargs...) -> EDMatrixGet the sparse matrix representation of a quantum lattice system in a sector of the target space.
QuantumLattices.QuantumOperators.matrix — Methodmatrix(op::Operator, braket::NTuple{2, BinaryBases}, table; dtype=valtype(op)) -> SparseMatrixCSC{dtype, Int}
matrix(ops::Operators, braket::NTuple{2, BinaryBases}, table; dtype=valtype(eltype(ops))) -> SparseMatrixCSC{dtype, Int}Get the CSC-formed sparse matrix representation of an operator.
Here, table specifies the order of the operator ids.
SecondOrderPerturbationTheory.ExactDiagonalization5.productable — Methodproductable(bs₁::BinaryBases, bs₂::BinaryBases) -> BoolJudge whether two sets of binary bases could be direct producted.
SecondOrderPerturbationTheory.ExactDiagonalization5.sumable — Methodsumable(bs₁::BinaryBases, bs₂::BinaryBases) -> BoolJudge whether two sets of binary bases could be direct summed.
Strictly speaking, two sets of binary bases could be direct summed if and only if they have no intersection. The time complexity to check the intersection is O(n log n), which costs a lot when the dimension of the binary bases is huge. It is also possible to judge whether they could be direct summed by close investigations on their ids, i.e. the single-particle states and occupation number. It turns out that this is a multi-variable pure integer linear programming problem. In the future, this function would be implemented based on this observation. At present, the direct summability should be handled by the users in priori.
SecondOrderPerturbationTheory.SOPCore.BinaryConfigure — TypeBinaryConfigure{I<:TargetSpace, P<:Int} <: CompositeDict{P, I}
BinaryConfigure(ps::Pair...)
BinaryConfigure(kv)Construct BinaryConfigure at a lattice. The local binary configure is given by BinaryConfigure.
SecondOrderPerturbationTheory.SOPCore.Coefficience — TypeCoefficience{P<:Int, I<:AbstractVector{<:Matrix{<:Number}}} <: ActionDecompose the projected-hamiltionian matrix with respect to input physical observables.
SecondOrderPerturbationTheory.SOPCore.Coefficience — MethodCoefficience(bonds::AbstractVector{<:Bond}, observables::Dict{Int, I}; options...) where {I<:Union{AbstractVector{<:AbstractMatrix}, Tuple{Vararg{Term}}}}
Coefficience(bonds::AbstractVector{<:Bond}, observables::Dict{Int, I}; options...) where {I<:Union{AbstractVector{<:AbstractMatrix}, Tuple{Vararg{Term}}}}
Coefficience(bonds::AbstractVector{<:Bond}, npoints::Int, ob::I=Tuple{}(); options...) where {I<:Union{AbstractVector{<:AbstractMatrix}, Tuple{Vararg{Term}}}}η attribute in options is truncation of completeness of physical quantities. order attribute (order=-1,0,2) choose the order of matrix of effective hamiltonian to obtain the exchange coefficiences. npoints = length(lattice).
SecondOrderPerturbationTheory.SOPCore.PickState — TypePickState{I<:Vector{Vector{Int}}, P<:Int} <: CompositeDict{P, I}
PickState(ps::Pair...)
PickState(kv)Construct PickState. Pick low-energy states at a lattice.
SecondOrderPerturbationTheory.SOPCore.ProjectState — TypeProjectState{V<:Real, C<:Number, P<:TargetSpace}Projected states contain eigenvalues, eigenvectors, and basis of H₀.
SecondOrderPerturbationTheory.SOPCore.ProjectState — MethodProjectState(ops::Operators, braket::BinaryBases, table; pick::Union{UnitRange{Int}, Vector{Int}, Colon}=:)
ProjectState(ops::Operators, ts::TargetSpace, table, pick::Vector{Vector{Int}})Construct ProjectState. The pick::Union{UnitRange{Int}, Vector{Int}, Colon} argument picks the low-energy states. The i-th element of arguement pick vector is the loaction of low-energy states in the i-th Sector of TargetSpace.
SecondOrderPerturbationTheory.SOPCore.ProjectStateBond — TypeProjectStateBondA type. Projected states on a bond. Construct ProjectStateBond by the ProjectStates defined on points. When bond.kind==2, the left (right) corresponds to the first (second) point in bond::Bond.
SecondOrderPerturbationTheory.SOPCore.ProjectStateBond — MethodProjectStateBond(left::ProjectState, right::ProjectState, nleft::Int, nright::Int)The nleft and nright are the number of bits of left bit shift operator for left and right ProjectState, respectively.
SecondOrderPerturbationTheory.SOPCore.SOPT — TypeSOPT{L<:AbstractLattice, G₁<:OperatorGenerator, G₀<:OperatorGenerator, PT<:SecondOrderPerturbation} <: FrontendSecond order perturbation theory method of a electronic quantum lattice system.
SecondOrderPerturbationTheory.SOPCore.SOPT — MethodSOPT(lattice::AbstractLattice, hilbert::Hilbert, terms₁::Tuple{Vararg{Term}}, terms₀::Tuple{Vararg{Term}}, binaryconfigure::BinaryConfigure, lowstate::PickState; neighbors::Union{Nothing, Int, Neighbors}=nothing, boundary::Boundary=plain)Construct the second order perturbation method for a quantum lattice system.
SecondOrderPerturbationTheory.SOPCore.SOPTMatrix — TypeSOPTMatrix(bond::Bond, P₀::ProjectStateBond, m₀::Matrix, m₂::Matrix)Matrix representation of the low-energy hamiltionian. The proper order for representing basis vectors is to start with the left space (bond[1]) and then proceed to the right space (bond[2]), i.e. kron(right, left).
Arguments
-bond: bond of lattice -P₀: projected state -m₀: matrix representation of the zeroth order (<H₀>) of the low-energy hamiltionian -m₀₁: matrix representation of the zeroth order (<H₁>) of the low-energy hamiltionian -m₂: matrix representation of second order of the low-energy hamiltionian
SecondOrderPerturbationTheory.SOPCore.SecondOrderPerturationMetric — TypeSecondOrderPerturationMetric <: MetricDefine the table metric, (:spin, :orbital) for a point, (:rcoordinate,:site, :spin, :orbital) for a bond.
SecondOrderPerturbationTheory.SOPCore.SecondOrderPerturbation — TypeSecondOrderPerturbation{B<:BinaryConfigure, L<:PickState} <: Transformation
(::SecondOrderPerturbation)(H₁::OperatorGenerator, p₀::Dict{T,<:ProjectState}, qₚ::Dict{T,<:ProjectState}, qₘ::Dict{T,<:ProjectState}, bond::Bond) where T<:Int -> SOPTMatrix
(::SecondOrderPerturbation)(H₀::OperatorGenerator, H₁::OperatorGenerator, bond::Bond) -> SOPTMatrixA type.
Base.:<< — MethodBase.:(<<)(bs::BinaryBases, n::Int) -> BinaryBasesBase.:<< — MethodBase.:(<<)(ps::ProjectState, n::Int) -> ProjectStateLeft bit shift opeartor. The BinaryBasis is left shifted by n bits.
QuantumLattices.:⊕ — Method⊕(ps₁::ProjectState, ps₂::ProjectState) -> ProjectStateGet the direct sum of two projected states.
QuantumLattices.:⊗ — Method⊗(ps₁::ProjectState, ps₂::ProjectState) -> ProjectStateGet the direct product of two sets of projected states.
QuantumLattices.QuantumOperators.matrix — Methodmatrix(ops::Operators, ts₁::TargetSpace, ts₂::TargetSpace, table) -> Matrix
matrix(ops::Operators, ts::TargetSpace, table) -> MatrixGet the matrix of direct sum of submatrices.
QuantumLattices.QuantumOperators.matrix — Methodmatrix(sopt::SOPT, bond::Bond) -> SOPTMatrixReturn matrix of the projected hamiltionian onto a bond of which the length is greater than 1.
QuantumLattices.dimension — Methoddimension(ps::ProjectState) -> IntThe dimension of local low-energy hilbert space.
QuantumLattices.dimension — Methoddimension(ps::ProjectState,::Type{T}) where T<:TargetSpace -> IntThe dimension of target space basis.
QuantumLattices.expand — Methodexpand(gen::OperatorGenerator, bond::Bond) -> OperatorsSecondOrderPerturbationTheory.SOPCore.:⊠ — Method⊠(bs₁::BinaryBases, bs₂::BinaryBases) -> Tuple{BinaryBases, Vector{Int}}Get the direct product of two sets of binary bases, and the permutation vector. oxtimes=⊠
SecondOrderPerturbationTheory.SOPCore.SpinOperatorGenerator — MethodSpinOperatorGenerator(st::SOPT, coef::Coefficience; η::Float64=1e-14) -> OperatorGeneratorOnly support the pseudospin-1/2 case. The zeeman term (Onsite term) is ommited when the ground states are not Krameter states.
SecondOrderPerturbationTheory.SOPCore.coefficience_project — Functioncoefficience_project(m₂::Matrix{<:Number}, bond::Bond, ob::Dict{Int, <:AbstractVector{<:Matrix{<:Number}}}, η::Float64=1e-14) -> MatrixGet the coefficience of exchange interaction. The row index corresponds to bond[1], column index corresponds to bond[2].
SecondOrderPerturbationTheory.SOPCore.coefficience_project — Methodcoefficience_project(matbd::SOPTMatrix, coef::Coefficience, hilbert::Hilbert) -> MatrixSecondOrderPerturbationTheory.SOPCore.hamiltonianeff — Functionhamiltonianeff(psp::ProjectStateBond, psq::ProjectStateBond, h1::Operators, table::Table, bond::Union{Bond, Nothing}=nothing) ->Tuple{Matrix, Matrix, Matrix}Get the effective Hamiltonian, the first and second terms of the result correspond to the zero-th and 2nd perturbations respectively.
SecondOrderPerturbationTheory.SOPCore.observables_project — Methodobservables_project(terms::Tuple{Vararg{Term}}, point::Point, hilbert::Hilbert, psp::ProjectState) -> Vector{Matrix}The order of Term in terms (Onsite) tuple determines the order of matrix in the result.
SecondOrderPerturbationTheory.SOPCore.projectstate_points — Methodprojectstate_points(bc::BinaryConfigure, ls::PickState, H₀::OperatorGenerator, points::AbstractVector{<:Point}) -> Tuple{Dict, Dict, Dict, Dict}Construct the ProjectState` type of low-energy states with N-particle space, high-energy states with (N+1)-particle space, high-energy states with (N-1)-particle space, and high-energy states with N-particle space.
SecondOrderPerturbationTheory.SOPCore.projectstate_points — Methodprojectstate_points(sopt::SOPT) -> Tuple{Dict{Int, ProjectState}, Dict{Int, ProjectState}, Dict{Int, ProjectState}, Dict{Int, ProjectState}}Construct ProjectState on all points. Construct the ProjectState` type of low-energy states with N-particle space, high-energy states with (N+1)-particle space, high-energy states with (N-1)-particle space, and high-energy states with N-particle space.
–>