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

eigenvalue_band_properties based on separate spin channels #2185

Closed
Andrew-S-Rosen opened this issue Jun 29, 2021 · 1 comment
Closed

eigenvalue_band_properties based on separate spin channels #2185

Andrew-S-Rosen opened this issue Jun 29, 2021 · 1 comment

Comments

@Andrew-S-Rosen
Copy link
Member

Andrew-S-Rosen commented Jun 29, 2021

Is your feature request related to a problem? Please describe.
Currently, the band gaps computed using the eigenvalue_band_properties function in pymatgen.io.vasp.outputs (e.g. for the Vasprun or Eigenval classes) are based on the VBM and CBM independent of spin. For some spin-polarized systems, this might result in a band gap that is formally a spin-forbidden transition, which may not be the gap of interest depending on the use-case. Additionally, it is not currently possible to quickly determine if a material might be something like a half-metal, where one spin channel has metallic behavior and the other does not. [Disclaimer: I'm by no means an expert on this topic, so apologies if I've butchered it.]

As an example, see the DOS below. Band gap 1 (and its corresponding CBM and VBM) is the current value computed in Pymatgen. Band gap 2, however, may be a desirable property to compute since there is no spin transition. Band gap 3, while larger than band gap 2, may also be of interest. Currently, there is no way to compute band gap 2 or band gap 3.

image

Describe the solution you'd like
I propose to add a flag separate_spins that, when set to False (default), does not change the behavior of the eigenvalue band properties. However, when separate_spins is set to True, the returned tuple will contain properties for the spin-up and spin-down channels separately. The user would most likely be interested in the minimum value of band gap 2 and 3, but they can take the minimum on their own if desired.

Describe alternatives you've considered
Nothing major to note.

Additional context
Here is an example of how the band gap can currently be computed.

from pymatgen.io.vasp.outputs import Eigenval
eig = Eigenval('EIGENVAL') # I am proposing to add a new keyword argument here
bg = eig.eigenvalue_band_properties[0]
print(bg)

Note
I am currently working on the PR. Hopefully I can submit it soon if you think this is desirable.

@Andrew-S-Rosen
Copy link
Member Author

Addressed in #2187.

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

1 participant