gftool.lattice.triangular.dos_mp

gftool.lattice.triangular.dos_mp(eps, half_bandwidth=1)[source]

Multi-precision DOS of non-interacting 2D triangular lattice.

The DOS diverges at -4/9*half_bandwidth.

This function is particularity suited to calculate integrals of the form \(∫dϵ DOS(ϵ)f(ϵ)\). If you have problems with the convergence, consider using \(∫dϵ DOS(ϵ)[f(ϵ)-f(-4/9)] + f(-4/9)\) to avoid the singularity.

Parameters
epsmpmath.mpf or mpf_like

DOS is evaluated at points eps.

half_bandwidthmpmath.mpf or mpf_like

Half-bandwidth of the DOS, DOS(eps < -2/3`half_bandwidth`) = 0, DOS(4/3`half_bandwidth` < eps) = 0. The half_bandwidth corresponds to the nearest neighbor hopping \(t=4D/9\).

Returns
dos_mpmpmath.mpf

The value of the DOS.

See also

gftool.lattice.triangular.dos

vectorized version suitable for array evaluations

References

kogan2021

Kogan, E. and Gumbs, G. (2021) Green’s Functions and DOS for Some 2D Lattices. Graphene, 10, 1-12. https://doi.org/10.4236/graphene.2021.101001.

Examples

Calculate integrals:

>>> from mpmath import mp
>>> mp.quad(gt.lattice.triangular.dos_mp, [-2/3, -4/9, 4/3])
mpf('1.0')
>>> eps = np.linspace(-2/3 - 0.1, 4/3 + 0.1, num=1000)
>>> dos_mp = [gt.lattice.triangular.dos_mp(ee, half_bandwidth=1) for ee in eps]
>>> dos_mp = np.array(dos_mp, dtype=np.float64)
>>> import matplotlib.pyplot as plt
>>> _ = plt.axvline(-4/9, color='black', linewidth=0.8)
>>> _ = plt.axvline(0, color='black', linewidth=0.8)
>>> _ = plt.plot(eps, dos_mp)
>>> _ = plt.xlabel(r"$\epsilon/D$")
>>> _ = plt.ylabel(r"DOS * $D$")
>>> _ = plt.ylim(bottom=0)
>>> _ = plt.xlim(left=eps.min(), right=eps.max())
>>> plt.show()

(png, pdf)

../_images/gftool-lattice-triangular-dos_mp-1.png