mirror of https://gitlab.com/QEF/q-e.git
62 lines
1.7 KiB
Fortran
62 lines
1.7 KiB
Fortran
MODULE qpe_exc
|
|
!this modules contains variables and subroutines related to the use of QP energies
|
|
!in the BSE kernel beyond the scissor operator
|
|
|
|
USE kinds, ONLY : DP
|
|
USE io_global, ONLY : ionode,ionode_id
|
|
USE mp, ONLY : mp_bcast
|
|
USE mp_world, ONLY : world_comm
|
|
|
|
REAL(kind=DP), pointer :: qpc(:) ! vector containing QPC
|
|
REAL(kind=DP) :: qpcbarc ! average qpc to be applied for higher
|
|
! (band index above qpc_imax) energy states
|
|
REAL(kind=DP) :: qpcbarv ! average qpc to be applied for lower
|
|
! (band index below qpc_imin) energy states
|
|
|
|
CONTAINS
|
|
|
|
SUBROUTINE build_qpc(qpc)
|
|
!this subroutine reads bands.dat and builds the qp correction vector
|
|
USE bse_wannier, ONLY : qpe_imin,qpe_imax
|
|
USE kinds, ONLY : DP
|
|
USE io_files, ONLY : tmp_dir,prefix
|
|
USE wvfct, ONLY : nbnd
|
|
USE constants, ONLY: RYTOEV
|
|
|
|
implicit none
|
|
|
|
INTEGER, EXTERNAL :: find_free_unit
|
|
integer :: ib, iun, idum
|
|
logical :: debug
|
|
real(kind=DP) :: qpc(qpe_imax)
|
|
real(kind=DP) :: rdum,edft,egw,dumm1,dumm2,dumm3,dumm4
|
|
|
|
qpc(1:qpe_imax)=0.d0
|
|
|
|
iun = find_free_unit()
|
|
if(ionode) then
|
|
open(iun,file=trim(tmp_dir)//trim(prefix)//'-bands.dat', status='old', form='formatted')
|
|
|
|
read(iun,*) idum
|
|
read(iun,*) idum
|
|
|
|
do ib=1,qpe_imin-1
|
|
read(iun,*) idum,dumm1,dumm2,dumm3,dumm4
|
|
enddo
|
|
|
|
do ib=qpe_imin,qpe_imax
|
|
read(iun,*) idum, edft,rdum,egw,rdum
|
|
qpc(ib)=(egw-edft)/RYTOEV
|
|
|
|
enddo
|
|
|
|
close(iun)
|
|
endif
|
|
do ib=qpe_imin,qpe_imax
|
|
call mp_bcast(qpc(ib), ionode_id, world_comm )
|
|
enddo
|
|
return
|
|
END SUBROUTINE
|
|
|
|
end MODULE qpe_exc
|