[Wien] fold2bloch: problem with K - path in hexagonal lattice

Rubel, Oleg rubelo at mcmaster.ca
Thu Nov 26 21:22:13 CET 2020


Dear Weronika,

You suspected the fold.m script, but it worked fine. Your original coordinates

M = (1/2, 0, 0)
K = (1/3, 1/3, 0)

transform (with fold 2x2x2) into

M -> G(0, 0, 0)
K -> K'(-1/3, 2/3, 0)

as per the illustration you sent. Then fold.m (and also fold2Bloch) wraps up coordinate into a range [-0.5, +0.5], i.e., K'(-1/3,2/3,0) -> K'(-1/3,-1/3,0). The wrapping is applied to _all_ coordinates in the path (not just start and end), which results in the following case.klist_band

         1         0         0         0         1 1.00
         2        -1         2         0        57 1.00
         3        -2         4         0        57 1.00
         4        -1         2         0        19 1.00
         5        -4         8         0        57 1.00
         6        -5        10         0        57 1.00
         7        -2         4         0        19 1.00
         8        -7        14         0        57 1.00
         9        -8        16         0        57 1.00
        10        -3         6         0        19 1.00
        11       -10        20         0        57 1.00
        12       -11        22         0        57 1.00
        13        -4         8         0        19 1.00
        14       -13        26         0        57 1.00
        15       -14        28         0        57 1.00
        16        -5        -9         0        19 1.00
        17       -16       -25         0        57 1.00
        18       -17       -23         0        57 1.00
        19        -6        -7         0        19 1.00
        20        -1        -1         0         3 1.00
END

The problem was in the plotting script (see GitHub for the updated version fold2Bloch-Wien2k/Utils/ubs_dots.m). The reason you had "gaps" in the plot has to do with rounding:

1/3 = 0.333333 + err

The original ubs_dots.m script had a tolerable deviation from a path set = eps (machine precision), which is too small to work in all cases. It fails, for coordinates such as (1/3, 1/3) since it is stored in case.f2b file as (0.333333, 0.333333, 0).

Now the script contains a new variable

roundOffErrK = 0.000001,

which is used to find the tolerable deviation from a desired path for an unfolded k point to be accepted and included in the plot.

As a test, I run hexagonal GaN supercell (2x2x2) and got folded (M-K) and unfolded band structures. (The Fermi energy was set at E_F=0 instead of a proper value, which puts it within the conductions band.) Band structures can be downloaded from this link (valid for 7 days):
https://wetransfer.com/downloads/609acabafc6a4d164a42701a84c0f86520201126200032/fb4badbb14116381c0391f963f367c6820201126200117/ccfa0c

Note that the folded (M-K) band structure has nothing in common with the unfolded one, since no point on the (M-K) path in the supercell unfolds to (M-K) path of the primitive cell.

Thank you for reporting a problem!


Best regards
Oleg

P.S. The ubs_dots_w2k_octave.m script is not updated yet

--
Oleg Rubel (PhD, PEng)
Department of Materials Science and Engineering
McMaster University
JHE 359, 1280 Main Street West, Hamilton, Ontario L8S 4L8, Canada
Email: rubelo at mcmaster.ca
Tel: +1-905-525-9140, ext. 24094
Web: http://olegrubel.mcmaster


More information about the Wien mailing list