GW_ImSigC.f90

This commit is contained in:
Pierre-Francois Loos 2024-01-29 15:19:30 +01:00
parent a1286af824
commit 7f4268a185
2 changed files with 58 additions and 0 deletions

52
src/GW/GW_ImSigC.f90 Normal file
View File

@ -0,0 +1,52 @@
double precision function GW_ImSigC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Om,rho)
! Compute diagonal of the correlation part of the self-energy
implicit none
include 'parameters.h'
! Input variables
integer,intent(in) :: p
double precision,intent(in) :: w
double precision,intent(in) :: eta
integer,intent(in) :: nBas
integer,intent(in) :: nC
integer,intent(in) :: nO
integer,intent(in) :: nV
integer,intent(in) :: nR
integer,intent(in) :: nS
double precision,intent(in) :: e(nBas)
double precision,intent(in) :: Om(nS)
double precision,intent(in) :: rho(nBas,nBas,nS)
! Local variables
integer :: i,a,m
double precision :: num,eps
! Initialize
GW_ImSigC = 0d0
! Occupied part of the correlation self-energy
do i=nC+1,nO
do m=1,nS
eps = w - e(i) + Om(m)
num = 2d0*rho(p,i,m)**2
GW_ImSigC = GW_ImSigC + num*eta/(eps**2 + eta**2)
end do
end do
! Virtual part of the correlation self-energy
do a=nO+1,nBas-nR
do m=1,nS
eps = w - e(a) - Om(m)
num = 2d0*rho(p,a,m)**2
GW_ImSigC = GW_ImSigC - num*eta/(eps**2 + eta**2)
end do
end do
end function

View File

@ -120,6 +120,12 @@ subroutine GW_phBSE(dophBSE2,TDA_W,TDA,dBSE,dTDA,singlet,triplet,eta,nBas,nC,nO,
call print_excitation_energies('phBSE@GW@RHF','singlet',nS,OmBSE)
call phLR_transition_vectors(.true.,nBas,nC,nO,nV,nR,nS,dipole_int,OmBSE,XpY_BSE,XmY_BSE)
!--------------------!
! Cumulant expansion !
!--------------------!
call RGWC(.false.,nBas,nC,nO,nR,nS,OmBSE,rho_RPA,eGW)
!----------------------------------------------------!
! Compute the dynamical screening at the phBSE level !
!----------------------------------------------------!