Page 1 of 1

Possibility to calculate mobility for 2d materials using EPW

Posted: Thu Nov 15, 2018 6:28 am
by CHOU
Dear all,

I have been trying to use EPW to calculate mobility for 2d MoO3 for a long time. I saw that EPW could not calculate mobility for 2d materials and if wanted to do it, had to treat it as 3d, put more k points along the vacuum direction. So I used 8*8*2 mesh. But it always failed in the restart section.

Output file with the following information.
" Fermi Surface thickness = 10.000000 eV
This is computed with respect to the fine Fermi level -4.732800 eV
Only states between -14.732800 eV and 5.267200 eV will be included

Progression iq (fine) = 50/ 1024
Progression iq (fine) = 100/ 1024
Progression iq (fine) = 150/ 1024
Progression iq (fine) = 200/ 1024
Progression iq (fine) = 250/ 1024
Progression iq (fine) = 300/ 1024
Progression iq (fine) = 350/ 1024
Progression iq (fine) = 400/ 1024
Progression iq (fine) = 450/ 1024
Progression iq (fine) = 500/ 1024
Progression iq (fine) = 550/ 1024
Progression iq (fine) = 600/ 1024
Progression iq (fine) = 650/ 1024
Progression iq (fine) = 700/ 1024
Progression iq (fine) = 750/ 1024
Progression iq (fine) = 800/ 1024
Progression iq (fine) = 850/ 1024
Progression iq (fine) = 900/ 1024
Progression iq (fine) = 950/ 1024
Progression iq (fine) = 1000/ 1024
Creation of a restart point"

Then it could not continue the calculation and killed.
I wonder if there are any successful calculation for 2d materials. If putting more k-points along the vacuum direction and treating it as 3d, it must be okay. Or just maybe work it. And I also want to know the reason why epw couldn't calculate mobility for 2d materials.

If anyone could answer my questions, I would appreciate very much, since I have been confused for a long time.

Best wishes,
Chou

Re: Possibility to calculate mobility for 2d materials using

Posted: Mon Nov 19, 2018 5:33 pm
by sponce
Hello Chou,

Indeed it should be possible to do mobility in 2d materials by treating them as 3D.

In your case it seems there is a crash when the code try to write data to file (at the restart point).

Most likely if you change the input parameter "restart_freq=500" it will crash at 500 q-point.

Please give more info about the crash and maybe provide input/output to help assess the issue.

Best wishes,
Samuel

Re: Possibility to calculate mobility for 2d materials using

Posted: Wed Nov 21, 2018 8:55 am
by CHOU
Hello Samuel?

Thank you very much for your reply.
Here is my input file.

scf.in

&CONTROL
calculation='scf'
restart_mode='from_scratch'
outdir='./'
pseudo_dir='/home/k0116/k011622/pseudo'
prefix= 'MoO3'
etot_conv_thr=1.0D-09
forc_conv_thr=1.0D-09
wf_collect=.true.
tstress=.true.
tprnfor=.true.
/
&SYSTEM
ibrav=8
celldm(1)=6.954407601
celldm(2)=1.069190824
celldm(3)=7.625614123
nat=8
ntyp=2
ecutwfc=90.0
nbnd =60
nspin=1
/
&ELECTRONS
conv_thr=1.0e-09
mixing_beta=0.4
/
ATOMIC_SPECIES
Mo 95.94 Mo_ONCV_PBE-1.0.upf
O 15.999 O_ONCV_PBE-1.0.upf
ATOMIC_POSITIONS crystal
Mo 0.750000000 0.571487762 -0.054029957
Mo 0.250000000 0.428512280 0.054029957
O 0.250000000 0.497852060 -0.03412717
O 0.750000000 0.502148112 0.034127155
O 0.750000000 0.015453203 -0.046343122
O 0.250000000 0.984546858 0.046343102
O 0.750000000 0.531000473 -0.113557105
O 0.250000000 0.468999251 0.113557105
K_POINTS automatic
8 8 2 0 0 0

nscf.in

&CONTROL
calculation='nscf'
restart_mode='from_scratch'
outdir='./'
pseudo_dir='/home/k0116/k011622/pseudo'
prefix= 'MoO3'
etot_conv_thr=1.0D-09
forc_conv_thr=1.0D-09
wf_collect=.true.
tstress=.true.
tprnfor=.true.
/
&SYSTEM
ibrav=8
celldm(1)=6.954407601
celldm(2)=1.069190824
celldm(3)=7.625614123
nat=8
ntyp=2
ecutwfc=90.0
nbnd =60
nspin=1
nr1=50
nr2=54
nr3=380
/
&ELECTRONS
conv_thr=1.0e-09
mixing_beta=0.4
/
ATOMIC_SPECIES
Mo 95.94 Mo_ONCV_PBE-1.0.upf
O 15.999 O_ONCV_PBE-1.0.upf
ATOMIC_POSITIONS crystal
Mo 0.750000000 0.571487762 -0.054029957
Mo 0.250000000 0.428512280 0.054029957
O 0.250000000 0.497852060 -0.03412717
O 0.750000000 0.502148112 0.034127155
O 0.750000000 0.015453203 -0.046343122
O 0.250000000 0.984546858 0.046343102
O 0.750000000 0.531000473 -0.113557105
O 0.250000000 0.468999251 0.113557105
K_POINTS crystal
128
0.0 0.0 0.0 0.0078125
0.0 0.0 0.5 0.0078125
0.0 0.125 0.0 0.0078125
0.0 0.125 0.5 0.0078125
0.0 0.25 0.0 0.0078125
0.0 0.25 0.5 0.0078125
0.0 0.375 0.0 0.0078125
0.0 0.375 0.5 0.0078125
0.0 0.5 0.0 0.0078125
0.0 0.5 0.5 0.0078125
0.0 0.625 0.0 0.0078125
0.0 0.625 0.5 0.0078125
0.0 0.75 0.0 0.0078125
0.0 0.75 0.5 0.0078125
0.0 0.875 0.0 0.0078125
0.0 0.875 0.5 0.0078125
0.125 0.0 0.0 0.0078125
0.125 0.0 0.5 0.0078125
0.125 0.125 0.0 0.0078125
0.125 0.125 0.5 0.0078125
0.125 0.25 0.0 0.0078125
0.125 0.25 0.5 0.0078125
0.125 0.375 0.0 0.0078125
0.125 0.375 0.5 0.0078125
0.125 0.5 0.0 0.0078125
0.125 0.5 0.5 0.0078125
0.125 0.625 0.0 0.0078125
0.125 0.625 0.5 0.0078125
0.125 0.75 0.0 0.0078125
0.125 0.75 0.5 0.0078125
0.125 0.875 0.0 0.0078125
0.125 0.875 0.5 0.0078125
0.25 0.0 0.0 0.0078125
0.25 0.0 0.5 0.0078125
0.25 0.125 0.0 0.0078125
0.25 0.125 0.5 0.0078125
0.25 0.25 0.0 0.0078125
0.25 0.25 0.5 0.0078125
...



epw.in
--
&inputepw
prefix= 'MoO3'
amass(1)= 95.94
amass(2)= 15.999
outdir='./'
iverbosity =0
elph = .true.
epbwrite = .true.
epbread = .false.
lpolar = .true.
epwwrite = .true.
epwread = .false.
nbndsub = 28
nbndskip = 14

lifc = .true.
asr_typ = simple

!wannier control tags
wannierize = .true.
num_iter = 1000
iprint = 2
dis_win_min= -11.73
dis_win_max= 4.775
dis_froz_min = -11.73
dis_froz_max = -0.165

proj(1) = 'Mo:d'
proj(2) = 'O:p'

wdata(1) = 'bands_plot = .true.'
wdata(2) = 'begin kpoint_path'
wdata(3) = 'G 0.000 0.000 0.000 X 0.500 0.000 0.000'
wdata(4) = 'X 0.500 0.000 0.000 S 0.500 0.500 0.000'
wdata(5) = 'S 0.500 0.500 0.000 Y 0.000 0.500 0.000'
wdata(6) = 'Y 0.000 0.500 0.000 G 0.000 0.000 0.000'
wdata(7) ='end kpoint_path'
wdata(8) ='bands_plot_format = gnuplot'
wdata(9) ='dis_num_iter = 1000 ' !set maximum iteration number
wdata(10) = 'guiding_centres = .true.'
wdata(11) = 'num_print_cycles = 10'
wdata(12) = 'dis_mix_ratio = 1.0'
!wdata(13) = 'use_ws_distance = T'



!epc calculation control tags
elecselfen = .false.
phonselfen = .false.
a2f = .false.
fsthick = 10.0 ! eV
eptemp = 100 ! K
degaussw = 0.01 ! eV
efermi_read = .true.
fermi_energy = -4.7328 !K valence top
dvscf_dir = '/home/k0116/k011622/MoO3/2d/ph/phonon3/save'

mp_mesh_k =.true.
band_plot = .true
!Wannier fine mesh
filkf = '/home/k0116/k011622/MoO3/2d/mesh/path1.dat'
!nkf1 = 80 !replace by appropriate number
!nkf2 = 80 !replace by appropriate number
!nkf3 = 1 !replace by appropriate number
!if you want to calculate on specific path, please use
filqf = '/home/k0116/k011622/MoO3/2d/mesh/path1.dat'
!nqf1 = 120 !replace by appropriate number
!nqf2 = 120 !replace by appropriate number
!nqf3 = 1 !replace by appropriate number

!original mesh
nk1 =8
nk2 =8
nk3 =2
nq1 =8
nq2 =8
nq3 =2
/
50 cartesian
0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00
0.000000000000000E+00 0.000000000000000E+00 -0.655684895583589E-01
0.000000000000000E+00 0.116910842474645E+00 0.000000000000000E+00
0.000000000000000E+00 0.116910842474645E+00 -0.655684895583589E-01
0.000000000000000E+00 0.233821684949290E+00 0.000000000000000E+00
0.000000000000000E+00 0.233821684949290E+00 -0.655684895583589E-01
0.000000000000000E+00 0.350732527423935E+00 0.000000000000000E+00
0.000000000000000E+00 0.350732527423935E+00 -0.655684895583589E-01
0.000000000000000E+00 -0.467643369898580E+00 0.000000000000000E+00
0.000000000000000E+00 -0.467643369898580E+00 -0.655684895583589E-01
0.125000000000000E+00 0.000000000000000E+00 0.000000000000000E+00
0.125000000000000E+00 0.000000000000000E+00 -0.655684895583589E-01
0.125000000000000E+00 0.116910842474645E+00 0.000000000000000E+00
0.125000000000000E+00 0.116910842474645E+00 -0.655684895583589E-01
0.125000000000000E+00 0.233821684949290E+00 0.000000000000000E+00
0.125000000000000E+00 0.233821684949290E+00 -0.655684895583589E-01
0.125000000000000E+00 0.350732527423935E+00 0.000000000000000E+00
0.125000000000000E+00 0.350732527423935E+00 -0.655684895583589E-01
0.125000000000000E+00 -0.467643369898580E+00 0.000000000000000E+00
0.125000000000000E+00 -0.467643369898580E+00 -0.655684895583589E-01
0.250000000000000E+00 0.000000000000000E+00 0.000000000000000E+00
0.250000000000000E+00 0.000000000000000E+00 -0.655684895583589E-01
0.250000000000000E+00 0.116910842474645E+00 0.000000000000000E+00
0.250000000000000E+00 0.116910842474645E+00 -0.655684895583589E-01
0.250000000000000E+00 0.233821684949290E+00 0.000000000000000E+00
0.250000000000000E+00 0.233821684949290E+00 -0.655684895583589E-01
0.250000000000000E+00 0.350732527423935E+00 0.000000000000000E+00
0.250000000000000E+00 0.350732527423935E+00 -0.655684895583589E-01
0.250000000000000E+00 -0.467643369898580E+00 0.000000000000000E+00
0.250000000000000E+00 -0.467643369898580E+00 -0.655684895583589E-01
0.375000000000000E+00 0.000000000000000E+00 0.000000000000000E+00
0.375000000000000E+00 0.000000000000000E+00 -0.655684895583589E-01
0.375000000000000E+00 0.116910842474645E+00 0.000000000000000E+00
0.375000000000000E+00 0.116910842474645E+00 -0.655684895583589E-01
0.375000000000000E+00 0.233821684949290E+00 0.000000000000000E+00
0.375000000000000E+00 0.233821684949290E+00 -0.655684895583589E-01
0.375000000000000E+00 0.350732527423935E+00 0.000000000000000E+00
0.375000000000000E+00 0.350732527423935E+00 -0.655684895583589E-01
0.375000000000000E+00 -0.467643369898580E+00 0.000000000000000E+00
0.375000000000000E+00 -0.467643369898580E+00 -0.655684895583589E-01
-0.500000000000000E+00 0.000000000000000E+00 0.000000000000000E+00
-0.500000000000000E+00 0.000000000000000E+00 -0.655684895583589E-01
-0.500000000000000E+00 0.116910842474645E+00 0.000000000000000E+00
-0.500000000000000E+00 0.116910842474645E+00 -0.655684895583589E-01
-0.500000000000000E+00 0.233821684949290E+00 0.000000000000000E+00
-0.500000000000000E+00 0.233821684949290E+00 -0.655684895583589E-01
-0.500000000000000E+00 0.350732527423935E+00 0.000000000000000E+00
-0.500000000000000E+00 0.350732527423935E+00 -0.655684895583589E-01
-0.500000000000000E+00 -0.467643369898580E+00 0.000000000000000E+00
-0.500000000000000E+00 -0.467643369898580E+00 -0.655684895583589E-01




epw2.in
--
&inputepw
prefix= 'MoO3'
amass(1)= 95.94
amass(2)= 15.999
outdir='./'
iverbosity =0
elph = .true.
epbwrite = .false.
epbread = .false.
lpolar = .true.
epwwrite = .false.
epwread = .true.
nbndsub = 28
nbndskip = 14

restart = .true.
restart_freq= 1024
kmaps = .true.

lifc = .true.
asr_typ = simple

!wannier control tags
wannierize = .false.
num_iter = 1000
iprint = 2
dis_win_min= -11.73
dis_win_max= 4.775
dis_froz_min = -11.73
dis_froz_max = -0.165

proj(1) = 'Mo:d'
proj(2) = 'O:p'

wdata(1) = 'bands_plot = .true.'
wdata(2) = 'begin kpoint_path'
wdata(3) = 'G 0.000 0.000 0.000 X 0.500 0.000 0.000'
wdata(4) = 'X 0.500 0.000 0.000 S 0.500 0.500 0.000'
wdata(5) = 'S 0.500 0.500 0.000 Y 0.000 0.500 0.000'
wdata(6) = 'Y 0.000 0.500 0.000 G 0.000 0.000 0.000'
wdata(7) ='end kpoint_path'
wdata(8) ='bands_plot_format = gnuplot'
wdata(9) ='dis_num_iter = 1000 ' !set maximum iteration number
wdata(10) = 'guiding_centres = .true.'
wdata(11) = 'num_print_cycles = 10'
wdata(12) = 'dis_mix_ratio = 1.0'
!wdata(13)= 'use_ws_distance = T'

!mobility
scattering = .true.
scattering_serta = .true.
int_mob = .true.
carrier = .true.
ncarrier = 1E13
scissor = 0.1
nstemp = 5
tempsmin = 100
tempsmax = 500

!epc calculation control tags
elecselfen = .false.
phonselfen = .false.
a2f = .false.
fsthick = 10.0 ! eV
eptemp = 100 ! K
degaussw = 0.01 ! eV
efermi_read = .true.
fermi_energy = -4.7328 !K valence top
dvscf_dir = '/home/k0116/k011622/MoO3/2d/ph/phonon3/save'

mp_mesh_k =.true.
!band_plot = .true
!Wannier fine mesh
!filkf = '/home/k0116/k011622/MoO3/2d/mesh/path1.dat'
nkf1 = 16 !replace by appropriate number
nkf2 = 16 !replace by appropriate number
nkf3 = 4 !replace by appropriate number
!if you want to calculate on specific path, please use
!filqf = '/home/k0116/k011622/MoO3/2d/mesh/path1.dat'
nqf1 = 16 !replace by appropriate number
nqf2 = 16 !replace by appropriate number

nqf3 = 4 !replace by appropriate number

!original mesh
nk1 =8
nk2 =8
nk3 =2
nq1 =8
nq2 =8
nq3 =2
/
50 cartesian
0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00
0.000000000000000E+00 0.000000000000000E+00 -0.655684895583589E-01
0.000000000000000E+00 0.116910842474645E+00 0.000000000000000E+00
0.000000000000000E+00 0.116910842474645E+00 -0.655684895583589E-01
0.000000000000000E+00 0.233821684949290E+00 0.000000000000000E+00
0.000000000000000E+00 0.233821684949290E+00 -0.655684895583589E-01
0.000000000000000E+00 0.350732527423935E+00 0.000000000000000E+00
0.000000000000000E+00 0.350732527423935E+00 -0.655684895583589E-01
0.000000000000000E+00 -0.467643369898580E+00 0.000000000000000E+00
0.000000000000000E+00 -0.467643369898580E+00 -0.655684895583589E-01
0.125000000000000E+00 0.000000000000000E+00 0.000000000000000E+00
0.125000000000000E+00 0.000000000000000E+00 -0.655684895583589E-01
0.125000000000000E+00 0.116910842474645E+00 0.000000000000000E+00
0.125000000000000E+00 0.116910842474645E+00 -0.655684895583589E-01
0.125000000000000E+00 0.233821684949290E+00 0.000000000000000E+00
0.125000000000000E+00 0.233821684949290E+00 -0.655684895583589E-01
0.125000000000000E+00 0.350732527423935E+00 0.000000000000000E+00
..

For output file, I think scf.out , nscf.out and epw.out are all normal. And epw2.out just like I showed, suddenly killed itself.
If you can help with it, I will appreciate it very much.

Best wishes,
Chou

Re: Possibility to calculate mobility for 2d materials using

Posted: Thu Nov 22, 2018 10:40 am
by sponce
Dear CHOU,

I do not see anything wrong in your input I think.

You can try:
- mp_mesh_k =.false. (disable k-point symmetry), much slower
- run with 1 cpu interactively with restart_freq= 2, this way it will crash very quickly. Hopefully the code will tell you at which line exactly it crashed.
- try using the most recent development version of EPW (from gitlab).

Best wishes,
Samuel

Re: Possibility to calculate mobility for 2d materials using

Posted: Thu Dec 06, 2018 9:31 am
by CHOU
Dear Samuel,

Thank you very much for your ideas.
I have solved the problem and got the mobility successfully with defaulting the mp_mesh_k.

Best wishes,
CHOU

Re: Possibility to calculate mobility for 2d materials using

Posted: Thu Jan 10, 2019 9:36 am
by CHOU
Dear Samuel,

Although I calculated the mobility of 2d materials, but the mobility in the z axis was very large, which is not true for the real situation. Is it okay if I just pick up the mobility in x-axis and y-axis to analyze the materials and ignore the z-axis' mobility?
Or I change the codes in transport.f90
CALL rdiagh(3,Sigma_m(:,:,itemp),3,sigma_eig,sigma_vect)
to
CALL rdiagh(2,Sigma_m(:,:,itemp),2,sigma_eig,sigma_vect),
to only include the xy part for calculation, is it true for 2d materials?

Best wishes,
Chou

Re: Possibility to calculate mobility for 2d materials using

Posted: Thu Feb 14, 2019 2:22 pm
by sponce
I would recommand not to use diagonalization at all (i.e. do not call CALL rdiagh).
However in that case you should also print off diagonal elements to make sure that they are small.

Best wishes,
Samuel

Re: Possibility to calculate mobility for 2d materials using

Posted: Sun Sep 01, 2019 8:41 am
by yong_phys
Dear CHOU and Dr. Samuel Ponc,

I tried to repeat the Silicon mobility calculation in /q-e-qe-6.4.1/test-suite/epw_mob/ folder, but I do not know how to generate kpt.txt (filkf = './kpt.txt') file.
Could you please help me how to generate kpt.txt file for mobility calculation.

Best wishes,
He