SMTG-Bham / sumo

Heavyweight plotting tools for ab initio calculations
https://smtg-bham.github.io/sumo/
MIT License
205 stars 81 forks source link

Does SUMO support plotting projection band structures according to lm_orbiltals? #87

Open zrqustc opened 5 years ago

zrqustc commented 5 years ago

Dear developers, I know SUMO can plot projection bands with s,p, d orbitals. How about projections according to px,py,pz ,dxy, dz2 and so on?

Best, Ruiqi

sddastone commented 5 years ago

Wish the developers can add this function to SUMO~ Great codes by the way

ajjackson commented 5 years ago

Sumo gets the orbital-projected bandstructure for Vasp calculations using this method in Pymatgen: https://pymatgen.org/_modules/pymatgen/electronic_structure/bandstructure.html#BandStructure.get_projections_on_elements_and_orbitals

This seems to sum the data together from different directions before it reaches Sumo. In principle we could replace it with some similar function in Sumo, but it would make more sense to change Pymatgen; either by adding a get_projections_on_elements_and_orbitals_and_directions or by adding an optional parameter to the existing function which changes the logic and returns all the sub-orbitals. @utf how feasible does that seem?

utf commented 4 years ago

It should be simple to add the function you suggest to Pymatgen via either method. I prefer the modifying the existing function tbh.

We could then look at implementing this in sumo.

One thing to note is that that what VASP calls the px,py, pz, etc orbits might not be what you are expecting. These labels are only valid for orbitals that are oriented along the x, y and z cartesian directions. So if you have anything other than rocksalt these orbitals will be essentially meaningless for most atoms. You can reorient the cartesian axes so that the orbitals are aligned correctly but for many crystal structures this will only align 1 atom correctly.

Unless you are really careful and know your orbitals are aligned correctly, plotting a band structure with these labels will be pointless.

zrqustc commented 4 years ago

Thanks for your reply. I think px,py, and pz calculated by projecting the Kohn-Sham wave functions onto spherical harmonics. Please see the PROCAR. The atoms site is the center. So, we just get the weights of orbitals from PROCAR. We can plot the fat bands according to different orbitals of atoms.

utf commented 4 years ago

Hi @zrqustc, this is correct. But the orientation of the spherical harmonics is determined by the cartesian x, y, and z directions. If bonds between atoms do not fall exactly along the x, y, and z directions the px, py, and pz orbitals will not be aligned along the cartesian axes, so the lm-decomposed orbitals will not capture the orbitals correctly.

A better method would be to use the LOBSTER package, which can rotate the spherical harmonic orbitals for each site to maximize overlap between the projected atomic orbitals and the actual wave functions.

Pymatgen has recently added support for LOBSTER decomposed projected band structures which will be much more robust. For more details see:

https://github.com/materialsproject/pymatgen/blob/e9e5ad82482219d8568468416a0ff43da5501b95/pymatgen/io/lobster.py#L949

For sumo, I would be more inclined to add support for LOBSTER fatbands rather than Vasp lm-decomposed projected band structures (as mentioned in #60).

utf commented 4 years ago

I made a rough diagram indicating what I mean:

Screen Shot 2019-12-03 at 11 03 02 AM

Note this issue will also affect lm-decomposed density of states...

zrqustc commented 4 years ago

@utf That is great.Thanks for your clarification. Right now, I fully understand what you say. I will think about it. I thought we can directly get the weights from PROCAR. I will take a look at the module you mentioned. Thanks again.

SubhasmitaRay commented 2 years ago

Hi all, I want to plot all the orbitals associated with my materials in the band structure. How to do this? Kindly help.

Thanking you, Subhasmita