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

pluto pluto at physics.ucdavis.edu
Tue Oct 15 11:11:28 CEST 2024


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
>> _______________________________________________
>> Wien mailing list
>> Wien at zeus.theochem.tuwien.ac.at
>> http://zeus.theochem.tuwien.ac.at/mailman/listinfo/wien
>> SEARCH the MAILING-LIST at:  
>> http://www.mail-archive.com/wien@zeus.theochem.tuwien.ac.at/index.html


More information about the Wien mailing list