band-unfolding / banduppy

Python version ofthe BandUP code
GNU General Public License v3.0
17 stars 7 forks source link

Unfolding non-collinear supercell #23

Closed Amithigh closed 4 months ago

Amithigh commented 6 months ago

Hello Banduppy developers, I've been using Banduppy to unfold band structures obtained from non-collinear and collinear spin-polarized supercell calculations conducted with Quantum Espresso. However, upon examining the unfolded band structure, I'm noticing some suspicious results. Can Banduppy be reliably used for unfolding such systems? Are there any specific precautions or adjustments I should consider when dealing with non-collinear and collinear spin-polarized calculations? Any insights or recommendations would be immensely helpful. Thank you for your assistance!

stepan-tsirkin commented 6 months ago

Short answer : yes, banduppy can be equally used for collinear and non-collinear.

What kind of suspicious results are you getting?

Amithigh commented 4 months ago

Thank you for your prompt response. Apologies for my delayed reply.

I'm currently attempting to unfold the band structure of a spin-vortex crystal (SVC) antiferromagnetic order in CaKFe4As4 iron based superconductor using a supercell that is √2√21 times larger than the primitive cell. However, I've observed an excessive number of bands in the unfolded structure and significant deviations compared to what we would expect in the folded antiferromagnetic Brillouin zone. However, the band structure matches exactly in the case of non-magnetic supercell.

Here is the expectation (However, the obtained band structure may be correct if the magnetic order completely reconstructs the electronic structure) in the folded cell: Screenshot from 2024-04-23 13-08-00

Attached, you'll find the banduppy file used for this analysis along with the resulting band structure. Here G is the high symmetry $\Gamma$ point. unfold_fatband

Below is the part of relevant banduppy file:unfold_path=banduppy.UnfoldingPath( supercell= [[1 , -1 , 0 ], [1 , 1 , 0], [0 , 0 , 1]] , # How the SC latticevectors are expressed in the PC basis (should be a 3x3 array of integers) pathPBZ=[ [0,0,0],[0.5,0.5,0.0], [0.0,0.0,0.0], [0.5,0.5,0.0]], # Path nodes in reduced coordinates in the primitive BZ. if the segmant is skipped, put a None between nodes nk=(60,60,60), # number of k-points in each non-skipped segment. Or just give one number, if they are equal labels="GMGM" )

unfold=banduppy.Unfolding( supercell= [[1 , -1 , 0 ], [1 , 1 , 0], [0 , 0 , 1]] , # How the SC latticevectors are expressed in the PC basis (should be a 3x3 array of integers) kpointsPBZ = np.array([np.linspace(0.0,0.5,12)]*3).T # just a list of k-points (G-L line in this example) )

kpointsPBZ=unfold_path.kpoints_SBZ_str() # a string containing the k-points to beentered into the PWSCF input file after 'K_POINTS crystal ' line. maybe transformed to formats of other codes if needed

print(kpointsPBZ)

try: print ("unpickling unfold") unfold_path=pickle.load(open("unfold-path.pickle","rb")) unfold=pickle.load(open("unfold.pickle","rb")) except Exception as err: print("error while unpickling unfold '{}', unfolding it".format(err)) try: print ("unpickling bandstructure") bands=pickle.load(open("bandstructure.pickle","rb"))
print ("unpickling - success") except Exception as err: print("Unable to unpickle bandstructure '{}' \n Reading bandstructurefrom .save folder ".format(err)) try:

This line reads the bandstructure written by QE into an pobject bandStructure of the irrep code.

        bands=banduppy.BandStructure(code="espresso", prefix="1144")