diff --git a/input/methods b/input/methods index 8aba71b..c89190f 100644 --- a/input/methods +++ b/input/methods @@ -13,7 +13,7 @@ # G0F2* evGF2* qsGF2* G0F3 evGF3 F F F F F # 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 - F F F F F T + F F F F F F # * unrestricted version available diff --git a/input/options b/input/options index 0ebb0db..a36a2b8 100644 --- a/input/options +++ b/input/options @@ -15,4 +15,4 @@ # ACFDT: AC Kx XBS T T F # BSE: phBSE phBSE2 ppBSE dBSE dTDA evDyn - F F F T F F + T T T T F F diff --git a/src/GW/GW_phACFDT.f90 b/src/GW/GW_phACFDT.f90 index 697e8a8..cb191b8 100644 --- a/src/GW/GW_phACFDT.f90 +++ b/src/GW/GW_phACFDT.f90 @@ -58,9 +58,8 @@ subroutine GW_phACFDT(exchange_kernel,doXBS,dRPA,TDA_W,TDA,BSE,singlet,triplet,e ! Memory allocation 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)) - if(.not.TDA) allocate(Aph(nS,nS),KB(nS,nS)) ! Antisymmetrized kernel version diff --git a/src/GW/qsGW.f90 b/src/GW/qsGW.f90 index 2da86c9..9062b32 100644 --- a/src/GW/qsGW.f90 +++ b/src/GW/qsGW.f90 @@ -270,10 +270,6 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,dop ! 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? if(nSCF == maxSCF+1) then diff --git a/src/GW/qsGW_PT.f90 b/src/GW/qsGW_PT.f90 deleted file mode 100644 index adb2239..0000000 --- a/src/GW/qsGW_PT.f90 +++ /dev/null @@ -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 diff --git a/src/GW/qsUGW.f90 b/src/GW/qsUGW.f90 index a22c9a6..189f4d5 100644 --- a/src/GW/qsUGW.f90 +++ b/src/GW/qsUGW.f90 @@ -349,10 +349,6 @@ subroutine qsUGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE ! 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? if(nSCF == maxSCF) then