Integrands
AutoBZ.jl defines integrands to compute various physical observables, including the density of states, electronic density, and optical conductivity. To define new observables, visit AutoBZCore.jl for general-purpose interfaces to define integrals.
Constructors
AutoBZ.GlocSolver
— FunctionGlocSolver(Σ, h, bz, bzalg, [linalg=JLInv()]; ω, μ=0, kws...)
Green's function integrands accepting a self energy Σ that can either be a matrix or a function of ω (see the self energy section of the documentation for examples) Additional keywords are passed directly to the solver. Use AutoBZ.update_gloc!(solver; ω, μ=0)
to change the parameters. The linalg
argument sets the linear system solver
AutoBZ.TrGlocSolver
— FunctionTrGlocSolver(Σ, h, bz, bzalg, [trinvalg=JLTrInv()]; ω, μ=0, kws...)
Green's function integrands accepting a self energy Σ that can either be a matrix or a function of ω (see the self energy section of the documentation for examples) Additional keywords are passed directly to the solver. Use AutoBZ.update_trgloc!(solver; ω, μ=0)
to change the parameters.
AutoBZ.DOSSolver
— FunctionDOSSolver(Σ, h, bz, bzalg, [trinvalg=JLTrInv()]; ω, μ=0, kws...)
Green's function integrands accepting a self energy Σ that can either be a matrix or a function of ω (see the self energy section of the documentation for examples) Additional keywords are passed directly to the solver. Use AutoBZ.update_dos!(solver; ω, μ=0)
to change the parameters.
AutoBZ.TransportFunctionSolver
— FunctionTransportFunctionSolver(hv::AbstractVelocityInterp, bz, bzalg; β, μ=0, kernel=:fermi, kws...)
A function whose integral over the BZ gives the transport function, proportional to the Drude weight,
\[D_{\alpha\beta} = \sum_{nm} \int_{\text{BZ}} dk f'(\epsilon_{nk}-\mu) \nu_{n\alpha}(k) \nu_{m\beta}(k)\]
where $f(\omega) = (e^{\beta\omega}+1)^{-1}$ is the Fermi distribution. Additional keywords are passed directly to the solver. Use AutoBZ.update_tf!(solver; β, μ=0)
to update the parameters.
If the keyword kernel
is set to :lorentzian
then the following is computed
\[D_{\alpha\beta} = \sum_{nm} \int_{\text{BZ}} dk \operatorname{Tr}[\nu_{n\alpha}(k) A(k, \mu) \nu_{m\beta}(k)]\]
AutoBZ.TransportDistributionSolver
— FunctionTransportDistributionSolver(Σ, hv::AbstractVelocityInterp, bz, bzalg; ω₁, ω₂, μ=0, kws...)
A function whose integral over the BZ gives the transport distribution
\[\Gamma_{\alpha\beta}(\omega_1, \omega_2) = \int_{\text{BZ}} dk \operatorname{Tr}[\nu_\alpha(k) A(k,\omega_1) \nu_\beta(k) A(k, \omega_2)]\]
Based on TRIQS. Additional keywords are passed directly to the solver. Use AutoBZ.update_td!(solver; ω₁, ω₂, μ=0)
to update the parameters.
AutoBZ.KineticCoefficientSolver
— FunctionKineticCoefficientSolver(hv, bz, bzalg, Σ, [fdom,] falg, [linalg=JLInv()]; n, β, Ω, μ=0, scale_inner=inv(abs(det(bz.B))*nsyms(bz)), kws...)
KineticCoefficientSolver(Σ, [fdom,] falg, hv, bz, bzalg, [linalg=JLInv()]; n, β, Ω, μ=0, scale_inner=1, kws...)
A solver for kinetic coefficients. The two orderings of arguments correspond to orders of integration. (The outer integral appears first in the argument list.) Use AutoBZ.update_kc!(solver; β, Ω, μ, n)
to change parameters. linalg
selects the algorithm to compute the resolvent.
Mathematically, this computes
\[A_{n,\alpha\beta}(\Omega) = \int_{-\infty}^{\infty} d \omega (\beta\omega)^{n} \frac{f(\omega) - f(\omega+\Omega)}{\Omega} \Gamma_{\alpha\beta}(\omega, \omega+\Omega)\]
where $f(\omega) = (e^{\beta\omega}+1)^{-1}$ is the Fermi distriubtion. Based on TRIQS.
AutoBZ.OpticalConductivitySolver
— FunctionOpticalConductivitySolver(hv, bz, bzalg, Σ, [fdom,] falg, [linalg=JLInv()]; β, Ω, μ=0, scale_inner=inv(abs(det(bz.B))*nsyms(bz)), kws...)
OpticalConductivitySolver(Σ, [fdom,] falg, hv, bz, bzalg, [linalg=JLInv()]; β, Ω, μ=0, scale_inner=1, kws...)
A solver for the optical conductivity. For details see KineticCoefficientSolver
and note that by default the parameter n=0
. Use AutoBZ.update_oc!(solver; β, Ω, μ)
to change parameters.
AutoBZ.ElectronDensitySolver
— FunctionElectronDensitySolver(h, bz, bzalg, Σ, [fdom,] falg, [trinvalg=JLTrInv()]; β, μ=0, scale_inner=inv(abs(det(bz.B))*nsyms(bz)), kws...)
ElectronDensitySolver(Σ, [fdom,] falg, h, bz, bzalg, [trinvalg=JLTrInv()]; β, μ=0, scale_inner=inv(oneunit(μ)), kws...)
A solver for the electron density. The two orderings of arguments correspond to orders of integration. (The outer integral appears first in the argument list.) Use AutoBZ.update_density!(solver; β, μ=0)
. If fdom
is not specified the default is (AutoBZ.lb(Σ), AutoBZ.ub(Σ))
. The scale_inner
keyword is used to rescale inner integration tolerances and can be estimated to reduce computational effort, although the default will be robust. trinvalg
may be specified as an algorithm for the inverse trace calculation.
Mathematically, this computes the electron density:
\[n(\mu) = \int_{-\infty}^{\infty} d \omega f(\omega) \operatorname{DOS}(\omega+\mu)\]
where $f(\omega) = (e^{\beta\omega}+1)^{-1}$ is the Fermi distriubtion. To get the density/number of electrons, multiply the result of this integral by n_sp/det(bz.B)
AutoBZ.AuxTransportDistributionSolver
— FunctionAuxTransportDistributionSolver([auxfun], Σ, hv::AbstractVelocityInterp, bz, bzalg; ω₁, ω₂, μ=0, kws...)
A function whose integral over the BZ gives the transport distribution
\[\Gamma_{\alpha\beta}(\omega_1, \omega_2) = \int_{\text{BZ}} dk \operatorname{Tr}[\nu_\alpha(k) A(k,\omega_1) \nu_\beta(k) A(k, \omega_2)]\]
Based on TRIQS. Additional keywords are passed directly to the solver. Use AutoBZ.update_auxtd!(solver; ω₁, ω₂, μ)
to update the parameters.
AutoBZ.AuxKineticCoefficientSolver
— FunctionAuxKineticCoefficientSolver([auxfun], hv, bz, bzalg, Σ, [fdom,] falg, [linalg=JLInv()]; n, β, Ω, μ=0, scale_inner=inv(abs(det(bz.B))*nsyms(bz)), kws...)
AuxKineticCoefficientSolver([auxfun], Σ, [fdom,] falg, hv, bz, bzalg, [linalg=JLInv()]; n, β, Ω, μ=0, scale_inner=1, kws...)
A solver for kinetic coefficients using an auxiliary integrand. The two orderings of arguments correspond to orders of integration. (The outer integral appears first in the argument list.) The default auxfun
is the sum of the Green's functions. Use AutoBZ.update_auxkc!(solver; β, Ω, μ, n)
to change parameters. If fdom
is not specified the default is (AutoBZ.lb(Σ), AutoBZ.ub(Σ))
.
AutoBZ.AuxOpticalConductivitySolver
— FunctionAuxOpticalConductivitySolver([auxfun], hv, bz, bzalg, Σ, [fdom,] falg, [linalg=JLInv()]; β, Ω, μ=0, scale_inner=inv(abs(det(bz.B))*nsyms(bz)), kws...)
AuxOpticalConductivitySolver([auxfun], Σ, [fdom,] falg, hv, bz, bzalg, [linalg=JLInv()]; β, Ω, μ=0, scale_inner=1, kws...)
A solver for the optical conductivity. For details see AuxKineticCoefficientSolver
and note that by default the parameter n=0
. Use AutoBZ.update_auxoc!(solver; β, Ω, μ)
to change parameters.
Functions
AutoBZ.fermi
— Functionfermi(β, ω)
fermi(x)
Evaluates a Fermi distribution with unitless input
\[f(x) = \frac{1}{e^{x}+1}\]
AutoBZ.fermi′
— Functionfermi′(x)
Evaluates a first derivative of the Fermi distribution with unitless input
\[\partial_{x} f(x) = -\frac{1}{2(\cosh(x)+1)}\]
Note that the analytic expression above can be rewritten many ways using hypertrigonometric identities.
AutoBZ.fermi_window
— Functionfermi_window(β, ω, Ω)
fermi_window(x, y)
Evaluates a unitless window function with unitless inputs determined by the Fermi distribution $f$ and defined by
\[\chi(x, y) = \frac{f(x) - f(x+y)}{y}\]
In the case y==0
then this simplifies to the derivative of the Fermi distribution.
AutoBZ.fermi_window_limits
— Functionfermi_window_limits(Ω, β [; atol=0.0, rtol=1e-20])
Returns limits (a,b)
over ω restricted to the interval where the Fermi window is larger than max(atol,rtol*fermi_window(0,β*Ω))
. Choosing atol
and rtol
wisely is important to integrating the entire region of interest, since this is a truncation of an infinite interval, and should be tested for convergence.