Merge branch 'develop' into 'develop'

Reorganization of temperature inputs for EPW

See merge request QEF/q-e!1008
This commit is contained in:
Samuel Poncé 2020-07-16 07:19:00 +00:00
commit 4ab5727c5a
84 changed files with 41693 additions and 41508 deletions

View File

@ -28,7 +28,7 @@
fsthick = 1.36056981 ! eV fsthick = 1.36056981 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = '../phonons/save' dvscf_dir = '../phonons/save'

View File

@ -31,7 +31,7 @@
fsthick = 1.36056981 ! eV fsthick = 1.36056981 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = '../phonons/save' dvscf_dir = '../phonons/save'

View File

@ -37,7 +37,7 @@
fsthick = 1.36056981 ! eV fsthick = 1.36056981 ! eV
eptemp = 0.01 ! K (same as PRB 76, 165108) temps = 0.01 ! K (same as PRB 76, 165108)
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = '../phonons/save' dvscf_dir = '../phonons/save'

View File

@ -31,7 +31,7 @@
fsthick = 3.0 fsthick = 3.0
eptemp = 300.0 temps = 300.0
degaussw = 0.1 degaussw = 0.1
efermi_read = .true. efermi_read = .true.
fermi_energy= 9.9775 fermi_energy= 9.9775

View File

@ -28,12 +28,10 @@
iverbosity = 2 iverbosity = 2
eps_acustic = 2.0 ! Lowest boundary for the phonon frequency
eps_acustic = 2.0 ! Lowest boundary for the ephwrite = .true. ! Writes .ephmat files used when Eliasberg = .true.
ephwrite = .true. ! Writes .ephmat files used when wliasberg = .true.
fsthick = 0.4 ! eV fsthick = 0.4 ! eV
eptemp = 300 ! K
degaussw = 0.10 ! eV degaussw = 0.10 ! eV
nsmear = 1 nsmear = 1
delta_smear = 0.04 ! eV delta_smear = 0.04 ! eV
@ -51,9 +49,8 @@
wscut = 1.0 ! eV Upper limit over frequency integration/summation in the Elisashberg eq wscut = 1.0 ! eV Upper limit over frequency integration/summation in the Elisashberg eq
nstemp = 1 nstemp = 1 ! Nr. of temps
tempsmin = 15.00 temps = 15.00 ! K provide list of temperetures OR (nstemp and temps = tempsmin tempsmax for even space mode)
tempsmax = 60.00
nsiter = 500 nsiter = 500
@ -78,32 +75,3 @@
nqf2 = 20 nqf2 = 20
nqf3 = 20 nqf3 = 20
/ /
28 cartesian
0.000000000 0.000000000 0.000000000 0.004629630
0.000000000 0.000000000 0.145933920 0.009259259
0.000000000 0.000000000 0.291867841 0.009259259
0.000000000 0.000000000 -0.437801761 0.004629630
0.000000000 0.192450090 0.000000000 0.027777778
0.000000000 0.192450090 0.145933920 0.055555556
0.000000000 0.192450090 0.291867841 0.055555556
0.000000000 0.192450090 -0.437801761 0.027777778
0.000000000 0.384900179 0.000000000 0.027777778
0.000000000 0.384900179 0.145933920 0.055555556
0.000000000 0.384900179 0.291867841 0.055555556
0.000000000 0.384900179 -0.437801761 0.027777778
0.000000000 -0.577350269 0.000000000 0.013888889
0.000000000 -0.577350269 0.145933920 0.027777778
0.000000000 -0.577350269 0.291867841 0.027777778
0.000000000 -0.577350269 -0.437801761 0.013888889
0.166666667 0.288675135 0.000000000 0.027777778
0.166666667 0.288675135 0.145933920 0.055555556
0.166666667 0.288675135 0.291867841 0.055555556
0.166666667 0.288675135 -0.437801761 0.027777778
0.166666667 0.481125224 0.000000000 0.055555556
0.166666667 0.481125224 0.145933920 0.111111111
0.166666667 0.481125224 0.291867841 0.111111111
0.166666667 0.481125224 -0.437801761 0.055555556
0.333333333 0.577350269 0.000000000 0.009259259
0.333333333 0.577350269 0.145933920 0.018518519
0.333333333 0.577350269 0.291867841 0.018518519
0.333333333 0.577350269 -0.437801761 0.009259259

View File

@ -41,7 +41,7 @@
fsthick = 6 ! eV fsthick = 6 ! eV
eptemp = 0.0 ! K temps = 0.0 ! K
degaussw = 0.005 ! eV degaussw = 0.005 ! eV
degaussq = 0.05 !meV degaussq = 0.05 !meV

View File

@ -41,7 +41,7 @@
fsthick = 6 ! eV fsthick = 6 ! eV
eptemp = 0.075 ! K temps = 0.075 ! K
degaussw = 0.05 ! eV degaussw = 0.05 ! eV
a2f = .true. a2f = .true.

View File

@ -30,7 +30,7 @@
fsthick = 2.80284905 ! eV fsthick = 2.80284905 ! eV
eptemp = 200 ! K temps = 200 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = '../phonons/save' dvscf_dir = '../phonons/save'

View File

@ -28,7 +28,7 @@
kmaps, kerwrite, kerread, imag_read, nkc3, & kmaps, kerwrite, kerread, imag_read, nkc3, &
gap_edge, fsthick, filqf, filkf, nqc1, nqc2, nqc3,& gap_edge, fsthick, filqf, filkf, nqc1, nqc2, nqc3,&
fileig, fila2f, fermi_energy, nc, nkc1, nkc2, & fileig, fila2f, fermi_energy, nc, nkc1, nkc2, &
etf_mem, epwwrite, epwread, eptemp, nbndsub, & etf_mem, epwwrite, epwread, nbndsub, &
eps_acustic, ephwrite, epbread, nsiter, nqstep, & eps_acustic, ephwrite, epbread, nsiter, nqstep, &
nqsmear, nqf3, nqf2, nqf1, nkf3, nkf2, nkf1, & nqsmear, nqf3, nqf2, nqf1, nkf3, nkf2, nkf1, &
muc, mp_mesh_q, mp_mesh_k, max_memlt, lunif, & muc, mp_mesh_q, mp_mesh_k, max_memlt, lunif, &
@ -41,7 +41,7 @@
wsfc, wscut, write_wfn, wmin_specfun, wmin, & wsfc, wscut, write_wfn, wmin_specfun, wmin, &
wmax_specfun, wmax, wepexst, wannierize, & wmax_specfun, wmax, wepexst, wannierize, &
vme, longrange, shortrange, system_2d, lindabs, & vme, longrange, shortrange, system_2d, lindabs, &
tempsmin, tempsmax, temps, delta_approx, title, & temps, tempsmin, tempsmax, delta_approx, title, &
scattering, scattering_serta, scattering_0rta, & scattering, scattering_serta, scattering_0rta, &
int_mob, scissor, carrier, ncarrier, & int_mob, scissor, carrier, ncarrier, &
restart, restart_step, prtgkk, nel, meff, epsiheg,& restart, restart_step, prtgkk, nel, meff, epsiheg,&
@ -219,7 +219,6 @@
CALL mp_bcast(muc , meta_ionode_id, world_comm) CALL mp_bcast(muc , meta_ionode_id, world_comm)
CALL mp_bcast(max_memlt , meta_ionode_id, world_comm) CALL mp_bcast(max_memlt , meta_ionode_id, world_comm)
CALL mp_bcast(fermi_energy , meta_ionode_id, world_comm) CALL mp_bcast(fermi_energy , meta_ionode_id, world_comm)
CALL mp_bcast(eptemp , meta_ionode_id, world_comm)
CALL mp_bcast(scissor , 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(ncarrier , meta_ionode_id, world_comm)
CALL mp_bcast(nel , meta_ionode_id, world_comm) CALL mp_bcast(nel , meta_ionode_id, world_comm)

View File

@ -35,16 +35,18 @@
!! !!
!----------------------------------------------------------------------- !-----------------------------------------------------------------------
USE kinds, ONLY : DP, i4b USE kinds, ONLY : DP, i4b
USE constants_epw, ONLY : two, zero, ryd2ev, ryd2mev, ci USE constants_epw, ONLY : kelvin2eV, two, zero, ryd2ev, ryd2mev, ci
USE constants, ONLY : pi USE constants, ONLY : pi
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE io_var, ONLY : iospectral_sup, iospectral_cum USE io_var, ONLY : iospectral_sup, iospectral_cum
USE epwcom, ONLY : eptemp, wmin_specfun, wmax_specfun, nw_specfun, & USE epwcom, ONLY : wmin_specfun, wmax_specfun, nw_specfun, &
bnd_cum bnd_cum, nstemp, eliashberg
USE elph2, ONLY : ibndmin, ibndmax USE elph2, ONLY : ibndmin, ibndmax, gtemp
! !
IMPLICIT NONE IMPLICIT NONE
! !
CHARACTER(LEN = 20) :: tp
CHARACTER(LEN = 256) :: filespecsup
CHARACTER(LEN = 64) :: line CHARACTER(LEN = 64) :: line
!! Auxiliary string !! Auxiliary string
CHARACTER(LEN = 64) :: filespec CHARACTER(LEN = 64) :: filespec
@ -67,6 +69,8 @@
!! Total number of k-points !! Total number of k-points
INTEGER :: i0 INTEGER :: i0
!! Energy index of Fermi level (w=0) !! Energy index of Fermi level (w=0)
INTEGER :: itemp
!! Counter on temperatures
INTEGER :: ierr INTEGER :: ierr
!! Error status !! Error status
REAL(KIND = DP) :: dw REAL(KIND = DP) :: dw
@ -107,154 +111,165 @@
WRITE(stdout, '(5x,a)') 'Warning: the routine is sequential but very fast.' WRITE(stdout, '(5x,a)') 'Warning: the routine is sequential but very fast.'
WRITE(stdout, '(5x,a/)') REPEAT('=',75) WRITE(stdout, '(5x,a/)') REPEAT('=',75)
! !
OPEN (UNIT = iospectral_sup, FILE = 'specfun_sup.elself', STATUS = 'old', IOSTAT = ios) DO itemp = 1, nstemp
IF (ios /= 0) CALL errore('spectral_cumulant', 'opening file specfun_sup.elself', ABS(ios)) WRITE(tp, "(f8.3)") gtemp(itemp) * ryd2ev / kelvin2eV
! filespecsup = 'specfun_sup.elself.' // trim(adjustl(tp)) // 'K'
! determine number of k points, ibndmin, ibndmax OPEN (UNIT = iospectral_sup, FILE = filespecsup, STATUS = 'old', IOSTAT = ios)
DO im = 1, 6 IF (ios /= 0) CALL errore('spectral_cumulant', 'opening file specfun_sup.elself', ABS(ios))
READ(iospectral_sup, '(a)') line !
ENDDO ! determine number of k points, ibndmin, ibndmax
DO im = 1, maxrecs DO im = 1, 6
READ (iospectral_sup, *, IOSTAT = ios) i1, i2 READ(iospectral_sup, '(a)') line
IF (im == 1) ibndmin = i2 ENDDO
IF (ios /= 0) EXIT DO im = 1, maxrecs
IF (im == maxrecs) CALL errore('spectral_cumulant', 'increase maxrecs', 1) READ (iospectral_sup, *, IOSTAT = ios) i1, i2
ENDDO IF (im == 1) ibndmin = i2
! IF (ios /= 0) EXIT
REWIND(iospectral_sup) IF (im == maxrecs) CALL errore('spectral_cumulant', 'increase maxrecs', 1)
! ENDDO
nk = i1 !
ibndmax = i2 REWIND(iospectral_sup)
WRITE(stdout, '(5x,a/)') "Read self-energy from file specfun_sup.elself" !
WRITE(stdout, '(5x,a,i4,a,i4,a,i4,a,f12.6/)') "Check: nk = ", nk, & nk = i1
", ibndmin = ", ibndmin, ", ibndmax = ", ibndmax, " kbT (eV) = ", eptemp * ryd2ev ibndmax = i2
! WRITE(stdout, '(5x,a/)') "Read self-energy from file specfun_sup.elself"
ALLOCATE(ww(nw_specfun), STAT = ierr) WRITE(stdout, '(5x,a,i4,a,i4,a,i4,a,f12.6/)') "Check: nk = ", nk, &
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating ww', 1) ", ibndmin = ", ibndmin, ", ibndmax = ", ibndmax, " kbT (eV) = ", gtemp(itemp) * ryd2ev
ALLOCATE(ek(nk), STAT = ierr) !
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating ek', 1) ALLOCATE(ww(nw_specfun), STAT = ierr)
ALLOCATE(sigmar(nk, nw_specfun), STAT = ierr) IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating ww', 1)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating sigmar', 1) ALLOCATE(ek(nk), STAT = ierr)
ALLOCATE(sigmai(nk, nw_specfun), STAT = ierr) IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating ek', 1)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating sigmai', 1) ALLOCATE(sigmar(nk, nw_specfun), STAT = ierr)
ALLOCATE(a_mig(nw_specfun, nk), STAT = ierr) IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating sigmar', 1)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating a_mig', 1) ALLOCATE(sigmai(nk, nw_specfun), STAT = ierr)
ALLOCATE(a_cw(nw_specfun), STAT = ierr) IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating sigmai', 1)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating a_cw', 1) ALLOCATE(a_mig(nw_specfun, nk), STAT = ierr)
ALLOCATE(a_ct(nw_specfun), STAT = ierr) IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating a_mig', 1)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating a_ct', 1) ALLOCATE(a_cw(nw_specfun), STAT = ierr)
ALLOCATE(a_tmp(nw_specfun), STAT = ierr) IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating a_cw', 1)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating a_tmp', 1) ALLOCATE(a_ct(nw_specfun), STAT = ierr)
! IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating a_ct', 1)
! read and store Kohn-Sham energy, energy grid, real and im sigma for designated band ALLOCATE(a_tmp(nw_specfun), STAT = ierr)
DO im = 1,6 IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error allocating a_tmp', 1)
READ(iospectral_sup, '(a)') line !
ENDDO ! read and store Kohn-Sham energy, energy grid, real and im sigma for designated band
DO ibnd = 1, ibndmax - ibndmin + 1 DO im = 1,6
DO ik = 1, nk READ(iospectral_sup, '(a)') line
DO iw = 1, nw_specfun ENDDO
READ(iospectral_sup,*) i1, i2, a1, a2, a3, a4 DO ibnd = 1, ibndmax - ibndmin + 1
IF (i2 == bnd_cum) THEN DO ik = 1, nk
! ek, w read in eV; Sigma read in meV DO iw = 1, nw_specfun
ek(ik) = a1 / ryd2ev READ(iospectral_sup,*) i1, i2, a1, a2, a3, a4
ww(iw) = a2 / ryd2ev IF (i2 == bnd_cum) THEN
sigmar(ik, iw) = a3 / ryd2mev ! / ( EXP(ww(iw)/eptemp )+1.d0 ) ! ek, w read in eV; Sigma read in meV
sigmai(ik, iw) = a4 / ryd2mev ! / ( EXP(ww(iw)/eptemp )+1.d0 ) ek(ik) = a1 / ryd2ev
! spec func as in spectral_func.f90 ww(iw) = a2 / ryd2ev
a_mig(iw, ik) = ABS(sigmai(ik, iw)) / pi / ((ww(iw) - ek(ik) - sigmar(ik, iw))**two + (sigmai(ik, iw) )**two) sigmar(ik, iw) = a3 / ryd2mev ! / ( EXP(ww(iw)/eptemp )+1.d0 )
ENDIF sigmai(ik, iw) = a4 / ryd2mev ! / ( EXP(ww(iw)/eptemp )+1.d0 )
! spec func as in spectral_func.f90
a_mig(iw, ik) = ABS(sigmai(ik, iw)) / pi / ((ww(iw) - ek(ik) - sigmar(ik, iw))**two + (sigmai(ik, iw) )**two)
ENDIF
ENDDO
ENDDO ENDDO
ENDDO ENDDO
ENDDO
!
CLOSE(iospectral_sup)
!
! open file for cumulant spectral function
IF (bnd_cum < 10) THEN
WRITE(filespec, '(a,i1,a)') 'specfun_cum', bnd_cum, '.elself'
ELSEIF (bnd_cum > 9 .AND. bnd_cum < 100) THEN
WRITE(filespec, '(a,i2,a)') 'specfun_cum', bnd_cum, '.elself'
ELSE
WRITE(filespec, '(a,i3,a)') 'specfun_cum', bnd_cum, '.elself'
ENDIF
OPEN(UNIT = iospectral_cum, FILE = filespec)
!
WRITE(iospectral_cum, '(a)') '# k Energy [eV] A(k,w) [meV^-1] Z-factor '
WRITE(iospectral_cum, '(a)') '# with convolutions | using FFT '
WRITE(stdout, '(8x,a)') 'k Energy [eV] A(k,w) [meV^-1] Z-factor '
WRITE(stdout, '(8x,a)') ' with convolutions | using FFT '
!
! define index corresponding to omega=0 (Fermi level)
i0 = MINLOC(ABS(ww(:)), DIM = 1)
IF (ABS(ww(i0)) > dw) CALL errore('spectral_cumulant', 'w=0 needs to be included in [wmin:wmax]', 1)
a_cw = zero
a_ct = zero
a_tmp = zero
!
DO ik = 1, nk
IF (ek(ik) < e_thresh) THEN
!
ekk = ek(ik)
!
! Cumulant from convolutions in frequency space (ImSigma>0 in EPW)
CALL cumulant_conv(ekk, ww, sigmar(ik, :), -sigmai(ik, :), a_mig(:, ik), a_cw, zeta)
!
! Cumulant calculated in time domain + FFT (ImSigma>0 in EPW)
CALL cumulant_time(ekk, ww, sigmar(ik, :), -sigmai(ik, :), a_mig(:, ik), a_tmp)
!
DO iw = 1, nw_specfun
!
! map the indices of the FFT frequency grid onto the original one
IF (iw >= i0) THEN
a_ct(iw) = a_tmp(iw - i0 + 1)
ELSE
a_ct(iw) = a_tmp(iw + nw_specfun - i0 + 1)
ENDIF
!
! write cumulant spectral function on file (in meV^-1, as in spectral_func.f90)
! 3rd column: A_cum using convolutions; 4th column: A_cum using FFT
IF (iw == 1) THEN
WRITE(iospectral_cum, '(2x,i7,2x,f10.5,3x,e16.7,3x,e16.7,3x,f8.4)') &
ik, ww(iw) * ryd2ev, a_cw(iw) / ryd2mev, a_ct(iw) / ryd2mev, zeta
WRITE(stdout,'(2x,i7,2x,f10.5,3x,e16.7,3x,e16.7,3x,f8.4)') &
ik, ww(iw) * ryd2ev, a_cw(iw) / ryd2mev, a_ct(iw) / ryd2mev, zeta
ELSE
WRITE(iospectral_cum, '(2x,i7,2x,f10.5,3x,e16.7,3x,e16.7)') &
ik, ww(iw) * ryd2ev, a_cw(iw) / ryd2mev, a_ct(iw) / ryd2mev !/ ( EXP(ww(iw)/eptemp )+1.d0 )
WRITE(stdout, '(2x,i7,2x,f10.5,3x,e16.7,3x,e16.7)') &
ik, ww(iw) * ryd2ev, a_cw(iw) / ryd2mev, a_ct(iw) / ryd2mev !/ ( EXP(ww(iw)/eptemp )+1.d0 )
! uncomment to multiply by Fermi occupation factor
ENDIF
!
ENDDO
!
WRITE(iospectral_cum, '(a)') ' '
WRITE(stdout, '(a)') ' '
!
ENDIF ! only states below energy e_thresh
! !
ENDDO ! main loop k CLOSE(iospectral_sup)
!
! open file for cumulant spectral function
WRITE(tp, "(f8.3)") gtemp(itemp) * ryd2ev / kelvin2eV
IF (bnd_cum < 10) THEN
WRITE(filespec, '(a,i1,a,a,a)') 'specfun_cum', bnd_cum, '.elself.', trim(adjustl(tp)), 'K'
ELSEIF (bnd_cum > 9 .AND. bnd_cum < 100) THEN
WRITE(filespec, '(a,i2,a,a,a)') 'specfun_cum', bnd_cum, '.elself.', trim(adjustl(tp)), 'K'
ELSE
WRITE(filespec, '(a,i3,a,a,a)') 'specfun_cum', bnd_cum, '.elself.', trim(adjustl(tp)), 'K'
ENDIF
OPEN(UNIT = iospectral_cum, FILE = filespec)
!
WRITE(iospectral_cum, '(a)') '# k Energy [eV] A(k,w) [meV^-1] Z-factor '
WRITE(iospectral_cum, '(a)') '# with convolutions | using FFT '
WRITE(stdout, '(8x,a)') 'k Energy [eV] A(k,w) [meV^-1] Z-factor '
WRITE(stdout, '(8x,a)') ' with convolutions | using FFT '
!
! define index corresponding to omega=0 (Fermi level)
i0 = MINLOC(ABS(ww(:)), DIM = 1)
IF (ABS(ww(i0)) > dw) CALL errore('spectral_cumulant', 'w=0 needs to be included in [wmin:wmax]', 1)
a_cw = zero
a_ct = zero
a_tmp = zero
!
DO ik = 1, nk
IF (ek(ik) < e_thresh) THEN
!
ekk = ek(ik)
!
! Cumulant from convolutions in frequency space (ImSigma>0 in EPW)
CALL cumulant_conv(ekk, ww, sigmar(ik, :), -sigmai(ik, :), a_mig(:, ik), a_cw, zeta)
!
! Cumulant calculated in time domain + FFT (ImSigma>0 in EPW)
CALL cumulant_time(ekk, ww, sigmar(ik, :), -sigmai(ik, :), a_mig(:, ik), a_tmp)
!
DO iw = 1, nw_specfun
!
! map the indices of the FFT frequency grid onto the original one
IF (iw >= i0) THEN
a_ct(iw) = a_tmp(iw - i0 + 1)
ELSE
a_ct(iw) = a_tmp(iw + nw_specfun - i0 + 1)
ENDIF
!
! write cumulant spectral function on file (in meV^-1, as in spectral_func.f90)
! 3rd column: A_cum using convolutions; 4th column: A_cum using FFT
IF (iw == 1) THEN
WRITE(iospectral_cum, '(2x,i7,2x,f10.5,3x,e16.7,3x,e16.7,3x,f8.4)') &
ik, ww(iw) * ryd2ev, a_cw(iw) / ryd2mev, a_ct(iw) / ryd2mev, zeta
WRITE(stdout,'(2x,i7,2x,f10.5,3x,e16.7,3x,e16.7,3x,f8.4)') &
ik, ww(iw) * ryd2ev, a_cw(iw) / ryd2mev, a_ct(iw) / ryd2mev, zeta
ELSE
WRITE(iospectral_cum, '(2x,i7,2x,f10.5,3x,e16.7,3x,e16.7)') &
ik, ww(iw) * ryd2ev, a_cw(iw) / ryd2mev, a_ct(iw) / ryd2mev !/ ( EXP(ww(iw)/eptemp )+1.d0 )
WRITE(stdout, '(2x,i7,2x,f10.5,3x,e16.7,3x,e16.7)') &
ik, ww(iw) * ryd2ev, a_cw(iw) / ryd2mev, a_ct(iw) / ryd2mev !/ ( EXP(ww(iw)/eptemp )+1.d0 )
! uncomment to multiply by Fermi occupation factor
ENDIF
!
ENDDO
!
WRITE(iospectral_cum, '(a)') ' '
WRITE(stdout, '(a)') ' '
!
ENDIF ! only states below energy e_thresh
!
ENDDO ! main loop k
!
WRITE(stdout, '(5x,a)') 'The file specfun_cum[BND].elself has been correctly written'
!
CLOSE(iospectral_cum)
!
DEALLOCATE(ww, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating ww', 1)
DEALLOCATE(ek, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating ek', 1)
DEALLOCATE(sigmar, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating sigmar', 1)
DEALLOCATE(sigmai, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating sigmai', 1)
DEALLOCATE(a_mig, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating a_mig', 1)
DEALLOCATE(a_cw, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating a_cw', 1)
DEALLOCATE(a_ct, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating a_ct', 1)
DEALLOCATE(a_tmp, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating a_tmp', 1)
ENDDO !itemp
! !
WRITE(stdout, '(5x,a)') 'The file specfun_cum[BND].elself has been correctly written' ! Deallocate temperature when no supercond
! IF (.NOT. eliashberg) THEN
CLOSE(iospectral_cum) DEALLOCATE(gtemp, STAT = ierr)
! IF (ierr /= 0) CALL errore('cum_mod', 'Error deallocating gtemp', 1)
DEALLOCATE(ww, STAT = ierr) ENDIF
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating ww', 1)
DEALLOCATE(ek, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating ek', 1)
DEALLOCATE(sigmar, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating sigmar', 1)
DEALLOCATE(sigmai, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating sigmai', 1)
DEALLOCATE(a_mig, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating a_mig', 1)
DEALLOCATE(a_cw, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating a_cw', 1)
DEALLOCATE(a_ct, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating a_ct', 1)
DEALLOCATE(a_tmp, STAT = ierr)
IF (ierr /= 0) CALL errore('spectral_cumulant', 'Error deallocating a_tmp', 1)
! !
!----------------------------------------------------------------------- !-----------------------------------------------------------------------
END SUBROUTINE spectral_cumulant END SUBROUTINE spectral_cumulant

View File

@ -36,8 +36,6 @@
!! frequency on real-axis, wsph(nqstep) !! frequency on real-axis, wsph(nqstep)
REAL(KIND = DP), ALLOCATABLE :: wsi(:) REAL(KIND = DP), ALLOCATABLE :: wsi(:)
!! frequency on imag-axis at iw, wi(nsiw(nstemp)) !! frequency on imag-axis at iw, wi(nsiw(nstemp))
REAL(KIND = DP), ALLOCATABLE :: estemp(:)
!! temperature in eV entering in the Eliashberg equtions estemp(nstemp)
! !
!-------------------------------------------------------------------------- !--------------------------------------------------------------------------
END MODULE eliashberg_common END MODULE eliashberg_common

View File

@ -72,8 +72,8 @@
area, &! Area of the 2D unit cell. area, &! Area of the 2D unit cell.
g0vec_all_r(3, 125) ! G-vectors needed to fold the k+q grid into the k grid, cartesian coord. g0vec_all_r(3, 125) ! G-vectors needed to fold the k+q grid into the k grid, cartesian coord.
REAL(KIND = DP), ALLOCATABLE ::& REAL(KIND = DP), ALLOCATABLE ::&
a_all(:, :), &! electronic spectral function du to electron-phonon interaction a_all(:, :, :), &! electronic spectral function du to electron-phonon interaction
a_all_ph(:, :), &! phononic spectral function du to electron-phonon interaction a_all_ph(:, :, :), &! phononic spectral function du to electron-phonon interaction
dos(:), &! Density of states at the chemical potential. dos(:), &! Density of states at the chemical potential.
et_ks(:, :), &! lda eigenvalues et_ks(:, :), &! lda eigenvalues
xkq(:, :), &! local k+q grid, coarse (3, nks) xkq(:, :), &! local k+q grid, coarse (3, nks)
@ -87,18 +87,18 @@
etf_k(:, :), &! Saved interpolated KS eigenenergies for later used in q-parallelization (nbnd, nkqf) etf_k(:, :), &! Saved interpolated KS eigenenergies for later used in q-parallelization (nbnd, nkqf)
etf_ks(:, :), &! interpolated eigenvalues (nbnd, nkqf) KS eigenvalues in the case of eig_read etf_ks(:, :), &! interpolated eigenvalues (nbnd, nkqf) KS eigenvalues in the case of eig_read
wf(:, :), &! interpolated eigenfrequencies wf(:, :), &! interpolated eigenfrequencies
gamma_all(:, :, :), &! Gamma gamma_all(:, :, :, :), &! Gamma
gamma_nest(:, :), &! Nesting function in the case of q-parallelization gamma_nest(:, :), &! Nesting function in the case of q-parallelization
gamma_v_all(:, :, :), &! Gamma gamma_v_all(:, :, :, :), &! Gamma
lambda_all(:, :, :), &! Electron-phonon coupling parameter lambda_all(:, :, :, :), &! Electron-phonon coupling parameter
lambda_v_all(:, :, :), &! Electron-phonon coupling parameter (transport) lambda_v_all(:, :, :, :), &! Electron-phonon coupling parameter (transport)
sigmar_all(:, :), &! Real part of the electron-phonon self-energy sigmar_all(:, :, :), &! Real part of the electron-phonon self-energy
sigmai_all(:, :), &! Imaginary part of the electron-phonon self-energy sigmai_all(:, :, :), &! Imaginary part of the electron-phonon self-energy
sigmai_mode(:, :, :), &! Mode resolved imaginary electron self-energy sigmai_mode(:, :, :, :), &! Mode resolved imaginary electron self-energy
zi_all(:, :), &! Z renormalization factor zi_all(:, :, :), &! Z renormalization factor
eta(:, :, :), &! Adaptative smearing eta(:, :, :), &! Adaptative smearing
esigmar_all(:, :, :), &! energy of the real self-energy esigmar_all(:, :, :, :), &! energy of the real self-energy
esigmai_all(:, :, :), &! energy of the imaginary self-energy esigmai_all(:, :, :, :), &! energy of the imaginary self-energy
jdos(:), &! j-DOS jdos(:), &! j-DOS
spectra(:, :, :, :, :, :), &! dipole absorption spectra, polarizations, nomega, nsmear, dme/vme, absorption/emission spectra(:, :, :, :, :, :), &! dipole absorption spectra, polarizations, nomega, nsmear, dme/vme, absorption/emission
zstar(:, :, :), &! Born effective charges zstar(:, :, :), &! Born effective charges
@ -109,10 +109,10 @@
zi_allcb(:, :, :), &! Second Z-factor in scattering rate (for both VB and CB calculations) zi_allcb(:, :, :), &! Second Z-factor in scattering rate (for both VB and CB calculations)
ifc(:,:,:,:,:,:,:), &! Interatomic force constant in real space ifc(:,:,:,:,:,:,:), &! Interatomic force constant in real space
omegap(:), &! Photon energy for phonon-assisted absorption omegap(:), &! Photon energy for phonon-assisted absorption
epsilon2_abs(:, :, :), &! Imaginary part of dielectric function for phonon-assisted absorption, vs omega, vs broadening epsilon2_abs(:, :, :, :), &! Imaginary part of dielectric function for phonon-assisted absorption, vs omega, vs broadening
wscache(:, :, :, :, :), &! Use as cache when doing IFC when lifc = .TRUE. wscache(:, :, :, :, :), &! Use as cache when doing IFC when lifc = .TRUE.
epsilon2_abs_lorenz(:, :, :), &! Imaginary part of dielectric function for phonon-assisted absorption, vs omega, vs broadening epsilon2_abs_lorenz(:, :, :, :), &! Imaginary part of dielectric function for phonon-assisted absorption, vs omega, vs broadening
transp_temp(:), &! Temperatures used for the transport module gtemp(:), &! Temperature used globally (units of Ry)
mobilityh_save(:), &! Error in the hole mobility mobilityh_save(:), &! Error in the hole mobility
mobilityel_save(:) ! Error in the electron mobility mobilityel_save(:) ! Error in the electron mobility
COMPLEX(KIND = DP), ALLOCATABLE :: & COMPLEX(KIND = DP), ALLOCATABLE :: &

View File

@ -906,7 +906,7 @@ CONTAINS
USE io_global, ONLY : stdout,ionode_id, meta_ionode_id USE io_global, ONLY : stdout,ionode_id, meta_ionode_id
USE modes, ONLY : nmodes USE modes, ONLY : nmodes
USE epwcom, ONLY : nbndsub, shortrange, restart_polaron,& USE epwcom, ONLY : nbndsub, shortrange, restart_polaron,&
fsthick, eptemp, ngaussw, degaussw,spherical_cutoff,& fsthick, ngaussw, degaussw,spherical_cutoff,&
eps_acustic, efermi_read, fermi_energy, lscreen, & eps_acustic, efermi_read, fermi_energy, lscreen, &
model_vertex, nkf1, nkf2, nkf3, conv_thr_polaron, & model_vertex, nkf1, nkf2, nkf3, conv_thr_polaron, &
r01, r02, r03, num_cbands, start_mode, cb_shift, & r01, r02, r03, num_cbands, start_mode, cb_shift, &

View File

@ -34,7 +34,8 @@
nqf2, nqf3, mp_mesh_k, restart, plselfen, & nqf2, nqf3, mp_mesh_k, restart, plselfen, &
specfun_pl, lindabs, use_ws, epbread, & specfun_pl, lindabs, use_ws, epbread, &
epmatkqread, selecqread, restart_step, nsmear, & epmatkqread, selecqread, restart_step, nsmear, &
nqc1, nqc2, nqc3, nkc1, nkc2, nkc3, assume_metal nqc1, nqc2, nqc3, nkc1, nkc2, nkc3, assume_metal, &
cumulant, eliashberg
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE noncollin_module, ONLY : noncolin USE noncollin_module, ONLY : noncolin
USE constants_epw, ONLY : ryd2ev, ryd2mev, one, two, zero, czero, eps40, & USE constants_epw, ONLY : ryd2ev, ryd2mev, one, two, zero, czero, eps40, &
@ -54,7 +55,7 @@
inv_tau_allcb, zi_allcb, exband, gamma_v_all, & inv_tau_allcb, zi_allcb, exband, gamma_v_all, &
esigmar_all, esigmai_all, lower_bnd, upper_bnd, & esigmar_all, esigmai_all, lower_bnd, upper_bnd, &
a_all, a_all_ph, wscache, lambda_v_all, threshold, & a_all, a_all_ph, wscache, lambda_v_all, threshold, &
nktotf, transp_temp, xkq, dos, nbndskip, nbndep nktotf, gtemp, xkq, dos, nbndskip, nbndep
USE wan2bloch, ONLY : dmewan2bloch, hamwan2bloch, dynwan2bloch, & USE wan2bloch, ONLY : dmewan2bloch, hamwan2bloch, dynwan2bloch, &
ephwan2blochp, ephwan2bloch, vmewan2bloch, & ephwan2blochp, ephwan2bloch, vmewan2bloch, &
dynifc2blochf, vmewan2blochp dynifc2blochf, vmewan2blochp
@ -113,6 +114,12 @@
!! Wannier centers !! Wannier centers
! !
! Local variables ! Local variables
CHARACTER(LEN = 20) :: tp
!! string for temperature
CHARACTER(LEN = 256) :: filephselfen
!! file name of phonon selfenergy
CHARACTER(LEN = 256) :: filephlinewid
!! file name of phonon linewidth
CHARACTER(LEN = 256) :: filint CHARACTER(LEN = 256) :: filint
!! Name of the file to write/read !! Name of the file to write/read
CHARACTER(LEN = 30) :: myfmt CHARACTER(LEN = 30) :: myfmt
@ -181,6 +188,8 @@
!! Counter on bands when use_ws == .TRUE. !! Counter on bands when use_ws == .TRUE.
INTEGER :: itemp INTEGER :: itemp
!! Temperature index !! Temperature index
INTEGER :: itempphen
!! Temperature counter for writing phonon selfen
INTEGER :: icbm INTEGER :: icbm
!! Index of the CBM !! Index of the CBM
INTEGER :: totq INTEGER :: totq
@ -934,34 +943,34 @@
ALLOCATE(epf17(nbndfst, nbndfst, nmodes, nkf), STAT = ierr) ALLOCATE(epf17(nbndfst, nbndfst, nmodes, nkf), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating epf17', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating epf17', 1)
IF (phonselfen) THEN IF (phonselfen) THEN
ALLOCATE(lambda_all(nmodes, totq, nsmear), STAT = ierr) ALLOCATE(lambda_all(nmodes, totq, nsmear, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating lambda_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating lambda_all', 1)
ALLOCATE(lambda_v_all(nmodes, totq, nsmear), STAT = ierr) ALLOCATE(lambda_v_all(nmodes, totq, nsmear, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating lambda_v_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating lambda_v_all', 1)
ALLOCATE(gamma_all(nmodes, totq, nsmear), STAT = ierr) ALLOCATE(gamma_all(nmodes, totq, nsmear, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating gamma_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating gamma_all', 1)
ALLOCATE(gamma_v_all(nmodes, totq, nsmear), STAT = ierr) ALLOCATE(gamma_v_all(nmodes, totq, nsmear, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating gamma_v_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating gamma_v_all', 1)
lambda_all(:, :, :) = zero lambda_all(:, :, :, :) = zero
lambda_v_all(:, :, :) = zero lambda_v_all(:, :, :, :) = zero
gamma_all(:, :, :) = zero gamma_all(:, :, :, :) = zero
gamma_v_all(:, :, :) = zero gamma_v_all(:, :, :, :) = zero
ENDIF ENDIF
IF (specfun_el .OR. specfun_pl) THEN IF (specfun_el .OR. specfun_pl) THEN
ALLOCATE(esigmar_all(nbndfst, nktotf, nw_specfun), STAT = ierr) ALLOCATE(esigmar_all(nbndfst, nktotf, nw_specfun, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating esigmar_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating esigmar_all', 1)
ALLOCATE(esigmai_all(nbndfst, nktotf, nw_specfun), STAT = ierr) ALLOCATE(esigmai_all(nbndfst, nktotf, nw_specfun, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating esigmai_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating esigmai_all', 1)
ALLOCATE(a_all(nw_specfun, nktotf), STAT = ierr) ALLOCATE(a_all(nw_specfun, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating a_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating a_all', 1)
esigmar_all(:, :, :) = zero esigmar_all(:, :, :, :) = zero
esigmai_all(:, :, :) = zero esigmai_all(:, :, :, :) = zero
a_all(:, :) = zero a_all(:, :, :) = zero
ENDIF ENDIF
IF (specfun_ph) THEN IF (specfun_ph) THEN
ALLOCATE(a_all_ph(nw_specfun, totq), STAT = ierr) ALLOCATE(a_all_ph(nw_specfun, totq, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating a_all_ph', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating a_all_ph', 1)
a_all_ph(:, :) = zero a_all_ph(:, :, :) = zero
ENDIF ENDIF
IF (scattering .AND. .NOT. iterative_bte) THEN IF (scattering .AND. .NOT. iterative_bte) THEN
ALLOCATE(inv_tau_all(nstemp, nbndfst, nktotf), STAT = ierr) ALLOCATE(inv_tau_all(nstemp, nbndfst, nktotf), STAT = ierr)
@ -980,19 +989,19 @@
zi_allcb(:, :, :) = zero zi_allcb(:, :, :) = zero
ENDIF ENDIF
IF (elecselfen .OR. plselfen) THEN IF (elecselfen .OR. plselfen) THEN
ALLOCATE(sigmar_all(nbndfst, nktotf), STAT = ierr) ALLOCATE(sigmar_all(nbndfst, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating sigmar_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating sigmar_all', 1)
ALLOCATE(sigmai_all(nbndfst, nktotf), STAT = ierr) ALLOCATE(sigmai_all(nbndfst, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating sigmai_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating sigmai_all', 1)
ALLOCATE(zi_all(nbndfst, nktotf), STAT = ierr) ALLOCATE(zi_all(nbndfst, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating zi_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating zi_all', 1)
sigmar_all(:, :) = zero sigmar_all(:, :, :) = zero
sigmai_all(:, :) = zero sigmai_all(:, :, :) = zero
zi_all(:, :) = zero zi_all(:, :, :) = zero
IF (iverbosity == 3) THEN IF (iverbosity == 3) THEN
ALLOCATE(sigmai_mode(nbndfst, nmodes, nktotf), STAT = ierr) ALLOCATE(sigmai_mode(nbndfst, nmodes, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating sigmai_mode', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error allocating sigmai_mode', 1)
sigmai_mode(:, :, :) = zero sigmai_mode(:, :, :, :) = zero
ENDIF ENDIF
ENDIF ! elecselfen ENDIF ! elecselfen
! !
@ -1083,6 +1092,7 @@
CALL mp_bcast(npool_tmp, ionode_id, world_comm) CALL mp_bcast(npool_tmp, ionode_id, world_comm)
CALL mp_bcast(lrepmatw2_restart, ionode_id, world_comm) CALL mp_bcast(lrepmatw2_restart, ionode_id, world_comm)
CALL mp_bcast(lrepmatw5_restart, ionode_id, world_comm) CALL mp_bcast(lrepmatw5_restart, ionode_id, world_comm)
IF (npool /= npool_tmp) CALL errore('ephwann_shuffle','Number of cores is different',1)
! !
IF (iterative_bte) THEN IF (iterative_bte) THEN
IF (mpime == ionode_id) THEN IF (mpime == ionode_id) THEN
@ -1096,7 +1106,6 @@
ENDIF ENDIF
CALL mp_bcast(inv_tau_all, ionode_id, world_comm) CALL mp_bcast(inv_tau_all, ionode_id, world_comm)
CALL mp_bcast(inv_tau_allcb, ionode_id, world_comm) CALL mp_bcast(inv_tau_allcb, ionode_id, world_comm)
IF (npool /= npool_tmp) CALL errore('ephwann_shuffle','Number of cores is different',1)
IF (lower_bnd - 1 >= 1) THEN IF (lower_bnd - 1 >= 1) THEN
inv_tau_all(:, 1:lower_bnd - 1, :) = 0d0 inv_tau_all(:, 1:lower_bnd - 1, :) = 0d0
inv_tau_allcb(:, 1:lower_bnd - 1, :) = 0d0 inv_tau_allcb(:, 1:lower_bnd - 1, :) = 0d0
@ -1444,7 +1453,7 @@
! This is only done once for the first iq. Also compute the dos at the same time ! This is only done once for the first iq. Also compute the dos at the same time
IF (iqq == iq_restart) THEN IF (iqq == iq_restart) THEN
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
CALL fermicarrier(itemp, etemp, ef0, efcb, ctype) CALL fermicarrier(itemp, etemp, ef0, efcb, ctype)
! compute dos for metals ! compute dos for metals
IF (assume_metal) THEN IF (assume_metal) THEN
@ -1563,37 +1572,42 @@
IF (mpime == ionode_id) THEN IF (mpime == ionode_id) THEN
! !
IF (phonselfen) THEN IF (phonselfen) THEN
OPEN(UNIT = lambda_phself, FILE = 'lambda.phself') DO itempphen = 1, nstemp
WRITE(lambda_phself, '(/2x,a/)') '#Lambda phonon self-energy' WRITE(tp, "(f8.3)") gtemp(itempphen) * ryd2ev / kelvin2eV
WRITE(lambda_phself, *) '#Modes ',(imode, imode = 1, nmodes) filephselfen = 'lambda.phself.' // trim(adjustl(tp)) // 'K'
DO iqq = 1, nqtotf OPEN(UNIT = lambda_phself, FILE = filephselfen)
! WRITE(lambda_phself, '(/2x,a/)') '#Lambda phonon self-energy'
!myfmt = "(*(3x,E15.5))" This does not work with PGI WRITE(lambda_phself, *) '#Modes ',(imode, imode = 1, nmodes)
myfmt = "(1000(3x,E15.5))" DO iqq = 1, nqtotf
WRITE(lambda_phself,'(i9,4x)', ADVANCE = 'no') iqq !
WRITE(lambda_phself, FMT = myfmt) (REAL(lambda_all(imode, iqq, 1)), imode = 1, nmodes) !myfmt = "(*(3x,E15.5))" This does not work with PGI
! myfmt = "(1000(3x,E15.5))"
ENDDO WRITE(lambda_phself,'(i9,4x)', ADVANCE = 'no') iqq
CLOSE(lambda_phself) WRITE(lambda_phself, FMT = myfmt) (REAL(lambda_all(imode, iqq, 1, itempphen)), imode = 1, nmodes)
! !
! SP - 03/2019
! \Gamma = 1/\tau = phonon lifetime
! \Gamma = - 2 * Im \Pi^R where \Pi^R is the retarted phonon self-energy.
! Im \Pi^R = pi*k-point weight*[f(E_k+q) - f(E_k)]*delta[E_k+q - E_k - w_q]
! Since gamma_all = pi*k-point weight*[f(E_k) - f(E_k+q)]*delta[E_k+q - E_k - w_q] we have
! \Gamma = 2 * gamma_all
OPEN(UNIT = linewidth_phself, FILE = 'linewidth.phself')
WRITE(linewidth_phself, '(a)') '# Phonon frequency and phonon lifetime in meV '
WRITE(linewidth_phself, '(a)') '# Q-point Mode Phonon freq (meV) Phonon linewidth (meV)'
DO iqq = 1, nqtotf
!
DO imode = 1, nmodes
WRITE(linewidth_phself, '(i9,i6,E20.8,E22.10)') iqq, imode, &
ryd2mev * wf(imode, iqq), 2.0d0 * ryd2mev * REAL(gamma_all(imode, iqq, 1))
ENDDO ENDDO
CLOSE(lambda_phself)
! !
ENDDO ! SP - 03/2019
CLOSE(linewidth_phself) ! \Gamma = 1/\tau = phonon lifetime
! \Gamma = - 2 * Im \Pi^R where \Pi^R is the retarted phonon self-energy.
! Im \Pi^R = pi*k-point weight*[f(E_k+q) - f(E_k)]*delta[E_k+q - E_k - w_q]
! Since gamma_all = pi*k-point weight*[f(E_k) - f(E_k+q)]*delta[E_k+q - E_k - w_q] we have
! \Gamma = 2 * gamma_all
filephlinewid = 'linewidth.phself.' // trim(adjustl(tp)) // 'K'
OPEN(UNIT = linewidth_phself, FILE = filephlinewid)
WRITE(linewidth_phself, '(a)') '# Phonon frequency and phonon lifetime in meV '
WRITE(linewidth_phself, '(a)') '# Q-point Mode Phonon freq (meV) Phonon linewidth (meV)'
DO iqq = 1, nqtotf
!
DO imode = 1, nmodes
WRITE(linewidth_phself, '(i9,i6,E20.8,E22.10)') iqq, imode, &
ryd2mev * wf(imode, iqq), 2.0d0 * ryd2mev * REAL(gamma_all(imode, iqq, 1, itempphen))
ENDDO
!
ENDDO
CLOSE(linewidth_phself)
ENDDO ! itempphen
ENDIF ENDIF
ENDIF ENDIF
IF (band_plot) CALL plot_band() IF (band_plot) CALL plot_band()
@ -1617,7 +1631,7 @@
WRITE( stdout, '(5x,"Applying a scissor shift of ",f9.5," eV to the conduction states")' ) scissor * ryd2ev WRITE( stdout, '(5x,"Applying a scissor shift of ",f9.5," eV to the conduction states")' ) scissor * ryd2ev
ENDIF ENDIF
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
IF (int_mob .OR. carrier) THEN IF (int_mob .OR. carrier) THEN
! SP: Determination of the Fermi level and dos for intrinsic or doped carrier ! SP: Determination of the Fermi level and dos for intrinsic or doped carrier
! One also need to apply scissor before calling it. ! One also need to apply scissor before calling it.
@ -1802,8 +1816,12 @@
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating wslen_g', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating wslen_g', 1)
DEALLOCATE(etf_all, STAT = ierr) DEALLOCATE(etf_all, STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating etf_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating etf_all', 1)
DEALLOCATE(transp_temp, STAT = ierr) ! Deallocate temperature when no cumulant or supercond
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating transp_temp', 1) IF ((.NOT. cumulant) .AND. (.NOT. eliashberg)) THEN
DEALLOCATE(gtemp, STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating gtemp', 1)
ENDIF
!
DEALLOCATE(et_ks, STAT = ierr) DEALLOCATE(et_ks, STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating et_ks', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating et_ks', 1)
IF (assume_metal) THEN IF (assume_metal) THEN

View File

@ -37,7 +37,8 @@
iterative_bte, longrange, scatread, nqf1, prtgkk, & iterative_bte, longrange, scatread, nqf1, prtgkk, &
nqf2, nqf3, mp_mesh_k, restart, plselfen, epbread, & nqf2, nqf3, mp_mesh_k, restart, plselfen, epbread, &
epmatkqread, selecqread, restart_step, nsmear, & epmatkqread, selecqread, restart_step, nsmear, &
nkc1, nkc2, nkc3, nqc1, nqc2, nqc3, assume_metal nkc1, nkc2, nkc3, nqc1, nqc2, nqc3, assume_metal, &
cumulant, eliashberg
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE noncollin_module, ONLY : noncolin USE noncollin_module, ONLY : noncolin
USE constants_epw, ONLY : ryd2ev, ryd2mev, one, two, zero, czero, cone, & USE constants_epw, ONLY : ryd2ev, ryd2mev, one, two, zero, czero, cone, &
@ -57,7 +58,7 @@
inv_tau_allcb, zi_allcb, exband, nbndskip, & inv_tau_allcb, zi_allcb, exband, nbndskip, &
gamma_v_all, esigmar_all, esigmai_all, & gamma_v_all, esigmar_all, esigmai_all, &
a_all, a_all_ph, wscache, lambda_v_all, threshold, & a_all, a_all_ph, wscache, lambda_v_all, threshold, &
nktotf, transp_temp, xkq, lower_bnd, upper_bnd, dos,& nktotf, gtemp, xkq, lower_bnd, upper_bnd, dos,&
nbndep nbndep
USE wan2bloch, ONLY : dmewan2bloch, hamwan2bloch, dynwan2bloch, & USE wan2bloch, ONLY : dmewan2bloch, hamwan2bloch, dynwan2bloch, &
ephwan2blochp, ephwan2bloch, vmewan2bloch, & ephwan2blochp, ephwan2bloch, vmewan2bloch, &
@ -105,6 +106,12 @@
!! Wannier centers !! Wannier centers
! !
! Local variables ! Local variables
CHARACTER(LEN = 20) :: tp
!! string for temperature
CHARACTER(LEN = 256) :: filephselfen
!! file name of phonon selfenergy
CHARACTER(LEN = 256) :: filephlinewid
!! file name of phonon linewidth
CHARACTER(LEN = 256) :: filint CHARACTER(LEN = 256) :: filint
!! Name of the file to write/read !! Name of the file to write/read
CHARACTER(LEN = 30) :: myfmt CHARACTER(LEN = 30) :: myfmt
@ -173,6 +180,8 @@
!! Counter on bands when use_ws == .TRUE. !! Counter on bands when use_ws == .TRUE.
INTEGER :: itemp INTEGER :: itemp
!! Temperature index !! Temperature index
INTEGER :: itempphen
!! Temperature counter for writing phonon selfen
INTEGER :: icbm INTEGER :: icbm
!! Index of the CBM !! Index of the CBM
INTEGER :: totq INTEGER :: totq
@ -877,34 +886,34 @@
ALLOCATE(epmatlrT(nbndsub, nbndsub, nmodes, nkf), STAT = ierr) ALLOCATE(epmatlrT(nbndsub, nbndsub, nmodes, nkf), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating epmatlrT', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating epmatlrT', 1)
IF (phonselfen) THEN IF (phonselfen) THEN
ALLOCATE(lambda_all(nmodes, totq, nsmear), STAT = ierr) ALLOCATE(lambda_all(nmodes, totq, nsmear, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating lambda_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating lambda_all', 1)
ALLOCATE(lambda_v_all(nmodes, totq, nsmear), STAT = ierr) ALLOCATE(lambda_v_all(nmodes, totq, nsmear, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating lambda_v_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating lambda_v_all', 1)
ALLOCATE(gamma_all(nmodes, totq, nsmear), STAT = ierr) ALLOCATE(gamma_all(nmodes, totq, nsmear, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating gamma_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating gamma_all', 1)
ALLOCATE(gamma_v_all(nmodes, totq, nsmear), STAT = ierr) ALLOCATE(gamma_v_all(nmodes, totq, nsmear, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating gamma_v_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating gamma_v_all', 1)
lambda_all(:, :, :) = zero lambda_all(:, :, :, :) = zero
lambda_v_all(:, :, :) = zero lambda_v_all(:, :, :, :) = zero
gamma_all(:, :, :) = zero gamma_all(:, :, :, :) = zero
gamma_v_all(:, :, :) = zero gamma_v_all(:, :, :, :) = zero
ENDIF ENDIF
IF (specfun_el .OR. specfun_pl) THEN IF (specfun_el .OR. specfun_pl) THEN
ALLOCATE(esigmar_all(nbndfst, nktotf, nw_specfun), STAT = ierr) ALLOCATE(esigmar_all(nbndfst, nktotf, nw_specfun, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating esigmar_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating esigmar_all', 1)
ALLOCATE(esigmai_all(nbndfst, nktotf, nw_specfun), STAT = ierr) ALLOCATE(esigmai_all(nbndfst, nktotf, nw_specfun, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating esigmai_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating esigmai_all', 1)
ALLOCATE(a_all(nw_specfun, nktotf), STAT = ierr) ALLOCATE(a_all(nw_specfun, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating a_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating a_all', 1)
esigmar_all(:, :, :) = zero esigmar_all(:, :, :, :) = zero
esigmai_all(:, :, :) = zero esigmai_all(:, :, :, :) = zero
a_all(:, :) = zero a_all(:, :, :) = zero
ENDIF ENDIF
IF (specfun_ph) THEN IF (specfun_ph) THEN
ALLOCATE(a_all_ph(nw_specfun, totq), STAT = ierr) ALLOCATE(a_all_ph(nw_specfun, totq, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating a_all_ph', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating a_all_ph', 1)
a_all_ph(:, :) = zero a_all_ph(:, :, :) = zero
ENDIF ENDIF
IF (scattering .AND. .NOT. iterative_bte) THEN IF (scattering .AND. .NOT. iterative_bte) THEN
ALLOCATE(inv_tau_all(nstemp, nbndfst, nktotf), STAT = ierr) ALLOCATE(inv_tau_all(nstemp, nbndfst, nktotf), STAT = ierr)
@ -923,19 +932,19 @@
zi_allcb(:, :, :) = zero zi_allcb(:, :, :) = zero
ENDIF ENDIF
IF (elecselfen .OR. plselfen) THEN IF (elecselfen .OR. plselfen) THEN
ALLOCATE(sigmar_all(nbndfst, nktotf), STAT = ierr) ALLOCATE(sigmar_all(nbndfst, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating sigmar_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating sigmar_all', 1)
ALLOCATE(sigmai_all(nbndfst, nktotf), STAT = ierr) ALLOCATE(sigmai_all(nbndfst, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating sigmai_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating sigmai_all', 1)
ALLOCATE(zi_all(nbndfst, nktotf), STAT = ierr) ALLOCATE(zi_all(nbndfst, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating zi_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating zi_all', 1)
sigmar_all(:, :) = zero sigmar_all(:, :, :) = zero
sigmai_all(:, :) = zero sigmai_all(:, :, :) = zero
zi_all(:, :) = zero zi_all(:, :, :) = zero
IF (iverbosity == 3) THEN IF (iverbosity == 3) THEN
ALLOCATE(sigmai_mode(nbndfst, nmodes, nktotf), STAT = ierr) ALLOCATE(sigmai_mode(nbndfst, nmodes, nktotf, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating sigmai_mode', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error allocating sigmai_mode', 1)
sigmai_mode(:, :, :) = zero sigmai_mode(:, :, :, :) = zero
ENDIF ENDIF
ENDIF ! elecselfen ENDIF ! elecselfen
! !
@ -993,6 +1002,7 @@
CALL mp_bcast(npool_tmp, ionode_id, world_comm) CALL mp_bcast(npool_tmp, ionode_id, world_comm)
CALL mp_bcast(lrepmatw2_restart, ionode_id, world_comm) CALL mp_bcast(lrepmatw2_restart, ionode_id, world_comm)
CALL mp_bcast(lrepmatw5_restart, ionode_id, world_comm) CALL mp_bcast(lrepmatw5_restart, ionode_id, world_comm)
IF (npool /= npool_tmp) CALL errore('ephwann_shuffle','Number of cores is different',1)
! !
IF (iterative_bte) THEN IF (iterative_bte) THEN
IF (mpime == ionode_id) THEN IF (mpime == ionode_id) THEN
@ -1006,7 +1016,6 @@
ENDIF ENDIF
CALL mp_bcast(inv_tau_all, ionode_id, world_comm) CALL mp_bcast(inv_tau_all, ionode_id, world_comm)
CALL mp_bcast(inv_tau_allcb, ionode_id, world_comm) CALL mp_bcast(inv_tau_allcb, ionode_id, world_comm)
IF (npool /= npool_tmp) CALL errore('ephwann_shuffle','Number of cores is different',1)
IF (lower_bnd - 1 >= 1) THEN IF (lower_bnd - 1 >= 1) THEN
inv_tau_all(:, 1:lower_bnd - 1, :) = 0d0 inv_tau_all(:, 1:lower_bnd - 1, :) = 0d0
inv_tau_allcb(:, 1:lower_bnd - 1, :) = 0d0 inv_tau_allcb(:, 1:lower_bnd - 1, :) = 0d0
@ -1341,7 +1350,7 @@
! This is only done once for the first iq. Also compute the dos at the same time ! This is only done once for the first iq. Also compute the dos at the same time
IF (iqq == iq_restart) THEN IF (iqq == iq_restart) THEN
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
CALL fermicarrier(itemp, etemp, ef0, efcb, ctype) CALL fermicarrier(itemp, etemp, ef0, efcb, ctype)
! compute dos for metals ! compute dos for metals
IF (assume_metal) THEN IF (assume_metal) THEN
@ -1400,37 +1409,42 @@
IF (mpime == ionode_id) THEN IF (mpime == ionode_id) THEN
! !
IF (phonselfen) THEN IF (phonselfen) THEN
OPEN(UNIT = lambda_phself, FILE = 'lambda.phself') DO itempphen = 1, nstemp
WRITE(lambda_phself, '(/2x,a/)') '#Lambda phonon self-energy' WRITE(tp, "(f8.3)") gtemp(itempphen) * ryd2ev / kelvin2eV
WRITE(lambda_phself, *) '#Modes ',(imode, imode = 1, nmodes) filephselfen = 'lambda.phself.' // trim(adjustl(tp)) // 'K'
DO iqq = 1, nqtotf OPEN(UNIT = lambda_phself, FILE = filephselfen)
! WRITE(lambda_phself, '(/2x,a/)') '#Lambda phonon self-energy'
!myfmt = "(*(3x,E15.5))" This does not work with PGI WRITE(lambda_phself, *) '#Modes ',(imode, imode = 1, nmodes)
myfmt = "(1000(3x,E15.5))" DO iqq = 1, nqtotf
WRITE(lambda_phself,'(i9,4x)', ADVANCE = 'no') iqq !
WRITE(lambda_phself, FMT = myfmt) (REAL(lambda_all(imode, iqq, 1)), imode = 1, nmodes) !myfmt = "(*(3x,E15.5))" This does not work with PGI
! myfmt = "(1000(3x,E15.5))"
ENDDO WRITE(lambda_phself,'(i9,4x)', ADVANCE = 'no') iqq
CLOSE(lambda_phself) WRITE(lambda_phself, FMT = myfmt) (REAL(lambda_all(imode, iqq, 1, itempphen)), imode = 1, nmodes)
! !
! SP - 03/2019
! \Gamma = 1/\tau = phonon lifetime
! \Gamma = - 2 * Im \Pi^R where \Pi^R is the retarted phonon self-energy.
! Im \Pi^R = pi*k-point weight*[f(E_k+q) - f(E_k)]*delta[E_k+q - E_k - w_q]
! Since gamma_all = pi*k-point weight*[f(E_k) - f(E_k+q)]*delta[E_k+q - E_k - w_q] we have
! \Gamma = 2 * gamma_all
OPEN(UNIT = linewidth_phself, FILE = 'linewidth.phself')
WRITE(linewidth_phself, '(a)') '# Phonon frequency and phonon lifetime in meV '
WRITE(linewidth_phself, '(a)') '# Q-point Mode Phonon freq (meV) Phonon linewidth (meV)'
DO iqq = 1, nqtotf
!
DO imode = 1, nmodes
WRITE(linewidth_phself, '(i9,i6,E20.8,E22.10)') iqq, imode, &
ryd2mev * wf(imode, iqq), 2.0d0 * ryd2mev * REAL(gamma_all(imode, iqq, 1))
ENDDO ENDDO
CLOSE(lambda_phself)
! !
ENDDO ! SP - 03/2019
CLOSE(linewidth_phself) ! \Gamma = 1/\tau = phonon lifetime
! \Gamma = - 2 * Im \Pi^R where \Pi^R is the retarted phonon self-energy.
! Im \Pi^R = pi*k-point weight*[f(E_k+q) - f(E_k)]*delta[E_k+q - E_k - w_q]
! Since gamma_all = pi*k-point weight*[f(E_k) - f(E_k+q)]*delta[E_k+q - E_k - w_q] we have
! \Gamma = 2 * gamma_all
filephlinewid = 'linewidth.phself.' // trim(adjustl(tp)) // 'K'
OPEN(UNIT = linewidth_phself, FILE = filephlinewid)
WRITE(linewidth_phself, '(a)') '# Phonon frequency and phonon lifetime in meV '
WRITE(linewidth_phself, '(a)') '# Q-point Mode Phonon freq (meV) Phonon linewidth (meV)'
DO iqq = 1, nqtotf
!
DO imode = 1, nmodes
WRITE(linewidth_phself, '(i9,i6,E20.8,E22.10)') iqq, imode, &
ryd2mev * wf(imode, iqq), 2.0d0 * ryd2mev * REAL(gamma_all(imode, iqq, 1, itempphen))
ENDDO
!
ENDDO
CLOSE(linewidth_phself)
ENDDO ! itempphen
ENDIF ENDIF
ENDIF ENDIF
IF (band_plot) CALL plot_band() IF (band_plot) CALL plot_band()
@ -1451,7 +1465,7 @@
WRITE( stdout, '(5x,"Applying a scissor shift of ",f9.5," eV to the conduction states")' ) scissor * ryd2ev WRITE( stdout, '(5x,"Applying a scissor shift of ",f9.5," eV to the conduction states")' ) scissor * ryd2ev
ENDIF ENDIF
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
IF (int_mob .OR. carrier) THEN IF (int_mob .OR. carrier) THEN
! SP: Determination of the Fermi level for intrinsic or doped carrier ! SP: Determination of the Fermi level for intrinsic or doped carrier
! One also need to apply scissor before calling it. ! One also need to apply scissor before calling it.
@ -1632,8 +1646,12 @@
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error deallocating wslen_g', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error deallocating wslen_g', 1)
DEALLOCATE(etf_all, STAT = ierr) DEALLOCATE(etf_all, STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error deallocating etf_all', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error deallocating etf_all', 1)
DEALLOCATE(transp_temp, STAT = ierr) ! Deallocate temperature when no cumulant or supercond
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error deallocating transp_temp', 1) IF ((.NOT. cumulant) .AND. (.NOT. eliashberg)) THEN
DEALLOCATE(gtemp, STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle', 'Error deallocating gtemp', 1)
ENDIF
!
DEALLOCATE(et_ks, STAT = ierr) DEALLOCATE(et_ks, STAT = ierr)
IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error deallocating et_ks', 1) IF (ierr /= 0) CALL errore('ephwann_shuffle_mem', 'Error deallocating et_ks', 1)
IF (assume_metal) THEN IF (assume_metal) THEN

View File

@ -94,7 +94,6 @@
WRITE(stdout,'(a)') " Be aware that some consistency checks are therefore not done. " WRITE(stdout,'(a)') " Be aware that some consistency checks are therefore not done. "
WRITE(stdout,'(a)') " ------------------------------------------------------------------------ " WRITE(stdout,'(a)') " ------------------------------------------------------------------------ "
WRITE(stdout,'(a)') " " WRITE(stdout,'(a)') " "
CALL epw_setup_restart()
ELSE ELSE
CALL epw_setup() CALL epw_setup()
ENDIF ENDIF

View File

@ -31,7 +31,7 @@
USE start_k, ONLY : nk1, nk2, nk3 USE start_k, ONLY : nk1, nk2, nk3
USe disp, ONLY : nq1, nq2, nq3 USe disp, ONLY : nq1, nq2, nq3
USE epwcom, ONLY : delta_smear, nsmear, dis_win_min, dis_win_max, wannierize, & USE epwcom, ONLY : delta_smear, nsmear, dis_win_min, dis_win_max, wannierize, &
ngaussw, dvscf_dir, eptemp, bands_skipped, wdata, kmaps, & ngaussw, dvscf_dir, bands_skipped, wdata, kmaps, ntempxx, &
num_iter, dis_froz_max, fsthick, dis_froz_min, eig_read, & num_iter, dis_froz_max, fsthick, dis_froz_min, eig_read, &
vme, degaussw, epexst, epwwrite, epbread, phonselfen, nqc2,& vme, degaussw, epexst, epwwrite, epbread, phonselfen, nqc2,&
elecselfen, a2f, plselfen, specfun_pl, nest_fn, filukk, & elecselfen, a2f, plselfen, specfun_pl, nest_fn, filukk, &
@ -39,7 +39,7 @@
nqc3, nkf1, nkf2, nkf3, nqf1, nqf2, nqf3, eps_acustic, nw, & nqc3, nkf1, nkf2, nkf3, nqf1, nqf2, nqf3, eps_acustic, nw, &
wmax, wmin, mp_mesh_q, mp_mesh_k, filqf, filkf, nswi, nc, & wmax, wmin, mp_mesh_q, mp_mesh_k, filqf, filkf, nswi, nc, &
delta_qsmear, degaussq, band_plot, ephwrite, nstemp, & delta_qsmear, degaussq, band_plot, ephwrite, nstemp, &
broyden_beta, conv_thr_raxis, tempsmax, tempsmin, temps, & broyden_beta, conv_thr_raxis, temps, tempsmin, tempsmax, &
broyden_ndim, wscut, wsfc, nqstep, limag, lreal, muc, & broyden_ndim, wscut, wsfc, nqstep, limag, lreal, muc, &
gap_edge, conv_thr_iaxis, nqsmear, iprint, wepexst, nswfc, & gap_edge, conv_thr_iaxis, nqsmear, iprint, wepexst, nswfc, &
epwread, eliashberg, imag_read, kerread, kerwrite, lunif, & epwread, eliashberg, imag_read, kerread, kerwrite, lunif, &
@ -47,7 +47,7 @@
ep_coupling, nw_specfun, wmax_specfun, wmin_specfun, & ep_coupling, nw_specfun, wmax_specfun, wmin_specfun, &
laniso, lpolar, lifc, asr_typ, lscreen, scr_typ, nbndsub, & laniso, lpolar, lifc, asr_typ, lscreen, scr_typ, nbndsub, &
fermi_diff, smear_rpa, cumulant, bnd_cum, proj, write_wfn, & fermi_diff, smear_rpa, cumulant, bnd_cum, proj, write_wfn, &
iswitch, ntempxx, liso, lacon, lpade, etf_mem, epbwrite, & iswitch, liso, lacon, lpade, etf_mem, epbwrite, &
nsiter, conv_thr_racon, specfun_el, specfun_ph, & nsiter, conv_thr_racon, specfun_el, specfun_ph, &
system_2d, delta_approx, title, int_mob, scissor, & system_2d, delta_approx, title, int_mob, scissor, &
iterative_bte, scattering, selecqread, epmatkqread, & iterative_bte, scattering, selecqread, epmatkqread, &
@ -61,7 +61,7 @@
wannier_plot_radius, & wannier_plot_radius, &
fixsym, epw_no_t_rev, epw_tr, epw_nosym, epw_noinv fixsym, epw_no_t_rev, epw_tr, epw_nosym, epw_noinv
USE klist_epw, ONLY : xk_all, xk_loc, xk_cryst, isk_all, isk_loc, et_all, et_loc USE klist_epw, ONLY : xk_all, xk_loc, xk_cryst, isk_all, isk_loc, et_all, et_loc
USE elph2, ONLY : elph, num_wannier_plot, wanplotlist USE elph2, ONLY : elph, num_wannier_plot, wanplotlist, gtemp
USE constants_epw, ONLY : ryd2mev, ryd2ev, ev2cmm1, kelvin2eV, zero, eps20, ang2m USE constants_epw, ONLY : ryd2mev, ryd2ev, ev2cmm1, kelvin2eV, zero, eps20, ang2m
USE io_files, ONLY : tmp_dir, prefix USE io_files, ONLY : tmp_dir, prefix
USE control_flags, ONLY : iverbosity, modenum, gamma_only USE control_flags, ONLY : iverbosity, modenum, gamma_only
@ -115,6 +115,10 @@
!! Counter for loops !! Counter for loops
INTEGER :: ik INTEGER :: ik
!! Counter on k-points !! Counter on k-points
INTEGER :: itemp
!! counter on temperatures
INTEGER :: nstemp_hold = 0
!! placeholder for nstemp
INTEGER :: nk1tmp INTEGER :: nk1tmp
!! temp vars for saving kgrid info !! temp vars for saving kgrid info
INTEGER :: nk2tmp INTEGER :: nk2tmp
@ -129,7 +133,7 @@
elph, nq1, nq2, nq3, nk1, nk2, nk3, nbndsub, & elph, nq1, nq2, nq3, nk1, nk2, nk3, nbndsub, &
filukk, epbread, epbwrite, epwread, epwwrite, etf_mem, kmaps, & filukk, epbread, epbwrite, epwread, epwwrite, etf_mem, kmaps, &
eig_read, wepexst, epexst, vme, & eig_read, wepexst, epexst, vme, &
degaussw, fsthick, eptemp, nsmear, delta_smear, & degaussw, fsthick, nsmear, delta_smear, &
dvscf_dir, ngaussw, epmatkqread, selecqread, & dvscf_dir, ngaussw, epmatkqread, selecqread, &
wannierize, dis_win_max, dis_win_min, dis_froz_min, dis_froz_max, & wannierize, dis_win_max, dis_win_min, dis_froz_min, dis_froz_max, &
num_iter, proj, bands_skipped, wdata, iprint, write_wfn, & num_iter, proj, bands_skipped, wdata, iprint, write_wfn, &
@ -140,7 +144,7 @@
mp_mesh_k, mp_mesh_q, filqf, filkf, ephwrite, & mp_mesh_k, mp_mesh_q, filqf, filkf, ephwrite, &
band_plot, degaussq, delta_qsmear, nqsmear, nqstep, & band_plot, degaussq, delta_qsmear, nqsmear, nqstep, &
nswfc, nswc, nswi, pwc, wsfc, wscut, system_2d, & nswfc, nswc, nswi, pwc, wsfc, wscut, system_2d, &
broyden_beta, broyden_ndim, nstemp, tempsmin, tempsmax, temps, & broyden_beta, broyden_ndim, nstemp, temps, &
conv_thr_raxis, conv_thr_iaxis, conv_thr_racon, & conv_thr_raxis, conv_thr_iaxis, conv_thr_racon, &
gap_edge, nsiter, muc, lreal, limag, lpade, lacon, liso, laniso, lpolar,& gap_edge, nsiter, muc, lreal, limag, lpade, lacon, liso, laniso, lpolar,&
lscreen, scr_typ, fermi_diff, smear_rpa, cumulant, bnd_cum, & lscreen, scr_typ, fermi_diff, smear_rpa, cumulant, bnd_cum, &
@ -433,7 +437,6 @@
eps_acustic = 5.d0 ! cm-1 eps_acustic = 5.d0 ! cm-1
nw = 10 nw = 10
fsthick = 1.d10 ! eV fsthick = 1.d10 ! eV
eptemp = 300.0d0
degaussw = 0.025d0 ! eV degaussw = 0.025d0 ! eV
a2f = .FALSE. a2f = .FALSE.
etf_mem = 1 etf_mem = 1
@ -513,9 +516,7 @@
conv_thr_iaxis = 1.d-05 conv_thr_iaxis = 1.d-05
conv_thr_racon = 5.d-04 conv_thr_racon = 5.d-04
gap_edge = 0.d0 gap_edge = 0.d0
nstemp = 1 nstemp = 0
tempsmin = 0.d0
tempsmax = 0.d0
temps(:) = 0.d0 temps(:) = 0.d0
nsiter = 40 nsiter = 40
muc = 0.d0 muc = 0.d0
@ -711,10 +712,10 @@
'You should define either filqf or nqf when band_plot = .true.', 1) 'You should define either filqf or nqf when band_plot = .true.', 1)
IF (filkf /= ' ' .AND. .NOT. efermi_read) CALL errore('epw_readin', & IF (filkf /= ' ' .AND. .NOT. efermi_read) CALL errore('epw_readin', &
'WARNING: if k-points are along a line, then efermi_read=.true. and fermi_energy must be given in the input file', -1) 'WARNING: if k-points are along a line, then efermi_read=.true. and fermi_energy must be given in the input file', -1)
IF (scattering .AND. nstemp < 1) CALL errore('epw_readin', 'wrong number of nstemp', 1) IF (MAXVAL(temps(:)) == 0.d0 .AND. nstemp > 0) &
IF (scattering .AND. MAXVAL(temps(:)) > 0.d0 .AND. tempsmin > 0.d0 .AND. tempsmax > 0.d0) & CALL errore('epw_readin', 'temps(:) must be specified if nstemp > 0', 1)
CALL errore('epw_readin', 'define either (tempsmin and tempsmax) or temps(:)', 1) IF (nstemp > ntempxx) &
IF (scattering .AND. tempsmax < tempsmin) CALL errore('epw_readin', 'tempsmax should be greater than tempsmin', 1) CALL errore('epw_readin', 'Maximum value of nstemp that can be used is 50', 1)
IF ((ABS(ncarrier) > 1E+5) .AND. .NOT. carrier) CALL errore('epw_readin', & IF ((ABS(ncarrier) > 1E+5) .AND. .NOT. carrier) CALL errore('epw_readin', &
'carrier must be .TRUE. if you specify ncarrier.', 1) 'carrier must be .TRUE. if you specify ncarrier.', 1)
IF (carrier .AND. (ABS(ncarrier) < 1E+5)) CALL errore('epw_readin', & IF (carrier .AND. (ABS(ncarrier) < 1E+5)) CALL errore('epw_readin', &
@ -758,6 +759,50 @@
WRITE(stdout, '(5x,a)') " to control the lower bound of band manifold." WRITE(stdout, '(5x,a)') " to control the lower bound of band manifold."
ENDIF ENDIF
! !
! setup temperature array
DO itemp = 1, ntempxx
IF (temps(itemp) > 0.d0) THEN
nstemp_hold = itemp
ENDIF
ENDDO
!
!case of nstemp > 0 but temps(:) = 0 is caught above
IF (nstemp_hold == 0 .AND. nstemp == 0) THEN !default mode (nstemp_hold == 0 if temps(:) = 0)
nstemp = 1
temps(1) = 300
WRITE(stdout, '(/,5x,a)') 'No temperature supplied. Setting temps(:) to 300 K.'
ELSE IF (nstemp == 0 .OR. nstemp_hold == nstemp) THEN !list mode
nstemp = nstemp_hold !catches if nstemp not supplied, no effect if it is
WRITE(stdout, '(/,5x,a)') 'Reading supplied temperature list.'
ELSE IF (nstemp_hold < nstemp .AND. nstemp_hold == 2) THEN !even spacing mode
tempsmin = temps(1)
tempsmax = temps(2)
IF (tempsmin >= tempsmax) THEN !bad start and end points
CALL errore('epw_readin', 'Error generating temperatures: need temps(1) < temps(2)', 1)
ELSE
DO itemp = 1, nstemp
temps(itemp) = tempsmin + DBLE(itemp - 1) * (tempsmax - tempsmin) / DBLE(nstemp - 1)
END DO
END IF
WRITE(stdout, '(/,5x,a)') 'Generating evenly spaced temperature list.'
ELSE IF (nstemp_hold .NE. nstemp) THEN !temps and nstemp not match
! Ignore nstemp setting, print warning
WRITE(stdout, '(/,5x,a)') 'WARNING: Mismatch between temps(:) and nstemp'
WRITE(stdout, '(/,5x,a)') 'WARNING: Using supplied temperature list and ignoring nstemp'
nstemp = nstemp_hold
! CALL errore('epw_readin', 'Error: too many temperatures for given nstemp', 1)
! ELSE IF (nstemp > nstemp_hold) THEN !need more temps
! CALL errore('epw_readin', 'Error: not enough temperatures given in temps(:)', 1)
ELSE
CALL errore('epw_readin', 'Error generating temperatures: unknown error', 1)
END IF
! go from K to Ry
temps(:) = temps(:) * kelvin2eV / ryd2ev
!
ALLOCATE(gtemp(nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('epw_readin', 'Error allocating gtemp', 1)
gtemp(:) = temps(1:nstemp)
!
! In the case of Fermi-Dirac distribution one should probably etemp instead of degauss. ! In the case of Fermi-Dirac distribution one should probably etemp instead of degauss.
! This is achieved with assume_metal == .true. ! This is achieved with assume_metal == .true.
IF (ngaussw == -99 .AND. .NOT. assume_metal) THEN IF (ngaussw == -99 .AND. .NOT. assume_metal) THEN
@ -783,7 +828,6 @@
! 1 K in eV = 8.6173423e-5 ! 1 K in eV = 8.6173423e-5
! from K to Ryd ! from K to Ryd
! Out-of bound issue with GCC compiler. Multiple Fermi temp is not used anyway. ! Out-of bound issue with GCC compiler. Multiple Fermi temp is not used anyway.
eptemp = eptemp * kelvin2eV / ryd2ev
! !
! from cm-1 to Ryd ! from cm-1 to Ryd
eps_acustic = eps_acustic / ev2cmm1 / ryd2ev eps_acustic = eps_acustic / ev2cmm1 / ryd2ev
@ -805,19 +849,6 @@
omegamin = omegamin / ryd2ev omegamin = omegamin / ryd2ev
omegamax = omegamax / ryd2ev omegamax = omegamax / ryd2ev
omegastep = omegastep / ryd2ev omegastep = omegastep / ryd2ev
IF (scattering) THEN
DO i = 1, ntempxx
IF (temps(i) > 0.d0) THEN
nstemp = i
ENDIF
ENDDO
!
! go from K to Ry
temps(:) = temps(:) * kelvin2eV / ryd2ev
tempsmin = tempsmin * kelvin2eV / ryd2ev
tempsmax = tempsmax * kelvin2eV / ryd2ev
!
ENDIF
! !
xq(:) = zero xq(:) = zero
! !
@ -835,6 +866,13 @@
IF (wannier_plot) CALL mp_bcast(wanplotlist, meta_ionode_id, world_comm) IF (wannier_plot) CALL mp_bcast(wanplotlist, meta_ionode_id, world_comm)
! !
CALL bcast_epw_input() CALL bcast_epw_input()
IF (.NOT. meta_ionode) THEN
! need to allocate gtemp after the initial bcast_epw_input so all nodes have nstemp
ALLOCATE(gtemp(nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('epw_readin', 'Error allocating gtemp', 1)
ENDIF
!bcast gtemp following allocation
CALL mp_bcast(gtemp, meta_ionode_id, world_comm)
! !
! Here we finished the reading of the input file. ! Here we finished the reading of the input file.
! Now allocate space for pwscf variables, read and check them. ! Now allocate space for pwscf variables, read and check them.

View File

@ -19,7 +19,6 @@
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE ions_base, ONLY : tau, nat, ntyp => nsp, ityp USE ions_base, ONLY : tau, nat, ntyp => nsp, ityp
USE cell_base, ONLY : at, bg USE cell_base, ONLY : at, bg
USE io_global, ONLY : ionode_id
USE klist, ONLY : nkstot USE klist, ONLY : nkstot
USE lsda_mod, ONLY : nspin, starting_magnetization USE lsda_mod, ONLY : nspin, starting_magnetization
USE scf, ONLY : v, vrs, vltot, kedtau USE scf, ONLY : v, vrs, vltot, kedtau
@ -29,7 +28,7 @@
USE eqv, ONLY : dmuxc USE eqv, ONLY : dmuxc
USE uspp_param, ONLY : upf USE uspp_param, ONLY : upf
USE spin_orb, ONLY : domag USE spin_orb, ONLY : domag
USE constants_epw, ONLY : zero, eps5, czero USE constants_epw, ONLY : zero, eps5, czero, ryd2ev, kelvin2ev
USE nlcc_ph, ONLY : drc USE nlcc_ph, ONLY : drc
USE uspp, ONLY : nlcc_any USE uspp, ONLY : nlcc_any
USE control_ph, ONLY : search_sym, u_from_file USE control_ph, ONLY : search_sym, u_from_file
@ -40,12 +39,10 @@
USE funct, ONLY : dft_is_gradient USE funct, ONLY : dft_is_gradient
USE mp_global, ONLY : world_comm USE mp_global, ONLY : world_comm
USE mp, ONLY : mp_bcast USE mp, ONLY : mp_bcast
USE epwcom, ONLY : scattering, nstemp, tempsmin, tempsmax, temps, & USE epwcom, ONLY : scattering, nkc1, nkc2, nkc3
nkc1, nkc2, nkc3
USE klist_epw, ONLY : xk_cryst USE klist_epw, ONLY : xk_cryst
USE fft_base, ONLY : dfftp USE fft_base, ONLY : dfftp
USE gvecs, ONLY : doublegrid USE gvecs, ONLY : doublegrid
USE elph2, ONLY : transp_temp
USE noncollin_module, ONLY : noncolin, m_loc, angle1, angle2, ux, nspin_mag USE noncollin_module, ONLY : noncolin, m_loc, angle1, angle2, ux, nspin_mag
! --------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------
! Added for polaron calculations. Originally by Danny Sio, modified by Chao Lian. ! Added for polaron calculations. Originally by Danny Sio, modified by Chao Lian.
@ -65,8 +62,6 @@
!! counter on irrepr !! counter on irrepr
INTEGER :: na INTEGER :: na
!! counter on atoms !! counter on atoms
INTEGER :: itemp
!! counter on temperatures
INTEGER :: ierr INTEGER :: ierr
!! Error status !! Error status
REAL(KIND = DP) :: xx_c, yy_c, zz_c REAL(KIND = DP) :: xx_c, yy_c, zz_c
@ -206,83 +201,9 @@
npertx = MAX(npertx, npert(irr)) npertx = MAX(npertx, npert(irr))
ENDDO ENDDO
! !
ALLOCATE(transp_temp(nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('epw_setup', 'Error allocating transp_temp', 1)
!
transp_temp(:) = zero
! In case of scattering calculation
IF (scattering) THEN
!
IF (MAXVAL(temps(:)) > zero) THEN
transp_temp(:) = temps(:)
ELSE
IF (nstemp == 1) THEN
transp_temp(1) = tempsmin
ELSE
DO itemp = 1, nstemp
transp_temp(itemp) = tempsmin + DBLE(itemp - 1) * (tempsmax - tempsmin) / DBLE(nstemp - 1)
ENDDO
ENDIF
ENDIF
ENDIF
! We have to bcast here because before it has not been allocated
CALL mp_bcast(transp_temp, ionode_id, world_comm)
!
CALL stop_clock('epw_setup') CALL stop_clock('epw_setup')
RETURN RETURN
! !
!----------------------------------------------------------------------- !-----------------------------------------------------------------------
END SUBROUTINE epw_setup END SUBROUTINE epw_setup
!----------------------------------------------------------------------- !-----------------------------------------------------------------------
!
!-----------------------------------------------------------------------
SUBROUTINE epw_setup_restart()
!-----------------------------------------------------------------------
!!
!! Setup in the case of a restart
!!
! ----------------------------------------------------------------------
USE constants_epw, ONLY : zero
USE io_global, ONLY : ionode_id
USE mp_global, ONLY : world_comm
USE mp, ONLY : mp_bcast
USE epwcom, ONLY : scattering, nstemp, tempsmin, tempsmax, temps
USE elph2, ONLY : transp_temp
!
IMPLICIT NONE
!
INTEGER :: itemp
!! Counter on temperature
INTEGER :: ierr
!! Error status
!
CALL start_clock('epw_setup')
!
ALLOCATE(transp_temp(nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('epw_setup_restart', 'Error allocating transp_temp', 1)
!
transp_temp(:) = zero
! In case of scattering calculation
IF (scattering) THEN
IF (MAXVAL(temps(:)) > zero) THEN
transp_temp(:) = temps(:)
ELSE
IF (nstemp == 1) THEN
transp_temp(1) = tempsmin
ELSE
DO itemp = 1, nstemp
transp_temp(itemp) = tempsmin + DBLE(itemp - 1) * (tempsmax - tempsmin) / DBLE(nstemp - 1)
ENDDO
ENDIF
ENDIF
ENDIF
!
! We have to bcast here because before it has not been allocated
CALL mp_bcast(transp_temp, ionode_id, world_comm)
!
CALL stop_clock('epw_setup')
!
RETURN
!-----------------------------------------------------------------------
END SUBROUTINE epw_setup_restart
!-----------------------------------------------------------------------

View File

@ -212,8 +212,8 @@
!! Switch for symmetry operations !! Switch for symmetry operations
INTEGER :: nwanxx = 200 INTEGER :: nwanxx = 200
!! parameter used in writing prefix.win file. !! parameter used in writing prefix.win file.
INTEGER :: ntempxx = 25 INTEGER :: ntempxx = 50
!! Maximum number of wannier functions !! Maximum number of temperatures
INTEGER :: etf_mem INTEGER :: etf_mem
!! If 0, all in memory. If 1, less is stored in memory (read files). !! If 0, all in memory. If 1, less is stored in memory (read files).
INTEGER :: scr_typ INTEGER :: scr_typ
@ -222,6 +222,14 @@
!! band index for which the cumulant calculation is done !! band index for which the cumulant calculation is done
INTEGER :: mob_maxiter INTEGER :: mob_maxiter
!! Maximum number of iteration for the IBTE !! Maximum number of iteration for the IBTE
INTEGER :: nstemp
!! nr. of temperature points for temperature dependent caclulations
REAL(KIND = DP) :: tempsmin
!! min. temperature in Eliashberg equations - deprecated as an input parameter
REAL(KIND = DP) :: tempsmax
!! max. temperature - deprecated as an input parameter
REAL(KIND = DP) :: temps(50)
!! input temperature array (units of Kelvin)
! !
! Superconductivity ! Superconductivity
INTEGER :: nswfc INTEGER :: nswfc
@ -230,8 +238,6 @@
!! nr. of grid points between (wsfc,wscut) !! nr. of grid points between (wsfc,wscut)
INTEGER :: nswi INTEGER :: nswi
!! nr. of grid points for Eliashberg equations of imaginary axis !! nr. of grid points for Eliashberg equations of imaginary axis
INTEGER :: nstemp
!! nr. of temperature points for Eliashberg equations
INTEGER :: nsiter INTEGER :: nsiter
!! nr. of iterations for self-consistency !! nr. of iterations for self-consistency
INTEGER :: broyden_ndim INTEGER :: broyden_ndim
@ -245,8 +251,6 @@
!! smearing width for Fermi surface average in e-ph coupling after wann interp !! smearing width for Fermi surface average in e-ph coupling after wann interp
REAL(KIND = DP) :: fsthick REAL(KIND = DP) :: fsthick
!! thickness of the Fermi shell for averaging the e-ph matrix element !! thickness of the Fermi shell for averaging the e-ph matrix element
REAL(KIND = DP) :: eptemp
! temperature for the electronic Fermi occupations in the e-p calculation
REAL(KIND = DP) :: wmin REAL(KIND = DP) :: wmin
!! min frequency for frequency scan in \delta( e_k - e_k+q - w ) when strict sel. rule is applied !! min frequency for frequency scan in \delta( e_k - e_k+q - w ) when strict sel. rule is applied
REAL(KIND = DP) :: wmax REAL(KIND = DP) :: wmax
@ -295,10 +299,6 @@
!! power used to define a non-uniform grid between wsfc and wscut !! power used to define a non-uniform grid between wsfc and wscut
REAL(KIND = DP) :: wscut REAL(KIND = DP) :: wscut
!! upper limit cutoff frequency in Eliashberg equations (at least 5 times wsphmax) !! upper limit cutoff frequency in Eliashberg equations (at least 5 times wsphmax)
REAL(KIND = DP) :: tempsmin
!! min. temperature in Eliashberg equations
REAL(KIND = DP) :: tempsmax
!! max. temperature
REAL(KIND = DP) :: broyden_beta REAL(KIND = DP) :: broyden_beta
!! mixing factor for broyden mixing !! mixing factor for broyden mixing
REAL(KIND = DP) :: conv_thr_raxis REAL(KIND = DP) :: conv_thr_raxis
@ -318,8 +318,6 @@
!! min frequency in electron spectral function due to e-p interaction !! min frequency in electron spectral function due to e-p interaction
REAL(KIND = DP) :: wmax_specfun REAL(KIND = DP) :: wmax_specfun
!! max frequency in electron spectral function due to e-p `interaction !! max frequency in electron spectral function due to e-p `interaction
REAL(KIND = DP) :: temps(50)
!! temperature entering in the Eliashberg equtions (units of Kelvin)
! !
! Conductivity ! Conductivity
REAL(KIND = DP) :: scissor REAL(KIND = DP) :: scissor

View File

@ -29,14 +29,14 @@
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE io_var, ONLY : iuindabs USE io_var, ONLY : iuindabs
USE modes, ONLY : nmodes USE modes, ONLY : nmodes
USE epwcom, ONLY : fsthick, eptemp, degaussw, & USE epwcom, ONLY : nstemp, fsthick, degaussw, &
eps_acustic, efermi_read, fermi_energy,& eps_acustic, efermi_read, fermi_energy,&
vme, omegamin, omegamax, omegastep vme, omegamin, omegamax, omegastep
USE elph2, ONLY : etf, ibndmin, nkf, epf17, wkf, nqtotf, wf, wqf, & USE elph2, ONLY : etf, ibndmin, nkf, epf17, wkf, nqtotf, wf, wqf, &
sigmar_all, efnew, & sigmar_all, efnew, gtemp, &
dmef, omegap, epsilon2_abs, epsilon2_abs_lorenz, vmef, & dmef, omegap, epsilon2_abs, epsilon2_abs_lorenz, vmef, &
nbndfst, nktotf nbndfst, nktotf
USE constants_epw, ONLY : ryd2mev, one, ryd2ev, two, zero, pi, ci, eps6, czero USE constants_epw, ONLY : kelvin2eV, ryd2mev, one, ryd2ev, two, zero, pi, ci, eps6, czero
USE mp, ONLY : mp_barrier, mp_sum USE mp, ONLY : mp_barrier, mp_sum
USE mp_global, ONLY : inter_pool_comm USE mp_global, ONLY : inter_pool_comm
USE cell_base, ONLY : omega USE cell_base, ONLY : omega
@ -47,12 +47,14 @@
!! Q-point index !! Q-point index
! !
! Local variables ! Local variables
CHARACTER(LEN = 256) :: nameF = 'epsilon2_indabs.dat' CHARACTER(LEN = 256) :: nameF
!! Name of the file !! Name of the file
CHARACTER(LEN = 10) :: c CHARACTER(LEN = 10) :: c
!! Number of eta values, in string format !! Number of eta values, in string format
CHARACTER(LEN = 256) :: format_string CHARACTER(LEN = 256) :: format_string
!! Format string !! Format string
CHARACTER(LEN = 20) :: tp
!! Temperature, in string format
! Local variables ! Local variables
INTEGER :: ik INTEGER :: ik
!! Counter on the k-point index !! Counter on the k-point index
@ -78,6 +80,8 @@
!! Polarization direction !! Polarization direction
INTEGER :: m INTEGER :: m
!! Counter on denominator imaginary broadening values !! Counter on denominator imaginary broadening values
INTEGER :: itemp
!! Counter on temperatures
INTEGER :: ierr INTEGER :: ierr
!! Error status !! Error status
INTEGER, PARAMETER :: neta = 9 INTEGER, PARAMETER :: neta = 9
@ -128,7 +132,6 @@
! !
! SP: Define the inverse so that we can efficiently multiply instead of dividing ! SP: Define the inverse so that we can efficiently multiply instead of dividing
! !
inv_eptemp0 = 1.0 / eptemp
inv_degaussw = 1.0 / degaussw inv_degaussw = 1.0 / degaussw
! !
nomega = INT((omegamax - omegamin) / omegastep) + 1 nomega = INT((omegamax - omegamin) / omegastep) + 1
@ -145,16 +148,19 @@
WRITE(stdout, '(5x,a/)') REPEAT('=',67) WRITE(stdout, '(5x,a/)') REPEAT('=',67)
! !
IF (fsthick < 1.d3) WRITE(stdout, '(/5x,a,f10.6,a)' ) 'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV' IF (fsthick < 1.d3) WRITE(stdout, '(/5x,a,f10.6,a)' ) 'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
WRITE(stdout, '(/5x,a,f10.6,a)' ) 'Temperature T = ', eptemp * ryd2ev, ' eV' WRITE(stdout, '(/5x,a)') 'The following temperatures are calculated:'
DO itemp = 1, nstemp
WRITE(stdout, '(/5x,a,f10.6,a)' ) 'Temperature T = ', gtemp(itemp) * ryd2ev, ' eV'
ENDDO
! !
!IF (.NOT. ALLOCATED (omegap) ) ALLOCATE(omegap(nomega)) !IF (.NOT. ALLOCATED (omegap) ) ALLOCATE(omegap(nomega))
!IF (.NOT. ALLOCATED (epsilon2_abs) ) ALLOCATE(epsilon2_abs(3, nomega, neta)) !IF (.NOT. ALLOCATED (epsilon2_abs) ) ALLOCATE(epsilon2_abs(3, nomega, neta))
!IF (.NOT. ALLOCATED (epsilon2_abs_lorenz) ) ALLOCATE(epsilon2_abs_lorenz(3, nomega, neta)) !IF (.NOT. ALLOCATED (epsilon2_abs_lorenz) ) ALLOCATE(epsilon2_abs_lorenz(3, nomega, neta))
ALLOCATE(omegap(nomega), STAT = ierr) ALLOCATE(omegap(nomega), STAT = ierr)
IF (ierr /= 0) CALL errore('indabs', 'Error allocating omegap', 1) IF (ierr /= 0) CALL errore('indabs', 'Error allocating omegap', 1)
ALLOCATE(epsilon2_abs(3, nomega, neta), STAT = ierr) ALLOCATE(epsilon2_abs(3, nomega, neta, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('indabs', 'Error allocating epsilon2_abs', 1) IF (ierr /= 0) CALL errore('indabs', 'Error allocating epsilon2_abs', 1)
ALLOCATE(epsilon2_abs_lorenz(3, nomega, neta), STAT = ierr) ALLOCATE(epsilon2_abs_lorenz(3, nomega, neta, nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('indabs', 'Error allocating epsilon2_abs_lorenz', 1) IF (ierr /= 0) CALL errore('indabs', 'Error allocating epsilon2_abs_lorenz', 1)
! !
epsilon2_abs = 0.d0 epsilon2_abs = 0.d0
@ -176,121 +182,126 @@
ef0 = efnew ef0 = efnew
ENDIF ENDIF
! !
DO ik = 1, nkf DO itemp = 1, nstemp
! inv_eptemp0 = 1.0 / gtemp(itemp)
ikk = 2 * ik - 1 DO ik = 1, nkf
ikq = ikk + 1
!
DO imode = 1, nmodes
! !
! the phonon frequency at this q and nu ikk = 2 * ik - 1
wq(imode) = wf(imode, iq) ikq = ikk + 1
! !
epf(:, :, imode) = epf17(:, :, imode,ik) DO imode = 1, nmodes
IF (wq(imode) > eps_acustic) THEN !
nqv(imode) = wgauss(-wq(imode) / eptemp, -99) ! the phonon frequency at this q and nu
nqv(imode) = nqv(imode) / (one - two * nqv(imode)) wq(imode) = wf(imode, iq)
!
epf(:, :, imode) = epf17(:, :, imode,ik)
IF (wq(imode) > eps_acustic) THEN
nqv(imode) = wgauss(-wq(imode) / gtemp(itemp), -99)
nqv(imode) = nqv(imode) / (one - two * nqv(imode))
ENDIF
ENDDO
!
! RM - vme version should be checked
IF (vme) THEN
DO ibnd = 1, nbndfst
DO jbnd = 1, nbndfst
! vmef is in units of Ryd * bohr
vkk(:, ibnd, jbnd) = vmef(:, ibndmin - 1 + ibnd, ibndmin - 1 + jbnd, ikk)
vkq(:, ibnd, jbnd) = vmef(:, ibndmin - 1 + ibnd, ibndmin - 1 + jbnd, ikq)
ENDDO
ENDDO
ELSE
DO ibnd = 1, nbndfst
DO jbnd = 1, nbndfst
! Dme's already corrected for GW corrections in wan2bloch.f90
vkk(:, ibnd, jbnd) = 2.0 * dmef(:, ibndmin - 1 + ibnd, ibndmin - 1 + jbnd, ikk)
vkq(:, ibnd, jbnd) = 2.0 * dmef(:, ibndmin - 1 + ibnd, ibndmin - 1 + jbnd, ikq)
ENDDO
ENDDO
ENDIF ENDIF
ENDDO
!
! RM - vme version should be checked
IF (vme) THEN
DO ibnd = 1, nbndfst
DO jbnd = 1, nbndfst
! vmef is in units of Ryd * bohr
vkk(:, ibnd, jbnd) = vmef(:, ibndmin - 1 + ibnd, ibndmin - 1 + jbnd, ikk)
vkq(:, ibnd, jbnd) = vmef(:, ibndmin - 1 + ibnd, ibndmin - 1 + jbnd, ikq)
ENDDO
ENDDO
ELSE
DO ibnd = 1, nbndfst
DO jbnd = 1, nbndfst
! Dme's already corrected for GW corrections in wan2bloch.f90
vkk(:, ibnd, jbnd) = 2.0 * dmef(:, ibndmin - 1 + ibnd, ibndmin - 1 + jbnd, ikk)
vkq(:, ibnd, jbnd) = 2.0 * dmef(:, ibndmin - 1 + ibnd, ibndmin - 1 + jbnd, ikq)
ENDDO
ENDDO
ENDIF
!
DO ibnd = 1, nbndfst
! the energy of the electron at k (relative to Ef)
ekk = etf(ibndmin - 1 + ibnd, ikk) - ef0
! !
IF (ABS(ekk) < fsthick) THEN DO ibnd = 1, nbndfst
! the energy of the electron at k (relative to Ef)
ekk = etf(ibndmin - 1 + ibnd, ikk) - ef0
! !
wgkk = wgauss(-ekk * inv_eptemp0, -99) IF (ABS(ekk) < fsthick) THEN
!
DO jbnd = 1, nbndfst
! !
! The fermi occupation for k+q wgkk = wgauss(-ekk * inv_eptemp0, -99)
ekq = etf(ibndmin - 1 + jbnd, ikq) - ef0
! !
IF (ABS(ekq) < fsthick .AND. ekq < ekk + wq(nmodes) + omegamax + 6.0 * degaussw) THEN DO jbnd = 1, nbndfst
! !
wgkq = wgauss(-ekq * inv_eptemp0, -99) ! The fermi occupation for k+q
ekq = etf(ibndmin - 1 + jbnd, ikq) - ef0
! !
IF (ekq - ekk - wq(nmodes) - omegamax > 6.0 * degaussw) CYCLE IF (ABS(ekq) < fsthick .AND. ekq < ekk + wq(nmodes) + omegamax + 6.0 * degaussw) THEN
IF (ekq - ekk + wq(nmodes) - omegamin < - 6.0 * degaussw) CYCLE
!
DO imode = 1, nmodes
! !
IF (wq(imode) > eps_acustic) THEN wgkq = wgauss(-ekq * inv_eptemp0, -99)
!
IF (ekq - ekk - wq(nmodes) - omegamax > 6.0 * degaussw) CYCLE
IF (ekq - ekk + wq(nmodes) - omegamin < - 6.0 * degaussw) CYCLE
!
DO imode = 1, nmodes
! !
DO m = 1, neta IF (wq(imode) > eps_acustic) THEN
s1a = czero
s1e = czero
s2a = czero
s2e = czero
! !
DO mbnd = 1, nbndfst DO m = 1, neta
s1a = czero
s1e = czero
s2a = czero
s2e = czero
! !
! The energy of the electron at k (relative to Ef) DO mbnd = 1, nbndfst
ekmk = etf(ibndmin - 1 + mbnd, ikk) - ef0 !
! The energy of the electron at k+q (relative to Ef) ! The energy of the electron at k (relative to Ef)
ekmq = etf(ibndmin - 1 + mbnd, ikq) - ef0 ekmk = etf(ibndmin - 1 + mbnd, ikk) - ef0
! The energy of the electron at k+q (relative to Ef)
ekmq = etf(ibndmin - 1 + mbnd, ikq) - ef0
!
s1a(:) = s1a(:) + epf(mbnd, jbnd,imode) * vkk(:, ibnd, mbnd) / &
(ekmk - ekq + wq(imode) + ci * eta(m))
s1e(:) = s1e(:) + epf(mbnd, jbnd,imode) * vkk(:, ibnd, mbnd) / &
(ekmk - ekq - wq(imode) + ci * eta(m))
s2a(:) = s2a(:) + epf(ibnd, mbnd,imode) * vkq(:, mbnd, jbnd) / &
(ekmq - ekk - wq(imode)+ ci * eta(m))
s2e(:) = s2e(:) + epf(ibnd, mbnd,imode) * vkq(:, mbnd, jbnd) / &
(ekmq - ekk + wq(imode)+ ci * eta(m))
ENDDO
! !
s1a(:) = s1a(:) + epf(mbnd, jbnd,imode) * vkk(:, ibnd, mbnd) / & pfac = nqv(imode) * wgkk * (one - wgkq) - (nqv(imode) + one) * (one - wgkk) * wgkq
(ekmk - ekq + wq(imode) + ci * eta(m)) pface = (nqv(imode) + one) * wgkk * (one - wgkq) - nqv(imode) * (one - wgkk) * wgkq
s1e(:) = s1e(:) + epf(mbnd, jbnd,imode) * vkk(:, ibnd, mbnd) / &
(ekmk - ekq - wq(imode) + ci * eta(m))
s2a(:) = s2a(:) + epf(ibnd, mbnd,imode) * vkq(:, mbnd, jbnd) / &
(ekmq - ekk - wq(imode)+ ci * eta(m))
s2e(:) = s2e(:) + epf(ibnd, mbnd,imode) * vkq(:, mbnd, jbnd) / &
(ekmq - ekk + wq(imode)+ ci * eta(m))
ENDDO
!
pfac = nqv(imode) * wgkk * (one - wgkq) - (nqv(imode) + one) * (one - wgkk) * wgkq
pface = (nqv(imode) + one) * wgkk * (one - wgkq) - nqv(imode) * (one - wgkk) * wgkq
!
DO iw = 1, nomega
! !
IF (ABS(ekq - ekk - wq(imode) - omegap(iw)) > 6.0 * degaussw .AND. & DO iw = 1, nomega
ABS(ekq - ekk + wq(imode) - omegap(iw)) > 6.0 * degaussw) CYCLE !
! IF (ABS(ekq - ekk - wq(imode) - omegap(iw)) > 6.0 * degaussw .AND. &
weighte = w0gauss((ekq - ekk - omegap(iw) + wq(imode)) / degaussw, 0) / degaussw ABS(ekq - ekk + wq(imode) - omegap(iw)) > 6.0 * degaussw) CYCLE
weighta = w0gauss((ekq - ekk - omegap(iw) - wq(imode)) / degaussw, 0) / degaussw !
! weighte = w0gauss((ekq - ekk - omegap(iw) + wq(imode)) / degaussw, 0) / degaussw
DO ipol = 1, 3 weighta = w0gauss((ekq - ekk - omegap(iw) - wq(imode)) / degaussw, 0) / degaussw
epsilon2_abs(ipol, iw, m) = epsilon2_abs(ipol, iw, m) + (wkf(ikk) / 2.0) * wqf(iq) * & !
cfac / omegap(iw)**2 * pfac * weighta * ABS(s1a(ipol) + s2a(ipol))**2 / (2 * wq(imode) * omega) DO ipol = 1, 3
epsilon2_abs(ipol, iw, m) = epsilon2_abs(ipol, iw, m) + (wkf(ikk) / 2.0) * wqf(iq) * & epsilon2_abs(ipol, iw, m, itemp) = epsilon2_abs(ipol, iw, m, itemp) + (wkf(ikk) / 2.0) * wqf(iq) * &
cfac / omegap(iw)**2 * pface * weighte * ABS(s1e(ipol) + s2e(ipol))**2 / (2 * wq(imode) * omega) cfac / omegap(iw)**2 * pfac * weighta * ABS(s1a(ipol) + s2a(ipol))**2 / (2 * wq(imode) * omega)
epsilon2_abs_lorenz(ipol, iw, m) = epsilon2_abs_lorenz(ipol, iw, m) + (wkf(ikk) / 2.0) * wqf(iq) * & epsilon2_abs(ipol, iw, m, itemp) = epsilon2_abs(ipol, iw, m, itemp) + (wkf(ikk) / 2.0) * wqf(iq) * &
cfac / omegap(iw)**2 * pfac * ABS(s1a(ipol) + s2a(ipol))**2 / (2 * wq(imode) * omega) * & cfac / omegap(iw)**2 * pface * weighte * ABS(s1e(ipol) + s2e(ipol))**2 / (2 * wq(imode) * omega)
(degaussw / (degaussw**2 + (ekq - ekk - omegap(iw) - wq(imode))**2)) / pi epsilon2_abs_lorenz(ipol, iw, m, itemp) = epsilon2_abs_lorenz(ipol, iw, m, itemp) + &
epsilon2_abs_lorenz(ipol, iw, m) = epsilon2_abs_lorenz(ipol, iw, m) + (wkf(ikk) / 2.0) * wqf(iq) * & (wkf(ikk) / 2.0) * wqf(iq) * &
cfac / omegap(iw)**2 * pface * ABS(s1e(ipol) + s2e(ipol))**2 / (2 * wq(imode) * omega) * & cfac / omegap(iw)**2 * pfac * ABS(s1a(ipol) + s2a(ipol))**2 / (2 * wq(imode) * omega) * &
(degaussw / (degaussw**2 + (ekq - ekk - omegap(iw) + wq(imode))**2 )) / pi (degaussw / (degaussw**2 + (ekq - ekk - omegap(iw) - wq(imode))**2)) / pi
ENDDO ! ipol epsilon2_abs_lorenz(ipol, iw, m, itemp) = epsilon2_abs_lorenz(ipol, iw, m, itemp) + &
ENDDO ! iw (wkf(ikk) / 2.0) * wqf(iq) * &
ENDDO ! neta cfac / omegap(iw)**2 * pface * ABS(s1e(ipol) + s2e(ipol))**2 / (2 * wq(imode) * omega) * &
ENDIF ! if wq > acoustic (degaussw / (degaussw**2 + (ekq - ekk - omegap(iw) + wq(imode))**2 )) / pi
ENDDO ! imode ENDDO ! ipol
ENDIF ! endif ekq in fsthick ENDDO ! iw
ENDDO ! jbnd ENDDO ! neta
ENDIF ! endif ekk in fsthick ENDIF ! if wq > acoustic
ENDDO ! ibnd ENDDO ! imode
ENDDO ! ik ENDIF ! endif ekq in fsthick
ENDDO ! jbnd
ENDIF ! endif ekk in fsthick
ENDDO ! ibnd
ENDDO ! ik
ENDDO ! itemp
! !
! The k points are distributed among pools: here we collect them ! The k points are distributed among pools: here we collect them
! !
@ -317,34 +328,39 @@
WRITE(stdout, '(5x,a,4f15.6)') 'Broadenings: ', eta(1:4) WRITE(stdout, '(5x,a,4f15.6)') 'Broadenings: ', eta(1:4)
WRITE(stdout, '(5x,a,5f15.6)') ' ', eta(5:9) WRITE(stdout, '(5x,a,5f15.6)') ' ', eta(5:9)
WRITE(stdout, '(5x,a)') WRITE(stdout, '(5x,a)')
WRITE(stdout, '(5x,a)') 'For the first Broadening we have:' WRITE(stdout, '(5x,a)') 'For the first Broadening and Temperature we have:'
! For test-farm checking purposes, only show m=1 ! For test-farm checking purposes, only show m=1
WRITE(stdout, '(5x,a)') 'Photon energy (eV), Imaginary dielectric function along x,y,z' WRITE(stdout, '(5x,a)') 'Photon energy (eV), Imaginary dielectric function along x,y,z'
DO iw = 1, nomega DO iw = 1, nomega
WRITE(stdout, '(5x,f15.6,3E22.14)') omegap(iw) * ryd2ev, (epsilon2_abs(ipol, iw, 1), ipol = 1, 3) WRITE(stdout, '(5x,f15.6,3E22.14)') omegap(iw) * ryd2ev, (epsilon2_abs(ipol, iw, 1, 1), ipol = 1, 3)
ENDDO ENDDO
WRITE(stdout, '(5x,a)') WRITE(stdout, '(5x,a)')
WRITE(stdout, '(5x,a)') 'Values with other broadening are reported in the files epsilon2_indabs.dat' WRITE(stdout, '(5x,a)') 'Values with other broadenings for temperature X are reported in the files epsilon2_indabs_X.dat'
WRITE(stdout, '(5x,a)') WRITE(stdout, '(5x,a)')
! !
! Output to file ! Output to file
WRITE(c,"(i0)") neta + 1 DO itemp = 1,nstemp
format_string = "("//TRIM(c) // "E22.14)" WRITE(c,"(i0)") neta + 1
OPEN(UNIT = iuindabs, FILE = nameF) WRITE(tp,"(f8.1)") gtemp(itemp) * ryd2ev / kelvin2eV
WRITE(iuindabs, '(a)') '# Phonon-assisted absorption versus energy' format_string = "("//TRIM(c) // "E22.14)"
WRITE(iuindabs, '(a)') '# Photon energy (eV), Directionally-averaged imaginary dielectric function along x,y,z' nameF = 'epsilon2_indabs_' // trim(adjustl(tp)) // 'K.dat'
DO iw = 1, nomega OPEN(UNIT = iuindabs, FILE = nameF)
WRITE(iuindabs, format_string) omegap(iw) * ryd2ev, (SUM(epsilon2_abs(:, iw, m)) / 3.0d0, m = 1, neta) WRITE(iuindabs, '(a)') '# Phonon-assisted absorption versus energy'
WRITE(iuindabs, '(a)') '# Photon energy (eV), Directionally-averaged imaginary dielectric function along x,y,z'
DO iw = 1, nomega
WRITE(iuindabs, format_string) omegap(iw) * ryd2ev, (SUM(epsilon2_abs(:, iw, m, itemp)) / 3.0d0, m = 1, neta)
ENDDO
CLOSE(iuindabs)
!
nameF = 'epsilon2_indabs_lorenz' // trim(adjustl(tp)) // 'K.dat'
OPEN(UNIT = iuindabs, FILE = nameF)
WRITE(iuindabs, '(a)') '# Phonon-assisted absorption versus energy'
WRITE(iuindabs, '(a)') '# Photon energy (eV), Directionally-averaged imaginary dielectric function along x,y,z'
DO iw = 1, nomega
WRITE(iuindabs, format_string) omegap(iw) * ryd2ev, (SUM(epsilon2_abs_lorenz(:, iw, m, itemp)) / 3.0d0, m = 1, neta)
ENDDO
CLOSE(iuindabs)
ENDDO ENDDO
CLOSE(iuindabs)
!
OPEN(UNIT = iuindabs, FILE = 'epsilon2_indabs_lorenz.dat')
WRITE(iuindabs, '(a)') '# Phonon-assisted absorption versus energy'
WRITE(iuindabs, '(a)') '# Photon energy (eV), Directionally-averaged imaginary dielectric function along x,y,z'
DO iw = 1, nomega
WRITE(iuindabs, format_string) omegap(iw) * ryd2ev, (SUM(epsilon2_abs_lorenz(:, iw, m)) / 3.0d0, m = 1, neta)
ENDDO
CLOSE(iuindabs)
ENDIF ENDIF
! !
!----------------------------------------------------------------------- !-----------------------------------------------------------------------

View File

@ -32,7 +32,8 @@
USE io_files, ONLY : prefix USE io_files, ONLY : prefix
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE epwcom, ONLY : nstemp, fsthick USE epwcom, ONLY : nstemp, fsthick
USE eliashbergcom, ONLY : nsiw, estemp, gap0, gap, agap, wsi, nznormi, znormi, deltai, & USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsiw, gap0, gap, agap, wsi, nznormi, znormi, deltai, &
aznormi, naznormi, adeltai, adeltaip, nkfs, nbndfs, ef0, ekfs, & aznormi, naznormi, adeltai, adeltaip, nkfs, nbndfs, ef0, ekfs, &
dosef, wkfs, w0g dosef, wkfs, w0g
USE constants_epw, ONLY : kelvin2eV, eps6, zero USE constants_epw, ONLY : kelvin2eV, eps6, zero
@ -109,7 +110,7 @@
! !
IF (mpime == ionode_id) THEN IF (mpime == ionode_id) THEN
! !
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
! anisotropic case ! anisotropic case
IF (temp < 10.d0) THEN IF (temp < 10.d0) THEN
WRITE(name1, 101) TRIM(prefix), '.imag_aniso_00', temp WRITE(name1, 101) TRIM(prefix), '.imag_aniso_00', temp
@ -193,7 +194,8 @@
USE io_files, ONLY : prefix USE io_files, ONLY : prefix
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE epwcom, ONLY : fsthick, laniso, liso USE epwcom, ONLY : fsthick, laniso, liso
USE eliashbergcom, ONLY : nsiw, estemp, agap, wsi, & USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsiw, agap, wsi, &
naznormi, aznormi, adeltai, nznormi, znormi, & naznormi, aznormi, adeltai, nznormi, znormi, &
deltai, nkfs, nbndfs, ef0, ekfs deltai, nkfs, nbndfs, ef0, ekfs
USE constants_epw, ONLY : kelvin2eV USE constants_epw, ONLY : kelvin2eV
@ -221,7 +223,7 @@
REAL(KIND = DP) :: temp REAL(KIND = DP) :: temp
!! Temperature in K !! Temperature in K
! !
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
! !
cname = 'imag' cname = 'imag'
! !
@ -304,7 +306,8 @@
USE io_files, ONLY : prefix USE io_files, ONLY : prefix
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE epwcom, ONLY : nqstep, fsthick, laniso, liso USE epwcom, ONLY : nqstep, fsthick, laniso, liso
USE eliashbergcom, ONLY : nsw, estemp, ws, gap, agap, delta, znorm, adelta, aznorm, & USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, ws, gap, agap, delta, znorm, adelta, aznorm, &
nkfs, nbndfs, ef0, ekfs nkfs, nbndfs, ef0, ekfs
USE constants_epw, ONLY : kelvin2eV USE constants_epw, ONLY : kelvin2eV
! !
@ -336,7 +339,7 @@
REAL(KIND = DP) :: var1, var2, var3, var4 REAL(KIND = DP) :: var1, var2, var3, var4
!! Temporary working variables !! Temporary working variables
! !
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
! !
IF (laniso) THEN IF (laniso) THEN
IF (iverbosity == 2) THEN IF (iverbosity == 2) THEN
@ -444,7 +447,8 @@
USE io_files, ONLY : prefix USE io_files, ONLY : prefix
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE epwcom, ONLY : nqstep, fsthick, laniso, liso USE epwcom, ONLY : nqstep, fsthick, laniso, liso
USE eliashbergcom, ONLY : nsw, estemp, ws, gap, agap, delta, znorm, adelta, aznorm, & USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, ws, gap, agap, delta, znorm, adelta, aznorm, &
nkfs, nbndfs, ef0, ekfs nkfs, nbndfs, ef0, ekfs
USE constants_epw, ONLY : kelvin2eV USE constants_epw, ONLY : kelvin2eV
! !
@ -476,7 +480,7 @@
REAL(KIND = DP) :: var1, var2, var3, var4 REAL(KIND = DP) :: var1, var2, var3, var4
!! Temporary working variables !! Temporary working variables
! !
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
! !
IF (laniso) THEN IF (laniso) THEN
IF (iverbosity == 2) THEN IF (iverbosity == 2) THEN
@ -2142,7 +2146,8 @@
USE io_var, ONLY : iufilgap USE io_var, ONLY : iufilgap
USE io_files, ONLY : prefix USE io_files, ONLY : prefix
USE epwcom, ONLY : fsthick USE epwcom, ONLY : fsthick
USE eliashbergcom, ONLY : estemp, agap, nkfs, nbndfs, ef0, ekfs, w0g USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : agap, nkfs, nbndfs, ef0, ekfs, w0g
USE constants_epw, ONLY : kelvin2eV, zero, eps5 USE constants_epw, ONLY : kelvin2eV, zero, eps5
! !
IMPLICIT NONE IMPLICIT NONE
@ -2182,7 +2187,7 @@
REAL(KIND = DP), EXTERNAL :: w0gauss REAL(KIND = DP), EXTERNAL :: w0gauss
!! This function computes the derivative of the Fermi-Dirac function !! This function computes the derivative of the Fermi-Dirac function
!! It is therefore an approximation for a delta function !! It is therefore an approximation for a delta function
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
! !
delta_max = 1.1d0 * MAXVAL(agap(:,:,itemp)) delta_max = 1.1d0 * MAXVAL(agap(:,:,itemp))
nbin = NINT(delta_max / eps5) + 1 nbin = NINT(delta_max / eps5) + 1
@ -2241,7 +2246,8 @@
USE cell_base, ONLY : bg USE cell_base, ONLY : bg
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE epwcom, ONLY : fsthick, nkf1, nkf2, nkf3 USE epwcom, ONLY : fsthick, nkf1, nkf2, nkf3
USE eliashbergcom, ONLY : estemp, agap, nkfs, nbndfs, ef0, ekfs, ixkff USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : agap, nkfs, nbndfs, ef0, ekfs, ixkff
USE constants_epw, ONLY : kelvin2eV, zero USE constants_epw, ONLY : kelvin2eV, zero
! !
IMPLICIT NONE IMPLICIT NONE
@ -2273,7 +2279,7 @@
REAL(KIND = DP), ALLOCATABLE :: agap_tmp(:, :) REAL(KIND = DP), ALLOCATABLE :: agap_tmp(:, :)
!! Temporary array for superconducting gap at ik, ibnd !! Temporary array for superconducting gap at ik, ibnd
! !
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
! !
cname = 'imag' cname = 'imag'
! !

View File

@ -31,6 +31,7 @@
USE mp, ONLY : mp_barrier USE mp, ONLY : mp_barrier
USE mp_world, ONLY : mpime USE mp_world, ONLY : mpime
USE io_global, ONLY : ionode_id USE io_global, ONLY : ionode_id
USE epwcom, ONLY : nstemp
! !
IMPLICIT NONE IMPLICIT NONE
! !
@ -40,11 +41,11 @@
!! Total number of q-points !! Total number of q-points
INTEGER, INTENT(in) :: nktotf INTEGER, INTENT(in) :: nktotf
!! Total number of k-points !! Total number of k-points
REAL(KIND = DP), INTENT(inout) :: sigmar_all(nbndfst, nktotf) REAL(KIND = DP), INTENT(inout) :: sigmar_all(nbndfst, nktotf, nstemp)
!! Real part of the electron-phonon self-energy accross all pools !! Real part of the electron-phonon self-energy accross all pools
REAL(KIND = DP), INTENT(inout) :: sigmai_all(nbndfst, nktotf) REAL(KIND = DP), INTENT(inout) :: sigmai_all(nbndfst, nktotf, nstemp)
!! Imaginary part of the electron-phonon self-energy accross all pools !! Imaginary part of the electron-phonon self-energy accross all pools
REAL(KIND = DP), INTENT(inout) :: zi_all(nbndfst, nktotf) REAL(KIND = DP), INTENT(inout) :: zi_all(nbndfst, nktotf, nstemp)
!! Z parameter of electron-phonon self-energy accross all pools !! Z parameter of electron-phonon self-energy accross all pools
! !
! Local variables ! Local variables
@ -58,34 +59,42 @@
!! Local band index !! Local band index
INTEGER :: lsigma_all INTEGER :: lsigma_all
!! Length of the vector !! Length of the vector
REAL(KIND = DP) :: aux(3 * nbndfst * nktotf + 2) INTEGER :: itemp
!! Counter on temperatures
REAL(KIND = DP) :: aux(3 * nbndfst * nktotf * nstemp + 2)
!! Vector to store the array !! Vector to store the array
! !
IF (mpime == ionode_id) THEN IF (mpime == ionode_id) THEN
! !
lsigma_all = 3 * nbndfst * nktotf + 2 lsigma_all = 3 * nbndfst * nktotf * nstemp + 2
! First element is the current q-point ! First element is the current q-point
aux(1) = REAL(iqq - 1, KIND = DP) ! we need to start at the next q aux(1) = REAL(iqq - 1, KIND = DP) ! we need to start at the next q
! Second element is the total number of q-points ! Second element is the total number of q-points
aux(2) = REAL(totq, KIND = DP) aux(2) = REAL(totq, KIND = DP)
! !
i = 2 i = 2
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
i = i + 1 DO ibnd = 1, nbndfst
aux(i) = sigmar_all(ibnd, ik) i = i + 1
aux(i) = sigmar_all(ibnd, ik, itemp)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
i = i + 1 DO ibnd = 1, nbndfst
aux(i) = sigmai_all(ibnd, ik) i = i + 1
aux(i) = sigmai_all(ibnd, ik, itemp)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
i = i + 1 DO ibnd = 1, nbndfst
aux(i) = zi_all(ibnd, ik) i = i + 1
aux(i) = zi_all(ibnd, ik, itemp)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
CALL diropn(iufilsigma_all, 'sigma_restart', lsigma_all, exst) CALL diropn(iufilsigma_all, 'sigma_restart', lsigma_all, exst)
@ -95,14 +104,14 @@
! !
! Make everythin 0 except the range of k-points we are working on ! Make everythin 0 except the range of k-points we are working on
IF (lower_bnd > 1) THEN IF (lower_bnd > 1) THEN
sigmar_all(:, 1:lower_bnd - 1) = zero sigmar_all(:, 1:lower_bnd - 1, :) = zero
sigmai_all(:, 1:lower_bnd - 1) = zero sigmai_all(:, 1:lower_bnd - 1, :) = zero
zi_all(:, 1:lower_bnd - 1) = zero zi_all(:, 1:lower_bnd - 1, :) = zero
ENDIF ENDIF
IF (upper_bnd < nktotf) THEN IF (upper_bnd < nktotf) THEN
sigmar_all(:, upper_bnd + 1:nktotf) = zero sigmar_all(:, upper_bnd + 1:nktotf, :) = zero
sigmai_all(:, upper_bnd + 1:nktotf) = zero sigmai_all(:, upper_bnd + 1:nktotf, :) = zero
zi_all(:, upper_bnd + 1:nktotf) = zero zi_all(:, upper_bnd + 1:nktotf, :) = zero
ENDIF ENDIF
! !
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
@ -124,6 +133,7 @@
USE mp, ONLY : mp_barrier, mp_bcast USE mp, ONLY : mp_barrier, mp_bcast
USE mp_world, ONLY : mpime, world_comm USE mp_world, ONLY : mpime, world_comm
USE io_global, ONLY : ionode_id USE io_global, ONLY : ionode_id
USE epwcom, ONLY : nstemp
! !
IMPLICIT NONE IMPLICIT NONE
! !
@ -133,11 +143,11 @@
!! Total number of q-points !! Total number of q-points
INTEGER, INTENT(in) :: nktotf INTEGER, INTENT(in) :: nktotf
!! Total number of k-points !! Total number of k-points
REAL(KIND = DP), INTENT(out) :: sigmar_all(nbndfst, nktotf) REAL(KIND = DP), INTENT(out) :: sigmar_all(nbndfst, nktotf, nstemp)
!! Real part of the electron-phonon self-energy accross all pools !! Real part of the electron-phonon self-energy accross all pools
REAL(KIND = DP), INTENT(out) :: sigmai_all(nbndfst, nktotf) REAL(KIND = DP), INTENT(out) :: sigmai_all(nbndfst, nktotf, nstemp)
!! Imaginary part of the electron-phonon self-energy accross all pools !! Imaginary part of the electron-phonon self-energy accross all pools
REAL(KIND = DP), INTENT(out) :: zi_all(nbndfst, nktotf) REAL(KIND = DP), INTENT(out) :: zi_all(nbndfst, nktotf, nstemp)
!! Z parameter of electron-phonon self-energy accross all pools !! Z parameter of electron-phonon self-energy accross all pools
! !
! Local variables ! Local variables
@ -153,7 +163,9 @@
!! Length of the vector !! Length of the vector
INTEGER :: nqtotf_read INTEGER :: nqtotf_read
!! Total number of q-point read !! Total number of q-point read
REAL(KIND = DP) :: aux(3 * nbndfst * nktotf + 2) INTEGER :: itemp
!! Counter on temperatures
REAL(KIND = DP) :: aux(3 * nbndfst * nktotf * nstemp + 2)
!! Vector to store the array !! Vector to store the array
! !
CHARACTER(LEN = 256) :: name1 CHARACTER(LEN = 256) :: name1
@ -170,7 +182,7 @@
! !
IF (exst) THEN ! read the file IF (exst) THEN ! read the file
! !
lsigma_all = 3 * nbndfst * nktotf + 2 lsigma_all = 3 * nbndfst * nktotf * nstemp + 2
CALL diropn(iufilsigma_all, 'sigma_restart', lsigma_all, exst) CALL diropn(iufilsigma_all, 'sigma_restart', lsigma_all, exst)
CALL davcio(aux, lsigma_all, iufilsigma_all, 1, -1) CALL davcio(aux, lsigma_all, iufilsigma_all, 1, -1)
! !
@ -182,22 +194,28 @@
&'Error: The current total number of q-point is not the same as the read one. ', 1) &'Error: The current total number of q-point is not the same as the read one. ', 1)
! !
i = 2 i = 2
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
i = i + 1 DO ibnd = 1, nbndfst
sigmar_all(ibnd, ik) = aux(i) i = i + 1
sigmar_all(ibnd, ik, itemp) = aux(i)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
i = i + 1 DO ibnd = 1, nbndfst
sigmai_all(ibnd, ik) = aux(i) i = i + 1
sigmai_all(ibnd, ik, itemp) = aux(i)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
i = i + 1 DO ibnd = 1, nbndfst
zi_all(ibnd, ik) = aux(i) i = i + 1
zi_all(ibnd, ik, itemp) = aux(i)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
CLOSE(iufilsigma_all) CLOSE(iufilsigma_all)
@ -214,14 +232,14 @@
! !
! Make everythin 0 except the range of k-points we are working on ! Make everythin 0 except the range of k-points we are working on
IF (lower_bnd > 1) THEN IF (lower_bnd > 1) THEN
sigmar_all(:, 1:lower_bnd - 1) = zero sigmar_all(:, 1:lower_bnd - 1, :) = zero
sigmai_all(:, 1:lower_bnd - 1) = zero sigmai_all(:, 1:lower_bnd - 1, :) = zero
zi_all(:, 1:lower_bnd - 1) = zero zi_all(:, 1:lower_bnd - 1, :) = zero
ENDIF ENDIF
IF (upper_bnd < nktotf) THEN IF (upper_bnd < nktotf) THEN
sigmar_all(:, upper_bnd + 1:nktotf) = zero sigmar_all(:, upper_bnd + 1:nktotf, :) = zero
sigmai_all(:, upper_bnd + 1:nktotf) = zero sigmai_all(:, upper_bnd + 1:nktotf, :) = zero
zi_all(:, upper_bnd + 1:nktotf) = zero zi_all(:, upper_bnd + 1:nktotf, :) = zero
ENDIF ENDIF
! !
WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from: ', iqq,'/', totq WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from: ', iqq,'/', totq
@ -239,7 +257,7 @@
!! !!
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE elph2, ONLY : lower_bnd, upper_bnd, nbndfst USE elph2, ONLY : lower_bnd, upper_bnd, nbndfst
USE epwcom, ONLY : wmin_specfun, wmax_specfun, nw_specfun USE epwcom, ONLY : nstemp, wmin_specfun, wmax_specfun, nw_specfun
USE io_var, ONLY : iufilesigma_all USE io_var, ONLY : iufilesigma_all
USE io_files, ONLY : diropn USE io_files, ONLY : diropn
USE constants_epw, ONLY : zero USE constants_epw, ONLY : zero
@ -255,9 +273,9 @@
!! Total number of q-points !! Total number of q-points
INTEGER, INTENT(in) :: nktotf INTEGER, INTENT(in) :: nktotf
!! Total number of k-points !! Total number of k-points
REAL(KIND = DP), INTENT(inout) :: esigmar_all(nbndfst, nktotf, nw_specfun) REAL(KIND = DP), INTENT(inout) :: esigmar_all(nbndfst, nktotf, nw_specfun, nstemp)
!! Real part of the electron-phonon self-energy accross all pools !! Real part of the electron-phonon self-energy accross all pools
REAL(KIND = DP), INTENT(inout) :: esigmai_all(nbndfst, nktotf, nw_specfun) REAL(KIND = DP), INTENT(inout) :: esigmai_all(nbndfst, nktotf, nw_specfun, nstemp)
!! Imaginary part of the electron-phonon self-energy accross all pools !! Imaginary part of the electron-phonon self-energy accross all pools
! !
! Local variables ! Local variables
@ -273,11 +291,13 @@
!! Counter on the frequency !! Counter on the frequency
INTEGER :: lesigma_all INTEGER :: lesigma_all
!! Length of the vector !! Length of the vector
INTEGER :: itemp
!! Counter on temperature
REAL(KIND = DP) :: dw REAL(KIND = DP) :: dw
!! Frequency intervals !! Frequency intervals
REAL(KIND = DP) :: ww(nw_specfun) REAL(KIND = DP) :: ww(nw_specfun)
!! Current frequency !! Current frequency
REAL(KIND = DP) :: aux(2 * nbndfst * nktotf * nw_specfun + 2) REAL(KIND = DP) :: aux(2 * nbndfst * nktotf * nw_specfun * nstemp + 2)
!! Vector to store the array !! Vector to store the array
! !
IF (mpime == ionode_id) THEN IF (mpime == ionode_id) THEN
@ -289,26 +309,30 @@
ww(iw) = wmin_specfun + DBLE(iw - 1) * dw ww(iw) = wmin_specfun + DBLE(iw - 1) * dw
ENDDO ENDDO
! !
lesigma_all = 2 * nbndfst * nktotf * nw_specfun + 2 lesigma_all = 2 * nbndfst * nktotf * nw_specfun * nstemp + 2
! First element is the current q-point ! First element is the current q-point
aux(1) = REAL(iqq - 1, KIND = DP) ! we need to start at the next q aux(1) = REAL(iqq - 1, KIND = DP) ! we need to start at the next q
! Second element is the total number of q-points ! Second element is the total number of q-points
aux(2) = REAL(totq, KIND = DP) aux(2) = REAL(totq, KIND = DP)
! !
i = 2 i = 2
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
DO iw = 1, nw_specfun DO ibnd = 1, nbndfst
i = i + 1 DO iw = 1, nw_specfun
aux(i) = esigmar_all(ibnd, ik, iw) i = i + 1
aux(i) = esigmar_all(ibnd, ik, iw, itemp)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
ENDDO ENDDO
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
DO iw = 1, nw_specfun DO ibnd = 1, nbndfst
i = i + 1 DO iw = 1, nw_specfun
aux(i) = esigmai_all(ibnd, ik, iw) i = i + 1
aux(i) = esigmai_all(ibnd, ik, iw, itemp)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
ENDDO ENDDO
@ -319,12 +343,12 @@
! !
! Make everythin 0 except the range of k-points we are working on ! Make everythin 0 except the range of k-points we are working on
IF (lower_bnd > 1) THEN IF (lower_bnd > 1) THEN
esigmar_all(:, 1:lower_bnd - 1, :) = zero esigmar_all(:, 1:lower_bnd - 1, :, :) = zero
esigmai_all(:, 1:lower_bnd - 1, :) = zero esigmai_all(:, 1:lower_bnd - 1, :, :) = zero
ENDIF ENDIF
IF (upper_bnd < nktotf) THEN IF (upper_bnd < nktotf) THEN
esigmar_all(:, upper_bnd + 1:nktotf, :) = zero esigmar_all(:, upper_bnd + 1:nktotf, :, :) = zero
esigmai_all(:, upper_bnd + 1:nktotf, :) = zero esigmai_all(:, upper_bnd + 1:nktotf, :, :) = zero
ENDIF ENDIF
! !
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
@ -340,7 +364,7 @@
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE elph2, ONLY : lower_bnd, upper_bnd, nbndfst USE elph2, ONLY : lower_bnd, upper_bnd, nbndfst
USE epwcom, ONLY : wmin_specfun, wmax_specfun, nw_specfun USE epwcom, ONLY : nstemp, wmin_specfun, wmax_specfun, nw_specfun
USE io_var, ONLY : iufilesigma_all USE io_var, ONLY : iufilesigma_all
USE io_files, ONLY : prefix, tmp_dir, diropn USE io_files, ONLY : prefix, tmp_dir, diropn
USE constants_epw, ONLY : zero USE constants_epw, ONLY : zero
@ -356,9 +380,9 @@
!! Total number of q-points !! Total number of q-points
INTEGER, INTENT(in) :: nktotf INTEGER, INTENT(in) :: nktotf
!! Total number of k-points !! Total number of k-points
REAL(KIND = DP), INTENT(out) :: esigmar_all(nbndfst, nktotf, nw_specfun) REAL(KIND = DP), INTENT(out) :: esigmar_all(nbndfst, nktotf, nw_specfun, nstemp)
!! Real part of the electron-phonon self-energy accross all pools !! Real part of the electron-phonon self-energy accross all pools
REAL(KIND = DP), INTENT(out) :: esigmai_all(nbndfst, nktotf, nw_specfun) REAL(KIND = DP), INTENT(out) :: esigmai_all(nbndfst, nktotf, nw_specfun, nstemp)
!! Imaginary part of the electron-phonon self-energy accross all pools !! Imaginary part of the electron-phonon self-energy accross all pools
! !
! Local variables ! Local variables
@ -376,11 +400,13 @@
!! Length of the vector !! Length of the vector
INTEGER :: nqtotf_read INTEGER :: nqtotf_read
!! Total number of q-point read !! Total number of q-point read
INTEGER :: itemp
!! Counter on temperatures
REAL(KIND = DP) :: dw REAL(KIND = DP) :: dw
!! Frequency intervals !! Frequency intervals
REAL(KIND = DP) :: ww(nw_specfun) REAL(KIND = DP) :: ww(nw_specfun)
!! Current frequency !! Current frequency
REAL(KIND = DP) :: aux(2 * nbndfst * nktotf * nw_specfun + 2) REAL(KIND = DP) :: aux(2 * nbndfst * nktotf * nw_specfun * nstemp + 2)
!! Vector to store the array !! Vector to store the array
! !
CHARACTER(LEN = 256) :: name1 CHARACTER(LEN = 256) :: name1
@ -398,7 +424,7 @@
! !
IF (exst) THEN ! read the file IF (exst) THEN ! read the file
! !
lesigma_all = 2 * nbndfst * nktotf * nw_specfun + 2 lesigma_all = 2 * nbndfst * nktotf * nw_specfun * nstemp + 2
CALL diropn(iufilesigma_all, 'esigma_restart', lesigma_all, exst) CALL diropn(iufilesigma_all, 'esigma_restart', lesigma_all, exst)
CALL davcio(aux, lesigma_all, iufilesigma_all, 1, -1) CALL davcio(aux, lesigma_all, iufilesigma_all, 1, -1)
! !
@ -410,19 +436,23 @@
&'Error: The current total number of q-point is not the same as the read one. ', 1) &'Error: The current total number of q-point is not the same as the read one. ', 1)
! !
i = 2 i = 2
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
DO iw = 1, nw_specfun DO ibnd = 1, nbndfst
i = i + 1 DO iw = 1, nw_specfun
esigmar_all(ibnd, ik, iw) = aux(i) i = i + 1
esigmar_all(ibnd, ik, iw, itemp) = aux(i)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
ENDDO ENDDO
DO ik = 1, nktotf DO itemp = 1, nstemp
DO ibnd = 1, nbndfst DO ik = 1, nktotf
DO iw = 1, nw_specfun DO ibnd = 1, nbndfst
i = i + 1 DO iw = 1, nw_specfun
esigmai_all(ibnd, ik, iw) = aux(i) i = i + 1
esigmai_all(ibnd, ik, iw, itemp) = aux(i)
ENDDO
ENDDO ENDDO
ENDDO ENDDO
ENDDO ENDDO
@ -439,12 +469,12 @@
! !
! Make everythin 0 except the range of k-points we are working on ! Make everythin 0 except the range of k-points we are working on
IF (lower_bnd > 1) THEN IF (lower_bnd > 1) THEN
esigmar_all(:, 1:lower_bnd - 1, :) = zero esigmar_all(:, 1:lower_bnd - 1, :, :) = zero
esigmai_all(:, 1:lower_bnd - 1, :) = zero esigmai_all(:, 1:lower_bnd - 1, :, :) = zero
ENDIF ENDIF
IF (upper_bnd < nktotf) THEN IF (upper_bnd < nktotf) THEN
esigmar_all(:, upper_bnd + 1:nktotf, :) = zero esigmar_all(:, upper_bnd + 1:nktotf, :, :) = zero
esigmai_all(:, upper_bnd + 1:nktotf, :) = zero esigmai_all(:, upper_bnd + 1:nktotf, :, :) = zero
ENDIF ENDIF
! !
WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from: ', iqq,'/', totq WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from: ', iqq,'/', totq

View File

@ -34,7 +34,7 @@
USE pwcom, ONLY : ef USE pwcom, ONLY : ef
USE elph2, ONLY : ibndmin, etf, nkf, dmef, vmef, wf, wqf, & USE elph2, ONLY : ibndmin, etf, nkf, dmef, vmef, wf, wqf, &
epf17, inv_tau_all, inv_tau_allcb, adapt_smearing, & epf17, inv_tau_all, inv_tau_allcb, adapt_smearing, &
wkf, dmef, vmef, eta, transp_temp, lower_bnd, dos, & wkf, dmef, vmef, eta, gtemp, lower_bnd, dos, &
nbndfst, nktotf nbndfst, nktotf
USE constants_epw, ONLY : zero, one, two, ryd2mev, kelvin2eV, ryd2ev, eps4, eps8, & USE constants_epw, ONLY : zero, one, two, ryd2mev, kelvin2eV, ryd2ev, eps4, eps8, &
eps6, eps10, bohr2ang, ang2cm eps6, eps10, bohr2ang, ang2cm
@ -321,7 +321,7 @@
DO itemp = 1, nstemp DO itemp = 1, nstemp
! !
! Define the inverse so that we can efficiently multiply instead of dividing ! Define the inverse so that we can efficiently multiply instead of dividing
etemp = transp_temp(itemp) etemp = gtemp(itemp)
inv_etemp = 1.0 / etemp inv_etemp = 1.0 / etemp
! !
! Now pre-treat phonon modes for efficiency for this specific current q-point. ! Now pre-treat phonon modes for efficiency for this specific current q-point.
@ -629,7 +629,7 @@
! Now print the carrier density for checking (for non-metals) ! Now print the carrier density for checking (for non-metals)
IF (.NOT. assume_metal) THEN IF (.NOT. assume_metal) THEN
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
carrier_density = 0.0 carrier_density = 0.0
! !
IF (ncarrier < 0.0) THEN ! VB IF (ncarrier < 0.0) THEN ! VB

View File

@ -260,7 +260,7 @@
!! !!
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE epwcom, ONLY : ncarrier, nstemp, nkf1, nkf2, nkf3, assume_metal USE epwcom, ONLY : ncarrier, nstemp, nkf1, nkf2, nkf3, assume_metal
USE elph2, ONLY : nbndfst, transp_temp, nktotf USE elph2, ONLY : nbndfst, gtemp, nktotf
USE constants_epw, ONLY : zero, two, kelvin2eV, ryd2ev, eps10, & USE constants_epw, ONLY : zero, two, kelvin2eV, ryd2ev, eps10, &
bohr2ang, ang2cm, hbarJ bohr2ang, ang2cm, hbarJ
USE symm_base, ONLY : nrot USE symm_base, ONLY : nrot
@ -317,7 +317,7 @@
! compute conductivity ! compute conductivity
DO itemp = 1, nstemp DO itemp = 1, nstemp
carrier_density = 0.0 carrier_density = 0.0
etemp = transp_temp(itemp) etemp = gtemp(itemp)
sigma(:, :) = zero sigma(:, :) = zero
fi_check(:) = zero fi_check(:) = zero
DO ik = 1, nktotf DO ik = 1, nktotf
@ -464,7 +464,7 @@
!----------------------------------------------------------------------- !-----------------------------------------------------------------------
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE epwcom, ONLY : ncarrier, nstemp, nkf1, nkf2, nkf3, assume_metal USE epwcom, ONLY : ncarrier, nstemp, nkf1, nkf2, nkf3, assume_metal
USE elph2, ONLY : nbndfst, transp_temp, nktotf USE elph2, ONLY : nbndfst, gtemp, nktotf
USE constants_epw, ONLY : zero, two, kelvin2eV, ryd2ev, eps10, & USE constants_epw, ONLY : zero, two, kelvin2eV, ryd2ev, eps10, &
bohr2ang, ang2cm, hbarJ bohr2ang, ang2cm, hbarJ
USE noncollin_module, ONLY : noncolin USE noncollin_module, ONLY : noncolin
@ -519,7 +519,7 @@
CALL prtheader_mob() CALL prtheader_mob()
DO itemp = 1, nstemp DO itemp = 1, nstemp
carrier_density = 0.0 carrier_density = 0.0
etemp = transp_temp(itemp) etemp = gtemp(itemp)
sigma(:, :) = zero sigma(:, :) = zero
fi_check(:) = zero fi_check(:) = zero
DO ik = 1, nktotf DO ik = 1, nktotf
@ -716,7 +716,8 @@
!! !!
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE epwcom, ONLY : liso, laniso, lreal, imag_read, wscut USE epwcom, ONLY : liso, laniso, lreal, imag_read, wscut
USE eliashbergcom, ONLY : nsiw, nsw, estemp USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsiw, nsw
USE constants_epw, ONLY : kelvin2eV USE constants_epw, ONLY : kelvin2eV
USE constants, ONLY : pi USE constants, ONLY : pi
! !
@ -729,7 +730,7 @@
! !
IF (cal_type == 1) THEN IF (cal_type == 1) THEN
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
WRITE(stdout, '(5x, a, i3, a, f12.5, a, a, i3, a)') 'temp(', itemp, ') = ', estemp(itemp) / kelvin2eV, ' K' WRITE(stdout, '(5x, a, i3, a, f12.5, a, a, i3, a)') 'temp(', itemp, ') = ', gtemp(itemp) / kelvin2eV, ' K'
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
IF (liso) & IF (liso) &
WRITE(stdout, '(5x, a)') 'Solve isotropic Eliashberg equations on imaginary-axis' WRITE(stdout, '(5x, a)') 'Solve isotropic Eliashberg equations on imaginary-axis'
@ -739,7 +740,7 @@
WRITE(stdout, '(5x, a)') 'Read from file delta and znorm on imaginary-axis ' WRITE(stdout, '(5x, a)') 'Read from file delta and znorm on imaginary-axis '
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
WRITE(stdout, '(5x, a, i6, a, i6)') 'Total number of frequency points nsiw(', itemp, ') = ', nsiw(itemp) WRITE(stdout, '(5x, a, i6, a, i6)') 'Total number of frequency points nsiw(', itemp, ') = ', nsiw(itemp)
WRITE(stdout, '(5x, a, f10.4)') 'Cutoff frequency wscut = ', (2.d0 * nsiw(itemp) + 1) * pi * estemp(itemp) WRITE(stdout, '(5x, a, f10.4)') 'Cutoff frequency wscut = ', (2.d0 * nsiw(itemp) + 1) * pi * gtemp(itemp)
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
ENDIF ENDIF
! !
@ -767,7 +768,7 @@
! !
IF (cal_type == 4) THEN IF (cal_type == 4) THEN
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
WRITE(stdout, '(5x, a, i3, a, f12.5, a, a, i3, a)') 'temp(', itemp, ') = ', estemp(itemp) / kelvin2eV, ' K' WRITE(stdout, '(5x, a, i3, a, f12.5, a, a, i3, a)') 'temp(', itemp, ') = ', gtemp(itemp) / kelvin2eV, ' K'
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
IF (liso .AND. lreal) & IF (liso .AND. lreal) &
WRITE(stdout, '(5x, a)') 'Solve isotropic Eliashberg equations on real-axis' WRITE(stdout, '(5x, a)') 'Solve isotropic Eliashberg equations on real-axis'

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -25,6 +25,7 @@
! !
IMPLICIT NONE IMPLICIT NONE
! !
!
CALL print_clock_epw() CALL print_clock_epw()
! !
WRITE(stdout, '(a)') " " WRITE(stdout, '(a)') " "

View File

@ -27,12 +27,12 @@
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE epwcom, ONLY : eliashberg, nkf1, nkf2, nkf3, nsiter, & USE epwcom, ONLY : eliashberg, nkf1, nkf2, nkf3, nsiter, &
nqf1, nqf2, nqf3, ntempxx, nswi, nstemp, temps, & nqf1, nqf2, nqf3, nswi, muc, lreal, lpade, &
muc, lreal, lpade, liso, limag, laniso, lacon, & liso, limag, laniso, lacon, kerwrite, kerread, &
kerwrite, kerread, imag_read, fila2f, wsfc, wscut, & imag_read, fila2f, wsfc, wscut, rand_q, &
tempsmin, tempsmax, rand_q, rand_k rand_k
USE constants_epw, ONLY : kelvin2eV USE constants_epw, ONLY : ryd2ev
USE eliashbergcom, ONLY : estemp USE elph2, ONLY : gtemp
! !
IMPLICIT NONE IMPLICIT NONE
! !
@ -80,12 +80,6 @@
CALL errore('eliashberg_init', 'nswi should be > 0', 1) CALL errore('eliashberg_init', 'nswi should be > 0', 1)
IF (eliashberg .AND. wscut < 0.d0 ) & IF (eliashberg .AND. wscut < 0.d0 ) &
CALL errore('eliashberg_init', 'wscut should be > 0.d0', 1) CALL errore('eliashberg_init', 'wscut should be > 0.d0', 1)
IF (eliashberg .AND. nstemp < 1) &
CALL errore('eliashberg_init', 'wrong number of nstemp', 1)
IF (eliashberg .AND. MAXVAL(temps(:)) > 0.d0 .AND. tempsmin > 0.d0 .AND. tempsmax > 0.d0) &
CALL errore('eliashberg_init', 'define either (tempsmin and tempsmax) or temps(:)', 1)
IF (eliashberg .AND. tempsmax < tempsmin) &
CALL errore('eliashberg_init', 'tempsmax should be greater than tempsmin', 1)
IF (eliashberg .AND. nsiter < 1) & IF (eliashberg .AND. nsiter < 1) &
CALL errore('eliashberg_init', 'wrong number of nsiter', 1) CALL errore('eliashberg_init', 'wrong number of nsiter', 1)
IF (eliashberg .AND. muc < 0.d0) & IF (eliashberg .AND. muc < 0.d0) &
@ -96,31 +90,8 @@
CALL errore('eliashberg_init', & CALL errore('eliashberg_init', &
'eliashberg requires nkf1,nkf2,nkf3 to be multiple of nqf1,nqf2,nqf3 when fila2f is not used', 1) 'eliashberg requires nkf1,nkf2,nkf3 to be multiple of nqf1,nqf2,nqf3 when fila2f is not used', 1)
! !
DO itemp = 1, ntempxx ! Ryd to eV
IF (temps(itemp) > 0.d0) THEN gtemp(:) = gtemp * ryd2ev
nstemp = itemp
ENDIF
ENDDO
!
ALLOCATE(estemp(nstemp), STAT = ierr)
IF (ierr /= 0) CALL errore('eliashberg_init', 'Error allocating estemp', 1)
estemp(:) = 0.d0
!
! go from K to eV
IF (MAXVAL(temps(:)) > 0.d0) THEN
DO itemp= 1, nstemp
estemp(itemp) = temps(itemp) * kelvin2eV
ENDDO
ELSE
IF (nstemp == 1) THEN
estemp(1) = tempsmin * kelvin2eV
ELSE
dtemp = (tempsmax - tempsmin) * kelvin2eV / DBLE(nstemp - 1)
DO itemp = 1, nstemp
estemp(itemp) = tempsmin * kelvin2eV + DBLE(itemp - 1) * dtemp
ENDDO
ENDIF
ENDIF
! !
RETURN RETURN
! !
@ -139,9 +110,10 @@
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE epwcom, ONLY : nqstep, nswi, nswfc, nswc, nstemp, & USE epwcom, ONLY : nqstep, nswi, nswfc, nswc, nstemp, &
lreal, lpade, limag, lacon, wsfc, wscut lreal, lpade, limag, lacon, wsfc, wscut
USE elph2, ONLY : gtemp
USE constants_epw, ONLY : eps6 USE constants_epw, ONLY : eps6
USE constants, ONLY : pi USE constants, ONLY : pi
USE eliashbergcom, ONLY : estemp, nsw, nsiw, wsphmax USE eliashbergcom, ONLY : nsw, nsiw, wsphmax
! !
IMPLICIT NONE IMPLICIT NONE
! !
@ -173,7 +145,7 @@
nsiw(:) = nswi nsiw(:) = nswi
ELSEIF (wscut > 0.d0) THEN ELSEIF (wscut > 0.d0) THEN
DO itemp = 1, nstemp DO itemp = 1, nstemp
nsiw(itemp) = int(0.5d0 * (wscut / pi / estemp(itemp) - 1.d0)) + 1 nsiw(itemp) = int(0.5d0 * (wscut / pi / gtemp(itemp) - 1.d0)) + 1
ENDDO ENDDO
ELSEIF (nswi > 0 .AND. wscut > 0.d0) THEN ELSEIF (nswi > 0 .AND. wscut > 0.d0) THEN
nsiw(:) = nswi nsiw(:) = nswi
@ -675,12 +647,13 @@
! !
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE epwcom, ONLY : nqstep, muc, nstemp USE epwcom, ONLY : nqstep, muc, nstemp
USE eliashbergcom, ONLY : estemp, wsph, dwsph, a2f_iso, gap0 USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : wsph, dwsph, a2f_iso, gap0
USE constants_epw, ONLY : kelvin2eV, zero USE constants_epw, ONLY : kelvin2eV, zero
USE io_global, ONLY : stdout, ionode_id USE io_global, ONLY : stdout, ionode_id
USE mp_global, ONLY : inter_pool_comm USE mp_global, ONLY : inter_pool_comm
USE mp_world, ONLY : mpime USE mp_world, ONLY : mpime
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
! !
IMPLICIT NONE IMPLICIT NONE
! !
@ -726,18 +699,18 @@
WRITE(stdout, '(5x, a, f12.6, a)') 'Estimated BCS superconducting gap = ', gap0, ' eV' WRITE(stdout, '(5x, a, f12.6, a)') 'Estimated BCS superconducting gap = ', gap0, ' eV'
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
! !
IF (estemp(1) / kelvin2eV > tc) THEN IF (gtemp(1) / kelvin2eV > tc) THEN
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
WRITE(stdout, '(5x, a)') 'WARNING WARNING WARNING ' WRITE(stdout, '(5x, a)') 'WARNING WARNING WARNING '
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
WRITE(stdout, '(5x, a, f9.3, a, f9.3, a)') 'The code may crash since tempsmin =', & WRITE(stdout, '(5x, a, f9.3, a, f9.3, a)') 'The code may crash since tempsmin =', &
estemp(1) / kelvin2eV, ' K is larger than Allen-Dynes Tc = ', tc, ' K' gtemp(1) / kelvin2eV, ' K is larger than Allen-Dynes Tc = ', tc, ' K'
ELSEIF (estemp(nstemp) / kelvin2eV > tc) THEN ELSEIF (gtemp(nstemp) / kelvin2eV > tc) THEN
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
WRITE(stdout, '(5x, a)') 'WARNING WARNING WARNING ' WRITE(stdout, '(5x, a)') 'WARNING WARNING WARNING '
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
WRITE(stdout, '(5x, a, f9.3, a, f9.3, a)') 'The code may crash since tempsmax =', & WRITE(stdout, '(5x, a, f9.3, a, f9.3, a)') 'The code may crash since tempsmax =', &
estemp(nstemp) / kelvin2eV, ' K is larger than Allen-Dynes Tc = ', tc, ' K' gtemp(nstemp) / kelvin2eV, ' K is larger than Allen-Dynes Tc = ', tc, ' K'
ENDIF ENDIF
! !
ENDIF ENDIF
@ -838,7 +811,8 @@
! itemp - temperature point ! itemp - temperature point
! !
USE epwcom, ONLY : nqstep, lpade, lacon, laniso USE epwcom, ONLY : nqstep, lpade, lacon, laniso
USE eliashbergcom, ONLY : nsw, nsiw, ws, wsi, wsph, dwsph, estemp, wsphmax USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, nsiw, ws, wsi, wsph, dwsph, wsphmax
USE constants_epw, ONLY : zero USE constants_epw, ONLY : zero
USE constants, ONLY : pi USE constants, ONLY : pi
USE low_lvl, ONLY : mem_size_eliashberg USE low_lvl, ONLY : mem_size_eliashberg
@ -872,7 +846,7 @@
wsi(:) = zero wsi(:) = zero
DO iw = 1, nsiw(itemp) DO iw = 1, nsiw(itemp)
n = iw - 1 n = iw - 1
wsi(iw) = DBLE(2 * n + 1) * pi * estemp(itemp) wsi(iw) = DBLE(2 * n + 1) * pi * gtemp(itemp)
!WRITE(*, *) iw, wsi(iw) !WRITE(*, *) iw, wsi(iw)
ENDDO ENDDO
! !
@ -950,7 +924,8 @@
USE io_var, ONLY : iuqdos USE io_var, ONLY : iuqdos
USE io_files, ONLY : prefix USE io_files, ONLY : prefix
USE epwcom, ONLY : lreal, limag, liso, laniso, fsthick USE epwcom, ONLY : lreal, limag, liso, laniso, fsthick
USE eliashbergcom, ONLY : nsw, estemp, dwsph, ws, dws, delta, adelta, & USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, dwsph, ws, dws, delta, adelta, &
wkfs, w0g, nkfs, nbndfs, ef0, ekfs wkfs, w0g, nkfs, nbndfs, ef0, ekfs
USE constants_epw, ONLY : kelvin2eV, zero, ci USE constants_epw, ONLY : kelvin2eV, zero, ci
! !
@ -992,7 +967,7 @@
degaussw0 = 1.d0 * dwsph degaussw0 = 1.d0 * dwsph
ENDIF ENDIF
! !
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
IF (temp < 10.d0) THEN IF (temp < 10.d0) THEN
WRITE(fildos, '(a, a8, f4.2)') TRIM(prefix), '.qdos_00', temp WRITE(fildos, '(a, a8, f4.2)') TRIM(prefix), '.qdos_00', temp
ELSEIF (temp >= 10.d0 .AND. temp < 100.d0) THEN ELSEIF (temp >= 10.d0 .AND. temp < 100.d0) THEN
@ -1053,7 +1028,8 @@
USE io_var, ONLY : iufe USE io_var, ONLY : iufe
USE io_files, ONLY : prefix USE io_files, ONLY : prefix
USE epwcom, ONLY : liso, laniso, fsthick USE epwcom, ONLY : liso, laniso, fsthick
USE eliashbergcom, ONLY : estemp, wsi, nsiw, adeltai, aznormi, naznormi, & USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : wsi, nsiw, adeltai, aznormi, naznormi, &
deltai, znormi, nznormi, & deltai, znormi, nznormi, &
wkfs, w0g, nkfs, nbndfs, ef0, ekfs wkfs, w0g, nkfs, nbndfs, ef0, ekfs
USE constants_epw, ONLY : kelvin2eV, zero USE constants_epw, ONLY : kelvin2eV, zero
@ -1086,7 +1062,7 @@
REAL(KIND = DP) :: dFE REAL(KIND = DP) :: dFE
!! free energy difference between supercond and normal states !! free energy difference between supercond and normal states
! !
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
IF (temp < 10.d0) THEN IF (temp < 10.d0) THEN
WRITE(filfe, '(a, a6, f4.2)') TRIM(prefix), '.fe_00', temp WRITE(filfe, '(a, a6, f4.2)') TRIM(prefix), '.fe_00', temp
ELSEIF (temp >= 10.d0 .AND. temp < 100.d0) THEN ELSEIF (temp >= 10.d0 .AND. temp < 100.d0) THEN
@ -1118,7 +1094,7 @@
* (znormi(iw) - nznormi(iw) * wsi(iw) / omega) * (znormi(iw) - nznormi(iw) * wsi(iw) / omega)
ENDDO ENDDO
ENDIF ENDIF
dFE = dFE * pi * estemp(itemp) dFE = dFE * pi * gtemp(itemp)
WRITE(iufe, '(2ES20.10)') temp, dFE WRITE(iufe, '(2ES20.10)') temp, dFE
CLOSE(iufe) CLOSE(iufe)
! !
@ -1263,15 +1239,16 @@
!! deallocates the variables allocated by eliashberg_init and read_a2f !! deallocates the variables allocated by eliashberg_init and read_a2f
!! !!
USE epwcom, ONLY : limag USE epwcom, ONLY : limag
USE eliashbergcom, ONLY : a2f_iso, wsph, estemp, nsiw USE eliashbergcom, ONLY : a2f_iso, wsph, nsiw
USE elph2, ONLY : gtemp
! !
IMPLICIT NONE IMPLICIT NONE
! !
INTEGER :: ierr INTEGER :: ierr
!! Error status !! Error status
! !
DEALLOCATE(estemp, STAT = ierr) DEALLOCATE(gtemp, STAT = ierr)
IF (ierr /= 0) CALL errore('deallocate_eliashberg_iso', 'Error deallocating estemp', 1) IF (ierr /= 0) CALL errore('deallocate_eliashberg_iso', 'Error deallocating gtemp', 1)
DEALLOCATE(wsph, STAT = ierr) DEALLOCATE(wsph, STAT = ierr)
IF (ierr /= 0) CALL errore('deallocate_eliashberg_iso', 'Error deallocating wsph', 1) IF (ierr /= 0) CALL errore('deallocate_eliashberg_iso', 'Error deallocating wsph', 1)
IF (limag) THEN IF (limag) THEN
@ -1296,18 +1273,18 @@
!! and evaluate_a2f_lambda subroutines !! and evaluate_a2f_lambda subroutines
!! !!
USE epwcom, ONLY : limag USE epwcom, ONLY : limag
USE elph2, ONLY : wf, wqf, xqf USE elph2, ONLY : wf, wqf, xqf, gtemp
USE eliashbergcom, ONLY : ekfs, xkfs, wkfs, g2, a2f_iso, w0g, & USE eliashbergcom, ONLY : ekfs, xkfs, wkfs, g2, a2f_iso, w0g, &
ixkff, ixkqf, ixqfs, nqfs, memlt_pool, & ixkff, ixkqf, ixqfs, nqfs, memlt_pool, &
wsph, estemp, nsiw wsph, nsiw
! !
IMPLICIT NONE IMPLICIT NONE
! !
INTEGER :: ierr INTEGER :: ierr
!! Error status !! Error status
! !
DEALLOCATE(estemp, STAT = ierr) DEALLOCATE(gtemp, STAT = ierr)
IF (ierr /= 0) CALL errore('deallocate_eliashberg_aniso', 'Error deallocating estemp', 1) IF (ierr /= 0) CALL errore('deallocate_eliashberg_aniso', 'Error deallocating gtemp', 1)
DEALLOCATE(wsph, STAT = ierr) DEALLOCATE(wsph, STAT = ierr)
IF (ierr /= 0) CALL errore('deallocate_eliashberg_aniso', 'Error deallocating wsph', 1) IF (ierr /= 0) CALL errore('deallocate_eliashberg_aniso', 'Error deallocating wsph', 1)
IF (limag) THEN IF (limag) THEN

View File

@ -29,8 +29,9 @@
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE epwcom, ONLY : nsiter, nstemp, broyden_beta, broyden_ndim, & USE epwcom, ONLY : nsiter, nstemp, broyden_beta, broyden_ndim, &
limag, lpade, lacon, fsthick, imag_read, wscut limag, lpade, lacon, fsthick, imag_read, wscut
USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, nsiw, adelta, adeltap, adeltai, adeltaip, & USE eliashbergcom, ONLY : nsw, nsiw, adelta, adeltap, adeltai, adeltaip, &
estemp, nkfs, nbndfs, ekfs, ef0 nkfs, nbndfs, ekfs, ef0
USE supercond, ONLY : free_energy, dos_quasiparticle, gen_freqgrid_iaxis, & USE supercond, ONLY : free_energy, dos_quasiparticle, gen_freqgrid_iaxis, &
deallocate_eliashberg_iaxis, deallocate_eliashberg_raxis, & deallocate_eliashberg_iaxis, deallocate_eliashberg_raxis, &
deallocate_eliashberg_aniso, eliashberg_grid deallocate_eliashberg_aniso, eliashberg_grid
@ -301,9 +302,9 @@
!! This routine solves the anisotropic Eliashberg equations on the imaginary-axis !! This routine solves the anisotropic Eliashberg equations on the imaginary-axis
!! !!
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE elph2, ONLY : wqf USE elph2, ONLY : wqf, gtemp
USE epwcom, ONLY : nsiter, nstemp, muc, conv_thr_iaxis, fsthick USE epwcom, ONLY : nsiter, nstemp, muc, conv_thr_iaxis, fsthick
USE eliashbergcom, ONLY : nsiw, estemp, gap0, gap, agap, wsi, akeri, limag_fly, & USE eliashbergcom, ONLY : nsiw, gap0, gap, agap, wsi, akeri, limag_fly, &
naznormi, aznormi, adeltai, adeltaip, nznormi, znormi, & naznormi, aznormi, adeltai, adeltaip, nznormi, znormi, &
deltai, wsphmax, nkfs, nbndfs, dosef, ef0, ixkqf, ixqfs, & deltai, wsphmax, nkfs, nbndfs, dosef, ef0, ixkqf, ixqfs, &
nqfs, wkfs, w0g, ekfs nqfs, wkfs, w0g, ekfs
@ -508,16 +509,16 @@
nznormi(iw) = nznormi(iw) + weight * naznormi(ibnd, ik, iw) nznormi(iw) = nznormi(iw) + weight * naznormi(ibnd, ik, iw)
znormi(iw) = znormi(iw) + weight * aznormi(ibnd, ik, iw) znormi(iw) = znormi(iw) + weight * aznormi(ibnd, ik, iw)
deltai(iw) = deltai(iw) + weight * adeltai(ibnd, ik, iw) deltai(iw) = deltai(iw) + weight * adeltai(ibnd, ik, iw)
naznormi(ibnd, ik, iw) = 1.d0 + pi * estemp(itemp) * naznormi(ibnd, ik, iw) / wsi(iw) naznormi(ibnd, ik, iw) = 1.d0 + pi * gtemp(itemp) * naznormi(ibnd, ik, iw) / wsi(iw)
! Eqs.(21)-(22) in Margine and Giustino, PRB 87, 024505 (2013) ! Eqs.(21)-(22) in Margine and Giustino, PRB 87, 024505 (2013)
aznormi(ibnd, ik, iw) = 1.d0 + pi * estemp(itemp) * aznormi(ibnd, ik, iw) / wsi(iw) aznormi(ibnd, ik, iw) = 1.d0 + pi * gtemp(itemp) * aznormi(ibnd, ik, iw) / wsi(iw)
adeltai(ibnd, ik, iw) = pi * estemp(itemp) * adeltai(ibnd, ik, iw) / aznormi(ibnd, ik, iw) adeltai(ibnd, ik, iw) = pi * gtemp(itemp) * adeltai(ibnd, ik, iw) / aznormi(ibnd, ik, iw)
ENDIF ENDIF
ENDDO ! ibnd ENDDO ! ibnd
ENDDO ! ik ENDDO ! ik
nznormi(iw) = 1.d0 + pi * estemp(itemp) * nznormi(iw) / wsi(iw) nznormi(iw) = 1.d0 + pi * gtemp(itemp) * nznormi(iw) / wsi(iw)
znormi(iw) = 1.d0 + pi * estemp(itemp) * znormi(iw) / wsi(iw) znormi(iw) = 1.d0 + pi * gtemp(itemp) * znormi(iw) / wsi(iw)
deltai(iw) = pi * estemp(itemp) * deltai(iw) / znormi(iw) deltai(iw) = pi * gtemp(itemp) * deltai(iw) / znormi(iw)
reldelta = reldelta + ABS(deltai(iw) - deltaold(iw)) reldelta = reldelta + ABS(deltai(iw) - deltaold(iw))
absdelta = absdelta + ABS(deltai(iw)) absdelta = absdelta + ABS(deltai(iw))
ENDDO ! iw ENDDO ! iw
@ -597,10 +598,10 @@
! !
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE modes, ONLY : nmodes USE modes, ONLY : nmodes
USE elph2, ONLY : wqf, wf USE elph2, ONLY : wqf, wf, gtemp
USE epwcom, ONLY : nqstep, degaussq, nsiter, conv_thr_racon, fsthick, & USE epwcom, ONLY : nqstep, degaussq, nsiter, conv_thr_racon, fsthick, &
lpade, eps_acustic lpade, eps_acustic
USE eliashbergcom, ONLY : nsw, estemp, dwsph, ws, wsph, gap, agap, gp, gm, adsumi, azsumi, & USE eliashbergcom, ONLY : nsw, dwsph, ws, wsph, gap, agap, gp, gm, adsumi, azsumi, &
delta, znorm, adelta, adeltap, aznorm, aznormp, g2, lacon_fly, & delta, znorm, adelta, adeltap, aznorm, aznormp, g2, lacon_fly, &
a2fij, wkfs, dosef, ixkqf, ixqfs, nqfs, w0g, nkfs, nbndfs, ef0, ekfs a2fij, wkfs, dosef, ixkqf, ixqfs, nqfs, w0g, nkfs, nbndfs, ef0, ekfs
USE supercond, ONLY : gamma_acont USE supercond, ONLY : gamma_acont
@ -725,7 +726,7 @@
! ! Eq.(28) in Margine and Giustino, PRB 87, 024505 (2013) ! ! Eq.(28) in Margine and Giustino, PRB 87, 024505 (2013)
DO iw = 1, nsw ! loop over omega DO iw = 1, nsw ! loop over omega
DO iwp = 1, nqstep ! loop over omega_prime DO iwp = 1, nqstep ! loop over omega_prime
CALL gamma_acont(ws(iw), ws(iwp), estemp(itemp), rgammap, rgammam) CALL gamma_acont(ws(iw), ws(iwp), gtemp(itemp), rgammap, rgammam)
gp(iw, iwp) = rgammap gp(iw, iwp) = rgammap
gm(iw, iwp) = rgammam gm(iw, iwp) = rgammam
ENDDO ENDDO
@ -807,8 +808,8 @@
ENDDO ! iq ENDDO ! iq
! Eqs.(26)-(27) in Margine and Giustino, PRB 87, 024505 (2013) ! Eqs.(26)-(27) in Margine and Giustino, PRB 87, 024505 (2013)
DO iw = 1, nsw ! loop over omega DO iw = 1, nsw ! loop over omega
aznorm(ibnd, ik, iw) = - estemp(itemp) * azsumi(ibnd, ik, iw) + ci * aznorm(ibnd, ik, iw) * dwsph aznorm(ibnd, ik, iw) = - gtemp(itemp) * azsumi(ibnd, ik, iw) + ci * aznorm(ibnd, ik, iw) * dwsph
adelta(ibnd, ik, iw) = estemp(itemp) * adsumi(ibnd, ik, iw) + ci * adelta(ibnd, ik, iw) * dwsph adelta(ibnd, ik, iw) = gtemp(itemp) * adsumi(ibnd, ik, iw) + ci * adelta(ibnd, ik, iw) * dwsph
ENDDO ! iw ENDDO ! iw
ENDIF ! fsthick ENDIF ! fsthick
ENDDO ! ibnd ENDDO ! ibnd
@ -1093,7 +1094,8 @@
!! !!
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE epwcom, ONLY : fsthick USE epwcom, ONLY : fsthick
USE eliashbergcom, ONLY : nkfs, nbndfs, nsiw, estemp, akeri, ekfs, ef0, ixkqf, ixqfs, nqfs USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nkfs, nbndfs, nsiw, akeri, ekfs, ef0, ixkqf, ixqfs, nqfs
USE constants_epw, ONLY : zero USE constants_epw, ONLY : zero
USE constants, ONLY : pi USE constants, ONLY : pi
USE division, ONLY : fkbounds USE division, ONLY : fkbounds
@ -1144,7 +1146,7 @@
IF (ABS(ekfs(jbnd, ixkqf(ik, iq0)) - ef0) < fsthick) THEN IF (ABS(ekfs(jbnd, ixkqf(ik, iq0)) - ef0) < fsthick) THEN
DO iw = 1, 2*nsiw(itemp) DO iw = 1, 2*nsiw(itemp)
n = iw - 1 n = iw - 1
omega = DBLE(2 * n) * pi * estemp(itemp) omega = DBLE(2 * n) * pi * gtemp(itemp)
CALL lambdar_aniso_ver1(ik, iq, ibnd, jbnd, omega, lambda_eph) CALL lambdar_aniso_ver1(ik, iq, ibnd, jbnd, omega, lambda_eph)
!CALL lambdar_aniso_ver2(ik, iq, ibnd, jbnd, omega, lambda_eph) !CALL lambdar_aniso_ver2(ik, iq, ibnd, jbnd, omega, lambda_eph)
akeri(ik, iq, ibnd, jbnd, iw) = lambda_eph akeri(ik, iq, ibnd, jbnd, iw) = lambda_eph

View File

@ -30,7 +30,8 @@
USE control_flags, ONLY : iverbosity USE control_flags, ONLY : iverbosity
USE epwcom, ONLY : nsiter, nstemp, broyden_beta, broyden_ndim, & USE epwcom, ONLY : nsiter, nstemp, broyden_beta, broyden_ndim, &
limag, lpade, lacon limag, lpade, lacon
USE eliashbergcom, ONLY : nsw, nsiw, deltai, deltaip, delta, deltap, estemp USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, nsiw, deltai, deltaip, delta, deltap
USE constants_epw, ONLY : kelvin2eV, ci, zero USE constants_epw, ONLY : kelvin2eV, ci, zero
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE supercond, ONLY : free_energy, dos_quasiparticle, gen_freqgrid_iaxis, & USE supercond, ONLY : free_energy, dos_quasiparticle, gen_freqgrid_iaxis, &
@ -236,7 +237,8 @@
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE epwcom, ONLY : nsiter, nstemp, muc, conv_thr_iaxis USE epwcom, ONLY : nsiter, nstemp, muc, conv_thr_iaxis
USE eliashbergcom, ONLY : nsiw, estemp, gap0, gap, wsi, nznormi, znormi, deltai, deltaip, keri USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsiw, gap0, gap, wsi, nznormi, znormi, deltai, deltaip, keri
USE constants_epw, ONLY : zero USE constants_epw, ONLY : zero
USE constants, ONLY : pi USE constants, ONLY : pi
USE io_eliashberg, ONLY : eliashberg_write_iaxis USE io_eliashberg, ONLY : eliashberg_write_iaxis
@ -326,10 +328,10 @@
znormi(iw) = znormi(iw) + wesqrt(iwp) * kernelm znormi(iw) = znormi(iw) + wesqrt(iwp) * kernelm
deltai(iw) = deltai(iw) + desqrt(iwp) * (kernelp - 2.d0 * muc) deltai(iw) = deltai(iw) + desqrt(iwp) * (kernelp - 2.d0 * muc)
ENDDO ! iwp ENDDO ! iwp
znormi(iw) = 1.d0 + pi * estemp(itemp) * znormi(iw) / wsi(iw) znormi(iw) = 1.d0 + pi * gtemp(itemp) * znormi(iw) / wsi(iw)
! Eqs.(34)-(35) in Margine and Giustino, PRB 87, 024505 (2013) ! Eqs.(34)-(35) in Margine and Giustino, PRB 87, 024505 (2013)
nznormi(iw) = 1.d0 + pi * estemp(itemp) * nznormi(iw) / wsi(iw) nznormi(iw) = 1.d0 + pi * gtemp(itemp) * nznormi(iw) / wsi(iw)
deltai(iw) = pi * estemp(itemp) * deltai(iw) / znormi(iw) deltai(iw) = pi * gtemp(itemp) * deltai(iw) / znormi(iw)
reldelta = reldelta + ABS(deltai(iw) - deltaold(iw)) reldelta = reldelta + ABS(deltai(iw) - deltaold(iw))
absdelta = absdelta + ABS(deltai(iw)) absdelta = absdelta + ABS(deltai(iw))
ENDDO ! iw ENDDO ! iw
@ -386,7 +388,8 @@
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE epwcom, ONLY : nqstep, nsiter, conv_thr_racon, lpade USE epwcom, ONLY : nqstep, nsiter, conv_thr_racon, lpade
USE eliashbergcom, ONLY : nsw, estemp, dwsph, ws, gap, a2f_iso, dsumi, zsumi, & USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, dwsph, ws, gap, a2f_iso, dsumi, zsumi, &
delta, deltap, znorm, znormp, gp, gm delta, deltap, znorm, znormp, gp, gm
USE constants_epw, ONLY : ci, zero, czero, cone USE constants_epw, ONLY : ci, zero, czero, cone
USE constants, ONLY : pi USE constants, ONLY : pi
@ -461,7 +464,7 @@
DO iw = 1, nsw ! loop over omega DO iw = 1, nsw ! loop over omega
DO iwp = 1, nqstep ! loop over omega_prime DO iwp = 1, nqstep ! loop over omega_prime
IF (iter == 1) THEN IF (iter == 1) THEN
CALL gamma_acont(ws(iw), ws(iwp), estemp(itemp), rgammap, rgammam) CALL gamma_acont(ws(iw), ws(iwp), gtemp(itemp), rgammap, rgammam)
gp(iw, iwp) = rgammap gp(iw, iwp) = rgammap
gm(iw, iwp) = rgammam gm(iw, iwp) = rgammam
ENDIF ENDIF
@ -494,8 +497,8 @@
ENDIF ENDIF
delta(iw) = delta(iw) + deltap(i) * esqrt delta(iw) = delta(iw) + deltap(i) * esqrt
ENDDO ! iwp ENDDO ! iwp
znorm(iw) = 1.d0 + pi * (- estemp(itemp) * zsumi(iw) + ci * znorm(iw) * dwsph) / ws(iw) znorm(iw) = 1.d0 + pi * (- gtemp(itemp) * zsumi(iw) + ci * znorm(iw) * dwsph) / ws(iw)
delta(iw) = pi * (estemp(itemp) * dsumi(iw) + ci * delta(iw) * dwsph) / znorm(iw) delta(iw) = pi * (gtemp(itemp) * dsumi(iw) + ci * delta(iw) * dwsph) / znorm(iw)
reldelta = reldelta + ABS(delta(iw) - deltaold(iw)) reldelta = reldelta + ABS(delta(iw) - deltaold(iw))
absdelta = absdelta + ABS(delta(iw)) absdelta = absdelta + ABS(delta(iw))
ENDDO ! iw ENDDO ! iw
@ -632,7 +635,8 @@
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE constants_epw, ONLY : zero USE constants_epw, ONLY : zero
USE constants, ONLY : pi USE constants, ONLY : pi
USE eliashbergcom, ONLY : nsiw, estemp, keri USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsiw, keri
! !
IMPLICIT NONE IMPLICIT NONE
! !
@ -655,7 +659,7 @@
! !
DO iw = 1, 2 * nsiw(itemp) DO iw = 1, 2 * nsiw(itemp)
n = iw - 1 n = iw - 1
omega = DBLE(2 * n) * pi * estemp(itemp) omega = DBLE(2 * n) * pi * gtemp(itemp)
CALL lambdar_iso(omega, lambda_eph) CALL lambdar_iso(omega, lambda_eph)
keri(iw) = lambda_eph keri(iw) = lambda_eph
ENDDO ENDDO
@ -830,11 +834,12 @@
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE io_global, ONLY : stdout USE io_global, ONLY : stdout
USE epwcom, ONLY : nsiter, nstemp, broyden_beta, broyden_ndim USE epwcom, ONLY : nsiter, nstemp, broyden_beta, broyden_ndim
USE eliashbergcom, ONLY : nsw, delta, deltap, gap, estemp USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, delta, deltap, gap
USE constants_epw, ONLY : kelvin2eV, ci, zero USE constants_epw, ONLY : kelvin2eV, ci, zero
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE supercond, ONLY : gen_freqgrid_raxis, eliashberg_grid USE supercond, ONLY : gen_freqgrid_raxis, eliashberg_grid
USE utilities, ONLY : mix_broyden USE utilities, ONLY : mix_broyden
USE printing, ONLY : prtheader_supercond USE printing, ONLY : prtheader_supercond
! !
IMPLICIT NONE IMPLICIT NONE
@ -933,7 +938,7 @@
IF (ierr /= 0) CALL errore('eliashberg_iso_raxis', 'Error deallocating dv2', 1) IF (ierr /= 0) CALL errore('eliashberg_iso_raxis', 'Error deallocating dv2', 1)
! !
WRITE(stdout, '(5x, a, i3, a, f8.4, a, a, i3, a, f10.6, a, a, f10.6, a)') & WRITE(stdout, '(5x, a, i3, a, f8.4, a, a, i3, a, f10.6, a, a, f10.6, a)') &
'temp(', itemp, ') = ', estemp(itemp) / kelvin2eV, ' K ', & 'temp(', itemp, ') = ', gtemp(itemp) / kelvin2eV, ' K ', &
' gap_edge(', itemp, ') = ', gap(itemp), ' eV ', & ' gap_edge(', itemp, ') = ', gap(itemp), ' eV ', &
' Re[delta(1)] = ', REAL(delta(1)), ' eV ' ' Re[delta(1)] = ', REAL(delta(1)), ' eV '
WRITE(stdout, '(a)') ' ' WRITE(stdout, '(a)') ' '
@ -975,7 +980,8 @@
USE io_files, ONLY : prefix USE io_files, ONLY : prefix
USE epwcom, ONLY : nswfc, nqstep, nsiter, muc, conv_thr_raxis, & USE epwcom, ONLY : nswfc, nqstep, nsiter, muc, conv_thr_raxis, &
kerwrite, kerread, nstemp kerwrite, kerread, nstemp
USE eliashbergcom, ONLY : nsw, estemp, ws, dws, gap0, gap, bewph, fdwp, & USE elph2, ONLY : gtemp
USE eliashbergcom, ONLY : nsw, ws, dws, gap0, gap, bewph, fdwp, &
kp, km, delta, deltap, znorm, wsph kp, km, delta, deltap, znorm, wsph
USE constants_epw, ONLY : kelvin2eV, ci, eps6, zero, czero USE constants_epw, ONLY : kelvin2eV, ci, eps6, zero, czero
USE io_eliashberg, ONLY : eliashberg_write_raxis USE io_eliashberg, ONLY : eliashberg_write_raxis
@ -1057,8 +1063,8 @@
! Fermi Dirac distribution ! Fermi Dirac distribution
fdwp(iw) = zero fdwp(iw) = zero
DO iw = 1, nsw DO iw = 1, nsw
IF (ABS(estemp(itemp)) > eps6) THEN IF (ABS(gtemp(itemp)) > eps6) THEN
fdwp(iw) = wgauss(-ws(iw) / estemp(itemp), -99) fdwp(iw) = wgauss(-ws(iw) / gtemp(itemp), -99)
ENDIF ENDIF
ENDDO ENDDO
! !
@ -1068,8 +1074,8 @@
IF (ierr /= 0) CALL errore('integrate_eliashberg_iso_raxis', 'Error allocating bewph', 1) IF (ierr /= 0) CALL errore('integrate_eliashberg_iso_raxis', 'Error allocating bewph', 1)
bewph(:) = zero bewph(:) = zero
DO iwph = 1, nqstep ! loop over omega (integration variable) DO iwph = 1, nqstep ! loop over omega (integration variable)
IF (ABS(estemp(itemp)) > eps6) THEN IF (ABS(gtemp(itemp)) > eps6) THEN
bewph(iwph) = wgauss(-wsph(iwph) / estemp(itemp), -99) bewph(iwph) = wgauss(-wsph(iwph) / gtemp(itemp), -99)
bewph(iwph) = bewph(iwph) / (1.d0 - 2.d0 * bewph(iwph)) bewph(iwph) = bewph(iwph) / (1.d0 - 2.d0 * bewph(iwph))
ENDIF ENDIF
ENDDO ENDDO
@ -1078,7 +1084,7 @@
delta(:) = czero delta(:) = czero
znorm(:) = czero znorm(:) = czero
! !
temp = estemp(itemp) / kelvin2eV temp = gtemp(itemp) / kelvin2eV
IF (temp < 10.d0) THEN IF (temp < 10.d0) THEN
WRITE(name1, '(a, a7, f4.2)') TRIM(prefix), '.ker_00', temp WRITE(name1, '(a, a7, f4.2)') TRIM(prefix), '.ker_00', temp
ELSEIF (temp >= 10.d0) THEN ELSEIF (temp >= 10.d0) THEN

View File

@ -32,7 +32,7 @@
USE pwcom, ONLY : ef USE pwcom, ONLY : ef
USE elph2, ONLY : ibndmin, etf, nkqf, nkf, dmef, vmef, wf, wqf, & USE elph2, ONLY : ibndmin, etf, nkqf, nkf, dmef, vmef, wf, wqf, &
epf17, nkqtotf, inv_tau_all, inv_tau_allcb, & epf17, nkqtotf, inv_tau_all, inv_tau_allcb, &
xqf, zi_allvb, zi_allcb, nbndfst, nktotf, transp_temp, & xqf, zi_allvb, zi_allcb, nbndfst, nktotf, gtemp, &
lower_bnd lower_bnd
USE constants_epw, ONLY : zero, one, two, ryd2mev, kelvin2eV, ryd2ev, & USE constants_epw, ONLY : zero, one, two, ryd2mev, kelvin2eV, ryd2ev, &
eps6, eps8, eps4 eps6, eps8, eps4
@ -165,7 +165,7 @@
! loop over temperatures ! loop over temperatures
DO itemp = 1, nstemp DO itemp = 1, nstemp
! !
etemp = transp_temp(itemp) etemp = gtemp(itemp)
! !
! SP: Define the inverse so that we can efficiently multiply instead of dividing ! SP: Define the inverse so that we can efficiently multiply instead of dividing
! !
@ -427,7 +427,7 @@
! !
DO itemp = 1, nstemp DO itemp = 1, nstemp
! !
etemp = transp_temp(itemp) etemp = gtemp(itemp)
WRITE(stdout, '(a,f8.3,a)' ) ' Temperature ', etemp * ryd2ev / kelvin2eV, ' K' WRITE(stdout, '(a,f8.3,a)' ) ' Temperature ', etemp * ryd2ev / kelvin2eV, ' K'
! !
! In case we read another q-file, merge the scattering here ! In case we read another q-file, merge the scattering here
@ -573,7 +573,7 @@
int_mob, ncarrier, scatread, iterative_bte, vme, assume_metal int_mob, ncarrier, scatread, iterative_bte, vme, assume_metal
USE pwcom, ONLY : ef USE pwcom, ONLY : ef
USE elph2, ONLY : ibndmin, etf, nkf, wkf, dmef, vmef, & USE elph2, ONLY : ibndmin, etf, nkf, wkf, dmef, vmef, &
inv_tau_all, nkqtotf, inv_tau_allcb, transp_temp, & inv_tau_all, nkqtotf, inv_tau_allcb, gtemp, &
zi_allvb, zi_allcb, map_rebal, nbndfst, nktotf zi_allvb, zi_allcb, map_rebal, nbndfst, nktotf
USE constants_epw, ONLY : zero, one, bohr2ang, ryd2ev, & USE constants_epw, ONLY : zero, one, bohr2ang, ryd2ev, &
kelvin2eV, hbar, Ang2m, hbarJ, ang2cm, czero kelvin2eV, hbar, Ang2m, hbarJ, ang2cm, czero
@ -722,7 +722,7 @@
! Compute the Fermi level ! Compute the Fermi level
DO itemp = 1, nstemp DO itemp = 1, nstemp
! !
etemp = transp_temp(itemp) etemp = gtemp(itemp)
! !
! Lets gather the velocities from all pools ! Lets gather the velocities from all pools
#if defined(__MPI) #if defined(__MPI)
@ -958,7 +958,7 @@
! !
DO itemp = 1, nstemp DO itemp = 1, nstemp
! !
etemp = transp_temp(itemp) etemp = gtemp(itemp)
! !
IF (itemp == 1) THEN IF (itemp == 1) THEN
! !
@ -1093,7 +1093,7 @@
WRITE(stdout, '(5x,a/)') REPEAT('=',67) WRITE(stdout, '(5x,a/)') REPEAT('=',67)
! !
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
! sigma in units of 1/(a.u.) is converted to 1/(Ohm * m) ! sigma in units of 1/(a.u.) is converted to 1/(Ohm * m)
IF (mpime == meta_ionode_id) THEN IF (mpime == meta_ionode_id) THEN
WRITE(iufilsigma, '(11E16.8)') ef0(itemp) * ryd2ev, etemp * ryd2ev / kelvin2eV, & WRITE(iufilsigma, '(11E16.8)') ef0(itemp) * ryd2ev, etemp * ryd2ev / kelvin2eV, &
@ -1183,7 +1183,7 @@
! !
IF (int_mob .OR. (ncarrier > 1E5)) THEN IF (int_mob .OR. (ncarrier > 1E5)) THEN
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
IF (itemp == 1) THEN IF (itemp == 1) THEN
tdf_sigma(:) = zero tdf_sigma(:) = zero
sigma(:, :) = zero sigma(:, :) = zero
@ -1373,7 +1373,7 @@
WRITE(stdout, '(5x,"Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]")') WRITE(stdout, '(5x,"Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]")')
WRITE(stdout, '(5x,a/)') REPEAT('=',67) WRITE(stdout, '(5x,a/)') REPEAT('=',67)
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
IF (mpime == meta_ionode_id) THEN IF (mpime == meta_ionode_id) THEN
! sigma in units of 1/(a.u.) is converted to 1/(Ohm * m) ! sigma in units of 1/(a.u.) is converted to 1/(Ohm * m)
IF (ABS(efcb(itemp)) < eps4) THEN IF (ABS(efcb(itemp)) < eps4) THEN

View File

@ -32,7 +32,7 @@
USE epwcom, ONLY : mob_maxiter, nstemp, broyden_beta, & USE epwcom, ONLY : mob_maxiter, nstemp, broyden_beta, &
mp_mesh_k, nkf1, nkf2, nkf3 mp_mesh_k, nkf1, nkf2, nkf3
USE elph2, ONLY : nkqf, wkf, xkf, nkqtotf, nbndfst, & USE elph2, ONLY : nkqf, wkf, xkf, nkqtotf, nbndfst, &
nktotf, map_rebal, xqf, transp_temp, & nktotf, map_rebal, xqf, gtemp, &
ixkqf_tr, s_bztoibz_full ixkqf_tr, s_bztoibz_full
USE constants_epw, ONLY : zero, one, two, pi, kelvin2eV, ryd2ev, eps10, & USE constants_epw, ONLY : zero, one, two, pi, kelvin2eV, ryd2ev, eps10, &
bohr2ang, ang2cm, hbarJ, eps6, eps8, & bohr2ang, ang2cm, hbarJ, eps6, eps8, &
@ -224,7 +224,7 @@
WRITE(stdout, *) 'temp k-index ibnd k-point eig[Ry] F_SERTA ' WRITE(stdout, *) 'temp k-index ibnd k-point eig[Ry] F_SERTA '
ENDIF ENDIF
DO itemp = 1, nstemp DO itemp = 1, nstemp
etemp = transp_temp(itemp) etemp = gtemp(itemp)
DO ik = 1, nktotf DO ik = 1, nktotf
DO ibnd = 1, nbndfst DO ibnd = 1, nbndfst
IF (ABS(inv_tau(ibnd, ik, itemp)) > eps160) THEN IF (ABS(inv_tau(ibnd, ik, itemp)) > eps160) THEN

View File

@ -32,7 +32,7 @@
parallel_q = .false. parallel_q = .false.
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -31,7 +31,7 @@
a2f = .false. a2f = .false.
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -32,7 +32,7 @@
a2f = .false. a2f = .false.
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -36,7 +36,7 @@
a2f = .false. a2f = .false.
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -32,7 +32,7 @@
a2f = .false. a2f = .false.
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -37,7 +37,7 @@
nw_specfun = 20 nw_specfun = 20
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -33,7 +33,7 @@
a2f = .false. a2f = .false.
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -31,7 +31,7 @@
a2f = .false. a2f = .false.
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -37,7 +37,7 @@
nw_specfun = 20 nw_specfun = 20
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K temps = 300 ! K
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -35,7 +35,7 @@
a2f = .false. a2f = .false.
fsthick = 1.5 ! eV fsthick = 1.5 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 0.3 ! eV degaussw = 0.3 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -35,7 +35,7 @@
a2f = .false. a2f = .false.
fsthick = 1.5 ! eV fsthick = 1.5 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 0.3 ! eV degaussw = 0.3 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -39,7 +39,7 @@
bnd_cum = 4 bnd_cum = 4
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 300 ! K (same as PRB 76, 165108) temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -43,7 +43,7 @@
a2f = .true. a2f = .true.
fsthick = 6 ! eV fsthick = 6 ! eV
eptemp = 300 ! K temps = 300 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
degaussq = 0.05 ! meV degaussq = 0.05 ! meV
assume_metal = .TRUE. assume_metal = .TRUE.

View File

@ -46,7 +46,7 @@
asr_typ = 'crystal' asr_typ = 'crystal'
fsthick = 6 ! eV fsthick = 6 ! eV
eptemp = 300 ! K temps = 300 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
degaussq = 0.05 ! meV degaussq = 0.05 ! meV
assume_metal = .TRUE. assume_metal = .TRUE.

View File

@ -43,7 +43,6 @@
asr_typ = 'crystal' asr_typ = 'crystal'
fsthick = 1 ! eV fsthick = 1 ! eV
eptemp = 1 ! K
degaussw = 0.0 ! eV (adaptative smearing) degaussw = 0.0 ! eV (adaptative smearing)
degaussq = 0.05 ! meV degaussq = 0.05 ! meV
assume_metal = .true. assume_metal = .true.
@ -61,8 +60,7 @@
restart_step = 50 restart_step = 50
selecqread = .false. selecqread = .false.
nstemp = 2 nstemp = 2
tempsmin = 100 temps = 100 300
tempsmax = 300
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -43,7 +43,6 @@
asr_typ = 'crystal' asr_typ = 'crystal'
fsthick = 1 ! eV fsthick = 1 ! eV
eptemp = 1 ! K
degaussw = 0.0 ! eV (adaptative smearing) degaussw = 0.0 ! eV (adaptative smearing)
degaussq = 0.05 ! meV degaussq = 0.05 ! meV
assume_metal = .true. assume_metal = .true.
@ -61,8 +60,7 @@
restart_step = 50 restart_step = 50
selecqread = .true. selecqread = .true.
nstemp = 2 nstemp = 2
tempsmin = 100 temps = 100 300
tempsmax = 300
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -45,7 +45,7 @@
a2f = .false. a2f = .false.
fsthick = 1.2 ! eV fsthick = 1.2 ! eV
eptemp = 1 ! K temps = 1 ! K
degaussw = 0.01 ! eV degaussw = 0.01 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -21,8 +21,7 @@
scissor = 0.7 scissor = 0.7
nstemp = 5 nstemp = 5
tempsmin = 300 temps = 300 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 1000 restart_step = 1000
@ -61,7 +60,6 @@
a2f = .false. a2f = .false.
fsthick = 2.0 ! eV fsthick = 2.0 ! eV
eptemp = 1 ! K
degaussw = 0.05 ! eV degaussw = 0.05 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -1,4 +1,4 @@
-- -
&inputepw &inputepw
prefix = 'si' prefix = 'si'
amass(1) = 28.0855 amass(1) = 28.0855
@ -21,8 +21,7 @@
scissor = 0.7 scissor = 0.7
nstemp = 5 nstemp = 5
tempsmin = 300 temps = 300 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 1000 restart_step = 1000
@ -61,7 +60,6 @@
a2f = .false. a2f = .false.
fsthick = 2.0 ! eV fsthick = 2.0 ! eV
eptemp = 1 ! K
degaussw = 0.05 ! eV degaussw = 0.05 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -56,7 +56,7 @@
a2f = .false. a2f = .false.
fsthick = 4.0 ! eV fsthick = 4.0 ! eV
eptemp = 300 ! K temps = 300 ! K
degaussw = 0.5 ! eV degaussw = 0.5 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -45,7 +45,7 @@
a2f = .false. a2f = .false.
fsthick = 2.0 ! eV fsthick = 2.0 ! eV
eptemp = 1 ! K temps = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -28,8 +28,8 @@
scissor = 0.7 scissor = 0.7
nstemp = 2 nstemp = 2
tempsmin = 400 temps = 400 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 50 restart_step = 50
@ -68,7 +68,6 @@
a2f = .false. a2f = .false.
fsthick = 4.0 fsthick = 4.0
eptemp = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -28,8 +28,7 @@
scissor = 0.7 scissor = 0.7
nstemp = 2 nstemp = 2
tempsmin = 400 temps = 400 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 50 restart_step = 50
@ -68,7 +67,6 @@
a2f = .false. a2f = .false.
fsthick = 4.0 fsthick = 4.0
eptemp = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -45,7 +45,7 @@
a2f = .false. a2f = .false.
fsthick = 2.0 ! eV fsthick = 2.0 ! eV
eptemp = 1 ! K temps = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -28,8 +28,7 @@
scissor = 0.7 scissor = 0.7
nstemp = 2 nstemp = 2
tempsmin = 400 temps = 400 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 50 restart_step = 50
@ -68,7 +67,6 @@
a2f = .false. a2f = .false.
fsthick = 4.0 fsthick = 4.0
eptemp = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -28,8 +28,7 @@
scissor = 0.7 scissor = 0.7
nstemp = 2 nstemp = 2
tempsmin = 400 temps = 400 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 50 restart_step = 50
@ -65,7 +64,6 @@
a2f = .false. a2f = .false.
fsthick = 4.0 fsthick = 4.0
eptemp = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -45,7 +45,7 @@
a2f = .false. a2f = .false.
fsthick = 2.0 ! eV fsthick = 2.0 ! eV
eptemp = 1 ! K temps = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -26,8 +26,7 @@
scissor = 0.7 scissor = 0.7
nstemp = 2 nstemp = 2
tempsmin = 400 temps = 400 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 50 restart_step = 50
@ -65,7 +64,6 @@
a2f = .false. a2f = .false.
fsthick = 4.0 fsthick = 4.0
eptemp = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -26,8 +26,7 @@
scissor = 0.7 scissor = 0.7
nstemp = 2 nstemp = 2
tempsmin = 400 temps = 400 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 50 restart_step = 50
@ -65,7 +64,6 @@
a2f = .false. a2f = .false.
fsthick = 0.5 fsthick = 0.5
eptemp = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -26,8 +26,7 @@
scissor = 0.7 scissor = 0.7
nstemp = 2 nstemp = 2
tempsmin = 400 temps = 400 500
tempsmax = 500
restart = .true. restart = .true.
restart_step = 50 restart_step = 50
@ -65,7 +64,6 @@
a2f = .false. a2f = .false.
fsthick = 0.5 fsthick = 0.5
eptemp = 1 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -26,8 +26,7 @@
broyden_beta= 0.7 broyden_beta= 0.7
nstemp = 1 nstemp = 1
tempsmin = 100 temps = 100
tempsmax = 200
restart = .true. restart = .true.
restart_step = 5 restart_step = 5
@ -64,7 +63,6 @@
a2f = .false. a2f = .false.
fsthick = 0.4 fsthick = 0.4
eptemp = 1 ! K
degaussw = 0.0 ! eV degaussw = 0.0 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -53,7 +53,7 @@
a2f = .false. a2f = .false.
fsthick = 100.0 ! eV fsthick = 100.0 ! eV
eptemp = 1 ! K temps = 1 ! K
degaussw = 0.01 ! eV degaussw = 0.01 ! eV
dvscf_dir = './save/' dvscf_dir = './save/'

View File

@ -29,8 +29,7 @@
epmatkqread = .false. epmatkqread = .false.
nstemp = 2 nstemp = 2
tempsmin = 100 temps = 100 300
tempsmax = 300
lpolar = .true. lpolar = .true.
etf_mem = 1 etf_mem = 1

View File

@ -25,8 +25,7 @@
broyden_beta= 1.0 broyden_beta= 1.0
nstemp = 2 nstemp = 2
tempsmin = 100 temps = 100 300
tempsmax = 300
restart = .true. restart = .true.
restart_step = 50 restart_step = 50

File diff suppressed because it is too large Load Diff

View File

@ -45,7 +45,7 @@
band_plot = .true. band_plot = .true.
fsthick = 3.0 fsthick = 3.0
eptemp = 20.0 temps = 20.0
degaussw = 0.01 degaussw = 0.01
specfun_pl = .true. specfun_pl = .true.

View File

@ -41,7 +41,7 @@
a2f = .false. a2f = .false.
fsthick = 2.0 ! eV fsthick = 2.0 ! eV
eptemp = 300 ! K temps = 300 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -41,7 +41,7 @@
a2f = .false. a2f = .false.
fsthick = 2.0 ! eV fsthick = 2.0 ! eV
eptemp = 300 ! K temps = 300 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -48,7 +48,7 @@
a2f = .false. a2f = .false.
fsthick = 2.0 ! eV fsthick = 2.0 ! eV
eptemp = 300 ! K temps = 300 ! K
degaussw = 0.1 ! eV degaussw = 0.1 ! eV
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -44,7 +44,7 @@
a2f = .true. a2f = .true.
fsthick = 20 ! eV fsthick = 20 ! eV
eptemp = 500 ! K temps = 500 ! K
degaussw = 0.2 ! eV degaussw = 0.2 ! eV
degaussq = 0.1 ! meV degaussq = 0.1 ! meV

View File

@ -47,7 +47,7 @@
a2f = .true. a2f = .true.
fsthick = 20 ! eV fsthick = 20 ! eV
eptemp = 500 ! K temps = 500 ! K
degaussw = 0.2 ! eV degaussw = 0.2 ! eV
degaussq = 0.1 ! meV degaussq = 0.1 ! meV

View File

@ -27,7 +27,7 @@
Comput. Phys. Commun. 209, 116 (2016) Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.2.0 starts on 1Jul2020 at 11:12: 9 Program EPW v.5.2.0 starts on 15Jul2020 at 10:37:19
This program is part of the open-source Quantum ESPRESSO suite This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite for quantum simulation of materials; please cite
@ -43,6 +43,8 @@
K-points division: npool = 4 K-points division: npool = 4
Fft bands division: nmany = 1 Fft bands division: nmany = 1
Reading supplied temperature list.
Reading xml data from directory: Reading xml data from directory:
./MgB2.save/ ./MgB2.save/
@ -149,7 +151,7 @@
l(1) = 0 l(1) = 0
EPW : 0.10s CPU 0.12s WALL EPW : 0.10s CPU 0.12s WALL
EPW : 0.12s CPU 0.14s WALL EPW : 0.13s CPU 0.15s WALL
------------------------------------------------------------------- -------------------------------------------------------------------
Wannierization on 3 x 3 x 3 electronic grid Wannierization on 3 x 3 x 3 electronic grid
@ -212,7 +214,7 @@
( 0.25000 0.43301 0.66488) : 1.07400 ( 0.25000 0.43301 0.66488) : 1.07400
------------------------------------------------------------------- -------------------------------------------------------------------
WANNIER : 1.14s CPU 1.22s WALL ( 1 calls) WANNIER : 1.54s CPU 1.62s WALL ( 1 calls)
------------------------------------------------------------------- -------------------------------------------------------------------
Dipole matrix elements calculated Dipole matrix elements calculated
@ -221,7 +223,7 @@
Calculating kgmap Calculating kgmap
Progress kgmap: ######################################## Progress kgmap: ########################################
kmaps : 0.02s CPU 0.06s WALL ( 1 calls) kmaps : 0.02s CPU 0.05s WALL ( 1 calls)
Symmetries of Bravais lattice: 24 Symmetries of Bravais lattice: 24
Symmetries of crystal: 24 Symmetries of crystal: 24
@ -393,8 +395,8 @@
Writing Hamiltonian, Dynamical matrix and EP vertex in Wann rep to file Writing Hamiltonian, Dynamical matrix and EP vertex in Wann rep to file
=================================================================== ===================================================================
Memory usage: VmHWM = 88Mb Memory usage: VmHWM = 44Mb
VmPeak = 690Mb VmPeak = 618Mb
=================================================================== ===================================================================
Using uniform q-mesh: 6 6 6 Using uniform q-mesh: 6 6 6
@ -431,16 +433,16 @@
Progression iq (fine) = 100/ 216 Progression iq (fine) = 100/ 216
Progression iq (fine) = 200/ 216 Progression iq (fine) = 200/ 216
Fermi level (eV) = 0.766447471440237D+01 Fermi level (eV) = 0.766447471508788D+01
DOS(states/spin/eV/Unit Cell) = 0.913085695277060D+00 DOS(states/spin/eV/Unit Cell) = 0.913085693176451D+00
Electron smearing (eV) = 0.100000000000000D+00 Electron smearing (eV) = 0.100000000000000D+00
Fermi window (eV) = 0.200000000000000D+02 Fermi window (eV) = 0.200000000000000D+02
Finish writing .ephmat files Finish writing .ephmat files
=================================================================== ===================================================================
Memory usage: VmHWM = 88Mb Memory usage: VmHWM = 44Mb
VmPeak = 690Mb VmPeak = 618Mb
=================================================================== ===================================================================
@ -451,8 +453,8 @@
Finish reading freq file Finish reading freq file
Fermi level (eV) = 7.6644747144E+00 Fermi level (eV) = 7.6644747151E+00
DOS(states/spin/eV/Unit Cell) = 9.1308569528E-01 DOS(states/spin/eV/Unit Cell) = 9.1308569318E-01
Electron smearing (eV) = 1.0000000000E-01 Electron smearing (eV) = 1.0000000000E-01
Fermi window (eV) = 2.0000000000E+01 Fermi window (eV) = 2.0000000000E+01
Nr irreducible k-points within the Fermi shell = 28 out of 28 Nr irreducible k-points within the Fermi shell = 28 out of 28
@ -474,14 +476,14 @@
Finish reading .ephmat files Finish reading .ephmat files
lambda_max = 126.3925342 lambda_k_max = 3.2058369 lambda_max = 126.3963398 lambda_k_max = 3.2058367
Finish reading a2f file Finish reading a2f file
Electron-phonon coupling strength = 0.8715332 Electron-phonon coupling strength = 0.8715331
Estimated Allen-Dynes Tc = 26.410311 K for muc = 0.16000 Estimated Allen-Dynes Tc = 26.410306 K for muc = 0.16000
Estimated BCS superconducting gap = 0.004006 eV Estimated BCS superconducting gap = 0.004006 eV
@ -494,12 +496,12 @@
Cutoff frequency wscut = 0.5076 Cutoff frequency wscut = 0.5076
iter ethr znormi [eV] deltai [eV] iter ethr znormi [eV] deltai [eV]
1 2.532354E+00 1.842516E+00 4.449680E-03 1 2.532354E+00 1.842516E+00 4.449679E-03
2 7.635767E-02 1.841969E+00 4.682792E-03 2 7.635767E-02 1.841969E+00 4.682791E-03
3 4.520722E-02 1.840749E+00 4.928651E-03 3 4.520722E-02 1.840749E+00 4.928650E-03
4 3.432847E-02 1.839600E+00 5.113775E-03 4 3.432847E-02 1.839600E+00 5.113774E-03
5 7.511482E-02 1.837146E+00 5.503711E-03 5 7.511483E-02 1.837146E+00 5.503710E-03
6 1.990148E-03 1.837113E+00 5.510305E-03 6 1.990152E-03 1.837113E+00 5.510304E-03
Convergence was reached in nsiter = 6 Convergence was reached in nsiter = 6
iaxis_imag : 0.00s CPU 0.01s WALL ( 1 calls) iaxis_imag : 0.00s CPU 0.01s WALL ( 1 calls)
@ -509,10 +511,10 @@
Cutoff frequency wscut = 0.5000 Cutoff frequency wscut = 0.5000
pade Re[znorm] [eV] Re[delta] [eV] pade Re[znorm] [eV] Re[delta] [eV]
56 1.839946E+00 5.526960E-03 56 1.838340E+00 5.526959E-03
Convergence was reached for N = 56 Pade approximants Convergence was reached for N = 56 Pade approximants
raxis_pade : 0.01s CPU 0.03s WALL ( 1 calls) raxis_pade : 0.01s CPU 0.04s WALL ( 1 calls)
Analytic continuation of isotropic Eliashberg equations from imaginary-axis to real-axis Analytic continuation of isotropic Eliashberg equations from imaginary-axis to real-axis
@ -521,44 +523,44 @@
Cutoff frequency wscut = 0.5000 Cutoff frequency wscut = 0.5000
iter ethr Re[znorm] [eV] Re[delta] [eV] iter ethr Re[znorm] [eV] Re[delta] [eV]
1 1.397095E-01 1.838880E+00 5.530900E-03 1 1.657058E-01 1.838880E+00 5.530899E-03
2 2.413655E-02 1.838880E+00 5.530900E-03 2 2.794971E-02 1.838880E+00 5.530899E-03
3 1.306278E-02 1.838880E+00 5.530900E-03 3 1.383756E-02 1.838880E+00 5.530899E-03
4 3.909383E-03 1.838880E+00 5.530900E-03 4 3.575528E-03 1.838880E+00 5.530899E-03
Convergence was reached in nsiter = 4 Convergence was reached in nsiter = 4
raxis_acon : 1.34s CPU 1.36s WALL ( 1 calls) raxis_acon : 1.29s CPU 1.32s WALL ( 1 calls)
itemp = 1 total cpu time : 1.4 secs itemp = 1 total cpu time : 1.4 secs
Unfolding on the coarse grid Unfolding on the coarse grid
elphon_wrap : 11.74s CPU 13.22s WALL ( 1 calls) elphon_wrap : 13.53s CPU 15.05s WALL ( 1 calls)
INITIALIZATION: INITIALIZATION:
set_drhoc : 0.19s CPU 0.19s WALL ( 28 calls) set_drhoc : 0.36s CPU 0.36s WALL ( 28 calls)
init_vloc : 0.00s CPU 0.00s WALL ( 1 calls) init_vloc : 0.00s CPU 0.00s WALL ( 1 calls)
init_us_1 : 0.01s CPU 0.01s WALL ( 2 calls) init_us_1 : 0.01s CPU 0.01s WALL ( 2 calls)
Electron-Phonon interpolation Electron-Phonon interpolation
ephwann : 2.98s CPU 4.69s WALL ( 1 calls) ephwann : 1.59s CPU 3.57s WALL ( 1 calls)
ep-interp : 2.82s CPU 4.46s WALL ( 216 calls) ep-interp : 1.46s CPU 3.39s WALL ( 216 calls)
Ham: step 1 : 0.00s CPU 0.00s WALL ( 1 calls) Ham: step 1 : 0.00s CPU 0.00s WALL ( 1 calls)
Ham: step 2 : 0.00s CPU 0.00s WALL ( 1 calls) Ham: step 2 : 0.00s CPU 0.00s WALL ( 1 calls)
ep: step 1 : 0.00s CPU 0.00s WALL ( 243 calls) ep: step 1 : 0.00s CPU 0.00s WALL ( 243 calls)
ep: step 2 : 48.44s CPU 50.28s WALL ( 1 calls) ep: step 2 : 64.23s CPU 66.42s WALL ( 1 calls)
DynW2B : 0.01s CPU 0.01s WALL ( 216 calls) DynW2B : 0.01s CPU 0.01s WALL ( 216 calls)
HamW2B : 0.04s CPU 0.04s WALL ( 3045 calls) HamW2B : 0.05s CPU 0.05s WALL ( 3045 calls)
ephW2Bp : 2.31s CPU 2.32s WALL ( 216 calls) ephW2Bp : 1.01s CPU 1.02s WALL ( 216 calls)
ephW2B : 0.03s CPU 0.03s WALL ( 1512 calls) ephW2B : 0.04s CPU 0.04s WALL ( 1512 calls)
ELIASHBERG : 45.54s CPU 45.69s WALL ( 1 calls) ELIASHBERG : 62.69s CPU 62.90s WALL ( 1 calls)
Total program execution Total program execution
EPW : 1m 1.52s CPU 1m 4.96s WALL EPW : 1m19.48s CPU 1m23.31s WALL
Please consider citing: Please consider citing:

View File

@ -27,7 +27,7 @@
Comput. Phys. Commun. 209, 116 (2016) Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.2.0 starts on 1Jul2020 at 11:13:15 Program EPW v.5.2.0 starts on 15Jul2020 at 10:38:43
This program is part of the open-source Quantum ESPRESSO suite This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite for quantum simulation of materials; please cite
@ -43,6 +43,8 @@
K-points division: npool = 4 K-points division: npool = 4
Fft bands division: nmany = 1 Fft bands division: nmany = 1
Reading supplied temperature list.
Reading xml data from directory: Reading xml data from directory:
./MgB2.save/ ./MgB2.save/
@ -147,9 +149,9 @@
Generated by new atomic code, or converted to UPF format Generated by new atomic code, or converted to UPF format
Using radial grid of 157 points, 1 beta functions with: Using radial grid of 157 points, 1 beta functions with:
l(1) = 0 l(1) = 0
EPW : 0.14s CPU 0.17s WALL EPW : 0.08s CPU 0.11s WALL
EPW : 0.15s CPU 0.19s WALL EPW : 0.12s CPU 0.14s WALL
------------------------------------------------------------------- -------------------------------------------------------------------
Wannierization on 3 x 3 x 3 electronic grid Wannierization on 3 x 3 x 3 electronic grid
@ -212,7 +214,7 @@
( 0.25000 0.43301 0.66488) : 1.07400 ( 0.25000 0.43301 0.66488) : 1.07400
------------------------------------------------------------------- -------------------------------------------------------------------
WANNIER : 1.11s CPU 1.18s WALL ( 1 calls) WANNIER : 1.54s CPU 1.62s WALL ( 1 calls)
------------------------------------------------------------------- -------------------------------------------------------------------
Dipole matrix elements calculated Dipole matrix elements calculated
@ -221,7 +223,7 @@
Calculating kgmap Calculating kgmap
Progress kgmap: ######################################## Progress kgmap: ########################################
kmaps : 0.03s CPU 0.06s WALL ( 1 calls) kmaps : 0.03s CPU 0.26s WALL ( 1 calls)
Symmetries of Bravais lattice: 24 Symmetries of Bravais lattice: 24
Symmetries of crystal: 24 Symmetries of crystal: 24
@ -389,12 +391,22 @@
Bloch2wane: 26 / 27 Bloch2wane: 26 / 27
Bloch2wane: 27 / 27 Bloch2wane: 27 / 27
Bloch2wanp: 1 / 10
Bloch2wanp: 2 / 10
Bloch2wanp: 3 / 10
Bloch2wanp: 4 / 10
Bloch2wanp: 5 / 10
Bloch2wanp: 6 / 10
Bloch2wanp: 7 / 10
Bloch2wanp: 8 / 10
Bloch2wanp: 9 / 10
Bloch2wanp: 10 / 10
Writing Hamiltonian, Dynamical matrix and EP vertex in Wann rep to file Writing Hamiltonian, Dynamical matrix and EP vertex in Wann rep to file
=================================================================== ===================================================================
Memory usage: VmHWM = 88Mb Memory usage: VmHWM = 40Mb
VmPeak = 691Mb VmPeak = 636Mb
=================================================================== ===================================================================
Using uniform q-mesh: 6 6 6 Using uniform q-mesh: 6 6 6
@ -424,8 +436,8 @@
All q-points are done, no need to restart !! All q-points are done, no need to restart !!
=================================================================== ===================================================================
Memory usage: VmHWM = 88Mb Memory usage: VmHWM = 40Mb
VmPeak = 691Mb VmPeak = 636Mb
=================================================================== ===================================================================
@ -436,8 +448,8 @@
Finish reading freq file Finish reading freq file
Fermi level (eV) = 7.6644747144E+00 Fermi level (eV) = 7.6644747151E+00
DOS(states/spin/eV/Unit Cell) = 9.1308569528E-01 DOS(states/spin/eV/Unit Cell) = 9.1308569318E-01
Electron smearing (eV) = 1.0000000000E-01 Electron smearing (eV) = 1.0000000000E-01
Fermi window (eV) = 2.0000000000E+01 Fermi window (eV) = 2.0000000000E+01
Nr irreducible k-points within the Fermi shell = 28 out of 28 Nr irreducible k-points within the Fermi shell = 28 out of 28
@ -459,11 +471,11 @@
Finish reading .ephmat files Finish reading .ephmat files
lambda_max = 126.3925342 lambda_k_max = 3.2058369 lambda_max = 126.3963398 lambda_k_max = 3.2058367
Electron-phonon coupling strength = 0.8715332 Electron-phonon coupling strength = 0.8715331
Estimated Allen-Dynes Tc = 26.410310 K for muc = 0.16000 Estimated Allen-Dynes Tc = 26.410306 K for muc = 0.16000
Estimated BCS superconducting gap = 0.004006 eV Estimated BCS superconducting gap = 0.004006 eV
@ -478,56 +490,56 @@
Size of allocated memory per pool: ~= 0.0379 Gb Size of allocated memory per pool: ~= 0.0379 Gb
iter ethr znormi [eV] deltai [eV] iter ethr znormi [eV] deltai [eV]
1 2.322910E+00 1.842480E+00 5.100456E-03 1 2.322910E+00 1.842480E+00 5.100455E-03
2 1.037702E-01 1.838418E+00 5.781253E-03 2 1.037702E-01 1.838418E+00 5.781252E-03
3 1.129234E-01 1.832844E+00 6.595684E-03 3 1.129234E-01 1.832844E+00 6.595683E-03
4 9.043058E-02 1.828321E+00 7.220061E-03 4 9.043058E-02 1.828321E+00 7.220060E-03
5 1.666690E-01 1.817858E+00 8.456634E-03 5 1.666691E-01 1.817858E+00 8.456633E-03
6 8.954464E-02 1.823347E+00 7.861750E-03 6 8.954472E-02 1.823346E+00 7.861748E-03
7 1.235697E-02 1.822681E+00 7.938656E-03 7 1.235698E-02 1.822681E+00 7.938655E-03
8 4.779288E-03 1.822416E+00 7.973884E-03 8 4.779268E-03 1.822416E+00 7.973883E-03
Convergence was reached in nsiter = 8 Convergence was reached in nsiter = 8
iaxis_imag : 23.55s CPU 23.63s WALL ( 1 calls) iaxis_imag : 25.22s CPU 25.24s WALL ( 1 calls)
Pade approximant of anisotropic Eliashberg equations from imaginary-axis to real-axis Pade approximant of anisotropic Eliashberg equations from imaginary-axis to real-axis
Cutoff frequency wscut = 0.5000 Cutoff frequency wscut = 0.5000
pade Re[znorm] [eV] Re[delta] [eV] pade Re[znorm] [eV] Re[delta] [eV]
56 1.677487E+00 7.373417E-03 56 1.677562E+00 7.373432E-03
Convergence was reached for N = 56 Pade approximants Convergence was reached for N = 56 Pade approximants
raxis_pade : 0.08s CPU 0.09s WALL ( 1 calls) raxis_pade : 0.10s CPU 0.11s WALL ( 1 calls)
itemp = 1 total cpu time : 23.73 secs itemp = 1 total cpu time : 25.35 secs
Unfolding on the coarse grid Unfolding on the coarse grid
elphon_wrap : 11.70s CPU 12.77s WALL ( 1 calls) elphon_wrap : 13.55s CPU 15.17s WALL ( 1 calls)
INITIALIZATION: INITIALIZATION:
set_drhoc : 0.19s CPU 0.20s WALL ( 28 calls) set_drhoc : 0.36s CPU 0.36s WALL ( 28 calls)
init_vloc : 0.00s CPU 0.00s WALL ( 1 calls) init_vloc : 0.00s CPU 0.00s WALL ( 1 calls)
init_us_1 : 0.01s CPU 0.01s WALL ( 2 calls) init_us_1 : 0.01s CPU 0.01s WALL ( 2 calls)
Electron-Phonon interpolation Electron-Phonon interpolation
ephwann : 0.15s CPU 0.21s WALL ( 1 calls) ephwann : 0.14s CPU 1.27s WALL ( 1 calls)
Ham: step 1 : 0.00s CPU 0.00s WALL ( 1 calls) Ham: step 1 : 0.00s CPU 0.00s WALL ( 1 calls)
Ham: step 2 : 0.02s CPU 0.02s WALL ( 1 calls) Ham: step 2 : 0.00s CPU 0.00s WALL ( 1 calls)
ep: step 1 : 0.00s CPU 0.00s WALL ( 243 calls) ep: step 1 : 0.00s CPU 0.00s WALL ( 243 calls)
ep: step 2 : 67.82s CPU 68.74s WALL ( 1 calls) ep: step 2 : 86.66s CPU 87.79s WALL ( 1 calls)
HamW2B : 0.00s CPU 0.00s WALL ( 21 calls) HamW2B : 0.00s CPU 0.00s WALL ( 21 calls)
ELIASHBERG : 67.74s CPU 68.60s WALL ( 1 calls) ELIASHBERG : 86.56s CPU 86.57s WALL ( 1 calls)
Total program execution Total program execution
EPW : 1m20.85s CPU 1m22.95s WALL EPW : 1m41.91s CPU 1m44.77s WALL
Please consider citing: Please consider citing:

View File

@ -27,7 +27,7 @@
Comput. Phys. Commun. 209, 116 (2016) Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.2.0 starts on 1Jul2020 at 11:14:40 Program EPW v.5.2.0 starts on 15Jul2020 at 10:40:28
This program is part of the open-source Quantum ESPRESSO suite This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite for quantum simulation of materials; please cite
@ -43,6 +43,8 @@
K-points division: npool = 4 K-points division: npool = 4
Fft bands division: nmany = 1 Fft bands division: nmany = 1
Reading supplied temperature list.
------------------------------------------------------------------------ ------------------------------------------------------------------------
RESTART - RESTART - RESTART - RESTART RESTART - RESTART - RESTART - RESTART
Restart is done without reading PWSCF save file. Restart is done without reading PWSCF save file.
@ -89,9 +91,9 @@
G cutoff = 0.0000 ( 0 G-vectors) FFT grid: ( 0, 0, 0) G cutoff = 0.0000 ( 0 G-vectors) FFT grid: ( 0, 0, 0)
number of k points= 0 number of k points= 0
cart. coord. in units 2pi/a_0 cart. coord. in units 2pi/a_0
EPW : 0.00s CPU 0.05s WALL EPW : 0.00s CPU 0.01s WALL
EPW : 0.00s CPU 0.05s WALL EPW : 0.00s CPU 0.01s WALL
------------------------------------------------------------------- -------------------------------------------------------------------
@ -116,8 +118,8 @@
Finished reading Wann rep data from file Finished reading Wann rep data from file
=================================================================== ===================================================================
Memory usage: VmHWM = 71Mb Memory usage: VmHWM = 21Mb
VmPeak = 667Mb VmPeak = 602Mb
=================================================================== ===================================================================
Using uniform q-mesh: 6 6 6 Using uniform q-mesh: 6 6 6
@ -147,8 +149,8 @@
All q-points are done, no need to restart !! All q-points are done, no need to restart !!
=================================================================== ===================================================================
Memory usage: VmHWM = 72Mb Memory usage: VmHWM = 23Mb
VmPeak = 667Mb VmPeak = 629Mb
=================================================================== ===================================================================
@ -159,8 +161,8 @@
Finish reading freq file Finish reading freq file
Fermi level (eV) = 7.6644747144E+00 Fermi level (eV) = 7.6644747151E+00
DOS(states/spin/eV/Unit Cell) = 9.1308569528E-01 DOS(states/spin/eV/Unit Cell) = 9.1308569318E-01
Electron smearing (eV) = 1.0000000000E-01 Electron smearing (eV) = 1.0000000000E-01
Fermi window (eV) = 2.0000000000E+01 Fermi window (eV) = 2.0000000000E+01
Nr irreducible k-points within the Fermi shell = 28 out of 28 Nr irreducible k-points within the Fermi shell = 28 out of 28
@ -182,11 +184,11 @@
Finish reading .ephmat files Finish reading .ephmat files
lambda_max = 126.3925342 lambda_k_max = 3.2058369 lambda_max = 126.3963398 lambda_k_max = 3.2058367
Electron-phonon coupling strength = 0.8715332 Electron-phonon coupling strength = 0.8715331
Estimated Allen-Dynes Tc = 26.410310 K for muc = 0.16000 Estimated Allen-Dynes Tc = 26.410306 K for muc = 0.16000
Estimated BCS superconducting gap = 0.004006 eV Estimated BCS superconducting gap = 0.004006 eV
@ -201,30 +203,30 @@
Size of allocated memory per pool: ~= 0.0357 Gb Size of allocated memory per pool: ~= 0.0357 Gb
iter ethr znormi [eV] deltai [eV] iter ethr znormi [eV] deltai [eV]
1 2.324585E+00 1.842446E+00 5.071400E-03 1 2.324585E+00 1.842446E+00 5.071399E-03
2 1.050021E-01 1.838424E+00 5.747030E-03 2 1.050021E-01 1.838424E+00 5.747029E-03
3 1.139816E-01 1.832860E+00 6.561657E-03 3 1.139816E-01 1.832860E+00 6.561656E-03
4 8.845982E-02 1.828464E+00 7.170242E-03 4 8.845982E-02 1.828464E+00 7.170240E-03
5 1.774058E-01 1.817191E+00 8.498221E-03 5 1.774059E-01 1.817191E+00 8.498220E-03
6 9.894098E-02 1.823272E+00 7.840917E-03 6 9.894108E-02 1.823272E+00 7.840916E-03
7 1.447663E-02 1.822481E+00 7.932340E-03 7 1.447665E-02 1.822481E+00 7.932339E-03
8 2.983707E-03 1.822322E+00 7.955351E-03 8 2.983689E-03 1.822322E+00 7.955349E-03
Convergence was reached in nsiter = 8 Convergence was reached in nsiter = 8
iaxis_imag : 20.51s CPU 20.58s WALL ( 1 calls) iaxis_imag : 22.41s CPU 22.46s WALL ( 1 calls)
Pade approximant of anisotropic Eliashberg equations from imaginary-axis to real-axis Pade approximant of anisotropic Eliashberg equations from imaginary-axis to real-axis
Cutoff frequency wscut = 0.5000 Cutoff frequency wscut = 0.5000
pade Re[znorm] [eV] Re[delta] [eV] pade Re[znorm] [eV] Re[delta] [eV]
52 1.678092E+00 7.358501E-03 52 1.678152E+00 7.358502E-03
Convergence was reached for N = 52 Pade approximants Convergence was reached for N = 52 Pade approximants
raxis_pade : 0.08s CPU 0.09s WALL ( 1 calls) raxis_pade : 0.09s CPU 0.10s WALL ( 1 calls)
itemp = 1 total cpu time : 20.67 secs itemp = 1 total cpu time : 22.57 secs
Unfolding on the coarse grid Unfolding on the coarse grid
@ -236,14 +238,14 @@
Electron-Phonon interpolation Electron-Phonon interpolation
ephwann : 0.07s CPU 0.08s WALL ( 1 calls) ephwann : 0.06s CPU 0.07s WALL ( 1 calls)
HamW2B : 0.00s CPU 0.00s WALL ( 21 calls) HamW2B : 0.00s CPU 0.00s WALL ( 21 calls)
ELIASHBERG : 64.43s CPU 64.56s WALL ( 1 calls) ELIASHBERG : 83.83s CPU 83.86s WALL ( 1 calls)
Total program execution Total program execution
EPW : 1m 4.50s CPU 1m 4.70s WALL EPW : 1m23.89s CPU 1m23.94s WALL
Please consider citing: Please consider citing:

View File

@ -27,7 +27,7 @@
Comput. Phys. Commun. 209, 116 (2016) Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.2.0 starts on 1Jul2020 at 11:15:45 Program EPW v.5.2.0 starts on 15Jul2020 at 10:41:53
This program is part of the open-source Quantum ESPRESSO suite This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite for quantum simulation of materials; please cite
@ -43,6 +43,8 @@
K-points division: npool = 4 K-points division: npool = 4
Fft bands division: nmany = 1 Fft bands division: nmany = 1
Reading supplied temperature list.
------------------------------------------------------------------------ ------------------------------------------------------------------------
RESTART - RESTART - RESTART - RESTART RESTART - RESTART - RESTART - RESTART
Restart is done without reading PWSCF save file. Restart is done without reading PWSCF save file.
@ -97,8 +99,8 @@
Finish reading freq file Finish reading freq file
Fermi level (eV) = 7.6644747144E+00 Fermi level (eV) = 7.6644747151E+00
DOS(states/spin/eV/Unit Cell) = 9.1308569528E-01 DOS(states/spin/eV/Unit Cell) = 9.1308569318E-01
Electron smearing (eV) = 1.0000000000E-01 Electron smearing (eV) = 1.0000000000E-01
Fermi window (eV) = 2.0000000000E+01 Fermi window (eV) = 2.0000000000E+01
Nr irreducible k-points within the Fermi shell = 28 out of 28 Nr irreducible k-points within the Fermi shell = 28 out of 28
@ -120,15 +122,19 @@
Finish reading .ephmat files Finish reading .ephmat files
lambda_max = 126.3925342 lambda_k_max = 3.2058369 lambda_max = 126.3963398 lambda_k_max = 3.2058367
Electron-phonon coupling strength = 0.8715332 Electron-phonon coupling strength = 0.8715331
Estimated Allen-Dynes Tc = 26.410310 K for muc = 0.16000 Estimated Allen-Dynes Tc = 26.410306 K for muc = 0.16000
Estimated BCS superconducting gap = 0.004006 eV Estimated BCS superconducting gap = 0.004006 eV
WARNING WARNING WARNING
The code may crash since tempsmax = 30.000 K is larger than Allen-Dynes Tc = 26.410 K
temp( 1) = 17.00000 K temp( 1) = 17.00000 K
Solve anisotropic Eliashberg equations on imaginary-axis Solve anisotropic Eliashberg equations on imaginary-axis
@ -139,30 +145,98 @@
Size of allocated memory per pool: ~= 0.0334 Gb Size of allocated memory per pool: ~= 0.0334 Gb
iter ethr znormi [eV] deltai [eV] iter ethr znormi [eV] deltai [eV]
1 2.319660E+00 1.842141E+00 5.045234E-03 1 2.319660E+00 1.842141E+00 5.045233E-03
2 1.046268E-01 1.838152E+00 5.713803E-03 2 1.046268E-01 1.838152E+00 5.713802E-03
3 1.138977E-01 1.832610E+00 6.525116E-03 3 1.138977E-01 1.832610E+00 6.525115E-03
4 8.885152E-02 1.828215E+00 7.134617E-03 4 8.885151E-02 1.828215E+00 7.134616E-03
5 1.922818E-01 1.815692E+00 8.594153E-03 5 1.922819E-01 1.815692E+00 8.594152E-03
6 1.168990E-01 1.822927E+00 7.817943E-03 6 1.168992E-01 1.822927E+00 7.817942E-03
7 1.390461E-02 1.822164E+00 7.905553E-03 7 1.390462E-02 1.822164E+00 7.905552E-03
8 1.784640E-03 1.822072E+00 7.920160E-03 8 1.784621E-03 1.822072E+00 7.920158E-03
Convergence was reached in nsiter = 8 Convergence was reached in nsiter = 8
iaxis_imag : 18.41s CPU 18.47s WALL ( 1 calls) iaxis_imag : 19.64s CPU 19.67s WALL ( 1 calls)
Pade approximant of anisotropic Eliashberg equations from imaginary-axis to real-axis Pade approximant of anisotropic Eliashberg equations from imaginary-axis to real-axis
Cutoff frequency wscut = 0.5000 Cutoff frequency wscut = 0.5000
pade Re[znorm] [eV] Re[delta] [eV] pade Re[znorm] [eV] Re[delta] [eV]
48 1.679657E+00 7.328199E-03 48 1.673551E+00 7.328298E-03
Convergence was reached for N = 48 Pade approximants Convergence was reached for N = 48 Pade approximants
raxis_pade : 0.08s CPU 0.09s WALL ( 1 calls) raxis_pade : 0.09s CPU 0.10s WALL ( 1 calls)
itemp = 1 total cpu time : 18.56 secs itemp = 1 total cpu time : 19.77 secs
temp( 2) = 20.00000 K
Solve anisotropic Eliashberg equations on imaginary-axis
Total number of frequency points nsiw( 2) = 46
Cutoff frequency wscut = 0.5035
Size of allocated memory per pool: ~= 0.0288 Gb
iter ethr znormi [eV] deltai [eV]
1 2.634223E+00 1.821334E+00 8.178218E-03
2 9.068172E-02 1.820045E+00 8.239481E-03
3 6.899058E-02 1.819340E+00 8.220390E-03
4 1.987348E-02 1.819781E+00 8.145507E-03
5 1.160557E-02 1.820480E+00 8.062323E-03
6 3.518963E-03 1.820678E+00 8.039078E-03
Convergence was reached in nsiter = 6
iaxis_imag : 30.74s CPU 30.79s WALL ( 2 calls)
Pade approximant of anisotropic Eliashberg equations from imaginary-axis to real-axis
Cutoff frequency wscut = 0.5000
pade Re[znorm] [eV] Re[delta] [eV]
42 1.676922E+00 7.446035E-03
Convergence was reached for N = 42 Pade approximants
raxis_pade : 0.17s CPU 0.20s WALL ( 2 calls)
itemp = 2 total cpu time : 30.99 secs
temp( 3) = 30.00000 K
Solve anisotropic Eliashberg equations on imaginary-axis
Total number of frequency points nsiw( 3) = 31
Cutoff frequency wscut = 0.5117
Size of allocated memory per pool: ~= 0.0203 Gb
iter ethr znormi [eV] deltai [eV]
1 2.691697E+00 1.821347E+00 8.042915E-03
2 9.841104E-02 1.820639E+00 8.036362E-03
3 8.046288E-02 1.820576E+00 7.940634E-03
4 2.992491E-02 1.821545E+00 7.800905E-03
5 2.602927E-02 1.823077E+00 7.617696E-03
6 6.406719E-03 1.823441E+00 7.574611E-03
Convergence was reached in nsiter = 6
iaxis_imag : 36.32s CPU 36.40s WALL ( 3 calls)
Pade approximant of anisotropic Eliashberg equations from imaginary-axis to real-axis
Cutoff frequency wscut = 0.5000
pade Re[znorm] [eV] Re[delta] [eV]
28 1.684948E+00 7.036544E-03
Convergence was reached for N = 28 Pade approximants
raxis_pade : 0.25s CPU 0.28s WALL ( 3 calls)
itemp = 3 total cpu time : 36.68 secs
Unfolding on the coarse grid Unfolding on the coarse grid
@ -175,10 +249,10 @@
Electron-Phonon interpolation Electron-Phonon interpolation
ELIASHBERG : 63.04s CPU 63.84s WALL ( 1 calls) ELIASHBERG : 97.74s CPU 97.83s WALL ( 1 calls)
Total program execution Total program execution
EPW : 1m 3.04s CPU 1m 3.85s WALL EPW : 1m37.74s CPU 1m37.84s WALL
Please consider citing: Please consider citing:

View File

@ -29,11 +29,9 @@
iverbosity = 0 iverbosity = 0
eps_acustic = 5.0 ! Lowest boundary for the ephwrite = .true. ! Writes .ephmat files used when Eliasberg = .true.
ephwrite = .true. ! Writes .ephmat files used when wliasberg = .true.
fsthick = 20.0 ! eV fsthick = 20.0 ! eV
eptemp = 300 ! K
degaussw = 0.10 ! eV degaussw = 0.10 ! eV
degaussq = 0.5 ! meV degaussq = 0.5 ! meV
nqstep = 500 nqstep = 500
@ -50,12 +48,10 @@
wscut = 0.5 ! eV Upper limit over frequency integration/summation in the Elisashberg eq wscut = 0.5 ! eV Upper limit over frequency integration/summation in the Elisashberg eq
nstemp = 1 nstemp = 1 ! Nr. of temps
tempsmin = 15.00 temps = 15.00 ! K provide list of temperetures OR (nstemp and temps = tempsmin tempsmax for even space mode)
tempsmax = 20.00
nsiter = 500 nsiter = 500
assume_metal = .TRUE.
muc = 0.16 muc = 0.16
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -13,7 +13,7 @@
epwwrite = .true. epwwrite = .true.
epwread = .false. epwread = .false.
etf_mem = 0 etf_mem = 1
vme = .false. vme = .false.
nbndsub = 5, nbndsub = 5,
@ -28,11 +28,9 @@
iverbosity = 0 iverbosity = 0
eps_acustic = 5.0 ! Lowest boundary for the ephwrite = .true. ! Writes .ephmat files used when Eliasberg = .true.
ephwrite = .true. ! Writes .ephmat files used when wliasberg = .true.
fsthick = 20.0 ! eV fsthick = 20.0 ! eV
eptemp = 300 ! K
degaussw = 0.10 ! eV degaussw = 0.10 ! eV
degaussq = 0.5 ! meV degaussq = 0.5 ! meV
nqstep = 500 nqstep = 500
@ -47,13 +45,11 @@
wscut = 0.5 ! eV Upper limit over frequency integration/summation in the Elisashberg eq wscut = 0.5 ! eV Upper limit over frequency integration/summation in the Elisashberg eq
nstemp = 1 nstemp = 1 ! Nr. of temps
tempsmin = 15.00 temps = 15.00 ! K provide list of temperetures OR (nstemp and temps = tempsmin tempsmax for even space mode)
tempsmax = 20.00
nsiter = 500 nsiter = 500
assume_metal = .TRUE. muc = 0.16
muc = 0.16
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -13,7 +13,7 @@
epwwrite = .false. epwwrite = .false.
epwread = .true. epwread = .true.
etf_mem = 0 etf_mem = 1
vme = .false. vme = .false.
nbndsub = 5, nbndsub = 5,
@ -28,11 +28,9 @@
iverbosity = 0 iverbosity = 0
eps_acustic = 5.0 ! Lowest boundary for the ephwrite = .true. ! Writes .ephmat files used when Eliasberg = .true.
ephwrite = .true. ! Writes .ephmat files used when wliasberg = .true.
fsthick = 20.0 ! eV fsthick = 20.0 ! eV
eptemp = 300 ! K
degaussw = 0.10 ! eV degaussw = 0.10 ! eV
degaussq = 0.5 ! meV degaussq = 0.5 ! meV
nqstep = 500 nqstep = 500
@ -47,12 +45,10 @@
wscut = 0.5 ! eV Upper limit over frequency integration/summation in the Elisashberg eq wscut = 0.5 ! eV Upper limit over frequency integration/summation in the Elisashberg eq
nstemp = 1 nstemp = 1 ! Nr. of temps
tempsmin = 16.00 temps = 16.00 ! K provide list of temperetures OR (nstemp and temps = tempsmin tempsmax for even space mode)
tempsmax = 20.00
nsiter = 500 nsiter = 500
assume_metal = .TRUE.
muc = 0.16 muc = 0.16
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -13,7 +13,7 @@
epwwrite = .false. epwwrite = .false.
epwread = .true. epwread = .true.
etf_mem = 0 etf_mem = 1
vme = .false. vme = .false.
nbndsub = 5, nbndsub = 5,
@ -29,10 +29,9 @@
iverbosity = 0 iverbosity = 0
eps_acustic = 5.0 ! Lowest boundary for the eps_acustic = 5.0 ! Lowest boundary for the
ephwrite = .false. ! Writes .ephmat files used when wliasberg = .true. ephwrite = .false. ! Writes .ephmat files used when Eliasberg = .true.
fsthick = 20.0 ! eV fsthick = 20.0 ! eV
eptemp = 300 ! K
degaussw = 0.10 ! eV degaussw = 0.10 ! eV
degaussq = 0.5 ! meV degaussq = 0.5 ! meV
nqstep = 500 nqstep = 500
@ -47,12 +46,10 @@
wscut = 0.5 ! eV Upper limit over frequency integration/summation in the Elisashberg eq wscut = 0.5 ! eV Upper limit over frequency integration/summation in the Elisashberg eq
nstemp = 1 ! nstemp = 1 ! Nr. of temps (not required for the list mode in this example)
tempsmin = 17.00 temps = 17 20 30 ! K provide list of temperetures OR (nstemp and temps = tempsmin tempsmax for even space mode)
tempsmax = 20.00
nsiter = 500 nsiter = 500
assume_metal = .TRUE.
muc = 0.16 muc = 0.16
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -30,7 +30,7 @@
a2f = .true. a2f = .true.
fsthick = 15 ! eV fsthick = 15 ! eV
eptemp = 2000 ! K temps = 2000 ! K
degaussw = 1.0 ! eV degaussw = 1.0 ! eV
dvscf_dir = './save' dvscf_dir = './save'

View File

@ -40,7 +40,7 @@
prtgkk = .true. prtgkk = .true.
fsthick = 7.0 fsthick = 7.0
eptemp = 20 temps = 20
degaussw = 0.05 degaussw = 0.05
filqf = 'pathq.dat' filqf = 'pathq.dat'

View File

@ -40,7 +40,7 @@
prtgkk = .true. prtgkk = .true.
fsthick = 7.0 fsthick = 7.0
eptemp = 20 temps = 20
degaussw = 0.05 degaussw = 0.05
filqf = 'pathq.dat' filqf = 'pathq.dat'