dos: 2D tetrahedron methods

elphmod.dos.double_delta(x, y, f=None, eps=1e-07)

Calculate double-delta integrals via 2D tetrahedron method .

\[I(z) = \frac 1 N \sum_{\vec k} \delta(x_{\vec k} - z) \delta(y_{\vec k} - z) f_{\vec k}\]
Parameters
x, y, fndarray

Three functions sampled on uniform N x N mesh.

epsndarray

Negligible difference between fractional mesh-point indices.

Returns
functionfloat -> dict

Intersection points of \(x, y = z\) isolines and corresponding weights as a function of \(z\). The above double-delta integral \(I(z)\) can be calulated as:

I_z = sum(double_delta(x, y, f)(z).values())
elphmod.dos.hexDOS(energies)

Calculate DOS from energies on triangular mesh (2D tetrahedron method).

Integration over all energies yields unity.

Derivation: The density of states can be expressed as

\[\rho(E) = \frac 1 V \int_{W(k) = E} \frac{\D k}{|\vec \nabla W(k)|},\]

where \(V\) is the volume of a reciprocal unit cell, \(W(k)\) is the dispersion relation and the integral is over an iso-energy surface/line in k space.

In the following, consider a two dimensional reciprocal unit cell which can be divided into \(2 \times N \times N\) equilateral triangles of reciprocal side length \(a\), on each of which the energy is interpolated linearly. On a triangle with the energies \(A, B, C\) at its corners, the gradient of the energy plane is

\[|\vec \nabla W| = \frac 2 {\sqrt 3 a} \sqrt{A^2 + B^2 + C^2 - A B - A C - B C}.\]

For the special case \(A < B < E < C\), the reciprocal length of the \(E\) isoline within the triangle reads

\[\D k = a \sqrt{A^2 + B^2 + C^2 - A B - A C - B C} \frac{C - E}{(C - A) (C - B)}.\]

Taking into account that \(V = N^2 a^2 \sqrt 3 / 2\), one finds the contribution of this triangle to the density of states:

\[\frac 1 {N^2} \frac{C - E}{(C - A) (C - B)}.\]
elphmod.dos.hexa2F(energies, couplings)

Calculate a2F from energies and coupling.

Integration over all energies yields the arithmetic mean of the coupling.

Note that it may be more convenient to calculate the mass renormalization

\[\lambda_n = \int_0^\infty \D \omega \frac{2 \omega \alpha^2 F(\omega)} {\omega^2 + \omega_n^2} = N(0) \sum_{\vec q \nu} \frac{2 \omega_{\vec q \nu} g^2_{\vec q \nu}} {\omega_{\vec q \nu}^2 + \omega_n^2}\]

directly from energies and couplings, without integrating this function.

elphmod.dos.isoline(energies)

Calculate isoline on triangular mesh (2D tetrahedron method).