Dear Yuan,
The residuals are the linear combination of the dipole matrix elements weighted by the component of the exciton wave function. In a standard calculation, the "right" residual is just the complex conjugate of the "left" residual, so that their product gives you intensity of the exciton peak in the absorption spectrum. (This is also the quantity printed under "strength" or "intensity" by
ypp -e s).
In formulas we have:
formula2.png
Where \lambda is the exciton index and cvk the conduction-valence-kpoint indices of the single-particle transitions. A is the exciton weight coming from the BSE Hamiltonian eigenvector, d the dipole matrix element, and eps_2 the imaginary part of the dielectric function.
Now, A_cvk^\lambda = <\lambda | cvk > is also the coefficient which allows to pass from the single-particle basis to the exciton one. Normally "cvk" is grouped into a simpler "transition index" t, so that you have A_t^\lambda = <\lambda | t >. In order to decompose t in its single-particle components the variable BS_TABLE is used. For each t, BS_TABLE contains the indices of the kpoint, valence and conduction which correspond to that transition. This is an array with N_t elements, with the following ordering:
t -> [ k, v, c]
In newer versions of yambo, the table contains also the spin polarisation of the conduction and valence bands, as:
t -> [ k, v, c, s_c, s_v ]
If you want to read this quantities easily and know a bit of python, I suggest using
yambopy. (How to install
here).
With yambopy, you can read residuals and table easily, as in this example script:
Code: Select all
from yambopy import *
ns_db1='SAVE/ns.db1'
exc_db='bse/ndb.BS_diago_Q1'
ylat = YamboLatticeDB.from_db_file(filename=ns_db1)
yexc = YamboExcitonDB.from_db_file(ylat,filename=exc_db)
# BS_TABLE
print( yexc.table )
# Residuals
print( yexc.l_residual )
print( yexc.r_residual )
# Normalised intensity
print( yexc.get_intensities() )
Cheers,
Fulvio