Absorption below band gap

Hi everyone,
I calculated the frequency dependent dielectric function with the optic tool using abinit 8.10.1 for Silicon mostly following the tutorial (https://docs_810.abinit.org/tutorial/optic/).
However, the absorption spectrum in the linopt.out file shows relatively high absorption way below the band gap (~10^2).
The paper I’m using as a reference is 10.1021/acs.jpclett.6b02682 (Fig. 4a).
I am aware, that they use VASP.

Investigating this, I noticed that this is the case, because the imaginary part of the dielectric function does not vanish properly below the band gap.
I tried different values for the scissor correction and the broadening but the imaginary part is always of the order 10^-4-10^-3, which is apparently not low enough.

In the paper 10.1016/j.commatsci.2019.109315 (Fig. 4) they demonstrate setting the broadening, which they also refer to as complex shift, to zero. This apparently changes the absorption spectrum significantly.
This confuses me, because of two things:

  1. My understanding of the complex shift is, that it is a parameter used in the Kramers-Kronig relations in order to prevent the denominator from vanishing.
    It does not have a broadening effect in my experience (I tried this with the VASP code)
  2. As stated, I varied the broadening, which did not have a significant effect on the absorption spectrum.

My question regarding all this is:
Is there a way to get rid of the absorption below the band gap?

Here are my input files:
1. relaxation:

#Prepare the computation of linear optic properties (for the imaginary spectrum only)
#of Si crystal : ground-state with few bands,
#then non-SCF with a larger number of bands, then ddk for different directions
#Note that the k point sampling shoud be finer for significant results. The cut-off energy is also too low.

ndtset 6

#First dataset : SC run with kpoints in the IBZ
nband1 4
nstep1 25
kptopt1 1
nbdbuf1 0
prtden1 1
getden1 0
getwfk1 0

#Second dataset : NSC run with large number of bands, and points in the IBZ
iscf2 -2
nband2 9 ! Minimal number of bands for linear optics (imaginary part of the spectrum)
nstep2 25
kptopt2 1
getwfk2 1
getden2 1

#Third dataset : NSC run with large number of bands, and points in the the full BZ
iscf3 -2
nband3 9 ! Minimal number of bands for linear optics (imaginary part of the spectrum)
nstep3 25
kptopt3 2 ! Time-reversal symmetry can be used in the present implementation for linear optics
getwfk3 2
getden3 1

#Fourth dataset : ddk response function along axis 1
iscf4 -3
nband4 9 ! Minimal number of bands for linear optics (imaginary part of the spectrum)
nstep4 1
nline4 0
kptopt4 2 ! Time-reversal symmetry can be used in the present implementation for linear optics
prtwf4 3

nqpt4 1
qpt4 0.0d0 0.0d0 0.0d0
rfdir4 1 0 0
rfelfd4 2
getwfk4 3

#Fifth dataset : ddk response function along axis 2
iscf5 -3
nband5 9 ! Minimal number of bands for linear optics (imaginary part of the spectrum)
nstep5 1
nline5 0
kptopt5 2 ! Time-reversal symmetry can be used in the present implementation for linear optics
prtwf5 3

nqpt5 1
qpt5 0.0d0 0.0d0 0.0d0
rfdir5 0 1 0
rfelfd5 2
getwfk5 3

#Sixth dataset : ddk response function along axis 3
iscf6 -3
nband6 9 ! Minimal number of bands for linear optics (imaginary part of the spectrum)
nstep6 1
nline6 0
kptopt6 2 ! Time-reversal symmetry can be used in the present implementation for linear optics
prtwf6 3

nqpt6 1
qpt6 0.0d0 0.0d0 0.0d0
rfdir6 0 0 1
rfelfd6 2
getwfk6 3

#Data common to all datasets
nshiftk 4
shiftk 0.5 0.5 0.5
0.5 0.0 0.0
0.0 0.5 0.0
0.0 0.0 0.5
ngkpt 3*24 ! This is much too low : should be at least 24x24x24

acell 3*10.217
diemac 12.0

ecut 50.00 ! This is also too low
pawecutdg 60.00
pawxcdev 0
natom 2
nbdbuf 2

ntypat 1
rprim 0 .5 .5 .5 0 .5 .5 .5 0
xred 30.00d0
3
0.25d0

typat 1 1 tolwfr 1.e-20
znucl 14

## After modifying the following section, one might need to regenerate the pickle database with runtests.py -r
#%%
#%% [setup]
#%% executable = abinit
#%% need_cpp_vars = !HAVE_MPI_IO_DEFAULT
#%% test_chain = t41.in, t42.in
#%% [files]
#%% files_to_test =
#%% t41.out, tolnlines = 0, tolabs = 0.0, tolrel = 0.0, fld_options = -easy
#%% psp_files = 14si.pspnc
#%% [paral_info]
#%% max_nprocs = 2
#%% [extra_info]
#%% authors = Y. Gillet
#%% keywords = NC, DFPT, DDK
#%% description = Silicon, DDK computation to prepare ‘optic’
#%% topics = Optic
#%%

2. optic:
&FILES
ddkfile_1 = ‘Sioptico_1_DS4_1WF7’,
ddkfile_2 = ‘Sioptico_1_DS5_1WF8’,
ddkfile_3 = ‘Sioptico_1_DS6_1WF9’,
wfkfile = ‘Sioptico_1_DS3_WFK’
/
&PARAMETERS
broadening = 0.005,
domega = 0.0003,
maxomega = 0.3,
scissor = 0.045,
tolerance = 0.002
/
&COMPUTATIONS
num_lin_comp = 1,
lin_comp = 11,
num_nonlin_comp = 0,
nonlin_comp = 0,
num_linel_comp = 0,
num_nonlin2_comp = 0,
/

## After modifying the following section, one might need to regenerate the pickle database with runtests.py -r
#%%
#%% [setup]
#%% executable = optic
#%% test_chain = toptic_1.in, toptic_2.in
#%% need_cpp_vars = !HAVE_MPI_IO_DEFAULT
#%% [files]
#%% files_to_test =
#%% toptic_2_0001_0001-linopt.out, tolnlines= 0, tolabs= 0.000e+00, tolrel= 0.000e+00, fld_options = -easy;
#%% toptic_2_0001_0002_0003-ChiTotRe.out, tolnlines= 16, tolabs= 7.000e-04, tolrel= 7.000e-04, fld_options = -easy;
#%% toptic_2_0001_0002_0003-ChiTotIm.out, tolnlines= 16, tolabs= 4.000e-04, tolrel= 2.000e-04, fld_options = -easy
#%% [paral_info]
#%% max_nprocs = 4
#%% [extra_info]
#%% authors = S. Sharma, X. Gonze
#%% keywords =
#%% description = Input file for optic code.
#%%

Hi everyone,
it’s been a while now. Is there anything wrong with my question?
I would appreciate some feedback!