Page 1 of 1

Real part of g is larger than |g| and |g_sym| in DFPT calculation?

Posted: Fri Dec 05, 2025 3:45 am
by jack
Dear developer,

I have observed that the real part of g is larger than |g|. The relevant input and output are listed below. After examining the elphon.f90 file, I noted that |g| is printed as ryd2mev * epc_unsym(ibnd, jbnd, nu) at line 1716, where epc_unsym(ibnd, jbnd, nu) equals to sqrt(gamma/(2*sqrt(omega)). Here, gamma is defined as the sum over mu and vu of REAL(CONJG(dyn(mu, nu)) * el_ph_sum(mu, vu) * dyn(vu, nu)) at line 1559.

Meanwhile, the real part of g, Real(g), is printed as ryd2mev * epc_real(ibnd, jbnd, nu), where epc_real(ibnd, jbnd, nu) is defined as REAL(gamma_cmplx) / (DSQRT(2.d0) * omega) at line 1577, where, gamma_cmplx equals to the sum over mu of CONJG(dyn(mu, nu)) * el_ph_sum_cmplx(mu, 1) at line 1564. In the elphon.f90 file, el_ph_sum(mu, vu) is defined as CONJG(el_ph_mat2(jbnd, ibnd, ik2, ipert)) * el_ph_mat2(jbnd, ibnd, ik2, jpert) at line 1541, and el_ph_sum_cmplx(mu, 1) is defined as el_ph_mat2(jbnd, ibnd, ik2, jpert) at line 1544. If I understand correctly, the gamma equals to Σ(conj(τ)×conj(<n,k|∂V/∂R|m,k'>)×(<n,k|∂V/∂R|m,k'>)×τ), and gamma_complx equals to Σ(conj(τ)×(<n,k|∂V/∂R|m,k'>)), here τ is polarization vector. It can be seen that |gamma| is not equal to |gamma_complx|^2. Thus, sqrt(|gamma|) is not equal to |gamma_complx|. Furthermore, the factor of |g| is sqrt(1/(2*sqrt(omega)) at line 1575 and 1576, while the factor of Real(g) is sqrt(1/(2*omega)) at line 1577.
The version of qe is 7.5.
The relevant code section is located approximately between lines 1534 and 1727 of elphon.f90.

If there is any error in my interpretation or in the code itself, I would appreciate your guidance.
*************************
&inputph
prefix = 'blac'
outdir = './'
ldisp = .true.
fildyn = 'blac.dyn.xml'
fildvscf = 'dvscf'
tr2_ph = 1.0d-19
q_in_band_form = .true.
qplot = .true.
!q_in_cryst_coord = .true.
electron_phonon = 'prt'
kx = 0.0
ky = 0.0
kz = 0.0
/
5
0.0 0.0 0.0 10
0.5 0.0 0.0 10
0.5 0.7002 0.0 10
0.0 0.7002 0.0 10
0.0 1.0 0.0 1
***********************
ibnd jbnd imode enk[eV] enk+q[eV] omega(q)[meV] |g_sym|[meV] |g|[meV] Re(g)[meV] Im(g)[meV]
------------------------------------------------------------------------------
1 1 1 -19.9698 -19.9698 -0.0378593392 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
1 1 2 -19.9698 -19.9698 0.1277064162 0.0000000000E+00 0.0000000000E+00 -0.4965663961E-06 0.1797721380E-09
1 1 3 -19.9698 -19.9698 0.1752685446 0.1120048290E-01 0.1120048290E-01 0.3120651280E+01 -0.3736982390E-09
************************

Re: Real part of g is larger than |g| and |g_sym| in DFPT calculation?

Posted: Mon Jan 26, 2026 10:32 pm
by kfluo
Hi Jack,

Thanks for reporting the issue. As you noticed, the newly added entries |g|, Re(g), and Im(g) are provided only as additional information about the electron–phonon coupling. The current |g_sym| corresponds to the symmetrized |g| that was reported previously; see the discussion here: viewtopic.php?t=5970

The problem with Re(g) and Im(g) originated from an implementation mistake, and we have fixed it. More details are available in the EPW repo: https://gitlab.com/epw/q-e/-/merge_requests/150

With the corrections, both real and imaginary parts of the g should not be larger than |g|.

I hope it helps.

Best,
Kaifa