exc-pol self-consistent calc converges to 0.0 eV

Post here questions linked with issue while running the EPW code

Moderator: stiwari

Post Reply
Agathyan
Posts: 18
Joined: Thu Jul 10, 2025 4:13 am
Affiliation: Pondicherry University

exc-pol self-consistent calc converges to 0.0 eV

Post by Agathyan »

Dear all,

I am attempting to calculate the exciton-polaron self-energy using EPW v6.0. First epw1 run done successfully.

When I run the restart step to calculate the exciton-polaron properties (epw2.in with explrn = .true.), the self-consistent calculation converges immediately after 2 iterations, returning exactly 0.0 for both the Eigenvalue and Total Energy. The run then completes and exits normally without any crash or error message.

Could you help me understand why the initial exciton states are being read or evaluated as zero?

epw2.out:

Code: Select all

Start the excitonic polaron self-consistent calculation.
     Iteration    Eigenvalue (eV)    Total Energy (eV)    Error (eV).
         1          0.00000000          0.00000000
         2          0.00000000          0.00000000          0.00000000
     Convergence achieved. The converged eigenvalue and total energy are:           0.00000000          0.00000000
     Q point holding the lowest-energy exciton:           0.00000000          0.00000000          0.00000000
     Total energy referenced to the lowest-energy exciton at Q=0:           0.00000000

Below are my input files:

epw1.in

Code: Select all

&inputepw
  prefix      = 'AB'
  outdir      = './'
  dvscf_dir   = './save/'

  elph        = .true. 
  epwwrite    = .true.
  epwread     = .false.
  epbwrite    = .true.
  epbread     = .false.
  etf_mem     = 0
  epw_memdist = .true.

  wannierize   = .true.
  eig_read     = .true.
  nbndsub      = 12 
  num_iter     = 20000
  iprint       = 2

  proj(1)      = 'A : s, p'
  proj(2)      = 'B  : s, p'

  dis_win_max  = 6.872429
  dis_froz_max = 3.013135
  dis_froz_min = -9.391191
  dis_win_min  = -22.338782
  
  wdata(1)     = 'bands_plot = .true.'
  wdata(2)     = 'begin kpoint_path'
  wdata(3)     = 'G 0.0000 0.0000 0.0000 M 0.5000 0.0000 0.0000'
  wdata(4)     = 'M 0.5000 0.0000 0.0000 K 0.3333 0.3333 0.0000'
  wdata(5)     = 'K 0.3333 0.3333 0.0000 G 0.0000 0.0000 0.0000'
  wdata(6)     = 'end kpoint_path'
  wdata(7)     = 'bands_plot_format = gnuplot xmgrace'
  wdata(8)     = 'guiding_centres = .true.'
  wdata(9)     = 'dis_num_iter      = 10000'
  wdata(10)    = 'dis_conv_window  = 10'
  wdata(11)    = 'dis_conv_tol     = 1.0e-9'
  wdata(12)    = 'conv_window  = 10'
  wdata(13)    = 'conv_tol     = 1.0e-9'

  wannier_plot = .true.
  wannier_plot_supercell = 6 6 2
  wannier_plot_radius = 4.0

  lpolar                 = .true. 
  exciton                = .true.
  explrn                 = .false.

  negnv_explrn = 20 
  nbndv_explrn = 6   
  nbndc_explrn = 6   

  nk1 = 10
  nk2 = 10
  nk3 = 1 
  nq1 = 10
  nq2 = 10
  nq3 = 1
  
  asr_typ = 'crystal'
  use_ws  = .true.  
  lifc    = .false.

  band_plot              = .true.
  filkf                  = './path.kpt'
  filqf                  = './path.kpt'
/
epw2.in

Code: Select all

&inputepw
  prefix                 = 'AB'
  outdir                 = './'
  dvscf_dir              = './save/'

  elph         = .true.
  epbwrite     = .false.
  epbread      = .false.
  epwwrite     = .false.
  epwread      = .true.
  etf_mem      = 0

  wannierize   = .false.
  nbndsub      = 12

  lpolar       = .true.  
  exciton      = .true.
  explrn       = .true.

  negnv_explrn = 20 
  nbndv_explrn = 6   
  nbndc_explrn = 6   

  init_plrn    = 5
  niter_plrn   = 500
  conv_thr_plrn = 1.0d-6

  nk1                    = 10
  nk2                    = 10
  nk3                    = 1
  nq1                    = 10
  nq2                    = 10
  nq3                    = 1

  band_plot              = .true.
  filkf                  = './path_interp.kpt'
  filqf                  = './path_interp.kpt'

  use_ws  = .true.  
/
Agathyan
Posts: 18
Joined: Thu Jul 10, 2025 4:13 am
Affiliation: Pondicherry University

Re: exc-pol self-consistent calc converges to 0.0 eV

Post by Agathyan »

Dear all,

I tried to find the root cause of this issue. The issue stems from the assumption of dimension in EPW's exphonon.f90 file when reading the BerkeleyGW HDF5 eigenvector output in the epw2 step.

In the subroutine read_Acv_all(), the code is set to receive the expected dimensions of the HDF5 array as: dims=(/2, 1, nbndv_explrn, nbndc_explrn, nktotf_f, negnv_explrn, 1/)

Here, it assumes the HDF5 file will always contain both Real and Imaginary components (Notice the first parameter in dims). This is true if the absorption step runs in full BSE mode or uses the complex executable.

However, if the default [Tamm-Dancoff Approximation (TDA)] absorption calculation using the real executable is run (as in my case), BGW writes only 1 component to the HDF5 file.

Hence, I think that EPW fails silently when it requests a 2-component from a 1-component dataset. Consequently, the matrix elements remain initialised as exactly zero, leading to an unphysical 0.0 eV polaron binding energy.

Could you kindly confirm whether this is the issue?

P.S.: I found this assumption in the subroutine to be the same in EPW 6.0 & EPW 6.1 versions.
Post Reply