Polarization

ElectronGas.Polarization.Ladder0_FiniteTempMethod
function Ladder0_FiniteTemp(q::Float64, n::AbstractVector, param, scaleN=20, minterval=1e-6, gaussN=10)

Finite temperature ladder function for matsubara frequency and momentum. Analytically sum over total incoming frequency and angular dependence of momentum, and numerically calculate integration of magnitude of momentum. Assume G0^{-1} = iωn - (k^2/(2m) - mu)

The ladder function is defined as

\[\int \frac{d^3 \vec{p}}{\left(2π^3\right)} T \sum_{i ω_n} \frac{1}{iω_n+iΩ_n-\frac{(\vec{k}+\vec{p})^2}{2 m}+μ} \frac{1}{-iω_n-\frac{p^2}{2 m}+μ} - \frac{m}{2π^2}Λ\]

where we subtract the UV divergent term that is a constant proportional to the UV cutoff Λ.

#Arguments:

  • q: momentum
  • n: matsubara frequency given in integer s.t. Ωn=2πTn
  • param: other system parameters
  • scaleN: optional, N of Log grid in LogDensedGrid, check CompositeGrids for more detail
  • minterval: optional, actual minterval of grid is this value times min(q,kF)
  • gaussN: optional, N of GaussLegendre grid in LogDensedGrid.
source
ElectronGas.Polarization.Ladder0_FiniteTempMethod
function Ladder0_FiniteTemp(q::Float64, n::Int, param, scaleN=20, minterval=1e-6, gaussN=10)

Finite temperature ladder function for matsubara frequency and momentum. Analytically sum over total incoming frequency and angular dependence of momentum, and numerically calculate integration of magnitude of momentum. Assume G0^{-1} = iωn - (k^2/(2m) - mu)

The ladder function is defined as

\[\int \frac{d^3 \vec{p}}{\left(2π^3\right)} T \sum_{i ω_n} \frac{1}{iω_n+iΩ_n-\frac{(\vec{k}+\vec{p})^2}{2 m}+μ} \frac{1}{-iω_n-\frac{p^2}{2 m}+μ} - \frac{m}{2π^2}Λ\]

where we subtract the UV divergent term that is a constant proportional to the UV cutoff Λ.

#Arguments:

  • q: momentum
  • n: matsubara frequency given in integer s.t. Ωn=2πTn
  • param: other system parameters
  • scaleN: optional, N of Log grid in LogDensedGrid, check CompositeGrids for more detail
  • minterval: optional, actual minterval of grid is this value times min(q,kF)
  • gaussN: optional, N of GaussLegendre grid in LogDensedGrid.
source
ElectronGas.Polarization.Polarization0_3dZeroTemp_LinearDispersionMethod
@inline function Polarization0_3dZeroTemp_LinearDispersion(q, n, param)

Polarization for electrons with dispersion linearized near the Fermi surface. See "Condensed Matter Field Theory" by Altland, Eq. (5.30).

\[Π_{q, ω_n}=-\frac{1}{2} N_F \left[1-\frac{i ω_n}{2 v_F q} \operatorname{ln} \left(\frac{i ω_n+v_F q}{i ω_n-v_F q}\right)\right]\]

The log function can be replaced with arctan,

\[\operatorname{arctan}(x) = \frac{i}{2} \ln \frac{i+x}{i-x}\]

source
ElectronGas.Polarization.Polarization0_3dZeroTemp_PlasmaMethod
@inline function Polarization0_3dZeroTemp_Plasma(q, n, param; factor = 3.0)

This polarization ansatz preserves the plasma frequency and the static limit.

\[Π(q, iω_n) = -\frac{1}{2} \frac{q^2}{4πe^2} \frac{ω_p^2}{ω_n^2 + ω_p^2\cdot (q/q_{TF})^2} = -\frac{N_F}{2}\left(1-\frac{3}{3+(q \cdot vF/ω_n)^2}\right)\]

where ω_p is the plasma frequency, and

\[ω_p = v_F q_{TF}/\sqrt{3}\]

User may change the parameter factor to modify the plasma frequency in this ansatz.

source
ElectronGas.Polarization.Polarization0_3dZeroTemp_QMethod
@inline function Polarization0_3dZeroTemp_Q(q, n, param)

Polarization for electrons ansatz inspired by "Condensed Matter Field Theory" by Altland, Problem 6.7.

\[Π(q, iω_n) = -\frac{1}{2} N_F \left(1-\frac{π}\sqrt{\left(\frac{2v_F q}{ω_n} \right)^2+π^2}\right)\]

This ansatz is asymtotically exact in the large q limit, and is only qualitatively correct in the small q limit.

Remark:

For the exact free-electron polarization, we expect In the limit q ≫ ω_n,

\[Π(q, iω_n) → -\frac{1}{2} N_F \left(1-\frac{π}{2}\frac{|ω_n|}{v_F q}\right)\]

and in the limit q ≪ ω_n,

\[Π(q, iω_n) → -\frac{1}{2} N_F \frac{1}{3}\left(\frac{v_F q}{ω_n}\right)^2\]

The above ansatz has the right large-q behavior, while its small-q is slightly different (prefactor 1/3 is modified to 2/π^2≈0.2026)

source
ElectronGas.Polarization.Polarization0_FiniteTemp!Method
function Polarization0_FiniteTemp!(obj::MeshArray{T,N,MT}, param; massratio=1.0, maxk=20, scaleN=20, minterval=1e-6, gaussN=10) where {T,N,MT}

Store the finite-temperature one-spin Π0 function for Matsubara frequencies and momenta from obj.mesh within obj.data as specified by given parameters param. Analytically sum over transfer frequency and angular dependence of momentum, and numerically calculate integration of magnitude of momentum. Assume G0^{-1} = iωn - (k^2/(2m) - mu)

#Arguments:

  • obj: MeshArray with ImFreq TemporalGrid and transfer-momentum grid (two-dimensional mesh) for polarization function.
  • param: other system parameters. param.β must be equal to β from obj.mesh.
  • massratio: optional, effective mass ratio. By default, massratio=1.0.
  • maxk: optional, upper limit of integral -> maxk*kF
  • scaleN: optional, N of Log grid in LogDensedGrid, check CompositeGrids for more detail
  • minterval: optional, actual minterval of grid is this value times min(q,kF)
  • gaussN: optional, N of GaussLegendre grid in LogDensedGrid.
source
ElectronGas.Polarization.Polarization0_FiniteTempMethod
function Polarization0_FiniteTemp(q::Float64, n::AbstractVector, param, maxk=20, scaleN=20, minterval=1e-6, gaussN=10)

Finite temperature one-spin Π0 function for matsubara frequency and momentum. Analytically sum over transfer frequency and angular dependence of momentum, and numerically calculate integration of magnitude of momentum. Slower(~200μs) than Polarization0ZeroTemp. Assume G0^{-1} = iω_n - (k^2/(2m) - mu)

#Arguments:

  • q: momentum
  • n: Matsubara frequencies given in an AbstractVector s.t. ωn=2πTn
  • param: other system parameters
  • maxk: optional, upper limit of integral -> maxk*kF
  • scaleN: optional, N of Log grid in LogDensedGrid, check CompositeGrids for more detail
  • minterval: optional, actual minterval of grid is this value times min(q,kF)
  • gaussN: optional, N of GaussLegendre grid in LogDensedGrid.
source
ElectronGas.Polarization.Polarization0_FiniteTempMethod
function Polarization0_FiniteTemp(q::Float64, n::Int, param, maxk=20, scaleN=20, minterval=1e-6, gaussN=10)

Finite temperature one-spin Π0 function for matsubara frequency and momentum. Analytically sum over transfer frequency and angular dependence of momentum, and numerically calculate integration of magnitude of momentum. Slower(~200μs) than Polarization0ZeroTemp. Assume G0^{-1} = iω_n - (k^2/(2m) - mu)

#Arguments:

  • q: momentum
  • n: matsubara frequency given in integer s.t. ωn=2πTn
  • param: other system parameters
  • maxk: optional, upper limit of integral -> maxk*kF
  • scaleN: optional, N of Log grid in LogDensedGrid, check CompositeGrids for more detail
  • minterval: optional, actual minterval of grid is this value times min(q,kF)
  • gaussN: optional, N of GaussLegendre grid in LogDensedGrid.
source
ElectronGas.Polarization.Polarization0_ZeroTemp!Method
function Polarization0_ZeroTemp!(obj::MeshArray{T,N,MT}, param; massratio=1.0, kwargs...) where {T,N,MT}

Store the zero-temperature one-spin Π0 function for Matsubara frequencies and momenta from obj.mesh within obj.data as specified by given parameters param. Assume G0^{-1} = iωn - (k^2/(2m) - mu)

#Arguments:

  • obj: MeshArray with ImFreq TemporalGrid and transfer-momentum grid (two-dimensional mesh) for polarization function.
  • param: other system parameters. param.β must be equal to β from obj.mesh.
  • massratio: optional, effective mass ratio. By default, massratio=1.0.
source
ElectronGas.Polarization.Polarization0_ZeroTempMethod
function Polarization0_ZeroTemp(q::Float64, n::AbstractVector, param)

Zero temperature one-spin Π0 function for Matsubara-frequency grid n and momentum q. For low temperature the finite temperature polarization could be approximated with this function to run faster(~200ns). Assume G0^{-1} = iωn - (k^2/(2m) - E_F).

#Arguments:

  • q: momentum
  • n: Matsubara frequencies given in a AbstractVector s.t. ωn=2πTn
  • param: other system parameters
source
ElectronGas.Polarization.Polarization0_ZeroTempMethod
function Polarization0_ZeroTemp(q::Float64, n::Int, param)

Zero temperature one-spin Π0 function for matsubara frequency and momentum. For low temperature the finite temperature polarization could be approximated with this function to run faster(~200ns). Assume G0^{-1} = iωn - (k^2/(2m) - E_F).

#Arguments:

  • q: momentum
  • n: matsubara frequency given in integer s.t. ωn=2πTn
  • param: other system parameters
source
ElectronGas.Polarization.Polarization0wrappedMethod
function Polarization0wrapped(Euv, rtol, sgrid::SGT, param, pifunc = Polarization0_ZeroTemp) where{TGT, SGT}

Π0 function for matsubara frequency and momentum. Use Polarization0ZeroTemp by default, `Polarization0ZeroTemp!` when pifunc is specified. Assume G0^{-1} = iωn - (k^2/(2m) - E_F). Return full polarization0 function stored in GreenFunc.MeshArray.

#Arguments:

  • Euv: Euv of DLRGrid
  • rtol: rtol of DLRGrid
  • sgrid: momentum grid
  • param: other system parameters
  • pifunc: single point Π0 function used. Require form with pifunc(::MeshArray, param).
source