[Wien] Differences in band character plotting using two methods under rotated local basis

Gavin Abo gabo13279 at gmail.com
Tue Oct 15 13:27:31 CEST 2024


FYI, the "Program QTL - technical report" can be found in 
$WIENROOT/SRC_qtl/QTL-tehnical-report.pdf according to [1].

[1] 
https://www.mail-archive.com/wien@zeus.theochem.tuwien.ac.at/msg22157.html

On 10/15/2024 3:11 AM, pluto via Wien wrote:
> Dear Yichen,
>
> There is a document called "Program QTL - technical report" by P. 
> Novak, I think it is available at the WIEN2k website. I think this 
> document explains many details of qtl.
>
> Did you look at this document?
>
> Best,
> Lukasz
>
> On 2024-10-15 09:01, Peter Blaha wrote:
>> I'm pretty sure that the difference comes from the symmetrization
>> (i.e. averaging) over equivalent atoms in lapw2.
>> In lapw2 (l2main) there is an explicit loop over "mult", which is not
>> present in qtl (l2main).
>>
>> You may test this by reducing the symmetry and splitting your
>> equivalent atoms into 2 nonequivalent ones (labelling them eg. Fe1 and
>> Fe2; then follow the advise from sgroup.
>> With such a struct file, lapw2 with your rotation matrix should be
>> equivalent to qtl.
>>
>> PS: Could you send me a struct file  + a workflow , where the problems
>> with  x qtl -so -band (with lapw2-fermi error AND  missing case.in1c
>> file) appears.
>> Messages like "sometimes a problem occurs ..."  do not help me. This
>> points more to a user-error.
>>
>> Am 15.10.2024 um 06:57 schrieb Yichen Zhang:
>>> Dear Lukasz and Peter,
>>>
>>> I briefly looked into the code mainly for qtl in SRC_lapw2. I 
>>> realize that the differences in x lapw2 -band -qtl and x qtl -band 
>>> may not simply arise from the averaging (or maybe more properly 
>>> speaking, summation) of the equivalent atoms. I could be wrong due 
>>> to my limited understanding of the code. I have the following notes 
>>> and questions then regarding why band character results could be 
>>> different.
>>>
>>> 1) I notice that x qtl and x lapw2 use different code for partial 
>>> charges. x qtl has its own qtlmain.f, outp.f, split.f files and so 
>>> on in SRC_qtl. They are different code than in SRC_lapw2, despite 
>>> outputing qtl files in similar format. It seems very heavy work to 
>>> compare carefully how they differ in writing qtle in qtl and writing 
>>> qtlstore in lapw2.
>>>
>>> 2) Since lapw2 gives the confusing results, I further looked into 
>>> the relevant code in SRC_lapw2. Before that, an observation on the 
>>> lapw2 band qtl results is that the atom 2 px projected bands seem 
>>> very similar to the superposition of atom 2 px + atom 3 py from qtl 
>>> programme. This crossing similarity between atom 2 and 3 holds also 
>>> for like lapw2 atom 2 py = qtl atom 2 py + qtl atom 3 px, lapw2 atom 
>>> 3 px = qtl atom 3 px + qtl atom 2 py, and so on. This was a bit 
>>> strange.
>>>
>>> 3) Now coming to the work flow in lapw2 (which I could be wrong due 
>>> to limited reading of the code), it is mainly controlled by 
>>> l2main.F, which allocates qtlstore on the memory and calls 
>>> subroutines like csplit.f, psplit.f, etc. The actual case.qtl file 
>>> is written by SRC_lapw2/outp.f. From here, I could tell in line 297 
>>> of outp.f (version 23.2), 
>>> “TCATOM=qtlstore(0,jatom,jb,jk)*MULT(JATOM)”. Therefore, the orbital 
>>> weight is only multiplied by a constant, the multiplicity of the 
>>> atom. In my case here, MULT for all atoms are 2. Therefore, there 
>>> doesn’t seem to be “averaging” among equivalent atoms, but just 
>>> multiplied by its multiplicity, which shouldn’t cause px and py 
>>> mixing. Now since all the qtl results are read from qtlstore, the 
>>> place where I could find for writing qtlstore is in 
>>> SRC_lapw2/psplit.f. Particularly, for my case here with ISPLIT=8 for 
>>> all atoms, it seems to be related to the lines starting at line 139 
>>> of psplit.f (version 23.2), where IF ISPLIT(JATOM).EQ.8, PX, PY, and 
>>> PZ are calculated from APX, BPX, capx, acpx, cbpx, bcpx, etc. These 
>>> APX, BPX are further found to be calculated in SRC_lapw2/p3splt.f 
>>> that uses ALM and BLM. The p3splt.f seems to be called by csplit.f, 
>>> which is further called by l2main.F. There is one comment in 
>>> csplit.f near calling all these p, d, f split subroutines saying 
>>> ‘Create “CROSS”-partial charges’. I’m not quite sure what this means 
>>> by “CROSS” partial charges.
>>> Does this potentially correspond to the observation in 2) where 
>>> there are orbitals summed together in lapw2 qtl? I’m not sure if I’m 
>>> following the right thread of code here, or if indeed the 
>>> implementation of calculating APX, BPX, and so on led to some 
>>> summation of partial charges between different atoms on PX, PY, etc.
>>>
>>> 4) An additional note is that, in order to find symmetry operations 
>>> that relate equivalent atoms, I notice that SRC_lapw2 has specific 
>>> code and output file for that. SRC_lapw2/rotdef.f would produce 
>>> case.rotlm file. The rotlm shows the symmetry operation matrices. In 
>>> my case, in addition to identity matrix that maps to themselves, 
>>> they are
>>> 1.00000  0.00000  0.00000
>>> 0.00000 -1.00000  0.00000
>>> 0.00000  0.00000  -1.00000
>>> meaning a 2-fold axis along x, which is of course true reading from 
>>> the crystal structure. Case.rotlm doesn’t seem documented in the UG.
>>>
>>> 5) Indeed, z and x vectors in case.inq, if I remember correctly, are 
>>> in Cartesian coordinates. For my case here (orthorhombic), I rotated 
>>> it to the geometry to be convenient to compare with ARPES. I could 
>>> recall some previous discussions about vectors in case.inq for 
>>> hexagonal and rhombohedral systems from Luckasz, et al.
>>>
>>> I would be grateful to learning more about the workflow of qtl in 
>>> lapw2 here regarding 3) and being able to understand why the two 
>>> results were different in the subtle way described in 2).
>>>
>>> Best regards
>>> Yichen


More information about the Wien mailing list