Skip to content

Commit

Permalink
added self-energy function
Browse files Browse the repository at this point in the history
  • Loading branch information
abhirup-m committed Feb 23, 2025
1 parent 6d75732 commit 2dfc11c
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions src/correlations.jl
Original file line number Diff line number Diff line change
Expand Up @@ -700,3 +700,43 @@ function SpecFunc(
normalise=normalise, degenTol=degenTol, silent=silent, broadFuncType=broadFuncType)
end
export SpecFunc


"""
Given the spectral function (imag. part G_I of Greens function),
calculates the self-energy. Uses Kramers-Kronig relations to
first obtain real part G_R of Greens function, then uses
Σ = G_R + iη G_I / (G_R^2 + G_I^2).
"""
function SelfEnergy(
imagGreen::Vector{Float64},
freqValues::Vector{Float64};
smoothFactor::Int64=10,
numericalZero::Float64=1e-5,
broadening::Float64=1e-1,
)
# normalise spectral function
imagGreen ./= sum(imagGreen .* (maximum(freqValues) .- minimum(freqValues)) / (length(freqValues) - 1))

@assert imagGreen[1] imagGreen[2] && imagGreen[end] imagGreen[end-1]
imagGreen[imagGreen .< numericalZero] .= 0

# create finer frequency grid
deltaOmega = (maximum(freqValues) - minimum(freqValues)) / (length(freqValues) - 1)
finerFreqValues = collect(minimum(freqValues):deltaOmega:maximum(freqValues))

# interpolating through BSpline
sp = Spline1D(freqValues, imagGreen; k=3)
imagGreen = [sp(omega) for omega in finerFreqValues]

realGreen = zeros(length(imagGreen))
@time for (index, omega) in enumerate(finerFreqValues)
realGreen[index] = sum([imagGreen[indexprime] / (omega - omegaprime) for (indexprime, omegaprime) in enumerate(finerFreqValues)
if omega omegaprime]
)
end
realSelfEnergy = (realGreen) ./ (realGreen .^ 2 .+ (imagGreen .+ broadening) .^2)
imagSelfEnergy = (imagGreen .+ broadening) ./ (realGreen .^ 2 .+ (imagGreen .+ broadening) .^2)
return realGreen, imagGreen, realSelfEnergy, imagSelfEnergy
end
export SelfEnergy

0 comments on commit 2dfc11c

Please sign in to comment.