Exact meaning of Strength from sort_and_report

Anything regarding the post-processing utility (e.g. excitonic wavefunction analysis) is dealt with in this forum.

Moderators: Davide Sangalli, Daniele Varsano, andrea marini

User avatar
Daniele Varsano
Posts: 2452
Joined: Tue Mar 17, 2009 2:23 pm
Contact:

Re: Exact meaning of Strength from sort_and_report

Post by Daniele Varsano » Tue Sep 08, 2020 4:19 pm

Dear Fadıl,

it is not straightforward as the summation is done using linear algebra.
In /yambo/src/bse/K_diago_hermitian_residuals.F

you have the following loop.

Code: Select all

tmp_res = BSS_dipoles*sqrt(BSS_eh_f)
...
do i_eh=1,BSS_n_eig
   !
   if (.not.px%element_1D(i_eh)) cycle
   !
   BS_R_left(i_eh) =V_dot_V_omp(BS_H_dim,tmp_res,conjg(BS_mat(:,i_eh)))
   BS_R_right(i_eh)=conjg(BS_R_left(i_eh))
   !
   if (trim(global_gauge)=="velocity") then
     BS_R_left(i_eh) = BS_R_left(i_eh) *BS_E_real(i_eh)
     BS_R_right(i_eh)= BS_R_right(i_eh)*BS_E_real(i_eh)
   endif
   !
   call live_timing(steps=1)
   !
 enddo
where the eigenvector of the BSE are multiplied by the dipoles over all the transitions (bands and k points).
you can anyway make some checks with your script looking at:
/ypp/excitons/excitons_sort_and_report.F

where the strengths are calculated from the residuals by multplying with the BZ multiplication factor and 1/q0^2:

Code: Select all

Residuals(:) = real(BS_R(:)*conjg(BS_R(:)),SP)
...
Residuals(:) = Residuals(:)*real(spin_occ,SP)/(2._SP*pi)**3*d3k_factor*4._SP*pi/q0_def_norm**2*HA2EV
And maybe you need to pay attention if you have degenerate excitons as in this case all is summed up.
In order to avoid this you can set in your ypp input:

Code: Select all

Degen_Step=0. eV
Best,
Daniele
Dr. Daniele Varsano
S3-CNR Institute of Nanoscience and MaX Center, Italy
MaX - Materials design at the Exascale
http://www.nano.cnr.it
http://www.max-centre.eu/

Fadil
Posts: 3
Joined: Sun May 24, 2020 1:56 pm

Re: Exact meaning of Strength from sort_and_report

Post by Fadil » Mon Sep 14, 2020 9:02 pm

Dear Daniele,

Thank you for your response. I have already eliminated the possible degenerate exciton problem by reducing the Degen_Step value.
I'm still having trouble calculating the exact oscillator strength values.

If I understand you well, I need to obtain the following arrays (neglecting the prefactor and the normalization factor);

BS_R_right(i) =\sum_k BS_mat(k,i) * conjg( BSS_dipoles(k) )
BS_R_left(i) = conjg( BS_R_right(i) )

I think they define the formula given in Equation 23 in the article 'yambo: An ab initio tool for excited state calculations';

\sum_i BS_R_right(i) * BS_R_left(i) = (\sum_v,c,k conj(<c|r|v>) * A(cv)_lambda) * (\sum_v',c',k' <c'|r|v'> * conj(A(c'v')_lambda))

the dimension of these arrays should be v*c*k. Please correct me if I'm wrong about this part.

Then, I would like to know how can I extract BS_R_left/right(i) arrays?
Previously, I thought I can obtain <c|r|v> and A(cv)_lambda values by ypp.
However, ypp gives excitonic weights; |A(cv)_lambda|^2.
Is it possible to obtain real and imaginary values of A(cv)_lambda for all transitions using ypp?

Otherwise how can I change the code so that the code writes BS_R_left/right(i) values?
Dr. Fadıl İYİKANAT
ICFO-The Institute of Photonic Sciences
Barcelona-SPAIN

User avatar
Daniele Varsano
Posts: 2452
Joined: Tue Mar 17, 2009 2:23 pm
Contact:

Re: Exact meaning of Strength from sort_and_report

Post by Daniele Varsano » Tue Sep 15, 2020 8:11 am

Dear Fadıl,
Is it possible to obtain real and imaginary values of A(cv)_lambda for all transitions using ypp?
You can add a write directive in the ypp source:
ypp/excitons/excitons_amplitudes.F

Code: Select all

77    do neh = 1,BS_H_dim
 78      !
 79      dip_factor=1._SP
 80      !
 81      !if(l_weight_with_dipoles) then
 82       ikbz  = BSS_eh_table(neh,1)
 83       iv    = BSS_eh_table(neh,2)
 84       ic    = BSS_eh_table(neh,3)
 85      !  i_spin= spin(BSS_eh_table(neh,:))
 86      !  dip_factor=conjg(DIP_projected(ic,iv,ikbz,i_spin))*DIP_projected(ic,iv,ikbz,i_spin)
 87      !endif
 88      !
 89      do i_l=BS_E_degs(i_l_grp),BS_E_degs(i_l_grp)+n_lambda_deg-1
 90        A_weight(neh)=A_weight(neh)+BS_mat(neh,i_l)*conjg(BS_mat(neh,i_l))*dip_factor
--->.     write() i_lambda,ik,iv,iv, real(BS_mat(neh,i_l)), aimag(BS_mat(neh,i_l)
 91      enddo
 92      !
 93    enddo
Best,
Daniele
Dr. Daniele Varsano
S3-CNR Institute of Nanoscience and MaX Center, Italy
MaX - Materials design at the Exascale
http://www.nano.cnr.it
http://www.max-centre.eu/

Post Reply