Cleaning and optimization in EPW

1) Complete re-writing of the IBTE (at least an order of magnitude faster).
2) Supporting both k-point symmetry and no-symmetry
3) Creating of a few new modules
4) Addition of a epw_mob_ibte_sym for testing the IBTE using k-point symmetry.
Both epw_mob_ibte_sym and epw_mob_ibte should give the same result but
epw_mob_ibte_sym is much faster.
This commit is contained in:
Samuel Ponce 2018-10-16 17:06:08 +01:00
parent b1f3181fb0
commit dd817a575a
61 changed files with 16686 additions and 4116 deletions

View File

@ -23,6 +23,7 @@ epwcom.o \
constants_epw.o \
io_epw.o \
elph2.o \
division.o \
eliashbergcom.o \
superconductivity.o \
superconductivity_aniso.o \
@ -30,6 +31,7 @@ superconductivity_iso.o \
io_eliashberg.o \
io_scattering.o \
transportcom.o \
close_epw.o \
printing.o \
transport.o \
transport_iter.o \
@ -39,9 +41,7 @@ allocate_epwq.o \
bcast_epw_input.o \
bloch2wan.o \
broyden.o \
close_epw.o \
createkmap.o \
deallocate_epw.o \
dvanqq2.o \
dvqpsi_us3.o \
dvqpsi_us_only3.o \
@ -60,7 +60,6 @@ gmap_sym.o \
indabs.o \
io_dyn_mat2.o \
kfold.o \
kpointdivision.o \
kpoint_grid_epw.o \
ktokpmq.o \
loadkmesh.o \
@ -72,6 +71,7 @@ openfilepw.o \
rgd_blk_epw_fine_mem.o \
plot_band.o \
poolgather.o \
print_ibte.o \
readdvscf.o \
readgmap.o \
readmat_shuffle2.o \

View File

@ -49,7 +49,7 @@
restart, restart_freq, prtgkk, nel, meff, epsiHEG, &
scatread, restart, restart_freq, restart_filq, &
lphase, omegamin, omegamax, omegastep, n_r, lindabs,&
mob_maxiter, use_ws
mob_maxiter, use_ws, epmatkqread, selecqread
USE elph2, ONLY : elph
USE mp, ONLY : mp_bcast
USE mp_world, ONLY : world_comm
@ -133,6 +133,8 @@
CALL mp_bcast (lphase , meta_ionode_id, world_comm)
CALL mp_bcast (lindabs , meta_ionode_id, world_comm)
CALL mp_bcast (use_ws , meta_ionode_id, world_comm)
CALL mp_bcast (epmatkqread , meta_ionode_id, world_comm)
CALL mp_bcast (selecqread , meta_ionode_id, world_comm)
!
! integers
!

View File

@ -1,17 +1,233 @@
!
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
! Copyright (C) 2010-2019 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
! Copyright (C) 2007-2009 Jesse Noffsinger, Brad Malone, Feliciano Giustino
!
! This file is distributed under the terms of the GNU General Public
! License. See the file `LICENSE' in the root directory of the
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
! Original code adapted from PH/close_phq - Quantum-ESPRESSO group
! 09/2009 This subroutine is functional and probably complete
! a few more files may be deleted to clean the working directory
!
!----------------------------------------------------------------------
MODULE close_epw
!----------------------------------------------------------------------
!!
!! This module contains routines related to deallocation and closing of files
!!
IMPLICIT NONE
!
CONTAINS
!
!
!----------------------------------------------------------------------------
SUBROUTINE iter_close
!----------------------------------------------------------------------------
!
! This subroutine opens all the files needed to save scattering rates for the IBTE.
!
USE kinds, ONLY : DP
USE io_files, ONLY : tmp_dir, prefix
USE io_epw, ONLY : iufilibtev_sup, iunepmat, iunsparseq, iunsparsek, &
iunsparsei, iunsparsej, iunsparset, iunsparseqcb, &
iunsparsekcb, iunrestart, iunsparseicb, iunsparsejcb,&
iunsparsetcb, iunepmatcb, iunepmatwp2
USE epwcom, ONLY : iterative_bte, mp_mesh_k, int_mob, carrier, etf_mem, &
epmatkqread
USE elph2, ONLY : inv_tau_all, zi_allvb, inv_tau_allcb, zi_allcb, &
map_rebal, map_rebal_inv
USE transportcom, ONLY : s_BZtoIBZ_full, ixkqf_tr
#if defined(__MPI)
USE parallel_include, ONLY : MPI_MODE_WRONLY, MPI_MODE_CREATE, MPI_INFO_NULL
#endif
!
IMPLICIT NONE
!
! Local variables
INTEGER :: ierr
!! Error status
!
DEALLOCATE (inv_tau_all)
DEALLOCATE (zi_allvb)
IF (mp_mesh_k .AND. iterative_bte .AND. epmatkqread) DEALLOCATE (s_BZtoIBZ_full)
IF (mp_mesh_k .AND. iterative_bte .AND. epmatkqread) DEALLOCATE (ixkqf_tr)
IF (int_mob .AND. carrier) DEALLOCATE (inv_tau_allcb)
IF (int_mob .AND. carrier) DEALLOCATE (zi_allcb)
!
#if defined(__MPI)
IF (etf_mem == 1) then
CALL MPI_FILE_CLOSE(iunepmatwp2,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1 )
ENDIF
!
IF (iterative_bte) THEN
CALL MPI_FILE_CLOSE(iunepmat,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparseq,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparsek,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparsei,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparsej,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparset,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunepmatcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparseqcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparsekcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparseicb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparsejcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
CALL MPI_FILE_CLOSE(iunsparsetcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_close', 'error in MPI_FILE_CLOSE',1)
ENDIF
#endif
!
!----------------------------------------------------------------------------
END SUBROUTINE iter_close
!----------------------------------------------------------------------------
!----------------------------------------------------------------------
SUBROUTINE deallocate_epw
!----------------------------------------------------------------------
!!
!! deallocates the variables allocated by allocate_epw
!! this routine is unchanged as of 3/9/09 and should be cleaned and fixed
!! 09/2009 Cleanup still necessary
!! 12/2009 Added variables from elph.f90
!!
!! RM - Nov/Dec 2014
!! Imported the noncolinear case implemented by xlzhang
!!
!----------------------------------------------------------------------
USE phcom, ONLY : alphap, alphasum, alphasum_nc, &
becsum_nc, dmuxc, dpsi,&
drc, dpsi, dyn, evq, dvpsi,&
int5, vlocq, int2_so, int5_so
USE lrus, ONLY : becp1, int3, int3_nc
USE phus, ONLY : int1, int1_nc, int2, int4, int4_nc
USE lr_symm_base, ONLY : rtau
USE noncollin_module, ONLY : m_loc
USE control_lr, ONLY : nbnd_occ
USE becmod, ONLY : becp, deallocate_bec_type
USE elph2, ONLY : el_ph_mat, epf17, epsi, etf,&
etq, et_all, wf, wkf, wqf, &
xkq, xk_all, zstar, xkf, xqf, epmatwp, eps_rpa
USE epwcom, ONLY : epbread, epwread
USE modes, ONLY : npert, u, name_rap_mode, num_rap_mode
USE qpoint, ONLY : eigqts, igkq
USE klist, ONLY : nks
!
IMPLICIT NONE
!
INTEGER :: ik
!! k-point number
INTEGER :: ipol
!! Polarization number
!
IF ( epwread .and. .not. epbread ) THEN
! EPW variables ONLY
!
IF(ALLOCATED(el_ph_mat)) DEALLOCATE (el_ph_mat)
IF(ALLOCATED(epmatwp)) DEALLOCATE (epmatwp)
IF(ALLOCATED(epf17)) DEALLOCATE (epf17)
IF(ALLOCATED(etq)) DEALLOCATE (etq)
IF(ALLOCATED(etf)) DEALLOCATE (etf)
IF(ALLOCATED(wf)) DEALLOCATE (wf)
IF(ALLOCATED(xkq)) DEALLOCATE (xkq)
IF(ALLOCATED(xkf)) DEALLOCATE (xkf)
IF(ALLOCATED(wkf)) DEALLOCATE (wkf)
IF(ALLOCATED(xqf)) DEALLOCATE (xqf)
IF(ALLOCATED(wqf)) DEALLOCATE (wqf)
IF(ALLOCATED(xk_all)) DEALLOCATE (xk_all)
IF(ALLOCATED(et_all)) DEALLOCATE (et_all)
IF(ALLOCATED(eps_rpa)) DEALLOCATE (eps_rpa)
IF(ALLOCATED(eps_rpa)) DEALLOCATE (eps_rpa)
!
ELSE
!
IF(ASSOCIATED(evq)) DEALLOCATE(evq)
IF(ASSOCIATED(igkq)) DEALLOCATE(igkq)
!
IF(ALLOCATED(dvpsi)) DEALLOCATE (dvpsi)
IF(ALLOCATED(dpsi)) DEALLOCATE ( dpsi)
!
IF(ALLOCATED(vlocq)) DEALLOCATE (vlocq)
IF(ALLOCATED(dmuxc)) DEALLOCATE (dmuxc)
!
IF(ALLOCATED(eigqts)) DEALLOCATE (eigqts)
IF(ALLOCATED(rtau)) DEALLOCATE (rtau)
IF(ASSOCIATED(u)) DEALLOCATE (u)
if(allocated(name_rap_mode)) deallocate (name_rap_mode)
if(allocated(num_rap_mode)) deallocate (num_rap_mode)
IF(ALLOCATED(dyn)) DEALLOCATE (dyn)
IF(ALLOCATED(epsi)) DEALLOCATE (epsi)
IF(ALLOCATED(zstar)) DEALLOCATE (zstar)
!
IF(ALLOCATED(npert)) DEALLOCATE (npert)
!
IF(ALLOCATED(int1)) DEALLOCATE (int1)
IF(ALLOCATED(int2)) DEALLOCATE (int2)
IF(ALLOCATED(int3)) DEALLOCATE (int3)
IF(ALLOCATED(int4)) DEALLOCATE (int4)
IF(ALLOCATED(int5)) DEALLOCATE (int5)
IF(ALLOCATED(int1_nc)) DEALLOCATE(int1_nc)
IF(ALLOCATED(int3_nc)) DEALLOCATE(int3_nc)
IF(ALLOCATED(int4_nc)) DEALLOCATE(int4_nc)
IF(ALLOCATED(becsum_nc)) DEALLOCATE(becsum_nc)
IF(ALLOCATED(alphasum_nc)) DEALLOCATE(alphasum_nc)
IF(ALLOCATED(int2_so)) DEALLOCATE(int2_so)
IF(ALLOCATED(int5_so)) DEALLOCATE(int5_so)
IF(ALLOCATED(alphasum)) DEALLOCATE (alphasum)
!
if(allocated(alphap)) then
do ik=1,nks
do ipol=1,3
call deallocate_bec_type ( alphap(ipol,ik) )
enddo
end do
deallocate (alphap)
endif
if(allocated(becp1)) then
do ik=1,size(becp1)
call deallocate_bec_type ( becp1(ik) )
end do
deallocate(becp1)
end if
call deallocate_bec_type ( becp )
IF(ALLOCATED(nbnd_occ)) DEALLOCATE(nbnd_occ)
IF(ALLOCATED(m_loc)) DEALLOCATE(m_loc)
!
IF(ALLOCATED(drc)) DEALLOCATE(drc)
!
! EPW variables
!
IF(ALLOCATED(el_ph_mat)) DEALLOCATE (el_ph_mat)
IF(ALLOCATED(epmatwp)) DEALLOCATE (epmatwp)
IF(ALLOCATED(epf17)) DEALLOCATE (epf17)
IF(ALLOCATED(etq)) DEALLOCATE (etq)
IF(ALLOCATED(etf)) DEALLOCATE (etf)
IF(ALLOCATED(wf)) DEALLOCATE (wf)
IF(ALLOCATED(xkq)) DEALLOCATE (xkq)
IF(ALLOCATED(xkf)) DEALLOCATE (xkf)
IF(ALLOCATED(wkf)) DEALLOCATE (wkf)
IF(ALLOCATED(xqf)) DEALLOCATE (xqf)
IF(ALLOCATED(wqf)) DEALLOCATE (wqf)
IF(ALLOCATED(xk_all)) DEALLOCATE (xk_all)
IF(ALLOCATED(et_all)) DEALLOCATE (et_all)
IF(ALLOCATED(eps_rpa)) DEALLOCATE (eps_rpa)
ENDIF ! epwread .and. .not. epbread
!
END SUBROUTINE deallocate_epw
! ---------------------------------------------------------------
!
!------------------------------------------------------------------
SUBROUTINE close_epw
SUBROUTINE close_final
!------------------------------------------------------------------
!
USE units_lr, ONLY : iuwfc
@ -33,4 +249,7 @@
IF (fildrho.ne.' ') CLOSE (unit = iudrho, status = 'keep')
ENDIF
!
END SUBROUTINE close_epw
END SUBROUTINE close_final
! ------------------------------------------------------------------
!
END MODULE close_epw

View File

@ -64,6 +64,8 @@
REAL(DP), PARAMETER :: eps16 = 1.0E-16_DP
REAL(DP), PARAMETER :: eps24 = 1.0E-24_DP
REAL(DP), PARAMETER :: eps32 = 1.0E-32_DP
REAL(DP), PARAMETER :: eps80 = 1.0E-80_DP
REAL(DP), PARAMETER :: eps160 = 1.0E-160_DP
!
END MODULE constants_epw

View File

@ -1,139 +0,0 @@
!
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
! Copyright (C) 2007-2009 Jesse Noffsinger, Brad Malone, Feliciano Giustino
!
! This file is distributed under the terms of the GNU General Public
! License. See the file `LICENSE' in the root directory of the
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
! Code adapted from PH/deallocate_phq - Quantum-ESPRESSO group
!
!----------------------------------------------------------------------
SUBROUTINE deallocate_epw
!----------------------------------------------------------------------
!!
!! deallocates the variables allocated by allocate_epw
!! this routine is unchanged as of 3/9/09 and should be cleaned and fixed
!! 09/2009 Cleanup still necessary
!! 12/2009 Added variables from elph.f90
!!
!! RM - Nov/Dec 2014
!! Imported the noncolinear case implemented by xlzhang
!!
!----------------------------------------------------------------------
USE phcom, ONLY : alphap, alphasum, alphasum_nc, &
becsum_nc, dmuxc, dpsi,&
drc, dpsi, dyn, evq, dvpsi,&
int5, vlocq, int2_so, int5_so
USE lrus, ONLY : becp1, int3, int3_nc
USE phus, ONLY : int1, int1_nc, int2, int4, int4_nc
USE lr_symm_base, ONLY : rtau
USE noncollin_module, ONLY : m_loc
USE control_lr, ONLY : nbnd_occ
USE becmod, ONLY : becp, deallocate_bec_type
USE elph2, ONLY : el_ph_mat, epf17, epsi, etf,&
etq, et_all, wf, wkf, wqf, &
xkq, xk_all, zstar, xkf, xqf, epmatwp, eps_rpa
USE epwcom, ONLY : epbread, epwread
USE modes, ONLY : npert, u, name_rap_mode, num_rap_mode
USE qpoint, ONLY : eigqts, igkq
USE klist, ONLY : nks
!
IMPLICIT NONE
INTEGER :: ik, ipol
!
IF ( epwread .and. .not. epbread ) THEN
! EPW variables ONLY
!
IF(ALLOCATED(el_ph_mat)) DEALLOCATE (el_ph_mat)
IF(ALLOCATED(epmatwp)) DEALLOCATE (epmatwp)
IF(ALLOCATED(epf17)) DEALLOCATE (epf17)
IF(ALLOCATED(etq)) DEALLOCATE (etq)
IF(ALLOCATED(etf)) DEALLOCATE (etf)
IF(ALLOCATED(wf)) DEALLOCATE (wf)
IF(ALLOCATED(xkq)) DEALLOCATE (xkq)
IF(ALLOCATED(xkf)) DEALLOCATE (xkf)
IF(ALLOCATED(wkf)) DEALLOCATE (wkf)
IF(ALLOCATED(xqf)) DEALLOCATE (xqf)
IF(ALLOCATED(wqf)) DEALLOCATE (wqf)
IF(ALLOCATED(xk_all)) DEALLOCATE (xk_all)
IF(ALLOCATED(et_all)) DEALLOCATE (et_all)
IF(ALLOCATED(eps_rpa)) DEALLOCATE (eps_rpa)
IF(ALLOCATED(eps_rpa)) DEALLOCATE (eps_rpa)
!
ELSE
!
IF(ASSOCIATED(evq)) DEALLOCATE(evq)
IF(ASSOCIATED(igkq)) DEALLOCATE(igkq)
!
IF(ALLOCATED(dvpsi)) DEALLOCATE (dvpsi)
IF(ALLOCATED(dpsi)) DEALLOCATE ( dpsi)
!
IF(ALLOCATED(vlocq)) DEALLOCATE (vlocq)
IF(ALLOCATED(dmuxc)) DEALLOCATE (dmuxc)
!
IF(ALLOCATED(eigqts)) DEALLOCATE (eigqts)
IF(ALLOCATED(rtau)) DEALLOCATE (rtau)
IF(ASSOCIATED(u)) DEALLOCATE (u)
if(allocated(name_rap_mode)) deallocate (name_rap_mode)
if(allocated(num_rap_mode)) deallocate (num_rap_mode)
IF(ALLOCATED(dyn)) DEALLOCATE (dyn)
IF(ALLOCATED(epsi)) DEALLOCATE (epsi)
IF(ALLOCATED(zstar)) DEALLOCATE (zstar)
!
IF(ALLOCATED(npert)) DEALLOCATE (npert)
!
IF(ALLOCATED(int1)) DEALLOCATE (int1)
IF(ALLOCATED(int2)) DEALLOCATE (int2)
IF(ALLOCATED(int3)) DEALLOCATE (int3)
IF(ALLOCATED(int4)) DEALLOCATE (int4)
IF(ALLOCATED(int5)) DEALLOCATE (int5)
IF(ALLOCATED(int1_nc)) DEALLOCATE(int1_nc)
IF(ALLOCATED(int3_nc)) DEALLOCATE(int3_nc)
IF(ALLOCATED(int4_nc)) DEALLOCATE(int4_nc)
IF(ALLOCATED(becsum_nc)) DEALLOCATE(becsum_nc)
IF(ALLOCATED(alphasum_nc)) DEALLOCATE(alphasum_nc)
IF(ALLOCATED(int2_so)) DEALLOCATE(int2_so)
IF(ALLOCATED(int5_so)) DEALLOCATE(int5_so)
IF(ALLOCATED(alphasum)) DEALLOCATE (alphasum)
!
if(allocated(alphap)) then
do ik=1,nks
do ipol=1,3
call deallocate_bec_type ( alphap(ipol,ik) )
enddo
end do
deallocate (alphap)
endif
if(allocated(becp1)) then
do ik=1,size(becp1)
call deallocate_bec_type ( becp1(ik) )
end do
deallocate(becp1)
end if
call deallocate_bec_type ( becp )
IF(ALLOCATED(nbnd_occ)) DEALLOCATE(nbnd_occ)
IF(ALLOCATED(m_loc)) DEALLOCATE(m_loc)
!
IF(ALLOCATED(drc)) DEALLOCATE(drc)
!
! EPW variables
!
IF(ALLOCATED(el_ph_mat)) DEALLOCATE (el_ph_mat)
IF(ALLOCATED(epmatwp)) DEALLOCATE (epmatwp)
IF(ALLOCATED(epf17)) DEALLOCATE (epf17)
IF(ALLOCATED(etq)) DEALLOCATE (etq)
IF(ALLOCATED(etf)) DEALLOCATE (etf)
IF(ALLOCATED(wf)) DEALLOCATE (wf)
IF(ALLOCATED(xkq)) DEALLOCATE (xkq)
IF(ALLOCATED(xkf)) DEALLOCATE (xkf)
IF(ALLOCATED(wkf)) DEALLOCATE (wkf)
IF(ALLOCATED(xqf)) DEALLOCATE (xqf)
IF(ALLOCATED(wqf)) DEALLOCATE (wqf)
IF(ALLOCATED(xk_all)) DEALLOCATE (xk_all)
IF(ALLOCATED(et_all)) DEALLOCATE (et_all)
IF(ALLOCATED(eps_rpa)) DEALLOCATE (eps_rpa)
ENDIF ! epwread .and. .not. epbread
!
END SUBROUTINE deallocate_epw

254
EPW/src/division.f90 Normal file
View File

@ -0,0 +1,254 @@
!
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
! Copyright (C) 2007-2009 Jesse Noffsinger, Brad Malone, Feliciano Giustino
!
! This file is distributed under the terms of the GNU General Public
! License. See the file `LICENSE' in the root directory of the
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!----------------------------------------------------------------------
MODULE division
!----------------------------------------------------------------------
!!
!! This module contains various core splitting routines
!!
IMPLICIT NONE
!
CONTAINS
!
!---------------------------------------------------------------------
SUBROUTINE kpointdivision ( ik0 )
!---------------------------------------------------------------------
!!
!! This is just to find the first kpoint block in the pool
!!
!---------------------------------------------------------------------
!
USE mp_global, ONLY : my_pool_id,npool
USE pwcom, ONLY : nkstot
!
implicit none
integer :: ik0
integer :: nkl, nkr, iks
!
#if defined(__MPI)
!
! number of kpoint blocks, kpoints per pool and reminder
!
nkl = 1 * ( nkstot / npool )
nkr = ( nkstot - nkl * npool ) / 1
!
! the reminder goes to the first nkr pools
! (0...nkr-1)
!
IF ( my_pool_id < nkr ) nkl = nkl + 1 !kunit
!
! the index of the first k point in this pool
!
iks = nkl * my_pool_id + 1
IF ( my_pool_id >= nkr ) iks = iks + nkr * 1 !kunit
!
! the index of the first k point block in this pool - 1
! (I will need the index of ik, not ikk)
!
ik0 = ( iks - 1 )
!
#else
ik0 = 0
#endif
!
END SUBROUTINE kpointdivision
!
!-----------------------------------------------------------------------
SUBROUTINE fkbounds( nktot, lower_bnd, upper_bnd )
!-----------------------------------------------------------------------
!!
!! Subroutine finds the lower and upper bounds a k-grid in parallel
!!
!! @ Note:
!! If you have 19 kpts and 2 pool, this routine will return
!! lower_bnd= 1 and upper_bnd=10 for the first pool
!! lower_bnd= 1 and upper_bnd=9 for the second pool
!-----------------------------------------------------------------------
!
USE mp_global, ONLY : my_pool_id, npool
!
IMPLICIT NONE
!
INTEGER, INTENT (in) :: nktot
!! nktot k-points splited over pools
INTEGER, INTENT (out) :: lower_bnd
!! Lower kpt bounds for that image pool
INTEGER, INTENT (out) :: upper_bnd
!! Upper kpt for that image pool
!
#if defined(__MPI)
!
INTEGER :: nkl, nkr
!
! find the bounds of k-dependent arrays in the parallel case
! number of kpoint blocks, kpoints per pool and reminder
!
nkl = nktot / npool
nkr = nktot - nkl * npool
!
! the reminder goes to the first nkr pools (0...nkr-1)
!
IF (my_pool_id < nkr ) nkl = nkl + 1
!
! the index of the first k point in this pool
!
lower_bnd = my_pool_id * nkl + 1
IF ( my_pool_id >= nkr ) lower_bnd = my_pool_id * nkl + 1 + nkr
!
! the index of the last k point in this pool
!
upper_bnd = lower_bnd + nkl - 1
!
#else
!
! In serial the definitions are much easier
!
lower_bnd = 1
upper_bnd = nktot
!
#endif
!
RETURN
!
END SUBROUTINE fkbounds
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
SUBROUTINE fkbounds2( nktot, lower_bnd, upper_bnd )
!-----------------------------------------------------------------------
!!
!! Subroutine finds the lower and upper bounds a k-grid in parallel
!!
!! @ Note:
!! If you have 19 kpts and 2 pool, this routine will return
!! lower_bnd= 1 and upper_bnd=10 for the first pool
!! lower_bnd= 1 and upper_bnd=9 for the second pool
!-----------------------------------------------------------------------
!
USE mp_global, ONLY : my_pool_id, npool
USE parallel_include, ONLY : MPI_OFFSET_KIND
!
IMPLICIT NONE
!
#if defined(__MPI)
INTEGER (kind=MPI_OFFSET_KIND), INTENT (in) :: nktot
!! nktot k-points splited over pools
#else
INTEGER (KIND=8), INTENT (IN) :: ind_tot
!! nktot k-points splited over pools
#endif
INTEGER, INTENT (out) :: lower_bnd
!! Lower kpt bounds for that image pool
INTEGER, INTENT (out) :: upper_bnd
!! Upper kpt for that image pool
!
#if defined(__MPI)
!
INTEGER :: nkl, nkr
!
! find the bounds of k-dependent arrays in the parallel case
! number of kpoint blocks, kpoints per pool and reminder
!
nkl = nktot / npool
nkr = nktot - nkl * npool
!
! the reminder goes to the first nkr pools (0...nkr-1)
!
IF (my_pool_id < nkr ) nkl = nkl + 1
!
! the index of the first k point in this pool
!
lower_bnd = my_pool_id * nkl + 1
IF ( my_pool_id >= nkr ) lower_bnd = my_pool_id * nkl + 1 + nkr
!
! the index of the last k point in this pool
!
upper_bnd = lower_bnd + nkl - 1
!
#else
!
! In serial the definitions are much easier
!
lower_bnd = 1
upper_bnd = nktot
!
#endif
!
RETURN
!
END SUBROUTINE fkbounds2
!
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
SUBROUTINE fkbounds_bnd( nbnd, lower_bnd, upper_bnd )
!-----------------------------------------------------------------------
!!
!! Subroutine finds the lower and upper bounds in band parallelization
!!
!! @ Note:
!! If you have 20 bands and 2 images, this routine will return
!! lower_bnd= 1 and upper_bnd=10 for the first pool
!! lower_bnd= 11 and upper_bnd=19 for the second pool
!-----------------------------------------------------------------------
!
USE mp_images, ONLY: nimage, my_image_id
! number of images, number of processor within an image, index of the proc within an image
!
IMPLICIT NONE
!
INTEGER, INTENT (in) :: nbnd
!! Total number of band to be splitted among images
INTEGER, INTENT (out) :: lower_bnd
!! Lower band bounds for that image pool
INTEGER, INTENT (out) :: upper_bnd
!! Upper band bound for that image pool
!
#if defined(__MPI)
!
INTEGER :: nkl, nkr
!
! find the bounds of k-dependent arrays in the parallel case
! number of kpoint blocks, kpoints per pool and reminder
!
nkl = nbnd / nimage
nkr = nbnd - nkl * nimage
!
! the reminder goes to the first nkr pools (0...nkr-1)
!
IF (my_image_id < nkr ) nkl = nkl + 1
!
! the index of the first k point in this pool
!
lower_bnd = my_image_id * nkl + 1
IF ( my_image_id >= nkr ) lower_bnd = my_image_id * nkl + 1 + nkr
!
! the index of the last k point in this pool
!
upper_bnd = lower_bnd + nkl - 1
!
#else
!
! In serial the definitions are much easier
!
lower_bnd = 1
upper_bnd = nbnd
!
#endif
!
RETURN
!
END SUBROUTINE fkbounds_bnd
!
!-----------------------------------------------------------------------
!
END MODULE division

View File

@ -59,12 +59,6 @@
sigmar_all(:,:), &! To store sigmar, sigmai and zi globally
sigmai_all(:,:), &!
sigmai_mode(:,:,:), &!
Fi_all(:,:,:,:), &!
F_current(:,:,:,:), &!
F_SERTA(:,:,:,:), &!
Fi_allcb(:,:,:,:), &!
F_currentcb(:,:,:,:), &!
F_SERTAcb(:,:,:,:), &!
zi_all(:,:), &!
esigmar_all(:,:,:), &!
esigmai_all(:,:,:), &!
@ -100,8 +94,6 @@
igkq(:), &! Index for k+q+G vector
igk_k_all(:,:), &! Global index (in case of parallel)
ngk_all(:), &! Global number of plane wave for each global k-point
s_BZtoIBZ(:,:,:), &! Save the symmetry operation that brings BZ k into IBZ
BZtoIBZ(:), &! Map between the full uniform k-grid and the IBZ
map_rebal(:), &! Map between the k-point and their load rebalanced one
map_rebal_inv(:) ! Map between the k-point and their load rebalanced one
INTEGER, allocatable :: &

View File

@ -60,7 +60,7 @@
USE mp, ONLY : mp_barrier, mp_bcast, mp_put,mp_sum
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
USE wavefunctions, ONLY: evc
USE wavefunctions, ONLY : evc
USE io_files, ONLY : diropn, seqopn
USE wvfct, ONLY : npwx
USE pwcom, ONLY : current_spin, isk, lsda, nbnd, xk, nks
@ -82,6 +82,7 @@
USE constants_epw, ONLY : czero, cone, ci
USE control_flags, ONLY : iverbosity
USE klist, ONLY : nkstot
USE division, ONLY : kpointdivision, fkbounds, fkbounds_bnd
USE noncollin_module, ONLY : noncolin, npol, nspin_mag
!
implicit none

View File

@ -25,8 +25,7 @@
!-----------------------------------------------------------------------
!
USE kinds, ONLY : DP
USE pwcom, ONLY : nbnd, nks, nkstot, isk, &
et, xk, ef, nelec
USE pwcom, ONLY : nbnd, nks, nkstot, isk, et, xk, ef, nelec
USE cell_base, ONLY : at, bg, omega, alat
USE start_k, ONLY : nk1, nk2, nk3
USE ions_base, ONLY : nat, amass, ityp, tau
@ -40,14 +39,15 @@
scattering, nstemp, int_mob, scissor, carrier, &
iterative_bte, longrange, scatread, nqf1, prtgkk, &
nqf2, nqf3, mp_mesh_k, restart, ncarrier, plselfen, &
specfun_pl, lindabs, mob_maxiter, use_ws
specfun_pl, lindabs, mob_maxiter, use_ws, &
epmatkqread, selecqread
USE noncollin_module, ONLY : noncolin
USE constants_epw, ONLY : ryd2ev, ryd2mev, one, two, eps2, zero, czero, &
twopi, ci, kelvin2eV, eps6
USE io_files, ONLY : prefix, diropn, tmp_dir
USE io_global, ONLY : stdout, ionode
USE io_epw, ONLY : lambda_phself, linewidth_phself, iunepmatwe, &
iunepmatwp, crystal, iunepmatwp2
iunepmatwp, crystal, iunepmatwp2, iunrestart
USE elph2, ONLY : cu, cuq, lwin, lwinq, map_rebal, map_rebal_inv, &
chw, chw_ks, cvmew, cdmew, rdw, &
epmatwp, epmatq, wf, etf, etf_k, etf_ks, xqf, xkf, &
@ -55,11 +55,10 @@
ibndmin, ibndmax, lambda_all, dmec, dmef, vmef, &
sigmai_all, sigmai_mode, gamma_all, epsi, zstar, &
efnew, sigmar_all, zi_all, nkqtotf, eps_rpa, &
nkqtotf, sigmar_all, zi_allvb, inv_tau_all, Fi_all, &
F_current, F_SERTA, inv_tau_allcb, zi_allcb, exband,&
Fi_allcb, F_currentcb, F_SERTAcb, BZtoIBZ, s_BZtoIBZ
nkqtotf, sigmar_all, zi_allvb, inv_tau_all, &
inv_tau_allcb, zi_allcb, exband
USE transportcom, ONLY : transp_temp, mobilityh_save, mobilityel_save, lower_bnd, &
upper_bnd, ixkqf_tr, s_BZtoIBZ_full
upper_bnd
USE wan2bloch, ONLY : dmewan2bloch, hamwan2bloch, dynwan2bloch, &
ephwan2blochp, ephwan2bloch, vmewan2bloch, &
dynifc2blochf, dynifc2blochc
@ -68,10 +67,12 @@
ephbloch2wanp_mem
USE wigner, ONLY : wigner_seitz_wrap
USE io_eliashberg, ONLY : write_ephmat, count_kpoints, kmesh_fine, kqmap_fine
USE transport, ONLY : transport_coeffs, scattering_rate_q
USE transport_iter,ONLY : iterativebte
USE transport, ONLY : transport_coeffs, scattering_rate_q, qwindow
USE printing, ONLY : print_gkk
USE io_scattering, ONLY : F_read, electron_read, tau_read
USE io_scattering, ONLY : electron_read, tau_read, iter_open
USE transport_iter,ONLY : iter_restart
USE close_epw, ONLY : iter_close
USE division, ONLY : fkbounds
#ifdef __NAG
USE f90_unix_io, ONLY : flush
#endif
@ -80,7 +81,8 @@
USE mp_global, ONLY : inter_pool_comm, intra_pool_comm, root_pool
USE mp_world, ONLY : mpime, world_comm
#if defined(__MPI)
USE parallel_include, ONLY: MPI_MODE_RDONLY, MPI_INFO_NULL
USE parallel_include, ONLY : MPI_MODE_RDONLY, MPI_INFO_NULL, MPI_OFFSET_KIND, &
MPI_OFFSET
#endif
!
implicit none
@ -110,6 +112,8 @@
!! integer variable for I/O control
INTEGER :: iq
!! Counter on coarse q-point grid
INTEGER :: iqq
!! Counter on coarse q-point grid
INTEGER :: iq_restart
!! Counter on coarse q-point grid
INTEGER :: ik
@ -166,6 +170,14 @@
!! Counter on bands when use_ws == .true.
INTEGER :: iw2
!! Counter on bands when use_ws == .true.
INTEGER :: iter
!! Current iteration number
INTEGER :: itemp
!! Temperature index
INTEGER :: icbm
!! Index of the CBM
INTEGER :: totq
!! Total number of q-points within the fsthick window.
INTEGER, ALLOCATABLE :: irvec_k(:,:)
!! integer components of the ir-th Wigner-Seitz grid point in the basis
!! of the lattice vectors for electrons
@ -181,8 +193,28 @@
INTEGER, ALLOCATABLE :: ndegen_g (:,:,:,:)
!! Wigner-Seitz weights for the electron-phonon grid that depend on
!! atomic positions $R - \tau(na)$
INTEGER, ALLOCATABLE :: selecq(:)
!! Selected q-points within the fsthick window
INTEGER, PARAMETER :: nrwsx=200
!! Maximum number of real-space Wigner-Seitz
#if defined(__MPI)
INTEGER (kind=MPI_OFFSET_KIND) :: ind_tot
INTEGER (kind=MPI_OFFSET_KIND) :: ind_totcb
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw2
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw4
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw5
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw6
!! Offset to tell where to start reading the file
INTEGER (kind=MPI_OFFSET_KIND) :: lsize
!! Offset to tell where to start reading the file
#else
INTEGER(kind=8) :: lrepmatw2
INTEGER(kind=i4b) :: lrepmatw4
INTEGER(kind=8) :: lrepmatw5
INTEGER(kind=i4b) :: lrepmatw6
!! Offset to tell where to start reading the file
INTEGER(kind=8) :: lsize
#endif
!
REAL(kind=DP) :: rdotk_scal
!! Real (instead of array) for $r\cdot k$
@ -200,12 +232,24 @@
!! Maximum vector: at*nq
REAL(kind=DP) :: w_centers(3,nbndsub)
!! Wannier centers
REAL(KIND=DP) :: etemp
!! Temperature in Ry (this includes division by kb)
REAL(KIND=DP) :: ef0(nstemp)
!! Fermi level for the temperature itemp
REAL(KIND=DP) :: efcb(nstemp)
!! Second Fermi level for the temperature itemp
REAL(KIND=DP) :: dummy(3)
!! Dummy variable
REAL(KIND=DP), EXTERNAL :: fermicarrier
!! Function that returns the Fermi level so that n=p (if int_mob = .true.)
REAL(kind=DP), EXTERNAL :: efermig
!! External function to calculate the fermi energy
REAL(kind=DP), EXTERNAL :: efermig_seq
!! Same but in sequential
REAL(kind=DP), PARAMETER :: eps = 0.01/ryd2mev
!! Tolerence
REAL(kind=DP), ALLOCATABLE :: etf_all(:,:)
!! Eigen-energies on the fine grid collected from all pools in parallel case
REAL(kind=DP), ALLOCATABLE :: w2 (:)
!! Interpolated phonon frequency
REAL(kind=DP), ALLOCATABLE :: irvec_r (:,:)
@ -220,6 +264,10 @@
!! real-space length for phonons, in units of alat
REAL(kind=DP), ALLOCATABLE :: wslen_g(:)
!! real-space length for electron-phonons, in units of alat
REAL(kind=DP), ALLOCATABLE :: vkk_all(:,:,:)
!! velocity from all the k-point
REAL(kind=DP), ALLOCATABLE :: wkf_all(:)
!! k-point weights for all the k-points
!
COMPLEX(kind=DP), ALLOCATABLE :: epmatwe (:,:,:,:,:)
!! e-p matrix in wannier basis - electrons
@ -241,31 +289,6 @@
!! Used to store $e^{2\pi r \cdot k}$ exponential
COMPLEX(kind=DP), ALLOCATABLE :: cfacq(:,:,:)
!! Used to store $e^{2\pi r \cdot k+q}$ exponential
! Conductivity ------------
INTEGER :: iter
!! Current iteration number
INTEGER :: itemp
!! Temperature index
INTEGER :: icbm
!! Index of the CBM
REAL(KIND=DP) :: error_h
!! Error in the hole iterative BTE
REAL(KIND=DP) :: error_el
!! Error in the electron iterative BTE
REAL(KIND=DP) :: etemp
!! Temperature in Ry (this includes division by kb)
REAL(KIND=DP) :: ef0(nstemp)
!! Fermi level for the temperature itemp
REAL(KIND=DP) :: efcb(nstemp)
!! Second Fermi level for the temperature itemp
REAL(kind=DP), ALLOCATABLE :: etf_all(:,:)
!! Eigen-energies on the fine grid collected from all pools in parallel case
REAL(KIND=DP), EXTERNAL :: fermicarrier
!! Function that returns the Fermi level so that n=p (if int_mob = .true.)
REAL(KIND=DP) :: dummy(3)
!! Dummy variable
! -----------------
!
IF (nbndsub.ne.nbnd) &
WRITE(stdout, '(/,5x,a,i4)' ) 'Band disentanglement is used: nbndsub = ', nbndsub
@ -738,7 +761,6 @@
CALL load_rebal()
ENDIF
!
!
! xqf must be in crystal coordinates
!
! this loops over the fine mesh of q points.
@ -773,171 +795,173 @@
!
! Fine mesh set of g-matrices. It is large for memory storage
ALLOCATE ( epf17 (ibndmax-ibndmin+1, ibndmax-ibndmin+1, nmodes, nkf) )
epf17(:,:,:,:) = czero
ALLOCATE ( etf_all ( nbndsub, nkqtotf ) )
ALLOCATE ( etf_all ( ibndmax-ibndmin+1, nkqtotf/2 ) )
ALLOCATE ( inv_tau_all (nstemp, ibndmax-ibndmin+1, nkqtotf/2) )
inv_tau_all(:,:,:) = zero
ALLOCATE ( zi_allvb (nstemp, ibndmax-ibndmin+1, nkqtotf/2) )
epf17(:,:,:,:) = czero
etf_all(:,:) = zero
inv_tau_all(:,:,:) = zero
zi_allvb(:,:,:) = zero
!
IF (int_mob .AND. carrier) THEN
ALLOCATE ( inv_tau_allcb (nstemp, ibndmax-ibndmin+1, nkqtotf/2) )
inv_tau_allcb(:,:,:) = zero
ALLOCATE ( zi_allcb (nstemp, ibndmax-ibndmin+1, nkqtotf/2) )
inv_tau_allcb(:,:,:) = zero
zi_allcb(:,:,:) = zero
ENDIF
!
! ------------------------------------------------
! The IBTE implement works in two steps
! 1) compute the dominant scattering rates and store them to file
! 2) read them from file and solve the IBTE where all important element are in memory
! ------------------------------------------------
!
! Initialization and restart when doing IBTE
!IF (iterative_bte) THEN
! IF (epmatkqread) THEN
! CALL iter_restart(etf_all, wkf_all, vkk_all, ind_tot, ind_totcb, ef0, efcb)
! ENDIF
!ENDIF
IF (iterative_bte) THEN
ALLOCATE(Fi_all(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
! Current iterative F(i+1) function
ALLOCATE(F_current(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
ALLOCATE(F_SERTA(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
Fi_all(:,:,:,:) = zero
F_current(:,:,:,:) = zero
F_SERTA(:,:,:,:) = zero
ALLOCATE(mobilityh_save(nstemp))
ALLOCATE(mobilityel_save(nstemp))
mobilityh_save(:) = zero
mobilityel_save(:) = zero
IF (int_mob .AND. carrier) THEN
ALLOCATE(Fi_allcb(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
ALLOCATE(F_currentcb(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
ALLOCATE(F_SERTAcb(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
Fi_allcb(:,:,:,:) = zero
F_currentcb(:,:,:,:) = zero
F_SERTAcb(:,:,:,:) = zero
998 continue ! Continue after all scattering rates have been computed in print_ibte
IF (epmatkqread) THEN
!
ALLOCATE( vkk_all( 3, ibndmax-ibndmin+1, nkqtotf/2 ) )
ALLOCATE( wkf_all( nkqtotf/2 ) )
!
CALL iter_restart(etf_all, wkf_all, vkk_all, ind_tot, ind_totcb, ef0, efcb)
!
DEALLOCATE(vkk_all)
DEALLOCATE(wkf_all)
DEALLOCATE(etf_all)
GOTO 999
!
ELSE ! epmatkqread
!
! Open the required files
CALL iter_open(ind_tot, ind_totcb, lrepmatw2, lrepmatw4, lrepmatw5, lrepmatw6)
!
ENDIF
ALLOCATE ( BZtoIBZ(nkf1*nkf2*nkf3) )
ALLOCATE ( s_BZtoIBZ(3,3,nkf1*nkf2*nkf3) )
BZtoIBZ(:) = 0
s_BZtoIBZ(:,:,:) = 0
ENDIF
!
! Start iteration index
iter = 1
!iter = 0
! Error for iterative BTE
IF (int_mob .OR. (ncarrier > 1E5)) THEN
error_el = 10_DP
ELSE
error_el = 0_DP
! -----------------------------------------------------------------------
! Determines which q-points falls within the fsthick windows
! Store the result in the selecq.fmt file
! If the file exists, automatically restart from the file
! -----------------------------------------------------------------------
totq = 0
! Check if the file has been pre-computed
IF (mpime == ionode_id) THEN
INQUIRE(FILE='selecq.fmt',EXIST=exst)
ENDIF
IF (int_mob .OR. (ncarrier < 1E5)) THEN
error_h = 10_DP
CALL mp_bcast(exst, ionode_id, world_comm)
!
IF (exst) THEN
IF (selecqread) THEN
WRITE(stdout,'(5x,a)')' '
WRITE(stdout,'(5x,a)')'Reading selecq.fmt file. '
CALL qwindow(exst, nrr_k, dims, totq, selecq, irvec_r, ndegen_k, cufkk, cufkq)
ELSE
error_h = 0_DP
WRITE(stdout,'(5x,a)')' '
WRITE(stdout,'(5x,a)')'A selecq.fmt file was found but re-created because selecqread == .false. '
CALL qwindow(.FALSE., nrr_k, dims, totq, selecq, irvec_r, ndegen_k, cufkk, cufkq)
ENDIF
ELSE ! exst
IF (selecqread) THEN
CALL errore( 'ephwann_shuffle', 'Variable selecqread == .true. but file selecq.fmt not found.',1 )
ELSE
CALL qwindow(exst, nrr_k, dims, totq, selecq, irvec_r, ndegen_k, cufkk, cufkq)
ENDIF
ENDIF
!
! Restart calculation
!
WRITE(stdout,'(5x,a,i8,a)')'We only need to compute ',totq, ' q-points'
WRITE(stdout,'(5x,a)')' '
!
! -----------------------------------------------------------------------
! Possible restart during step 1)
! -----------------------------------------------------------------------
iq_restart = 1
first_cycle = .FALSE.
first_time = .TRUE.
IF (restart) THEN
!
! Restart in SERTA case or self-energy case
IF (restart) THEN
IF ( elecselfen ) THEN
IF ( .not. ALLOCATED (sigmar_all) ) ALLOCATE( sigmar_all(ibndmax-ibndmin+1, nkqtotf/2) )
IF ( .not. ALLOCATED (sigmai_all) ) ALLOCATE( sigmai_all(ibndmax-ibndmin+1, nkqtotf/2) )
IF ( .not. ALLOCATED (zi_all) ) ALLOCATE( zi_all(ibndmax-ibndmin+1, nkqtotf/2) )
ALLOCATE( sigmar_all(ibndmax-ibndmin+1, nkqtotf/2) )
ALLOCATE( sigmai_all(ibndmax-ibndmin+1, nkqtotf/2) )
ALLOCATE( zi_all(ibndmax-ibndmin+1, nkqtotf/2) )
sigmar_all(:,:) = zero
sigmai_all(:,:) = zero
zi_all(:,:) = zero
!
CALL electron_read(iq_restart, nqf, nkqtotf/2, sigmar_all, sigmai_all, zi_all)
!
CALL electron_read(iq_restart, totq, nkqtotf/2, sigmar_all, sigmai_all, zi_all)
ENDIF
IF ( scattering ) THEN
!
IF (int_mob .AND. carrier) THEN
!
! Here inv_tau_all and inv_tau_allcb gets updated
CALL tau_read(iq_restart, nqf, nkqtotf/2, .TRUE.)
CALL tau_read(iq_restart, totq, nkqtotf/2, .TRUE.)
ELSE
! Here inv_tau_all gets updated
CALL tau_read(iq_restart, nqf, nkqtotf/2, .FALSE.)
CALL tau_read(iq_restart, totq, nkqtotf/2, .FALSE.)
ENDIF
!
ENDIF
IF ( iterative_bte ) THEN
!
IF (int_mob .AND. carrier) THEN
CALL F_read(iter, iq_restart, nqf, nkqtotf/2, error_h, error_el, .TRUE.)
ELSE
CALL F_read(iter, iq_restart, nqf, nkqtotf/2, error_h, error_el, .FALSE.)
ENDIF
!
IF (int_mob .OR. (ncarrier < 1E5)) THEN
IF ( error_h < eps2 ) WRITE(stdout,'(5x,a)') repeat('=',67)
IF ( error_h < eps2 ) &
WRITE( stdout,'(5x,"IBTE is converged with value for hole mobility of",1E18.6," "/)') MAXVAL(mobilityh_save(:))
IF ( error_h < eps2 ) WRITE(stdout,'(5x,a)') repeat('=',67)
ENDIF
IF (int_mob .OR. (ncarrier > 1E5)) THEN
IF ( error_el < eps2 ) WRITE(stdout,'(5x,a)') repeat('=',67)
IF ( error_el < eps2 ) &
WRITE( stdout,'(5x,"IBTE is converged with value for electron mobility of",1E18.6," "/)') MAXVAL(mobilityel_save(:))
IF ( error_el < eps2 ) WRITE(stdout,'(5x,a)') repeat('=',67)
ENDIF
!
ENDIF
!
! If you restart from reading a file. This prevent
! the case were you restart but the file does not exist
IF (iq_restart > 1) first_cycle = .TRUE.
!
ENDIF
ENDIF ! restart
!
! Scatread assumes that you alread have done the full q-integration
! We just do one loop to get interpolated eigenenergies.
IF(scatread) iq_restart = nqf -1
IF(scatread) iq_restart = totq -1
!
DO WHILE ( (error_h > eps2) .OR. (error_el > eps2) )
!
IF ( iterative_bte ) THEN
IF (iter==1 .OR. first_cycle) THEN
WRITE(stdout,'(5x,a)') ' '
WRITE(stdout,'(5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Start solving iterative Boltzmann Transport Equation")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
! Restart in IBTE case
IF (iterative_bte) THEN
IF (mpime == ionode_id) THEN
INQUIRE(FILE='restart_ibte.fmt',EXIST=exst)
ENDIF
WRITE(stdout,'(/5x,"Iteration number:", i10," "/)') iter
CALL mp_bcast(exst, ionode_id, world_comm)
!
!IF (nstemp > 1) CALL errore('ephwann_shuffle', &
! 'Iterative BTE can only be done at 1 temperature, nstemp = 1.',1)
!
IF (iter > mob_maxiter) THEN
! CALL errore('ephwann_shuffle', &
!'The iteration reached the maximum but did not converge. ',0)
WRITE(stdout,'(5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"The iteration reached the maximum but did not converge.")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
exit
IF (exst) THEN
IF (mpime.eq.ionode_id) THEN
OPEN(unit=iunrestart,file='restart_ibte.fmt',status='old',iostat=ios)
READ (iunrestart,*) iq_restart
READ (iunrestart,*) ind_tot
READ (iunrestart,*) ind_totcb
READ (iunrestart,*) lrepmatw2
READ (iunrestart,*) lrepmatw4
READ (iunrestart,*) lrepmatw5
READ (iunrestart,*) lrepmatw6
CLOSE(iunrestart)
ENDIF
CALL mp_bcast(iq_restart, ionode_id, world_comm )
CALL MPI_BCAST( ind_tot, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( ind_totcb, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( lrepmatw2, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( lrepmatw4, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( lrepmatw5, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( lrepmatw6, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
IF( ierr /= 0 ) CALL errore( 'ephwann_shuffle', 'error in MPI_BCAST',1 )
!
! Reading iter X if the file exist from a restart
!CALL F_read(Fi_all, ibndmax-ibndmin+1, nkqtotf/2, iter)
!
! Now, the iq_restart point has been done, so we need to do the next one except if last
!IF (iq_restart /= totq) iq_restart = iq_restart + 1
! Now, the iq_restart point has been done, so we need to do the next
iq_restart = iq_restart + 1
WRITE(stdout,'(5x,a,i8,a)')'We restart from ',iq_restart, ' q-points'
ENDIF ! exst
ENDIF
! -----------------------------------------------------------------------------
!
!iter = iter +1
!
DO iq = iq_restart, nqf
DO iqq = iq_restart, totq
! This needs to be uncommented.
!epf17(:,:,:,:) = czero
!
iq = selecq(iqq)
!
CALL start_clock ( 'ep-interp' )
!
! In case of big calculation, show progression of iq (especially usefull when
! elecselfen = true as nothing happen during the calculation otherwise.
!
IF ( .not. phonselfen) THEN
IF (MOD(iq,50) == 0) THEN
WRITE(stdout, '(a,i10,a,i10)' ) ' Progression iq (fine) = ',iq,'/',nqf
IF (MOD(iq,100) == 0) THEN
WRITE(stdout, '(5x,a,i10,a,i10)' ) 'Progression iq (fine) = ',iq,'/',totq
ENDIF
ENDIF
!
@ -1076,7 +1100,6 @@
! interpolate only when (k,k+q) both have at least one band
! within a Fermi shell of size fsthick
!
!IF (ik==2 ) print*,iq, etf(:, ikk), etf(:, ikq), ef
IF ( (( minval ( abs(etf(:, ikk) - ef) ) < fsthick ) .and. &
( minval ( abs(etf(:, ikq) - ef) ) < fsthick )) ) THEN
!
@ -1086,7 +1109,6 @@
! epmat : Wannier el and Bloch ph -> Bloch el and Bloch ph
! --------------------------------------------------------------
!
!
! SP: Note: In case of polar materials, computing the long-range and short-range term
! separately might help speed up the convergence. Indeed the long-range term should be
! much faster to compute. Note however that the short-range term still contains a linear
@ -1102,7 +1124,6 @@
epmatf(:,:,:) = czero
CALL ephwan2bloch &
( nbndsub, nrr_k, epmatwef, cufkk, cufkq, epmatf, nmodes, cfac, dims )
!print*,'eptmatf ',sum(epmatf)
!
ENDIF
!
@ -1135,36 +1156,26 @@
ENDDO
ENDDO
!
!if (ik==2) then
! do imode = 1, nmodes
! write(*,*) 'iq imode epmatf ',iq, imode,&
! SUM((REAL(REAL(epmatf(:,:,imode))))**2)+SUM((REAL(AIMAG(epmatf(:,:,imode))))**2)
! enddo
!endif
!IF (ik==8 .and. iq== 123 ) THEN
! print*,'epmatf(ibnd,jbnd) ',epmatf(2,:,6)
!ENDIF
!
ENDIF
ENDIF ! scatread
!
ENDDO ! end loop over k points
!
IF (prtgkk ) CALL print_gkk( iq )
IF (phonselfen ) CALL selfen_phon_q( iq )
IF (elecselfen ) CALL selfen_elec_q( iq, first_cycle )
IF (plselfen .and. .not.vme ) CALL selfen_pl_q( iq )
IF (nest_fn ) CALL nesting_fn_q( iq )
IF (specfun_el ) CALL spectral_func_q( iq )
IF (specfun_ph ) CALL spectral_func_ph( iq )
IF (specfun_pl .and. .not.vme ) CALL spectral_func_pl_q( iq )
IF (phonselfen ) CALL selfen_phon_q( iqq, iq, totq )
IF (elecselfen ) CALL selfen_elec_q( iqq, iq, totq, first_cycle )
IF (plselfen .and. .not. vme ) CALL selfen_pl_q( iqq, iq, totq )
IF (nest_fn ) CALL nesting_fn_q( iqq, iq )
IF (specfun_el ) CALL spectral_func_q( iqq, iq, totq )
IF (specfun_ph ) CALL spectral_func_ph( iqq, iq, totq )
IF (specfun_pl .and. .not. vme ) CALL spectral_func_pl_q( iqq, iq, totq )
IF (ephwrite) THEN
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
CALL kmesh_fine
CALL kqmap_fine
ENDIF
CALL write_ephmat( iq )
CALL count_kpoints(iq)
CALL write_ephmat( iqq, iq, totq )
CALL count_kpoints( iqq )
ENDIF
!
IF (.NOT. scatread) THEN
@ -1191,7 +1202,7 @@
etf (ibnd, ikq) = etf (ibnd, ikq) + scissor
ENDDO
ENDDO
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
WRITE(stdout, '(5x,"Applying a scissor shift of ",f9.5," eV to the conduction states")' ) scissor * ryd2ev
ENDIF
ENDIF
@ -1205,7 +1216,7 @@
! If we want to compute intrinsic mobilities, call fermicarrier to
! correctly positionned the ef0 level.
! This is only done once for iq = 0
IF ( iq == iq_restart ) THEN
IF ( iqq == iq_restart ) THEN
!
DO itemp = 1, nstemp
!
@ -1265,36 +1276,30 @@
ENDDO
!
!
ENDIF ! iq=0
ENDIF ! iqq=0
!
IF ( iterative_bte) THEN
! First iteration is just SERTA
IF (iter == 1) THEN
!
CALL scattering_rate_q( iq, ef0, efcb, first_cycle )
!print*,'SUM(inv_tau_all) after ',SUM(inv_tau_all)
!
! Compute the SERTA mobility for the first iteration
IF (iq == nqf) CALL transport_coeffs (ef0,efcb)
IF (iq == nqf) iter = iter + 1
!
ELSE
!
!IF (int_mob .AND. carrier) THEN
! call errore('ephwann_shuffle','The iterative solution cannot be solved with int_mob AND carrier at the moment',1)
!ELSE
CALL iterativebte(iter, iq, ef0, efcb, error_h, error_el, first_cycle, first_time)
!ENDIF
!
IF (iq == nqf) iter = iter + 1
IF ( .NOT. iterative_bte ) THEN
CALL scattering_rate_q( iqq, iq, totq, ef0, efcb, first_cycle )
! Computes the SERTA mobility
!IF (iq == nqf) CALL transport_coeffs (ef0,efcb)
IF (iqq == totq) CALL transport_coeffs (ef0,efcb)
ENDIF
!
ELSE
IF (iterative_bte) THEN
CALL print_ibte( iqq, iq, totq, ef0, efcb, first_cycle, ind_tot, ind_totcb, lrepmatw2,&
lrepmatw4, lrepmatw5, lrepmatw6 )
!
CALL scattering_rate_q( iq, ef0, efcb, first_cycle )
! Computes the SERTA mobility
IF (iq == nqf) CALL transport_coeffs (ef0,efcb)
! Finished, now compute SERTA and IBTE mobilities
IF (iqq == totq) THEN
WRITE(stdout, '(5x,a)')' '
WRITE(stdout, '(5x,"epmatkqread automatically changed to .true. as all scattering have been computed.")')
WRITE(stdout, '(5x,a)')' '
! close files
CALL iter_close()
!
epmatkqread = .true.
GOTO 998
ENDIF
ENDIF
!
ENDIF ! scattering
@ -1305,36 +1310,8 @@
ENDIF ! scatread
ENDDO ! end loop over q points
!
IF (iterative_bte) iq_restart = 1
! If we do not do iterative BTE, then exist the while loop.
IF (.NOT. iterative_bte) error_h = 0.0_DP
IF (.NOT. iterative_bte) error_el = 0.0_DP
!
ENDDO ! End the while loop
IF (iterative_bte) DEALLOCATE (Fi_all)
IF (iterative_bte) DEALLOCATE (F_current)
IF (iterative_bte) DEALLOCATE (F_SERTA)
IF (iterative_bte) DEALLOCATE (inv_tau_all)
IF (iterative_bte) DEALLOCATE (zi_allvb)
IF (iterative_bte) DEALLOCATE (BZtoIBZ)
IF (iterative_bte) DEALLOCATE (s_BZtoIBZ)
IF (mp_mesh_k .AND. iterative_bte) DEALLOCATE (s_BZtoIBZ_full)
IF (mp_mesh_k .AND. iterative_bte) DEALLOCATE (ixkqf_tr)
IF (mp_mesh_k .AND. iterative_bte) DEALLOCATE (map_rebal)
IF (mp_mesh_k .AND. iterative_bte) DEALLOCATE (map_rebal_inv)
IF (int_mob .AND. carrier .AND. iterative_bte) DEALLOCATE (inv_tau_allcb)
IF (int_mob .AND. carrier .AND. iterative_bte) DEALLOCATE (zi_allcb)
IF (int_mob .AND. carrier .AND. iterative_bte) DEALLOCATE (Fi_allcb)
IF (int_mob .AND. carrier .AND. iterative_bte) DEALLOCATE (F_currentcb)
IF (int_mob .AND. carrier .AND. iterative_bte) DEALLOCATE (F_SERTAcb)
!
! Close th epmatwp file
#if defined(__MPI)
IF (etf_mem == 1) then
CALL MPI_FILE_CLOSE(iunepmatwp2,ierr)
IF( ierr /= 0 ) CALL errore( 'ephwann_shuffle', 'error in MPI_FILE_CLOSE',1 )
ENDIF
#endif
! close files
CALL iter_close()
!
! Check Memory usage
CALL system_mem_usage(valueRSS)
@ -1357,23 +1334,23 @@
OPEN(unit=lambda_phself,file='lambda.phself')
WRITE(lambda_phself, '(/2x,a/)') '#Lambda phonon self-energy'
WRITE(lambda_phself, *) '#Modes ',(imode, imode=1,nmodes)
DO iq = 1, nqtotf
DO iqq = 1, nqtotf
!
!myfmt = "(*(3x,E15.5))" This does not work with PGI
myfmt = "(1000(3x,E15.5))"
WRITE(lambda_phself,'(i9,4x)',advance='no') iq
WRITE(lambda_phself, fmt=myfmt) (REAL(lambda_all(imode,iq,1)),imode=1,nmodes)
WRITE(lambda_phself,'(i9,4x)',advance='no') iqq
WRITE(lambda_phself, fmt=myfmt) (REAL(lambda_all(imode,iqq,1)),imode=1,nmodes)
!
ENDDO
CLOSE(lambda_phself)
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 iq = 1, nqtotf
DO iqq = 1, nqtotf
!
DO imode=1, nmodes
WRITE(linewidth_phself,'(i9,i6,E20.8,E22.10)') iq,imode,&
ryd2mev*wf(imode,iq),ryd2mev*REAL(gamma_all(imode,iq,1))
WRITE(linewidth_phself,'(i9,i6,E20.8,E22.10)') iqq,imode,&
ryd2mev*wf(imode,iqq),ryd2mev*REAL(gamma_all(imode,iqq,1))
ENDDO
!
ENDDO
@ -1420,10 +1397,9 @@
IF ( ALLOCATED(sigmai_all) ) DEALLOCATE( sigmai_all )
IF ( ALLOCATED(sigmai_mode) ) DEALLOCATE( sigmai_mode )
IF ( ALLOCATED(w2) ) DEALLOCATE( w2 )
IF ( ALLOCATED(inv_tau_all) ) DEALLOCATE( inv_tau_all )
IF ( ALLOCATED(inv_tau_allcb) ) DEALLOCATE( inv_tau_allcb )
IF ( ALLOCATED(zi_allvb) ) DEALLOCATE( zi_allvb )
IF ( ALLOCATED(zi_allcb) ) DEALLOCATE( zi_allcb )
IF (mp_mesh_k .AND. iterative_bte) DEALLOCATE (map_rebal)
IF (mp_mesh_k .AND. iterative_bte) DEALLOCATE (map_rebal_inv)
DEALLOCATE(selecq)
DEALLOCATE(cfac)
DEALLOCATE(cfacq)
DEALLOCATE(rdotk)
@ -1438,6 +1414,8 @@
DEALLOCATE(wslen_q)
DEALLOCATE(wslen_g)
!
999 continue
!
CALL stop_clock ( 'ephwann' )
!
END SUBROUTINE ephwann_shuffle

View File

@ -27,8 +27,7 @@
!-----------------------------------------------------------------------
!
USE kinds, ONLY : DP
USE pwcom, ONLY : nbnd, nks, nkstot, isk, &
et, xk, ef, nelec
USE pwcom, ONLY : nbnd, nks, nkstot, isk, et, xk, ef, nelec
USE cell_base, ONLY : at, bg, omega, alat
USE start_k, ONLY : nk1, nk2, nk3
USE ions_base, ONLY : nat, amass, ityp, tau
@ -42,27 +41,26 @@
scattering, nstemp, int_mob, scissor, carrier, &
iterative_bte, longrange, scatread, nqf1, prtgkk, &
nqf2, nqf3, mp_mesh_k, restart, ncarrier, plselfen, &
specfun_pl, use_ws
specfun_pl, use_ws, epmatkqread, selecqread
USE noncollin_module, ONLY : noncolin
USE constants_epw, ONLY : ryd2ev, ryd2mev, one, two, eps2, zero, czero, cone, &
twopi, ci, kelvin2eV
USE io_files, ONLY : prefix, diropn, tmp_dir
USE io_global, ONLY : stdout, ionode
USE io_epw, ONLY : lambda_phself, linewidth_phself, iunepmatwe, &
iunepmatwp, crystal, iunepmatwp2
iunepmatwp, crystal, iunepmatwp2, iunrestart
USE elph2, ONLY : cu, cuq, lwin, lwinq, &
chw, chw_ks, cvmew, cdmew, rdw, &
epmatq, wf, etf, etf_k, etf_ks, xqf, xkf, &
wkf, dynq, nqtotf, nkqf, epf17, nkf, nqf, et_ks, &
wkf, dynq, nkqf, epf17, nkf, nqf, et_ks, &
ibndmin, ibndmax, lambda_all, dmec, dmef, vmef, &
sigmai_all, sigmai_mode, gamma_all, epsi, zstar, &
efnew, sigmar_all, zi_all, nkqtotf, eps_rpa, &
nkqtotf, sigmar_all, zi_allvb, inv_tau_all, Fi_all, &
F_current, F_SERTA, inv_tau_allcb, zi_allcb, exband,&
F_currentcb, F_SERTAcb, Fi_allcb
nkqtotf, sigmar_all, zi_allvb, inv_tau_all, &
inv_tau_allcb, zi_allcb, exband
USE wigner, ONLY : wigner_seitz_wrap
USE transportcom, ONLY : transp_temp, mobilityh_save, mobilityel_save, lower_bnd, &
upper_bnd, ixkqf_tr, s_BZtoIBZ_full
upper_bnd
USE wan2bloch, ONLY : dmewan2bloch, hamwan2bloch, dynwan2bloch, &
vmewan2bloch, dynifc2blochf, dynifc2blochc, &
ephwan2blochp_mem, ephwan2bloch_mem
@ -70,10 +68,12 @@
vmebloch2wan, ephbloch2wane, ephbloch2wanp_mem
USE io_eliashberg, ONLY : write_ephmat, count_kpoints, kmesh_fine, &
kqmap_fine
USE transport, ONLY : transport_coeffs, scattering_rate_q
USE transport_iter,ONLY : iterativebte
USE transport, ONLY : transport_coeffs, scattering_rate_q, qwindow
USE transport_iter,ONLY : iter_restart
USE printing, ONLY : print_gkk
USE io_scattering, ONLY : F_read, electron_read, tau_read
USE io_scattering, ONLY : electron_read, tau_read, iter_open
USE close_epw, ONLY : iter_close
USE division, ONLY : fkbounds
#ifdef __NAG
USE f90_unix_io, ONLY : flush
#endif
@ -82,7 +82,8 @@
USE mp_global, ONLY : inter_pool_comm, intra_pool_comm, root_pool
USE mp_world, ONLY : mpime, world_comm
#if defined(__MPI)
USE parallel_include, ONLY: MPI_MODE_RDONLY, MPI_INFO_NULL
USE parallel_include, ONLY : MPI_MODE_RDONLY, MPI_INFO_NULL, MPI_OFFSET_KIND, &
MPI_OFFSET
#endif
!
implicit none
@ -112,6 +113,8 @@
!! integer variable for I/O control
INTEGER :: iq
!! Counter on coarse q-point grid
INTEGER :: iqq
!! Counter on coarse q-point grid
INTEGER :: iq_restart
!! Counter on coarse q-point grid
INTEGER :: ik
@ -168,6 +171,14 @@
!! Counter on bands when use_ws == .true.
INTEGER :: iw2
!! Counter on bands when use_ws == .true.
INTEGER :: iter
!! Current iteration number
INTEGER :: itemp
!! Temperature index
INTEGER :: icbm
!! Index of the CBM
INTEGER :: totq
!! Total number of q-points within the fsthick window.
INTEGER, ALLOCATABLE :: irvec_k(:,:)
!! integer components of the ir-th Wigner-Seitz grid point in the basis
!! of the lattice vectors for electrons
@ -183,8 +194,28 @@
INTEGER, ALLOCATABLE :: ndegen_g (:,:,:,:)
!! Wigner-Seitz weights for the electron-phonon grid that depend on
!! atomic positions $R - \tau(na)$
INTEGER, ALLOCATABLE :: selecq(:)
!! Selected q-points within the fsthick window
INTEGER, PARAMETER :: nrwsx=200
!! Maximum number of real-space Wigner-Seitz
#if defined(__MPI)
INTEGER (kind=MPI_OFFSET_KIND) :: ind_tot
INTEGER (kind=MPI_OFFSET_KIND) :: ind_totcb
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw2
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw4
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw5
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw6
!! Offset to tell where to start reading the file
INTEGER (kind=MPI_OFFSET_KIND) :: lsize
!! Offset to tell where to start reading the file
#else
INTEGER(kind=8) :: lrepmatw2
INTEGER(kind=i4b) :: lrepmatw4
INTEGER(kind=8) :: lrepmatw5
INTEGER(kind=i4b) :: lrepmatw6
!! Offset to tell where to start reading the file
INTEGER(kind=8) :: lsize
#endif
!
REAL(kind=DP) :: rdotk_scal
!! Real (instead of array) for $r\cdot k$
@ -202,12 +233,24 @@
!! Maximum vector: at*nq
REAL(kind=DP) :: w_centers(3,nbndsub)
!! Wannier centers
REAL(KIND=DP) :: etemp
!! Temperature in Ry (this includes division by kb)
REAL(KIND=DP) :: ef0(nstemp)
!! Fermi level for the temperature itemp
REAL(KIND=DP) :: efcb(nstemp)
!! Second Fermi level for the temperature itemp
REAL(KIND=DP) :: dummy(3)
!! Dummy variable
REAL(KIND=DP), EXTERNAL :: fermicarrier
!! Function that returns the Fermi level so that n=p (if int_mob = .true.)
REAL(kind=DP), EXTERNAL :: efermig
!! External function to calculate the fermi energy
REAL(kind=DP), EXTERNAL :: efermig_seq
!! Same but in sequential
REAL(kind=DP), PARAMETER :: eps = 0.01/ryd2mev
!! Tolerence
REAL(kind=DP), ALLOCATABLE :: etf_all(:,:)
!! Eigen-energies on the fine grid collected from all pools in parallel case
REAL(kind=DP), ALLOCATABLE :: w2 (:)
!! Interpolated phonon frequency
REAL(kind=DP), ALLOCATABLE :: irvec_r (:,:)
@ -222,25 +265,11 @@
!! real-space length for phonons, in units of alat
REAL(kind=DP), ALLOCATABLE :: wslen_g(:)
!! real-space length for electron-phonons, in units of alat
REAL(kind=DP), ALLOCATABLE :: vkk_all(:,:,:)
!! velocity from all the k-point
REAL(kind=DP), ALLOCATABLE :: wkf_all(:)
!! k-point weights for all the k-points
!
COMPLEX(kind=DP) :: tablex (4*nk1+1,nkf1)
!! Look-up table for the exponential (speed optimization) in the case of
!! homogeneous grids.
COMPLEX(kind=DP) :: tabley (4*nk2+1,nkf2)
!! Look-up table for the exponential (speed optimization) in the case of
!! homogeneous grids.
COMPLEX(kind=DP) :: tablez (4*nk3+1,nkf3)
!! Look-up table for the exponential (speed optimization) in the case of
!! homogeneous grids.
COMPLEX(kind=DP) :: tableqx (4*nk1+1,2*nkf1+1)
!! Look-up table for the exponential (speed optimization) in the case of
!! homogeneous grids.
COMPLEX(kind=DP) :: tableqy (4*nk2+1,2*nkf2+1)
!! Look-up table for the exponential (speed optimization) in the case of
!! homogeneous grids.
COMPLEX(kind=DP) :: tableqz (4*nk3+1,2*nkf3+1)
!! Look-up table for the exponential (speed optimization) in the case of
!! homogeneous grids.
COMPLEX(kind=DP), ALLOCATABLE :: epmatwe_mem (:,:,:,:)
!! e-p matrix in wannier basis - electrons (written on disk)
COMPLEX(kind=DP), ALLOCATABLE :: epmatwef (:,:,:)
@ -263,33 +292,6 @@
!! Temporary el-ph matrices.
COMPLEX(kind=DP), ALLOCATABLE :: epmatlrT(:,:,:,:)
!! Long-range temp. save
! Conductivity ------------
INTEGER, PARAMETER :: maxiter = 300
!! Maximum number of iteration in the case of iterative BTE
INTEGER :: iter
!! Current iteration number
INTEGER :: itemp
!! Temperature index
INTEGER :: icbm
!! Index of the CBM
REAL(KIND=DP) :: error_h
!! Error in the hole iterative BTE
REAL(KIND=DP) :: error_el
!! Error in the electron iterative BTE
REAL(KIND=DP) :: etemp
!! Temperature in Ry (this includes division by kb)
REAL(KIND=DP) :: ef0(nstemp)
!! Fermi level for the temperature itemp
REAL(KIND=DP) :: efcb(nstemp)
!! Second Fermi level for the temperature itemp
REAL(kind=DP), ALLOCATABLE :: etf_all(:,:)
!! Eigen-energies on the fine grid collected from all pools in parallel case
REAL(KIND=DP), EXTERNAL :: fermicarrier
!! Function that returns the Fermi level so that n=p (if int_mob = .true.)
REAL(KIND=DP) :: dummy(3)
!! Dummy variable
! -----------------
!
IF (nbndsub.ne.nbnd) &
WRITE(stdout, '(/,5x,a,i4)' ) 'Band disentanglement is used: nbndsub = ', nbndsub
@ -759,147 +761,163 @@
!
! Fine mesh set of g-matrices. It is large for memory storage
ALLOCATE ( epf17 (ibndmax-ibndmin+1, ibndmax-ibndmin+1, nmodes, nkf) )
ALLOCATE ( etf_all ( nbndsub, nkqtotf ) )
ALLOCATE ( etf_all (ibndmax-ibndmin+1, nkqtotf/2 ) )
ALLOCATE ( inv_tau_all (nstemp, ibndmax-ibndmin+1, nkqtotf/2) )
inv_tau_all(:,:,:) = zero
ALLOCATE ( zi_allvb (nstemp, ibndmax-ibndmin+1, nkqtotf/2) )
zi_allvb(:,:,:) = zero
ALLOCATE ( epmatlrT (nbndsub, nbndsub, nmodes, nkf) )
ALLOCATE ( eptmp (ibndmax-ibndmin+1, ibndmax-ibndmin+1, nmodes, nkf) )
epf17(:,:,:,:) = czero
etf_all(:,:) = zero
inv_tau_all(:,:,:) = zero
zi_allvb(:,:,:) = zero
!
IF (int_mob .AND. carrier) THEN
ALLOCATE ( inv_tau_allcb (nstemp, ibndmax-ibndmin+1, nkqtotf/2) )
inv_tau_allcb(:,:,:) = zero
ALLOCATE ( zi_allcb (nstemp, ibndmax-ibndmin+1, nkqtotf/2) )
inv_tau_allcb(:,:,:) = zero
zi_allcb(:,:,:) = zero
ENDIF
!
!
! ------------------------------------------------
! The IBTE implement works in two steps
! 1) compute the dominant scattering rates and store them to file
! 2) read them from file and solve the IBTE where all important element are in memory
! ------------------------------------------------
!
! Initialization and restart when doing IBTE
IF (iterative_bte) THEN
ALLOCATE(Fi_all(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
! Current iterative F(i+1) function
ALLOCATE(F_current(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
ALLOCATE(F_SERTA(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
Fi_all(:,:,:,:) = zero
F_current(:,:,:,:) = zero
F_SERTA(:,:,:,:) = zero
ALLOCATE(mobilityh_save(nstemp))
ALLOCATE(mobilityel_save(nstemp))
mobilityh_save(:) = zero
mobilityel_save(:) = zero
IF (int_mob .AND. carrier) THEN
ALLOCATE(Fi_allcb(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
ALLOCATE(F_currentcb(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
ALLOCATE(F_SERTAcb(3,ibndmax-ibndmin+1,nkqtotf/2,nstemp))
Fi_allcb(:,:,:,:) = zero
F_currentcb(:,:,:,:) = zero
F_SERTAcb(:,:,:,:) = zero
998 continue ! Continue after all scattering rates have been computed in print_ibte
IF (epmatkqread) THEN
!
ALLOCATE( vkk_all( 3, ibndmax-ibndmin+1, nkqtotf/2 ) )
ALLOCATE( wkf_all( nkqtotf/2 ) )
!
CALL iter_restart(etf_all, wkf_all, vkk_all, ind_tot, ind_totcb, ef0, efcb)
!
DEALLOCATE(vkk_all)
DEALLOCATE(wkf_all)
DEALLOCATE(etf_all)
GOTO 999
!
ELSE ! epmatkqread
!
! Open the required files
CALL iter_open(ind_tot, ind_totcb, lrepmatw2, lrepmatw4, lrepmatw5, lrepmatw6)
!
ENDIF
ENDIF
!
! Start iteration index
iter = 1
!iter = 0
! Eerror for iterative BTE
IF (int_mob .OR. (ncarrier > 1E5)) THEN
error_el = 10_DP
ELSE
error_el = 0_DP
! -----------------------------------------------------------------------
! Determines which q-points falls within the fsthick windows
! Store the result in the selecq.fmt file
! If the file exists, automatically restart from the file
! -----------------------------------------------------------------------
totq = 0
! Check if the file has been pre-computed
IF (mpime == ionode_id) THEN
INQUIRE(FILE='selecq.fmt',EXIST=exst)
ENDIF
IF (int_mob .OR. (ncarrier < 1E5)) THEN
error_h = 10_DP
CALL mp_bcast(exst, ionode_id, world_comm)
!
IF (exst) THEN
IF (selecqread) THEN
WRITE(stdout,'(5x,a)')' '
WRITE(stdout,'(5x,a)')'Reading selecq.fmt file. '
CALL qwindow(exst, nrr_k, dims, totq, selecq, irvec_r, ndegen_k, cufkk, cufkq)
ELSE
error_h = 0_DP
WRITE(stdout,'(5x,a)')' '
WRITE(stdout,'(5x,a)')'A selecq.fmt file was found but re-created because selecqread == .false. '
CALL qwindow(.FALSE., nrr_k, dims, totq, selecq, irvec_r, ndegen_k, cufkk, cufkq)
ENDIF
ELSE ! exst
IF (selecqread) THEN
CALL errore( 'ephwann_shuffle', 'Variable selecqread == .true. but file selecq.fmt not found.',1 )
ELSE
CALL qwindow(exst, nrr_k, dims, totq, selecq, irvec_r, ndegen_k, cufkk, cufkq)
ENDIF
ENDIF
!
! Restart calculation
!
WRITE(stdout,'(5x,a,i8,a)')'We only need to compute ',totq, ' q-points'
WRITE(stdout,'(5x,a)')' '
!
! -----------------------------------------------------------------------
! Possible restart during step 1)
! -----------------------------------------------------------------------
iq_restart = 1
first_cycle = .FALSE.
first_time = .TRUE.
IF (restart) THEN
!
! Restart in SERTA case or self-energy case
IF (restart) THEN
IF ( elecselfen ) THEN
IF ( .not. ALLOCATED (sigmar_all) ) ALLOCATE( sigmar_all(ibndmax-ibndmin+1, nkqtotf/2) )
IF ( .not. ALLOCATED (sigmai_all) ) ALLOCATE( sigmai_all(ibndmax-ibndmin+1, nkqtotf/2) )
IF ( .not. ALLOCATED (zi_all) ) ALLOCATE( zi_all(ibndmax-ibndmin+1, nkqtotf/2) )
ALLOCATE( sigmar_all(ibndmax-ibndmin+1, nkqtotf/2) )
ALLOCATE( sigmai_all(ibndmax-ibndmin+1, nkqtotf/2) )
ALLOCATE( zi_all(ibndmax-ibndmin+1, nkqtotf/2) )
sigmar_all(:,:) = zero
sigmai_all(:,:) = zero
zi_all(:,:) = zero
!
CALL electron_read(iq_restart, nqf, nkqtotf/2, sigmar_all, sigmai_all, zi_all)
!
CALL electron_read(iq_restart, totq, nkqtotf/2, sigmar_all, sigmai_all, zi_all)
ENDIF
IF ( scattering ) THEN
!
IF (int_mob .AND. carrier) THEN
!
! Here inv_tau_all and inv_tau_allcb gets updated
CALL tau_read(iq_restart, nqf, nkqtotf/2, .TRUE.)
!
CALL tau_read(iq_restart, totq, nkqtotf/2, .TRUE.)
ELSE
! Here inv_tau_all gets updated
CALL tau_read(iq_restart, nqf, nkqtotf/2, .FALSE.)
!
CALL tau_read(iq_restart, totq, nkqtotf/2, .FALSE.)
ENDIF
!
ENDIF
IF ( iterative_bte ) THEN
!
IF (int_mob .AND. carrier) THEN
CALL F_read(iter, iq_restart, nqf, nkqtotf/2, error_h, error_el, .TRUE.)
ELSE
CALL F_read(iter, iq_restart, nqf, nkqtotf/2, error_h, error_el, .FALSE.)
ENDIF
!
IF (int_mob .OR. (ncarrier < 1E5)) THEN
IF ( error_h < eps2 ) WRITE(stdout,'(5x,a)') repeat('=',67)
IF ( error_h < eps2 ) &
WRITE( stdout,'(5x,"IBTE is converged with value for hole mobility of",1E18.6," "/)') MAXVAL(mobilityh_save(:))
IF ( error_h < eps2 ) WRITE(stdout,'(5x,a)') repeat('=',67)
ENDIF
IF (int_mob .OR. (ncarrier > 1E5)) THEN
IF ( error_el < eps2 ) WRITE(stdout,'(5x,a)') repeat('=',67)
IF ( error_el < eps2 ) &
WRITE( stdout,'(5x,"IBTE is converged with value for electron mobility of",1E18.6," "/)') MAXVAL(mobilityel_save(:))
IF ( error_el < eps2 ) WRITE(stdout,'(5x,a)') repeat('=',67)
ENDIF
!
ENDIF
!
! If you restart from reading a file. This prevent
! the case were you restart but the file does not exist
IF (iq_restart > 1) first_cycle = .TRUE.
!
ENDIF
ENDIF ! restart
!
! Scatread assumes that you alread have done the full q-integration
! We just do one loop to get interpolated eigenenergies.
IF(scatread) iq_restart = nqf -1
IF(scatread) iq_restart = totq -1
!
DO WHILE ( (error_h > eps2) .OR. (error_el > eps2) )
!
IF ( iterative_bte ) THEN
IF (iter==1 .OR. first_cycle) THEN
WRITE(stdout,'(5x,a)') ' '
WRITE(stdout,'(5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Start solving iterative Boltzmann Transport Equation")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
! Restart in IBTE case
IF (iterative_bte) THEN
IF (mpime == ionode_id) THEN
INQUIRE(FILE='restart_ibte.fmt',EXIST=exst)
ENDIF
WRITE(stdout,'(/5x,"Iteration number:", i10," "/)') iter
!
!IF (nstemp > 1) CALL errore('ephwann_shuffle', &
! 'Iterative BTE can only be done at 1 temperature, nstemp = 1.',1)
!
IF (iter > maxiter) CALL errore('ephwann_shuffle', &
'The iteration reached the maximum but did not converge. ',1)
!
! Reading iter X if the file exist from a restart
!CALL F_read(Fi_all, ibndmax-ibndmin+1, nkqtotf/2, iter)
CALL mp_bcast(exst, ionode_id, world_comm)
!
IF (exst) THEN
IF (mpime.eq.ionode_id) THEN
OPEN(unit=iunrestart,file='restart_ibte.fmt',status='old',iostat=ios)
READ (iunrestart,*) iq_restart
READ (iunrestart,*) ind_tot
READ (iunrestart,*) ind_totcb
READ (iunrestart,*) lrepmatw2
READ (iunrestart,*) lrepmatw4
READ (iunrestart,*) lrepmatw5
READ (iunrestart,*) lrepmatw6
CLOSE(iunrestart)
ENDIF
CALL mp_bcast(iq_restart, ionode_id, world_comm )
CALL MPI_BCAST( ind_tot, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( ind_totcb, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( lrepmatw2, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( lrepmatw4, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( lrepmatw5, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
CALL MPI_BCAST( lrepmatw6, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
IF( ierr /= 0 ) CALL errore( 'ephwann_shuffle', 'error in MPI_BCAST',1 )
!
!iter = iter +1
! Now, the iq_restart point has been done, so we need to do the next one
iq_restart = iq_restart + 1
WRITE(stdout,'(5x,a,i8,a)')'We restart from ',iq_restart, ' q-points'
ENDIF ! exst
ENDIF
! -----------------------------------------------------------------------------
!
DO iq = iq_restart, nqf
DO iqq = iq_restart, totq
!
iq = selecq(iqq)
!
CALL start_clock ( 'ep-interp' )
!
@ -908,7 +926,7 @@
!
IF ( .not. phonselfen) THEN
IF (MOD(iq,50) == 0) THEN
WRITE(stdout, '(a,i10,a,i10)' ) ' Progression iq (fine) = ',iq,'/',nqf
WRITE(stdout, '(a,i10,a,i10)' ) ' Progression iq (fine) = ',iq,'/',totq
ENDIF
ENDIF
!
@ -1109,15 +1127,6 @@
!
ENDDO
ENDDO
!IF (ik==2 .and. imode==1 .and. iq==9) print*,'epmatf(ibnd,jbnd) ',sum(epmatf(:,:))
!if (ik==1) then
! print*,'imode eptmp',imode, SUM((REAL(REAL(eptmp(:,:,imode,ik))))**2)+SUM((REAL(AIMAG(eptmp(:,:,imode,ik))))**2)
! print*,'epmatwef ',SUM(epmatwef)
!endif
!IF (ik==8 .and. iq== 123 .and. imode == 6) THEN
! print*,'epmatf(ibnd,jbnd) ',epmatf(2,:)
! print*,'epmatlrT(:,:,imode,ik) ',epmatlrT(2,:,imode,ik)
!ENDIF
!
ENDIF
ENDIF ! scatread
@ -1145,20 +1154,20 @@
!
!
IF (prtgkk ) CALL print_gkk( iq )
IF (phonselfen ) CALL selfen_phon_q( iq )
IF (elecselfen ) CALL selfen_elec_q( iq, first_cycle )
IF (plselfen .and. .not.vme ) CALL selfen_pl_q( iq )
IF (nest_fn ) CALL nesting_fn_q( iq )
IF (specfun_el ) CALL spectral_func_q( iq )
IF (specfun_ph ) CALL spectral_func_ph( iq )
IF (specfun_pl .and. .not.vme ) CALL spectral_func_pl_q( iq )
IF (phonselfen ) CALL selfen_phon_q( iqq, iq, totq )
IF (elecselfen ) CALL selfen_elec_q( iqq, iq, totq, first_cycle )
IF (plselfen .and. .not. vme ) CALL selfen_pl_q( iqq, iq, totq )
IF (nest_fn ) CALL nesting_fn_q( iqq, iq )
IF (specfun_el ) CALL spectral_func_q( iqq, iq, totq )
IF (specfun_ph ) CALL spectral_func_ph( iqq, iq, totq )
IF (specfun_pl .and. .not. vme ) CALL spectral_func_pl_q( iqq, iq, totq )
IF (ephwrite) THEN
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
CALL kmesh_fine
CALL kqmap_fine
ENDIF
CALL write_ephmat( iq )
CALL count_kpoints(iq)
CALL write_ephmat( iqq, iq, totq )
CALL count_kpoints( iqq )
ENDIF
!
! Conductivity ---------------------------------------------------------
@ -1183,7 +1192,7 @@
etf (ibnd, ikq) = etf (ibnd, ikq) + scissor
ENDDO
ENDDO
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
WRITE(stdout, '(5x,"Applying a scissor shift of ",f9.5," eV to the conduction states")' ) scissor * ryd2ev
ENDIF
ENDIF
@ -1191,7 +1200,7 @@
! If we want to compute intrinsic mobilities, call fermicarrier to
! correctly positionned the ef0 level.
! This is only done once for iq = 0
IF ( iq == iq_restart ) THEN
IF ( iqq == iq_restart ) THEN
!
DO itemp = 1, nstemp
!
@ -1251,34 +1260,26 @@
ENDDO
!
!
ENDIF ! iq=0
ENDIF ! iqq=0
!
IF ( iterative_bte) THEN
! First iteration is just SERTA
IF (iter == 1) THEN
!
CALL scattering_rate_q( iq, ef0, efcb, first_cycle )
!print*,'SUM(inv_tau_all) after ',SUM(inv_tau_all)
!
! Compute the SERTA mobility for the first iteration
IF (iq == nqf) CALL transport_coeffs (ef0,efcb)
IF (iq == nqf) iter = iter + 1
!
ELSE
!
IF (int_mob .AND. carrier) THEN
call errore('ephwann_shuffle','The iterative solution cannot be solved with int_mob AND carrier at the moment',1)
ELSE
CALL iterativebte(iter, iq, ef0, efcb, error_h, error_el, first_cycle, first_time)
IF ( .NOT. iterative_bte ) THEN
CALL scattering_rate_q( iqq, iq, totq, ef0, efcb, first_cycle )
! Computes the SERTA mobility
IF (iqq == totq) CALL transport_coeffs (ef0,efcb)
ENDIF
!
IF (iq == nqf) iter = iter + 1
IF (iterative_bte) THEN
CALL print_ibte( iqq, iq, totq, ef0, efcb, first_cycle, ind_tot, ind_totcb, lrepmatw2,&
lrepmatw4, lrepmatw5, lrepmatw6 )
!
! Finished, now compute SERTA and IBTE mobilities
IF (iqq == totq) THEN
WRITE(stdout, '(5x,a)')' '
WRITE(stdout, '(5x,"epmatkqread automatically changed to .true. as all scattering have been computed.")')
WRITE(stdout, '(5x,a)')' '
epmatkqread = .true.
GOTO 998
ENDIF
!
ELSE
!
CALL scattering_rate_q( iq, ef0, efcb, first_cycle )
!
ENDIF
!
ENDIF ! scattering
@ -1289,27 +1290,8 @@
ENDIF ! scatread
ENDDO ! end loop over q points
!
IF (iterative_bte) iq_restart = 1
! If we do not do iterative BTE, then exist the while loop.
IF (.NOT. iterative_bte) error_h = 0.0_DP
IF (.NOT. iterative_bte) error_el = 0.0_DP
!
ENDDO ! End the while loop
IF (iterative_bte) DEALLOCATE (Fi_all)
IF (iterative_bte) DEALLOCATE (F_current)
IF (iterative_bte) DEALLOCATE (F_SERTA)
IF (iterative_bte) DEALLOCATE (inv_tau_all)
IF (iterative_bte) DEALLOCATE (zi_allvb)
IF (iterative_bte) DEALLOCATE (s_BZtoIBZ_full)
IF (iterative_bte) DEALLOCATE (ixkqf_tr)
IF (int_mob .AND. carrier .AND. iterative_bte) DEALLOCATE (inv_tau_allcb)
IF (int_mob .AND. carrier .AND. iterative_bte) DEALLOCATE (zi_allcb)
!
! Close th epmatwp file
#if defined(__MPI)
CALL MPI_FILE_CLOSE(iunepmatwp2,ierr)
IF( ierr /= 0 ) CALL errore( 'ephwann_shuffle', 'error in MPI_FILE_CLOSE',1 )
#endif
! close files
CALL iter_close()
!
! Check Memory usage
CALL system_mem_usage(valueRSS)
@ -1332,23 +1314,23 @@
OPEN(unit=lambda_phself,file='lambda.phself')
WRITE(lambda_phself, '(/2x,a/)') '#Lambda phonon self-energy'
WRITE(lambda_phself, *) '#Modes ',(imode, imode=1,nmodes)
DO iq = 1, nqtotf
DO iqq = 1, totq
!
!myfmt = "(*(3x,E15.5))" This does not work with PGI
myfmt = "(1000(3x,E15.5))"
WRITE(lambda_phself,'(i9,4x)',advance='no') iq
WRITE(lambda_phself, fmt=myfmt) (REAL(lambda_all(imode,iq,1)),imode=1,nmodes)
WRITE(lambda_phself,'(i9,4x)',advance='no') iqq
WRITE(lambda_phself, fmt=myfmt) (REAL(lambda_all(imode,iqq,1)),imode=1,nmodes)
!
ENDDO
CLOSE(lambda_phself)
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 iq = 1, nqtotf
DO iqq = 1, totq
!
DO imode=1, nmodes
WRITE(linewidth_phself,'(i9,i6,E20.8,E22.10)') iq,imode,&
ryd2mev*wf(imode,iq),ryd2mev*REAL(gamma_all(imode,iq,1))
WRITE(linewidth_phself,'(i9,i6,E20.8,E22.10)') iqq,imode,&
ryd2mev*wf(imode,iqq),ryd2mev*REAL(gamma_all(imode,iqq,1))
ENDDO
!
ENDDO
@ -1407,12 +1389,7 @@
DEALLOCATE(wslen_q)
DEALLOCATE(wslen_g)
!
IF (.not. iterative_bte) CALL transport_coeffs (ef0,efcb)
!
IF ( ALLOCATED(inv_tau_all) ) DEALLOCATE( inv_tau_all )
IF ( ALLOCATED(inv_tau_allcb) ) DEALLOCATE( inv_tau_allcb )
IF ( ALLOCATED(zi_allvb) ) DEALLOCATE( zi_allvb )
IF ( ALLOCATED(zi_allcb) ) DEALLOCATE( zi_allcb )
999 continue
!
CALL stop_clock ( 'ephwann' )
!

View File

@ -30,6 +30,7 @@
USE epwcom, ONLY : filukk, eliashberg, ep_coupling, epwread, epbread, cumulant
USE environment, ONLY : environment_start
USE elph2, ONLY : elph
USE close_epw, ONLY : close_final, deallocate_epw
! Flag to perform an electron-phonon calculation. If .true.
! the code will enter in [[elphon_shuffle_wrap]]
!
@ -158,7 +159,7 @@ write(stdout,'(a)') "
!
! ... Close the files
!
CALL close_epw()
CALL close_final()
!
ENDIF
!

View File

@ -59,7 +59,7 @@
scattering_0rta, longrange, shortrange, scatread, &
restart_filq, prtgkk, nel, meff, epsiHEG, lphase, &
omegamin, omegamax, omegastep, n_r, lindabs, &
mob_maxiter, use_ws
mob_maxiter, use_ws, epmatkqread, selecqread
USE elph2, ONLY : elph
USE start_k, ONLY : nk1, nk2, nk3
USE constants_epw, ONLY : ryd2mev, ryd2ev, ev2cmm1, kelvin2eV
@ -104,7 +104,7 @@
filukk, filukq, epbread, epbwrite, epwread, epwwrite, etf_mem, kmaps, &
eig_read, wepexst, epexst, vme, &
degaussw, fsthick, eptemp, nsmear, delta_smear, &
dvscf_dir, ngaussw, &
dvscf_dir, ngaussw, epmatkqread, selecqread, &
wannierize, dis_win_max, dis_win_min, dis_froz_min, dis_froz_max, &
num_iter, proj, bands_skipped, wdata, iprint, write_wfn, &
wmin, wmax, nw, eps_acustic, a2f, nest_fn, plselfen, &
@ -285,6 +285,8 @@
! lphase : If .true., fix the gauge on the phonon eigenvectors and electronic eigenvectors - DS
! mob_maxiter : Maximum number of iteration for the IBTE.
! use_ws : If .true., use the Wannier-center to create the Wigner-Seitz cell.
! epmatkqread : If .true., restart an IBTE calculation from scattering written to files.
! selecqread : If .true., restart from the selecq.fmt file
!
! Added by Manos Kioupakis
! omegamin : Photon energy minimum
@ -482,6 +484,8 @@
lindabs = .false.
mob_maxiter= 50
use_ws = .false.
epmatkqread = .false.
selecqread = .false.
!
! reading the namelist inputepw
!

View File

@ -248,6 +248,10 @@
!! if .true., perform phonon-assisted absorption calculations
LOGICAL :: use_ws
!! if .true., use Wannier-centers to compute the Wigner-Seitz cell.
LOGICAL :: epmatkqread
!! if .true., restart and IBTE calculation from the scattering rates written to files.
LOGICAL :: selecqread
!! if .true., restart from the selecq.fmt file
!
! Superconductivity
LOGICAL :: ephwrite

View File

@ -766,6 +766,7 @@
USE mp_global, ONLY : inter_pool_comm, npool
USE mp_world, ONLY : mpime
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -1052,6 +1053,7 @@
USE constants_epw, ONLY : ryd2ev, zero
USE mp, ONLY : mp_barrier, mp_bcast, mp_sum
USE mp_global, ONLY : inter_pool_comm, npool
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -1200,7 +1202,7 @@
END SUBROUTINE read_ephmat
!
!-----------------------------------------------------------------------
SUBROUTINE write_ephmat( iq )
SUBROUTINE write_ephmat( iqq, iq, totq )
!-----------------------------------------------------------------------
!!
!! This subroutine writes the elph matrix elements in a format required
@ -1220,17 +1222,22 @@
efermi_read, fermi_energy
USE pwcom, ONLY : ef
USE elph2, ONLY : etf, ibndmin, ibndmax, nkqf, epf17, wkf, nkf, &
nqtotf, wf, xqf, nkqtotf, efnew
wf, xqf, nkqtotf, efnew
USE eliashbergcom, ONLY : equivk, nkfs, ekfs, wkfs, xkfs, dosef, ixkf, ixkqf, nbndfs
USE superconductivity, ONLY : mem_size_eliashberg, mem_integer_size_eliashberg
USE constants_epw, ONLY : ryd2ev, two
USE mp, ONLY : mp_barrier, mp_sum
USE mp_global, ONLY : inter_pool_comm, my_pool_id, npool
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
INTEGER, INTENT (in) :: iqq
!! Current q-points from selecq
INTEGER, INTENT (in) :: iq
!! Current q-points
INTEGER, INTENT (in) :: totq
!! Total number of q-point from selecq
!
! Local variables
!
@ -1273,9 +1280,9 @@
! write phonon frequencies to file
IF ( my_pool_id == 0 ) THEN
filfreq = trim(tmp_dir) // trim(prefix) // '.freq'
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
OPEN(iufilfreq, file = filfreq, form = 'unformatted')
WRITE(iufilfreq) nqtotf, nmodes
WRITE(iufilfreq) totq, nmodes
WRITE(iufilfreq) xqf(1,iq), xqf(2,iq), xqf(3,iq)
DO imode = 1, nmodes
WRITE(iufilfreq) wf(imode,iq)
@ -1312,7 +1319,7 @@
nkftot = nkqtotf / 2
CALL fkbounds( nkftot, lower_bnd, upper_bnd )
!
IF (iq.eq.1) THEN
IF (iqq == 1) THEN
!
! find fermicount - nr of k-points within the Fermi shell per pool
! for mp_mesh_k=true. femicount is the nr of irreducible k-points within the Fermi shell per pool
@ -1360,7 +1367,7 @@
CLOSE(iufilegnv)
ENDIF
!
ENDIF ! iq
ENDIF ! iqq
!
! write the e-ph matrix elements in the Bloch representation on the fine mesh
! in .ephmat files (one for each pool)
@ -1371,14 +1378,14 @@
#else
filephmat = trim(tmp_dir) // trim(prefix) // '.ephmat'
#endif
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
OPEN(iufileph, file = filephmat, form = 'unformatted')
ELSE
OPEN(iufileph, file = filephmat, position='append', form = 'unformatted')
ENDIF
!
!IF ( iq .eq. 1 ) WRITE(iufileph,'(2i7)') my_pool_id+1, fermicount
IF ( iq .eq. 1 ) WRITE(iufileph) my_pool_id+1, fermicount
IF ( iqq == 1 ) WRITE(iufileph) my_pool_id+1, fermicount
!
! nkf - nr of k-points in the pool (fine mesh)
! for mp_mesh_k = true nkf is nr of irreducible k-points in the pool
@ -1428,7 +1435,7 @@
ENDDO ! ik's
CLOSE(iufileph)
!
IF ( iq .eq. nqtotf ) THEN
IF ( iqq == totq ) THEN
IF ( ALLOCATED(ekfs) ) DEALLOCATE(ekfs)
IF ( ALLOCATED(wkfs) ) DEALLOCATE(wkfs)
IF ( ALLOCATED(xkfs) ) DEALLOCATE(xkfs)
@ -1441,7 +1448,7 @@
CALL mem_size_eliashberg( -imelt )
!
! remove memory allocated for ixkqf
imelt = nqtotf * nkfs
imelt = totq * nkfs
CALL mem_integer_size_eliashberg( -imelt )
!
! remove memory allocated for equivk, ixkf
@ -1462,7 +1469,7 @@
END SUBROUTINE write_ephmat
!
!-----------------------------------------------------------------------
SUBROUTINE count_kpoints( iq )
SUBROUTINE count_kpoints( iqq )
!-----------------------------------------------------------------------
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
@ -1476,7 +1483,7 @@
!
IMPLICIT NONE
!
INTEGER, INTENT (in) :: iq
INTEGER, INTENT (in) :: iqq
!! Current q-points
!
! Local variables
@ -1499,7 +1506,7 @@
!
REAL(DP), EXTERNAL :: efermig, dos_ef
!
IF (iq.eq.1) THEN
IF (iqq == 1) THEN
!
! Fermi level and corresponding DOS
!
@ -1540,7 +1547,7 @@
ELSE
WRITE(stdout,'(5x,a,i9,a,i9)') 'Nr k-points within the Fermi shell = ', nks, ' out of ', nkqtotf / 2
ENDIF
ENDIF ! iq
ENDIF ! iqq
!
RETURN
!
@ -1566,6 +1573,7 @@
USE mp_global, ONLY : inter_pool_comm, npool
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE mp_world, ONLY : mpime
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -1754,6 +1762,7 @@
USE mp_global, ONLY : inter_pool_comm
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE mp_world, ONLY : mpime
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!

View File

@ -33,6 +33,10 @@
iudecaydyn, iudecayv, iummn, iubvec
PUBLIC :: iufilsigma, iufilseebeck, iufilkappael, iufilkappa, iufilscatt_rate,&
iufilFi_all, iufilsigma_all, iufiltau_all, iuindabs
PUBLIC :: iunsparseq, iunsparsek, iunsparsei, iunsparsej, iunsparset, iunselecq, &
iunsparseqcb, iunsparsekcb, iunsparseicb, iunsparsejcb, iunsparsetcb, &
iunrestart, iufilibtev_sup, iunepmat, iunepmatcb
!
! Output of physically relevant quantities (60-100)
!
@ -101,6 +105,22 @@
INTEGER :: epwdata = 124 ! EPW data [epwdata.fmt]
INTEGER :: iundmedata = 125 ! Dipole matrix in wannier basis [dmedata.fmt]
INTEGER :: iunepmatwp2 = 126 ! Opening the epmatwp file
INTEGER :: iufilibtev_sup = 127 ! Files containing velocities for IBTE
INTEGER :: iunsparseq = 128 ! Q-mapping for IBTE
INTEGER :: iunsparsek = 129 ! K-mapping for IBTE
INTEGER :: iunsparsei = 130 ! i band mapping for IBTE
INTEGER :: iunsparsej = 131 ! j band mapping for IBTE
INTEGER :: iunsparset = 132 ! temperature mapping for IBTE
INTEGER :: iunsparseqcb = 133 ! Q-mapping for IBTE of conduction band
INTEGER :: iunsparsekcb = 134 ! K-mapping for IBTE for conduction band
INTEGER :: iunsparseicb = 135 ! i band mapping for IBTE for conduction band
INTEGER :: iunsparsejcb = 136 ! j band mapping for IBTE for conduction band
INTEGER :: iunsparsetcb = 137 ! temperature mapping for IBTE for conduction band
INTEGER :: iunselecq = 138 ! file containing q-point inside the fsthick windows
INTEGER :: iunrestart = 139 ! restart file during writing of IBTE scattering elements
INTEGER :: iunepmat = 140 ! Opening the epmatkq files
INTEGER :: iunepmatcb = 141 ! Opening the epmatkqcb file
!
! Output quantites related to Wannier (201-250)
!

View File

@ -17,7 +17,7 @@
CONTAINS
!
!----------------------------------------------------------------------------
SUBROUTINE F_write(iter, iq, nqtotf, nktotf, error_h, error_el, second)
SUBROUTINE Fin_write(iter, F_in, av_mob_old, elec)
!----------------------------------------------------------------------------
USE kinds, ONLY : DP
USE io_epw, ONLY : iufilFi_all
@ -26,26 +26,22 @@
USE mp, ONLY : mp_barrier
USE mp_world, ONLY : mpime
USE io_global, ONLY : ionode_id
USE elph2, ONLY : F_current, ibndmax, ibndmin, F_currentcb
USE transportcom, ONLY : lower_bnd, upper_bnd, mobilityh_save, mobilityel_save
USE elph2, ONLY : ibndmax, ibndmin, nkqtotf
USE transportcom, ONLY : lower_bnd, upper_bnd
USE constants_epw, ONLY : zero
!
IMPLICIT NONE
!
INTEGER, INTENT(IN) :: iter
!! Iteration number
INTEGER, INTENT(IN) :: iq
!! Current q-point
INTEGER, INTENT(IN) :: nqtotf
!! Total number of q-points
INTEGER, INTENT(IN) :: nktotf
!! Total number of k-points
REAL(kind=DP), INTENT(IN) :: error_h
REAL(kind=DP), INTENT(IN) :: F_in(3, ibndmax-ibndmin+1, nkqtotf/2, nstemp)
!REAL(kind=DP), INTENT(IN) :: F_in(:,:,:,:)
!! In solution for iteration i
REAL(kind=DP), INTENT(IN) :: av_mob_old(nstemp)
!REAL(kind=DP), INTENT(IN) :: av_mob_old(:)
!! Error in the hole mobility
REAL(kind=DP), INTENT(IN) :: error_el
!! Error in the electron mobility
LOGICAL, INTENT(IN) :: second
!! IF we have two Fermi level
LOGICAL, INTENT(IN) :: elec
!! IF true we do electron mobility, if false the hole one.
!
! Local variable
LOGICAL :: exst
@ -63,89 +59,56 @@
INTEGER :: itemp
!! Temperature index
!
REAL(KIND=DP) :: aux ( 3 * nstemp * (ibndmax-ibndmin+1) * nktotf + 7 + 2 * nstemp )
REAL(KIND=DP) :: aux ( 3 * (ibndmax-ibndmin+1) * (nkqtotf/2) * nstemp + nstemp + 1 )
!! Vector to store the array
!
!
IF (mpime.eq.ionode_id) THEN
exst = .FALSE.
aux(:) = zero
IF (mpime == ionode_id) THEN
!
lfi_all = 3 * nstemp * (ibndmax-ibndmin+1) * nktotf + 7 + 2 * nstemp
lfi_all = 3 * (ibndmax-ibndmin+1) * (nkqtotf/2) * nstemp + nstemp + 1
! First element is the iteration number
aux(1) = iter
! Current q-point number
aux(2) = iq -1 ! -1 because we will start at the next one.
! Total number of q-points
aux(3) = nqtotf
! Value of the previous h mobility (used for error evaluation)
aux(4) = error_h
! Error in the electron mobility
aux(5) = error_el
!
i = 5
i = 1
DO itemp=1, nstemp
i = i + 1
! Value of the previous h mobility (used for error evaluation)
aux(i) = mobilityh_save(itemp)
aux(i) = av_mob_old(itemp)
ENDDO
!
i = 5 + nstemp
i = 1 + nstemp
DO itemp=1, nstemp
i = i + 1
! Value of the previous el mobility (used for error evaluation)
aux(i) = mobilityel_save(itemp)
ENDDO
!
i = 5 + nstemp + nstemp
DO itemp=1, nstemp
DO ik=1, nktotf
DO ik=1, nkqtotf/2
DO ibnd=1, (ibndmax-ibndmin+1)
DO idir=1,3
i = i +1
aux(i) = F_current(idir, ibnd, ik, itemp)
aux(i) = F_in(idir, ibnd, ik, itemp)
ENDDO
ENDDO
ENDDO
ENDDO
CALL diropn (iufilFi_all, 'F_restart', lfi_all, exst)
!
! Electron mobility
IF (elec) THEN
CALL diropn (iufilFi_all, 'Fin_restartcb', lfi_all, exst)
CALL davcio ( aux, lfi_all, iufilFi_all, 1, +1 )
ELSE
CALL diropn (iufilFi_all, 'Fin_restart', lfi_all, exst)
CALL davcio ( aux, lfi_all, iufilFi_all, 1, +1 )
ENDIF
CLOSE(iufilFi_all)
!
IF (second) THEN
!
i = 5 + nstemp + nstemp
DO itemp=1, nstemp
DO ik=1, nktotf
DO ibnd=1, (ibndmax-ibndmin+1)
DO idir=1,3
i = i +1
aux(i) = F_currentcb(idir,ibnd, ik, itemp)
ENDDO
ENDDO
ENDDO
ENDDO
CALL diropn (iufilFi_all, 'F_restart_CB', lfi_all, exst)
CALL davcio ( aux, lfi_all, iufilFi_all, 1, +1 )
CLOSE(iufilFi_all)
!
ENDIF
!
ENDIF
!
! Make everythin 0 except the range of k-points we are working on
IF (lower_bnd > 1 ) F_current(:,:,1:lower_bnd-1,:) = zero
IF (upper_bnd < nktotf ) F_current(:,:,upper_bnd+1:nktotf,:) = zero
!
IF (second) THEN
IF (lower_bnd > 1 ) F_currentcb(:,:,1:lower_bnd-1,:) = zero
IF (upper_bnd < nktotf ) F_currentcb(:,:,upper_bnd+1:nktotf,:) = zero
ENDIF
!
!----------------------------------------------------------------------------
END SUBROUTINE F_write
END SUBROUTINE Fin_write
!----------------------------------------------------------------------------
!----------------------------------------------------------------------------
SUBROUTINE F_read(iter, iq, nqtotf, nktotf, error_h, error_el, second)
SUBROUTINE Fin_read(iter, F_in, av_mob_old, elec)
!----------------------------------------------------------------------------
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
@ -157,26 +120,20 @@
USE mp_global, ONLY : inter_pool_comm, intra_pool_comm, root_pool
USE mp_world, ONLY : mpime
USE io_global, ONLY : ionode_id
USE elph2, ONLY : F_current, ibndmax, ibndmin, Fi_all, F_currentcb, &
Fi_allcb
USE transportcom, ONLY : lower_bnd, upper_bnd, mobilityh_save, mobilityel_save
USE elph2, ONLY : ibndmax, ibndmin, nkqtotf
USE transportcom, ONLY : lower_bnd, upper_bnd
!
IMPLICIT NONE
!
INTEGER, INTENT(OUT) :: iter
INTEGER, INTENT(INOUT) :: iter
!! Iteration number
INTEGER, INTENT(INOUT) :: iq
!! Current q-point
INTEGER, INTENT(IN) :: nqtotf
!! Total number of q-points
INTEGER, INTENT(IN) :: nktotf
!! Total number of k-points
REAL(kind=DP), INTENT(INOUT) :: error_h
REAL(kind=DP), INTENT(INOUT) :: F_in(3, ibndmax-ibndmin+1, nkqtotf/2, nstemp)
!! In solution for iteration i
REAL(kind=DP), INTENT(INOUT) :: av_mob_old(nstemp)
!! Error in the hole mobility
REAL(kind=DP), INTENT(INOUT) :: error_el
!! Error in the electron mobility
LOGICAL, INTENT(IN) :: second
!! IF we have two Fermi level
LOGICAL, INTENT(IN) :: elec
!! IF true we do electron mobility, if false the hole one.
!
! Local variable
LOGICAL :: exst
@ -198,102 +155,87 @@
!
CHARACTER (len=256) :: name1
REAL(KIND=DP) :: aux ( 3 * nstemp * (ibndmax-ibndmin+1) * nktotf + 7 + 2 * nstemp )
REAL(KIND=DP) :: aux ( 3 * (ibndmax-ibndmin+1) * (nkqtotf/2) * nstemp + nstemp + 1 )
!! Vector to store the array
!
IF (mpime.eq.ionode_id) THEN
!
! First inquire if the file exists
IF (elec) THEN
#if defined(__MPI)
name1 = trim(tmp_dir) // trim(prefix) // '.F_restart1'
name1 = trim(tmp_dir) // trim(prefix) // '.Fin_restartcb1'
#else
name1 = trim(tmp_dir) // trim(prefix) // '.F_restart'
name1 = trim(tmp_dir) // trim(prefix) // '.Fin_restartcb'
#endif
INQUIRE(file = name1, exist=exst)
!
IF (exst) THEN ! read the file
!
lfi_all = 3 * nstemp * (ibndmax-ibndmin+1) * nktotf + 7 + 2 * nstemp
CALL diropn (iufilFi_all, 'F_restart', lfi_all, exst)
lfi_all = 3 * (ibndmax-ibndmin+1) * (nkqtotf/2) * nstemp + nstemp + 1
CALL diropn (iufilFi_all, 'Fin_restartcb', lfi_all, exst)
CALL davcio ( aux, lfi_all, iufilFi_all, 1, -1 )
!
! First element is the iteration number
iter = INT( aux(1) )
! Current iteration number
iq = INT( aux(2) )
iq = iq + 1 ! we need to start at the next q
! Total number of q-points
nqtotf_read = INT( aux(3) )
! Error in hole mobility
error_h = aux(4)
! Error in electron mobility
error_el = aux(5)
! This is the error of the previous iteration. Therefore when you restart
! from a converged one, you want to be finished.
! This small substraction wont affect anything.
error_h = error_h -0.5E-2
error_el = error_el -0.5E-2
!
IF ( nqtotf_read /= nqtotf) CALL errore('io_scattering',&
&'Error: The current total number of q-point is not the same as the read one. ',1)
!
i = 5
i = 1
DO itemp=1, nstemp
i = i + 1
! Last value of hole mobility
mobilityh_save(itemp) = aux(i)
av_mob_old(itemp) = aux(i)
ENDDO
!
i = 5 + nstemp
i = 1 + nstemp
DO itemp=1, nstemp
i = i + 1
! Last value of electron mobility
mobilityel_save(itemp) = aux(i)
ENDDO
!
i = 5 + nstemp + nstemp
DO itemp=1, nstemp
DO ik=1, nktotf
DO ik=1, nkqtotf/2
DO ibnd=1, (ibndmax-ibndmin+1)
DO idir=1,3
i = i +1
F_current(idir, ibnd, ik, itemp) = aux(i)
F_in(idir, ibnd, ik, itemp) = aux(i)
ENDDO
ENDDO
ENDDO
ENDDO
CLOSE(iufilFi_all)
ENDIF
!
IF (second) THEN
!
! First inquire if the file exists
ELSE ! hole
#if defined(__MPI)
name1 = trim(tmp_dir) // trim(prefix) // '.F_restart_CB1'
name1 = trim(tmp_dir) // trim(prefix) // '.Fin_restart1'
#else
name1 = trim(tmp_dir) // trim(prefix) // '.F_restart_CB'
name1 = trim(tmp_dir) // trim(prefix) // '.Fin_restart'
#endif
INQUIRE(file = name1, exist=exst)
!
IF (exst) THEN ! read the file
!
CALL diropn (iufilFi_all, 'F_restart_CB', lfi_all, exst)
lfi_all = 3 * (ibndmax-ibndmin+1) * (nkqtotf/2) * nstemp + nstemp + 1
CALL diropn (iufilFi_all, 'Fin_restart', lfi_all, exst)
CALL davcio ( aux, lfi_all, iufilFi_all, 1, -1 )
!
i = 5 + nstemp + nstemp
! First element is the iteration number
iter = INT( aux(1) )
!
i = 2
DO itemp=1, nstemp
DO ik=1, nktotf
i = i + 1
! Last value of hole mobility
av_mob_old(itemp) = aux(i)
ENDDO
!
i = 2 + nstemp
DO itemp=1, nstemp
DO ik=1, nkqtotf/2
DO ibnd=1, (ibndmax-ibndmin+1)
DO idir=1,3
i = i +1
F_currentcb(idir,ibnd, ik, itemp) = aux(i)
F_in(idir, ibnd, ik, itemp) = aux(i)
ENDDO
ENDDO
ENDDO
ENDDO
CLOSE(iufilFi_all)
ENDIF ! exist
ENDIF ! second
ENDIF
ENDIF
ENDIF ! mpime
!
CALL mp_bcast (exst, ionode_id, inter_pool_comm)
@ -302,50 +244,124 @@
IF (exst) THEN
CALL mp_bcast (iter, ionode_id, inter_pool_comm)
CALL mp_bcast (iter, root_pool, intra_pool_comm)
CALL mp_bcast (iq, ionode_id, inter_pool_comm)
CALL mp_bcast (iq, root_pool, intra_pool_comm)
CALL mp_bcast (F_current, ionode_id, inter_pool_comm)
CALL mp_bcast (F_current, root_pool, intra_pool_comm)
IF (second) THEN
CALL mp_bcast (F_currentcb, ionode_id, inter_pool_comm)
CALL mp_bcast (F_currentcb, root_pool, intra_pool_comm)
ENDIF
CALL mp_bcast (mobilityh_save, ionode_id, inter_pool_comm)
CALL mp_bcast (mobilityh_save, root_pool, intra_pool_comm)
CALL mp_bcast (mobilityel_save, ionode_id, inter_pool_comm)
CALL mp_bcast (mobilityel_save, root_pool, intra_pool_comm)
CALL mp_bcast (error_h, ionode_id, inter_pool_comm)
CALL mp_bcast (error_h, root_pool, intra_pool_comm)
CALL mp_bcast (error_el, ionode_id, inter_pool_comm)
CALL mp_bcast (error_el, root_pool, intra_pool_comm)
CALL mp_bcast (F_in, ionode_id, inter_pool_comm)
CALL mp_bcast (F_in, root_pool, intra_pool_comm)
CALL mp_bcast (av_mob_old, ionode_id, inter_pool_comm)
CALL mp_bcast (av_mob_old, root_pool, intra_pool_comm)
!
! The Fi on the commensurate full k-grid is equal to the full
! F_current from the previous read run.
Fi_all = F_current
CALL mp_bcast (Fi_all, ionode_id, inter_pool_comm)
CALL mp_bcast (Fi_all, root_pool, intra_pool_comm)
!
! Make everythin 0 except the range of k-points we are working on
IF (lower_bnd > 1 ) F_current(:,:,1:lower_bnd-1,:) = zero
IF (upper_bnd < nktotf ) F_current(:,:,upper_bnd+1:nktotf,:) = zero
!
IF (second) THEN
Fi_allcb = F_currentcb
CALL mp_bcast (Fi_allcb, ionode_id, inter_pool_comm)
CALL mp_bcast (Fi_allcb, root_pool, intra_pool_comm)
!
! Make everythin 0 except the range of k-points we are working on
IF (lower_bnd > 1 ) F_currentcb(:,:,1:lower_bnd-1,:) = zero
IF (upper_bnd < nktotf ) F_currentcb(:,:,upper_bnd+1:nktotf,:) = zero
ENDIF
!
WRITE(stdout, '(a,i10,a,i10,a,i10)' ) ' Restart from iter: ',iter,' and iq: ',iq,'/',nqtotf
WRITE(stdout, '(a,i10)' ) ' Restart from iter: ',iter
ENDIF ! exists
!
!----------------------------------------------------------------------------
END SUBROUTINE F_read
END SUBROUTINE Fin_read
!----------------------------------------------------------------------------
!
!----------------------------------------------------------------------------
SUBROUTINE iter_open(ind_tot, ind_totcb, lrepmatw2, lrepmatw4, lrepmatw5, lrepmatw6)
!----------------------------------------------------------------------------
!
! This subroutine opens all the files needed to save scattering rates for the IBTE.
!
USE kinds, ONLY : DP
USE io_files, ONLY : tmp_dir, prefix
USE io_epw, ONLY : iufilibtev_sup, iunepmat, iunsparseq, iunsparsek, &
iunsparsei, iunsparsej, iunsparset, iunsparseqcb, &
iunsparsekcb, iunrestart, iunsparseicb, iunsparsejcb,&
iunsparsetcb, iunepmatcb
USE mp_world, ONLY : world_comm
#if defined(__MPI)
USE parallel_include, ONLY : MPI_MODE_WRONLY, MPI_MODE_CREATE, MPI_INFO_NULL, &
MPI_OFFSET_KIND
#endif
!
IMPLICIT NONE
!
#if defined(__MPI)
INTEGER (kind=MPI_OFFSET_KIND), INTENT(INOUT) :: ind_tot
!! Total number of component for valence band
INTEGER (kind=MPI_OFFSET_KIND), INTENT(INOUT) :: ind_totcb
!! Total number of component for the conduction band
INTEGER (kind=MPI_OFFSET_KIND), INTENT(INOUT) :: lrepmatw2
!! Offset while writing scattering to files
INTEGER (kind=MPI_OFFSET_KIND), INTENT(INOUT) :: lrepmatw4
!! Offset while writing scattering to files
INTEGER (kind=MPI_OFFSET_KIND), INTENT(INOUT) :: lrepmatw5
!! Offset while writing scattering to files
INTEGER (kind=MPI_OFFSET_KIND), INTENT(INOUT) :: lrepmatw6
!! Offset while writing scattering to files
#else
INTEGER(KIND=8), INTENT(INOUT) :: ind_tot
!! Total number of component for valence band
INTEGER(KIND=8), INTENT(INOUT) :: ind_totcb
!! Total number of component for conduction band
INTEGER(KIND=8), INTENT(INOUT) :: lrepmatw2
!! Offset while writing scattering to files
INTEGER(KIND=8), INTENT(INOUT) :: lrepmatw4
!! Offset while writing scattering to files
INTEGER(KIND=8), INTENT(INOUT) :: lrepmatw5
!! Offset while writing scattering to files
INTEGER(KIND=8), INTENT(INOUT) :: lrepmatw6
!! Offset while writing scattering to files
#endif
!
! Local variables
!
CHARACTER (len=256) :: filint
!! Name of the file to write/read
INTEGER :: ierr
!! Error index
!
#if defined(__MPI)
filint = trim(tmp_dir)//trim(prefix)//'.epmatkq1'
CALL MPI_FILE_OPEN(world_comm, filint, MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunepmat,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN X.epmatkq1',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparseq', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparseq,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparseq',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparsek', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparsek,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparsek',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparsei', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparsei,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparsei',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparsej', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparsej,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparsej',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparset', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparset,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparset',1 )
!
! ELECTRONS
filint = trim(tmp_dir)//trim(prefix)//'.epmatkqcb1'
CALL MPI_FILE_OPEN(world_comm, filint, MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunepmatcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN X.epmatkqcb1',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparseqcb', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparseqcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparseqcb',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparsekcb', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparsekcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparsek',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparseicb', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparseicb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparsei',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparsejcb', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparsejcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparsej',1 )
!
CALL MPI_FILE_OPEN(world_comm, 'sparsetcb', MPI_MODE_WRONLY + MPI_MODE_CREATE,MPI_INFO_NULL,iunsparsetcb,ierr)
IF( ierr /= 0 ) CALL errore( 'iter_open', 'error in MPI_FILE_OPEN sparset',1 )
#endif
ind_tot = 0
ind_totcb = 0
lrepmatw2 = 0
lrepmatw4 = 0
lrepmatw5 = 0
lrepmatw6 = 0
!
!----------------------------------------------------------------------------
END SUBROUTINE iter_open
!----------------------------------------------------------------------------
!
!----------------------------------------------------------------------------
SUBROUTINE scattering_write(itemp, etemp, ef0, etf_all)
!----------------------------------------------------------------------------
@ -541,7 +557,7 @@
!----------------------------------------------------------------------------
!----------------------------------------------------------------------------
SUBROUTINE electron_write(iq,nqtotf,nktotf,sigmar_all,sigmai_all,zi_all)
SUBROUTINE electron_write(iq,totq,nktotf,sigmar_all,sigmai_all,zi_all)
!----------------------------------------------------------------------------
!
USE kinds, ONLY : DP
@ -561,7 +577,7 @@
!
INTEGER, INTENT(IN) :: iq
!! Current q-point
INTEGER, INTENT(IN) :: nqtotf
INTEGER, INTENT(IN) :: totq
!! Total number of q-points
INTEGER, INTENT(IN) :: nktotf
!! Total number of k-points
@ -590,7 +606,7 @@
! First element is the current q-point
aux(1) = REAL( iq -1, KIND=DP) ! we need to start at the next q
! Second element is the total number of q-points
aux(2) = REAL( nqtotf, KIND=DP)
aux(2) = REAL( totq, KIND=DP)
!
i = 2
!
@ -634,7 +650,7 @@
!----------------------------------------------------------------------------
!----------------------------------------------------------------------------
SUBROUTINE electron_read(iq,nqtotf,nktotf,sigmar_all,sigmai_all,zi_all)
SUBROUTINE electron_read(iq,totq,nktotf,sigmar_all,sigmai_all,zi_all)
!----------------------------------------------------------------------------
!
USE kinds, ONLY : DP
@ -656,7 +672,7 @@
!
INTEGER, INTENT(INOUT) :: iq
!! Current q-point
INTEGER, INTENT(IN) :: nqtotf
INTEGER, INTENT(IN) :: totq
!! Total number of q-points
INTEGER, INTENT(IN) :: nktotf
!! Total number of k-points
@ -705,7 +721,7 @@
nqtotf_read = INT( aux(2) )
!print*, 'iq',iq
!print*, 'nqtotf_read ',nqtotf_read
IF ( nqtotf_read /= nqtotf) CALL errore('io_scattering',&
IF ( nqtotf_read /= totq) CALL errore('io_scattering',&
&'Error: The current total number of q-point is not the same as the read one. ',1)
!
i = 2
@ -756,7 +772,7 @@
zi_all(:,upper_bnd+1:nktotf) = zero
ENDIF
!
WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from: ',(iq-1),'/',nqtotf
WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from: ',(iq-1),'/',totq
ENDIF
!
!----------------------------------------------------------------------------
@ -764,7 +780,7 @@
!----------------------------------------------------------------------------
!----------------------------------------------------------------------------
SUBROUTINE tau_write(iq,nqtotf,nktotf,second)
SUBROUTINE tau_write(iqq,totq,nktotf,second)
!----------------------------------------------------------------------------
USE kinds, ONLY : DP
USE epwcom, ONLY : nstemp
@ -779,9 +795,9 @@
!
IMPLICIT NONE
!
INTEGER, INTENT(IN) :: iq
!! Current q-point
INTEGER, INTENT(IN) :: nqtotf
INTEGER, INTENT(IN) :: iqq
!! q-point from the selected ones within the fstick window.
INTEGER, INTENT(IN) :: totq
!! Total number of q-points
INTEGER, INTENT(IN) :: nktotf
!! Total number of k-points
@ -809,8 +825,8 @@
!
ltau_all = 2 * nstemp * (ibndmax-ibndmin+1) * nktotf +2
! First element is the iteration number
aux(1) = REAL( iq -1, KIND=DP) ! -1 because we will start at the next one.
aux(2) = REAL( nqtotf, KIND=DP)
aux(1) = REAL( iqq -1, KIND=DP) ! -1 because we will start at the next one.
aux(2) = REAL( totq, KIND=DP)
i = 2
!
DO itemp=1, nstemp
@ -836,8 +852,8 @@
!
IF (second) THEN
! First element is the iteration number
aux(1) = iq -1 ! -1 because we will start at the next one.
aux(2) = nqtotf
aux(1) = iqq -1 ! -1 because we will start at the next one.
aux(2) = totq
i = 2
!
DO itemp=1, nstemp
@ -884,7 +900,7 @@
END SUBROUTINE tau_write
!----------------------------------------------------------------------------
!----------------------------------------------------------------------------
SUBROUTINE tau_read(iq,nqtotf,nktotf,second)
SUBROUTINE tau_read(iqq,totq,nktotf,second)
!----------------------------------------------------------------------------
!
USE kinds, ONLY : DP
@ -904,9 +920,9 @@
! Local variable
LOGICAL :: exst
!
INTEGER, INTENT(INOUT) :: iq
!! Current q-point
INTEGER, INTENT(IN) :: nqtotf
INTEGER, INTENT(INOUT) :: iqq
!! Current q-point from selecq.fmt
INTEGER, INTENT(IN) :: totq
!! Total number of q-points
INTEGER, INTENT(IN) :: nktotf
!! Total number of k-points
@ -948,12 +964,12 @@
CALL davcio ( aux, ltau_all, iufiltau_all, 1, -1 )
!
! First element is the iteration number
iq = INT( aux(1) )
iq = iq + 1 ! we need to start at the next q
iqq = INT( aux(1) )
iqq = iqq + 1 ! we need to start at the next q
nqtotf_read = INT( aux(2) )
!print*, 'iq',iq
!print*, 'nqtotf_read ',nqtotf_read
IF ( nqtotf_read /= nqtotf) CALL errore('io_scattering',&
IF ( nqtotf_read /= totq) CALL errore('io_scattering',&
&'Error: The current total number of q-point is not the same as the read one. ',1)
!
i = 2
@ -993,10 +1009,10 @@
CALL davcio ( aux, ltau_all, iufiltau_all, 1, -1 )
!
! First element is the iteration number
iq = INT( aux(1) )
iq = iq + 1 ! we need to start at the next q
iqq = INT( aux(1) )
iqq = iqq + 1 ! we need to start at the next q
nqtotf_read = INT( aux(2) )
IF ( nqtotf_read /= nqtotf) CALL errore('io_scattering',&
IF ( nqtotf_read /= totq) CALL errore('io_scattering',&
&'Error: The current total number of q-point is not the same as the read one. ',1)
!
i = 2
@ -1018,7 +1034,7 @@
ENDDO
ENDDO
CLOSE(iufiltau_all)
WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from tau_CB: ',iq,'/',nqtotf
WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from tau_CB: ',iqq,'/',totq
ENDIF
!
ENDIF ! second
@ -1028,7 +1044,7 @@
CALL mp_bcast (exst, meta_ionode_id, world_comm)
!
IF (exst) THEN
CALL mp_bcast (iq, meta_ionode_id, world_comm)
CALL mp_bcast (iqq, meta_ionode_id, world_comm)
CALL mp_bcast (inv_tau_all, meta_ionode_id, world_comm)
CALL mp_bcast (zi_allvb, meta_ionode_id, world_comm)
IF (second) CALL mp_bcast (inv_tau_allcb, meta_ionode_id, world_comm)
@ -1048,7 +1064,7 @@
IF (upper_bnd < nktotf ) zi_allcb(:,:,upper_bnd+1:nktotf) = zero
ENDIF
!
WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from tau: ',iq,'/',nqtotf
WRITE(stdout, '(a,i10,a,i10)' ) ' Restart from tau: ',iqq,'/',totq
ENDIF
!
!----------------------------------------------------------------------------

View File

@ -1,177 +0,0 @@
!
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
! Copyright (C) 2007-2009 Jesse Noffsinger, Brad Malone, Feliciano Giustino
!
! This file is distributed under the terms of the GNU General Public
! License. See the file `LICENSE' in the root directory of the
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!---------------------------------------------------------------------
subroutine kpointdivision ( ik0 )
!---------------------------------------------------------------------
!!
!! This is just to find the first kpoint block in the pool
!!
!---------------------------------------------------------------------
!
USE mp_global, ONLY : my_pool_id,npool
use pwcom, ONLY : nkstot
!
implicit none
integer :: ik0
integer :: nkl, nkr, iks
!
#if defined(__MPI)
!
! number of kpoint blocks, kpoints per pool and reminder
!
nkl = 1 * ( nkstot / npool )
nkr = ( nkstot - nkl * npool ) / 1
!
! the reminder goes to the first nkr pools
! (0...nkr-1)
!
IF ( my_pool_id < nkr ) nkl = nkl + 1 !kunit
!
! the index of the first k point in this pool
!
iks = nkl * my_pool_id + 1
IF ( my_pool_id >= nkr ) iks = iks + nkr * 1 !kunit
!
! the index of the first k point block in this pool - 1
! (I will need the index of ik, not ikk)
!
ik0 = ( iks - 1 )
!
#else
ik0 = 0
#endif
!
end subroutine kpointdivision
!-----------------------------------------------------------------------
SUBROUTINE fkbounds( nktot, lower_bnd, upper_bnd )
!-----------------------------------------------------------------------
!!
!! Subroutine finds the lower and upper bounds a k-grid in parallel
!!
!! @ Note:
!! If you have 19 kpts and 2 pool, this routine will return
!! lower_bnd= 1 and upper_bnd=10 for the first pool
!! lower_bnd= 1 and upper_bnd=9 for the second pool
!-----------------------------------------------------------------------
!
USE mp_global, ONLY: my_pool_id, npool
!
IMPLICIT NONE
!
INTEGER, INTENT (in) :: nktot
!! nktot k-points splited over pools
INTEGER, INTENT (out) :: lower_bnd
!! Lower kpt bounds for that image pool
INTEGER, INTENT (out) :: upper_bnd
!! Upper kpt for that image pool
!
#if defined(__MPI)
!
INTEGER :: nkl, nkr
!
! find the bounds of k-dependent arrays in the parallel case
! number of kpoint blocks, kpoints per pool and reminder
!
nkl = nktot / npool
nkr = nktot - nkl * npool
!
! the reminder goes to the first nkr pools (0...nkr-1)
!
IF (my_pool_id < nkr ) nkl = nkl + 1
!
! the index of the first k point in this pool
!
lower_bnd = my_pool_id * nkl + 1
IF ( my_pool_id >= nkr ) lower_bnd = my_pool_id * nkl + 1 + nkr
!
! the index of the last k point in this pool
!
upper_bnd = lower_bnd + nkl - 1
!
#else
!
! In serial the definitions are much easier
!
lower_bnd = 1
upper_bnd = nktot
!
#endif
!
RETURN
!
END SUBROUTINE fkbounds
!
!-----------------------------------------------------------------------
!
!-----------------------------------------------------------------------
SUBROUTINE fkbounds_bnd( nbnd, lower_bnd, upper_bnd )
!-----------------------------------------------------------------------
!!
!! Subroutine finds the lower and upper bounds in band parallelization
!!
!! @ Note:
!! If you have 20 bands and 2 images, this routine will return
!! lower_bnd= 1 and upper_bnd=10 for the first pool
!! lower_bnd= 11 and upper_bnd=19 for the second pool
!-----------------------------------------------------------------------
!
USE mp_images, ONLY: nimage, my_image_id
! number of images, number of processor within an image, index of the proc within an image
!
IMPLICIT NONE
!
INTEGER, INTENT (in) :: nbnd
!! Total number of band to be splitted among images
INTEGER, INTENT (out) :: lower_bnd
!! Lower band bounds for that image pool
INTEGER, INTENT (out) :: upper_bnd
!! Upper band bound for that image pool
!
#if defined(__MPI)
!
INTEGER :: nkl, nkr
!
! find the bounds of k-dependent arrays in the parallel case
! number of kpoint blocks, kpoints per pool and reminder
!
nkl = nbnd / nimage
nkr = nbnd - nkl * nimage
!
! the reminder goes to the first nkr pools (0...nkr-1)
!
IF (my_image_id < nkr ) nkl = nkl + 1
!
! the index of the first k point in this pool
!
lower_bnd = my_image_id * nkl + 1
IF ( my_image_id >= nkr ) lower_bnd = my_image_id * nkl + 1 + nkr
!
! the index of the last k point in this pool
!
upper_bnd = lower_bnd + nkl - 1
!
#else
!
! In serial the definitions are much easier
!
lower_bnd = 1
upper_bnd = nbnd
!
#endif
!
RETURN
!
END SUBROUTINE fkbounds_bnd
!
!-----------------------------------------------------------------------

View File

@ -1,179 +1,713 @@
a2f.o : ../../Modules/cell_base.o
a2f.o : ../../Modules/io_files.o
a2f.o : ../../Modules/io_global.o
a2f.o : ../../Modules/kind.o
a2f.o : ../../Modules/mp_world.o
a2f.o : ../../PHonon/PH/phcom.o
a2f.o : ../../UtilXlib/mp.o
a2f.o : constants_epw.o
a2f.o : elph2.o
a2f.o : epwcom.o
a2f.o : io_epw.o
allocate_epwq.o : ../../LR_Modules/lrcom.o
allocate_epwq.o : ../../Modules/becmod.o
allocate_epwq.o : ../../Modules/fft_base.o
allocate_epwq.o : ../../Modules/ions_base.o
allocate_epwq.o : ../../Modules/noncol.o
allocate_epwq.o : ../../Modules/recvec.o
allocate_epwq.o : ../../Modules/uspp.o
allocate_epwq.o : ../../PHonon/PH/phcom.o
allocate_epwq.o : ../../PW/src/pwcom.o
allocate_epwq.o : elph2.o
allocate_epwq.o : epwcom.o
allocate_epwq.o : transportcom.o
bcast_epw_input.o : ../../LR_Modules/lrcom.o
bcast_epw_input.o : ../../Modules/control_flags.o
bcast_epw_input.o : ../../Modules/io_files.o
bcast_epw_input.o : ../../Modules/io_global.o
bcast_epw_input.o : ../../Modules/ions_base.o
bcast_epw_input.o : ../../Modules/mp_world.o
bcast_epw_input.o : ../../PHonon/PH/phcom.o
bcast_epw_input.o : ../../UtilXlib/mp.o
bcast_epw_input.o : elph2.o
bcast_epw_input.o : epwcom.o
bloch2wan.o : ../../Modules/cell_base.o
bloch2wan.o : ../../Modules/io_files.o
bloch2wan.o : ../../Modules/io_global.o
bloch2wan.o : ../../Modules/ions_base.o
bloch2wan.o : ../../Modules/kind.o
bloch2wan.o : ../../Modules/mp_global.o
bloch2wan.o : ../../Modules/mp_world.o
bloch2wan.o : ../../PHonon/PH/phcom.o
bloch2wan.o : ../../UtilXlib/mp.o
bloch2wan.o : constants_epw.o
bloch2wan.o : elph2.o
bloch2wan.o : epwcom.o
bloch2wan.o : io_epw.o
broyden.o : ../../Modules/kind.o
broyden.o : eliashbergcom.o
broyden.o : epwcom.o
close_epw.o : ../../LR_Modules/lrcom.o
close_epw.o : ../../Modules/becmod.o
close_epw.o : ../../Modules/io_files.o
close_epw.o : ../../Modules/kind.o
close_epw.o : ../../Modules/mp_global.o
close_epw.o : ../../Modules/noncol.o
close_epw.o : ../../PHonon/PH/phcom.o
close_epw.o : ../../PW/src/pwcom.o
close_epw.o : ../../UtilXlib/parallel_include.o
close_epw.o : elph2.o
close_epw.o : epwcom.o
close_epw.o : io_epw.o
close_epw.o : transportcom.o
constants_epw.o : ../../Modules/kind.o
createkmap.o : ../../Modules/cell_base.o
createkmap.o : ../../Modules/constants.o
createkmap.o : ../../Modules/control_flags.o
createkmap.o : ../../Modules/fft_base.o
createkmap.o : ../../Modules/io_files.o
createkmap.o : ../../Modules/io_global.o
createkmap.o : ../../Modules/kind.o
createkmap.o : ../../Modules/mp_global.o
createkmap.o : ../../Modules/mp_world.o
createkmap.o : ../../Modules/recvec.o
createkmap.o : ../../PW/src/pwcom.o
createkmap.o : ../../PW/src/start_k.o
createkmap.o : ../../UtilXlib/mp.o
createkmap.o : elph2.o
createkmap.o : epwcom.o
createkmap.o : kfold.o
deallocate_epw.o : elph2.o
deallocate_epw.o : epwcom.o
division.o : ../../Modules/mp_global.o
division.o : ../../Modules/mp_images.o
division.o : ../../PW/src/pwcom.o
division.o : ../../UtilXlib/parallel_include.o
dvanqq2.o : ../../FFTXlib/fft_interfaces.o
dvanqq2.o : ../../LR_Modules/lrcom.o
dvanqq2.o : ../../Modules/cell_base.o
dvanqq2.o : ../../Modules/fft_base.o
dvanqq2.o : ../../Modules/ions_base.o
dvanqq2.o : ../../Modules/kind.o
dvanqq2.o : ../../Modules/mp_global.o
dvanqq2.o : ../../Modules/noncol.o
dvanqq2.o : ../../Modules/recvec.o
dvanqq2.o : ../../Modules/uspp.o
dvanqq2.o : ../../PHonon/PH/phcom.o
dvanqq2.o : ../../PW/src/pwcom.o
dvanqq2.o : ../../PW/src/scf_mod.o
dvanqq2.o : ../../UtilXlib/mp.o
dvqpsi_us3.o : ../../FFTXlib/fft_interfaces.o
dvqpsi_us3.o : ../../LR_Modules/lrcom.o
dvqpsi_us3.o : ../../Modules/cell_base.o
dvqpsi_us3.o : ../../Modules/fft_base.o
dvqpsi_us3.o : ../../Modules/ions_base.o
dvqpsi_us3.o : ../../Modules/kind.o
dvqpsi_us3.o : ../../Modules/noncol.o
dvqpsi_us3.o : ../../Modules/recvec.o
dvqpsi_us3.o : ../../Modules/uspp.o
dvqpsi_us3.o : ../../Modules/wavefunctions.o
dvqpsi_us3.o : ../../PHonon/PH/phcom.o
dvqpsi_us3.o : ../../PW/src/pwcom.o
dvqpsi_us3.o : elph2.o
dvqpsi_us_only3.o : ../../LR_Modules/lrcom.o
dvqpsi_us_only3.o : ../../Modules/cell_base.o
dvqpsi_us_only3.o : ../../Modules/ions_base.o
dvqpsi_us_only3.o : ../../Modules/kind.o
dvqpsi_us_only3.o : ../../Modules/noncol.o
dvqpsi_us_only3.o : ../../Modules/recvec.o
dvqpsi_us_only3.o : ../../Modules/uspp.o
dvqpsi_us_only3.o : ../../PHonon/PH/phcom.o
dvqpsi_us_only3.o : ../../PW/src/pwcom.o
dvqpsi_us_only3.o : elph2.o
eliashberg.o : ../../Modules/io_global.o
eliashberg.o : eliashbergcom.o
eliashberg.o : epwcom.o
eliashberg.o : io_eliashberg.o
eliashberg.o : superconductivity.o
eliashberg.o : superconductivity_aniso.o
eliashberg.o : superconductivity_iso.o
eliashbergcom.o : ../../Modules/kind.o
elph2.o : ../../Modules/kind.o
elphel2_shuffle.o : ../../LR_Modules/lrcom.o
elphel2_shuffle.o : ../../Modules/becmod.o
elphel2_shuffle.o : ../../Modules/cell_base.o
elphel2_shuffle.o : ../../Modules/control_flags.o
elphel2_shuffle.o : ../../Modules/fft_base.o
elphel2_shuffle.o : ../../Modules/io_files.o
elphel2_shuffle.o : ../../Modules/io_global.o
elphel2_shuffle.o : ../../Modules/kind.o
elphel2_shuffle.o : ../../Modules/mp_global.o
elphel2_shuffle.o : ../../Modules/noncol.o
elphel2_shuffle.o : ../../Modules/recvec.o
elphel2_shuffle.o : ../../Modules/uspp.o
elphel2_shuffle.o : ../../Modules/wavefunctions.o
elphel2_shuffle.o : ../../PHonon/PH/phcom.o
elphel2_shuffle.o : ../../PW/src/pwcom.o
elphel2_shuffle.o : ../../PW/src/symm_base.o
elphel2_shuffle.o : ../../UtilXlib/mp.o
elphel2_shuffle.o : constants_epw.o
elphel2_shuffle.o : division.o
elphel2_shuffle.o : elph2.o
elphon_shuffle.o : ../../FFTXlib/fft_interfaces.o
elphon_shuffle.o : ../../Modules/fft_base.o
elphon_shuffle.o : ../../Modules/kind.o
elphon_shuffle.o : ../../Modules/mp_global.o
elphon_shuffle.o : ../../Modules/mp_images.o
elphon_shuffle.o : ../../Modules/noncol.o
elphon_shuffle.o : ../../Modules/recvec.o
elphon_shuffle.o : ../../PHonon/PH/phcom.o
elphon_shuffle.o : ../../PW/src/pwcom.o
elphon_shuffle.o : ../../UtilXlib/mp.o
elphon_shuffle.o : constants_epw.o
elphon_shuffle.o : elph2.o
elphon_shuffle_wrap.o : ../../LR_Modules/lrcom.o
elphon_shuffle_wrap.o : ../../Modules/cell_base.o
elphon_shuffle_wrap.o : ../../Modules/control_flags.o
elphon_shuffle_wrap.o : ../../Modules/fft_base.o
elphon_shuffle_wrap.o : ../../Modules/io_files.o
elphon_shuffle_wrap.o : ../../Modules/io_global.o
elphon_shuffle_wrap.o : ../../Modules/ions_base.o
elphon_shuffle_wrap.o : ../../Modules/kind.o
elphon_shuffle_wrap.o : ../../Modules/mp_global.o
elphon_shuffle_wrap.o : ../../Modules/mp_images.o
elphon_shuffle_wrap.o : ../../Modules/mp_world.o
elphon_shuffle_wrap.o : ../../Modules/noncol.o
elphon_shuffle_wrap.o : ../../Modules/recvec.o
elphon_shuffle_wrap.o : ../../Modules/uspp.o
elphon_shuffle_wrap.o : ../../Modules/wavefunctions.o
elphon_shuffle_wrap.o : ../../PHonon/PH/phcom.o
elphon_shuffle_wrap.o : ../../PW/src/pwcom.o
elphon_shuffle_wrap.o : ../../PW/src/start_k.o
elphon_shuffle_wrap.o : ../../PW/src/symm_base.o
elphon_shuffle_wrap.o : ../../UtilXlib/mp.o
elphon_shuffle_wrap.o : ../../iotk/src/iotk_module.o
elphon_shuffle_wrap.o : constants_epw.o
elphon_shuffle_wrap.o : elph2.o
elphon_shuffle_wrap.o : epwcom.o
elphon_shuffle_wrap.o : io_epw.o
ephwann_shuffle.o : ../../Modules/cell_base.o
ephwann_shuffle.o : ../../Modules/constants.o
ephwann_shuffle.o : ../../Modules/io_files.o
ephwann_shuffle.o : ../../Modules/io_global.o
ephwann_shuffle.o : ../../Modules/ions_base.o
ephwann_shuffle.o : ../../Modules/kind.o
ephwann_shuffle.o : ../../Modules/mp_global.o
ephwann_shuffle.o : ../../Modules/mp_world.o
ephwann_shuffle.o : ../../Modules/noncol.o
ephwann_shuffle.o : ../../PHonon/PH/phcom.o
ephwann_shuffle.o : ../../PW/src/pwcom.o
ephwann_shuffle.o : ../../PW/src/start_k.o
ephwann_shuffle.o : ../../UtilXlib/mp.o
ephwann_shuffle.o : ../../UtilXlib/parallel_include.o
ephwann_shuffle.o : bloch2wan.o
ephwann_shuffle.o : close_epw.o
ephwann_shuffle.o : constants_epw.o
ephwann_shuffle.o : division.o
ephwann_shuffle.o : elph2.o
ephwann_shuffle.o : epwcom.o
ephwann_shuffle.o : io_eliashberg.o
ephwann_shuffle.o : io_epw.o
ephwann_shuffle.o : io_scattering.o
ephwann_shuffle.o : printing.o
ephwann_shuffle.o : transport.o
ephwann_shuffle.o : transport_iter.o
ephwann_shuffle.o : transportcom.o
ephwann_shuffle.o : wan2bloch.o
ephwann_shuffle.o : wigner.o
ephwann_shuffle_mem.o : ../../Modules/cell_base.o
ephwann_shuffle_mem.o : ../../Modules/io_files.o
ephwann_shuffle_mem.o : ../../Modules/io_global.o
ephwann_shuffle_mem.o : ../../Modules/ions_base.o
ephwann_shuffle_mem.o : ../../Modules/kind.o
ephwann_shuffle_mem.o : ../../Modules/mp_global.o
ephwann_shuffle_mem.o : ../../Modules/mp_world.o
ephwann_shuffle_mem.o : ../../Modules/noncol.o
ephwann_shuffle_mem.o : ../../PHonon/PH/phcom.o
ephwann_shuffle_mem.o : ../../PW/src/pwcom.o
ephwann_shuffle_mem.o : ../../PW/src/start_k.o
ephwann_shuffle_mem.o : ../../UtilXlib/mp.o
ephwann_shuffle_mem.o : ../../UtilXlib/parallel_include.o
ephwann_shuffle_mem.o : bloch2wan.o
ephwann_shuffle_mem.o : close_epw.o
ephwann_shuffle_mem.o : constants_epw.o
ephwann_shuffle_mem.o : division.o
ephwann_shuffle_mem.o : elph2.o
ephwann_shuffle_mem.o : epwcom.o
ephwann_shuffle_mem.o : io_eliashberg.o
ephwann_shuffle_mem.o : io_epw.o
ephwann_shuffle_mem.o : io_scattering.o
ephwann_shuffle_mem.o : printing.o
ephwann_shuffle_mem.o : transport.o
ephwann_shuffle_mem.o : transport_iter.o
ephwann_shuffle_mem.o : transportcom.o
ephwann_shuffle_mem.o : wan2bloch.o
ephwann_shuffle_mem.o : wigner.o
epw.o : ../../Modules/control_flags.o
epw.o : ../../Modules/environment.o
epw.o : ../../Modules/io_global.o
epw.o : ../../Modules/mp_global.o
epw.o : ../../Modules/mp_world.o
epw.o : ../../Modules/version.o
epw.o : ../../UtilXlib/mp.o
epw.o : close_epw.o
epw.o : elph2.o
epw.o : epwcom.o
epw_init.o : ../../LR_Modules/lrcom.o
epw_init.o : ../../Modules/atom.o
epw_init.o : ../../Modules/becmod.o
epw_init.o : ../../Modules/cell_base.o
epw_init.o : ../../Modules/constants.o
epw_init.o : ../../Modules/fft_base.o
epw_init.o : ../../Modules/gvecw.o
epw_init.o : ../../Modules/ions_base.o
epw_init.o : ../../Modules/kind.o
epw_init.o : ../../Modules/mp_global.o
epw_init.o : ../../Modules/noncol.o
epw_init.o : ../../Modules/recvec.o
epw_init.o : ../../Modules/uspp.o
epw_init.o : ../../Modules/wavefunctions.o
epw_init.o : ../../PHonon/PH/phcom.o
epw_init.o : ../../PW/src/pwcom.o
epw_init.o : ../../UtilXlib/mp.o
epw_init.o : elph2.o
epw_readin.o : ../../LR_Modules/lrcom.o
epw_readin.o : ../../Modules/check_stop.o
epw_readin.o : ../../Modules/constants.o
epw_readin.o : ../../Modules/control_flags.o
epw_readin.o : ../../Modules/io_files.o
epw_readin.o : ../../Modules/io_global.o
epw_readin.o : ../../Modules/ions_base.o
epw_readin.o : ../../Modules/mp_global.o
epw_readin.o : ../../Modules/mp_world.o
epw_readin.o : ../../PHonon/PH/phcom.o
epw_readin.o : ../../PW/src/pwcom.o
epw_readin.o : ../../PW/src/start_k.o
epw_readin.o : ../../UtilXlib/mp.o
epw_readin.o : constants_epw.o
epw_readin.o : elph2.o
epw_readin.o : epwcom.o
epw_setup.o : ../../LR_Modules/lrcom.o
epw_setup.o : ../../Modules/cell_base.o
epw_setup.o : ../../Modules/constants.o
epw_setup.o : ../../Modules/control_flags.o
epw_setup.o : ../../Modules/fft_base.o
epw_setup.o : ../../Modules/funct.o
epw_setup.o : ../../Modules/io_files.o
epw_setup.o : ../../Modules/io_global.o
epw_setup.o : ../../Modules/ions_base.o
epw_setup.o : ../../Modules/kind.o
epw_setup.o : ../../Modules/mp_global.o
epw_setup.o : ../../Modules/mp_pools.o
epw_setup.o : ../../Modules/noncol.o
epw_setup.o : ../../Modules/recvec.o
epw_setup.o : ../../Modules/uspp.o
epw_setup.o : ../../PHonon/PH/phcom.o
epw_setup.o : ../../PW/src/pwcom.o
epw_setup.o : ../../PW/src/scf_mod.o
epw_setup.o : ../../PW/src/start_k.o
epw_setup.o : ../../PW/src/symm_base.o
epw_setup.o : ../../UtilXlib/mp.o
epw_setup.o : constants_epw.o
epw_setup.o : epwcom.o
epw_setup.o : transportcom.o
epw_summary.o : ../../LR_Modules/lrcom.o
epw_summary.o : ../../Modules/cell_base.o
epw_summary.o : ../../Modules/control_flags.o
epw_summary.o : ../../Modules/fft_base.o
epw_summary.o : ../../Modules/funct.o
epw_summary.o : ../../Modules/gvecw.o
epw_summary.o : ../../Modules/io_global.o
epw_summary.o : ../../Modules/ions_base.o
epw_summary.o : ../../Modules/noncol.o
epw_summary.o : ../../Modules/recvec.o
epw_summary.o : ../../PHonon/PH/phcom.o
epw_summary.o : ../../PW/src/pwcom.o
epw_summary.o : ../../PW/src/symm_base.o
epw_summary.o : epwcom.o
epwcom.o : ../../Modules/kind.o
epwcom.o : ../../Modules/parameters.o
fermiwindow.o : ../../Modules/io_global.o
fermiwindow.o : ../../Modules/kind.o
fermiwindow.o : ../../Modules/mp_global.o
fermiwindow.o : ../../PW/src/pwcom.o
fermiwindow.o : ../../UtilXlib/mp.o
fermiwindow.o : elph2.o
fermiwindow.o : epwcom.o
gmap_sym.o : ../../Modules/fft_base.o
gmap_sym.o : ../../Modules/kind.o
gmap_sym.o : ../../Modules/recvec.o
gmap_sym.o : constants_epw.o
indabs.o : ../../Modules/cell_base.o
indabs.o : ../../Modules/io_global.o
indabs.o : ../../Modules/kind.o
indabs.o : ../../Modules/mp_global.o
indabs.o : ../../PHonon/PH/phcom.o
indabs.o : ../../UtilXlib/mp.o
indabs.o : constants_epw.o
indabs.o : elph2.o
indabs.o : epwcom.o
indabs.o : io_epw.o
indabs.o : transportcom.o
io_dyn_mat2.o : ../../Modules/io_global.o
io_dyn_mat2.o : ../../Modules/kind.o
io_dyn_mat2.o : ../../Modules/mp_images.o
io_dyn_mat2.o : ../../iotk/src/iotk_module.o
io_eliashberg.o : ../../Modules/cell_base.o
io_eliashberg.o : ../../Modules/control_flags.o
io_eliashberg.o : ../../Modules/io_files.o
io_eliashberg.o : ../../Modules/io_global.o
io_eliashberg.o : ../../Modules/kind.o
io_eliashberg.o : ../../Modules/mp_global.o
io_eliashberg.o : ../../Modules/mp_world.o
io_eliashberg.o : ../../PHonon/PH/phcom.o
io_eliashberg.o : ../../PW/src/pwcom.o
io_eliashberg.o : ../../PW/src/symm_base.o
io_eliashberg.o : ../../UtilXlib/mp.o
io_eliashberg.o : constants_epw.o
io_eliashberg.o : division.o
io_eliashberg.o : eliashbergcom.o
io_eliashberg.o : elph2.o
io_eliashberg.o : epwcom.o
io_eliashberg.o : io_epw.o
io_eliashberg.o : superconductivity.o
io_scattering.o : ../../Modules/io_files.o
io_scattering.o : ../../Modules/io_global.o
io_scattering.o : ../../Modules/kind.o
io_scattering.o : ../../Modules/mp_global.o
io_scattering.o : ../../Modules/mp_world.o
io_scattering.o : ../../UtilXlib/mp.o
io_scattering.o : ../../UtilXlib/parallel_include.o
io_scattering.o : constants_epw.o
io_scattering.o : elph2.o
io_scattering.o : epwcom.o
io_scattering.o : io_epw.o
io_scattering.o : transportcom.o
kfold.o : ../../Modules/kind.o
kpoint_grid_epw.o : ../../Modules/kind.o
ktokpmq.o : ../../Modules/cell_base.o
ktokpmq.o : ../../Modules/kind.o
ktokpmq.o : ../../Modules/mp_global.o
ktokpmq.o : ../../Modules/mp_images.o
ktokpmq.o : ../../PW/src/pwcom.o
ktokpmq.o : ../../PW/src/start_k.o
ktokpmq.o : ../../UtilXlib/mp.o
ktokpmq.o : elph2.o
ktokpmq.o : epwcom.o
load_rebal.o : ../../Modules/io_global.o
load_rebal.o : ../../Modules/kind.o
load_rebal.o : ../../Modules/mp_global.o
load_rebal.o : ../../PW/src/pwcom.o
load_rebal.o : constants_epw.o
load_rebal.o : elph2.o
load_rebal.o : epwcom.o
load_rebal.o : transportcom.o
loadkmesh.o : ../../Modules/cell_base.o
loadkmesh.o : ../../Modules/io_global.o
loadkmesh.o : ../../Modules/kind.o
loadkmesh.o : ../../Modules/mp_global.o
loadkmesh.o : ../../Modules/mp_world.o
loadkmesh.o : ../../Modules/noncol.o
loadkmesh.o : ../../PW/src/symm_base.o
loadkmesh.o : ../../UtilXlib/mp.o
loadkmesh.o : elph2.o
loadkmesh.o : epwcom.o
loadkmesh.o : io_epw.o
loadqmesh.o : ../../Modules/cell_base.o
loadqmesh.o : ../../Modules/io_global.o
loadqmesh.o : ../../Modules/kind.o
loadqmesh.o : ../../Modules/mp_global.o
loadqmesh.o : ../../Modules/mp_world.o
loadqmesh.o : ../../Modules/noncol.o
loadqmesh.o : ../../PW/src/symm_base.o
loadqmesh.o : ../../UtilXlib/mp.o
loadqmesh.o : elph2.o
loadqmesh.o : epwcom.o
loadqmesh.o : io_epw.o
loadumat.o : ../../Modules/io_global.o
loadumat.o : ../../Modules/kind.o
loadumat.o : ../../Modules/mp_global.o
loadumat.o : ../../UtilXlib/mp.o
loadumat.o : constants_epw.o
loadumat.o : epwcom.o
loadumat.o : io_epw.o
nesting_fn.o : ../../Modules/io_global.o
nesting_fn.o : ../../Modules/kind.o
nesting_fn.o : ../../Modules/mp_global.o
nesting_fn.o : ../../Modules/mp_world.o
nesting_fn.o : ../../PW/src/pwcom.o
nesting_fn.o : ../../UtilXlib/mp.o
nesting_fn.o : constants_epw.o
nesting_fn.o : division.o
nesting_fn.o : elph2.o
nesting_fn.o : epwcom.o
openfilepw.o : ../../LR_Modules/lrcom.o
openfilepw.o : ../../Modules/fft_base.o
openfilepw.o : ../../Modules/io_files.o
openfilepw.o : ../../Modules/noncol.o
openfilepw.o : ../../PHonon/PH/phcom.o
openfilepw.o : ../../PW/src/pwcom.o
plot_band.o : ../../Modules/cell_base.o
plot_band.o : ../../Modules/io_global.o
plot_band.o : ../../Modules/kind.o
plot_band.o : ../../Modules/mp_global.o
plot_band.o : ../../PHonon/PH/phcom.o
plot_band.o : ../../UtilXlib/mp.o
plot_band.o : constants_epw.o
plot_band.o : elph2.o
plot_band.o : epwcom.o
plot_band.o : io_epw.o
print_gkk.o : constants_epw.o
print_gkk.o : elph2.o
print_gkk.o : epwcom.o
poolgather.o : ../../Modules/kind.o
poolgather.o : ../../Modules/mp_global.o
poolgather.o : ../../UtilXlib/mp.o
print_ibte.o : ../../Modules/cell_base.o
print_ibte.o : ../../Modules/io_files.o
print_ibte.o : ../../Modules/io_global.o
print_ibte.o : ../../Modules/kind.o
print_ibte.o : ../../Modules/mp_global.o
print_ibte.o : ../../PHonon/PH/phcom.o
print_ibte.o : ../../PW/src/pwcom.o
print_ibte.o : ../../UtilXlib/mp.o
print_ibte.o : ../../UtilXlib/parallel_include.o
print_ibte.o : constants_epw.o
print_ibte.o : elph2.o
print_ibte.o : epwcom.o
print_ibte.o : io_epw.o
print_ibte.o : transportcom.o
printing.o : ../../Modules/cell_base.o
printing.o : ../../Modules/io_global.o
printing.o : ../../Modules/kind.o
printing.o : ../../Modules/mp_global.o
printing.o : ../../Modules/mp_world.o
printing.o : ../../Modules/noncol.o
printing.o : ../../Modules/uspp.o
printing.o : ../../PHonon/PH/phcom.o
printing.o : ../../UtilXlib/mp.o
printing.o : constants_epw.o
printing.o : elph2.o
printing.o : epwcom.o
printing.o : transportcom.o
pw2wan90epw.o : ../../FFTXlib/fft_interfaces.o
pw2wan90epw.o : ../../FFTXlib/scatter_mod.o
pw2wan90epw.o : ../../LR_Modules/lrcom.o
pw2wan90epw.o : ../../Modules/becmod.o
pw2wan90epw.o : ../../Modules/cell_base.o
pw2wan90epw.o : ../../Modules/constants.o
pw2wan90epw.o : ../../Modules/fft_base.o
pw2wan90epw.o : ../../Modules/gvecw.o
pw2wan90epw.o : ../../Modules/invmat.o
pw2wan90epw.o : ../../Modules/io_files.o
pw2wan90epw.o : ../../Modules/io_global.o
pw2wan90epw.o : ../../Modules/ions_base.o
pw2wan90epw.o : ../../Modules/kind.o
pw2wan90epw.o : ../../Modules/mp_global.o
pw2wan90epw.o : ../../Modules/mp_world.o
pw2wan90epw.o : ../../Modules/noncol.o
pw2wan90epw.o : ../../Modules/random_numbers.o
pw2wan90epw.o : ../../Modules/recvec.o
pw2wan90epw.o : ../../Modules/uspp.o
pw2wan90epw.o : ../../Modules/wavefunctions.o
pw2wan90epw.o : ../../PW/src/pwcom.o
pw2wan90epw.o : ../../UtilXlib/mp.o
pw2wan90epw.o : constants_epw.o
pw2wan90epw.o : elph2.o
pw2wan90epw.o : epwcom.o
pw2wan90epw.o : io_epw.o
pw2wan90epw.o : wannierEPW.o
readdvscf.o : ../../Modules/fft_base.o
readdvscf.o : ../../Modules/io_files.o
readdvscf.o : ../../Modules/kind.o
readdvscf.o : ../../Modules/noncol.o
readdvscf.o : ../../PHonon/PH/phcom.o
readdvscf.o : ../../PW/src/pwcom.o
readdvscf.o : epwcom.o
readdvscf.o : io_epw.o
readgmap.o : ../../Modules/io_files.o
readgmap.o : ../../Modules/io_global.o
readgmap.o : ../../Modules/kind.o
readgmap.o : ../../Modules/mp_global.o
readgmap.o : ../../PW/src/pwcom.o
readgmap.o : ../../UtilXlib/mp.o
readgmap.o : elph2.o
readgmap.o : io_epw.o
readmat_shuffle2.o : ../../Modules/cell_base.o
readmat_shuffle2.o : ../../Modules/control_flags.o
readmat_shuffle2.o : ../../Modules/io_files.o
readmat_shuffle2.o : ../../Modules/io_global.o
readmat_shuffle2.o : ../../Modules/ions_base.o
readmat_shuffle2.o : ../../Modules/kind.o
readmat_shuffle2.o : ../../Modules/mp_global.o
readmat_shuffle2.o : ../../Modules/mp_world.o
readmat_shuffle2.o : ../../Modules/noncol.o
readmat_shuffle2.o : ../../PHonon/PH/phcom.o
readmat_shuffle2.o : ../../PW/src/symm_base.o
readmat_shuffle2.o : ../../UtilXlib/mp.o
readmat_shuffle2.o : constants_epw.o
readmat_shuffle2.o : elph2.o
readmat_shuffle2.o : epwcom.o
readmat_shuffle2.o : io_dyn_mat2.o
readmat_shuffle2.o : io_epw.o
readmat_shuffle2.o : wan2bloch.o
readwfc.o : ../../LR_Modules/lrcom.o
readwfc.o : ../../Modules/io_files.o
readwfc.o : ../../Modules/kind.o
readwfc.o : ../../Modules/mp_global.o
readwfc.o : ../../Modules/noncol.o
readwfc.o : ../../PW/src/pwcom.o
refold.o : ../../Modules/io_global.o
refold.o : io_epw.o
refold.o : kfold.o
rgd_blk_epw_fine_mem.o : ../../Modules/cell_base.o
rgd_blk_epw_fine_mem.o : ../../Modules/ions_base.o
rgd_blk_epw_fine_mem.o : ../../Modules/kind.o
rgd_blk_epw_fine_mem.o : constants_epw.o
rgd_blk_epw_fine_mem.o : epwcom.o
rigid_epw.o : ../../Modules/cell_base.o
rigid_epw.o : ../../Modules/io_global.o
rigid_epw.o : ../../Modules/ions_base.o
rigid_epw.o : ../../Modules/kind.o
rigid_epw.o : constants_epw.o
rigid_epw.o : epwcom.o
rotate_eigenm.o : ../../Modules/cell_base.o
rotate_eigenm.o : ../../Modules/control_flags.o
rotate_eigenm.o : ../../Modules/io_global.o
rotate_eigenm.o : ../../Modules/ions_base.o
rotate_eigenm.o : ../../Modules/kind.o
rotate_eigenm.o : ../../PHonon/PH/phcom.o
rotate_eigenm.o : constants_epw.o
rotate_eigenm.o : elph2.o
rotate_epmat.o : ../../Modules/ions_base.o
rotate_epmat.o : ../../Modules/kind.o
rotate_epmat.o : ../../PHonon/PH/phcom.o
rotate_epmat.o : ../../PW/src/pwcom.o
rotate_epmat.o : constants_epw.o
rotate_epmat.o : elph2.o
rotate_epmat.o : epwcom.o
selfen_elec.o : ../../Modules/control_flags.o
selfen_elec.o : ../../Modules/io_global.o
selfen_elec.o : ../../Modules/kind.o
selfen_elec.o : ../../Modules/mp_global.o
selfen_elec.o : ../../Modules/mp_world.o
selfen_elec.o : ../../PHonon/PH/phcom.o
selfen_elec.o : ../../PW/src/pwcom.o
selfen_elec.o : ../../UtilXlib/mp.o
selfen_elec.o : constants_epw.o
selfen_elec.o : elph2.o
selfen_elec.o : epwcom.o
selfen_elec.o : io_epw.o
selfen_elec.o : io_scattering.o
selfen_elec.o : transportcom.o
selfen_phon.o : ../../Modules/io_global.o
selfen_phon.o : ../../Modules/kind.o
selfen_phon.o : ../../Modules/mp_global.o
selfen_phon.o : ../../PHonon/PH/phcom.o
selfen_phon.o : ../../PW/src/pwcom.o
selfen_phon.o : ../../UtilXlib/mp.o
selfen_phon.o : constants_epw.o
selfen_phon.o : elph2.o
selfen_phon.o : epwcom.o
selfen_pl.o : ../../Modules/cell_base.o
selfen_pl.o : ../../Modules/io_global.o
selfen_pl.o : ../../Modules/kind.o
selfen_pl.o : ../../Modules/mp_global.o
selfen_pl.o : ../../PW/src/pwcom.o
selfen_pl.o : ../../UtilXlib/mp.o
selfen_pl.o : constants_epw.o
selfen_pl.o : division.o
selfen_pl.o : elph2.o
selfen_pl.o : epwcom.o
selfen_pl.o : io_epw.o
setphases.o : ../../FFTXlib/fft_interfaces.o
setphases.o : ../../LR_Modules/lrcom.o
setphases.o : ../../Modules/cell_base.o
setphases.o : ../../Modules/control_flags.o
setphases.o : ../../Modules/fft_base.o
setphases.o : ../../Modules/io_global.o
setphases.o : ../../Modules/kind.o
setphases.o : ../../Modules/mp_global.o
setphases.o : ../../Modules/recvec.o
setphases.o : ../../Modules/wavefunctions.o
setphases.o : ../../PHonon/PH/phcom.o
setphases.o : ../../PW/src/pwcom.o
setphases.o : ../../UtilXlib/mp.o
setphases.o : constants_epw.o
setphases_wrap.o : ../../Modules/io_global.o
setphases_wrap.o : ../../Modules/kind.o
setphases_wrap.o : ../../Modules/mp_global.o
setphases_wrap.o : ../../PW/src/pwcom.o
setphases_wrap.o : ../../UtilXlib/mp.o
setphases_wrap.o : elph2.o
sgama2.o : ../../Modules/constants.o
sgama2.o : ../../Modules/io_global.o
sgama2.o : ../../Modules/kind.o
sort.o : ../../Modules/kind.o
spectral_cumulant.o : ../../Modules/io_global.o
spectral_cumulant.o : ../../Modules/kind.o
spectral_cumulant.o : constants_epw.o
spectral_cumulant.o : elph2.o
spectral_cumulant.o : epwcom.o
spectral_cumulant.o : io_epw.o
spectral_func.o : ../../Modules/io_global.o
spectral_func.o : ../../Modules/kind.o
spectral_func.o : ../../Modules/mp_global.o
spectral_func.o : ../../PHonon/PH/phcom.o
spectral_func.o : ../../PW/src/pwcom.o
spectral_func.o : ../../UtilXlib/mp.o
spectral_func.o : constants_epw.o
spectral_func.o : division.o
spectral_func.o : elph2.o
spectral_func.o : epwcom.o
spectral_func.o : io_epw.o
spectral_func_ph.o : ../../Modules/io_global.o
spectral_func_ph.o : ../../Modules/kind.o
spectral_func_ph.o : ../../Modules/mp_global.o
spectral_func_ph.o : ../../Modules/mp_world.o
spectral_func_ph.o : ../../PHonon/PH/phcom.o
spectral_func_ph.o : ../../PW/src/pwcom.o
spectral_func_ph.o : ../../UtilXlib/mp.o
spectral_func_ph.o : constants_epw.o
spectral_func_ph.o : elph2.o
spectral_func_ph.o : epwcom.o
spectral_func_ph.o : io_epw.o
spectral_func_pl.o : ../../Modules/cell_base.o
spectral_func_pl.o : ../../Modules/io_global.o
spectral_func_pl.o : ../../Modules/kind.o
spectral_func_pl.o : ../../Modules/mp_global.o
spectral_func_pl.o : ../../PW/src/pwcom.o
spectral_func_pl.o : ../../UtilXlib/mp.o
spectral_func_pl.o : constants_epw.o
spectral_func_pl.o : division.o
spectral_func_pl.o : elph2.o
spectral_func_pl.o : epwcom.o
spectral_func_pl.o : io_epw.o
star_q2.o : ../../Modules/io_global.o
star_q2.o : ../../Modules/kind.o
stop_epw.o : ../../Modules/io_global.o
stop_epw.o : ../../Modules/mp_global.o
stop_epw.o : ../../UtilXlib/mp.o
stop_epw.o : printing.o
superconductivity.o : ../../Modules/constants.o
superconductivity.o : ../../Modules/io_files.o
superconductivity.o : ../../Modules/io_global.o
superconductivity.o : ../../Modules/kind.o
superconductivity.o : ../../Modules/mp_global.o
superconductivity.o : ../../Modules/mp_world.o
superconductivity.o : ../../UtilXlib/mp.o
superconductivity.o : constants_epw.o
superconductivity.o : division.o
superconductivity.o : eliashbergcom.o
superconductivity.o : elph2.o
superconductivity.o : epwcom.o
superconductivity.o : io_epw.o
superconductivity_aniso.o : ../../Modules/cell_base.o
superconductivity_aniso.o : ../../Modules/control_flags.o
superconductivity_aniso.o : ../../Modules/io_files.o
superconductivity_aniso.o : ../../Modules/io_global.o
superconductivity_aniso.o : ../../Modules/kind.o
superconductivity_aniso.o : ../../Modules/mp_global.o
superconductivity_aniso.o : ../../Modules/mp_world.o
superconductivity_aniso.o : ../../PHonon/PH/phcom.o
superconductivity_aniso.o : ../../UtilXlib/mp.o
superconductivity_aniso.o : constants_epw.o
superconductivity_aniso.o : division.o
superconductivity_aniso.o : eliashbergcom.o
superconductivity_aniso.o : elph2.o
superconductivity_aniso.o : epwcom.o
@ -181,29 +715,88 @@ superconductivity_aniso.o : io_eliashberg.o
superconductivity_aniso.o : io_epw.o
superconductivity_aniso.o : superconductivity.o
superconductivity_aniso.o : superconductivity_iso.o
superconductivity_iso.o : ../../Modules/control_flags.o
superconductivity_iso.o : ../../Modules/io_files.o
superconductivity_iso.o : ../../Modules/io_global.o
superconductivity_iso.o : ../../Modules/kind.o
superconductivity_iso.o : ../../UtilXlib/mp.o
superconductivity_iso.o : constants_epw.o
superconductivity_iso.o : eliashbergcom.o
superconductivity_iso.o : epwcom.o
superconductivity_iso.o : io_eliashberg.o
superconductivity_iso.o : io_epw.o
superconductivity_iso.o : superconductivity.o
system_mem_usage.o : ../../Modules/io_global.o
system_mem_usage.o : io_epw.o
transport.o : ../../Modules/cell_base.o
transport.o : ../../Modules/io_files.o
transport.o : ../../Modules/io_global.o
transport.o : ../../Modules/kind.o
transport.o : ../../Modules/mp_global.o
transport.o : ../../Modules/mp_world.o
transport.o : ../../Modules/noncol.o
transport.o : ../../PHonon/PH/phcom.o
transport.o : ../../PW/src/pwcom.o
transport.o : ../../PW/src/symm_base.o
transport.o : ../../UtilXlib/mp.o
transport.o : constants_epw.o
transport.o : division.o
transport.o : elph2.o
transport.o : epwcom.o
transport.o : io_epw.o
transport.o : io_scattering.o
transport.o : transportcom.o
transport.o : wan2bloch.o
transport_iter.o : ../../Modules/cell_base.o
transport_iter.o : ../../Modules/io_files.o
transport_iter.o : ../../Modules/io_global.o
transport_iter.o : ../../Modules/kind.o
transport_iter.o : ../../Modules/mp_global.o
transport_iter.o : ../../Modules/mp_world.o
transport_iter.o : ../../Modules/noncol.o
transport_iter.o : ../../PHonon/PH/phcom.o
transport_iter.o : ../../PW/src/pwcom.o
transport_iter.o : ../../PW/src/symm_base.o
transport_iter.o : ../../UtilXlib/mp.o
transport_iter.o : ../../UtilXlib/parallel_include.o
transport_iter.o : constants_epw.o
transport_iter.o : division.o
transport_iter.o : elph2.o
transport_iter.o : epwcom.o
transport_iter.o : io_eliashberg.o
transport_iter.o : io_epw.o
transport_iter.o : io_scattering.o
transport_iter.o : printing.o
transport_iter.o : transportcom.o
transportcom.o : ../../Modules/kind.o
wan2bloch.o : ../../Modules/cell_base.o
wan2bloch.o : ../../Modules/io_files.o
wan2bloch.o : ../../Modules/io_global.o
wan2bloch.o : ../../Modules/ions_base.o
wan2bloch.o : ../../Modules/kind.o
wan2bloch.o : ../../Modules/mp_global.o
wan2bloch.o : ../../Modules/mp_world.o
wan2bloch.o : ../../PHonon/PH/phcom.o
wan2bloch.o : ../../PHonon/PH/rigid.o
wan2bloch.o : ../../UtilXlib/parallel_include.o
wan2bloch.o : constants_epw.o
wan2bloch.o : elph2.o
wan2bloch.o : epwcom.o
wan2bloch.o : io_epw.o
wannierEPW.o : ../../Modules/kind.o
wannierize.o : ../../Modules/io_files.o
wannierize.o : ../../Modules/io_global.o
wannierize.o : ../../Modules/ions_base.o
wannierize.o : ../../Modules/kind.o
wannierize.o : ../../Modules/mp_global.o
wannierize.o : ../../Modules/mp_world.o
wannierize.o : ../../PW/src/pwcom.o
wannierize.o : ../../PW/src/start_k.o
wannierize.o : ../../UtilXlib/mp.o
wannierize.o : constants_epw.o
wannierize.o : epwcom.o
wannierize.o : io_epw.o
wannierize.o : wannierEPW.o
wigner.o : ../../Modules/cell_base.o
wigner.o : ../../Modules/kind.o
wigner.o : constants_epw.o

View File

@ -7,7 +7,7 @@
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!-----------------------------------------------------------------------
subroutine nesting_fn_q (iq )
subroutine nesting_fn_q ( iqq, iq )
!-----------------------------------------------------------------------
!!
!! compute the imaginary part of the phonon self energy due to electron-
@ -37,6 +37,8 @@
!
implicit none
!
INTEGER, INTENT (in) :: iqq
!! Current q-point index from selecq
INTEGER, INTENT (in) :: iq
!! Current q-point index
!
@ -74,7 +76,7 @@
real(kind=DP), external :: efermig
!
!
IF (iq.eq.1) then
IF (iqq == 1) then
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Nesting Function in the double delta approx")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
@ -108,7 +110,7 @@
! N(Ef) in the equation for lambda is the DOS per spin
dosef = dosef / two
!
IF (iq.eq.1) then
IF (iqq == 1) then
WRITE (stdout, 100) degaussw0 * ryd2ev, ngaussw
WRITE (stdout, 101) dosef / ryd2ev, ef0 * ryd2ev
ENDIF
@ -184,224 +186,5 @@
101 format(5x,'DOS =',f10.6,' states/spin/eV/Unit Cell at Ef=',f10.6,' eV')
102 format(5x,' Nesting function (q)=',e15.6,' [Adimensional]')
!
end subroutine nesting_fn_q
END SUBROUTINE nesting_fn_q
!
!-----------------------------------------------------------------------
subroutine nesting_fn_k ( ik )
!-----------------------------------------------------------------------
!!
!! Compute the imaginary part of the phonon self energy due to electron-
!! phonon interaction in the Migdal approximation. This corresponds to
!! the phonon linewidth (half width). The phonon frequency is taken into
!! account in the energy selection rule.
!!
!-----------------------------------------------------------------------
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
USE epwcom, ONLY : nbndsub, fsthick, &
eptemp, ngaussw, degaussw, &
nsmear, delta_smear, efermi_read, fermi_energy
USE pwcom, ONLY : nelec, ef, isk
USE elph2, ONLY : ibndmax, ibndmin, etf, etf_k, &
wkf, xqf, wqf, nkqf, nqf, nqtotf, &
nkqtotf, xqf, gamma_nest
USE constants_epw, ONLY : ryd2ev, two, zero
#if defined(__NAG)
USE f90_unix_io, ONLY : flush
#endif
USE mp, ONLY : mp_barrier,mp_sum, mp_bcast
USE mp_global, ONLY : inter_pool_comm
USE mp_world, ONLY : mpime
USE io_global, ONLY : ionode_id
!
implicit none
!
INTEGER, INTENT (in) :: ik
!! Current k-point
!
! Work variables
INTEGER :: iq
!! Counter on the k-point index
INTEGER :: ikk
!! k-point index
INTEGER :: ikq
!! q-point index
INTEGER :: ibnd
!! Counter on bands
INTEGER :: jbnd
!! Counter on bands
INTEGER :: fermicount
!! Number of states on the Fermi surface
INTEGER :: ismear
!! Smearing for the Gaussian function
INTEGER :: lower_bnd
!! Upper bounds index after k or q paral
INTEGER :: upper_bnd
!! Upper bounds index after k or q paral
!
REAL(kind=DP) :: ekk
!! Eigen energy on the fine grid relative to the Fermi level
REAL(kind=DP) :: ekq
!! Eigen energy of k+q on the fine grid relative to the Fermi level
REAL(kind=DP) :: ef0
!! Fermi energy level
REAL(kind=DP) :: weight
!! Imaginary part of the phonhon self-energy factor
REAL(kind=DP) :: dosef
!! Density of state N(Ef)
REAL(kind=DP) :: w0g1
!! Dirac delta for the imaginary part of $\Sigma$
REAL(kind=DP) :: w0g2
!! Dirac delta for the imaginary part of $\Sigma$
!
REAL(kind=DP) :: w0gauss, degaussw0
REAL(kind=DP), external :: efermig_seq, dos_ef_seq
REAL(kind=DP), ALLOCATABLE :: xqf_all(:,:), wqf_all(:,:)
REAL(kind=DP), external :: efermig
!
!
IF (ik.eq.1) then
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Nesting Function in the double delta approx")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
!
IF ( fsthick.lt.1.d3 ) &
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
IF ( .not. ALLOCATED (gamma_nest) ) ALLOCATE( gamma_nest (nqtotf,nsmear) )
gamma_nest(:,:) = zero
ENDIF
! here we loop on smearing values
DO ismear = 1, nsmear
!
degaussw0 = (ismear-1)*delta_smear+degaussw
!
! Fermi level and corresponding DOS
!
! Note that the weights of k+q points must be set to zero here
! no spin-polarized calculation here
IF ( efermi_read ) THEN
ef0 = fermi_energy
ELSE
IF (mpime .eq. ionode_id) THEN
ef0 = efermig_seq(etf_k, nbndsub, nkqf, nelec, wkf, degaussw0, ngaussw, 0, isk)
ENDIF
CALL mp_bcast (ef0, ionode_id, inter_pool_comm)
ENDIF
!
IF (mpime .eq. ionode_id) THEN
dosef = dos_ef_seq (ngaussw, degaussw0, ef0, etf_k, wkf, nkqf, nbndsub)
! N(Ef) in the equation for lambda is the DOS per spin
dosef = dosef / two
ENDIF
CALL mp_bcast (dosef, ionode_id, inter_pool_comm)
!
IF (ik.eq.1) then
WRITE (stdout, 100) degaussw0 * ryd2ev, ngaussw
WRITE (stdout, 101) dosef / ryd2ev, ef0 * ryd2ev
ENDIF
!
! Find the bounds of q-dependent arrays in the parallel case in each pool
CALL fkbounds( nqtotf, lower_bnd, upper_bnd )
!
CALL start_clock('nesting')
!
fermicount = 0
!
DO iq = 1, nqf
!
ikq = 2 * iq
ikk = ikq - 1
!
! here we must have ef, not ef0, to be consistent with ephwann_shuffle
IF ( ( minval ( abs(etf (:, ikk) - ef) ) .lt. fsthick ) .and. &
( minval ( abs(etf (:, ikq) - ef) ) .lt. fsthick ) ) then
!
fermicount = fermicount + 1
!
DO ibnd = 1, ibndmax-ibndmin+1
!
ekk = etf (ibndmin-1+ibnd, ikk) - ef0
w0g1 = w0gauss ( ekk / degaussw0, 0) / degaussw0
!
DO jbnd = 1, ibndmax-ibndmin+1
!
ekq = etf (ibndmin-1+jbnd, ikq) - ef0
w0g2 = w0gauss ( ekq / degaussw0, 0) / degaussw0
!
! = k-point weight * [f(E_k) - f(E_k+q)]/ [E_k+q - E_k -w_q +id]
! This is the imaginary part of the phonon self-energy, sans the matrix elements
!
! weight = wkf (ikk) * (wgkk - wgkq) * &
! aimag ( cone / ( ekq - ekk - ci * degaussw ) )
!
! the below expression is positive-definite, but also an approximation
! which neglects some fine features
!
weight = wkf (ikk) * w0g1 * w0g2
!
gamma_nest(iq+lower_bnd-1,ismear) = gamma_nest(iq+lower_bnd-1,ismear) + weight
!
ENDDO ! jbnd
ENDDO ! ibnd
!
ENDIF ! endif fsthick
!
ENDDO ! loop on q
!
CALL stop_clock('nesting')
!
ENDDO !smears
!
IF ( ik .eq. (nkqtotf - nqtotf)) THEN
!
ALLOCATE ( xqf_all (3,nqtotf ),wqf_all (1,nqtotf) )
xqf_all(:,:) = zero
wqf_all(:,:) = zero
!
#if defined(__MPI)
!
! note that poolgather2 works with the doubled grid (k and k+q)
!
CALL poolgather2 ( 3, nqtotf, nqf, xqf, xqf_all )
CALL poolgather2 ( 1, nqtotf, nqf, wqf, wqf_all )
CALL mp_sum(gamma_nest, inter_pool_comm )
CALL mp_sum(fermicount, inter_pool_comm)
CALL mp_barrier(inter_pool_comm)
!
#else
!
xqf_all = xqf
DO iq = 1, nqtotf
wqf_all(1,iq) = wqf(iq)
ENDDO
!
#endif
DO ismear = 1, nsmear
degaussw0 = (ismear-1)*delta_smear+degaussw
WRITE(stdout,'(/5x,"smearing = ",f9.5)') degaussw0
DO iq = 1, nqtotf
WRITE(stdout,'(/5x,"iq = ",i5," coord.: ", 3f9.5, " wt: ", f9.5)') iq, xqf_all(:,iq), wqf_all(1,iq)
WRITE(stdout,'(5x,a)') repeat('-',67)
!
WRITE(stdout, 102) gamma_nest(iq,ismear)
WRITE(stdout,'(5x,a/)') repeat('-',67)
CALL flush(6)
!
WRITE( stdout, '(/5x,a,i8,a,i8/)' ) &
'Number of (k,k+q) pairs on the Fermi surface: ',fermicount, ' out of ', nkqtotf/2
!
ENDDO
!
ENDDO
!
endif
!
100 format(5x,'Gaussian Broadening: ',f7.3,' eV, ngauss=',i4)
101 format(5x,'DOS =',f10.6,' states/spin/eV/Unit Cell at Ef=',f10.6,' eV')
102 format(5x,'Nesting function (q)=',e15.6,' [Adimensional]')
!
end subroutine nesting_fn_k

665
EPW/src/print_ibte.f90 Normal file
View File

@ -0,0 +1,665 @@
!
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
! Copyright (C) 2016-2018 Samuel Ponce'
!
! This file is distributed under the terms of the GNU General Public
! License. See the file `LICENSE' in the root directory of the
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!
!-----------------------------------------------------------------------
SUBROUTINE print_ibte( iqq, iq, totq, ef0, efcb, first_cycle, ind_tot, ind_totcb, &
lrepmatw2, lrepmatw4, lrepmatw5, lrepmatw6 )
!-----------------------------------------------------------------------
!!
!! This subroutine computes the scattering rate (inv_tau)
!!
!-----------------------------------------------------------------------
USE kinds, ONLY : DP, i4b
USE cell_base, ONLY : omega
USE io_global, ONLY : stdout
USE phcom, ONLY : nmodes
USE epwcom, ONLY : nbndsub, fsthick, eps_acustic, degaussw, &
nstemp, scattering_serta, scattering_0rta, shortrange,&
restart, restart_freq, restart_filq, vme
USE pwcom, ONLY : ef
USE elph2, ONLY : ibndmax, ibndmin, etf, nkqf, nkf, dmef, vmef, wf, wqf, &
epf17, nkqtotf, inv_tau_all, inv_tau_allcb, &
xqf, zi_allvb, zi_allcb, xkf, wkf, dmef, vmef, nqf
USE transportcom, ONLY : transp_temp, lower_bnd
USE constants_epw, ONLY : zero, one, two, pi, ryd2mev, kelvin2eV, ryd2ev, &
eps6, eps10, bohr2ang, ang2cm
USE io_files, ONLY : prefix, diropn, tmp_dir
USE mp, ONLY : mp_barrier, mp_sum, mp_bcast
USE mp_global, ONLY : world_comm, my_pool_id, npool
USE io_global, ONLY : ionode_id
USE io_epw, ONLY : iunepmat, iunepmatcb, iufilibtev_sup, iunrestart, &
iunsparseq, iunsparsek, iunsparsei, iunsparsej, iunsparset, &
iunsparseqcb, iunsparsekcb, iunsparseicb, iunsparsejcb, iunsparsetcb
#if defined(__MPI)
USE parallel_include, ONLY : MPI_OFFSET_KIND, MPI_SEEK_SET, MPI_INTEGER8, &
MPI_DOUBLE_PRECISION, MPI_STATUS_IGNORE, MPI_INTEGER4, &
MPI_MODE_CREATE, MPI_INFO_NULL, MPI_MODE_WRONLY, MPI_OFFSET
#endif
!
IMPLICIT NONE
!
LOGICAL, INTENT (INOUT) :: first_cycle
!! Use to determine weather this is the first cycle after restart
INTEGER, INTENT(IN) :: iqq
!! Q-point index from selecq
INTEGER, INTENT(IN) :: iq
!! Q-point index
INTEGER, INTENT(IN) :: totq
!! Total number of q-points in selecq
REAL(KIND=DP), INTENT(IN) :: ef0(nstemp)
!! Fermi level for the temperature itemp
REAL(KIND=DP), INTENT(IN) :: efcb(nstemp)
!! Second Fermi level for the temperature itemp. Could be unused (0).
INTEGER(kind=MPI_OFFSET_KIND), INTENT(INOUT) :: ind_tot
!! Total number of element written to file
INTEGER(kind=MPI_OFFSET_KIND), INTENT(INOUT) :: ind_totcb
!! Total number of element written to file
#if defined(__MPI)
INTEGER (kind=MPI_OFFSET_KIND), INTENT(inout) :: lrepmatw2
!! Offset for that core
INTEGER (kind=MPI_OFFSET_KIND), INTENT(inout) :: lrepmatw4
!! Offset for that core
INTEGER (kind=MPI_OFFSET_KIND), INTENT(inout) :: lrepmatw5
!! Offset for that core
INTEGER (kind=MPI_OFFSET_KIND), INTENT(inout) :: lrepmatw6
!! Offset for that core
#else
INTEGER (kind=8), INTENT (inout) :: lrepmatw2
!! Offset for that core
INTEGER (kind=i4b), INTENT (inout) :: lrepmatw4
!! Offset for that core
INTEGER (kind=8), INTENT (inout) :: lrepmatw5
!! Offset for that core
INTEGER (kind=i4b), INTENT (inout) :: lrepmatw6
#endif
!
! Local variables
INTEGER :: n
!! Integer for the degenerate average over eigenstates
INTEGER :: ik
!! K-point index
INTEGER :: ikk
!! Odd index to read etf
INTEGER :: ikq
!! Even k+q index to read etf
INTEGER :: ibnd
!! Local band index
INTEGER :: jbnd
!! Local band index
INTEGER :: imode
!! Local mode index
INTEGER :: itemp
!! Index over temperature range
INTEGER :: k_all(npool)
#if defined(__MPI)
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw
!! Offset for that core
INTEGER (kind=MPI_OFFSET_KIND) :: lrepmatw3
!! Offset for that core
INTEGER (kind=MPI_OFFSET_KIND) :: lsize
!! Offset to tell where to start reading the file
#else
INTEGER(kind=8) :: lrepmatw
!!
INTEGER(kind=4) :: lrepmatw3
!!
INTEGER(kind=8) :: lsize
!! Offset to tell where to start reading the file
#endif
CHARACTER (len=256) :: filint
INTEGER :: ierr
INTEGER :: ind(npool)
INTEGER :: indcb(npool)
INTEGER(kind=i4b) :: sparse_q((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparse_k((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparse_i((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparse_j((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparse_t((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparsecb_q((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparsecb_k((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparsecb_i((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparsecb_j((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
INTEGER(kind=i4b) :: sparsecb_t((ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf )
!
REAL(kind=DP) :: tmp
!! Temporary variable
REAL(kind=DP) :: dfnk
!! Derivative of f_nk with respect to \varepsilon_nk
REAL(kind=DP) :: ekk2
!! Temporary variable to the eigenenergies for the degenerate average
REAL(KIND=DP) :: ekk
!! Energy relative to Fermi level: $$\varepsilon_{n\mathbf{k}}-\varepsilon_F$$
REAL(KIND=DP) :: ekq
!! Energy relative to Fermi level: $$\varepsilon_{m\mathbf{k+q}}-\varepsilon_F$$
REAL(KIND=DP) :: g2
!! Electron-phonon matrix elements squared (g2 is Ry^2)
REAL(KIND=DP) :: etemp
!! Temperature in Ry (this includes division by kb)
REAL(KIND=DP) :: w0g1
!! $$ \delta[\varepsilon_{nk} - \varepsilon_{mk+q} + \omega_{q}] $$
REAL(KIND=DP) :: w0g2
!! $$ \delta[\varepsilon_{nk} - \varepsilon_{mk+q} - \omega_{q}] $$
REAL(KIND=DP) :: inv_wq
!! Inverse phonon frequency. Defined for efficiency reasons.
REAL(KIND=DP) :: inv_etemp
!! Invese temperature inv_etemp = 1/etemp. Defined for efficiency reasons.
REAL(KIND=DP) :: g2_tmp
!! Used to set component to 0 if the phonon freq. is too low. This is defined
!! for efficiency reasons as if statement should be avoided in inner-most loops.
REAL(KIND=DP) :: inv_degaussw
!! 1.0/degaussw. Defined for efficiency reasons.
REAL(KIND=DP) :: wq
!! Phonon frequency $$\omega_{q\nu}$$ on the fine grid.
REAL(KIND=DP) :: wgq
!! Bose-Einstein occupation function $$n_{q\nu}$$
REAL(kind=DP) :: weight
!! Self-energy factor
REAL(KIND=DP) :: fmkq
!! Fermi-Dirac occupation function $$f_{m\mathbf{k+q}}$$
REAL(KIND=DP) :: vkk(3,ibndmax-ibndmin+1)
!! Electronic velocity $$v_{n\mathbf{k}}$$
!REAL(kind=DP) :: trans_prob(ibndmax-ibndmin+1, ibndmax-ibndmin+1, nstemp, nkf)
REAL(kind=DP) :: trans_prob( (ibndmax-ibndmin+1) * (ibndmax-ibndmin+1) * nstemp * nkf)
!! Temporary array to store the scattering rates
!REAL(kind=DP) :: trans_probcb(ibndmax-ibndmin+1, ibndmax-ibndmin+1, nstemp, nkf)
REAL(kind=DP) :: trans_probcb( (ibndmax-ibndmin+1)*(ibndmax-ibndmin+1)* nstemp* nkf )
!! Temporary array to store the scattering rates
REAL(kind=DP) :: zi_tmp(ibndmax-ibndmin+1)
!! Temporary array to store the zi
REAL(KIND=DP), ALLOCATABLE :: inv_tau_all_new (:,:,:)
!! New scattering rates to be merged
REAL(KIND=DP) :: xkf_all(3,nkqtotf/2)
!! k-points coordinate from all cores
REAL(KIND=DP) :: wkf_all(nkqtotf/2)
!! Weights from all the cores
REAL(KIND=DP) :: vkk_all(3,ibndmax-ibndmin+1,nkqtotf/2)
!! Velocities from all the cores
!
REAL(KIND=DP) :: etf_all(ibndmax-ibndmin+1,nkqtotf/2)
!! Eigen-energies on the fine grid collected from all pools in parallel case
REAL(KIND=DP), EXTERNAL :: DDOT
!! Dot product function
REAL(KIND=DP), EXTERNAL :: efermig
!! Function that returns the Fermi energy
REAL(KIND=DP), EXTERNAL :: wgauss
!! Compute the approximate theta function. Here computes Fermi-Dirac
REAL(KIND=DP), EXTERNAL :: w0gauss
!! The derivative of wgauss: an approximation to the delta function
REAL(kind=DP), PARAMETER :: eps = 1.d-4
!! Tolerence parameter for the velocity
REAL(kind=DP), PARAMETER :: eps2 = 0.01/ryd2mev
!! Tolerence
REAL(kind=DP) :: carrier_density, fnk, inv_cell
!
inv_cell = 1.0d0/omega
!
IF ( iqq == 1 ) THEN
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Scattering rate for IBTE")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
WRITE(stdout,'(5x,"restart and restart_freq inputs deactivated (restart point at every q-points).")')
WRITE(stdout,'(5x,"No intermediate mobility will be shown.")')
!
IF ( fsthick < 1.d3 ) THEN
WRITE(stdout, '(/5x,a,f10.6,a)' ) 'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
WRITE(stdout, '(5x,a,f10.6,a)' ) 'This is computed with respect to the fine Fermi level ',ef * ryd2ev, ' eV'
WRITE(stdout, '(5x,a,f10.6,a,f10.6,a)' ) 'Only states between ',(ef-fsthick) * ryd2ev, ' eV and ',&
(ef+fsthick) * ryd2ev, ' eV will be included'
WRITE(stdout,'(5x,a/)')
ENDIF
lrepmatw = 0
lrepmatw2 = 0
lrepmatw4 = 0
lrepmatw5 = 0
lrepmatw6 = 0
!
ENDIF
!
! In the case of a restart do not add the first step
IF (first_cycle) THEN
first_cycle = .FALSE.
ELSE
!
trans_prob(:) = zero
sparse_q(:) = zero
sparse_k(:) = zero
sparse_i(:) = zero
sparse_j(:) = zero
sparse_t(:) = zero
trans_probcb(:) = zero
sparsecb_q(:) = zero
sparsecb_k(:) = zero
sparsecb_i(:) = zero
sparsecb_j(:) = zero
sparsecb_t(:) = zero
!trans_probcb(:) = zero
etf_all(:,:) = zero
vkk_all(:,:,:) = zero
! local index for each q-point
ind(:) = 0
indcb(:) = 0
!
! loop over temperatures
DO itemp = 1, nstemp
xkf_all(:,:) = 0.0d0
wkf_all(:) = 0.0d0
!
etemp = transp_temp(itemp)
!
! SP: Define the inverse so that we can efficiently multiply instead of
! dividing
!
inv_etemp = 1.0/etemp
inv_degaussw = 1.0/degaussw
!
DO ik = 1, nkf
!
ikk = 2 * ik - 1
ikq = ikk + 1
!
! We are not consistent with ef from ephwann_shuffle but it should not
! matter if fstick is large enough.
IF ( ( minval ( abs(etf (:, ikk) - ef) ) .lt. fsthick ) .AND. &
( minval ( abs(etf (:, ikq) - ef) ) .lt. fsthick ) ) THEN
xkf_all(:, ik+lower_bnd - 1 ) = xkf(:,ikk)
wkf_all(ik+lower_bnd - 1 ) = wkf(ikk)
!
DO ibnd = 1, ibndmax-ibndmin+1
! energy at k (relative to Ef)
ekk = etf (ibndmin-1+ibnd, ikk) - ef0(itemp)
!
! This is to know if we need to store the data
! derivative Fermi distribution
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
dfnk = w0gauss( ekk*inv_etemp, -99 )*inv_etemp
!
DO jbnd = 1, ibndmax-ibndmin+1
!
! energy and fermi occupation at k+q
ekq = etf (ibndmin-1+jbnd, ikq) - ef0(itemp)
fmkq = wgauss( -ekq*inv_etemp, -99)
!
! We perform a sum over the modes
tmp = zero
DO imode = 1, nmodes
!
! the phonon frequency and bose occupation
wq = wf (imode, iq)
!
! SP : Avoid if statement in inner loops
! the coupling from Gamma acoustic phonons is negligible
IF ( wq .gt. eps_acustic ) THEN
g2_tmp = 1.0
wgq = wgauss( -wq*inv_etemp, -99)
wgq = wgq / ( one - two * wgq )
! SP : Define the inverse for efficiency
inv_wq = 1.0/(two * wq)
ELSE
g2_tmp = 0.0
wgq = 0.0
inv_wq = 0.0
ENDIF
!
! here we take into account the zero-point sqrt(hbar/2M\omega)
! with hbar = 1 and M already contained in the eigenmodes
! g2 is Ry^2, wkf must already account for the spin factor
!
! In case of q=\Gamma, then the short-range = the normal g. We therefore
! need to treat it like the normal g with abs(g).
IF ( shortrange .AND. ( abs(xqf (1, iq))> eps2 .OR. abs(xqf (2, iq))> eps2 &
.OR. abs(xqf (3, iq))> eps2 )) THEN
! SP: The abs has to be removed. Indeed the epf17 can be a pure imaginary
! number, in which case its square will be a negative number.
g2 = REAL( (epf17 (jbnd, ibnd, imode, ik)**two)*inv_wq*g2_tmp, KIND=DP )
ELSE
g2 = (abs(epf17 (jbnd, ibnd, imode, ik))**two)*inv_wq*g2_tmp
ENDIF
!
! delta[E_k - E_k+q + w_q] and delta[E_k - E_k+q - w_q]
w0g1 = w0gauss( (ekk-ekq+wq) * inv_degaussw, 0) * inv_degaussw
w0g2 = w0gauss( (ekk-ekq-wq) * inv_degaussw, 0) * inv_degaussw
!
! transition probability
! (2 pi/hbar) * (k+q-point weight) * g2 *
! { [f(E_k+q) + n(w_q)] * delta[E_k - E_k+q + w_q] +
! [1 - f(E_k+q) + n(w_q)] * delta[E_k - E_k+q - w_q] }
!
! This is summed over modes
tmp = tmp + pi * wqf(iq) * g2 * ( (fmkq+wgq)*w0g1 + (one-fmkq+wgq)*w0g2 )
!
ENDDO !imode
! Only save the onces that really contribute
IF (ABS(tmp * dfnk) > 1d-40 ) THEN
!IF (ind(my_pool_id+1)<10) print*,'ik ibnd jbnd ',ik, ibnd, jbnd
!IF (ind(my_pool_id+1)<10) print*,'VB ekk ',ekk
!IF (ind(my_pool_id+1)<10) print*,'VB ekq ',ekq
!IF (ind(my_pool_id+1)<10) print*,'VB f ',fmkq
!IF (ind(my_pool_id+1)<10) print*,'VB g1 ',w0g1
!IF (ind(my_pool_id+1)<10) print*,'VB g2 ',w0g2
!IF (ind(my_pool_id+1)<10) print*,'VB tmp ',tmp
!IF (ind (my_pool_id+1)==0) print*,tmp
!IF (ind (my_pool_id+1)==0) print*,wqf(iq)
!IF (ind (my_pool_id+1)==0) print*, g2
!IF (ind (my_pool_id+1)==0) print*, fmkq
!IF (ind (my_pool_id+1)==0) print*, wgq
!IF (ind (my_pool_id+1)==0) print*, w0g1
!IF (ind (my_pool_id+1)==0) print*, w0g2
!
ind (my_pool_id+1) = ind (my_pool_id+1) + 1
!
trans_prob( ind(my_pool_id+1) ) = tmp
sparse_q ( ind(my_pool_id+1) ) = iq
sparse_k ( ind(my_pool_id+1) ) = ik+lower_bnd-1
!print*,'index sp_k ',ind(my_pool_id+1), sparse_k (ind(my_pool_id+1) )
sparse_i ( ind(my_pool_id+1) ) = ibnd
sparse_j ( ind(my_pool_id+1) ) = jbnd
sparse_t ( ind(my_pool_id+1) ) = itemp
! IF (ik+lower_bnd-1 == 2) print*,ind (my_pool_id+1)+ind_tot, tmp
! print*,ind (my_pool_id+1)+ind_tot, iq, ik, ibnd, jbnd, itemp
!
ENDIF
!
ENDDO !jbnd
ENDDO ! ibnd
!
! In this case we are also computing the scattering rate for another Fermi level position
! This is used to compute both the electron and hole mobility at the same time.
IF ( ABS(efcb(itemp)) > eps ) THEN
!
DO ibnd = 1, ibndmax-ibndmin+1
!
! energy at k (relative to Ef)
ekk = etf (ibndmin-1+ibnd, ikk) - efcb(itemp)
! This is to know if we need to store the data
! derivative Fermi distribution
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
dfnk = w0gauss( ekk*inv_etemp, -99 )*inv_etemp
!
DO jbnd = 1, ibndmax-ibndmin+1
!
! energy and fermi occupation at k+q
ekq = etf (ibndmin-1+jbnd, ikq) - efcb(itemp)
fmkq = wgauss( -ekq*inv_etemp, -99)
!
tmp = zero
DO imode = 1, nmodes
!
! the phonon frequency and bose occupation
wq = wf (imode, iq)
!
! SP : Avoid if statement in inner loops
! the coupling from Gamma acoustic phonons is negligible
IF ( wq .gt. eps_acustic ) THEN
g2_tmp = 1.0
wgq = wgauss( -wq*inv_etemp, -99)
wgq = wgq / ( one - two * wgq )
! SP : Define the inverse for efficiency
inv_wq = 1.0/(two * wq)
ELSE
g2_tmp = 0.0
wgq = 0.0
inv_wq = 0.0
ENDIF
!
! here we take into account the zero-point sqrt(hbar/2M\omega)
! with hbar = 1 and M already contained in the eigenmodes
! g2 is Ry^2, wkf must already account for the spin factor
!
! In case of q=\Gamma, then the short-range = the normal g. We therefore
! need to treat it like the normal g with abs(g).
IF ( shortrange .AND. ( abs(xqf (1, iq))> eps2 .OR. abs(xqf (2, iq))> eps2 &
.OR. abs(xqf (3, iq))> eps2 )) THEN
! SP: The abs has to be removed. Indeed the epf17 can be a pure imaginary
! number, in which case its square will be a negative number.
g2 = REAL( (epf17 (jbnd, ibnd, imode, ik)**two)*inv_wq*g2_tmp, KIND=DP)
ELSE
g2 = (abs(epf17 (jbnd, ibnd, imode, ik))**two)*inv_wq*g2_tmp
ENDIF
!
! delta[E_k - E_k+q + w_q] and delta[E_k - E_k+q - w_q]
w0g1 = w0gauss( (ekk-ekq+wq) * inv_degaussw, 0) * inv_degaussw
w0g2 = w0gauss( (ekk-ekq-wq) * inv_degaussw, 0) * inv_degaussw
!
! transition probability
! (2 pi/hbar) * (k+q-point weight) * g2 *
! { [f(E_k+q) + n(w_q)] * delta[E_k - E_k+q + w_q] +
! [1 - f(E_k+q) + n(w_q)] * delta[E_k - E_k+q - w_q] }
!
! This is summed over modes
tmp = tmp + pi * wqf(iq) * g2 * ( (fmkq+wgq)*w0g1 + (one-fmkq+wgq)*w0g2 )
!
ENDDO ! imode
!
! Only save the onces that really contribute
IF (ABS(tmp * dfnk) > 1d-40 ) THEN
indcb (my_pool_id+1) = indcb (my_pool_id+1) + 1
!
trans_probcb ( indcb(my_pool_id+1) ) = tmp
sparsecb_q ( indcb(my_pool_id+1) ) = iq
sparsecb_k ( indcb(my_pool_id+1) ) = ik+lower_bnd-1
sparsecb_i ( indcb(my_pool_id+1) ) = ibnd
sparsecb_j ( indcb(my_pool_id+1) ) = jbnd
sparsecb_t ( indcb(my_pool_id+1) ) = itemp
!
ENDIF
!
ENDDO !jbnd
!
ENDDO !ibnd
!
ENDIF ! ABS(efcb) < eps
!
!print*,'trans_probcb(jbnd,ibnd,itemp,k_all(my_pool_id+1)) ',trans_probcb(1,1,1,k_all(my_pool_id+1))
ENDIF ! endif fsthick
!
ENDDO ! end loop on k
ENDDO ! itemp
! If the q-point is taken, write on file
CALL mp_sum( ind, world_comm )
CALL mp_sum( indcb, world_comm )
!
IF ( sum(ind) > 0 ) THEN
!
IF ( my_pool_id == 0 ) ind_tot = ind_tot + SUM(ind)
!CALL mp_bcast (ind_tot, ionode_id, world_comm)
CALL MPI_BCAST( ind_tot, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
! Can be uncommented
! WRITE(stdout,'(a,i9,E22.8)') ' Total number of element written ',ind_tot
!
! Size of what we write
lsize = INT( ind(my_pool_id+1), kind = MPI_OFFSET_KIND )
! Offset where we need to start writing (we increment for each q-points)
lrepmatw = lrepmatw2 + &
INT( SUM( ind(1:my_pool_id+1)) - ind(my_pool_id+1), kind = MPI_OFFSET_KIND ) * 8_MPI_OFFSET_KIND
lrepmatw3 = lrepmatw4 + &
INT( SUM( ind(1:my_pool_id+1)) - ind(my_pool_id+1), kind = MPI_OFFSET_KIND ) * 4_MPI_OFFSET_KIND
!
CALL MPI_FILE_SEEK(iunepmat, lrepmatw,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunepmat, trans_prob, lsize, MPI_DOUBLE_PRECISION,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparseq, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparseq, sparse_q, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparsek, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparsek, sparse_k, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparsei, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparsei, sparse_i, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparsej, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparsej, sparse_j, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparset, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparset, sparse_t, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
! Offset for the next q iteration
lrepmatw2 = lrepmatw2 + INT( SUM( ind(:) ), kind = MPI_OFFSET_KIND ) * 8_MPI_OFFSET_KIND
lrepmatw4 = lrepmatw4 + INT( SUM( ind(:) ), kind = MPI_OFFSET_KIND ) * 4_MPI_OFFSET_KIND
!
! now write in the support file
CALL mp_sum(xkf_all, world_comm)
CALL mp_sum(wkf_all, world_comm)
!
ENDIF
IF ( sum(indcb) > 0 ) THEN
!
IF ( my_pool_id == 0 ) ind_totcb = ind_totcb + SUM(indcb)
!CALL mp_bcast (ind_totcb, ionode_id, world_comm)
CALL MPI_BCAST( ind_totcb, 1, MPI_OFFSET, ionode_id, world_comm, ierr)
! WRITE(stdout,'(a,i9,E22.8)') ' Total number of element written in electron ',ind_totcb
!
! Size of what we write
lsize = INT( indcb(my_pool_id+1), kind = MPI_OFFSET_KIND )
! Offset where we need to start writing (we increment for each q-points)
lrepmatw = lrepmatw5 + &
INT( SUM( indcb(1:my_pool_id+1)) - indcb(my_pool_id+1), kind = MPI_OFFSET_KIND ) * 8_MPI_OFFSET_KIND
lrepmatw3 = lrepmatw6 + &
INT( SUM( indcb(1:my_pool_id+1)) - indcb(my_pool_id+1), kind = MPI_OFFSET_KIND ) * 4_MPI_OFFSET_KIND
!
CALL MPI_FILE_SEEK(iunepmatcb, lrepmatw,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunepmatcb, trans_probcb, lsize, MPI_DOUBLE_PRECISION,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparseqcb, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparseqcb, sparsecb_q, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparsekcb, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparsekcb, sparsecb_k, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparseicb, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparseicb, sparsecb_i, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparsejcb, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparsejcb, sparsecb_j, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
CALL MPI_FILE_SEEK (iunsparsetcb, lrepmatw3,MPI_SEEK_SET,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_SEEK',1 )
CALL MPI_FILE_WRITE(iunsparsetcb, sparsecb_t, lsize, MPI_INTEGER4,MPI_STATUS_IGNORE,ierr)
IF( ierr /= 0 ) CALL errore( 'print_ibte', 'error in MPI_FILE_WRITE',1 )
!
! Offset for the next q iteration
lrepmatw5 = lrepmatw5 + INT( SUM( indcb(:) ), kind = MPI_OFFSET_KIND ) * 8_MPI_OFFSET_KIND
lrepmatw6 = lrepmatw6 + INT( SUM( indcb(:) ), kind = MPI_OFFSET_KIND ) * 4_MPI_OFFSET_KIND
!
ENDIF ! indcb
!
! Save to file restart information in formatted way for possible restart
IF (my_pool_id == 0) THEN
OPEN(unit=iunrestart,file='restart_ibte.fmt')
WRITE (iunrestart,*) iqq
WRITE (iunrestart,*) ind_tot
WRITE (iunrestart,*) ind_totcb
WRITE (iunrestart,*) lrepmatw2
WRITE (iunrestart,*) lrepmatw4
WRITE (iunrestart,*) lrepmatw5
WRITE (iunrestart,*) lrepmatw6
CLOSE(iunrestart)
ENDIF
!
ENDIF ! first_cycle
!
IF ( iqq == totq ) THEN
wkf_all(:) = zero
! Computes the k-velocity
DO ik = 1, nkf
!
ikk = 2 * ik - 1
!
wkf_all( ik+lower_bnd -1 ) = wkf(ikk)
!
DO ibnd = 1, ibndmax-ibndmin+1
IF ( vme ) THEN
vkk_all(:, ibnd, ik + lower_bnd - 1) = REAL (vmef (:, ibndmin-1+ibnd, ibndmin-1+ibnd, ikk))
ELSE
vkk_all(:,ibnd, ik + lower_bnd -1 ) = 2.0 * REAL (dmef (:, ibndmin-1+ibnd, ibndmin-1+ibnd, ikk))
ENDIF
etf_all(ibnd, ik+lower_bnd-1) = etf(ibndmin-1+ibnd, ikk)
ENDDO
ENDDO
CALL mp_sum ( vkk_all, world_comm )
CALL mp_sum ( etf_all, world_comm )
CALL mp_sum ( wkf_all, world_comm )
!
IF ( my_pool_id == 0 ) THEN
! Now write total number of q-point inside and k-velocity
!
OPEN(iufilibtev_sup,file='IBTEvel_sup.fmt', form='formatted')
WRITE(iufilibtev_sup,'(a)') '# Number of elements in hole and electrons '
WRITE(iufilibtev_sup,'(2i16)') ind_tot, ind_totcb
WRITE(iufilibtev_sup,'(a)') '# itemp ef0 efcb'
DO itemp=1, nstemp
WRITE(iufilibtev_sup,'(i8,2E22.12)') itemp, ef0(itemp), efcb(itemp)
ENDDO
WRITE(iufilibtev_sup,'(a)') '# ik ibnd velocity (x,y,z) eig weight '
DO ik = 1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
WRITE(iufilibtev_sup,'(i8,i6,5E22.12)') ik, ibnd, vkk_all(:,ibnd,ik), etf_all(ibnd, ik), wkf_all(ik)
ENDDO
ENDDO
CLOSE(iufilibtev_sup)
!
ENDIF ! master
!
! Now print the carrier density for checking
DO itemp=1, nstemp
etemp = transp_temp(itemp)
carrier_density = 0.0
!
DO ik = 1, nkf
DO ibnd = 1, ibndmax-ibndmin+1
! This selects only valence bands for hole conduction
IF (etf_all (ibnd, ik+lower_bnd-1 ) < ef0(itemp) ) THEN
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik+lower_bnd-1 ) - ef0(itemp)
fnk = wgauss( -ekk / etemp, -99)
! The wkf(ikk) already include a factor 2
carrier_density = carrier_density + wkf_all(ik+lower_bnd-1 ) * (1.0d0 - fnk )
ENDIF
ENDDO
ENDDO
CALL mp_sum( carrier_density, world_comm )
carrier_density = carrier_density * inv_cell * ( bohr2ang * ang2cm)**(-3)
WRITE(stdout,'(5x, 1f8.3, 1f12.4, 1E19.6)') etemp *ryd2ev/kelvin2eV, &
ef0(itemp)*ryd2ev, carrier_density
ENDDO
!
ENDIF ! iqq
!
RETURN
!
END SUBROUTINE print_ibte
!-----------------------------------------------------------------------

View File

@ -34,6 +34,7 @@
USE mp_global, ONLY : inter_pool_comm
USE mp_world, ONLY : mpime
USE io_global, ONLY : ionode_id
USE division, ONLY : fkbounds
!
implicit none
!
@ -248,10 +249,10 @@
!
!
!-----------------------------------------------------------------------
SUBROUTINE print_serta( F_SERTA, BZtoIBZ, s_BZtoIBZ, vkk_all, etf_all, wkf_all, ef0)
SUBROUTINE print_serta_sym( F_SERTA, BZtoIBZ, s_BZtoIBZ, vkk_all, etf_all, wkf_all, ef0)
!-----------------------------------------------------------------------
!!
!! This subroutine prints the mobility
!! This subroutine prints the SERTA mobility using k-point symmetry.
!!
!-----------------------------------------------------------------------
USE kinds, ONLY : DP
@ -348,7 +349,6 @@
!! Compute the approximate theta function. Here computes Fermi-Dirac
REAL(KIND=DP), EXTERNAL :: w0gauss
!! The derivative of wgauss: an approximation to the delta function
!
inv_cell = 1.0d0/omega
!
@ -579,16 +579,272 @@
!
ENDIF
RETURN
!
!-----------------------------------------------------------------------
END SUBROUTINE print_serta_sym
!-----------------------------------------------------------------------
!
!-----------------------------------------------------------------------
SUBROUTINE print_serta( F_SERTA, vkk_all, etf_all, wkf_all, ef0)
!-----------------------------------------------------------------------
!!
!! This subroutine prints the SERTA mobility
!!
!-----------------------------------------------------------------------
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
USE cell_base, ONLY : at, omega, bg
USE epwcom, ONLY : int_mob, ncarrier, nstemp, &
nkf1, nkf2, nkf3
USE elph2, ONLY : nkf, ibndmax, ibndmin, nkqtotf
USE transportcom, ONLY : lower_bnd, transp_temp
USE constants_epw, ONLY : zero, two, pi, kelvin2eV, ryd2ev, eps10, &
electron_SI, bohr2ang, ang2cm, hbarJ
USE noncollin_module, ONLY : noncolin
USE mp_global, ONLY : world_comm, my_pool_id
USE mp, ONLY : mp_sum
!
IMPLICIT NONE
!
REAL(kind=DP), INTENT(in) :: F_SERTA(3, ibndmax-ibndmin+1, nkqtotf/2, nstemp)
!! SERTA solution
REAL(KIND=DP), INTENT(IN) :: vkk_all(3,ibndmax-ibndmin+1,nkqtotf/2)
!! Velocity
REAL(KIND=DP), INTENT(IN) :: etf_all(ibndmax-ibndmin+1,nkqtotf/2)
!! Eigenenergies of k
REAL(KIND=DP), INTENT(IN) :: wkf_all(nkqtotf/2)
!! Weight of k
REAL(KIND=DP), INTENT(IN) :: ef0(nstemp)
!! The Fermi level
! Local variables
INTEGER :: itemp
!! temperature index
INTEGER :: ik
!! k-point index
INTEGER :: ibnd
!! band index
INTEGER :: ij
!! Combined x,y,z index
INTEGER :: i,j
!! Cartesian index
!
REAL(KIND=DP) :: etemp
!! Temperature in Ry (this includes division by kb)
REAL(KIND=DP) :: tdf_sigma(9)
!! Transport distribution function
REAL(KIND=DP) :: Sigma(9,nstemp)
!! Electrical conductivity
REAL(KIND=DP) :: ekk
!! Energy relative to Fermi level: $$\varepsilon_{n\mathbf{k}}-\varepsilon_F$$
REAL(KIND=DP) :: dfnk
!! Derivative Fermi distribution $$-df_{nk}/dE_{nk}$$
REAL(KIND=DP) :: carrier_density
!! Carrier density [nb of carrier per unit cell]
REAL(KIND=DP) :: fnk
!! Fermi-Dirac occupation function
REAL(KIND=DP) :: mobility
!! Sum of the diagonalized mobilities [cm^2/Vs]
REAL(KIND=DP) :: mobility_xx
!! Mobility along the xx axis after diagonalization [cm^2/Vs]
REAL(KIND=DP) :: mobility_yy
!! Mobility along the yy axis after diagonalization [cm^2/Vs]
REAL(KIND=DP) :: mobility_zz
!! Mobility along the zz axis after diagonalization [cm^2/Vs]
REAL(KIND=DP) :: sigma_up(3,3)
!! Conductivity matrix in upper-triangle
REAL(KIND=DP) :: sigma_eig(3)
!! Eigenvalues from the diagonalized conductivity matrix
REAL(KIND=DP) :: sigma_vect(3,3)
!! Eigenvectors from the diagonalized conductivity matrix
REAL(KIND=DP) :: inv_cell
!! Inverse of the volume in [Bohr^{-3}]
REAL(KIND=DP), EXTERNAL :: wgauss
!! Compute the approximate theta function. Here computes Fermi-Dirac
REAL(KIND=DP), EXTERNAL :: w0gauss
!! The derivative of wgauss: an approximation to the delta function
!
inv_cell = 1.0d0/omega
!
! Hole
IF (ncarrier < -1E5) THEN
Sigma(:,:) = zero
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
DO itemp=1, nstemp
etemp = transp_temp(itemp)
DO ik=1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
IF (etf_all (ibnd, ik) < ef0(itemp) ) THEN
tdf_sigma(:) = zero
!
ij = 0
DO j = 1, 3
DO i = 1, 3
ij = ij + 1
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_SERTA(j, ibnd, ik, itemp) * wkf_all(ik)
ENDDO
ENDDO
!
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik ) - ef0(itemp)
!
! derivative Fermi distribution
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
!
! electrical conductivity
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
!
ENDIF ! if below Fermi level
ENDDO ! ibnd
ENDDO ! ik
ENDDO ! itemp
!
DO itemp=1, nstemp
etemp = transp_temp(itemp)
carrier_density = 0.0
!
DO ik = 1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
! This selects only valence bands for hole conduction
IF (etf_all (ibnd, ik ) < ef0(itemp) ) THEN
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik ) - ef0(itemp)
fnk = wgauss( -ekk / etemp, -99)
! The wkf(ikk) already include a factor 2
carrier_density = carrier_density + wkf_all(ik ) * (1.0d0 - fnk )
ENDIF
ENDDO
ENDDO
!
sigma_up(:,:) = zero
sigma_up(1,1) = Sigma(1,itemp)
sigma_up(1,2) = Sigma(2,itemp)
sigma_up(1,3) = Sigma(3,itemp)
sigma_up(2,1) = Sigma(4,itemp)
sigma_up(2,2) = Sigma(5,itemp)
sigma_up(2,3) = Sigma(6,itemp)
sigma_up(3,1) = Sigma(7,itemp)
sigma_up(3,2) = Sigma(8,itemp)
sigma_up(3,3) = Sigma(9,itemp)
!
! Diagonalize the conductivity matrix
CALL rdiagh(3,sigma_up,3,sigma_eig,sigma_vect)
!
mobility_xx = ( sigma_eig(1) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility_yy = ( sigma_eig(2) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility_zz = ( sigma_eig(3) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility = (mobility_xx+mobility_yy+mobility_zz)/3
! carrier_density in cm^-1
carrier_density = carrier_density * inv_cell * ( bohr2ang * ang2cm)**(-3)
WRITE(stdout,'(5x, 1f8.3, 1f12.4, 1E19.6, 1E19.6, a)') etemp * ryd2ev/kelvin2eV, &
ef0(itemp)*ryd2ev, carrier_density, mobility_xx, ' x-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility_yy, ' y-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility_zz, ' z-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility, ' avg'
ENDDO
!
ENDIF
!
! Now electron mobility
IF (ncarrier > 1E5) THEN
! Needed because of residual values from the hole above
Sigma(:,:) = zero
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
DO itemp=1, nstemp
etemp = transp_temp(itemp)
DO ik=1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
IF (etf_all (ibnd, ik) > ef0(itemp) ) THEN
tdf_sigma(:) = zero
ij = 0
DO j = 1, 3
DO i = 1, 3
ij = ij + 1
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_SERTA(j, ibnd, ik, itemp) * wkf_all(ik)
ENDDO
ENDDO
!
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik) - ef0(itemp)
!
! derivative Fermi distribution
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
!
! electrical conductivity
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
!
ENDIF ! if below Fermi level
ENDDO ! ibnd
ENDDO ! ik
ENDDO ! itemp
!CALL mp_sum( Sigma(:,:), world_comm )
DO itemp=1, nstemp
etemp = transp_temp(itemp)
carrier_density = 0.0
!
DO ik = 1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
! This selects only valence bands for electron conduction
IF (etf_all (ibnd, ik) > ef0(itemp) ) THEN
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik) - ef0(itemp)
fnk = wgauss( -ekk / etemp, -99)
! The wkf(ikk) already include a factor 2
carrier_density = carrier_density + wkf_all(ik) * fnk
ENDIF
ENDDO
ENDDO
!CALL mp_sum( carrier_density, world_comm )
!
sigma_up(:,:) = zero
sigma_up(1,1) = Sigma(1,itemp)
sigma_up(1,2) = Sigma(2,itemp)
sigma_up(1,3) = Sigma(3,itemp)
sigma_up(2,1) = Sigma(4,itemp)
sigma_up(2,2) = Sigma(5,itemp)
sigma_up(2,3) = Sigma(6,itemp)
sigma_up(3,1) = Sigma(7,itemp)
sigma_up(3,2) = Sigma(8,itemp)
sigma_up(3,3) = Sigma(9,itemp)
!
! Diagonalize the conductivity matrix
CALL rdiagh(3,sigma_up,3,sigma_eig,sigma_vect)
!
mobility_xx = ( sigma_eig(1) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility_yy = ( sigma_eig(2) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility_zz = ( sigma_eig(3) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility = (mobility_xx+mobility_yy+mobility_zz)/3
! carrier_density in cm^-1
carrier_density = carrier_density * inv_cell * ( bohr2ang * ang2cm)**(-3)
WRITE(stdout,'(5x, 1f8.3, 1f12.4, 1E19.6, 1E19.6, a)') etemp * ryd2ev/kelvin2eV, &
ef0(itemp)*ryd2ev, carrier_density, mobility_xx, ' x-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility_yy, ' y-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility_zz, ' z-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility, ' avg'
ENDDO
!
ENDIF
RETURN
!
END SUBROUTINE print_serta
!-----------------------------------------------------------------------
!
!-----------------------------------------------------------------------
SUBROUTINE print_mob( F_out, BZtoIBZ, s_BZtoIBZ, vkk_all, etf_all, wkf_all, ef0, av_mob)
SUBROUTINE print_mob_sym( F_out, BZtoIBZ, s_BZtoIBZ, vkk_all, etf_all, wkf_all, ef0, av_mob)
!-----------------------------------------------------------------------
!!
!! This subroutine prints the mobility ( electron or hole )
!! This subroutine prints the mobility using k-point symmetry ( electron or hole )
!!
!-----------------------------------------------------------------------
USE kinds, ONLY : DP
@ -912,6 +1168,265 @@
!
RETURN
!
!-----------------------------------------------------------------------
END SUBROUTINE print_mob_sym
!-----------------------------------------------------------------------
!
!-----------------------------------------------------------------------
SUBROUTINE print_mob( F_out, vkk_all, etf_all, wkf_all, ef0, av_mob)
!-----------------------------------------------------------------------
!!
!! This subroutine prints the mobility ( electron or hole )
!!
!-----------------------------------------------------------------------
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
USE cell_base, ONLY : at, omega, bg
USE epwcom, ONLY : int_mob, ncarrier, nstemp, &
nkf1, nkf2, nkf3
USE elph2, ONLY : nkf, ibndmax, ibndmin, nkqtotf
USE transportcom, ONLY : lower_bnd, transp_temp
USE constants_epw, ONLY : zero, two, pi, kelvin2eV, ryd2ev, eps10, &
electron_SI, bohr2ang, ang2cm, hbarJ
USE noncollin_module, ONLY : noncolin
USE mp_global, ONLY : world_comm
USE mp, ONLY : mp_sum
!
IMPLICIT NONE
!
REAL(kind=DP), INTENT(IN) :: F_out(3, ibndmax-ibndmin+1, nkqtotf/2, nstemp)
!! SERTA solution
REAL(KIND=DP), INTENT(IN) :: vkk_all(3,ibndmax-ibndmin+1,nkqtotf/2)
!! Velocity
REAL(KIND=DP), INTENT(IN) :: etf_all(ibndmax-ibndmin+1,nkqtotf/2)
!! Eigenenergies of k
REAL(KIND=DP), INTENT(IN) :: wkf_all(nkqtotf/2)
!! Weight of k
REAL(KIND=DP), INTENT(IN) :: ef0(nstemp)
!! The Fermi level
REAL(KIND=DP), INTENT(INOUT) :: av_mob(nstemp)
!! Maximum error for all temperature
! Local variables
INTEGER :: itemp
!! temperature index
INTEGER :: ik
!! k-point index
INTEGER :: ibnd
!! band index
INTEGER :: nb
!! Number of points equivalent by sym from BZ to IBTZ
INTEGER :: ij
!! Combined x,y,z index
INTEGER :: i,j
!! Cartesian index
!
REAL(KIND=DP) :: etemp
!! Temperature in Ry (this includes division by kb)
REAL(KIND=DP) :: tdf_sigma(9)
!! Transport distribution function
REAL(KIND=DP) :: Sigma(9,nstemp)
!! Electrical conductivity
REAL(KIND=DP) :: ekk
!! Energy relative to Fermi level: $$\varepsilon_{n\mathbf{k}}-\varepsilon_F$$
REAL(KIND=DP) :: dfnk
!! Derivative Fermi distribution $$-df_{nk}/dE_{nk}$$
REAL(KIND=DP) :: carrier_density
!! Carrier density [nb of carrier per unit cell]
REAL(KIND=DP) :: fnk
!! Fermi-Dirac occupation function
REAL(KIND=DP) :: mobility
!! Sum of the diagonalized mobilities [cm^2/Vs]
REAL(KIND=DP) :: mobility_xx
!! Mobility along the xx axis after diagonalization [cm^2/Vs]
REAL(KIND=DP) :: mobility_yy
!! Mobility along the yy axis after diagonalization [cm^2/Vs]
REAL(KIND=DP) :: mobility_zz
!! Mobility along the zz axis after diagonalization [cm^2/Vs]
REAL(KIND=DP) :: sigma_up(3,3)
!! Conductivity matrix in upper-triangle
REAL(KIND=DP) :: sigma_eig(3)
!! Eigenvalues from the diagonalized conductivity matrix
REAL(KIND=DP) :: sigma_vect(3,3)
!! Eigenvectors from the diagonalized conductivity matrix
REAL(KIND=DP) :: inv_cell
!! Inverse of the volume in [Bohr^{-3}]
REAL(KIND=DP), EXTERNAL :: wgauss
!! Compute the approximate theta function. Here computes Fermi-Dirac
REAL(KIND=DP), EXTERNAL :: w0gauss
!! The derivative of wgauss: an approximation to the delta function
!
inv_cell = 1.0d0/omega
!
IF (ncarrier < -1E5) THEN ! If true print hole
Sigma(:,:) = zero
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
DO itemp=1, nstemp
etemp = transp_temp(itemp)
DO ik=1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
IF (etf_all (ibnd, ik) < ef0(itemp) ) THEN
tdf_sigma(:) = zero
ij = 0
DO j = 1, 3
DO i = 1, 3
ij = ij + 1
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_out(j, ibnd, ik, itemp) * wkf_all(ik)
ENDDO
ENDDO
!
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik) - ef0(itemp)
!
! derivative Fermi distribution
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
!
! electrical conductivity
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
!
ENDIF ! if below Fermi level
ENDDO ! ibnd
ENDDO ! ik
ENDDO ! itemp
!
DO itemp=1, nstemp
etemp = transp_temp(itemp)
carrier_density = 0.0
!
DO ik = 1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
! This selects only valence bands for hole conduction
IF (etf_all (ibnd, ik) < ef0(itemp) ) THEN
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik) - ef0(itemp)
fnk = wgauss( -ekk / etemp, -99)
! The wkf(ikk) already include a factor 2
carrier_density = carrier_density + wkf_all(ik) * (1.0d0 - fnk )
ENDIF
ENDDO
ENDDO
!
sigma_up(:,:) = zero
sigma_up(1,1) = Sigma(1,itemp)
sigma_up(1,2) = Sigma(2,itemp)
sigma_up(1,3) = Sigma(3,itemp)
sigma_up(2,1) = Sigma(4,itemp)
sigma_up(2,2) = Sigma(5,itemp)
sigma_up(2,3) = Sigma(6,itemp)
sigma_up(3,1) = Sigma(7,itemp)
sigma_up(3,2) = Sigma(8,itemp)
sigma_up(3,3) = Sigma(9,itemp)
!
! Diagonalize the conductivity matrix
CALL rdiagh(3,sigma_up,3,sigma_eig,sigma_vect)
!
mobility_xx = ( sigma_eig(1) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility_yy = ( sigma_eig(2) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility_zz = ( sigma_eig(3) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility = (mobility_xx+mobility_yy+mobility_zz)/3
! carrier_density in cm^-1
carrier_density = carrier_density * inv_cell * ( bohr2ang * ang2cm)**(-3)
WRITE(stdout,'(5x, 1f8.3, 1f12.4, 1E19.6, 1E19.6, a)') etemp * ryd2ev/kelvin2eV, &
ef0(itemp)*ryd2ev, carrier_density, mobility_xx, ' x-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility_yy, ' y-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility_zz, ' z-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility, ' avg'
av_mob(itemp) = mobility
ENDDO
!
! Now electron mobility
ENDIF
IF (ncarrier > 1E5 ) THEN
! Needed because of residual values from the hole above
Sigma(:,:) = zero
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
DO itemp=1, nstemp
etemp = transp_temp(itemp)
DO ik=1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
IF (etf_all (ibnd, ik) > ef0(itemp) ) THEN
tdf_sigma(:) = zero
ij = 0
DO j = 1, 3
DO i = 1, 3
ij = ij + 1
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_out(j, ibnd, ik, itemp) * wkf_all(ik)
ENDDO
ENDDO
!
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik) - ef0(itemp)
!
! derivative Fermi distribution
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
!
! electrical conductivity
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
!
ENDIF ! if below Fermi level
ENDDO ! ibnd
ENDDO ! ik
ENDDO ! itemp
!
DO itemp=1, nstemp
etemp = transp_temp(itemp)
carrier_density = 0.0
!
DO ik = 1, nkqtotf/2
DO ibnd = 1, ibndmax-ibndmin+1
! This selects only valence bands for electron conduction
IF (etf_all (ibnd, ik) > ef0(itemp) ) THEN
! energy at k (relative to Ef)
ekk = etf_all (ibnd, ik) - ef0(itemp)
fnk = wgauss( -ekk / etemp, -99)
! The wkf(ikk) already include a factor 2
carrier_density = carrier_density + wkf_all(ik) * fnk
ENDIF
ENDDO
ENDDO
!
sigma_up(:,:) = zero
sigma_up(1,1) = Sigma(1,itemp)
sigma_up(1,2) = Sigma(2,itemp)
sigma_up(1,3) = Sigma(3,itemp)
sigma_up(2,1) = Sigma(4,itemp)
sigma_up(2,2) = Sigma(5,itemp)
sigma_up(2,3) = Sigma(6,itemp)
sigma_up(3,1) = Sigma(7,itemp)
sigma_up(3,2) = Sigma(8,itemp)
sigma_up(3,3) = Sigma(9,itemp)
!
! Diagonalize the conductivity matrix
CALL rdiagh(3,sigma_up,3,sigma_eig,sigma_vect)
!
mobility_xx = ( sigma_eig(1) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility_yy = ( sigma_eig(2) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility_zz = ( sigma_eig(3) * electron_SI * ( bohr2ang * ang2cm)**2) /( carrier_density * hbarJ)
mobility = (mobility_xx+mobility_yy+mobility_zz)/3
! carrier_density in cm^-1
carrier_density = carrier_density * inv_cell * ( bohr2ang * ang2cm)**(-3)
WRITE(stdout,'(5x, 1f8.3, 1f12.4, 1E19.6, 1E19.6, a)') etemp * ryd2ev/kelvin2eV, &
ef0(itemp)*ryd2ev, carrier_density, mobility_xx, ' x-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility_yy, ' y-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility_zz, ' z-axis'
WRITE(stdout,'(45x, 1E18.6, a)') mobility, ' avg'
av_mob(itemp) = mobility
ENDDO
!
ENDIF
!
RETURN
!
!-----------------------------------------------------------------------
END SUBROUTINE print_mob
!-----------------------------------------------------------------------
!

View File

@ -7,7 +7,7 @@
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!-----------------------------------------------------------------------
SUBROUTINE selfen_elec_q ( iq, first_cycle )
SUBROUTINE selfen_elec_q ( iqq, iq, totq, first_cycle )
!-----------------------------------------------------------------------
!!
!! Compute the imaginary part of the electron self energy due to electron-
@ -22,7 +22,7 @@
!!
!! This subroutine computes the contribution from phonon iq to all k-points
!! The outer loop in ephwann_shuffle.f90 will loop over all iq points
!! The contribution from each iq is summed at the end of this subroutine for iq=nqtotf
!! The contribution from each iq is summed at the end of this subroutine for iqq=totq
!! to recover the per-ik electron self energy
!!
!! RM 24/02/2014
@ -39,7 +39,7 @@
restart, restart_freq
USE pwcom, ONLY : ef !, nelec, isk
USE elph2, ONLY : etf, ibndmin, ibndmax, nkqf, xqf, &
nkf, epf17, nqtotf, wf, wqf, xkf, nkqtotf, &
nkf, epf17, wf, wqf, xkf, nkqtotf, &
sigmar_all, sigmai_all, sigmai_mode, zi_all, efnew
USE transportcom, ONLY : lower_bnd
USE control_flags, ONLY : iverbosity
@ -54,8 +54,12 @@
!
LOGICAL, INTENT (INOUT) :: first_cycle
!! Use to determine weather this is the first cycle after restart
INTEGER, INTENT(IN) :: iqq
!! Q-point index from selecq.fmt window
INTEGER, INTENT(IN) :: iq
!! Q-point inde
!! Q-point index from full grid
INTEGER, INTENT(IN) :: totq
!! Total number of q-points from the selecq.fmt grid.
!
! Local variables
!
@ -334,7 +338,7 @@
CALL mp_sum(fermicount, inter_pool_comm)
CALL mp_barrier(inter_pool_comm)
!
CALL electron_write(iq,nqtotf,nksqtotf,sigmar_all,sigmai_all,zi_all)
CALL electron_write(iq,totq,nksqtotf,sigmar_all,sigmai_all,zi_all)
!
ENDIF
ENDIF
@ -342,7 +346,7 @@
!
! The k points are distributed among pools: here we collect them
!
IF ( iq .eq. nqtotf ) THEN
IF ( iqq == totq ) THEN
!
ALLOCATE ( xkf_all ( 3, nkqtotf ), &
etf_all ( nbndsub, nkqtotf ) )

View File

@ -7,7 +7,7 @@
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!-----------------------------------------------------------------------
SUBROUTINE selfen_phon_q (iq )
SUBROUTINE selfen_phon_q ( iqq, iq, totq )
!-----------------------------------------------------------------------
!!
!! compute the imaginary part of the phonon self energy due to electron-
@ -29,15 +29,13 @@
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
use phcom, ONLY : nmodes
use epwcom, ONLY : nbndsub, fsthick, &
use epwcom, ONLY : nbndsub, fsthick, efermi_read, fermi_energy, &
eptemp, ngaussw, degaussw, shortrange, &
nsmear, delta_smear, eps_acustic, specfun_ph, &
efermi_read, fermi_energy, delta_approx, vme
delta_approx, vme
use pwcom, ONLY : nelec, ef, isk
use elph2, ONLY : epf17, ibndmax, ibndmin, etf, &
wkf, xqf, wqf, nkqf, nqtotf, &
nkf, wf, nkqtotf, xqf, &
lambda_all, lambda_v_all, &
use elph2, ONLY : epf17, ibndmax, ibndmin, etf, wkf, xqf, wqf, nkqf, &
nkf, wf, nkqtotf, xqf, lambda_all, lambda_v_all, &
dmef, vmef, gamma_all,gamma_v_all, efnew
USE constants_epw, ONLY : ryd2mev, ryd2ev, two, zero, pi, eps4, eps6
use mp, ONLY : mp_barrier, mp_sum
@ -45,8 +43,12 @@
!
implicit none
!
INTEGER, INTENT (in) :: iqq
!! Current q-point index from the selecq
INTEGER, INTENT (in) :: iq
!! Current q-point index
INTEGER, INTENT (in) :: totq
!! Total number of q-points in selecq.fmt
!
! Local variables
!
@ -154,7 +156,7 @@
REAL(kind=DP), PARAMETER :: eps2 = 0.01/ryd2mev
!! Tolerence
!
IF ( iq .eq. 1 ) THEN
IF ( iq == 1 ) THEN
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Phonon (Imaginary) Self-Energy in the Migdal Approximation")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
@ -165,12 +167,12 @@
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
!
IF ( .not. ALLOCATED (lambda_all) ) ALLOCATE( lambda_all (nmodes, nqtotf, nsmear) )
IF ( .not. ALLOCATED (lambda_v_all) ) ALLOCATE( lambda_v_all(nmodes, nqtotf, nsmear) )
IF ( .not. ALLOCATED (lambda_all) ) ALLOCATE( lambda_all (nmodes, totq, nsmear) )
IF ( .not. ALLOCATED (lambda_v_all) ) ALLOCATE( lambda_v_all(nmodes, totq, nsmear) )
lambda_all(:,:,:) = zero
lambda_v_all(:,:,:) = zero
IF ( .not. ALLOCATED (gamma_all) ) ALLOCATE( gamma_all (nmodes,nqtotf,nsmear) )
IF ( .not. ALLOCATED (gamma_v_all) ) ALLOCATE( gamma_v_all(nmodes,nqtotf,nsmear) )
IF ( .not. ALLOCATED (gamma_all) ) ALLOCATE( gamma_all (nmodes, totq, nsmear) )
IF ( .not. ALLOCATED (gamma_v_all) ) ALLOCATE( gamma_v_all(nmodes, totq, nsmear) )
gamma_all(:,:,:) = zero
gamma_v_all(:,:,:) = zero
!
@ -207,7 +209,7 @@
! N(Ef) in the equation for lambda is the DOS per spin
dosef = dosef / two
!
IF ( iq .eq. 1 ) THEN
IF ( iq == 1 ) THEN
WRITE (stdout, 100) degaussw0 * ryd2ev, ngaussw
WRITE (stdout, 101) dosef / ryd2ev, ef0 * ryd2ev
!WRITE (stdout, 101) dosef / ryd2ev, ef * ryd2ev

View File

@ -7,7 +7,7 @@
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!-----------------------------------------------------------------------
SUBROUTINE selfen_pl_q ( iq )
SUBROUTINE selfen_pl_q ( iqq, iq, totq )
!-----------------------------------------------------------------------
!
! Compute the imaginary part of the electron self energy due to electron-
@ -28,22 +28,30 @@
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
USE io_epw, ONLY : linewidth_elself
USE epwcom, ONLY : nbndsub, fsthick, eptemp, ngaussw, degaussw, &
efermi_read, fermi_energy, &
USE epwcom, ONLY : nbndsub, fsthick, eptemp, ngaussw, &
efermi_read, fermi_energy, degaussw,&
nel, meff, epsiHEG
USE pwcom, ONLY : ef
USE elph2, ONLY : etf, ibndmin, ibndmax, nkqf, &
nkf, nqtotf, wqf, xkf, nkqtotf, &
sigmar_all, sigmai_all, sigmai_mode, zi_all, efnew, &
xqf, dmef
USE elph2, ONLY : etf, ibndmin, ibndmax, nkqf, xqf, dmef, &
nkf, wqf, xkf, nkqtotf, efnew, &
sigmar_all, sigmai_all, sigmai_mode, zi_all
USE constants_epw, ONLY : ryd2mev, one, ryd2ev, two, zero, pi, ci, eps6
USE mp, ONLY : mp_barrier, mp_sum
USE mp_global, ONLY : inter_pool_comm
use cell_base, ONLY : omega, alat, bg
USE division, ONLY : fkbounds
!
implicit none
!
INTEGER :: ik, ikk, ikq, ibnd, jbnd, iq, fermicount
INTEGER, INTENT (IN) :: iqq
!! Q-index from the selected q
INTEGER, INTENT (IN) :: iq
!! Q-index from the global q
INTEGER, INTENT (IN) :: totq
!! Number of q-points in selecq window
!
! Local varialbes
INTEGER :: ik, ikk, ikq, ibnd, jbnd, fermicount
INTEGER :: nksqtotf, lower_bnd, upper_bnd
INTEGER :: n
!! Integer for the degenerate average over eigenstates
@ -79,7 +87,7 @@
inv_eptemp0 = 1.0/eptemp
inv_degaussw = 1.0/degaussw
!
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Electron-plasmon Self-Energy in the Migdal Approximation")')
@ -107,7 +115,7 @@
!
ENDIF
!
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
WRITE (stdout, 100) degaussw * ryd2ev, ngaussw
WRITE (stdout,'(a)') ' '
ENDIF
@ -154,7 +162,7 @@
CALL get_eps_mahan (qin,rs,kF,eps0) ! qin should be in atomic units for Mahan formula
deltaeps = -(1.d0/(epsiHEG+eps0-1.d0)-1.d0/epsiHEG)
!
IF (iq .EQ. 1) THEN
IF (iqq == 1) THEN
WRITE(stdout,'(12x," nel = ", E15.10)') nel
WRITE(stdout,'(12x," meff = ", E15.10)') meff
WRITE(stdout,'(12x," rs = ", E15.10)') rs
@ -337,7 +345,7 @@
!
! The k points are distributed among pools: here we collect them
!
IF ( iq .eq. nqtotf ) THEN
IF ( iqq == totq ) THEN
!
ALLOCATE ( xkf_all ( 3, nkqtotf ), &
etf_all ( nbndsub, nkqtotf ) )

View File

@ -7,7 +7,7 @@
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!-----------------------------------------------------------------------
SUBROUTINE spectral_func_q ( iq )
SUBROUTINE spectral_func_q ( iqq, iq, totq )
!-----------------------------------------------------------------------
!!
!! Compute the electron spectral function including the electron-
@ -32,16 +32,21 @@
efermi_read, fermi_energy
USE pwcom, ONLY : nelec, ef, isk
USE elph2, ONLY : etf, ibndmin, ibndmax, nkqf, xqf, &
epf17, wkf, nkf, nqtotf, wf, wqf, xkf, nkqtotf,&
epf17, wkf, nkf, wf, wqf, xkf, nkqtotf,&
esigmar_all, esigmai_all, a_all
USE constants_epw, ONLY : ryd2mev, one, ryd2ev, two, zero, pi, ci
USE mp, ONLY : mp_barrier, mp_sum
USE mp_global, ONLY : me_pool, inter_pool_comm
USE division, ONLY : fkbounds
!
implicit none
!
INTEGER, INTENT (in) :: iqq
!! Current q-point index in selecq
INTEGER, INTENT (in) :: iq
!! Current q-point index
INTEGER, INTENT (in) :: totq
!! Total number of q-point in window
!
! Local variables
!
@ -118,7 +123,7 @@
!
dw = ( wmax_specfun - wmin_specfun ) / dble (nw_specfun-1)
!
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Electron Spectral Function in the Migdal Approximation")')
@ -145,7 +150,7 @@
!
ENDIF
!
IF ( iq .eq. 1 ) THEN
IF ( iq == 1 ) THEN
WRITE (stdout, 100) degaussw * ryd2ev, ngaussw
WRITE (stdout,'(a)') ' '
ENDIF
@ -157,7 +162,7 @@
! find the bounds of k-dependent arrays in the parallel case in each pool
CALL fkbounds( nksqtotf, lower_bnd, upper_bnd )
!
IF ( iq .eq. 1 ) THEN
IF ( iq == 1 ) THEN
IF ( .not. ALLOCATED(esigmar_all) ) ALLOCATE( esigmar_all(ibndmax-ibndmin+1, nksqtotf, nw_specfun) )
IF ( .not. ALLOCATED(esigmai_all) ) ALLOCATE( esigmai_all(ibndmax-ibndmin+1, nksqtotf, nw_specfun) )
esigmar_all(:,:,:) = zero
@ -165,7 +170,7 @@
ENDIF
!
! SP: Sum rule added to conserve the number of electron.
IF ( iq .eq. 1 ) THEN
IF ( iq == 1 ) THEN
WRITE (stdout,'(5x,a)') 'The sum rule to conserve the number of electron is enforced.'
WRITE (stdout,'(5x,a)') 'The self energy is rescaled so that its real part is zero at the Fermi level.'
WRITE (stdout,'(5x,a)') 'The sum rule replace the explicit calculation of the Debye-Waller term.'
@ -263,7 +268,7 @@
!
! The k points are distributed among pools: here we collect them
!
IF ( iq .eq. nqtotf ) THEN
IF ( iqq == totq ) THEN
!
ALLOCATE ( xkf_all ( 3, nkqtotf ), &
etf_all ( nbndsub, nkqtotf ) )

View File

@ -7,7 +7,7 @@
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!-----------------------------------------------------------------------
SUBROUTINE spectral_func_ph (iq )
SUBROUTINE spectral_func_ph ( iqq, iq, totq )
!-----------------------------------------------------------------------
!
! Compute the imaginary part of the phonon self energy due to electron-
@ -33,7 +33,7 @@
wmax_specfun, nw_specfun
USE pwcom, ONLY : nelec, ef, isk
USE elph2, ONLY : epf17, ibndmax, ibndmin, etf, &
wkf, xqf, nkqf, nqtotf, &
wkf, xqf, nkqf, &
nkf, wf, a_all, &
gammai_all,gammar_all, efnew
USE constants_epw, ONLY : ryd2mev, ryd2ev, two, zero, pi, cone, ci
@ -43,8 +43,12 @@
!
implicit none
!
INTEGER, INTENT (in) :: iqq
!! Current q-point index from selecq
INTEGER, INTENT (in) :: iq
!! Current q-point index
INTEGER, INTENT (in) :: totq
!! Total q-points in selecq window
!
INTEGER :: ik
!! Counter on the k-point index
@ -123,7 +127,7 @@
!qsquared = (xqf(1,iq)**2 + xqf(2,iq)**2 + xqf(3,iq)**2) * tpiba2
!epsTF = (qTF**2 + qsquared) / (qTF**2/eps0 * sin (sqrt(qsquared)*RTF)/(sqrt(qsquared)*RTF)+qsquared)
!
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Phonon Spectral Function Self-Energy in the Migdal Approximation (on the fly)")')
WRITE(stdout,'(5x,a/)') repeat('=',67)
@ -134,8 +138,8 @@
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
!
IF ( .not. ALLOCATED (gammai_all) ) ALLOCATE( gammai_all (nmodes,nqtotf,nw_specfun) )
IF ( .not. ALLOCATED (gammar_all) ) ALLOCATE( gammar_all (nmodes,nqtotf,nw_specfun) )
IF ( .not. ALLOCATED (gammai_all) ) ALLOCATE( gammai_all (nmodes, totq, nw_specfun) )
IF ( .not. ALLOCATED (gammar_all) ) ALLOCATE( gammar_all (nmodes, totq, nw_specfun) )
gammar_all(:,:,:) = zero
gammai_all(:,:,:) = zero
!
@ -294,10 +298,10 @@
#endif
!
WRITE(stdout,'(5x,a)')
IF (.not. ALLOCATED (a_all)) ALLOCATE ( a_all(nw_specfun,nqtotf) )
IF (.not. ALLOCATED (a_all)) ALLOCATE ( a_all(nw_specfun, totq) )
a_all(:,:) = zero
!
IF (iq == 1 ) THEN
IF (iqq == 1 ) THEN
IF (mpime.eq.ionode_id) THEN
OPEN(unit=iospectral,file='specfun.phon')
OPEN(unit=iospectral_sup,file='specfun_sup.phon')
@ -318,7 +322,7 @@
WRITE(stdout,105) imode, ryd2ev * wq, ryd2mev * gammar_all(imode,iq,1), ryd2mev * gammai_all(imode,iq,1)
ENDDO
WRITE( stdout, '(5x,a,i8,a,i8)' ) &
'Number of (k,k+q) pairs on the Fermi surface: ',fermicount, ' out of ', nqtotf
'Number of (k,k+q) pairs on the Fermi surface: ',fermicount, ' out of ', totq
!
! Write to support files
@ -351,8 +355,8 @@
!
ENDDO
!
IF (iq == nqtotf ) THEN
IF (mpime.eq.ionode_id) THEN
IF (iqq == totq ) THEN
IF (mpime == ionode_id) THEN
CLOSE(iospectral)
CLOSE(iospectral_sup)
ENDIF

View File

@ -7,7 +7,7 @@
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
!
!-----------------------------------------------------------------------
SUBROUTINE spectral_func_pl_q ( iq )
SUBROUTINE spectral_func_pl_q ( iqq, iq, totq )
!-----------------------------------------------------------------------
!
! Compute the electron spectral function including the electron-
@ -32,20 +32,29 @@
nel, meff, epsiHEG
USE pwcom, ONLY : nelec, ef, isk
USE elph2, ONLY : etf, ibndmin, ibndmax, nkqf, &
wkf, nkf, nqtotf, wqf, xkf, nkqtotf,&
wkf, nkf, wqf, xkf, nkqtotf,&
esigmar_all, esigmai_all, a_all,&
xqf, dmef
USE constants_epw, ONLY : ryd2mev, one, ryd2ev, two, zero, pi, ci
USE mp, ONLY : mp_barrier, mp_sum
USE mp_global, ONLY : me_pool, inter_pool_comm
USE cell_base, ONLY : omega, alat, bg
USE division, ONLY : fkbounds
!
implicit none
!
INTEGER, INTENT(IN) :: iqq
!! Q-point index in selecq
INTEGER, INTENT(IN) :: iq
!! Q-point index
INTEGER, INTENT(IN) :: totq
!! Total number of q-points in fsthick window
!
! variables for collecting data from all pools in parallel case
!
integer :: iw, ik, ikk, ikq, ibnd, jbnd, iq, fermicount
integer :: nksqtotf, lower_bnd, upper_bnd
INTEGER :: iw, ik, ikk, ikq, ibnd, jbnd, fermicount
INTEGER :: nksqtotf, lower_bnd, upper_bnd
REAL(kind=DP), external :: efermig, dos_ef, wgauss
REAL(kind=DP) :: g2, ekk, ekq, wq, ef0, wgq, wgkq, ww, dw, weight
REAL(kind=DP) :: specfun_sum, esigmar0, tpiba_new
@ -62,7 +71,7 @@
!
dw = ( wmax_specfun - wmin_specfun ) / dble (nw_specfun-1)
!
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Electron Spectral Function in the Migdal Approximation")')
@ -89,7 +98,7 @@
!
ENDIF
!
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
WRITE (stdout, 100) degaussw * ryd2ev, ngaussw
WRITE (stdout,'(a)') ' '
ENDIF
@ -101,7 +110,7 @@
! find the bounds of k-dependent arrays in the parallel case in each pool
CALL fkbounds( nksqtotf, lower_bnd, upper_bnd )
!
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
IF ( .not. ALLOCATED(esigmar_all) ) ALLOCATE( esigmar_all(ibndmax-ibndmin+1, nksqtotf, nw_specfun) )
IF ( .not. ALLOCATED(esigmai_all) ) ALLOCATE( esigmai_all(ibndmax-ibndmin+1, nksqtotf, nw_specfun) )
esigmar_all(:,:,:) = zero
@ -109,7 +118,7 @@
ENDIF
!
! SP: Sum rule added to conserve the number of electron.
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
WRITE (stdout,'(5x,a)') 'The sum rule to conserve the number of electron is enforced.'
WRITE (stdout,'(5x,a)') 'The self energy is rescaled so that its real part is zero at the Fermi level.'
WRITE (stdout,'(5x,a)') 'The sum rule replace the explicit calculation of the Debye-Waller term.'
@ -246,7 +255,7 @@
!
! The k points are distributed among pools: here we collect them
!
IF ( iq .eq. nqtotf ) THEN
IF ( iqq == totq ) THEN
!
ALLOCATE ( xkf_all ( 3, nkqtotf ), &
etf_all ( nbndsub, nkqtotf ) )

View File

@ -514,6 +514,7 @@
USE eliashbergcom, ONLY : nkfs, nbndfs, nsiw, nqfs, limag_fly, memlt_pool
USE mp_global, ONLY : inter_pool_comm, my_pool_id
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -568,7 +569,7 @@
! collect contributions from all pools
CALL mp_sum( memlt_pool, inter_pool_comm )
CALL mp_barrier(inter_pool_comm)
!
ENDIF
!
IF ( limag_fly ) THEN
@ -596,6 +597,7 @@
USE eliashbergcom, ONLY : nkfs, nbndfs, nqfs, lacon_fly, memlt_pool
USE mp_global, ONLY : inter_pool_comm, my_pool_id
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!

View File

@ -260,6 +260,7 @@
USE mp_world, ONLY : mpime
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE io_eliashberg, ONLY : eliashberg_write_iaxis
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -520,6 +521,7 @@
USE mp_world, ONLY : mpime
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE io_eliashberg, ONLY : eliashberg_write_raxis
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -801,6 +803,7 @@
USE mp_world, ONLY : mpime
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE io_eliashberg, ONLY : eliashberg_write_raxis
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -964,6 +967,7 @@
USE epwcom, ONLY : fsthick
USE eliashbergcom, ONLY : nkfs, nbndfs, nsiw, estemp, AKeri, ekfs, ef0, ixkqf, ixqfs, nqfs
USE constants_epw, ONLY : pi, zero
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -1133,6 +1137,7 @@
USE superconductivity, ONLY : mem_size_eliashberg
USE constants_epw, ONLY : zero
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -1339,6 +1344,7 @@
USE eliashbergcom, ONLY : nkfs, nbndfs, g2, a2fij, ixkqf, ixqfs, nqfs, ekfs, ef0, &
dosef, wsph
USE constants_epw, ONLY : zero
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -1422,6 +1428,7 @@
USE mp_global, ONLY : inter_pool_comm, my_pool_id, npool
USE mp_world, ONLY : mpime
USE mp, ONLY : mp_bcast, mp_barrier, mp_sum
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!

View File

@ -17,7 +17,171 @@
CONTAINS
!
!-----------------------------------------------------------------------
SUBROUTINE scattering_rate_q( iq, ef0, efcb, first_cycle )
SUBROUTINE qwindow(exst, nrr_k, dims, totq, selecq, irvec_r, ndegen_k, cufkk, cufkq)
!-----------------------------------------------------------------------
!!
!! This subroutine pre-computes the q-points that falls within the fstichk
!!
!-----------------------------------------------------------------------
USE kinds, ONLY : DP
USE elph2, ONLY : nqf, xqf, xkf, chw, etf, nkf
USE mp_world, ONLY : mpime, world_comm
USE mp_global, ONLY : my_pool_id
USE io_global, ONLY : ionode_id, stdout
USE io_epw, ONLY : iunselecq
USE mp_global, ONLY : npool
USE mp, ONLY : mp_sum, mp_bcast
USE constants_epw, ONLY : twopi, ci
USE epwcom, ONLY : nbndsub, fsthick, use_ws
USE pwcom, ONLY : ef
USE wan2bloch, ONLY : hamwan2bloch
!
IMPLICIT NONE
!
LOGICAL, INTENT(in) :: exst
!! If the file exist
INTEGER, INTENT(IN) :: nrr_k
!! Number of WS points for electrons
INTEGER, INTENT(IN) :: dims
!! Dims is either nat if use_ws or 1 if not
INTEGER, INTENT(INOUT) :: totq
!! Total number of q-points inside fsthick
INTEGER, ALLOCATABLE, INTENT(OUT) :: selecq(:)
!! List of selected q-points
INTEGER, INTENT(IN) :: ndegen_k(nrr_k, dims, dims)
!! Wigner-Seitz number of degenerescence (weights) for the electrons grid
REAL(kind=DP), INTENT(IN) :: irvec_r(3, nrr_k)
!! Wigner-Size supercell vectors, store in real instead of integer
COMPLEX(kind=DP), INTENT(OUT) :: cufkk (nbndsub, nbndsub)
!! Rotation matrix, fine mesh, points k
COMPLEX(kind=DP), INTENT(OUT) :: cufkq (nbndsub, nbndsub)
!! the same, for points k+q
!
! Local variable
INTEGER :: ios
!! integer variable for I/O control
INTEGER :: iq
!! Counter on coarse q-point grid
INTEGER :: ik, ikk, ikq
!! Counter on coarse k-point grid
INTEGER :: found(npool)
!! Indicate if a q-point was found within the window
INTEGER :: iw
!! Counter on bands when use_ws == .true.
INTEGER :: iw2
!! Counter on bands when use_ws == .true.
INTEGER :: ir
!! Counter for WS loop
INTEGER :: nqtot
!! Total number of q-point for verifications
!
REAL(kind=DP) :: xxq(3)
!! Current q-point
REAL(kind=DP) :: xkk(3)
!! Current k-point on the fine grid
REAL(kind=DP) :: xkq(3)
!! Current k-point on the fine grid
REAL(kind=DP) :: rdotk(nrr_k)
!! $r\cdot k$
REAL(kind=DP) :: rdotk2(nrr_k)
!! $r\cdot k$
!
COMPLEX(kind=DP) :: cfac(nrr_k, dims, dims)
!! Used to store $e^{2\pi r \cdot k}$ exponential
COMPLEX(kind=DP) :: cfacq(nrr_k, dims, dims)
!! Used to store $e^{2\pi r \cdot k+q}$ exponential
!
!selecq(:) = 0
rdotk(:) = 0
rdotk2(:) = 0
!
IF (exst) THEN
IF (mpime == ionode_id) THEN
OPEN(unit=iunselecq, file='selecq.fmt', status='old', iostat=ios)
READ (iunselecq,*) totq
ALLOCATE(selecq(totq))
selecq(:) = 0
READ (iunselecq,*) nqtot
READ (iunselecq,*) selecq(:)
CLOSE(iunselecq)
ENDIF
CALL mp_bcast(totq , ionode_id, world_comm )
CALL mp_bcast(selecq, ionode_id, world_comm )
IF (nqtot /= nqf) THEN
CALL errore( 'qwindow', 'Cannot read from selecq.fmt, the q-point grid or &
fsthick window are different from read one. Remove the selecq.fmt file and restart. ',1 )
ENDIF
!
ELSE
ALLOCATE(selecq(nqf))
selecq(:) = 0
!
DO iq=1, nqf
xxq = xqf (:, iq)
!
found(:) = 0
DO ik = 1, nkf
ikk = 2 * ik - 1
ikq = ikk + 1
!
xkk = xkf(:, ikk)
xkq = xkk + xxq
!
CALL dgemv('t', 3, nrr_k, twopi, irvec_r, 3, xkk, 1, 0.0_DP, rdotk, 1 )
CALL dgemv('t', 3, nrr_k, twopi, irvec_r, 3, xkq, 1, 0.0_DP, rdotk2, 1 )
IF (use_ws) THEN
DO iw=1, dims
DO iw2=1, dims
DO ir = 1, nrr_k
IF (ndegen_k(ir,iw2,iw) > 0) THEN
cfac(ir,iw2,iw) = exp( ci*rdotk(ir) ) / ndegen_k(ir,iw2,iw)
cfacq(ir,iw2,iw) = exp( ci*rdotk2(ir) ) / ndegen_k(ir,iw2,iw)
ENDIF
ENDDO
ENDDO
ENDDO
ELSE
cfac(:,1,1) = exp( ci*rdotk(:) ) / ndegen_k(:,1,1)
cfacq(:,1,1) = exp( ci*rdotk2(:) ) / ndegen_k(:,1,1)
ENDIF
!
CALL hamwan2bloch ( nbndsub, nrr_k, cufkk, etf(:, ikk), chw, cfac, dims)
CALL hamwan2bloch ( nbndsub, nrr_k, cufkq, etf(:, ikq), chw, cfacq, dims)
!
IF ( (( minval ( abs(etf(:, ikk) - ef) ) < fsthick ) .and. &
( minval ( abs(etf(:, ikq) - ef) ) < fsthick )) ) THEN
found(my_pool_id+1) = 1
EXIT ! exit the loop
ENDIF
ENDDO ! k-loop
! If found on any k-point from the pools
CALL mp_sum(found, world_comm)
!
IF (SUM(found) > 0) THEN
totq = totq + 1
selecq(totq) = iq
!
IF (MOD(totq,500) == 0) THEN
WRITE(stdout,'(5x,a,i8,i8)')'Number selected, total',totq,iq
ENDIF
ENDIF
!
ENDDO
IF (mpime == ionode_id) THEN
OPEN(unit=iunselecq, file='selecq.fmt')
WRITE (iunselecq,*) totq ! Selected number of q-points
WRITE (iunselecq,*) nqf ! Total number of q-points
WRITE (iunselecq,*) selecq(1:totq)
CLOSE(iunselecq)
ENDIF
!
ENDIF ! exst
!-----------------------------------------------------------------------
END SUBROUTINE qwindow
!-----------------------------------------------------------------------
!
!-----------------------------------------------------------------------
SUBROUTINE scattering_rate_q(iqq, iq, totq, ef0, efcb, first_cycle )
!-----------------------------------------------------------------------
!!
!! This subroutine computes the scattering rate (inv_tau)
@ -44,8 +208,12 @@
!
LOGICAL, INTENT (INOUT) :: first_cycle
!! Use to determine weather this is the first cycle after restart
INTEGER, INTENT(IN) :: iqq
!! Q-point index from the selected q
INTEGER, INTENT(IN) :: iq
!! Q-point inde
!! Q-point index
INTEGER, INTENT(IN) :: totq
!! Total number of q-points within the fstichk window
REAL(KIND=DP), INTENT(IN) :: ef0(nstemp)
!! Fermi level for the temperature itemp
REAL(KIND=DP), INTENT(IN) :: efcb(nstemp)
@ -138,7 +306,7 @@
!
CALL start_clock ( 'SCAT' )
!
IF ( iq .eq. 1 ) THEN
IF ( iqq == 1 ) THEN
!
WRITE(stdout,'(/5x,a)') repeat('=',67)
WRITE(stdout,'(5x,"Scattering rate")')
@ -396,7 +564,7 @@
!
! Creation of a restart point
IF (restart) THEN
IF (MOD(iq,restart_freq) == 0 ) THEN
IF (MOD(iqq,restart_freq) == 0 ) THEN
WRITE(stdout, '(a)' ) ' Creation of a restart point'
!
! The mp_sum will aggreage the results on each k-points.
@ -411,9 +579,9 @@
ENDIF
!
IF ( ABS(efcb(1)) > eps ) THEN
CALL tau_write(iq,nqtotf,nkqtotf/2,.TRUE.)
CALL tau_write(iqq,totq,nkqtotf/2,.TRUE.)
ELSE
CALL tau_write(iq,nqtotf,nkqtotf/2,.FALSE.)
CALL tau_write(iqq,totq,nkqtotf/2,.FALSE.)
ENDIF
!
! Now show intermediate mobility with that amount of q-points
@ -427,7 +595,7 @@
!
! The k points are distributed among pools: here we collect them
!
IF ( iq .eq. nqtotf ) THEN
IF ( iqq == totq ) THEN
!
! The total number of k points
!
@ -464,13 +632,13 @@
!
CALL merge_read( nkqtotf/2, nqtotf_new, inv_tau_all_new )
!
inv_tau_all(:,:,:) = ( inv_tau_all(:,:,:) * nqtotf &
+ inv_tau_all_new(:,:,:) * nqtotf_new ) / (nqtotf+nqtotf_new)
inv_tau_all(:,:,:) = ( inv_tau_all(:,:,:) * totq &
+ inv_tau_all_new(:,:,:) * nqtotf_new ) / (totq+nqtotf_new)
!
WRITE(stdout, '(a)' ) ' '
WRITE(stdout, '(a,i10,a)' ) ' Merge scattering for a total of ',nqtotf+nqtotf_new,' q-points'
WRITE(stdout, '(a,i10,a)' ) ' Merge scattering for a total of ',totq+nqtotf_new,' q-points'
!
CALL tau_write(iq+nqtotf_new,nqtotf+nqtotf_new,nkqtotf/2, .FALSE.)
CALL tau_write(iqq+nqtotf_new,totq+nqtotf_new,nkqtotf/2, .FALSE.)
WRITE(stdout, '(a)' ) ' Write to restart file the sum'
WRITE(stdout, '(a)' ) ' '
!
@ -552,18 +720,18 @@
WRITE(stdout, '(a)' ) ' Creation of the final restart point'
!
IF ( ABS(efcb(1)) > eps ) THEN
CALL tau_write(iq,nqtotf,nkqtotf/2,.TRUE.)
CALL tau_write(iqq,totq,nkqtotf/2,.TRUE.)
ELSE
CALL tau_write(iq,nqtotf,nkqtotf/2,.FALSE.)
CALL tau_write(iqq,totq,nkqtotf/2,.FALSE.)
ENDIF
!
ENDIF ! restart
!
ENDIF ! iq
ENDIF ! iqq
!
CALL stop_clock ( 'SCAT' )
! DBSP
!write(stdout,*),'iq ',iq
!write(stdout,*),'iqq ',iqq
!print*,shape(inv_tau_all)
!write(stdout,*),'inv_tau_all(1,5:8,21) ',SUM(inv_tau_all(3,5:8,1))
!write(stdout,*),'inv_tau_all(1,5:8,:) ',SUM(inv_tau_all(3,5:8,:))
@ -597,13 +765,12 @@
iterative_bte, vme
USE pwcom, ONLY : ef
USE elph2, ONLY : ibndmax, ibndmin, etf, nkf, wkf, dmef, vmef, &
inv_tau_all, nkqtotf, Fi_all, inv_tau_allcb, &
zi_allvb, zi_allcb, Fi_allcb, BZtoIBZ, &
s_BZtoIBZ, map_rebal
inv_tau_all, nkqtotf, inv_tau_allcb, &
zi_allvb, zi_allcb, map_rebal
USE transportcom, ONLY : transp_temp
USE constants_epw, ONLY : zero, one, bohr2ang, ryd2ev, electron_SI, &
kelvin2eV, hbar, Ang2m, hbarJ, ang2cm, czero
USE mp, ONLY : mp_sum
USE mp, ONLY : mp_sum, mp_bcast
USE mp_global, ONLY : world_comm
USE mp_world, ONLY : mpime
! SP - Uncomment to use symmetries on velocities
@ -616,6 +783,7 @@
USE constants_epw, ONLY : eps6
USE noncollin_module, ONLY : noncolin
USE io_scattering, ONLY : scattering_read
USE division, ONLY : fkbounds
!
IMPLICIT NONE
!
@ -652,6 +820,10 @@
!! Number of points in the BZ corresponding to a point in IBZ
INTEGER :: BZtoIBZ_tmp(nkf1*nkf2*nkf3)
!! Temporary mapping
INTEGER :: BZtoIBZ(nkf1*nkf2*nkf3)
!! BZ to IBZ mapping
INTEGER :: s_BZtoIBZ(3,3,nkf1*nkf2*nkf3)
!! symmetry
!
REAL(KIND=DP) :: ekk
!! Energy relative to Fermi level: $$\varepsilon_{n\mathbf{k}}-\varepsilon_F$$
@ -1549,7 +1721,9 @@
!
ENDDO ! nstemp
WRITE(stdout,'(5x)')
WRITE(stdout,'(5x,"Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.")')
WRITE(stdout,'(5x,"Note: Mobility are sorted by ascending values and might not correspond")')
WRITE(stdout,'(5x," to the expected (x,y,z) axis.")')
WRITE(stdout,'(5x)')
!
IF (mpime .eq. meta_ionode_id) CLOSE(iufilsigma)
!
@ -1563,38 +1737,6 @@
CALL print_clock ('MOB')
WRITE(stdout,'(5x)')
!
!! IF IBTE we want the SRTA solution to be the first iteration of IBTE
!IF (iterative_bte) THEN
! Fi_all(:,:,:,:) = zero
! IF ( ABS(efcb(1)) > eps ) Fi_allcb(:,:,:,:) = zero
! !
! DO itemp = 1, nstemp
! DO ik = 1, nkf
! ikk = 2 * ik - 1
! IF ( minval ( abs(etf (:, ikk) - ef) ) .lt. fsthick ) THEN
! DO ibnd = 1, ibndmax-ibndmin+1
! IF ( vme ) THEN
! vkk(:,ibnd) = REAL (vmef (:, ibndmin-1+ibnd, ibndmin-1+ibnd, ikk))
! ELSE
! vkk(:,ibnd) = 2.0 * REAL (dmef (:, ibndmin-1+ibnd, ibndmin-1+ibnd, ikk))
! ENDIF
! tau = one / inv_tau_all(itemp,ibnd,ik+lower_bnd-1)
! Fi_all(:,ibnd,ik+lower_bnd-1,itemp) = vkk(:,ibnd) * tau
! IF ( ABS(efcb(itemp)) > eps ) THEN
! tau = one / inv_tau_allcb(itemp,ibnd,ik+lower_bnd-1)
! Fi_allcb(:,ibnd,ik+lower_bnd-1,itemp) = vkk(:,ibnd) * tau
! ENDIF
! !
! ENDDO
! ENDIF
! ENDDO ! kpoints
! !DBSP
! print*,'itemp ',itemp,' ',sum(Fi_all(:,:,:,itemp)), sum(inv_tau_all)
! print*,'itemp cb',itemp,' ',sum(Fi_allcb(:,:,:,itemp)), sum(inv_tau_allcb)
! ENDDO ! itemp
! CALL mp_sum( Fi_all, world_comm )
! IF ( ABS(efcb(1)) > eps ) CALL mp_sum( Fi_allcb, world_comm )
!ENDIF
!
RETURN
!

File diff suppressed because it is too large Load Diff

View File

@ -18,9 +18,9 @@
!! lower bound for the k-depend index among the mpi pools
INTEGER :: upper_bnd
!! lower bound for the k-depend index among the mpi pools
INTEGER, ALLOCATABLE :: ixkqf_tr(:,:)
INTEGER, ALLOCATABLE :: ixkqf_tr(:)
!! Mapping matrix from k+q (where q is full BZ) to IBZ
INTEGER, ALLOCATABLE :: s_BZtoIBZ_full(:,:,:,:)
INTEGER, ALLOCATABLE :: s_BZtoIBZ_full(:,:,:)
!! Rotation that brink that k-point from BZ to IBZ
!
REAL(kind=DP), ALLOCATABLE :: transp_temp(:), &

View File

@ -15,6 +15,7 @@ then
KS_Solvers/Davidson KS_Solvers/Davidson_RCI KS_Solvers/CG KS_Solvers/PPCG \
PW/src CPV/src PW/tools upftools PP/src PWCOND/src \
PHonon/Gamma PHonon/PH PHonon/FD HP/src atomic/src \
EPW/src \
XSpectra/src ACFDT/src NEB/src TDDFPT/src \
GWW/pw4gww GWW/gww GWW/head GWW/bse GWW/simple \
GWW/simple_bse GWW/simple_ip"
@ -78,6 +79,8 @@ for dir in $dirs; do
DEPENDS="$DEPEND2 $LEVEL2/PW/src" ;;
PHonon/FD | PHonon/PH | PHonon/Gamma | HP/src | TDDFPT/src | XSpectra/src | GIPAW/src )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/LR_Modules" ;;
EPW/src )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/LR_Modules $LEVEL2/PHonon/PH $LEVEL2/Modules" ;;
GWW/head )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/PHonon/PH $LEVEL2/LR_Modules" ;;
GWW/bse )

View File

@ -149,7 +149,8 @@ clean:
epw_*/specfun.phon epw_*/specfun_sup.phon epw_*/*.tau_restart* \
epw_*/*_elcond_* epw_*/fort.* epw_*/decay.* epw_*/scattering_rate* \
epw_*/*.fc.* epw_*/*_band.dat epw_*/*F_restart* epw_*/*F_restart_CB* \
epw_*/*.mmn
epw_*/*.mmn epw_*/*.epmatkq* epw_*/*.epmatkqcb* epw_*/sparse* \
epw_*/*.Fin_restart* epw_*/*.Fin_restartcb*
# Special cases for EPW
@rm -rf epw_base/save epw_super/save

View File

@ -44,7 +44,7 @@
phonselfen = .false.
a2f = .false.
fsthick = 1.0 ! eV
fsthick = 1.2 ! eV
eptemp = 1 ! K
degaussw = 0.01 ! eV

View File

@ -26,6 +26,7 @@
restart = .true.
restart_freq = 1000
selecqread = .false.
lifc = .true.
asr_typ = 'crystal'

View File

@ -26,6 +26,7 @@
restart = .true.
restart_freq = 1000
selecqread = .true.
lifc = .true.
asr_typ = 'crystal'

View File

@ -27,7 +27,7 @@
Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.0.0 starts on 11Oct2018 at 15:25:31
Program EPW v.5.0.0 starts on 16Oct2018 at 14:25: 8
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
@ -328,9 +328,9 @@
l(4) = 1
l(5) = 2
l(6) = 2
EPW : 0.25s CPU 0.26s WALL
EPW : 0.23s CPU 0.24s WALL
EPW : 0.33s CPU 0.34s WALL
EPW : 0.31s CPU 0.32s WALL
No wavefunction gauge setting applied
-------------------------------------------------------------------
@ -818,7 +818,7 @@
( 0.16574 0.16574 0.33426) : 2.12920
-------------------------------------------------------------------
WANNIER : 9.89s CPU 10.13s WALL ( 1 calls)
WANNIER : 9.52s CPU 9.58s WALL ( 1 calls)
-------------------------------------------------------------------
Dipole matrix elements calculated
@ -910,6 +910,7 @@
Number of WS vectors for electrons 279
Number of WS vectors for phonons 19
Number of WS vectors for electron-phonon 19
Maximum number of cores for efficient parallelization 114
Results may improve by using use_ws == .true.
Writing Hamiltonian, Dynamical matrix and EP vertex in Wann rep to file
@ -933,7 +934,7 @@
===================================================================
Memory usage: VmHWM = 57Mb
VmPeak = 324Mb
VmPeak = 325Mb
===================================================================
Using q-mesh file: ./LGX.txt
@ -955,39 +956,40 @@
Number of ep-matrix elements per pool : 2400 ~= 18.75 Kb (@ 8 bytes/ DP)
Progression iq (fine) = 50/ 100
We only need to compute 100 q-points
Progression iq (fine) = 100/ 100
===================================================================
Memory usage: VmHWM = 57Mb
VmPeak = 324Mb
VmPeak = 325Mb
===================================================================
Unfolding on the coarse grid
elphon_wrap : 16.00s CPU 16.56s WALL ( 1 calls)
elphon_wrap : 15.45s CPU 15.92s WALL ( 1 calls)
INITIALIZATION:
set_drhoc : 0.18s CPU 0.18s WALL ( 9 calls)
set_drhoc : 0.17s CPU 0.17s WALL ( 9 calls)
init_vloc : 0.01s CPU 0.01s WALL ( 10 calls)
init_us_1 : 0.08s CPU 0.09s WALL ( 10 calls)
init_us_1 : 0.08s CPU 0.08s WALL ( 10 calls)
Electron-Phonon interpolation
ephwann : 2.58s CPU 2.96s WALL ( 1 calls)
ep-interp : 1.56s CPU 1.87s WALL ( 100 calls)
ephwann : 2.59s CPU 2.97s WALL ( 1 calls)
ep-interp : 1.50s CPU 1.82s WALL ( 100 calls)
Ham: step 1 : 0.00s CPU 0.00s WALL ( 1 calls)
Ham: step 2 : 0.03s CPU 0.03s WALL ( 1 calls)
ep: step 1 : 0.01s CPU 0.01s WALL ( 48 calls)
ep: step 2 : 0.46s CPU 0.47s WALL ( 48 calls)
DynW2B : 0.00s CPU 0.00s WALL ( 100 calls)
HamW2B : 0.42s CPU 0.44s WALL ( 20200 calls)
ephW2Bp : 0.29s CPU 0.55s WALL ( 100 calls)
HamW2B : 0.45s CPU 0.46s WALL ( 21866 calls)
ephW2Bp : 0.24s CPU 0.53s WALL ( 100 calls)
Total program execution
EPW : 28.79s CPU 29.99s WALL
EPW : 27.88s CPU 28.78s WALL
Please consider citing:

View File

@ -27,7 +27,7 @@
Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.0.0 starts on 11Oct2018 at 15:26: 1
Program EPW v.5.0.0 starts on 16Oct2018 at 14:25:37
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
@ -110,6 +110,7 @@
Number of WS vectors for electrons 279
Number of WS vectors for phonons 19
Number of WS vectors for electron-phonon 19
Maximum number of cores for efficient parallelization 114
Results may improve by using use_ws == .true.
Reading Hamiltonian, Dynamical matrix and EP vertex in Wann rep from file
@ -153,12 +154,8 @@
Number of ep-matrix elements per pool : 100842 ~= 787.83 Kb (@ 8 bytes/ DP)
===================================================================
Start solving iterative Boltzmann Transport Equation
===================================================================
Iteration number: 1
A selecq.fmt file was found but re-created because selecqread == .false.
We only need to compute 343 q-points
Applying a scissor shift of 0.70000 eV to the conduction states
@ -179,244 +176,26 @@
Mobility CB Fermi level 6.872901 eV
===================================================================
Scattering rate
Scattering rate for IBTE
===================================================================
restart and restart_freq inputs deactivated (restart point at every q-points).
No intermediate mobility will be shown.
Fermi Surface thickness = 4.000000 eV
This is computed with respect to the fine Fermi level 6.339674 eV
Only states between 2.339674 eV and 10.339674 eV will be included
Progression iq (fine) = 50/ 343
Creation of a restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.119477E-01 x-axis
0.208937E-01 y-axis
0.385336E-01 z-axis
0.237917E-01 avg
500.000 7.0136 0.100000E+14 0.702667E-01 x-axis
0.118372E+00 y-axis
0.245302E+00 z-axis
0.144647E+00 avg
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.999998E+13 0.184430E+03 x-axis
0.222990E+03 y-axis
0.380774E+03 z-axis
0.262731E+03 avg
500.000 6.8729 0.999997E+13 0.125303E+03 x-axis
0.151762E+03 y-axis
0.261435E+03 z-axis
0.179500E+03 avg
Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.
Total time so far
SCAT : 1.10s CPU 1.11s WALL ( 50 calls)
MOB : 0.00s CPU 0.01s WALL ( 1 calls)
Progression iq (fine) = 100/ 343
Creation of a restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.845545E-02 x-axis
0.145166E-01 y-axis
0.309025E-01 z-axis
0.179582E-01 avg
500.000 7.0136 0.100000E+14 0.494488E-01 x-axis
0.821013E-01 y-axis
0.199056E+00 z-axis
0.110202E+00 avg
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.999998E+13 0.128316E+03 x-axis
0.164463E+03 y-axis
0.359297E+03 z-axis
0.217359E+03 avg
500.000 6.8729 0.999997E+13 0.870608E+02 x-axis
0.111699E+03 y-axis
0.247386E+03 z-axis
0.148715E+03 avg
Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.
Total time so far
SCAT : 2.20s CPU 2.21s WALL ( 101 calls)
MOB : 0.00s CPU 0.01s WALL ( 2 calls)
Progression iq (fine) = 150/ 343
Creation of a restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.819718E-02 x-axis
0.139611E-01 y-axis
0.303669E-01 z-axis
0.175084E-01 avg
500.000 7.0136 0.100000E+14 0.479056E-01 x-axis
0.789545E-01 y-axis
0.195876E+00 z-axis
0.107579E+00 avg
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.999998E+13 0.128300E+03 x-axis
0.164450E+03 y-axis
0.359265E+03 z-axis
0.217338E+03 avg
500.000 6.8729 0.999997E+13 0.869792E+02 x-axis
0.111634E+03 y-axis
0.247258E+03 z-axis
0.148624E+03 avg
Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.
Total time so far
SCAT : 3.28s CPU 3.29s WALL ( 152 calls)
MOB : 0.00s CPU 0.01s WALL ( 3 calls)
Progression iq (fine) = 200/ 343
Creation of a restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.812795E-02 x-axis
0.139130E-01 y-axis
0.160512E-01 z-axis
0.126974E-01 avg
500.000 7.0136 0.100000E+14 0.475174E-01 x-axis
0.786928E-01 y-axis
0.985153E-01 z-axis
0.749085E-01 avg
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.999998E+13 0.602014E+02 x-axis
0.655271E+02 y-axis
0.104217E+03 z-axis
0.766485E+02 avg
500.000 6.8729 0.999997E+13 0.409034E+02 x-axis
0.445521E+02 y-axis
0.707818E+02 z-axis
0.520791E+02 avg
Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.
Total time so far
SCAT : 4.38s CPU 4.39s WALL ( 203 calls)
MOB : 0.00s CPU 0.01s WALL ( 4 calls)
Progression iq (fine) = 250/ 343
Creation of a restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.760158E-02 x-axis
0.947590E-02 y-axis
0.133022E-01 z-axis
0.101266E-01 avg
500.000 7.0136 0.100000E+14 0.442582E-01 x-axis
0.550498E-01 y-axis
0.753436E-01 z-axis
0.582172E-01 avg
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.999998E+13 0.439385E+02 x-axis
0.525870E+02 y-axis
0.814376E+02 z-axis
0.593211E+02 avg
500.000 6.8729 0.999997E+13 0.298568E+02 x-axis
0.356770E+02 y-axis
0.552253E+02 z-axis
0.402530E+02 avg
Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.
Total time so far
SCAT : 5.46s CPU 5.47s WALL ( 254 calls)
MOB : 0.00s CPU 0.01s WALL ( 5 calls)
Progression iq (fine) = 300/ 343
Creation of a restart point
400.000 6.8619 0.999997E+13
500.000 7.0136 0.100000E+14
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
epmatkqread automatically changed to .true. as all scattering have been computed.
400.000 6.8619 0.999997E+13 0.582870E-02 x-axis
0.757065E-02 y-axis
0.111759E-01 z-axis
0.819175E-02 avg
500.000 7.0136 0.100000E+14 0.334968E-01 x-axis
0.437302E-01 y-axis
0.634060E-01 z-axis
0.468777E-01 avg
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.999998E+13 0.439368E+02 x-axis
0.525845E+02 y-axis
0.814358E+02 z-axis
0.593190E+02 avg
500.000 6.8729 0.999997E+13 0.298485E+02 x-axis
0.356648E+02 y-axis
0.552172E+02 z-axis
0.402435E+02 avg
Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.
Total time so far
SCAT : 6.54s CPU 6.55s WALL ( 305 calls)
MOB : 0.00s CPU 0.01s WALL ( 6 calls)
Temperature 400.000 K
Number of elements per core 15116
Average over degenerate eigenstates is performed
Average over degenerate eigenstates in CB is performed
Writing scattering rate to file
Temperature 500.000 K
Average over degenerate eigenstates is performed
Average over degenerate eigenstates in CB is performed
Writing scattering rate to file
Creation of the final restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.465971E-02 x-axis
0.568930E-02 y-axis
0.878282E-02 z-axis
0.637728E-02 avg
500.000 7.0136 0.100000E+14 0.267397E-01 x-axis
0.328128E-01 y-axis
0.498193E-01 z-axis
0.364573E-01 avg
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
@ -431,59 +210,13 @@
0.462060E+02 z-axis
0.341906E+02 avg
Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.
Total time so far
SCAT : 7.48s CPU 7.50s WALL ( 349 calls)
MOB : 0.00s CPU 0.01s WALL ( 7 calls)
Iteration number: 2
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013557 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872901 eV
Progression iq (fine) = 50/ 343
Creation of a restart point
Progression iq (fine) = 100/ 343
Creation of a restart point
Progression iq (fine) = 150/ 343
Creation of a restart point
Progression iq (fine) = 200/ 343
Creation of a restart point
Progression iq (fine) = 250/ 343
Creation of a restart point
Progression iq (fine) = 300/ 343
Creation of a restart point
Creation of a restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
Start solving iterative Boltzmann Transport Equation
===================================================================
400.000 6.8619 0.999997E+13 0.508748E-02 x-axis
0.677962E-02 y-axis
0.912891E-02 z-axis
0.699867E-02 avg
0.6999E-02 Err
500.000 7.0136 0.100000E+14 0.292498E-01 x-axis
0.391414E-01 y-axis
0.522029E-01 z-axis
0.401980E-01 avg
0.4020E-01 Err
Iteration number: 1
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
@ -493,63 +226,15 @@
0.363357E+02 y-axis
0.547466E+02 z-axis
0.424727E+02 avg
0.4247E+02 Err
500.000 6.8729 0.999997E+13 0.247699E+02 x-axis
0.247699E+02 y-axis
0.372317E+02 z-axis
0.289238E+02 avg
0.2892E+02 Err
Total time so far
MOBITER : 28.17s CPU 29.57s WALL ( 1 calls)
0.424727E+02 Err
Iteration number: 3
Iteration number: 2
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013557 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872901 eV
Progression iq (fine) = 50/ 343
Creation of a restart point
Progression iq (fine) = 100/ 343
Creation of a restart point
Progression iq (fine) = 150/ 343
Creation of a restart point
Progression iq (fine) = 200/ 343
Creation of a restart point
Progression iq (fine) = 250/ 343
Creation of a restart point
Progression iq (fine) = 300/ 343
Creation of a restart point
Creation of a restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.517573E-02 x-axis
0.702124E-02 y-axis
0.933232E-02 z-axis
0.717643E-02 avg
0.1778E-03 Err
500.000 7.0136 0.100000E+14 0.297767E-01 x-axis
0.405594E-01 y-axis
0.535011E-01 z-axis
0.412791E-01 avg
0.1081E-02 Err
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
@ -559,15 +244,30 @@
0.369723E+02 y-axis
0.573447E+02 z-axis
0.437631E+02 avg
0.1290E+01 Err
500.000 6.8729 0.999997E+13 0.251833E+02 x-axis
0.251833E+02 y-axis
0.389751E+02 z-axis
0.297806E+02 avg
0.8567E+00 Err
Total time so far
MOBITER : 57.00s CPU 59.83s WALL ( 2 calls)
0.129044E+01 Err
Iteration number: 3
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.999998E+13 0.368935E+02 x-axis
0.368935E+02 y-axis
0.568370E+02 z-axis
0.435413E+02 avg
500.000 6.8729 0.999997E+13 0.251333E+02 x-axis
0.251333E+02 y-axis
0.386364E+02 z-axis
0.296343E+02 avg
0.221811E+00 Err
Iteration number: 4
@ -575,11 +275,6 @@
The iteration reached the maximum but did not converge.
===================================================================
===================================================================
Memory usage: VmHWM = 23Mb
VmPeak = 300Mb
===================================================================
Unfolding on the coarse grid
elphon_wrap : 0.00s CPU 0.00s WALL ( 1 calls)
@ -589,16 +284,16 @@
Electron-Phonon interpolation
ephwann : 85.50s CPU 89.77s WALL ( 1 calls)
ep-interp : 85.29s CPU 89.55s WALL ( 1029 calls)
ephwann : 27.61s CPU 28.99s WALL ( 1 calls)
ep-interp : 27.38s CPU 28.76s WALL ( 343 calls)
DynW2B : 0.03s CPU 0.03s WALL ( 1029 calls)
HamW2B : 15.77s CPU 16.12s WALL ( 706580 calls)
ephW2Bp : 2.45s CPU 5.50s WALL ( 1029 calls)
DynW2B : 0.01s CPU 0.01s WALL ( 343 calls)
HamW2B : 5.03s CPU 5.11s WALL ( 236670 calls)
ephW2Bp : 0.79s CPU 1.83s WALL ( 343 calls)
Total program execution
EPW : 1m25.50s CPU 1m29.78s WALL
EPW : 27.61s CPU 28.99s WALL
Please consider citing:

View File

@ -27,7 +27,7 @@
Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.0.0 starts on 11Oct2018 at 15:27:31
Program EPW v.5.0.0 starts on 16Oct2018 at 14:26: 6
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
@ -110,6 +110,7 @@
Number of WS vectors for electrons 279
Number of WS vectors for phonons 19
Number of WS vectors for electron-phonon 19
Maximum number of cores for efficient parallelization 114
Results may improve by using use_ws == .true.
Reading Hamiltonian, Dynamical matrix and EP vertex in Wann rep from file
@ -152,33 +153,47 @@
Number of ep-matrix elements per pool : 100842 ~= 787.83 Kb (@ 8 bytes/ DP)
Restart from tau_CB: 343/ 343
Restart from tau: 343/ 343
Restart from iter: 3 and iq: 343/ 343
Number of elements per core 12956
Average over degenerate eigenstates is performed
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.465971E-02 x-axis
0.568930E-02 y-axis
0.878282E-02 z-axis
0.637728E-02 avg
500.000 7.0136 0.100000E+14 0.267397E-01 x-axis
0.328128E-01 y-axis
0.498193E-01 z-axis
0.364573E-01 avg
===================================================================
Start solving iterative Boltzmann Transport Equation
===================================================================
Iteration number: 3
Iteration number: 1
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.999997E+13 0.508748E-02 x-axis
0.677962E-02 y-axis
0.912891E-02 z-axis
0.699867E-02 avg
500.000 7.0136 0.100000E+14 0.292498E-01 x-axis
0.391414E-01 y-axis
0.522029E-01 z-axis
0.401980E-01 avg
0.401980E-01 Err
Iteration number: 2
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013557 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872901 eV
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
@ -188,64 +203,16 @@
0.702124E-02 y-axis
0.933232E-02 z-axis
0.717643E-02 avg
0.1778E-03 Err
500.000 7.0136 0.100000E+14 0.297767E-01 x-axis
0.405594E-01 y-axis
0.535011E-01 z-axis
0.412791E-01 avg
0.1081E-02 Err
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
0.108106E-02 Err
400.000 7.0305 0.999998E+13 0.369723E+02 x-axis
0.369723E+02 y-axis
0.573447E+02 z-axis
0.437631E+02 avg
0.1290E+01 Err
500.000 6.8729 0.999997E+13 0.251833E+02 x-axis
0.251833E+02 y-axis
0.389751E+02 z-axis
0.297806E+02 avg
0.8567E+00 Err
Total time so far
MOBITER : 0.00s CPU 0.00s WALL ( 1 calls)
Iteration number: 3
Iteration number: 4
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013557 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872901 eV
Progression iq (fine) = 50/ 343
Creation of a restart point
Progression iq (fine) = 100/ 343
Creation of a restart point
Progression iq (fine) = 150/ 343
Creation of a restart point
Progression iq (fine) = 200/ 343
Creation of a restart point
Progression iq (fine) = 250/ 343
Creation of a restart point
Progression iq (fine) = 300/ 343
Creation of a restart point
Creation of a restart point
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
@ -254,30 +221,30 @@
0.706249E-02 y-axis
0.936655E-02 z-axis
0.720779E-02 avg
0.3137E-04 Err
500.000 7.0136 0.100000E+14 0.298890E-01 x-axis
0.408072E-01 y-axis
0.537310E-01 z-axis
0.414757E-01 avg
0.1967E-03 Err
0.196654E-03 Err
Iteration number: 4
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.999998E+13 0.368935E+02 x-axis
0.368935E+02 y-axis
0.568370E+02 z-axis
0.435413E+02 avg
0.2218E+00 Err
500.000 6.8729 0.999997E+13 0.251333E+02 x-axis
0.251333E+02 y-axis
0.386364E+02 z-axis
0.296343E+02 avg
0.1463E+00 Err
Total time so far
MOBITER : 28.63s CPU 30.12s WALL ( 2 calls)
400.000 6.8619 0.999997E+13 0.519833E-02 x-axis
0.707076E-02 y-axis
0.938236E-02 z-axis
0.721715E-02 avg
500.000 7.0136 0.100000E+14 0.299135E-01 x-axis
0.408575E-01 y-axis
0.538368E-01 z-axis
0.415360E-01 avg
0.602225E-04 Err
Iteration number: 5
@ -285,11 +252,6 @@
The iteration reached the maximum but did not converge.
===================================================================
===================================================================
Memory usage: VmHWM = 23Mb
VmPeak = 301Mb
===================================================================
Unfolding on the coarse grid
elphon_wrap : 0.00s CPU 0.00s WALL ( 1 calls)
@ -299,16 +261,13 @@
Electron-Phonon interpolation
ephwann : 28.99s CPU 30.50s WALL ( 1 calls)
ep-interp : 28.78s CPU 30.27s WALL ( 344 calls)
ephwann : 0.22s CPU 0.22s WALL ( 1 calls)
DynW2B : 0.01s CPU 0.01s WALL ( 344 calls)
HamW2B : 5.33s CPU 5.46s WALL ( 236670 calls)
ephW2Bp : 0.82s CPU 1.86s WALL ( 344 calls)
HamW2B : 0.01s CPU 0.01s WALL ( 686 calls)
Total program execution
EPW : 28.99s CPU 30.50s WALL
EPW : 0.22s CPU 0.22s WALL
Please consider citing:

View File

@ -1,567 +0,0 @@
``:oss/
`.+s+. .+ys--yh+ `./ss+.
-sh//yy+` +yy +yy -+h+-oyy
-yh- .oyy/.-sh. .syo-.:sy- /yh
`.-.` `yh+ -oyyyo. `/syys: oys `.`
`/+ssys+-` `sh+ ` oys` .:osyo`
-yh- ./syyooyo` .sys+/oyo--yh/
`yy+ .-:-. `-/+/:` -sh-
/yh. oys
``..---hho---------` .---------..` `.-----.` -hd+---.
`./osmNMMMMMMMMMMMMMMMs. +NNMMMMMMMMNNmh+. yNMMMMMNm- oNMMMMMNmo++:`
+sy--/sdMMMhyyyyyyyNMMh- .oyNMMmyyyyyhNMMm+` -yMMMdyyo:` .oyyNMMNhs+syy`
-yy/ /MMM+.`-+/``mMMy- `mMMh:`````.dMMN:` `MMMy-`-dhhy```mMMy:``+hs
-yy+` /MMMo:-mMM+`-oo/. mMMh: `dMMN/` dMMm:`dMMMMy..MMMo-.+yo`
.sys`/MMMMNNMMMs- mMMmyooooymMMNo: oMMM/sMMMMMM++MMN//oh:
`sh+/MMMhyyMMMs- `-` mMMMMMMMMMNmy+-` -MMMhMMMsmMMmdMMd/yy+
`-/+++oyy-/MMM+.`/hh/.`mNm:` mMMd+/////:-.` NMMMMMd/:NMMMMMy:/yyo/:.`
+os+//:-..-oMMMo:--:::-/MMMo. .-mMMd+---` hMMMMN+. oMMMMMo. `-+osyso:`
syo `mNMMMMMNNNNNNNNMMMo.oNNMMMMMNNNN:` +MMMMs:` dMMMN/` ``:syo
/yh` :syyyyyyyyyyyyyyyy+.`+syyyyyyyyo:` .oyys:` .oyys:` +yh
-yh- ```````````````` ````````` `` `` oys
-+h/------------------------::::::::://////++++++++++++++++++++++///////::::/yd:
shdddddddddddddddddddddddddddddhhhhhhhhyyyyyssssssssssssssssyyyyyyyhhhhhhhddddh`
S. Ponce, E. R. Margine, C. Verdi, and F. Giustino,
Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.0.0 starts on 11Oct2018 at 15:28: 2
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
URL http://www.quantum-espresso.org",
in publications or presentations arising from this work. More details at
http://www.quantum-espresso.org/quote
Parallel version (MPI), running on 1 processors
MPI processes distributed on 1 nodes
------------------------------------------------------------------------
RESTART - RESTART - RESTART - RESTART
Restart is done without reading PWSCF save file.
Be aware that some consistency checks are therefore not done.
------------------------------------------------------------------------
--
bravais-lattice index = 0
lattice parameter (a_0) = 0.0000 a.u.
unit-cell volume = 0.0000 (a.u.)^3
number of atoms/cell = 0
number of atomic types = 0
kinetic-energy cut-off = 0.0000 Ry
charge density cut-off = 0.0000 Ry
convergence threshold = 0.0E+00
beta = 0.0000
number of iterations used = 0
Exchange-correlation = not set (-1 -1 -1 -1-1-1)
celldm(1)= 0.00000 celldm(2)= 0.00000 celldm(3)= 0.00000
celldm(4)= 0.00000 celldm(5)= 0.00000 celldm(6)= 0.00000
crystal axes: (cart. coord. in units of a_0)
a(1) = ( 0.0000 0.0000 0.0000 )
a(2) = ( 0.0000 0.0000 0.0000 )
a(3) = ( 0.0000 0.0000 0.0000 )
reciprocal axes: (cart. coord. in units 2 pi/a_0)
b(1) = ( 0.0000 0.0000 0.0000 )
b(2) = ( 0.0000 0.0000 0.0000 )
b(3) = ( 0.0000 0.0000 0.0000 )
Atoms inside the unit cell:
Cartesian axes
site n. atom mass positions (a_0 units)
No symmetry!
G cutoff = 0.0000 ( 0 G-vectors) FFT grid: ( 0, 0, 0)
number of k points= 0
cart. coord. in units 2pi/a_0
EPW : 0.00s CPU 0.00s WALL
EPW : 0.00s CPU 0.00s WALL
No wavefunction gauge setting applied
-------------------------------------------------------------------
Using si.ukk from disk
-------------------------------------------------------------------
Using kmap and kgmap from disk
Do not need to read .epb files; read .fmt files
Band disentanglement is used: nbndsub = 8
Use zone-centred Wigner-Seitz cells
Number of WS vectors for electrons 279
Number of WS vectors for phonons 19
Number of WS vectors for electron-phonon 19
Results may improve by using use_ws == .true.
Reading Hamiltonian, Dynamical matrix and EP vertex in Wann rep from file
Reading interatomic force constants
Read Z* and epsilon
IFC last -0.0026126
Norm of the difference between old and new effective charges: 0.0000000
Norm of the difference between old and new force-constants: 0.0000020
Imposed crystal ASR
Finished reading ifcs
Finished reading Wann rep data from file
===================================================================
Memory usage: VmHWM = 12Mb
VmPeak = 273Mb
===================================================================
Using uniform q-mesh: 7 7 7
Size of q point mesh for interpolation: 343
Using uniform MP k-mesh: 7 7 7
Size of k point mesh for interpolation: 40
Max number of k points per pool: 40
Fermi energy coarse grid = 0.000000 eV
Fermi energy is calculated from the fine k-mesh: Ef = 6.339674 eV
Warning: check if difference with Fermi level fine grid makes sense
===================================================================
ibndmin = 2 ebndmin = 0.190
ibndmax = 8 ebndmax = 0.760
Number of ep-matrix elements per pool : 5880 ~= 45.94 Kb (@ 8 bytes/ DP)
===================================================================
Start solving iterative Boltzmann Transport Equation
===================================================================
Iteration number: 1
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013560 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872905 eV
===================================================================
Scattering rate
===================================================================
Fermi Surface thickness = 4.000000 eV
This is computed with respect to the fine Fermi level 6.339674 eV
Only states between 2.339674 eV and 10.339674 eV will be included
Progression iq (fine) = 50/ 343
Progression iq (fine) = 100/ 343
Progression iq (fine) = 150/ 343
Progression iq (fine) = 200/ 343
Progression iq (fine) = 250/ 343
Progression iq (fine) = 300/ 343
Temperature 400.000 K
Average over degenerate eigenstates is performed
Average over degenerate eigenstates in CB is performed
Writing scattering rate to file
Temperature 500.000 K
Average over degenerate eigenstates is performed
Average over degenerate eigenstates in CB is performed
Writing scattering rate to file
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.478637E-02 x-axis
0.478658E-02 y-axis
0.115242E-01 z-axis
0.703239E-02 avg
500.000 7.0136 0.100000E+14 0.274743E-01 x-axis
0.274758E-01 y-axis
0.637071E-01 z-axis
0.395524E-01 avg
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.340694E+02 x-axis
0.584587E+02 y-axis
0.584588E+02 z-axis
0.503290E+02 avg
500.000 6.8729 0.100000E+14 0.231476E+02 x-axis
0.397038E+02 y-axis
0.397039E+02 z-axis
0.341851E+02 avg
Note: Mobility are sorted by ascending values and might not correspond to the expected (x,y,z) axis.
Total time so far
SCAT : 0.43s CPU 0.43s WALL ( 343 calls)
MOB : 0.00s CPU 0.00s WALL ( 1 calls)
Iteration number: 2
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013560 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872905 eV
Progression iq (fine) = 50/ 343
Progression iq (fine) = 100/ 343
Progression iq (fine) = 150/ 343
Progression iq (fine) = 200/ 343
Progression iq (fine) = 250/ 343
Progression iq (fine) = 300/ 343
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.590051E-02 x-axis
0.590248E-02 y-axis
0.116036E-01 z-axis
0.780221E-02 avg
0.7802E-02 Err
500.000 7.0136 0.100000E+14 0.339718E-01 x-axis
0.339864E-01 y-axis
0.644797E-01 z-axis
0.441460E-01 avg
0.4415E-01 Err
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.306606E+02 x-axis
0.484285E+02 y-axis
0.484296E+02 z-axis
0.425062E+02 avg
0.4251E+02 Err
500.000 6.8729 0.100000E+14 0.209085E+02 x-axis
0.329592E+02 y-axis
0.329615E+02 z-axis
0.289430E+02 avg
0.2894E+02 Err
Total time so far
MOBITER : 3.15s CPU 4.22s WALL ( 1 calls)
Iteration number: 3
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013560 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872905 eV
Progression iq (fine) = 50/ 343
Progression iq (fine) = 100/ 343
Progression iq (fine) = 150/ 343
Progression iq (fine) = 200/ 343
Progression iq (fine) = 250/ 343
Progression iq (fine) = 300/ 343
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.644417E-02 x-axis
0.644751E-02 y-axis
0.118128E-01 z-axis
0.823483E-02 avg
0.4326E-03 Err
500.000 7.0136 0.100000E+14 0.371091E-01 x-axis
0.371345E-01 y-axis
0.657224E-01 z-axis
0.466553E-01 avg
0.2509E-02 Err
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.310017E+02 x-axis
0.501495E+02 y-axis
0.501503E+02 z-axis
0.437672E+02 avg
0.1261E+01 Err
500.000 6.8729 0.100000E+14 0.211251E+02 x-axis
0.341053E+02 y-axis
0.341071E+02 z-axis
0.297792E+02 avg
0.8362E+00 Err
Total time so far
MOBITER : 6.21s CPU 8.45s WALL ( 2 calls)
Iteration number: 4
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013560 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872905 eV
Progression iq (fine) = 50/ 343
Progression iq (fine) = 100/ 343
Progression iq (fine) = 150/ 343
Progression iq (fine) = 200/ 343
Progression iq (fine) = 250/ 343
Progression iq (fine) = 300/ 343
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.660118E-02 x-axis
0.660483E-02 y-axis
0.118134E-01 z-axis
0.833980E-02 avg
0.1050E-03 Err
500.000 7.0136 0.100000E+14 0.380423E-01 x-axis
0.380701E-01 y-axis
0.657563E-01 z-axis
0.472896E-01 avg
0.6342E-03 Err
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.309675E+02 x-axis
0.498542E+02 y-axis
0.498551E+02 z-axis
0.435590E+02 avg
0.2082E+00 Err
500.000 6.8729 0.100000E+14 0.211041E+02 x-axis
0.339105E+02 y-axis
0.339125E+02 z-axis
0.296424E+02 avg
0.1368E+00 Err
Total time so far
MOBITER : 9.26s CPU 12.65s WALL ( 3 calls)
Iteration number: 5
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013560 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872905 eV
Progression iq (fine) = 50/ 343
Progression iq (fine) = 100/ 343
Progression iq (fine) = 150/ 343
Progression iq (fine) = 200/ 343
Progression iq (fine) = 250/ 343
Progression iq (fine) = 300/ 343
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.666450E-02 x-axis
0.666825E-02 y-axis
0.118240E-01 z-axis
0.838558E-02 avg
0.4578E-04 Err
500.000 7.0136 0.100000E+14 0.384180E-01 x-axis
0.384467E-01 y-axis
0.658280E-01 z-axis
0.475642E-01 avg
0.2746E-03 Err
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.309709E+02 x-axis
0.499049E+02 y-axis
0.499058E+02 z-axis
0.435939E+02 avg
0.3491E-01 Err
500.000 6.8729 0.100000E+14 0.211062E+02 x-axis
0.339436E+02 y-axis
0.339456E+02 z-axis
0.296651E+02 avg
0.2274E-01 Err
Total time so far
MOBITER : 12.35s CPU 16.89s WALL ( 4 calls)
Iteration number: 6
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013560 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872905 eV
Progression iq (fine) = 50/ 343
Progression iq (fine) = 100/ 343
Progression iq (fine) = 150/ 343
Progression iq (fine) = 200/ 343
Progression iq (fine) = 250/ 343
Progression iq (fine) = 300/ 343
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.668478E-02 x-axis
0.668856E-02 y-axis
0.118253E-01 z-axis
0.839956E-02 avg
0.1398E-04 Err
500.000 7.0136 0.100000E+14 0.385409E-01 x-axis
0.385698E-01 y-axis
0.658391E-01 z-axis
0.476499E-01 avg
0.8572E-04 Err
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.309706E+02 x-axis
0.498962E+02 y-axis
0.498971E+02 z-axis
0.435880E+02 avg
0.5909E-02 Err
500.000 6.8729 0.100000E+14 0.211060E+02 x-axis
0.339380E+02 y-axis
0.339399E+02 z-axis
0.296613E+02 avg
0.3816E-02 Err
Total time so far
MOBITER : 15.43s CPU 21.13s WALL ( 5 calls)
===================================================================
Memory usage: VmHWM = 20Mb
VmPeak = 297Mb
===================================================================
Unfolding on the coarse grid
elphon_wrap : 0.00s CPU 0.00s WALL ( 1 calls)
INITIALIZATION:
Electron-Phonon interpolation
ephwann : 18.05s CPU 24.91s WALL ( 1 calls)
ep-interp : 17.87s CPU 24.73s WALL ( 2058 calls)
DynW2B : 0.04s CPU 0.04s WALL ( 2058 calls)
HamW2B : 1.66s CPU 2.01s WALL ( 82360 calls)
ephW2Bp : 5.40s CPU 10.95s WALL ( 2058 calls)
Total program execution
EPW : 18.05s CPU 24.91s WALL
Please consider citing:
S. Ponce, E. R. Margine, C. Verdi and F. Giustino, Comput. Phys. Commun. 209, 116 (2016)
In addition, if you used anisotropic Eliashberg superconductivity please cite:
E. R. Margine and F. Giustino, Phys. Rev. B 87, 024505 (2013)
if you used transport properties (scattering rates, mobility) please cite:
S. Ponce, E. R. Margine and F. Giustino, Phys. Rev. B 97, 121201 (2018)

View File

@ -20,6 +20,7 @@
ncarrier = 1E13
mp_mesh_k = .false.
iterative_bte = .true.
epmatkqread = .false.
mob_maxiter = 3
broyden_beta= 1.0
@ -32,6 +33,7 @@
restart = .true.
restart_freq = 50
selecqread = .false.
lifc = .true.
asr_typ = 'crystal'
@ -62,7 +64,6 @@
wdata(13) = 'write_hr = .true.'
wdata(14) = 'write_rmn = .true.'
elecselfen = .false.
phonselfen = .false.
a2f = .false.

View File

@ -17,9 +17,10 @@
scattering_serta = .true.
int_mob = .true.
carrier = .true.
ncarrier = 1E13
ncarrier = -1E13
mp_mesh_k = .false.
iterative_bte = .true.
epmatkqread = .true.
mob_maxiter = 4
broyden_beta= 1.0

View File

@ -0,0 +1,101 @@
100 crystal
0.5 0.5 0.5 0.01
0.49 0.49 0.49 0.01
0.48 0.48 0.48 0.01
0.47 0.47 0.47 0.01
0.46 0.46 0.46 0.01
0.45 0.45 0.45 0.01
0.44 0.44 0.44 0.01
0.43 0.43 0.43 0.01
0.42 0.42 0.42 0.01
0.41 0.41 0.41 0.01
0.4 0.4 0.4 0.01
0.39 0.39 0.39 0.01
0.38 0.38 0.38 0.01
0.37 0.37 0.37 0.01
0.36 0.36 0.36 0.01
0.35 0.35 0.35 0.01
0.34 0.34 0.34 0.01
0.33 0.33 0.33 0.01
0.32 0.32 0.32 0.01
0.31 0.31 0.31 0.01
0.3 0.3 0.3 0.01
0.29 0.29 0.29 0.01
0.28 0.28 0.28 0.01
0.27 0.27 0.27 0.01
0.26 0.26 0.26 0.01
0.25 0.25 0.25 0.01
0.24 0.24 0.24 0.01
0.23 0.23 0.23 0.01
0.22 0.22 0.22 0.01
0.21 0.21 0.21 0.01
0.2 0.2 0.2 0.01
0.19 0.19 0.19 0.01
0.18 0.18 0.18 0.01
0.17 0.17 0.17 0.01
0.16 0.16 0.16 0.01
0.15 0.15 0.15 0.01
0.14 0.14 0.14 0.01
0.13 0.13 0.13 0.01
0.12 0.12 0.12 0.01
0.11 0.11 0.11 0.01
0.1 0.1 0.1 0.01
0.09 0.09 0.09 0.01
0.08 0.08 0.08 0.01
0.07 0.07 0.07 0.01
0.06 0.06 0.06 0.01
0.05 0.05 0.05 0.01
0.04 0.04 0.04 0.01
0.03 0.03 0.03 0.01
0.02 0.02 0.02 0.01
0.01 0.01 0.01 0.01
0.0 0.0 0.0 0.01
0.0 0.01 0.01 0.01
0.0 0.02 0.02 0.01
0.0 0.03 0.03 0.01
0.0 0.04 0.04 0.01
0.0 0.05 0.05 0.01
0.0 0.06 0.06 0.01
0.0 0.07 0.07 0.01
0.0 0.08 0.08 0.01
0.0 0.09 0.09 0.01
0.0 0.1 0.1 0.01
0.0 0.11 0.11 0.01
0.0 0.12 0.12 0.01
0.0 0.13 0.13 0.01
0.0 0.14 0.14 0.01
0.0 0.15 0.15 0.01
0.0 0.16 0.16 0.01
0.0 0.17 0.17 0.01
0.0 0.18 0.18 0.01
0.0 0.19 0.19 0.01
0.0 0.2 0.2 0.01
0.0 0.21 0.21 0.01
0.0 0.22 0.22 0.01
0.0 0.23 0.23 0.01
0.0 0.24 0.24 0.01
0.0 0.25 0.25 0.01
0.0 0.26 0.26 0.01
0.0 0.27 0.27 0.01
0.0 0.28 0.28 0.01
0.0 0.29 0.29 0.01
0.0 0.3 0.3 0.01
0.0 0.31 0.31 0.01
0.0 0.32 0.32 0.01
0.0 0.33 0.33 0.01
0.0 0.34 0.34 0.01
0.0 0.35 0.35 0.01
0.0 0.36 0.36 0.01
0.0 0.37 0.37 0.01
0.0 0.38 0.38 0.01
0.0 0.39 0.39 0.01
0.0 0.4 0.4 0.01
0.0 0.41 0.41 0.01
0.0 0.42 0.42 0.01
0.0 0.43 0.43 0.01
0.0 0.44 0.44 0.01
0.0 0.45 0.45 0.01
0.0 0.46 0.46 0.01
0.0 0.47 0.47 0.01
0.0 0.48 0.48 0.01
0.0 0.49 0.49 0.01

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,305 @@
``:oss/
`.+s+. .+ys--yh+ `./ss+.
-sh//yy+` +yy +yy -+h+-oyy
-yh- .oyy/.-sh. .syo-.:sy- /yh
`.-.` `yh+ -oyyyo. `/syys: oys `.`
`/+ssys+-` `sh+ ` oys` .:osyo`
-yh- ./syyooyo` .sys+/oyo--yh/
`yy+ .-:-. `-/+/:` -sh-
/yh. oys
``..---hho---------` .---------..` `.-----.` -hd+---.
`./osmNMMMMMMMMMMMMMMMs. +NNMMMMMMMMNNmh+. yNMMMMMNm- oNMMMMMNmo++:`
+sy--/sdMMMhyyyyyyyNMMh- .oyNMMmyyyyyhNMMm+` -yMMMdyyo:` .oyyNMMNhs+syy`
-yy/ /MMM+.`-+/``mMMy- `mMMh:`````.dMMN:` `MMMy-`-dhhy```mMMy:``+hs
-yy+` /MMMo:-mMM+`-oo/. mMMh: `dMMN/` dMMm:`dMMMMy..MMMo-.+yo`
.sys`/MMMMNNMMMs- mMMmyooooymMMNo: oMMM/sMMMMMM++MMN//oh:
`sh+/MMMhyyMMMs- `-` mMMMMMMMMMNmy+-` -MMMhMMMsmMMmdMMd/yy+
`-/+++oyy-/MMM+.`/hh/.`mNm:` mMMd+/////:-.` NMMMMMd/:NMMMMMy:/yyo/:.`
+os+//:-..-oMMMo:--:::-/MMMo. .-mMMd+---` hMMMMN+. oMMMMMo. `-+osyso:`
syo `mNMMMMMNNNNNNNNMMMo.oNNMMMMMNNNN:` +MMMMs:` dMMMN/` ``:syo
/yh` :syyyyyyyyyyyyyyyy+.`+syyyyyyyyo:` .oyys:` .oyys:` +yh
-yh- ```````````````` ````````` `` `` oys
-+h/------------------------::::::::://////++++++++++++++++++++++///////::::/yd:
shdddddddddddddddddddddddddddddhhhhhhhhyyyyyssssssssssssssssyyyyyyyhhhhhhhddddh`
S. Ponce, E. R. Margine, C. Verdi, and F. Giustino,
Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.0.0 starts on 16Oct2018 at 16: 5:21
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
URL http://www.quantum-espresso.org",
in publications or presentations arising from this work. More details at
http://www.quantum-espresso.org/quote
Parallel version (MPI), running on 1 processors
MPI processes distributed on 1 nodes
------------------------------------------------------------------------
RESTART - RESTART - RESTART - RESTART
Restart is done without reading PWSCF save file.
Be aware that some consistency checks are therefore not done.
------------------------------------------------------------------------
--
bravais-lattice index = 0
lattice parameter (a_0) = 0.0000 a.u.
unit-cell volume = 0.0000 (a.u.)^3
number of atoms/cell = 0
number of atomic types = 0
kinetic-energy cut-off = 0.0000 Ry
charge density cut-off = 0.0000 Ry
convergence threshold = 0.0E+00
beta = 0.0000
number of iterations used = 0
Exchange-correlation = not set (-1 -1 -1 -1-1-1)
celldm(1)= 0.00000 celldm(2)= 0.00000 celldm(3)= 0.00000
celldm(4)= 0.00000 celldm(5)= 0.00000 celldm(6)= 0.00000
crystal axes: (cart. coord. in units of a_0)
a(1) = ( 0.0000 0.0000 0.0000 )
a(2) = ( 0.0000 0.0000 0.0000 )
a(3) = ( 0.0000 0.0000 0.0000 )
reciprocal axes: (cart. coord. in units 2 pi/a_0)
b(1) = ( 0.0000 0.0000 0.0000 )
b(2) = ( 0.0000 0.0000 0.0000 )
b(3) = ( 0.0000 0.0000 0.0000 )
Atoms inside the unit cell:
Cartesian axes
site n. atom mass positions (a_0 units)
No symmetry!
G cutoff = 0.0000 ( 0 G-vectors) FFT grid: ( 0, 0, 0)
number of k points= 0
cart. coord. in units 2pi/a_0
EPW : 0.00s CPU 0.00s WALL
EPW : 0.00s CPU 0.00s WALL
No wavefunction gauge setting applied
-------------------------------------------------------------------
Using si.ukk from disk
-------------------------------------------------------------------
Using kmap and kgmap from disk
Do not need to read .epb files; read .fmt files
Band disentanglement is used: nbndsub = 8
Use zone-centred Wigner-Seitz cells
Number of WS vectors for electrons 279
Number of WS vectors for phonons 19
Number of WS vectors for electron-phonon 19
Maximum number of cores for efficient parallelization 114
Results may improve by using use_ws == .true.
Reading Hamiltonian, Dynamical matrix and EP vertex in Wann rep from file
Reading interatomic force constants
Read Z* and epsilon
IFC last -0.0026126
Norm of the difference between old and new effective charges: 0.0000000
Norm of the difference between old and new force-constants: 0.0000020
Imposed crystal ASR
Finished reading ifcs
Finished reading Wann rep data from file
===================================================================
Memory usage: VmHWM = 12Mb
VmPeak = 273Mb
===================================================================
Using uniform q-mesh: 7 7 7
Size of q point mesh for interpolation: 343
Using uniform MP k-mesh: 7 7 7
Size of k point mesh for interpolation: 40
Max number of k points per pool: 40
Fermi energy coarse grid = 0.000000 eV
Fermi energy is calculated from the fine k-mesh: Ef = 6.339674 eV
Warning: check if difference with Fermi level fine grid makes sense
===================================================================
ibndmin = 2 ebndmin = 0.190
ibndmax = 8 ebndmax = 0.760
Number of ep-matrix elements per pool : 5880 ~= 45.94 Kb (@ 8 bytes/ DP)
A selecq.fmt file was found but re-created because selecqread == .false.
We only need to compute 343 q-points
Applying a scissor shift of 0.70000 eV to the conduction states
Temperature 400.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 6.861901 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 7.030498 eV
Temperature 500.000 K
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility VB Fermi level 7.013560 eV
Valence band maximum = 6.255486 eV
Conduction band minimum = 7.660802 eV
Mobility CB Fermi level 6.872905 eV
===================================================================
Scattering rate for IBTE
===================================================================
restart and restart_freq inputs deactivated (restart point at every q-points).
No intermediate mobility will be shown.
Fermi Surface thickness = 4.000000 eV
This is computed with respect to the fine Fermi level 6.339674 eV
Only states between 2.339674 eV and 10.339674 eV will be included
Progression iq (fine) = 100/ 343
Progression iq (fine) = 200/ 343
Progression iq (fine) = 300/ 343
400.000 6.8619 0.100000E+14
500.000 7.0136 0.100000E+14
epmatkqread automatically changed to .true. as all scattering have been computed.
Number of elements per core 1846
Average over degenerate eigenstates is performed
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.340694E+02 x-axis
0.584587E+02 y-axis
0.584588E+02 z-axis
0.503290E+02 avg
500.000 6.8729 0.100000E+14 0.231476E+02 x-axis
0.397038E+02 y-axis
0.397039E+02 z-axis
0.341851E+02 avg
===================================================================
Start solving iterative Boltzmann Transport Equation
===================================================================
Iteration number: 1
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.306606E+02 x-axis
0.484285E+02 y-axis
0.484296E+02 z-axis
0.425062E+02 avg
500.000 6.8729 0.100000E+14 0.209085E+02 x-axis
0.329592E+02 y-axis
0.329615E+02 z-axis
0.289430E+02 avg
0.425062E+02 Err
Iteration number: 2
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.310017E+02 x-axis
0.501495E+02 y-axis
0.501503E+02 z-axis
0.437672E+02 avg
500.000 6.8729 0.100000E+14 0.211251E+02 x-axis
0.341053E+02 y-axis
0.341071E+02 z-axis
0.297792E+02 avg
0.126093E+01 Err
Iteration number: 3
===================================================================
Temp [K] Fermi [eV] Elec density [cm^-3] Elec mobility [cm^2/Vs]
===================================================================
400.000 7.0305 0.100001E+14 0.309675E+02 x-axis
0.498542E+02 y-axis
0.498551E+02 z-axis
0.435590E+02 avg
500.000 6.8729 0.100000E+14 0.211041E+02 x-axis
0.339105E+02 y-axis
0.339125E+02 z-axis
0.296424E+02 avg
0.208215E+00 Err
Iteration number: 4
===================================================================
The iteration reached the maximum but did not converge.
===================================================================
Unfolding on the coarse grid
elphon_wrap : 0.00s CPU 0.00s WALL ( 1 calls)
INITIALIZATION:
Electron-Phonon interpolation
ephwann : 2.58s CPU 3.78s WALL ( 1 calls)
ep-interp : 2.37s CPU 3.57s WALL ( 343 calls)
DynW2B : 0.01s CPU 0.01s WALL ( 343 calls)
HamW2B : 0.27s CPU 0.33s WALL ( 14446 calls)
ephW2Bp : 0.92s CPU 1.89s WALL ( 343 calls)
Total program execution
EPW : 2.58s CPU 3.78s WALL
Please consider citing:
S. Ponce, E. R. Margine, C. Verdi and F. Giustino, Comput. Phys. Commun. 209, 116 (2016)
In addition, if you used anisotropic Eliashberg superconductivity please cite:
E. R. Margine and F. Giustino, Phys. Rev. B 87, 024505 (2013)
if you used transport properties (scattering rates, mobility) please cite:
S. Ponce, E. R. Margine and F. Giustino, Phys. Rev. B 97, 121201 (2018)

View File

@ -0,0 +1,279 @@
``:oss/
`.+s+. .+ys--yh+ `./ss+.
-sh//yy+` +yy +yy -+h+-oyy
-yh- .oyy/.-sh. .syo-.:sy- /yh
`.-.` `yh+ -oyyyo. `/syys: oys `.`
`/+ssys+-` `sh+ ` oys` .:osyo`
-yh- ./syyooyo` .sys+/oyo--yh/
`yy+ .-:-. `-/+/:` -sh-
/yh. oys
``..---hho---------` .---------..` `.-----.` -hd+---.
`./osmNMMMMMMMMMMMMMMMs. +NNMMMMMMMMNNmh+. yNMMMMMNm- oNMMMMMNmo++:`
+sy--/sdMMMhyyyyyyyNMMh- .oyNMMmyyyyyhNMMm+` -yMMMdyyo:` .oyyNMMNhs+syy`
-yy/ /MMM+.`-+/``mMMy- `mMMh:`````.dMMN:` `MMMy-`-dhhy```mMMy:``+hs
-yy+` /MMMo:-mMM+`-oo/. mMMh: `dMMN/` dMMm:`dMMMMy..MMMo-.+yo`
.sys`/MMMMNNMMMs- mMMmyooooymMMNo: oMMM/sMMMMMM++MMN//oh:
`sh+/MMMhyyMMMs- `-` mMMMMMMMMMNmy+-` -MMMhMMMsmMMmdMMd/yy+
`-/+++oyy-/MMM+.`/hh/.`mNm:` mMMd+/////:-.` NMMMMMd/:NMMMMMy:/yyo/:.`
+os+//:-..-oMMMo:--:::-/MMMo. .-mMMd+---` hMMMMN+. oMMMMMo. `-+osyso:`
syo `mNMMMMMNNNNNNNNMMMo.oNNMMMMMNNNN:` +MMMMs:` dMMMN/` ``:syo
/yh` :syyyyyyyyyyyyyyyy+.`+syyyyyyyyo:` .oyys:` .oyys:` +yh
-yh- ```````````````` ````````` `` `` oys
-+h/------------------------::::::::://////++++++++++++++++++++++///////::::/yd:
shdddddddddddddddddddddddddddddhhhhhhhhyyyyyssssssssssssssssyyyyyyyhhhhhhhddddh`
S. Ponce, E. R. Margine, C. Verdi, and F. Giustino,
Comput. Phys. Commun. 209, 116 (2016)
Program EPW v.5.0.0 starts on 16Oct2018 at 16: 5:25
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
URL http://www.quantum-espresso.org",
in publications or presentations arising from this work. More details at
http://www.quantum-espresso.org/quote
Parallel version (MPI), running on 1 processors
MPI processes distributed on 1 nodes
------------------------------------------------------------------------
RESTART - RESTART - RESTART - RESTART
Restart is done without reading PWSCF save file.
Be aware that some consistency checks are therefore not done.
------------------------------------------------------------------------
--
bravais-lattice index = 0
lattice parameter (a_0) = 0.0000 a.u.
unit-cell volume = 0.0000 (a.u.)^3
number of atoms/cell = 0
number of atomic types = 0
kinetic-energy cut-off = 0.0000 Ry
charge density cut-off = 0.0000 Ry
convergence threshold = 0.0E+00
beta = 0.0000
number of iterations used = 0
Exchange-correlation = not set (-1 -1 -1 -1-1-1)
celldm(1)= 0.00000 celldm(2)= 0.00000 celldm(3)= 0.00000
celldm(4)= 0.00000 celldm(5)= 0.00000 celldm(6)= 0.00000
crystal axes: (cart. coord. in units of a_0)
a(1) = ( 0.0000 0.0000 0.0000 )
a(2) = ( 0.0000 0.0000 0.0000 )
a(3) = ( 0.0000 0.0000 0.0000 )
reciprocal axes: (cart. coord. in units 2 pi/a_0)
b(1) = ( 0.0000 0.0000 0.0000 )
b(2) = ( 0.0000 0.0000 0.0000 )
b(3) = ( 0.0000 0.0000 0.0000 )
Atoms inside the unit cell:
Cartesian axes
site n. atom mass positions (a_0 units)
No symmetry!
G cutoff = 0.0000 ( 0 G-vectors) FFT grid: ( 0, 0, 0)
number of k points= 0
cart. coord. in units 2pi/a_0
EPW : 0.00s CPU 0.00s WALL
EPW : 0.00s CPU 0.00s WALL
No wavefunction gauge setting applied
-------------------------------------------------------------------
Using si.ukk from disk
-------------------------------------------------------------------
Using kmap and kgmap from disk
Do not need to read .epb files; read .fmt files
Band disentanglement is used: nbndsub = 8
Use zone-centred Wigner-Seitz cells
Number of WS vectors for electrons 279
Number of WS vectors for phonons 19
Number of WS vectors for electron-phonon 19
Maximum number of cores for efficient parallelization 114
Results may improve by using use_ws == .true.
Reading Hamiltonian, Dynamical matrix and EP vertex in Wann rep from file
Reading interatomic force constants
Read Z* and epsilon
IFC last -0.0026126
Norm of the difference between old and new effective charges: 0.0000000
Norm of the difference between old and new force-constants: 0.0000020
Imposed crystal ASR
Finished reading ifcs
Finished reading Wann rep data from file
===================================================================
Memory usage: VmHWM = 12Mb
VmPeak = 273Mb
===================================================================
Using uniform q-mesh: 7 7 7
Size of q point mesh for interpolation: 343
Using uniform MP k-mesh: 7 7 7
Size of k point mesh for interpolation: 40
Max number of k points per pool: 40
Fermi energy coarse grid = 0.000000 eV
Fermi energy is calculated from the fine k-mesh: Ef = 6.339674 eV
Warning: check if difference with Fermi level fine grid makes sense
===================================================================
ibndmin = 2 ebndmin = 0.190
ibndmax = 8 ebndmax = 0.760
Number of ep-matrix elements per pool : 5880 ~= 45.94 Kb (@ 8 bytes/ DP)
Number of elements per core 1528
Average over degenerate eigenstates is performed
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.478637E-02 x-axis
0.478658E-02 y-axis
0.115242E-01 z-axis
0.703239E-02 avg
500.000 7.0136 0.100000E+14 0.274743E-01 x-axis
0.274758E-01 y-axis
0.637071E-01 z-axis
0.395524E-01 avg
===================================================================
Start solving iterative Boltzmann Transport Equation
===================================================================
Iteration number: 1
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.590051E-02 x-axis
0.590248E-02 y-axis
0.116036E-01 z-axis
0.780221E-02 avg
500.000 7.0136 0.100000E+14 0.339718E-01 x-axis
0.339864E-01 y-axis
0.644797E-01 z-axis
0.441460E-01 avg
0.441460E-01 Err
Iteration number: 2
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.644417E-02 x-axis
0.644751E-02 y-axis
0.118128E-01 z-axis
0.823483E-02 avg
500.000 7.0136 0.100000E+14 0.371091E-01 x-axis
0.371345E-01 y-axis
0.657224E-01 z-axis
0.466553E-01 avg
0.250937E-02 Err
Iteration number: 3
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.660118E-02 x-axis
0.660483E-02 y-axis
0.118134E-01 z-axis
0.833980E-02 avg
500.000 7.0136 0.100000E+14 0.380423E-01 x-axis
0.380701E-01 y-axis
0.657563E-01 z-axis
0.472896E-01 avg
0.634249E-03 Err
Iteration number: 4
===================================================================
Temp [K] Fermi [eV] Hole density [cm^-3] Hole mobility [cm^2/Vs]
===================================================================
400.000 6.8619 0.100000E+14 0.666450E-02 x-axis
0.666825E-02 y-axis
0.118240E-01 z-axis
0.838558E-02 avg
500.000 7.0136 0.100000E+14 0.384180E-01 x-axis
0.384467E-01 y-axis
0.658280E-01 z-axis
0.475642E-01 avg
0.274620E-03 Err
Iteration number: 5
===================================================================
The iteration reached the maximum but did not converge.
===================================================================
Unfolding on the coarse grid
elphon_wrap : 0.00s CPU 0.00s WALL ( 1 calls)
INITIALIZATION:
Electron-Phonon interpolation
ephwann : 0.19s CPU 0.19s WALL ( 1 calls)
HamW2B : 0.00s CPU 0.00s WALL ( 40 calls)
Total program execution
EPW : 0.19s CPU 0.19s WALL
Please consider citing:
S. Ponce, E. R. Margine, C. Verdi and F. Giustino, Comput. Phys. Commun. 209, 116 (2016)
In addition, if you used anisotropic Eliashberg superconductivity please cite:
E. R. Margine and F. Giustino, Phys. Rev. B 87, 024505 (2013)
if you used transport properties (scattering rates, mobility) please cite:
S. Ponce, E. R. Margine and F. Giustino, Phys. Rev. B 97, 121201 (2018)

View File

@ -0,0 +1,163 @@
Program PWSCF v.6.3 starts on 29Aug2018 at 11:16:59
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
URL http://www.quantum-espresso.org",
in publications or presentations arising from this work. More details at
http://www.quantum-espresso.org/quote
Parallel version (MPI), running on 1 processors
MPI processes distributed on 1 nodes
Waiting for input...
Reading input from standard input
Current dimensions of program PWSCF are:
Max number of different atomic species (ntypx) = 10
Max number of k-points (npk) = 40000
Max angular momentum in pseudopotentials (lmaxx) = 3
Atomic positions and unit cell read from directory:
./si.save/
Subspace diagonalization in iterative solution of the eigenvalue problem:
a serial algorithm will be used
G-vector sticks info
--------------------
sticks: dense smooth PW G-vecs: dense smooth PW
Sum 151 151 61 1139 1139 331
bravais-lattice index = 2
lattice parameter (alat) = 10.2620 a.u.
unit-cell volume = 270.1693 (a.u.)^3
number of atoms/cell = 2
number of atomic types = 1
number of electrons = 8.00
number of Kohn-Sham states= 10
kinetic-energy cutoff = 10.0000 Ry
charge density cutoff = 40.0000 Ry
Exchange-correlation = PBE ( 1 4 3 4 0 0)
celldm(1)= 10.262000 celldm(2)= 0.000000 celldm(3)= 0.000000
celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000
crystal axes: (cart. coord. in units of alat)
a(1) = ( -0.500000 0.000000 0.500000 )
a(2) = ( 0.000000 0.500000 0.500000 )
a(3) = ( -0.500000 0.500000 0.000000 )
reciprocal axes: (cart. coord. in units 2 pi/alat)
b(1) = ( -1.000000 -1.000000 1.000000 )
b(2) = ( 1.000000 1.000000 1.000000 )
b(3) = ( -1.000000 1.000000 -1.000000 )
PseudoPot. # 1 for Si read from file:
./Si_r.upf
MD5 check sum: c84abb4b0aac9c93a8e9f74896432a0a
Pseudo is Norm-conserving + core correction, Zval = 4.0
Generated using ONCVPSP code by D. R. Hamann
Using radial grid of 1528 points, 6 beta functions with:
l(1) = 0
l(2) = 0
l(3) = 1
l(4) = 1
l(5) = 2
l(6) = 2
atomic species valence mass pseudopotential
Si 4.00 28.08550 Si( 1.00)
48 Sym. Ops., with inversion, found (24 have fractional translation)
Cartesian axes
site n. atom positions (alat units)
1 Si tau( 1) = ( 0.0000000 0.0000000 0.0000000 )
2 Si tau( 2) = ( 0.2500000 0.2500000 0.2500000 )
number of k points= 216
Number of k-points >= 100: set verbosity='high' to print them.
Dense grid: 1139 G-vectors FFT dimensions: ( 16, 16, 16)
Estimated max dynamical RAM per process > 1.41 MB
The potential is recalculated from file :
./si.save/charge-density
Starting wfcs are 8 randomized atomic wfcs + 2 random wfcs
Band Structure Calculation
CG style diagonalization
ethr = 1.25E-15, avg # of iterations = 35.1
total cpu time spent up to now is 6.7 secs
End of band structure calculation
Number of k-points >= 100: set verbosity='high' to print the bands.
highest occupied, lowest unoccupied level (ev): 6.2555 7.1119
Writing output data file si.save/
init_run : 0.03s CPU 0.03s WALL ( 1 calls)
electrons : 11.22s CPU 6.51s WALL ( 1 calls)
Called by init_run:
wfcinit : 0.00s CPU 0.00s WALL ( 1 calls)
potinit : 0.00s CPU 0.00s WALL ( 1 calls)
hinit0 : 0.02s CPU 0.03s WALL ( 1 calls)
Called by electrons:
c_bands : 11.22s CPU 6.51s WALL ( 1 calls)
v_of_rho : 0.00s CPU 0.00s WALL ( 1 calls)
Called by c_bands:
init_us_2 : 0.02s CPU 0.01s WALL ( 216 calls)
ccgdiagg : 10.41s CPU 6.04s WALL ( 632 calls)
wfcrot : 0.76s CPU 0.44s WALL ( 632 calls)
Called by sum_band:
Called by *cgdiagg:
h_psi : 8.97s CPU 5.14s WALL ( 70431 calls)
cdiaghg : 0.16s CPU 0.10s WALL ( 632 calls)
Called by h_psi:
h_psi:pot : 8.82s CPU 5.05s WALL ( 70431 calls)
h_psi:calbec : 0.93s CPU 0.65s WALL ( 70431 calls)
vloc_psi : 6.13s CPU 3.43s WALL ( 70431 calls)
add_vuspsi : 1.47s CPU 0.83s WALL ( 70431 calls)
hs_1psi : 8.82s CPU 5.06s WALL ( 69799 calls)
s_1psi : 0.83s CPU 0.55s WALL ( 69799 calls)
General routines
calbec : 1.32s CPU 0.96s WALL ( 140230 calls)
fft : 0.00s CPU 0.00s WALL ( 11 calls)
fftw : 5.16s CPU 2.89s WALL ( 152238 calls)
davcio : 0.01s CPU 0.01s WALL ( 432 calls)
Parallel routines
PWSCF : 11.49s CPU 6.73s WALL
This run was terminated on: 11:17: 6 29Aug2018
=------------------------------------------------------------------------------=
JOB DONE.
=------------------------------------------------------------------------------=

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,56 @@
Program Q2R v.6.3 starts on 29Aug2018 at 11:16:58
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
URL http://www.quantum-espresso.org",
in publications or presentations arising from this work. More details at
http://www.quantum-espresso.org/quote
Parallel version (MPI), running on 1 processors
MPI processes distributed on 1 nodes
reading grid info from file si.dyn0
reading force constants from file si.dyn1
macroscopic fields = T
13.98349 -0.00000 0.00000
-0.00000 13.98349 0.00000
-0.00000 -0.00000 13.98349
na= 1
-0.23421 -0.00000 0.00000
-0.00000 -0.23421 0.00000
0.00000 -0.00000 -0.23421
na= 2
-0.23421 -0.00000 0.00000
-0.00000 -0.23421 0.00000
0.00000 0.00000 -0.23421
Norm of the difference between old and new effective charges: 0.57369636801879420052
nqs= 1
q= 0.00000000 0.00000000 0.00000000
reading force constants from file si.dyn2
nqs= 4
q= 0.50000000 -0.50000000 0.50000000
q= 0.50000000 0.50000000 -0.50000000
q= -0.50000000 -0.50000000 -0.50000000
q= 0.50000000 -0.50000000 -0.50000000
reading force constants from file si.dyn3
nqs= 3
q= 0.00000000 -1.00000000 0.00000000
q= -1.00000000 0.00000000 0.00000000
q= 0.00000000 0.00000000 1.00000000
q-space grid ok, #points = 8
fft-check success (sum of imaginary terms < 10^-12)
Q2R : 0.00s CPU 0.00s WALL
This run was terminated on: 11:16:58 29Aug2018
=------------------------------------------------------------------------------=
JOB DONE.
=------------------------------------------------------------------------------=

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,69 @@
--
&inputepw
prefix = 'si'
amass(1) = 28.0855
outdir = './'
iverbosity = 0
elph = .true.
kmaps = .false.
epbwrite = .true.
epbread = .false.
epwwrite = .true.
epwread = .false.
etf_mem = 1
vme = .false.
lifc = .true.
asr_typ = 'crystal'
nbndsub = 8
nbndskip = 0
wannierize = .true.
num_iter = 1500
iprint = 2
dis_win_max = 18
dis_froz_max= 8.5
proj(1) = 'Si : sp3'
wdata(1) = 'bands_plot = .true.'
wdata(2) = 'begin kpoint_path'
wdata(3) = 'L 0.50 0.00 0.00 G 0.00 0.00 0.00'
wdata(4) = 'G 0.00 0.00 0.00 X 0.50 0.50 0.00'
wdata(5) = 'end kpoint_path'
wdata(6) = 'bands_plot_format = gnuplot'
wdata(7) = 'guiding_centres = .true.'
wdata(8) = 'dis_num_iter = 500'
wdata(9) = 'num_print_cycles = 10'
wdata(10) = 'dis_mix_ratio = 1.0'
wdata(11) = 'conv_tol = 1E-9'
wdata(12) = 'conv_window = 4'
elecselfen = .false.
phonselfen = .false.
a2f = .false.
fsthick = 2.0 ! eV
eptemp = 1 ! K
degaussw = 0.1 ! eV
dvscf_dir = './save/'
band_plot = .true.
filkf = './LGX.txt'
filqf = './LGX.txt'
nk1 = 6
nk2 = 6
nk3 = 6
nq1 = 2
nq2 = 2
nq3 = 2
/
3 cartesian
0.000000000 0.000000000 0.000000000
0.500000000 -0.500000000 0.500000000
0.000000000 -1.000000000 0.000000000

View File

@ -0,0 +1,96 @@
--
&inputepw
prefix = 'si'
amass(1) = 28.0855
outdir = './'
iverbosity = 0
elph = .true.
kmaps = .true.
epbwrite = .false.
epbread = .false.
epwwrite = .false.
epwread = .true.
scattering = .true.
scattering_serta = .true.
int_mob = .true.
carrier = .true.
ncarrier = 1E13
mp_mesh_k = .true.
iterative_bte = .true.
epmatkqread = .false.
mob_maxiter = 3
broyden_beta= 1.0
vme = .false.
scissor = 0.7
nstemp = 2
tempsmin = 400
tempsmax = 500
restart = .true.
restart_freq = 50
selecqread = .false.
lifc = .true.
asr_typ = 'crystal'
etf_mem = 1
nbndsub = 8
nbndskip = 0
wannierize = .false.
num_iter = 1500
iprint = 2
dis_win_max = 18
dis_froz_max= 8.5
proj(1) = 'Si : sp3'
wdata(1) = 'bands_plot = .true.'
wdata(2) = 'begin kpoint_path'
wdata(3) = 'L 0.50 0.00 0.00 G 0.00 0.00 0.00'
wdata(4) = 'G 0.00 0.00 0.00 X 0.50 0.50 0.00'
wdata(5) = 'end kpoint_path'
wdata(6) = 'bands_plot_format = gnuplot'
wdata(7) = 'guiding_centres = .true.'
wdata(8) = 'dis_num_iter = 500'
wdata(9) = 'num_print_cycles = 10'
wdata(10) = 'dis_mix_ratio = 1.0'
wdata(11) = 'conv_tol = 1E-9'
wdata(12) = 'conv_window = 4'
wdata(13) = 'write_hr = .true.'
wdata(14) = 'write_rmn = .true.'
elecselfen = .false.
phonselfen = .false.
a2f = .false.
fsthick = 4.0
eptemp = 1 ! K
degaussw = 0.1 ! eV
dvscf_dir = './save/'
nkf1 = 7
nkf2 = 7
nkf3 = 7
nqf1 = 7
nqf2 = 7
nqf3 = 7
nk1 = 6
nk2 = 6
nk3 = 6
nq1 = 2
nq2 = 2
nq3 = 2
/
3 cartesian
0.000000000 0.000000000 0.000000000
0.500000000 -0.500000000 0.500000000
0.000000000 -1.000000000 0.000000000

View File

@ -17,9 +17,11 @@
scattering_serta = .true.
int_mob = .true.
carrier = .true.
ncarrier = 1E13
ncarrier = -1E13
mp_mesh_k = .true.
iterative_bte = .true.
epmatkqread = .true.
mob_maxiter = 4
broyden_beta= 1.0
vme = .false.
@ -29,7 +31,7 @@
tempsmin = 400
tempsmax = 500
restart = .false.
restart = .true.
restart_freq = 50
lifc = .true.

View File

@ -0,0 +1,245 @@
&control
calculation = 'nscf'
prefix = 'si'
restart_mode = 'from_scratch'
wf_collect = .true.
pseudo_dir = './'
outdir = './'
/
&system
ibrav = 2
celldm(1) = 10.262
nat = 2
ntyp = 1
ecutwfc = 10
nbnd = 10
/
&electrons
diagonalization = 'cg'
mixing_beta = 0.7
conv_thr = 1.0d-13
/
ATOMIC_SPECIES
Si 28.0855 Si_r.upf
ATOMIC_POSITIONS alat
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
K_POINTS crystal
216
0.0 0.0 0.0 0.00462962962963
0.0 0.0 0.166666666667 0.00462962962963
0.0 0.0 0.333333333333 0.00462962962963
0.0 0.0 0.5 0.00462962962963
0.0 0.0 0.666666666667 0.00462962962963
0.0 0.0 0.833333333333 0.00462962962963
0.0 0.166666666667 0.0 0.00462962962963
0.0 0.166666666667 0.166666666667 0.00462962962963
0.0 0.166666666667 0.333333333333 0.00462962962963
0.0 0.166666666667 0.5 0.00462962962963
0.0 0.166666666667 0.666666666667 0.00462962962963
0.0 0.166666666667 0.833333333333 0.00462962962963
0.0 0.333333333333 0.0 0.00462962962963
0.0 0.333333333333 0.166666666667 0.00462962962963
0.0 0.333333333333 0.333333333333 0.00462962962963
0.0 0.333333333333 0.5 0.00462962962963
0.0 0.333333333333 0.666666666667 0.00462962962963
0.0 0.333333333333 0.833333333333 0.00462962962963
0.0 0.5 0.0 0.00462962962963
0.0 0.5 0.166666666667 0.00462962962963
0.0 0.5 0.333333333333 0.00462962962963
0.0 0.5 0.5 0.00462962962963
0.0 0.5 0.666666666667 0.00462962962963
0.0 0.5 0.833333333333 0.00462962962963
0.0 0.666666666667 0.0 0.00462962962963
0.0 0.666666666667 0.166666666667 0.00462962962963
0.0 0.666666666667 0.333333333333 0.00462962962963
0.0 0.666666666667 0.5 0.00462962962963
0.0 0.666666666667 0.666666666667 0.00462962962963
0.0 0.666666666667 0.833333333333 0.00462962962963
0.0 0.833333333333 0.0 0.00462962962963
0.0 0.833333333333 0.166666666667 0.00462962962963
0.0 0.833333333333 0.333333333333 0.00462962962963
0.0 0.833333333333 0.5 0.00462962962963
0.0 0.833333333333 0.666666666667 0.00462962962963
0.0 0.833333333333 0.833333333333 0.00462962962963
0.166666666667 0.0 0.0 0.00462962962963
0.166666666667 0.0 0.166666666667 0.00462962962963
0.166666666667 0.0 0.333333333333 0.00462962962963
0.166666666667 0.0 0.5 0.00462962962963
0.166666666667 0.0 0.666666666667 0.00462962962963
0.166666666667 0.0 0.833333333333 0.00462962962963
0.166666666667 0.166666666667 0.0 0.00462962962963
0.166666666667 0.166666666667 0.166666666667 0.00462962962963
0.166666666667 0.166666666667 0.333333333333 0.00462962962963
0.166666666667 0.166666666667 0.5 0.00462962962963
0.166666666667 0.166666666667 0.666666666667 0.00462962962963
0.166666666667 0.166666666667 0.833333333333 0.00462962962963
0.166666666667 0.333333333333 0.0 0.00462962962963
0.166666666667 0.333333333333 0.166666666667 0.00462962962963
0.166666666667 0.333333333333 0.333333333333 0.00462962962963
0.166666666667 0.333333333333 0.5 0.00462962962963
0.166666666667 0.333333333333 0.666666666667 0.00462962962963
0.166666666667 0.333333333333 0.833333333333 0.00462962962963
0.166666666667 0.5 0.0 0.00462962962963
0.166666666667 0.5 0.166666666667 0.00462962962963
0.166666666667 0.5 0.333333333333 0.00462962962963
0.166666666667 0.5 0.5 0.00462962962963
0.166666666667 0.5 0.666666666667 0.00462962962963
0.166666666667 0.5 0.833333333333 0.00462962962963
0.166666666667 0.666666666667 0.0 0.00462962962963
0.166666666667 0.666666666667 0.166666666667 0.00462962962963
0.166666666667 0.666666666667 0.333333333333 0.00462962962963
0.166666666667 0.666666666667 0.5 0.00462962962963
0.166666666667 0.666666666667 0.666666666667 0.00462962962963
0.166666666667 0.666666666667 0.833333333333 0.00462962962963
0.166666666667 0.833333333333 0.0 0.00462962962963
0.166666666667 0.833333333333 0.166666666667 0.00462962962963
0.166666666667 0.833333333333 0.333333333333 0.00462962962963
0.166666666667 0.833333333333 0.5 0.00462962962963
0.166666666667 0.833333333333 0.666666666667 0.00462962962963
0.166666666667 0.833333333333 0.833333333333 0.00462962962963
0.333333333333 0.0 0.0 0.00462962962963
0.333333333333 0.0 0.166666666667 0.00462962962963
0.333333333333 0.0 0.333333333333 0.00462962962963
0.333333333333 0.0 0.5 0.00462962962963
0.333333333333 0.0 0.666666666667 0.00462962962963
0.333333333333 0.0 0.833333333333 0.00462962962963
0.333333333333 0.166666666667 0.0 0.00462962962963
0.333333333333 0.166666666667 0.166666666667 0.00462962962963
0.333333333333 0.166666666667 0.333333333333 0.00462962962963
0.333333333333 0.166666666667 0.5 0.00462962962963
0.333333333333 0.166666666667 0.666666666667 0.00462962962963
0.333333333333 0.166666666667 0.833333333333 0.00462962962963
0.333333333333 0.333333333333 0.0 0.00462962962963
0.333333333333 0.333333333333 0.166666666667 0.00462962962963
0.333333333333 0.333333333333 0.333333333333 0.00462962962963
0.333333333333 0.333333333333 0.5 0.00462962962963
0.333333333333 0.333333333333 0.666666666667 0.00462962962963
0.333333333333 0.333333333333 0.833333333333 0.00462962962963
0.333333333333 0.5 0.0 0.00462962962963
0.333333333333 0.5 0.166666666667 0.00462962962963
0.333333333333 0.5 0.333333333333 0.00462962962963
0.333333333333 0.5 0.5 0.00462962962963
0.333333333333 0.5 0.666666666667 0.00462962962963
0.333333333333 0.5 0.833333333333 0.00462962962963
0.333333333333 0.666666666667 0.0 0.00462962962963
0.333333333333 0.666666666667 0.166666666667 0.00462962962963
0.333333333333 0.666666666667 0.333333333333 0.00462962962963
0.333333333333 0.666666666667 0.5 0.00462962962963
0.333333333333 0.666666666667 0.666666666667 0.00462962962963
0.333333333333 0.666666666667 0.833333333333 0.00462962962963
0.333333333333 0.833333333333 0.0 0.00462962962963
0.333333333333 0.833333333333 0.166666666667 0.00462962962963
0.333333333333 0.833333333333 0.333333333333 0.00462962962963
0.333333333333 0.833333333333 0.5 0.00462962962963
0.333333333333 0.833333333333 0.666666666667 0.00462962962963
0.333333333333 0.833333333333 0.833333333333 0.00462962962963
0.5 0.0 0.0 0.00462962962963
0.5 0.0 0.166666666667 0.00462962962963
0.5 0.0 0.333333333333 0.00462962962963
0.5 0.0 0.5 0.00462962962963
0.5 0.0 0.666666666667 0.00462962962963
0.5 0.0 0.833333333333 0.00462962962963
0.5 0.166666666667 0.0 0.00462962962963
0.5 0.166666666667 0.166666666667 0.00462962962963
0.5 0.166666666667 0.333333333333 0.00462962962963
0.5 0.166666666667 0.5 0.00462962962963
0.5 0.166666666667 0.666666666667 0.00462962962963
0.5 0.166666666667 0.833333333333 0.00462962962963
0.5 0.333333333333 0.0 0.00462962962963
0.5 0.333333333333 0.166666666667 0.00462962962963
0.5 0.333333333333 0.333333333333 0.00462962962963
0.5 0.333333333333 0.5 0.00462962962963
0.5 0.333333333333 0.666666666667 0.00462962962963
0.5 0.333333333333 0.833333333333 0.00462962962963
0.5 0.5 0.0 0.00462962962963
0.5 0.5 0.166666666667 0.00462962962963
0.5 0.5 0.333333333333 0.00462962962963
0.5 0.5 0.5 0.00462962962963
0.5 0.5 0.666666666667 0.00462962962963
0.5 0.5 0.833333333333 0.00462962962963
0.5 0.666666666667 0.0 0.00462962962963
0.5 0.666666666667 0.166666666667 0.00462962962963
0.5 0.666666666667 0.333333333333 0.00462962962963
0.5 0.666666666667 0.5 0.00462962962963
0.5 0.666666666667 0.666666666667 0.00462962962963
0.5 0.666666666667 0.833333333333 0.00462962962963
0.5 0.833333333333 0.0 0.00462962962963
0.5 0.833333333333 0.166666666667 0.00462962962963
0.5 0.833333333333 0.333333333333 0.00462962962963
0.5 0.833333333333 0.5 0.00462962962963
0.5 0.833333333333 0.666666666667 0.00462962962963
0.5 0.833333333333 0.833333333333 0.00462962962963
0.666666666667 0.0 0.0 0.00462962962963
0.666666666667 0.0 0.166666666667 0.00462962962963
0.666666666667 0.0 0.333333333333 0.00462962962963
0.666666666667 0.0 0.5 0.00462962962963
0.666666666667 0.0 0.666666666667 0.00462962962963
0.666666666667 0.0 0.833333333333 0.00462962962963
0.666666666667 0.166666666667 0.0 0.00462962962963
0.666666666667 0.166666666667 0.166666666667 0.00462962962963
0.666666666667 0.166666666667 0.333333333333 0.00462962962963
0.666666666667 0.166666666667 0.5 0.00462962962963
0.666666666667 0.166666666667 0.666666666667 0.00462962962963
0.666666666667 0.166666666667 0.833333333333 0.00462962962963
0.666666666667 0.333333333333 0.0 0.00462962962963
0.666666666667 0.333333333333 0.166666666667 0.00462962962963
0.666666666667 0.333333333333 0.333333333333 0.00462962962963
0.666666666667 0.333333333333 0.5 0.00462962962963
0.666666666667 0.333333333333 0.666666666667 0.00462962962963
0.666666666667 0.333333333333 0.833333333333 0.00462962962963
0.666666666667 0.5 0.0 0.00462962962963
0.666666666667 0.5 0.166666666667 0.00462962962963
0.666666666667 0.5 0.333333333333 0.00462962962963
0.666666666667 0.5 0.5 0.00462962962963
0.666666666667 0.5 0.666666666667 0.00462962962963
0.666666666667 0.5 0.833333333333 0.00462962962963
0.666666666667 0.666666666667 0.0 0.00462962962963
0.666666666667 0.666666666667 0.166666666667 0.00462962962963
0.666666666667 0.666666666667 0.333333333333 0.00462962962963
0.666666666667 0.666666666667 0.5 0.00462962962963
0.666666666667 0.666666666667 0.666666666667 0.00462962962963
0.666666666667 0.666666666667 0.833333333333 0.00462962962963
0.666666666667 0.833333333333 0.0 0.00462962962963
0.666666666667 0.833333333333 0.166666666667 0.00462962962963
0.666666666667 0.833333333333 0.333333333333 0.00462962962963
0.666666666667 0.833333333333 0.5 0.00462962962963
0.666666666667 0.833333333333 0.666666666667 0.00462962962963
0.666666666667 0.833333333333 0.833333333333 0.00462962962963
0.833333333333 0.0 0.0 0.00462962962963
0.833333333333 0.0 0.166666666667 0.00462962962963
0.833333333333 0.0 0.333333333333 0.00462962962963
0.833333333333 0.0 0.5 0.00462962962963
0.833333333333 0.0 0.666666666667 0.00462962962963
0.833333333333 0.0 0.833333333333 0.00462962962963
0.833333333333 0.166666666667 0.0 0.00462962962963
0.833333333333 0.166666666667 0.166666666667 0.00462962962963
0.833333333333 0.166666666667 0.333333333333 0.00462962962963
0.833333333333 0.166666666667 0.5 0.00462962962963
0.833333333333 0.166666666667 0.666666666667 0.00462962962963
0.833333333333 0.166666666667 0.833333333333 0.00462962962963
0.833333333333 0.333333333333 0.0 0.00462962962963
0.833333333333 0.333333333333 0.166666666667 0.00462962962963
0.833333333333 0.333333333333 0.333333333333 0.00462962962963
0.833333333333 0.333333333333 0.5 0.00462962962963
0.833333333333 0.333333333333 0.666666666667 0.00462962962963
0.833333333333 0.333333333333 0.833333333333 0.00462962962963
0.833333333333 0.5 0.0 0.00462962962963
0.833333333333 0.5 0.166666666667 0.00462962962963
0.833333333333 0.5 0.333333333333 0.00462962962963
0.833333333333 0.5 0.5 0.00462962962963
0.833333333333 0.5 0.666666666667 0.00462962962963
0.833333333333 0.5 0.833333333333 0.00462962962963
0.833333333333 0.666666666667 0.0 0.00462962962963
0.833333333333 0.666666666667 0.166666666667 0.00462962962963
0.833333333333 0.666666666667 0.333333333333 0.00462962962963
0.833333333333 0.666666666667 0.5 0.00462962962963
0.833333333333 0.666666666667 0.666666666667 0.00462962962963
0.833333333333 0.666666666667 0.833333333333 0.00462962962963
0.833333333333 0.833333333333 0.0 0.00462962962963
0.833333333333 0.833333333333 0.166666666667 0.00462962962963
0.833333333333 0.833333333333 0.333333333333 0.00462962962963
0.833333333333 0.833333333333 0.5 0.00462962962963
0.833333333333 0.833333333333 0.666666666667 0.00462962962963
0.833333333333 0.833333333333 0.833333333333 0.00462962962963

View File

@ -0,0 +1,13 @@
--
&inputph
prefix = 'si',
epsil = .false.,
outdir = './'
fildyn = 'si.dyn',
ldisp = .true.
fildvscf = 'dvscf'
nq1=2,
nq2=2,
nq3=2,
tr2_ph = 1.0d-14,
/

View File

@ -0,0 +1 @@
si

View File

@ -0,0 +1 @@
&input fildyn='si.dyn', zasr='crystal', flfrc='si.fc' /

View File

@ -0,0 +1,31 @@
&control
calculation = 'scf'
prefix = 'si'
restart_mode = 'from_scratch'
wf_collect = .true.
pseudo_dir = './'
outdir = './'
tprnfor = .true.
tstress = .true.
verbosity = 'high'
/
&system
ibrav = 2
celldm(1) = 10.262
nat = 2
ntyp = 1
ecutwfc = 10
/
&electrons
diagonalization = 'david'
mixing_beta = 0.7
conv_thr = 1.0d-14
/
ATOMIC_SPECIES
Si 28.0855 Si_r.upf
ATOMIC_POSITIONS alat
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
K_POINTS automatic
6 6 6 0 0 0

View File

@ -88,7 +88,11 @@ inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('q2r.in', '4'), ('scf.in', '1'),
[epw_mob_ibte/]
program = EPW
inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('q2r.in', '4'), ('scf.in', '1'), ('nscf.in', '1'), ('epw1.in', '3'), ('epw2.in', '3'), ('epw3.in', '3'), ('epw4.in', '3')
inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('q2r.in', '4'), ('scf.in', '1'), ('nscf.in', '1'), ('epw1.in', '3'), ('epw2.in', '3'), ('epw3.in', '3')
[epw_mob_ibte_sym/]
program = EPW
inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('q2r.in', '4'), ('scf.in', '1'), ('nscf.in', '1'), ('epw1.in', '3'), ('epw2.in', '3'), ('epw3.in', '3')
[tddfpt_CH4/]
program = TDDFPT