mirror of
https://github.com/pfloos/quack
synced 2024-11-03 20:53:53 +01:00
fix bug
This commit is contained in:
parent
7d0541778b
commit
3103f786d6
@ -13,7 +13,7 @@
|
|||||||
# G0F2* evGF2* qsGF2* G0F3 evGF3
|
# G0F2* evGF2* qsGF2* G0F3 evGF3
|
||||||
F F F F F
|
F F F F F
|
||||||
# G0W0* evGW* qsGW* SRG-qsGW ufG0W0 ufGW
|
# G0W0* evGW* qsGW* SRG-qsGW ufG0W0 ufGW
|
||||||
F F F F F F
|
T F F F F F
|
||||||
# G0T0pp evGTpp qsGTpp G0T0eh evGTeh qsGTeh
|
# G0T0pp evGTpp qsGTpp G0T0eh evGTeh qsGTeh
|
||||||
F F F F F T
|
F F F F F F
|
||||||
# * unrestricted version available
|
# * unrestricted version available
|
||||||
|
@ -15,4 +15,4 @@
|
|||||||
# ACFDT: AC Kx XBS
|
# ACFDT: AC Kx XBS
|
||||||
T T F
|
T T F
|
||||||
# BSE: phBSE phBSE2 ppBSE dBSE dTDA evDyn
|
# BSE: phBSE phBSE2 ppBSE dBSE dTDA evDyn
|
||||||
F F F T F F
|
T T T T F F
|
||||||
|
@ -58,9 +58,8 @@ subroutine GW_phACFDT(exchange_kernel,doXBS,dRPA,TDA_W,TDA,BSE,singlet,triplet,e
|
|||||||
! Memory allocation
|
! Memory allocation
|
||||||
|
|
||||||
allocate(Ec(nAC,nspin))
|
allocate(Ec(nAC,nspin))
|
||||||
allocate(Aph(nS,nS),KA(nS,nS),OmRPA(nS),XpY_RPA(nS,nS),XmY_RPA(nS,nS), &
|
allocate(Aph(nS,nS),Bph(nS,nS),KA(nS,nS),KB(nS,nS),OmRPA(nS),XpY_RPA(nS,nS),XmY_RPA(nS,nS), &
|
||||||
rho_RPA(nBas,nBas,nS),Om(nS),XpY(nS,nS),XmY(nS,nS))
|
rho_RPA(nBas,nBas,nS),Om(nS),XpY(nS,nS),XmY(nS,nS))
|
||||||
if(.not.TDA) allocate(Aph(nS,nS),KB(nS,nS))
|
|
||||||
|
|
||||||
! Antisymmetrized kernel version
|
! Antisymmetrized kernel version
|
||||||
|
|
||||||
|
@ -270,10 +270,6 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,dop
|
|||||||
! End main loop
|
! End main loop
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
! Compute second-order correction of the Hermitization error
|
|
||||||
|
|
||||||
! call qsGW_PT(nBas,nC,nO,nV,nR,nS,eGW,SigCm)
|
|
||||||
|
|
||||||
! Did it actually converge?
|
! Did it actually converge?
|
||||||
|
|
||||||
if(nSCF == maxSCF+1) then
|
if(nSCF == maxSCF+1) then
|
||||||
|
@ -1,119 +0,0 @@
|
|||||||
subroutine qsGW_PT(nBas,nC,nO,nV,nR,nS,e0,SigCm)
|
|
||||||
|
|
||||||
! Compute the 1st-, 2nd-, 3rd- and 4th-order correction on the qsGW quasiparticle energies
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
include 'parameters.h'
|
|
||||||
|
|
||||||
! Input variables
|
|
||||||
|
|
||||||
integer,intent(in) :: nBas,nC,nO,nV,nR,nS
|
|
||||||
double precision,intent(in) :: e0(nBas),SigCm(nBas,nBas)
|
|
||||||
|
|
||||||
! Local variables
|
|
||||||
|
|
||||||
integer :: x,y,z,t
|
|
||||||
double precision :: eps
|
|
||||||
double precision,allocatable :: e1(:),e2(:),e3(:),e4(:)
|
|
||||||
|
|
||||||
! Allocation
|
|
||||||
|
|
||||||
allocate(e1(nBas),e2(nBas),e3(nBas),e4(nBas))
|
|
||||||
|
|
||||||
! Initalization
|
|
||||||
|
|
||||||
e1(:) = 0d0
|
|
||||||
e2(:) = 0d0
|
|
||||||
e3(:) = 0d0
|
|
||||||
e4(:) = 0d0
|
|
||||||
|
|
||||||
! Print zeroth-order qsGW QP energies
|
|
||||||
|
|
||||||
write(*,*)
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
write(*,'(A50)') ' 0th-order values of qsGW QP energies (eV) '
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
call matout(nBas,1,e0(:)*HaToeV)
|
|
||||||
|
|
||||||
! Compute 1st-order correction of qsGW QP energies
|
|
||||||
|
|
||||||
do x=nC+1,nBas-nR
|
|
||||||
|
|
||||||
e1(x) = SigCm(x,x)
|
|
||||||
|
|
||||||
end do
|
|
||||||
|
|
||||||
write(*,*)
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
write(*,'(A50)') ' 1st-order correction of qsGW QP energies (eV) '
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
call matout(nBas,1,e1(:)*HaToeV)
|
|
||||||
|
|
||||||
! Compute 2nd-order correction of qsGW QP energies
|
|
||||||
|
|
||||||
do x=nC+1,nBas-nR
|
|
||||||
do y=nC+1,nBas-nR
|
|
||||||
|
|
||||||
eps = e0(x) - e0(y)
|
|
||||||
if(abs(eps) > threshold) e2(x) = e2(x) + SigCm(x,y)**2/eps
|
|
||||||
|
|
||||||
end do
|
|
||||||
end do
|
|
||||||
|
|
||||||
write(*,*)
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
write(*,'(A50)') ' 2nd-order correction of qsGW QP energies (eV) '
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
call matout(nBas,1,e2(:)*HaToeV)
|
|
||||||
|
|
||||||
! Compute 3nd-order correction of qsGW QP energies
|
|
||||||
|
|
||||||
do x=nC+1,nBas-nR
|
|
||||||
do y=nC+1,nBas-nR
|
|
||||||
do z=nC+1,nBas-nR
|
|
||||||
|
|
||||||
eps = (e0(x) - e0(y))*(e0(x) - e0(z))
|
|
||||||
if(abs(eps) > threshold) e3(x) = e3(x) + SigCm(x,y)*SigCm(y,z)*SigCm(z,x)/eps
|
|
||||||
|
|
||||||
end do
|
|
||||||
end do
|
|
||||||
end do
|
|
||||||
|
|
||||||
write(*,*)
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
write(*,'(A50)') ' 3rd-order correction of qsGW QP energies (eV) '
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
call matout(nBas,1,e3(:)*HaToeV)
|
|
||||||
|
|
||||||
! Compute 4nd-order correction of qsGW QP energies
|
|
||||||
|
|
||||||
do x=nC+1,nBas-nR
|
|
||||||
do y=nC+1,nBas-nR
|
|
||||||
do z=nC+1,nBas-nR
|
|
||||||
do t=nC+1,nBas-nR
|
|
||||||
|
|
||||||
eps = (e0(x) - e0(y))*(e0(x) - e0(z))*(e0(x) - e0(t))
|
|
||||||
if(abs(eps) > threshold) e4(x) = e4(x) + SigCm(x,y)*SigCm(y,z)*SigCm(z,t)*SigCm(t,x)/eps
|
|
||||||
|
|
||||||
end do
|
|
||||||
end do
|
|
||||||
end do
|
|
||||||
end do
|
|
||||||
|
|
||||||
do x=nC+1,nBas-nR
|
|
||||||
do y=nC+1,nBas-nR
|
|
||||||
|
|
||||||
eps = (e0(x) - e0(y))**2
|
|
||||||
if(abs(eps) > threshold) e4(x) = e4(x) - e2(x)*SigCm(x,y)**2/eps
|
|
||||||
|
|
||||||
end do
|
|
||||||
end do
|
|
||||||
|
|
||||||
write(*,*)
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
write(*,'(A50)') ' 4th-order correction of qsGW QP energies (eV) '
|
|
||||||
write(*,'(A50)') '-----------------------------------------------'
|
|
||||||
call matout(nBas,1,e4(:)*HaToeV)
|
|
||||||
|
|
||||||
end subroutine qsGW_PT
|
|
@ -349,10 +349,6 @@ subroutine qsUGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE
|
|||||||
! End main loop
|
! End main loop
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
! Compute second-order correction of the Hermitization error
|
|
||||||
|
|
||||||
!if(doGWPT) call qsGW_PT(nBas,nC,nO,nV,nR,nS,eGW,SigCm)
|
|
||||||
|
|
||||||
! Did it actually converge?
|
! Did it actually converge?
|
||||||
|
|
||||||
if(nSCF == maxSCF) then
|
if(nSCF == maxSCF) then
|
||||||
|
Loading…
Reference in New Issue
Block a user