interpolated band different

Post here questions linked with issue while running the EPW code

Moderator: stiwari

Post Reply
fanchem
Posts: 15
Joined: Sat Feb 18, 2017 7:37 am
Affiliation:

interpolated band different

Post by fanchem »

Dear all,

I just noticed recently that the band obtained in EPW via keyword "band_plot" has some differences compared with the one obtained from wannier interpolation. The wannier interpolation is done also by EPW by setting keyword "wdata(1) = 'bands_plot = true'" and corresponding k-path.

I thought the EPW using the same interpolation algorithm for the electronic band structure. Where is the difference from?

Thanks,
Fanchem

hlee
Posts: 415
Joined: Thu Aug 03, 2017 12:24 pm
Affiliation: The University of Texas at Austin

Re: interpolated band different

Post by hlee »

Dear Fanchem:

In order to identify your issue, I need more information:
Could you provide your obtained band dispersions and all relevant inputs and outputs?

Sincerely,

H. Lee

fanchem
Posts: 15
Joined: Sat Feb 18, 2017 7:37 am
Affiliation:

Re: interpolated band different

Post by fanchem »

hlee wrote:
Thu Oct 29, 2020 3:17 pm
Dear Fanchem:

In order to identify your issue, I need more information:
Could you provide your obtained band dispersions and all relevant inputs and outputs?

Sincerely,

H. Lee
Dear Lee,

Thank you for your response.
The comparison between the band structure using the two methods in EPW is attached. The calculations were done with EPW 5.3.
Although they are close in energy, but from my understanding, they should be exactly identical to each other since they are interpolated using the same interpolation technique.

My input files are follow:

scf.in
&CONTROL
calculation='scf',
outdir='.',
prefix='mg2si',
pseudo_dir='/home/fanchem/oncvpp/rel-PZ',
verbosity='low',
wf_collect = .true.
etot_conv_thr=1.0D-6
forc_conv_thr=1.0D-5
tprnfor = .true.
tstress = .true.
/

&SYSTEM
ibrav=2,
celldm(1)=11.818416465386269,
nat=3,
ntyp=2,
ecutwfc=46,
occupations='fixed',
smearing='mp',
degauss=0.02d0,
/

&ELECTRONS
conv_thr=1d-010,
mixing_beta=0.7d0,
diagonalization = 'david'
/
&IONS
/
&CELL
press_conv_thr=0.1
/

ATOMIC_SPECIES
Mg 24.305000d0 Mg_ONCV_PZ-1.0_r.oncvpsp.upf
Si 28.085500d0 Si_ONCV_PZ-1.1_r.oncvpsp.upf

ATOMIC_POSITIONS {crystal}
Mg 0.7500000000d0 0.7500000000d0 0.7500000000d0
Mg 0.2500000000d0 0.2500000000d0 0.2500000000d0
Si 0.0000000000d0 0.0000000000d0 0.0000000000d0

K_POINTS {automatic}
16 16 16 0 0 0
nscf.in
&CONTROL
calculation='nscf',
outdir='.',
prefix='mg2si',
pseudo_dir='/home/fanchem/oncvpp/rel-PZ',
verbosity='low',
wf_collect = .true.
etot_conv_thr=1.0D-6
forc_conv_thr=1.0D-5
tprnfor = .true.
tstress = .true.
/

&SYSTEM
ibrav=2,
celldm(1)=11.818416465386269,
nat=3,
ntyp=2,
ecutwfc=46,
occupations='fixed',
smearing='mp',
degauss=0.02d0,
nbnd = 30
/

&ELECTRONS
conv_thr=1d-010,
mixing_beta=0.7d0,
diagonalization = 'david'
/
&IONS
/
&CELL
press_conv_thr=0.1
/

ATOMIC_SPECIES
Mg 24.305000d0 Mg_ONCV_PZ-1.0_r.oncvpsp.upf
Si 28.085500d0 Si_ONCV_PZ-1.1_r.oncvpsp.upf

ATOMIC_POSITIONS {crystal}
Mg 0.7500000000d0 0.7500000000d0 0.7500000000d0
Mg 0.2500000000d0 0.2500000000d0 0.2500000000d0
Si 0.0000000000d0 0.0000000000d0 0.0000000000d0

K_POINTS crystal
1000
0.00000000 0.00000000 0.00000000 1.000000e-03
0.00000000 0.00000000 0.10000000 1.000000e-03
0.00000000 0.00000000 0.20000000 1.000000e-03
0.00000000 0.00000000 0.30000000 1.000000e-03
0.00000000 0.00000000 0.40000000 1.000000e-03
0.00000000 0.00000000 0.50000000 1.000000e-03
......
epw.in
--
&inputEPW
prefix = 'mg2si'
outdir = './'

elph = .true.
epbwrite = .false.
epbread = .false.
epwwrite = .true.
epwread = .false.
kmaps = .false.
lpolar = .true.

wdata(8) = 'dis_num_iter = 2000'
! wdata(9) = 'dis_mix_ratio = 0.5'
wdata(10) = 'guiding_centres=true'
wdata(11) = 'use_ws_distance = .true.'
wdata(1) = 'bands_plot = true'
wdata(2) = 'begin kpoint_path'
wdata(3) = 'L 0.50000 0.50000 0.5000 G 0.00000 0.00000 0.0000'
wdata(4) = 'G 0.00000 0.00000 0.0000 X 0.50000 0.00000 0.5000'
wdata(5) = 'X 0.50000 0.00000 0.5000 W 0.50000 0.25000 0.7500'
wdata(6) = 'W 0.50000 0.25000 0.7500 G 0.00000 0.00000 0.0000'
wdata(7) = 'end kpoint_path'


nbndsub = 12
bands_skipped = 'exclude_bands = 1:8'

wannierize = .true.
num_iter = 2000
iprint = 2
dis_froz_max= 10
dis_win_min=-10
dis_win_max= 21.5
proj(1) = 'Si:s,p'
proj(2) = 'Mg:s,p'

elecselfen = .false.
phonselfen = .false.
a2f = .false.

fsthick = 2
dvscf_dir = './save/'

band_plot = .true.
filkf = "inp.kpt"
filqf = "inp.kpt"
lifc = .true.
asr_typ = 'crystal'

nk1 = 10
nk2 = 10
nk3 = 10

nq1 = 5
nq2 = 5
nq3 = 5
/
Thanks,
Fanchem
Attachments
comparison
comparison
compare.png (54.91 KiB) Viewed 3825 times

hlee
Posts: 415
Joined: Thu Aug 03, 2017 12:24 pm
Affiliation: The University of Texas at Austin

Re: interpolated band different

Post by hlee »

Dear Fanchem:

In your case, you are using "Minimal-distance replica selection method" by adding "'use_ws_distance = .true." when interpolating band structures in Wannier90 (W90).
So I think that you need to add "use_ws = .true." in your epw input for consistent comparison.

Also, there is something in EPW for constructing Hamiltonian in the fine Bloch basis and diagonalizing it which is not present in W90; please look at the subroutine of hamwan2bloch in EPW/src/wan2bloch.f90 (but I guess this yields negligible difference.)

Sincerely,

H. Lee

fanchem
Posts: 15
Joined: Sat Feb 18, 2017 7:37 am
Affiliation:

Re: interpolated band different

Post by fanchem »

hlee wrote:
Thu Oct 29, 2020 6:56 pm
Dear Fanchem:

In your case, you are using "Minimal-distance replica selection method" by adding "'use_ws_distance = .true." when interpolating band structures in Wannier90 (W90).
So I think that you need to add "use_ws = .true." in your epw input for consistent comparison.

Also, there is something in EPW for constructing Hamiltonian in the fine Bloch basis and diagonalizing it which is not present in W90; please look at the subroutine of hamwan2bloch in EPW/src/wan2bloch.f90 (but I guess this yields negligible difference.)

Sincerely,

H. Lee
Dear Lee,

Thanks! It works!

Fanchem

fanchem
Posts: 15
Joined: Sat Feb 18, 2017 7:37 am
Affiliation:

Re: interpolated band different

Post by fanchem »

hlee wrote:
Thu Oct 29, 2020 6:56 pm
Dear Fanchem:

In your case, you are using "Minimal-distance replica selection method" by adding "'use_ws_distance = .true." when interpolating band structures in Wannier90 (W90).
So I think that you need to add "use_ws = .true." in your epw input for consistent comparison.

Also, there is something in EPW for constructing Hamiltonian in the fine Bloch basis and diagonalizing it which is not present in W90; please look at the subroutine of hamwan2bloch in EPW/src/wan2bloch.f90 (but I guess this yields negligible difference.)

Sincerely,

H. Lee
Dear Lee,

A follow-up of the problem: if I remove the "use_ws_distance = .true." and set use_ws = .false. in EPW, the problem shows up again as in the attachment. My epw input is below. Is there any way so solve this issue?
compare_without_ws
compare_without_ws
compare_new.png (52.03 KiB) Viewed 3799 times
In addition, if I set use_ws =.true. for EPW calculation (with tag "wdata(11) = 'use_ws_distance = .true.'" still commented), the EPW interpolated band match exactly with that from wannier run (see below). Does it mean we need always set use_ws =.true. for all epw calculations? Is there any method we could get exactly identical band structure without using use_ws =.true.?
compare_wo_with.png
compare_wo_with.png (59.3 KiB) Viewed 3796 times
Thanks,
Fanchem
epw.in
--
&inputEPW
prefix = 'mg2si'
outdir = './'

elph = .true.
epbwrite = .false.
epbread = .false.
epwwrite = .true.
epwread = .false.
kmaps = .false.
lpolar = .true.

wdata(8) = 'dis_num_iter = 2000'
! wdata(9) = 'dis_mix_ratio = 0.5'
wdata(10) = 'guiding_centres=true'
! wdata(11) = 'use_ws_distance = .true.'
wdata(1) = 'bands_plot = true'
wdata(2) = 'begin kpoint_path'
wdata(3) = 'L 0.50000 0.50000 0.5000 G 0.00000 0.00000 0.0000'
wdata(4) = 'G 0.00000 0.00000 0.0000 X 0.50000 0.00000 0.5000'
wdata(5) = 'X 0.50000 0.00000 0.5000 W 0.50000 0.25000 0.7500'
wdata(6) = 'W 0.50000 0.25000 0.7500 G 0.00000 0.00000 0.0000'
wdata(7) = 'end kpoint_path'


nbndsub = 12
bands_skipped = 'exclude_bands = 1:8'

wannierize = .true.
num_iter = 2000
iprint = 2
dis_froz_max= 10
dis_win_min=-10
dis_win_max= 21.5
proj(1) = 'Si:s,p'
proj(2) = 'Mg:s,p'

elecselfen = .false.
phonselfen = .false.
a2f = .false.

fsthick = 2
dvscf_dir = '../save/'

band_plot = .true.
filkf = "inp.kpt"
! filqf = "inp.kpt"
lifc = .true.
asr_typ = 'crystal'
! nkf1 = 40
! nkf2 = 40
! nkf3 = 40
!
nqf1 = 4
nqf2 = 4
nqf3 = 4

nk1 = 10
nk2 = 10
nk3 = 10

nq1 = 5
nq2 = 5
nq3 = 5
/

hlee
Posts: 415
Joined: Thu Aug 03, 2017 12:24 pm
Affiliation: The University of Texas at Austin

Re: interpolated band different

Post by hlee »

Dear Fanchem:

The reason is that as you can see below, in Wannier90, use_ws_distance = .true in default, but in EPW, use_ws = .false. in default.

From parameters.F90 in Wannier90 src directory

Code: Select all

    use_ws_distance = .true.
    call param_get_keyword('use_ws_distance', found, l_value=use_ws_distance)
From epw_readin.f90 in EPW/src directory

Code: Select all

use_ws     = .FALSE.
Sincerely,

H. Lee

fanchem
Posts: 15
Joined: Sat Feb 18, 2017 7:37 am
Affiliation:

Re: interpolated band different

Post by fanchem »

Dear Lee,

Thank you so much for your help.

Best,
Fanchem

Post Reply