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_energyFunction
load_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.
source

Interface

AutoBZ.AbstractSelfEnergyType
AbstractSelfEnergy

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 and ub that return the lower and upper bounds of of the frequency domain for which the instance can be evaluated
source
AutoBZ.lbFunction
lb(::AbstractSelfEnergy)

Return the greatest lower bound of the domain of the self energy evaluator

source
AutoBZ.ubFunction
ub(::AbstractSelfEnergy)

Return the least upper bound of the domain of the self energy evaluator

source

Types

AutoBZ.ScalarSelfEnergyType
ScalarSelfEnergy(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.

source
AutoBZ.DiagonalSelfEnergyType
DiagonalSelfEnergy(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.

source
AutoBZ.MatrixSelfEnergyType
MatrixSelfEnergy(interpolant, lb, ub)

Construct a self-energy evaluator which for frequencies above lb and below ub returns the matrix-valued interpolant at that frequency.

source