Self energies
This section of the documentation explains how scalar and matrix-valued self energy data are formatted, loaded, and evaluated. Self energies are interpolated efficiently during the evaluation of the Green's function using a fast-to-evaluate polynomial or rational representation of input data.
IO
For self energy data stored on equispaced frequency grids, the following file formats and routines use the EquiBaryInterp.jl
package to interpolate the data for continuous evaluation. Otherwise, a rational approximation of the self energy data is constructed with the AAA algorithm in BaryRational.jl
and that is converted into a piecewise Chebyshev interpolant with HChebInterp.jl
.
File format
Depending on the amount of data necessary to represent the self-energy, there are different data file formats for scalar and matrix-valued self energies. Within matrix-valued self energies. There is also a special case for diagonal matrices.
Scalar
First line contains only nfpts
, the number of frequency points in the data set. The following nfpts
lines contain three columns with the frequency point, real part of the self energy, and imaginary part of the self energy. For example
3001
-15.00 7.9224534011421888 -0.0608455837453997
-14.99 7.9107083143558103 -0.0627222170930403
...
Diagonal
First line contains only nfpts
, the number of frequency points in the data set. Second line contains only num_wann
, the number of bands used for Wannier interpolation (i.e. should be the same as the Hamiltonian). The following nfpts*num_wann
lines contain four columns with the frequency point, one-base index of the self energy in the diagonal of the matrix, real part of the self energy, and imaginary part of the self energy. It is assumed that the frequency data is sorted wih the index as the faster index than the frequency. For example
3001
3
-15.00 1 7.9224534011421888 -0.0608455837453997
-15.00 2 7.9224534011422065 -0.0608455837453997
...
Matrix
First line contains only nfpts
, the number of frequency points in the data set. Second line contains only num_wann
, the number of bands used for Wannier interpolation (i.e. should be the same as the Hamiltonian). The following nfpts*num_wann^2
lines contain five columns with the frequency point, one-base index of the self energy in the row of the matrix, one-base index of the self energy in the column of the matrix, real part of the self energy, and imaginary part of the self energy. It is assumed that the frequency data is sorted wih the index as the faster index than the frequency. For example
3001
3
-15.00 1 1 7.9224534011421888 -0.0608455837453997
-15.00 1 2 7.9224534011422065 -0.0608455837453997
...
Routines
AutoBZ.load_self_energy
— Functionload_self_energy(filename; [sigdigits=nothing, output=:interp, degree=:default])
Read the self energy data in filename
, which should be in either :scalar
, :diagonal
, or :matrix
format, and return a self-energy evaluator. Note that the frequency data is assumed to be an equispace grid. The optional argument degree
indicates the degree of barycentric Lagrange interpolation, and that sigdigits
indicates the number of significant digits used to round the frequency data so as to avoid rounding errors (default of nothing
does no rounding).
The keyword output
may take values of :interp
(default) or :raw
which will either return the self energy data wrapped with a high-order interpolating function (details below) or in the latter option, just the raw data.
The interpolating function will always be a piecewise high-order polynomial whose details depend on the distribution of frequency points:
- For equispaced frequency points, a local barycentric Lagrange interpolant is used with a default polynomial degree of 8
- For other frequency point distributions, first a global rational approximant is formed using the AAA algorithm, and then h-adaptive Chebyshev interpolation is performed on the global interpolant in order to obtain a fast-to-evaluate representation of default polynomial degree 16.
Interface
AutoBZ.AbstractSelfEnergy
— TypeAbstractSelfEnergy
An abstract type whose instances implement the following interface:
- instances are callable and return a square matrix as a function of frequency
- instances have methods
lb
andub
that return the lower and upper bounds of of the frequency domain for which the instance can be evaluated
AutoBZ.lb
— Functionlb(::AbstractSelfEnergy)
Return the greatest lower bound of the domain of the self energy evaluator
AutoBZ.ub
— Functionub(::AbstractSelfEnergy)
Return the least upper bound of the domain of the self energy evaluator
Types
AutoBZ.EtaSelfEnergy
— FunctionEtaSelfEnergy(η::Number)
Construct a ConstScalarSelfEnergy
with value -im*η
.
AutoBZ.ConstScalarSelfEnergy
— TypeConstScalarSelfEnergy(v::Number)
Construct a self-energy evaluator which returns $v I$ for any frequency.
AutoBZ.ScalarSelfEnergy
— TypeScalarSelfEnergy(interpolant, lb, ub)
Construct a self-energy evaluator which for frequencies above lb
and below ub
returns the scalar interpolant at that frequency times an identity matrix.
AutoBZ.DiagonalSelfEnergy
— TypeDiagonalSelfEnergy(interpolant, lb, ub)
Construct a self-energy evaluator which for frequencies above lb
and below ub
returns the vector interpolant at that frequency wrapped by a Diagonal
.
AutoBZ.MatrixSelfEnergy
— TypeMatrixSelfEnergy(interpolant, lb, ub)
Construct a self-energy evaluator which for frequencies above lb
and below ub
returns the matrix-valued interpolant at that frequency.