Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pybos DOS discrepancy. #26

Open
PaulBrown-cmyk opened this issue Jul 21, 2022 · 1 comment
Open

pybos DOS discrepancy. #26

PaulBrown-cmyk opened this issue Jul 21, 2022 · 1 comment

Comments

@PaulBrown-cmyk
Copy link

Hello,

I wanted to point out that pydos seems to generate plots that do not reflect the underlying data. Upon examining the results of DOS from pymatgen, for comparison, I see that with pydos an energy gap is missing. Yet the bandgap is observable with pyband.
dos
n_dos

The first figure is from pydos, and the second, with all elements plotted, is from pymatgen. Looking at pymatgen result, we can see all DOS goes to zero at the Fermi level. This is consistent with the data. However, comparing the pymatgen result to pydos we can see the TDOS doesn't converge to zero as it should. I not certain the cause of this, perhaps the smearing function...? I do not believe this has to do with scale...I can zoom in and see nonzero DOS...Anyway, I felt you should be made aware. Thank you.

@QijingZheng
Copy link
Owner

Hi

The density of state is defined as

DOS(e) = \sum_{n,k} \delta( e - e_{n,k}) (1)

where \delta is the Dirac delta function and "n", "k" are the band and k-point index corresponds to the state \psi_{n,k} with energy e_{n,k}. Eq. (1) is an integration over the Brillouin zone.

In principle, there are two kinds of methods to evaluate the above equation: 1) smearing algorithm and 2) linear-tetrahedron method. The former uses an analytic function with some broadening, e.g. Gaussian or Lorentzian function, to substitute the delta function and as a result may come out with non-zero dos at gap position when the broadening parameter is too large or when the gap is too small. In pydos, I used the smearing algorithm.

On the other hand, the linear-tetrahedron method first divide the Brillouin zone into many sub-meshes and then interpolate the quantities, such as energy e_{n,k}, linearly on the sub-meshes. As a result, Eq (1) can be calculated analytically. With this method, the dos is absolutely zero at the energies where no states exist. See this post for a comparison of the two methods.
http://staff.ustc.edu.cn/~zqj/posts/LinearTetrahedronMethod/#dos-smearing-vs-linear-tetrahedron-method

I am not familiar with the underlying coding of pymatgen, maybe it uses the latter algorithm. Note that the linar-tetrahdron method can also be realized by setting IMSEAR = -5 in VASP (https://www.vasp.at/tutorials/latest/bulk/part1/)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants