Page 1 of 1

electronic wavefunctions used to define excitonic wavefunctions

Posted: Fri Dec 19, 2025 12:13 am
by milesj
Hello,

I'm attempting to implement something to project the excitonic states onto atomic orbitals, specifically something like

Code: Select all

<\phi_e \phi_h| \lambda> = \sum_t A_{t,lambda} <\phi_e|c_t,k_t><v_t,k_t|\phi_h>
It seems to me the overlaps <\phi_e|c_t,k_t>, <v_t,k_t|\phi_h> for the irreducible brillouin zone can either be interpreted from the atomic_proj.xml file output by quantum espresso's projwfc.x, or can be evaluated directly from the wavefunctions stored in the yambo SAVE directory, e.g. ns.wf_fragments_126_1 for k point 126, etc. I've done both of these and gotten some reasonable results.

The issue that I've run into, though, is that the A_{t,lambda} as given in the output file ndb.BS_diago_Q1 (specifically in BS_EIGENSTATES), are defined on the full brillouin zone, not the irreducible one. Naturally, I can apply the proper symmetry transformation on the spinor wavefunction at n,k to get the wavefunction at n,k' for symmetry-related k', but there is a gauge degree of freedom when doing this. Realistically, even if I do a computation without symmetry there's no guarantee that Yambo defines A_{t,lambda} |c_t,k_t><v_t,k_t| with exactly the same wavefunctions as those given in the SAVE directory with no change of phase whatsoever.

Does Yambo use some standard convention for this? Is there a way for me to directly access the wavefunctions used to define A_{t,lambda} |c_t,k_t><v_t,k_t|? Any advice is appreciated.

Best,
Miles

Re: electronic wavefunctions used to define excitonic wavefunctions

Posted: Fri Dec 19, 2025 9:35 am
by Davide Sangalli
Dear Miles,
this is indeed a subtle point.

The convention in yambo is based on the order in which the symmetries are stored.
You can check the subroutine src/bz_ops/k_expand.F

It loops on the points in the ibz. For every point, there is an internal loop over symmetries.
Given the symmetry, it takes the rotated point (re-projected in the 1st BZ in case the rotation brings it out), and checks if that point was already considered.
If not, it marks the given symmetry as the one to be used to reach it, and then proceeds with the next symmetry operation.

Also notice that the convention for the BZ is to use the "textbook one", i.e. the 1st BZ, that is the points with minimal distance from the origin in k-space in Cartesian coordinates.
Other codes usually define the BZ as [-0.5,0.5) or [0,1) in crystal coordinates.

Best,
D.