Commit 44db9e33 authored by sponce's avatar sponce

Addition of el-pl and according test.

Courtesy of F. Caruso


git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13716 c92efa57-630b-4861-b058-cf58834340f0
parent f2f2ae06
......@@ -99,12 +99,14 @@ rotate_eigenm.o \
rotate_epmat.o \
selfen_elec.o \
selfen_phon.o \
selfen_pl.o \
set_ndnmbr.o \
setphases_wrap.o \
sgama2.o \
sort.o \
spectral_func.o \
spectral_func_ph.o \
spectral_func_pl.o \
star_q2.o \
stop_epw.o \
vmebloch2wan.o \
......
......@@ -21,7 +21,7 @@
USE phcom, ONLY : zue, trans, tr2_ph, nmix_ph, niter_ph, &
lnscf, ldisp, fildvscf, fildrho, epsil, alpha_mix
USE epwcom, ONLY : epexst, epbwrite, ep_coupling, &
eliashberg, elecselfen, eig_read, &
eliashberg, elecselfen, eig_read, plselfen, &
efermi_read, dvscf_dir, delta_smear, &
delta_qsmear, degaussw, degaussq, conv_thr_raxis, &
conv_thr_racon, conv_thr_iaxis, broyden_ndim, &
......@@ -37,7 +37,7 @@
lreal, lpolar, lpade, liso, limag, laniso, &
specfun_el, specfun_ph, lifc, asr_typ, &
rand_q, rand_nq, rand_nk, rand_k, pwc, phonselfen, &
parallel_q, parallel_k, &
parallel_q, parallel_k, specfun_pl, &
nw_specfun, nw, nswi, nswfc, nswc, nstemp, nsmear, &
wsfc, wscut, write_wfn, wmin_specfun, wmin, &
wmax_specfun, wmax, wepexst, wannierize, &
......@@ -45,7 +45,7 @@
tempsmin, tempsmax, temps, delta_approx, title, &
scattering, scattering_serta, scattering_0rta, &
int_mob, scissor, carrier, ncarrier, iterative_bte, &
restart, restart_freq, prtgkk
restart, restart_freq, prtgkk, nel, meff, epsiHEG
! USE epwcom, ONLY : fildvscf0, tphases
USE elph2, ONLY : elph
USE mp, ONLY : mp_bcast
......@@ -70,6 +70,7 @@
CALL mp_bcast (ldisp, meta_ionode_id, world_comm)
CALL mp_bcast (elecselfen, meta_ionode_id, world_comm)!
CALL mp_bcast (phonselfen, meta_ionode_id, world_comm)!
CALL mp_bcast (plselfen, meta_ionode_id, world_comm)!
CALL mp_bcast (ephwrite, meta_ionode_id, world_comm)! RM
CALL mp_bcast (band_plot, meta_ionode_id, world_comm)! RM
CALL mp_bcast (vme, meta_ionode_id, world_comm)!
......@@ -83,6 +84,7 @@
CALL mp_bcast (epwwrite, meta_ionode_id, world_comm) !
CALL mp_bcast (specfun_el, meta_ionode_id, world_comm) !
CALL mp_bcast (specfun_ph, meta_ionode_id, world_comm) !
CALL mp_bcast (specfun_pl, meta_ionode_id, world_comm) !
CALL mp_bcast (wannierize, meta_ionode_id, world_comm)! JN
CALL mp_bcast (write_wfn, meta_ionode_id, world_comm) !
CALL mp_bcast (kmaps, meta_ionode_id, world_comm) !
......@@ -185,6 +187,9 @@
CALL mp_bcast (eptemp, meta_ionode_id, world_comm) !
CALL mp_bcast (scissor, meta_ionode_id, world_comm) !
CALL mp_bcast (ncarrier, meta_ionode_id, world_comm)
CALL mp_bcast (nel, meta_ionode_id, world_comm)
CALL mp_bcast (meff, meta_ionode_id, world_comm)
CALL mp_bcast (epsiHEG, meta_ionode_id, world_comm)
!
! characters
!
......
......@@ -37,7 +37,8 @@
elecselfen, phonselfen, nest_fn, a2f, specfun_ph, &
vme, eig_read, ephwrite, nkf1, nkf2, nkf3, &
efermi_read, fermi_energy, specfun_el, band_plot, &
nqf1, nqf2, nqf3, mp_mesh_k, restart, prtgkk
nqf1, nqf2, nqf3, mp_mesh_k, restart, prtgkk, &
plselfen, specfun_pl
USE noncollin_module, ONLY : noncolin
USE constants_epw, ONLY : ryd2ev, ryd2mev, one, two, czero, twopi, ci, zero
USE io_files, ONLY : prefix, diropn
......@@ -873,7 +874,7 @@
! within a Fermi shell of size fsthick
!
IF ( (( minval ( abs(etf (:, ikk) - ef) ) < fsthick ) .and. &
( minval ( abs(etf (:, ikq) - ef) ) < fsthick )) ) THEN
( minval ( abs(etf (:, ikq) - ef) ) < fsthick )) .and. .NOT. plselfen) THEN
!
! fermicount = fermicount + 1
!
......@@ -963,12 +964,14 @@
!
ENDDO ! end loop over k points
!
IF (prtgkk) CALL print_gkk( iq )
IF (prtgkk ) CALL print_gkk( iq )
IF (phonselfen ) CALL selfen_phon_q( iq )
IF (elecselfen ) CALL selfen_elec_q( iq )
IF (plselfen ) CALL selfen_pl_q( iq )
IF (nest_fn ) CALL nesting_fn_q( iq )
IF (specfun_el ) CALL spectral_func_q( iq )
IF (specfun_ph ) CALL spectral_func_ph( iq )
IF (specfun_pl ) CALL spectral_func_pl_q( iq )
IF (ephwrite) THEN
IF ( iq .eq. 1 ) THEN
CALL kmesh_fine
......
......@@ -35,8 +35,8 @@
num_iter, dis_froz_max, fsthick, dis_froz_min, &
vme, degaussw, epexst, eig_read, kmaps, &
epwwrite, epbread, phonselfen, elecselfen, &
a2f, rand_k, rand_nq, rand_q, &
parallel_q, parallel_k, nkf1, &
a2f, rand_k, rand_nq, rand_q, plselfen, &
parallel_q, parallel_k, nkf1, specfun_pl, &
nkf2, nkf3, nqf1, nqf2, nqf3, rand_nk, &
nest_fn, eps_acustic, nw, wmax, wmin, &
mp_mesh_q, filqf, filkf, delta_qsmear, degaussq, &
......@@ -56,7 +56,7 @@
title, int_mob, scissor, iterative_bte, scattering, &
ncarrier, carrier, scattering_serta, &
scattering_0rta, longrange, shortrange,restart, &
restart_freq, prtgkk
restart_freq, prtgkk, nel, meff, epsiHEG
USE elph2, ONLY : elph
USE start_k, ONLY : nk1, nk2, nk3
USE constants_epw, ONLY : ryd2mev, ryd2ev, ev2cmm1, kelvin2eV
......@@ -105,9 +105,9 @@
dvscf_dir, ngaussw, &
wannierize, dis_win_max, dis_win_min, dis_froz_min, dis_froz_max, &
num_iter, proj, wdata, iprint, write_wfn, wmin, wmax, nw, &
eps_acustic, a2f, nest_fn, &
eps_acustic, a2f, nest_fn, plselfen, &
elecselfen, phonselfen, parallel_k, parallel_q, &
rand_q, rand_nq, rand_k, rand_nk, &
rand_q, rand_nq, rand_k, rand_nk, specfun_pl, &
nqf1, nqf2, nqf3, nkf1, nkf2, nkf3, &
mp_mesh_k, mp_mesh_q, filqf, filkf, ephwrite, &
band_plot, degaussq, delta_qsmear, nqsmear, nqstep, &
......@@ -120,7 +120,7 @@
specfun_el, specfun_ph, wmin_specfun, wmax_specfun, nw_specfun, &
delta_approx, scattering, int_mob, scissor, ncarrier, carrier, &
iterative_bte, scattering_serta, scattering_0rta, longrange, shortrange,&
restart, restart_freq, prtgkk
restart, restart_freq, prtgkk, nel, meff, epsiHEG
! tphases, fildvscf0
!
......@@ -239,6 +239,7 @@
!
! specfun_el : if .TRUE. calculate electron spectral function due to e-p interaction
! specfun_ph : if .TRUE. calculate phonon spectral function due to e-p interaction
! specfun_pl : if .TRUE. calculate plason spectral function
! restart : if .true. a run can be restarted from the interpolation level
! restart_freq : Create a restart point every restart_freq q/k-points
! scattering : if .true. scattering rates are calculated
......@@ -261,6 +262,10 @@
! etf_mem : if 0 no optimization, if 1 less memory is used for the fine grid interpolation
! When etf_mem == 2, an additional loop is done on mode for the fine grid interpolation
! part. This reduces the memory further by a factor "nmodes".
! plselfen : Calculate the electron-plasmon self-energy.
! nel : Carrier concentration
! meff : Density of state effective mass
! epsiHEG : Dielectric constant at zero doping
!
CHARACTER (LEN=80) :: input_file
INTEGER :: nargs, iiarg, ierr
......@@ -303,8 +308,10 @@
elph = .false.
elecselfen = .false.
phonselfen = .false.
plselfen = .false.
specfun_el = .false.
specfun_ph = .false.
specfun_pl = .false.
epbread = .false.
epbwrite = .false.
epwread = .false.
......@@ -427,14 +434,17 @@
scattering = .false.
scattering_serta = .false.
scattering_0rta = .false.
int_mob = .false.
int_mob = .false.
iterative_bte = .false.
scissor = 0.d0 ! eV
carrier = .false.
ncarrier = 0.d0 ! cm^-3
longrange = .false.
scissor = 0.d0 ! eV
carrier = .false.
ncarrier = 0.d0 ! cm^-3
longrange = .false.
shortrange = .false.
prtgkk = .false.
prtgkk = .false.
nel = 0.01d0
meff = 12.d0
epsiHEG = 0.25d0
!
! reading the namelist inputepw
!
......@@ -476,6 +486,26 @@
&'must parallelize over k OR q',1)
IF (parallel_k .and. elecselfen) CALL errore('epw_readin', &
&'Electron selfenergy is more efficient with k_para',-1)
IF (elecselfen .and. plselfen) CALL errore('epw_readin', &
&'Electron-plasmon self-energy cannot be computed with electron-phonon',1)
IF (phonselfen .and. plselfen) CALL errore('epw_readin', &
&'Electron-plasmon self-energy cannot be computed with electron-phonon',1)
IF (specfun_el .and. plselfen) CALL errore('epw_readin', &
&'Electron-plasmon self-energy cannot be computed with el-ph spectral function',1)
IF (specfun_ph .and. plselfen) CALL errore('epw_readin', &
&'Electron-plasmon self-energy cannot be computed with el-ph spectral function',1)
IF (parallel_q .and. plselfen) CALL errore('epw_readin', &
&'Electron-plasmon self-energy cannot be computed with q-parallelization',1)
IF (elecselfen .and. specfun_pl ) CALL errore('epw_readin', &
&'Electron-plasmon spectral function cannot be computed with electron-phonon',1)
IF (phonselfen .and. specfun_pl) CALL errore('epw_readin', &
&'Electron-plasmon spectral function cannot be computed with electron-phonon',1)
IF (specfun_el .and. specfun_pl) CALL errore('epw_readin', &
&'Electron-plasmon spectral function cannot be computed with el-ph spectral function',1)
IF (specfun_ph .and. specfun_pl) CALL errore('epw_readin', &
&'Electron-plasmon spectral function cannot be computed with el-ph spectral function',1)
IF (parallel_q .and. specfun_pl) CALL errore('epw_readin', &
&'Electron-plasmon spectral function cannot be computed with q-parallelization',1)
IF (a2f .and. .not.phonselfen) CALL errore('epw_readin', &
&'a2f requires phonoselfen',1)
IF (parallel_q .and. phonselfen) CALL errore('epw_readin', &
......
......@@ -142,6 +142,14 @@
!! Value of the scissor shift in eV.
REAL (KIND=DP) :: ncarrier
!! Amount of carrier concentration in cm^-3 when doping a semiconductors
!
! Plasmon
REAL (KIND=DP) :: nel
!! Carrier concentration
REAL (KIND=DP) :: meff
!! Density-of-state effective mass
REAL (KIND=DP) :: epsiHEG
!! Dielectric constant at zero doping.
!
!LOGICAL :: tphases
!! tphases: if .TRUE. set absolute reference for unitary gauge of the eigenvectors
......@@ -149,6 +157,8 @@
!! if .TRUE. calculate electron selfenergy due to e-p interaction
LOGICAL :: phonselfen
!! if .TRUE. calculate phonon selfenergy due to e-p interaction
LOGICAL :: plselfen
!! if .TRUE. calculate the electron-plason self-energy
LOGICAL :: epbread
!! if .TRUE. read epmatq from files .epb
LOGICAL :: epbwrite
......@@ -164,6 +174,8 @@
!! if .TRUE. calculate spectral electron function due to e-p interaction
LOGICAL :: specfun_ph
!! if .TRUE. calculate spectral phonon function due to e-p interaction
LOGICAL :: specfun_pl
!! if .TRUE. calculate plasmon spectral function
LOGICAL :: wannierize
!! if .TRUE. run the wannier90 code
LOGICAL :: parallel_k
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
--
&inputepw
prefix = 'si'
amass(1) = 28.0855
outdir = './'
elph = .true.
kmaps = .false.
epbwrite = .true.
epbread = .false.
epwwrite = .true.
epwread = .false.
nbndsub = 8
nbndskip = 0
wannierize = .true.
num_iter = 300
! dis_win_max = 8
! dis_froz_max= 5.5
proj(1) = 'Si : sp3'
wdata(1) = 'bands_plot = .true.'
wdata(2) = 'begin kpoint_path'
wdata(3) = 'L 0.50 0.00 0.00 G 0.00 0.00 0.00'
wdata(4) = 'G 0.00 0.00 0.00 X 0.50 0.50 0.00'
wdata(5) = 'end kpoint_path'
wdata(6) = 'bands_plot_format = gnuplot'
wdata(7) = 'guiding_centres = .true.'
wdata(8) = 'dis_num_iter = 300'
wdata(9) = 'num_print_cycles = 10'
wdata(10) = 'dis_mix_ratio = 1.0'
wdata(11) = 'use_ws_distance = T'
nel = 0.01
epsiHEG = 12.0
meff = 0.25
plselfen = .true.
elecselfen = .false.
phonselfen = .false.
a2f = .false.
band_plot = .true.
parallel_k = .true.
parallel_q = .false.
fsthick = 3.0
eptemp = 20.0
degaussw = 0.01
specfun_pl = .true.
wmax_specfun = 10.0
wmin_specfun = 3.0
nw_specfun = 200
efermi_read = .true.
fermi_energy= 6.65
dvscf_dir = './save'
filkf = './LGX.txt'
filqf = './qgrid.txt'
nk1 = 4
nk2 = 4
nk3 = 4
nq1 = 1
nq2 = 1
nq3 = 1
/
1 cartesian
0.000000000 0.000000000 0.000000000 1.0
&control
calculation = 'nscf'
prefix = 'si'
pseudo_dir = './'
outdir = './'
/
&system
ibrav = 2
celldm(1) = 10.262
nat = 2
ntyp = 1
ecutwfc = 30
nbnd = 8
/
&electrons
diagonalization = 'david'
mixing_beta = 0.7
conv_thr = 1.0d-11
/
ATOMIC_SPECIES
Si 28.0855 Si.pz-vbc.UPF
ATOMIC_POSITIONS alat
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
K_POINTS crystal
64
0.0 0.0 0.0 0.015625
0.0 0.0 0.25 0.015625
0.0 0.0 0.5 0.015625
0.0 0.0 0.75 0.015625
0.0 0.25 0.0 0.015625
0.0 0.25 0.25 0.015625
0.0 0.25 0.5 0.015625
0.0 0.25 0.75 0.015625
0.0 0.5 0.0 0.015625
0.0 0.5 0.25 0.015625
0.0 0.5 0.5 0.015625
0.0 0.5 0.75 0.015625
0.0 0.75 0.0 0.015625
0.0 0.75 0.25 0.015625
0.0 0.75 0.5 0.015625
0.0 0.75 0.75 0.015625
0.25 0.0 0.0 0.015625
0.25 0.0 0.25 0.015625
0.25 0.0 0.5 0.015625
0.25 0.0 0.75 0.015625
0.25 0.25 0.0 0.015625
0.25 0.25 0.25 0.015625
0.25 0.25 0.5 0.015625
0.25 0.25 0.75 0.015625
0.25 0.5 0.0 0.015625
0.25 0.5 0.25 0.015625
0.25 0.5 0.5 0.015625
0.25 0.5 0.75 0.015625
0.25 0.75 0.0 0.015625
0.25 0.75 0.25 0.015625
0.25 0.75 0.5 0.015625
0.25 0.75 0.75 0.015625
0.5 0.0 0.0 0.015625
0.5 0.0 0.25 0.015625
0.5 0.0 0.5 0.015625
0.5 0.0 0.75 0.015625
0.5 0.25 0.0 0.015625
0.5 0.25 0.25 0.015625
0.5 0.25 0.5 0.015625
0.5 0.25 0.75 0.015625
0.5 0.5 0.0 0.015625
0.5 0.5 0.25 0.015625
0.5 0.5 0.5 0.015625
0.5 0.5 0.75 0.015625
0.5 0.75 0.0 0.015625
0.5 0.75 0.25 0.015625
0.5 0.75 0.5 0.015625
0.5 0.75 0.75 0.015625
0.75 0.0 0.0 0.015625
0.75 0.0 0.25 0.015625
0.75 0.0 0.5 0.015625
0.75 0.0 0.75 0.015625
0.75 0.25 0.0 0.015625
0.75 0.25 0.25 0.015625
0.75 0.25 0.5 0.015625
0.75 0.25 0.75 0.015625
0.75 0.5 0.0 0.015625
0.75 0.5 0.25 0.015625
0.75 0.5 0.5 0.015625
0.75 0.5 0.75 0.015625
0.75 0.75 0.0 0.015625
0.75 0.75 0.25 0.015625
0.75 0.75 0.5 0.015625
0.75 0.75 0.75 0.015625
--
&inputph
prefix = 'si',
outdir = './'
epsil = .false.,
fildyn = 'si.dyn',
ldisp = .true.
fildvscf = 'dvscf'
nq1=1,
nq2=1,
nq3=1,
tr2_ph = 1.0d-14,
/
#
# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
import os
# Enter the number of irr. q-points
user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
prefix = str(user_input)
# Enter the number of irr. q-points
user_input = raw_input('Enter the number of irreducible q-points\n')
nqpt = user_input
try:
nqpt = int(user_input)
except ValueError:
raise Exception('The value you enter is not an integer!')
os.system('mkdir save')
for iqpt in range(nqpt+1):
label = str(iqpt)
os.system('cp '+prefix+'.dyn'+str(iqpt)+' save/'+prefix+'.dyn_q'+label)
if (iqpt == 1):
os.system('cp _ph0/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
os.system('cp -r _ph0/'+prefix+'.phsave save/')
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
This diff is collapsed.
&control
calculation = 'scf'
prefix = 'si'
restart_mode = 'from_scratch'
wf_collect = .true.
pseudo_dir = './'
outdir = './'
tprnfor = .true.
tstress = .true.
/
&system
ibrav = 2
celldm(1) = 10.262
nat = 2
ntyp = 1
ecutwfc = 30
/
&electrons
diagonalization = 'david'
mixing_beta = 0.7
conv_thr = 1.0d-13
/
ATOMIC_SPECIES
Si 28.0855 Si.pz-vbc.UPF
ATOMIC_POSITIONS alat
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
K_POINTS automatic
4 4 4 0 0 0
&control
calculation = 'scf'
prefix = 'si'
restart_mode = 'from_scratch'
wf_collect = .true.
pseudo_dir = './'
outdir = './'
tprnfor = .true.
tstress = .true.
/
&system
ibrav = 2
celldm(1) = 10.262
nat = 2
ntyp = 1
ecutwfc = 30
nbnd = 8
/
&electrons
diagonalization = 'david'
mixing_beta = 0.7
conv_thr = 1.0d-13
/
ATOMIC_SPECIES
Si 28.0855 Si.pz-vbc.UPF
ATOMIC_POSITIONS alat
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
K_POINTS automatic
4 4 4 0 0 0
......@@ -78,6 +78,10 @@ inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('scf_epw.in', '1'), ('nscf_epw.i
program = EPW
inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('scf_epw.in', '1'), ('nscf_epw.in', '1'), ('epw1.in', '3'), ('epw2.in', '3')
[epw_pl/]
program = EPW
inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('scf_epw.in', '1'), ('nscf_epw.in', '1'), ('epw1.in', '3')
[tddfpt_CH4/]
program = TDDFPT
inputs_args = ('CH4.pw-in', '1'), ('CH4.tddfpt-in', '2'), ('CH4.tddfpt_pp-in', '3')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment