QInchworm.ppgf
Operators and their matrices
QInchworm.ppgf.total_density_operator
— Functiontotal_density_operator(ed::KeldyshED.EDCore) -> Any
Return the total density operator $\hat N = \sum_i n_i$, where $i$ labels all single-particle basis states used to construct the exact diagonalization object ed
.
QInchworm.ppgf.operator_matrix_representation
— Functionoperator_matrix_representation(
op_expr::KeldyshED.Operators.OperatorExpr{S<:Number},
ed::KeldyshED.EDCore
) -> Vector{T} where T<:(Matrix{T} where T<:Number)
Make matrix representation of an operator expression op_expr
in each invariant subspace (symmetry sector) defined by the exact diagonalization object ed
.
NB! Requires that the operator expression does not mix symmetry sectors.
QInchworm.ppgf.operator_product
— Functionoperator_product(
ed::KeldyshED.EDCore,
P,
s_i::Integer,
z_i,
z_f,
vertices
) -> Tuple{Any, Any}
Evaluate a product of vertices at different contour times $z_n, n=1\ldots N$ with the pseudo-particle Green's functions sandwiched in between. The product is padded with the PPGFs $P(z_1, z_i)$ and $P(z_f, z_N)$ at the respective ends of the contour segment $[z_i, z_f]$.
vertices
is a contour-time ordered list of triples (z_n, c_n, o_n)
were:
z_n
is a contour time,c_n
is +1/-1 for creation/annihilation operator respectively, ando_n
is a spin-orbital index.
Parameters
ed
: An object defining the exact diagonalization problem.P
: The pseudo-particle Green's function as a list of its diagonal blocks.s_i
: Initial symmetry sector, in which the rightmost PPGF is acting.z_i
: Initial contour time $z_i$.z_f
: Final contour time $z_f$.vertices
: The list of vertices.
Returns
The evaluated matrix product and the final symmetry sector, in which the leftmost PPGF is acting.
Pseudo-particle Green's functions
QInchworm.ppgf.FullTimePPGFSector
— TypeA single block of an atomic propagator (PPGF) defined on a full Keldysh contour
QInchworm.ppgf.ImaginaryTimePPGFSector
— TypeA single block of an atomic propagator (PPGF) defined on an imaginary time segment
QInchworm.ppgf.atomic_ppgf!
— Functionatomic_ppgf!(P::Vector, ed::KeldyshED.EDCore; Δλ)
In-place version of atomic_ppgf()
that writes the computed PPGF into its first argument P
. If Δλ
is non-zero, then $P(z, z')$ is multiplied by $e^{-i\Delta\lambda (z-z')}$.
QInchworm.ppgf.first_order_spgf
— Functionfirst_order_spgf(
P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},
ed::KeldyshED.EDCore,
o1,
o2
) -> Any
Compute the first order pseudo-particle diagram contribution to the single-particle Green's function $g_{o_1, o_2}(z, z')$ defined on the full Keldysh contour.
Parameters
P
: Pseudo-particle Green's function.ed
: An object defining the exact diagonalization problem.o1
: First index of the single-particle Green's function to be computed.o2
: Second index of the single-particle Green's function to be computed.
Returns
The computed single-particle Green's function.
first_order_spgf(
P::Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}},
ed::KeldyshED.EDCore,
o1,
o2
) -> Any
Compute the first order pseudo-particle diagram contribution to the single-particle Green's function $g_{o_1, o_2}(\tau)$ defined on the imaginary time segment.
Parameters
P
: Pseudo-particle Green's function.ed
: An object defining the exact diagonalization problem.o1
: First index of the single-particle Green's function to be computed.o2
: Second index of the single-particle Green's function to be computed.
Returns
The computed single-particle Green's function.
QInchworm.ppgf.first_order_spgf!
— Functionfirst_order_spgf!(g, P, ed::KeldyshED.EDCore, o1, o2)
In-place version of first_order_spgf()
that writes the computed single-particle Green's function into its first argument g
.
QInchworm.ppgf.check_ppgf_real_time_symmetries
— Functioncheck_ppgf_real_time_symmetries(
P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},
ed::KeldyshED.EDCore
) -> Bool
Check whether a given pseudo-particle Green's function P
obeys all symmetry relations between its Keldysh components.
Parameters
P
: Pseudo-particle Green's function to check.ed
: An object defining the respective exact diagonalization problem.
QInchworm.ppgf.set_ppgf!
— Functionset_ppgf!(
P::Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}},
τ_i::Keldysh.TimeGridPoint,
τ_f::Keldysh.TimeGridPoint,
val::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}
)
Set the value of P
corresponding to a given pair of imaginary time points $(\tau_f, \tau_i)$. This method is defined for the spline-interpolated imaginary-time propagators.
Parameters
P
: Pseudo-particle Green's function.τ_i
: Initial imaginary time $\tau_i$.τ_f
: Final imaginary time $\tau_f$.val
: Block matrix to set $P(\tau_f, \tau_i)$ to. Expected to be block-diagonal.
set_ppgf!(
P::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}},
t_i::Keldysh.TimeGridPoint,
t_f::Keldysh.TimeGridPoint,
val::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}
)
Set the value of P
corresponding to a given pair of contour time points $(t_f, t_i)$.
Parameters
P
: Pseudo-particle Green's function.t_i
: Initial contour time $t_i$.t_f
: Final contour time $t_f$.val
: Block matrix to set $P(t_f, t_i)$ to. Expected to be block-diagonal.
QInchworm.ppgf.set_ppgf_initial_conditions!
— Functionset_ppgf_initial_conditions!(
P::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}}
)
Given a pseudo-particle Green's function P
, set its values to zero except for the same-time components $P(z, z) = -i$.
QInchworm.ppgf.ppgf_real_time_initial_conditions!
— Functionppgf_real_time_initial_conditions!(
P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},
ed::KeldyshED.EDCore
)
Given a pseudo-particle Green's function P
, set its values at the real branch edges $t = 0$ to be consistent with values on the imaginary time branch.
Parameters
P
: Pseudo-particle Green's function.ed
: Exact diagonalization object used to derive statistical sign pre-factors of PPGF sectors.
QInchworm.ppgf.set_ppgf_symmetric!
— Functionset_ppgf_symmetric!(
P_s::Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid},
n,
z1::Keldysh.TimeGridPoint,
z2::Keldysh.TimeGridPoint,
value
) -> Any
Set real-time pseudo-particle Green's function symmetry connected time pairs.
Parameters
P_s
: Diagonal block of the PPGF to be updated.n
: The number of particles in the corresponding sector.z1
: First argument of the PPGF.z2
: Second argument of the PPGF (must lie on the backward branch).value
: Value to set elements of the PPGF to.
QInchworm.ppgf.initial_ppgf_derivative
— Functioninitial_ppgf_derivative(
ed::KeldyshED.EDCore,
β::Float64
) -> Vector{Any}
Compute the imaginary time derivative of the atomic pseudo-particle Green's function, $\partial_\tau P(\tau)$ at $\tau=0$.
Parameters
ed
: Exact diagonalization object defining the atomic propagator.β
: Inverse temperature.
Returns
Value of the derivative as a block-diagonal matrix (a list of blocks).
QInchworm.ppgf.reduced_ppgf
— Functionreduced_ppgf(
P::Vector{<:Keldysh.AbstractTimeGF},
ed::KeldyshED.EDCore,
target_soi::KeldyshED.Hilbert.SetOfIndices
) -> Any
Take a partial trace of a pseudo-particle Green's function.
Parameters
P
: Pseudo-particle Green's function.ed
: Exact diagonalization object compatible withP
.target_soi
: A subset of creation/annihilation operator labels defining the target subsystem, in which the reduced PPGF acts.
Returns
The reduced PPGF written in the Fock state basis of the target subsystem.