Band indexes numbering problem

When clicking on the “Interactive plots” button for the electronic bandstructure, the band indeces do not always make sense between valence and conduction. As an example, in mp-10623, the band indexes change between \Gamma-L, L-U and U-W. Is there a rationale behind it?

Hi @gmrigna,

I’m not an expert on how we generate these plots, so perhaps a colleague can correct me on this, but the short answer is the band numbering comes directly from the VASP electronic structure calculation. We don’t number the bands ourselves.

Whenever the numbering changes, this is usually because of band degeneracy at a high-symmetry point means that two lines merge into one (or one line splits into two), which then changes the numbering of all the other bands at that k-point. The bands are numbered from lowest-energy eigenvalue first, starting at index 0. Currently, in the interactive plot, only those bands closest to the Fermi level are shown, so these lowest-energy bands might not always be visible in the plot.

Hope this helps,

Matt

Hi Matt,

this is usually because of band degeneracy at a high-symmetry point means that two lines merge into one (or one line splits into two), which then changes the numbering of all the other bands at that k-point.

It is definitely not the case here. In particular, in the example that I pointed to (and there is actually many of those), the material has a gap and a given band number refers to a valence band in some direction and to a conduction band in another one. So, the situation that you describe (which I would have perfectly understood) does not correspond to what is observed here (and in many other materials).

Best regards,

Gian-Marco

Thanks for your reply, though…

Ok, thanks for reporting this – we’ll take a closer look.

So my current understanding of this is that the band indexing is generated independently between branches. This means there are no guarantees that the band indexes are going to be consistent between different branches, which is what’s leading to the confusion here.

To be more specific, the band structures are parsed into a collection of pymatgen BandStructureSymmLine objects, where each object refers to a unique branch (e.g. \Gamma-L) and contains a list of k-points and eigenvalues for that specific branch. These objects are then plotted, but each BandStructureSymmLine has no knowledge of any of its neighboring branches, which is why they’re indexed independently.

I’m not sure what the most sensible resolution is to this, because I agree the current presentation is confusing.

If the bands are counted starting from the lowest in energy, the counting should always be the same whatever the branch (of course, there is the problem that you mentioned in your first reply)… My fear is that not all bands are counted in the different branches. Some bands are too low in energy, hence they do not appear in the displayed window and are not taken into account in the counting. In other words, the band 0 is already not the same in every branch, hence the numbering of the other bands is not correct. Should there be a way to fix this (e.g. by counting the bands that are not displayed)?

Hi Gian-Marco,

There is basically some data pruning on a branch by branch basis to ensure the interactive plots load in a reasonable amount of time. The result is what you said, the branches aren’t indexed the same because some portion of a band in one branch is outside the window causing it to be dropped. We should be padding the data set with empty arrays in this case to ensure indices are consistent, but that doesn’t appear to be happening. I’ll dive a bit further into fixing this next week.

Thanks!

Shyam

Thank you… It will be very helpful for my undergrad students :wink: