sisl icon indicating copy to clipboard operation
sisl copied to clipboard

2D band structures.

Open pfebrer opened this issue 3 years ago • 13 comments

Could BandStructure be able to handle 2D band structures? Or would it make sense to create an object for them?

It's very easy to enable BandsPlot to draw them, even colored as fatbands or spin texture, and I would like to do it. I know I could use a generic BrillouinZone object, but an "officially supported" 2D band structure sounds better :)

pfebrer avatar Feb 12 '22 11:02 pfebrer

Could you make an example, I don't fully understand what you mean?

zerothi avatar Feb 12 '22 11:02 zerothi

An example of the code or the plotting?

I mean some object that handles the parametrization and ticks for a 2D mesh of k points, so that you can get the eigenstates and plot something like this (for graphene):

newplot - 2022-02-12T125528 501

pfebrer avatar Feb 12 '22 11:02 pfebrer

But this is just MonkhorstPack(..., [x, y, z], trs=False), then you can do:

eig = bz.apply.array.eigh()
plot(bz.k[:, 0], bz.k[:, 1], eig)

? I don't think it deserves another class, what would be its difference from the MonkhorstPack implementation?

In fact, if anything the BZ objects might be added a new routine that can return mirror symmetry points for each k-point. That would mean that trs=False is not required.

zerothi avatar Feb 17 '22 18:02 zerothi

Hmm but the MonkhorstPack grid only allows:

  • Planes that are orthogonal to a cartesian coordinate.
  • 2D grids that span the whole cell

Right?

I was thinking that one could be able to define a 2D plane e.g. by passing two arbitrary vectors.

pfebrer avatar Feb 17 '22 18:02 pfebrer

No, that is not correct, the size argument define the size of the BZ, and displacement defines the center of the BZ.

You can even do better k-points for SCF, see here: https://mattermodeling.stackexchange.com/questions/2221/adaptive-k-mesh/2228#2228

We do this for e.g. graphene with very good results! ;)

zerothi avatar Feb 17 '22 18:02 zerothi

As for

Planes that are orthogonal to a cartesian coordinate

I don't exactly know what you mean, k-points are always in terms of the lattice vector. ?

zerothi avatar Feb 17 '22 18:02 zerothi

Sorry I didn't express myself right. See for example the reciprocal lattice of a simple cubic lattice:

image

You might want to sample the triangle formed by Gamma, M and R. You can't do this with a MonkhorstPack object because the plane is not parallel to 2 reciprocal vectors. You might even want to sample the surface defined by Gamma, M, R and X for example, which is not all in a single plane.

pfebrer avatar Feb 18 '22 08:02 pfebrer

So what you say is that you want to equi-sample inside the 3D triangle that spans Gamma -> M -> X -> R?

Do you envision this as a surface structure only, or possibly also the entire 3D triangle structure?

zerothi avatar Feb 18 '22 08:02 zerothi

For 2D band structures the k sampling would need to be in a surface, because then you can represent them as: xy the coordinates of the surface and z the energy of each band.

I don't know if there would be a way to represent bands for a 3D sampling :sweat_smile:

pfebrer avatar Feb 18 '22 08:02 pfebrer

No, that is not correct, the size argument define the size of the BZ, and displacement defines the center of the BZ.

You can even do better k-points for SCF, see here: https://mattermodeling.stackexchange.com/questions/2221/adaptive-k-mesh/2228#2228

We do this for e.g. graphene with very good results! ;)

By the way this is very cool, I didn't know it could be done!

Question: Can you pass a custom grid to SIESTA?

pfebrer avatar Feb 18 '22 08:02 pfebrer

For 2D band structures the k sampling would need to be in a surface, because then you can represent them as: xy the coordinates of the surface and z the energy of each band.

I don't know if there would be a way to represent bands for a 3D sampling sweat_smile

Ok, so effectively only surfaces. And how would your represent two different surfaces in such a plot?

No, that is not correct, the size argument define the size of the BZ, and displacement defines the center of the BZ. You can even do better k-points for SCF, see here: https://mattermodeling.stackexchange.com/questions/2221/adaptive-k-mesh/2228#2228 We do this for e.g. graphene with very good results! ;)

By the way this is very cool, I didn't know it could be done!

Agreed, I think so too! ;) This can be done with the siesta-master branch :)

zerothi avatar Feb 18 '22 08:02 zerothi

Ok, so effectively only surfaces. And how would your represent two different surfaces in such a plot?

Hmm yes that's a good question, but I'd say that if you think about it, it is not very different from a 1D band structure. At least for surfaces with borders that are straight lines, I would define linear ticks for the perimeter of the surface.

Something like (in this case):

  • Gamma = [0, 0]
  • M = [0, 1]
  • R = [1, 0]
  • X = [1, 1]

(of course scaled accordingly)

I was thinking that if we allowed other surfaces (e.g. a circle surface) it might get more complicated. Probably there would still be solutions though, I just don't know how useful it would be.

pfebrer avatar Feb 18 '22 08:02 pfebrer

If the surfaces don't match you would have discontinuities, just as you would have with BandStructure

pfebrer avatar Feb 18 '22 09:02 pfebrer