cleaning prints and fix bug in regularization

This commit is contained in:
Pierre-Francois Loos 2023-08-01 21:32:57 +02:00
parent e02624c646
commit 9e65d4a090
36 changed files with 292 additions and 290 deletions

View File

@ -11,9 +11,9 @@
# phRPA* phRPAx* crRPA ppRPA
F F F F
# G0F2* evGF2* qsGF2* G0F3 evGF3
F F F F F
F F T F F
# G0W0* evGW* qsGW* SRG-qsGW ufG0W0 ufGW
F 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

View File

@ -9,9 +9,9 @@
# GF: maxSCF thresh DIIS n_diis lin eta renorm reg
256 0.00001 T 5 T 0.0 0 F
# GW: maxSCF thresh DIIS n_diis lin eta TDA_W reg
256 0.00001 T 5 T 0.0 F F
256 0.00001 T 5 F 0.0 F T
# GT: maxSCF thresh DIIS n_diis lin eta TDA_T reg
256 0.00001 T 5 T 0.1 T F
256 0.00001 T 5 T 0.0 F F
# ACFDT: AC Kx XBS
F F T
# BSE: phBSE phBSE2 ppBSE dBSE dTDA

View File

@ -54,7 +54,7 @@ subroutine GF2_reg_self_energy(eta,nBas,nC,nO,nV,nR,eHF,eGF2,ERI,SigC,Z)
do a=nO+1,nBas-nR
eps = eGF2(p) + eHF(a) - eHF(i) - eHF(j)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*(2d0*ERI(p,a,i,j) - ERI(p,a,j,i))*ERI(q,a,i,j)
SigC(p,q) = SigC(p,q) + num*eps/(eps**2 + eta**2)
@ -73,7 +73,7 @@ subroutine GF2_reg_self_energy(eta,nBas,nC,nO,nV,nR,eHF,eGF2,ERI,SigC,Z)
do b=nO+1,nBas-nR
eps = eGF2(p) + eHF(i) - eHF(a) - eHF(b)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*(2d0*ERI(p,i,a,b) - ERI(p,i,b,a))*ERI(q,i,a,b)
SigC(p,q) = SigC(p,q) + num*eps/(eps**2 + eta**2)

View File

@ -53,7 +53,7 @@ subroutine GF2_reg_self_energy_diag(eta,nBas,nC,nO,nV,nR,eHF,eGF2,ERI,SigC,Z)
do a=nO+1,nBas-nR
eps = eGF2(p) + eHF(a) - eHF(i) - eHF(j)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*(2d0*ERI(p,a,i,j) - ERI(p,a,j,i))*ERI(p,a,i,j)
SigC(p) = SigC(p) + num*eps/(eps**2 + eta**2)
@ -70,7 +70,7 @@ subroutine GF2_reg_self_energy_diag(eta,nBas,nC,nO,nV,nR,eHF,eGF2,ERI,SigC,Z)
do b=nO+1,nBas-nR
eps = eGF2(p) + eHF(i) - eHF(a) - eHF(b)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*(2d0*ERI(p,i,a,b) - ERI(p,i,b,a))*ERI(p,i,a,b)
SigC(p) = SigC(p) + num*eps/(eps**2 + eta**2)

View File

@ -63,7 +63,7 @@ subroutine UGF2_reg_self_energy(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,eHF,eG
eps = eGF2(p,1) + eHF(i,1) - eHF(a,1) - eHF(b,1)
num = ERI_aa(i,q,a,b)*ERI_aa(a,b,i,p) &
- ERI_aa(i,q,a,b)*ERI_aa(a,b,p,i)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,q,1) = SigC(p,q,1) + num*eps/(eps**2 + eta**2)
@ -81,7 +81,7 @@ subroutine UGF2_reg_self_energy(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,eHF,eG
eps = eGF2(p,1) + eHF(i,2) - eHF(a,2) - eHF(b,1)
num = ERI_ab(q,i,b,a)*ERI_ab(b,a,p,i)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,q,1) = SigC(p,q,1) + num*eps/(eps**2 + eta**2)
@ -100,7 +100,7 @@ subroutine UGF2_reg_self_energy(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,eHF,eG
eps = eGF2(p,1) + eHF(a,1) - eHF(i,1) - eHF(j,1)
num = ERI_aa(a,q,i,j)*ERI_aa(i,j,a,p) &
- ERI_aa(a,q,i,j)*ERI_aa(i,j,p,a)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,q,1) = SigC(p,q,1) + num*eps/(eps**2 + eta**2)
@ -118,7 +118,7 @@ subroutine UGF2_reg_self_energy(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,eHF,eG
eps = eGF2(p,1) + eHF(a,2) - eHF(i,2) - eHF(j,1)
num = ERI_ab(q,a,j,i)*ERI_ab(j,i,p,a)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,q,1) = SigC(p,q,1) + num*eps/(eps**2 + eta**2)
@ -147,7 +147,7 @@ subroutine UGF2_reg_self_energy(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,eHF,eG
eps = eGF2(p,2) + eHF(i,2) - eHF(a,2) - eHF(b,2)
num = ERI_bb(i,q,a,b)*ERI_bb(a,b,i,p) &
- ERI_bb(i,q,a,b)*ERI_bb(a,b,p,i)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,q,2) = SigC(p,q,2) + num*eps/(eps**2 + eta**2)
@ -165,7 +165,7 @@ subroutine UGF2_reg_self_energy(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,eHF,eG
eps = eGF2(p,2) + eHF(i,1) - eHF(a,1) - eHF(b,2)
num = ERI_ab(i,q,a,b)*ERI_ab(a,b,i,p)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,q,2) = SigC(p,q,2) + num*eps/(eps**2 + eta**2)
@ -184,7 +184,7 @@ subroutine UGF2_reg_self_energy(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,eHF,eG
eps = eGF2(p,2) + eHF(a,2) - eHF(i,2) - eHF(j,2)
num = ERI_bb(a,q,i,j)*ERI_bb(i,j,a,p) &
- ERI_bb(a,q,i,j)*ERI_bb(i,j,p,a)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,q,2) = SigC(p,q,2) + num*eps/(eps**2 + eta**2)
@ -202,7 +202,7 @@ subroutine UGF2_reg_self_energy(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,eHF,eG
eps = eGF2(p,2) + eHF(a,1) - eHF(i,1) - eHF(j,2)
num = ERI_ab(a,q,i,j)*ERI_ab(i,j,a,p)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,q,2) = SigC(p,q,2) + num*eps/(eps**2 + eta**2)

View File

@ -61,7 +61,7 @@ subroutine UGF2_reg_self_energy_diag(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,e
eps = eGF2(p,1) + eHF(i,1) - eHF(a,1) - eHF(b,1)
num = ERI_aa(i,p,a,b)*ERI_aa(a,b,i,p) &
- ERI_aa(i,p,a,b)*ERI_aa(a,b,p,i)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,1) = SigC(p,1) + num*eps/(eps**2 + eta**2)
@ -79,7 +79,7 @@ subroutine UGF2_reg_self_energy_diag(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,e
eps = eGF2(p,1) + eHF(i,2) - eHF(a,2) - eHF(b,1)
num = ERI_ab(p,i,b,a)*ERI_ab(b,a,p,i)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,1) = SigC(p,1) + num*eps/(eps**2 + eta**2)
@ -98,7 +98,7 @@ subroutine UGF2_reg_self_energy_diag(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,e
eps = eGF2(p,1) + eHF(a,1) - eHF(i,1) - eHF(j,1)
num = ERI_aa(a,p,i,j)*ERI_aa(i,j,a,p) &
- ERI_aa(a,p,i,j)*ERI_aa(i,j,p,a)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,1) = SigC(p,1) + num*eps/(eps**2 + eta**2)
@ -116,7 +116,7 @@ subroutine UGF2_reg_self_energy_diag(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,e
eps = eGF2(p,1) + eHF(a,2) - eHF(i,2) - eHF(j,1)
num = ERI_ab(p,a,j,i)*ERI_ab(j,i,p,a)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,1) = SigC(p,1) + num*eps/(eps**2 + eta**2)
@ -143,7 +143,7 @@ subroutine UGF2_reg_self_energy_diag(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,e
eps = eGF2(p,2) + eHF(i,2) - eHF(a,2) - eHF(b,2)
num = ERI_bb(i,p,a,b)*ERI_bb(a,b,i,p) &
- ERI_bb(i,p,a,b)*ERI_bb(a,b,p,i)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,2) = SigC(p,2) + num*eps/(eps**2 + eta**2)
@ -161,7 +161,7 @@ subroutine UGF2_reg_self_energy_diag(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,e
eps = eGF2(p,2) + eHF(i,1) - eHF(a,1) - eHF(b,2)
num = ERI_ab(i,p,a,b)*ERI_ab(a,b,i,p)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,2) = SigC(p,2) + num*eps/(eps**2 + eta**2)
@ -180,7 +180,7 @@ subroutine UGF2_reg_self_energy_diag(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,e
eps = eGF2(p,2) + eHF(a,2) - eHF(i,2) - eHF(j,2)
num = ERI_bb(a,p,i,j)*ERI_bb(i,j,a,p) &
- ERI_bb(a,p,i,j)*ERI_bb(i,j,p,a)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,2) = SigC(p,2) + num*eps/(eps**2 + eta**2)
@ -198,7 +198,7 @@ subroutine UGF2_reg_self_energy_diag(nBas,nC,nO,nV,nR,eta,ERI_aa,ERI_ab,ERI_bb,e
eps = eGF2(p,2) + eHF(a,1) - eHF(i,1) - eHF(j,2)
num = ERI_ab(a,p,i,j)*ERI_ab(i,j,a,p)
kappa = exp(-2d0*eps**2*s)
kappa = 1d0 - exp(-2d0*eps**2*s)
num = kappa*num
SigC(p,2) = SigC(p,2) + num*eps/(eps**2 + eta**2)

View File

@ -1,4 +1,4 @@
subroutine print_G0F2(nBas,nO,eHF,Sig,eGF2,Z,ENuc,ERHF,Ec)
subroutine print_G0F2(nBas,nO,eHF,Sig,eGF,Z,ENuc,ERHF,Ec)
! Print one-electron energies and other stuff for G0F2
@ -9,7 +9,7 @@ subroutine print_G0F2(nBas,nO,eHF,Sig,eGF2,Z,ENuc,ERHF,Ec)
integer,intent(in) :: nO
double precision,intent(in) :: eHF(nBas)
double precision,intent(in) :: Sig(nBas)
double precision,intent(in) :: eGF2(nBas)
double precision,intent(in) :: eGF(nBas)
double precision,intent(in) :: Z(nBas)
double precision,intent(in) :: ENuc
double precision,intent(in) :: ERHF
@ -24,29 +24,29 @@ subroutine print_G0F2(nBas,nO,eHF,Sig,eGF2,Z,ENuc,ERHF,Ec)
HOMO = nO
LUMO = HOMO + 1
Gap = eGF2(LUMO) - eGF2(HOMO)
Gap = eGF(LUMO) - eGF(HOMO)
! Dump results
write(*,*)'--------------------------------------------------------------------------'
write(*,*)' Frequency-dependent G0F2 calculation'
write(*,*)'--------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A10,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sigma (eV)','|','e_G0F2 (eV)','|','Z','|'
write(*,*)'--------------------------------------------------------------------------'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)' One-shot G0F2 calculation'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sig_GF2 (eV)','|','Z','|','e_GF2 (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do p=1,nBas
write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F10.6,1X,A1,1X)') &
'|',p,'|',eHF(p)*HaToeV,'|',Sig(p)*HaToeV,'|',eGF2(p)*HaToeV,'|',Z(p),'|'
write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') &
'|',p,'|',eHF(p)*HaToeV,'|',Sig(p)*HaToeV,'|',Z(p),'|',eGF(p)*HaToeV,'|'
enddo
write(*,*)'--------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6)') 'G0F2 HOMO energy (eV):',eGF2(HOMO)*HaToeV
write(*,'(2X,A30,F15.6)') 'G0F2 LUMO energy (eV):',eGF2(LUMO)*HaToeV
write(*,'(2X,A30,F15.6)') 'G0F2 HOMO-LUMO gap (eV):',Gap*HaToeV
write(*,*)'--------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'G0F2 total energy :',ENuc + ERHF + Ec,' au'
write(*,'(2X,A30,F15.6,A3)') 'G0F2 correlation energy:',Ec,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') 'G0F2 HOMO energy =',eGF(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0F2 LUMO energy =',eGF(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0F2 HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') 'G0F2 total energy =',ENuc + ERHF + Ec,' au'
write(*,'(2X,A60,F15.6,A3)') 'G0F2 correlation energy =',Ec,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)

View File

@ -1,4 +1,4 @@
subroutine print_evGF2(nBas,nO,nSCF,Conv,eHF,Sig,Z,eGF2,ENuc,ERHF,Ec)
subroutine print_evGF2(nBas,nO,nSCF,Conv,eHF,Sig,Z,eGF,ENuc,ERHF,Ec)
! Print one-electron energies and other stuff for G0F2
@ -11,7 +11,7 @@ subroutine print_evGF2(nBas,nO,nSCF,Conv,eHF,Sig,Z,eGF2,ENuc,ERHF,Ec)
double precision,intent(in) :: Conv
double precision,intent(in) :: eHF(nBas)
double precision,intent(in) :: Sig(nBas)
double precision,intent(in) :: eGF2(nBas)
double precision,intent(in) :: eGF(nBas)
double precision,intent(in) :: Z(nBas)
double precision,intent(in) :: ENuc
double precision,intent(in) :: ERHF
@ -26,34 +26,35 @@ subroutine print_evGF2(nBas,nO,nSCF,Conv,eHF,Sig,Z,eGF2,ENuc,ERHF,Ec)
HOMO = nO
LUMO = HOMO + 1
Gap = eGF2(LUMO) - eGF2(HOMO)
Gap = eGF(LUMO) - eGF(HOMO)
! Dump results
write(*,*)'--------------------------------------------------------------------------'
write(*,*)' Frequency-dependent evGF2 calculation'
write(*,*)'--------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A10,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sigma (eV)','|','e_evGF2 (eV)','|','Z','|'
write(*,*)'--------------------------------------------------------------------------'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)' Self-consistent evGF2 calculation'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sig_GF2 (eV)','|','Z','|','e_GF2 (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do p=1,nBas
write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F10.6,1X,A1,1X)') &
'|',p,'|',eHF(p)*HaToeV,'|',Sig(p)*HaToeV,'|',eGF2(p)*HaToeV,'|',Z(p),'|'
write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') &
'|',p,'|',eHF(p)*HaToeV,'|',Sig(p)*HaToeV,'|',Z(p),'|',eGF(p)*HaToeV,'|'
enddo
write(*,*)'-------------------------------------------------------------'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A10,I3)') 'Iteration ',nSCF
write(*,'(2X,A14,F15.5)')'Convergence = ',Conv
write(*,*)'--------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6)') 'evGF2 HOMO energy (eV):',eGF2(HOMO)*HaToeV
write(*,'(2X,A30,F15.6)') 'evGF2 LUMO energy (eV):',eGF2(LUMO)*HaToeV
write(*,'(2X,A30,F15.6)') 'evGF2 HOMO-LUMO gap (eV):',Gap*HaToeV
write(*,*)'--------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'evGF2 total energy :',ENuc + ERHF + Ec,' au'
write(*,'(2X,A30,F15.6,A3)') 'evGF2 correlation energy:',Ec,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') 'evGF2 HOMO energy =',eGF(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGF2 LUMO energy =',eGF(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGF2 HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') 'evGF2 total energy =',ENuc + ERHF + Ec,' au'
write(*,'(2X,A60,F15.6,A3)') 'evGF2 correlation energy =',Ec,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)
end subroutine

View File

@ -1,4 +1,4 @@
subroutine print_qsGF2(nBas,nO,nSCF,Conv,thresh,eHF,eGF2,c,SigC,Z,ENuc,ET,EV,EJ,Ex,Ec,EqsGF2,dipole)
subroutine print_qsGF2(nBas,nO,nSCF,Conv,thresh,eHF,eGF,c,SigC,Z,ENuc,ET,EV,EJ,Ex,Ec,EqsGF,dipole)
! Print one-electron energies and other stuff for qsGF2
@ -14,7 +14,7 @@ subroutine print_qsGF2(nBas,nO,nSCF,Conv,thresh,eHF,eGF2,c,SigC,Z,ENuc,ET,EV,EJ,
double precision,intent(in) :: Conv
double precision,intent(in) :: thresh
double precision,intent(in) :: eHF(nBas)
double precision,intent(in) :: eGF2(nBas)
double precision,intent(in) :: eGF(nBas)
double precision,intent(in) :: c(nBas)
double precision,intent(in) :: SigC(nBas,nBas)
double precision,intent(in) :: Z(nBas)
@ -23,7 +23,7 @@ subroutine print_qsGF2(nBas,nO,nSCF,Conv,thresh,eHF,eGF2,c,SigC,Z,ENuc,ET,EV,EJ,
double precision,intent(in) :: EJ
double precision,intent(in) :: Ex
double precision,intent(in) :: Ec
double precision,intent(in) :: EqsGF2
double precision,intent(in) :: EqsGF
double precision,intent(in) :: dipole(ncart)
! Local variables
@ -38,7 +38,7 @@ subroutine print_qsGF2(nBas,nO,nSCF,Conv,thresh,eHF,eGF2,c,SigC,Z,ENuc,ET,EV,EJ,
HOMO = nO
LUMO = HOMO + 1
Gap = eGF2(LUMO)-eGF2(HOMO)
Gap = eGF(LUMO)-eGF(HOMO)
! Dump results
@ -55,21 +55,21 @@ subroutine print_qsGF2(nBas,nO,nSCF,Conv,thresh,eHF,eGF2,c,SigC,Z,ENuc,ET,EV,EJ,
do q=1,nBas
write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') &
'|',q,'|',eHF(q)*HaToeV,'|',SigC(q,q)*HaToeV,'|',Z(q),'|',eGF2(q)*HaToeV,'|'
'|',q,'|',eHF(q)*HaToeV,'|',SigC(q,q)*HaToeV,'|',Z(q),'|',eGF(q)*HaToeV,'|'
enddo
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A10,I3)') 'Iteration ',nSCF
write(*,'(2X,A14,F15.5)')'Convergence = ',Conv
write(*,*)'-------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'qsGF2 HOMO energy:',eGF2(HOMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'qsGF2 LUMO energy:',eGF2(LUMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'qsGF2 HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') ' qsGF2 total energy:',ENuc + EqsGF2,' au'
write(*,'(2X,A30,F15.6,A3)') ' qsGF2 exchange energy:',Ex,' au'
write(*,'(2X,A30,F15.6,A3)') ' qsGF2 correlation energy:',Ec,' au'
write(*,*)'-------------------------------------------'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') 'qsGF2 HOMO energy =',eGF(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'qsGF2 LUMO energy =',eGF(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'qsGF2 HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') ' qsGF2 total energy =',ENuc + EqsGF,' au'
write(*,'(2X,A60,F15.6,A3)') ' qsGF2 exchange energy =',Ex,' au'
write(*,'(2X,A60,F15.6,A3)') ' qsGF2 correlation energy =',Ec,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)
! Dump results for final iteration
@ -89,9 +89,9 @@ subroutine print_qsGF2(nBas,nO,nSCF,Conv,thresh,eHF,eGF2,c,SigC,Z,ENuc,ET,EV,EJ,
write(*,'(A32,1X,F16.10,A3)') ' Exchange energy: ',Ex,' au'
write(*,'(A32,1X,F16.10,A3)') ' Correlation energy: ',Ec,' au'
write(*,'(A50)') '---------------------------------------'
write(*,'(A32,1X,F16.10,A3)') ' Electronic energy: ',EqsGF2,' au'
write(*,'(A32,1X,F16.10,A3)') ' Electronic energy: ',EqsGF,' au'
write(*,'(A32,1X,F16.10,A3)') ' Nuclear repulsion: ',ENuc,' au'
write(*,'(A32,1X,F16.10,A3)') ' qsGF2 energy: ',ENuc + EqsGF2,' au'
write(*,'(A32,1X,F16.10,A3)') ' qsGF2 energy: ',ENuc + EqsGF,' au'
write(*,'(A50)') '---------------------------------------'
write(*,'(A35)') ' Dipole moment (Debye) '
write(*,'(10X,4A10)') 'X','Y','Z','Tot.'
@ -107,7 +107,7 @@ subroutine print_qsGF2(nBas,nO,nSCF,Conv,thresh,eHF,eGF2,c,SigC,Z,ENuc,ET,EV,EJ,
write(*,'(A50)') '---------------------------------------'
write(*,'(A32)') ' qsGF2 MO energies'
write(*,'(A50)') '---------------------------------------'
call matout(nBas,1,eGF2)
call matout(nBas,1,eGF)
write(*,*)
endif

View File

@ -56,8 +56,8 @@ subroutine G0T0eh(doACFDT,exchange_kernel,doXBS,dophBSE,dophBSE2,TDA_T,TDA,dBSE,
double precision,allocatable :: Om(:)
double precision,allocatable :: XpY(:,:)
double precision,allocatable :: XmY(:,:)
double precision,allocatable :: rhoL(:,:,:,:)
double precision,allocatable :: rhoR(:,:,:,:)
double precision,allocatable :: rhoL(:,:,:)
double precision,allocatable :: rhoR(:,:,:)
double precision,allocatable :: eGT(:)
@ -99,7 +99,7 @@ subroutine G0T0eh(doACFDT,exchange_kernel,doXBS,dophBSE,dophBSE2,TDA_T,TDA,dBSE,
! Memory allocation
allocate(Aph(nS,nS),Bph(nS,nS),Sig(nBas),Z(nBas),Om(nS),XpY(nS,nS),XmY(nS,nS), &
rhoL(nBas,nBas,nS,2),rhoR(nBas,nBas,nS,2),eGT(nBas))
rhoL(nBas,nBas,nS),rhoR(nBas,nBas,nS),eGT(nBas))
!---------------------------------
! Compute (triplet) RPA screening
@ -124,7 +124,7 @@ subroutine G0T0eh(doACFDT,exchange_kernel,doXBS,dophBSE,dophBSE2,TDA_T,TDA,dBSE,
! Compute GW self-energy !
!------------------------!
if(regularize) call GTeh_regularization(eta,nBas,nC,nO,nV,nR,nS,eHF,Om,rhoL,rhoR)
if(regularize) call GTeh_regularization(nBas,nC,nO,nV,nR,nS,eHF,Om,rhoL,rhoR)
call GTeh_self_energy_diag(eta,nBas,nC,nO,nV,nR,nS,eHF,Om,rhoL,rhoR,EcGM,Sig,Z)

View File

@ -154,8 +154,8 @@ subroutine G0T0pp(doACFDT,exchange_kernel,doXBS,dophBSE,TDA_T,TDA,dBSE,dTDA,dopp
!----------------------------------------------
if(regularize) then
call GTpp_regularization(eta,nBas,nC,nO,nV,nR,nOOs,nVVs,eHF,Om1s,rho1s,Om2s,rho2s)
call GTpp_regularization(eta,nBas,nC,nO,nV,nR,nOOt,nVVt,eHF,Om1t,rho1t,Om2t,rho2t)
call GTpp_regularization(nBas,nC,nO,nV,nR,nOOs,nVVs,eHF,Om1s,rho1s,Om2s,rho2s)
call GTpp_regularization(nBas,nC,nO,nV,nR,nOOt,nVVt,eHF,Om1t,rho1t,Om2t,rho2t)
end if
call GTpp_self_energy_diag(eta,nBas,nC,nO,nV,nR,nOOs,nVVs,nOOt,nVVt,eHF,Om1s,rho1s,Om2s,rho2s, &

View File

@ -14,8 +14,8 @@ subroutine GTeh_QP_graph(eta,nBas,nC,nO,nV,nR,nS,eHF,Om,rhoL,rhoR,eGTlin,eGT,Z)
double precision,intent(in) :: eta
double precision,intent(in) :: eHF(nBas)
double precision,intent(in) :: Om(nS)
double precision,intent(in) :: rhoL(nBas,nBas,nS,2)
double precision,intent(in) :: rhoR(nBas,nBas,nS,2)
double precision,intent(in) :: rhoL(nBas,nBas,nS)
double precision,intent(in) :: rhoR(nBas,nBas,nS)
double precision,intent(in) :: eGTlin(nBas)

View File

@ -18,8 +18,8 @@ double precision function GTeh_SigC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR)
integer,intent(in) :: nS
double precision,intent(in) :: e(nBas)
double precision,intent(in) :: Om(nS)
double precision,intent(in) :: rhoL(nBas,nBas,nS,2)
double precision,intent(in) :: rhoR(nBas,nBas,nS,2)
double precision,intent(in) :: rhoL(nBas,nBas,nS)
double precision,intent(in) :: rhoR(nBas,nBas,nS)
! Local variables
@ -35,7 +35,7 @@ double precision function GTeh_SigC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR)
do i=nC+1,nO
do m=1,nS
eps = w - e(i) + Om(m)
num = rhoL(i,p,m,1)*rhoR(i,p,m,1)
num = rhoL(i,p,m)*rhoR(i,p,m)
GTeh_SigC = GTeh_SigC + num*eps/(eps**2 + eta**2)
enddo
enddo
@ -45,7 +45,7 @@ double precision function GTeh_SigC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR)
do a=nO+1,nBas-nR
do m=1,nS
eps = w - e(a) - Om(m)
num = rhoL(p,a,m,1)*rhoR(p,a,m,1)
num = rhoL(p,a,m)*rhoR(p,a,m)
GTeh_SigC = GTeh_SigC + num*eps/(eps**2 + eta**2)
enddo
enddo

View File

@ -18,8 +18,8 @@ double precision function GTeh_dSigC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR)
integer,intent(in) :: nS
double precision,intent(in) :: e(nBas)
double precision,intent(in) :: Om(nS)
double precision,intent(in) :: rhoL(nBas,nBas,nS,2)
double precision,intent(in) :: rhoR(nBas,nBas,nS,2)
double precision,intent(in) :: rhoL(nBas,nBas,nS)
double precision,intent(in) :: rhoR(nBas,nBas,nS)
! Local variables
@ -35,7 +35,7 @@ double precision function GTeh_dSigC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR)
do i=nC+1,nO
do m=1,nS
eps = w - e(i) + Om(m)
num = rhoL(i,p,m,1)*rhoR(i,p,m,1)
num = rhoL(i,p,m)*rhoR(i,p,m)
GTeh_dSigC = GTeh_dSigC - num*(eps**2 - eta**2)/(eps**2 + eta**2)**2
enddo
enddo
@ -45,7 +45,7 @@ double precision function GTeh_dSigC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR)
do a=nO+1,nBas-nR
do m=1,nS
eps = w - e(a) - Om(m)
num = rhoL(p,a,m,1)*rhoR(p,a,m,1)
num = rhoL(p,a,m)*rhoR(p,a,m)
GTeh_dSigC = GTeh_dSigC - num*(eps**2 - eta**2)/(eps**2 + eta**2)**2
enddo
enddo

View File

@ -18,13 +18,13 @@ subroutine GTeh_excitation_density(nBas,nC,nO,nR,nS,ERI,XpY,XmY,rhoL,rhoR)
! Output variables
double precision,intent(out) :: rhoL(nBas,nBas,nS,2)
double precision,intent(out) :: rhoR(nBas,nBas,nS,2)
double precision,intent(out) :: rhoL(nBas,nBas,nS)
double precision,intent(out) :: rhoR(nBas,nBas,nS)
! Initialization
rhoL(:,:,:,:) = 0d0
rhoR(:,:,:,:) = 0d0
rhoL(:,:,:) = 0d0
rhoR(:,:,:) = 0d0
allocate(X(nS,nS),Y(nS,nS))
@ -50,13 +50,13 @@ subroutine GTeh_excitation_density(nBas,nC,nO,nR,nS,ERI,XpY,XmY,rhoL,rhoR)
jb = jb + 1
do m=1,nS
rhoL(p,q,m,1) = rhoL(p,q,m,1) + ERI(p,j,b,q)*X(jb,m) + ERI(p,b,j,q)*Y(jb,m)
rhoL(p,q,m,2) = rhoL(p,q,m,2) + ERI(p,j,b,q)*Y(jb,m) + ERI(p,b,j,q)*X(jb,m)
rhoL(p,q,m) = rhoL(p,q,m) + ERI(p,j,b,q)*X(jb,m) + ERI(p,b,j,q)*Y(jb,m)
! rhoL(p,q,m,2) = rhoL(p,q,m,2) + ERI(p,j,b,q)*Y(jb,m) + ERI(p,b,j,q)*X(jb,m)
rhoR(p,q,m,1) = rhoR(p,q,m,1) &
rhoR(p,q,m) = rhoR(p,q,m) &
+ (2d0*ERI(p,j,b,q) - ERI(p,j,q,b))*X(jb,m) + (2d0*ERI(p,b,j,q) - ERI(p,b,q,j))*Y(jb,m)
rhoR(p,q,m,2) = rhoR(p,q,m,2) &
+ (2d0*ERI(p,j,b,q) - ERI(p,j,q,b))*Y(jb,m) + (2d0*ERI(p,b,j,q) - ERI(p,b,q,j))*X(jb,m)
! rhoR(p,q,m,2) = rhoR(p,q,m,2) &
! + (2d0*ERI(p,j,b,q) - ERI(p,j,q,b))*Y(jb,m) + (2d0*ERI(p,b,j,q) - ERI(p,b,q,j))*X(jb,m)
enddo
enddo

View File

@ -1,4 +1,4 @@
subroutine GTeh_regularization(nBas,nC,nO,nR,nS,e,Om,rhoL,rhoR)
subroutine GTeh_regularization(nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR)
! Regularize GTeh excitation densities via SRG
@ -9,6 +9,7 @@ subroutine GTeh_regularization(nBas,nC,nO,nR,nS,e,Om,rhoL,rhoR)
integer,intent(in) :: nBas
integer,intent(in) :: nC
integer,intent(in) :: nO
integer,intent(in) :: nV
integer,intent(in) :: nR
integer,intent(in) :: nS
integer,intent(in) :: e(nBas)
@ -37,14 +38,14 @@ subroutine GTeh_regularization(nBas,nC,nO,nR,nS,e,Om,rhoL,rhoR)
do i=nC+1,nO
Dpim = e(p) - e(i) + Om(m)
kappa = exp(-Dpim*Dpim*s)
kappa = 1d0 - exp(-Dpim*Dpim*s)
rhoL(i,p,m) = kappa*rhoL(i,p,m)
rhoR(i,p,m) = kappa*rhoR(i,p,m)
enddo
do a=nO+1,nBas-nR
Dpam = e(p) - e(a) - Om(m)
kappa = exp(-Dpam*Dpam*s)
kappa = 1d0 - exp(-Dpam*Dpam*s)
rhoL(p,a,m) = kappa*rhoL(p,a,m)
rhoR(p,a,m) = kappa*rhoR(p,a,m)
enddo

View File

@ -16,8 +16,8 @@ subroutine GTeh_self_energy_diag(eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR,EcGM,Sig
integer,intent(in) :: nS
double precision,intent(in) :: e(nBas)
double precision,intent(in) :: Om(nS)
double precision,intent(in) :: rhoL(nBas,nBas,nS,2)
double precision,intent(in) :: rhoR(nBas,nBas,nS,2)
double precision,intent(in) :: rhoL(nBas,nBas,nS)
double precision,intent(in) :: rhoR(nBas,nBas,nS)
! Local variables
@ -46,7 +46,7 @@ subroutine GTeh_self_energy_diag(eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR,EcGM,Sig
do m=1,nS
eps = e(p) - e(i) + Om(m)
num = rhoL(i,p,m,1)*rhoR(i,p,m,1)
num = rhoL(i,p,m)*rhoR(i,p,m)
Sig(p) = Sig(p) + num*eps/(eps**2 + eta**2)
Z(p) = Z(p) - num*(eps**2 - eta**2)/(eps**2 + eta**2)**2
@ -61,7 +61,7 @@ subroutine GTeh_self_energy_diag(eta,nBas,nC,nO,nV,nR,nS,e,Om,rhoL,rhoR,EcGM,Sig
do m=1,nS
eps = e(p) - e(a) - Om(m)
num = rhoL(p,a,m,1)*rhoR(p,a,m,1)
num = rhoL(p,a,m)*rhoR(p,a,m)
Sig(p) = Sig(p) + num*eps/(eps**2 + eta**2)
Z(p) = Z(p) - num*(eps**2 - eta**2)/(eps**2 + eta**2)**2

View File

@ -1,4 +1,4 @@
subroutine GTpp_regularization(nBas,nC,nO,nR,nOO,nVV,e,Om1,rho1,Om2,rho2)
subroutine GTpp_regularization(nBas,nC,nO,nV,nR,nOO,nVV,e,Om1,rho1,Om2,rho2)
! Regularize GTpp excitation densities via SRG
@ -9,6 +9,7 @@ subroutine GTpp_regularization(nBas,nC,nO,nR,nOO,nVV,e,Om1,rho1,Om2,rho2)
integer,intent(in) :: nBas
integer,intent(in) :: nC
integer,intent(in) :: nO
integer,intent(in) :: nV
integer,intent(in) :: nR
integer,intent(in) :: nOO
integer,intent(in) :: nVV

View File

@ -130,7 +130,7 @@ subroutine evGTeh(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,d
! Compute correlation part of the self-energy
if(regularize) call GTeh_regularization(eta,nBas,nC,nO,nV,nR,nS,eGT,Om,rhoL,rhoR)
if(regularize) call GTeh_regularization(nBas,nC,nO,nV,nR,nS,eGT,Om,rhoL,rhoR)
call GTeh_self_energy_diag(eta,nBas,nC,nO,nV,nR,nS,eGT,Om,rhoL,rhoR,EcGM,Sig,Z)

View File

@ -30,7 +30,7 @@ subroutine print_G0T0eh(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGT,EcRPA,EcGM)
write(*,*)' One-shot G0T0eh calculation'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sig_c (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GTeh (eV)','|','Z','|','e_GTeh (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do p=1,nBas
@ -39,14 +39,14 @@ subroutine print_G0T0eh(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGT,EcRPA,EcGM)
enddo
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'G0T0eh HOMO energy:',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'G0T0eh LUMO energy:',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'G0T0eh HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0T0eh HOMO energy:',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0T0eh LUMO energy:',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0T0eh HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'RPA@G0T0eh total energy :',ENuc + ERHF + EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'RPA@G0T0eh correlation energy:',EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'GM@G0T0eh total energy :',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A30,F15.6,A3)') 'GM@G0T0eh correlation energy:',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@G0T0eh total energy :',ENuc + ERHF + EcRPA,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@G0T0eh correlation energy:',EcRPA,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@G0T0eh total energy :',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@G0T0eh correlation energy:',EcGM,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)

View File

@ -36,10 +36,10 @@ subroutine print_G0T0pp(nBas,nO,eHF,ENuc,ERHF,SigT,Z,eGT,EcGM,EcRPA)
! Dump results
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)' One-shot G0T0 calculation (T-matrix self-energy) '
write(*,*)' One-shot G0T0pp calculation '
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sigma_T (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GTpp (eV)','|','Z','|','e_GTpp (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do p=1,nBas
@ -48,16 +48,16 @@ subroutine print_G0T0pp(nBas,nO,eHF,ENuc,ERHF,SigT,Z,eGT,EcGM,EcRPA)
enddo
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A50,F15.6,A3)') 'G0T0 HOMO energy (eV) =',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A50,F15.6,A3)') 'G0T0 LUMO energy (eV) =',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A50,F15.6,A3)') 'G0T0 HOMO-LUMO gap (eV) =',Gap*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0T0pp HOMO energy (eV) =',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0T0pp LUMO energy (eV) =',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0T0pp HOMO-LUMO gap (eV) =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A50,F20.10,A3)') ' Tr@ppRPA@G0T0 correlation energy (singlet) =',EcRPA(1),' au'
write(*,'(2X,A50,F20.10,A3)') ' Tr@ppRPA@G0T0 correlation energy (triplet) =',EcRPA(2),' au'
write(*,'(2X,A50,F20.10,A3)') ' Tr@ppRPA@G0T0 correlation energy =',EcRPA(1) + EcRPA(2),' au'
write(*,'(2X,A50,F20.10,A3)') ' Tr@ppRPA@G0T0 total energy =',ENuc + ERHF + EcRPA(1) + EcRPA(2),' au'
write(*,'(2X,A50,F20.10,A3)') ' GM@G0T0 correlation energy =',EcGM,' au'
write(*,'(2X,A50,F20.10,A3)') ' GM@G0T0 total energy =',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@G0T0pp correlation energy (singlet) =',EcRPA(1),' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@G0T0pp correlation energy (triplet) =',EcRPA(2),' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@G0T0pp correlation energy =',EcRPA(1) + EcRPA(2),' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@G0T0pp total energy =',ENuc + ERHF + EcRPA(1) + EcRPA(2),' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@G0T0pp correlation energy =',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@G0T0pp total energy =',ENuc + ERHF + EcGM,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)

View File

@ -35,7 +35,7 @@ subroutine print_evGTeh(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGT,EcRPA,EcGM)
endif
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sigma_c (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GTeh (eV)','|','Z','|','e_GTeh (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do p=1,nBas
@ -47,14 +47,14 @@ subroutine print_evGTeh(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGT,EcRPA,EcGM)
write(*,'(2X,A10,I3)') 'Iteration ',nSCF
write(*,'(2X,A14,F15.5)')'Convergence = ',Conv
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'evGTeh HOMO energy:',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'evGTeh LUMO energy:',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'evGTeh HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGTeh HOMO energy =',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGTeh LUMO energy =',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGTeh HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'RPA@evGTeh total energy :',ENuc + ERHF + EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'RPA@evGTeh correlation energy:',EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'GM@evGTeh total energy :',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A30,F15.6,A3)') 'GM@evGTeh correlation energy:',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@evGTeh total energy =',ENuc + ERHF + EcRPA,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@evGTeh correlation energy =',EcRPA,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@evGTeh total energy =',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@evGTeh correlation energy =',EcGM,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)

View File

@ -18,7 +18,7 @@ subroutine print_evGTpp(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigT,Z,eGT,EcGM,EcRPA)
double precision,intent(in) :: Z(nBas)
double precision,intent(in) :: eGT(nBas)
integer :: x,HOMO,LUMO
integer :: p,HOMO,LUMO
double precision :: Gap
! HOMO and LUMO
@ -31,34 +31,34 @@ subroutine print_evGTpp(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigT,Z,eGT,EcGM,EcRPA)
write(*,*)'-------------------------------------------------------------------------------'
if(nSCF < 10) then
write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent evG',nSCF,'T',nSCF,' calculation'
write(*,'(1X,A21,I1,A3,I1,A12)')' Self-consistent evG',nSCF,'Tpp',nSCF,' calculation'
else
write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent evG',nSCF,'T',nSCF,' calculation'
write(*,'(1X,A21,I2,A3,I2,A12)')' Self-consistent evG',nSCF,'Tpp',nSCF,' calculation'
endif
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sigma_T (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GTpp (eV)','|','Z','|','e_GTpp (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do x=1,nBas
do p=1,nBas
write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') &
'|',x,'|',eHF(x)*HaToeV,'|',SigT(x)*HaToeV,'|',Z(x),'|',eGT(x)*HaToeV,'|'
'|',p,'|',eHF(p)*HaToeV,'|',SigT(p)*HaToeV,'|',Z(p),'|',eGT(p)*HaToeV,'|'
enddo
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A10,I3)') 'Iteration ',nSCF
write(*,'(2X,A14,F15.5)')'Convergence = ',Conv
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6)') 'evGT HOMO energy (eV):',eGT(HOMO)*HaToeV
write(*,'(2X,A30,F15.6)') 'evGT LUMO energy (eV):',eGT(LUMO)*HaToeV
write(*,'(2X,A30,F15.6)') 'evGT HOMO-LUMO gap (eV):',Gap*HaToeV
write(*,'(2X,A60,F15.6,A3)') 'evGTpp HOMO energy =',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGTpp LUMO energy =',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGTpp HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A50,F20.10,A3)') ' Tr@ppRPA@G0T0 correlation energy (singlet) =',EcRPA(1),' au'
write(*,'(2X,A50,F20.10,A3)') ' Tr@ppRPA@G0T0 correlation energy (triplet) =',EcRPA(2),' au'
write(*,'(2X,A50,F20.10,A3)') ' Tr@ppRPA@G0T0 correlation energy =',EcRPA(1) + EcRPA(2),' au'
write(*,'(2X,A50,F20.10,A3)') ' Tr@ppRPA@G0T0 total energy =',ENuc + ERHF + EcRPA(1) + EcRPA(2),' au'
write(*,'(2X,A50,F20.10,A3)') ' GM@G0T0 correlation energy =',EcGM,' au'
write(*,'(2X,A50,F20.10,A3)') ' GM@G0T0 total energy =',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@evGTpp correlation energy (singlet) =',EcRPA(1),' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@evGTpp correlation energy (triplet) =',EcRPA(2),' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@evGTpp correlation energy =',EcRPA(1) + EcRPA(2),' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@evGTpp total energy =',ENuc + ERHF + EcRPA(1) + EcRPA(2),' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@evGTpp correlation energy =',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@evGTpp total energy =',ENuc + ERHF + EcGM,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)

View File

@ -54,7 +54,7 @@ subroutine print_qsGTeh(nBas,nO,nSCF,Conv,thresh,eHF,eGT,c,SigC,Z,ENuc,ET,EV,EJ,
endif
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sig_T (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GTeh (eV)','|','Z','|','e_GTeh (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do p=1,nBas
@ -65,16 +65,16 @@ subroutine print_qsGTeh(nBas,nO,nSCF,Conv,thresh,eHF,eGT,c,SigC,Z,ENuc,ET,EV,EJ,
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A10,I3)') 'Iteration ',nSCF
write(*,'(2X,A14,F15.5)')'Convergence = ',Conv
write(*,*)'-------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'qsGTeh HOMO energy:',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'qsGTeh LUMO energy:',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'qsGTeh HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') ' qsGTeh total energy:',ENuc + EqsGT,' au'
write(*,'(2X,A30,F15.6,A3)') ' qsGTeh exchange energy:',Ex,' au'
write(*,'(2X,A30,F15.6,A3)') ' GM@qsGTeh correlation energy:',EcGM,' au'
write(*,'(2X,A30,F15.6,A3)') 'ppRPA@qsGTeh correlation energy:',sum(EcRPA(:)),' au'
write(*,*)'-------------------------------------------'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') 'qsGTeh HOMO energy =',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'qsGTeh LUMO energy =',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'qsGTeh HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') ' qsGTeh total energy =',ENuc + EqsGT,' au'
write(*,'(2X,A60,F15.6,A3)') ' qsGTeh exchange energy =',Ex,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@qsGTeh correlation energy =',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@qsGTeh correlation energy =',sum(EcRPA(:)),' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)
! Dump results for final iteration

View File

@ -28,7 +28,7 @@ subroutine print_qsGTpp(nBas,nO,nSCF,Conv,thresh,eHF,eGT,c,SigC,Z,ENuc,ET,EV,EJ,
! Local variables
integer :: x,ixyz,HOMO,LUMO
integer :: p,ixyz,HOMO,LUMO
double precision :: Gap
double precision,external :: trace_matrix
@ -48,33 +48,33 @@ subroutine print_qsGTpp(nBas,nO,nSCF,Conv,thresh,eHF,eGT,c,SigC,Z,ENuc,ET,EV,EJ,
write(*,*)'-------------------------------------------------------------------------------'
if(nSCF < 10) then
write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent qsG',nSCF,'T',nSCF,' calculation'
write(*,'(1X,A21,I1,A3,I1,A12)')' Self-consistent qsG',nSCF,'Tpp',nSCF,' calculation'
else
write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent qsG',nSCF,'T',nSCF,' calculation'
write(*,'(1X,A21,I2,A3,I2,A12)')' Self-consistent qsG',nSCF,'Tpp',nSCF,' calculation'
endif
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sig_T (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GTpp (eV)','|','Z','|','e_GTpp (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do x=1,nBas
do p=1,nBas
write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') &
'|',x,'|',eHF(x)*HaToeV,'|',SigC(x,x)*HaToeV,'|',Z(x),'|',eGT(x)*HaToeV,'|'
'|',p,'|',eHF(p)*HaToeV,'|',SigC(p,p)*HaToeV,'|',Z(p),'|',eGT(p)*HaToeV,'|'
enddo
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A10,I3)') 'Iteration ',nSCF
write(*,'(2X,A14,F15.5)')'Convergence = ',Conv
write(*,*)'-------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'qsGT HOMO energy:',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'qsGT LUMO energy:',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'qsGT HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') ' qsGT total energy:',ENuc + EqsGT,' au'
write(*,'(2X,A30,F15.6,A3)') ' qsGT exchange energy:',Ex,' au'
write(*,'(2X,A30,F15.6,A3)') ' GM@qsGT correlation energy:',EcGM,' au'
write(*,'(2X,A30,F15.6,A3)') 'ppRPA@qsGT correlation energy:',sum(EcRPA(:)),' au'
write(*,*)'-------------------------------------------'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') 'qsGTpp HOMO energy =',eGT(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'qsGTpp LUMO energy =',eGT(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'qsGTpp HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') ' qsGTpp total energy =',ENuc + EqsGT,' au'
write(*,'(2X,A60,F15.6,A3)') ' qsGTpp exchange energy =',Ex,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@qsGTpp correlation energy =',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'ppRPA@qsGTpp correlation energy =',sum(EcRPA(:)),' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)
! Dump results for final iteration
@ -96,7 +96,7 @@ subroutine print_qsGTpp(nBas,nO,nSCF,Conv,thresh,eHF,eGT,c,SigC,Z,ENuc,ET,EV,EJ,
write(*,'(A50)') '---------------------------------------'
write(*,'(A32,1X,F16.10,A3)') ' Electronic energy: ',EqsGT,' au'
write(*,'(A32,1X,F16.10,A3)') ' Nuclear repulsion: ',ENuc,' au'
write(*,'(A32,1X,F16.10,A3)') ' qsGT energy: ',ENuc + EqsGT,' au'
write(*,'(A32,1X,F16.10,A3)') ' qsGTpp energy: ',ENuc + EqsGT,' au'
write(*,'(A50)') '---------------------------------------'
write(*,'(A35)') ' Dipole moment (Debye) '
write(*,'(10X,4A10)') 'X','Y','Z','Tot.'
@ -105,12 +105,12 @@ subroutine print_qsGTpp(nBas,nO,nSCF,Conv,thresh,eHF,eGT,c,SigC,Z,ENuc,ET,EV,EJ,
write(*,*)
write(*,'(A50)') '---------------------------------------'
write(*,'(A32)') ' qsGT MO coefficients'
write(*,'(A32)') ' qsGTpp MO coefficients'
write(*,'(A50)') '---------------------------------------'
call matout(nBas,nBas,c)
write(*,*)
write(*,'(A50)') '---------------------------------------'
write(*,'(A32)') ' qsGT MO energies'
write(*,'(A32)') ' qsGTpp MO energies'
write(*,'(A50)') '---------------------------------------'
call matout(nBas,1,eGT)
write(*,*)

View File

@ -183,7 +183,7 @@ subroutine qsGTeh(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,BSE,BSE2,
call GTeh_excitation_density(nBas,nC,nO,nR,nS,ERI_MO,XpY,XmY,rhoL,rhoR)
if(regularize) call GTeh_regularization(eta,nBas,nC,nO,nV,nR,nS,eGT,Om,rhoL,rhoR)
if(regularize) call GTeh_regularization(nBas,nC,nO,nV,nR,nS,eGT,Om,rhoL,rhoR)
call GTeh_self_energy(eta,nBas,nC,nO,nV,nR,nS,eGT,Om,rhoL,rhoR,EcGM,Sig,Z)

View File

@ -114,7 +114,7 @@ subroutine G0W0(doACFDT,exchange_kernel,doXBS,dophBSE,dophBSE2,TDA_W,TDA,dBSE,dT
! Compute GW self-energy !
!------------------------!
if(regularize) call GW_regularization(nBas,nC,nO,nR,nS,eHF,Om,rho)
if(regularize) call GW_regularization(nBas,nC,nO,nV,nR,nS,eHF,Om,rho)
call GW_self_energy_diag(eta,nBas,nC,nO,nV,nR,nS,eHF,Om,rho,EcGM,SigC,Z)

View File

@ -1,4 +1,4 @@
subroutine GW_regularization(nBas,nC,nO,nR,nS,e,Om,rho)
subroutine GW_regularization(nBas,nC,nO,nV,nR,nS,e,Om,rho)
! Regularize GW excitation densities via SRG
@ -9,6 +9,7 @@ subroutine GW_regularization(nBas,nC,nO,nR,nS,e,Om,rho)
integer,intent(in) :: nBas
integer,intent(in) :: nC
integer,intent(in) :: nO
integer,intent(in) :: nV
integer,intent(in) :: nR
integer,intent(in) :: nS
integer,intent(in) :: e(nBas)
@ -36,13 +37,13 @@ subroutine GW_regularization(nBas,nC,nO,nR,nS,e,Om,rho)
do i=nC+1,nO
Dpim = e(p) - e(i) + Om(m)
kappa = exp(-Dpim*Dpim*s)
kappa = 1d0 - exp(-Dpim*Dpim*s)
rho(p,i,m) = kappa*rho(p,i,m)
enddo
do a=nO+1,nBas-nR
Dpam = e(p) - e(a) - Om(m)
kappa = exp(-Dpam*Dpam*s)
kappa = 1d0 - exp(-Dpam*Dpam*s)
rho(p,a,m) = kappa*rho(p,a,m)
enddo

View File

@ -129,7 +129,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,dop
! Compute correlation part of the self-energy
if(regularize) call GW_regularization(nBas,nC,nO,nR,nS,eGW,Om,rho)
if(regularize) call GW_regularization(nBas,nC,nO,nV,nR,nS,eGW,Om,rho)
call GW_self_energy_diag(eta,nBas,nC,nO,nV,nR,nS,eGW,Om,rho,EcGM,SigC,Z)

View File

@ -30,7 +30,7 @@ subroutine print_G0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM)
write(*,*)' One-shot G0W0 calculation'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sig_c (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GW (eV)','|','Z','|','e_GW (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do p=1,nBas
@ -39,14 +39,14 @@ subroutine print_G0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM)
enddo
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'G0W0 HOMO energy:',eGW(HOMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'G0W0 LUMO energy:',eGW(LUMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'G0W0 HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0W0 HOMO energy =',eGW(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0W0 LUMO energy =',eGW(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'G0W0 HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'RPA@G0W0 total energy :',ENuc + ERHF + EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'RPA@G0W0 correlation energy:',EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'GM@G0W0 total energy :',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A30,F15.6,A3)') 'GM@G0W0 correlation energy:',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@G0W0 total energy =',ENuc + ERHF + EcRPA,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@G0W0 correlation energy =',EcRPA,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@G0W0 total energy =',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@G0W0 correlation energy =',EcGM,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)

View File

@ -58,15 +58,15 @@ subroutine print_UG0W0(nBas,nO,eHF,ENuc,EUHF,SigC,Z,eGW,EcRPA,EcGM)
write(*,*)'-------------------------------------------------------------------------------&
-------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'UG0W0 HOMO energy:',maxval(HOMO(:))*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'UG0W0 LUMO energy:',minval(LUMO(:))*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'UG0W0 HOMO-LUMO gap :',(minval(LUMO(:))-maxval(HOMO(:)))*HaToeV,' eV'
write(*,'(2X,A50,F15.6,A3)') 'UG0W0 HOMO energy:',maxval(HOMO(:))*HaToeV,' eV'
write(*,'(2X,A50,F15.6,A3)') 'UG0W0 LUMO energy:',minval(LUMO(:))*HaToeV,' eV'
write(*,'(2X,A50,F15.6,A3)') 'UG0W0 HOMO-LUMO gap :',(minval(LUMO(:))-maxval(HOMO(:)))*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------&
-------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'RPA@UG0W0 total energy :',ENuc + EUHF + EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'RPA@UG0W0 correlation energy:',EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') ' GM@UG0W0 total energy :',ENuc + EUHF + sum(EcGM(:)),' au'
write(*,'(2X,A30,F15.6,A3)') ' GM@UG0W0 correlation energy:',sum(EcGM(:)),' au'
write(*,'(2X,A50,F15.6,A3)') 'phRPA@UG0W0 total energy :',ENuc + EUHF + EcRPA,' au'
write(*,'(2X,A50,F15.6,A3)') 'phRPA@UG0W0 correlation energy:',EcRPA,' au'
write(*,'(2X,A50,F15.6,A3)') ' GM@UG0W0 total energy :',ENuc + EUHF + sum(EcGM(:)),' au'
write(*,'(2X,A50,F15.6,A3)') ' GM@UG0W0 correlation energy:',sum(EcGM(:)),' au'
write(*,*)'-------------------------------------------------------------------------------&
-------------------------------------------------'
write(*,*)

View File

@ -35,7 +35,7 @@ subroutine print_evGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM)
endif
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sigma_c (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GW (eV)','|','Z','|','e_GW (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do p=1,nBas
@ -47,14 +47,14 @@ subroutine print_evGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM)
write(*,'(2X,A10,I3)') 'Iteration ',nSCF
write(*,'(2X,A14,F15.5)')'Convergence = ',Conv
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'evGW HOMO energy:',eGW(HOMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'evGW LUMO energy:',eGW(LUMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'evGW HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGW HOMO energy =',eGW(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGW LUMO energy =',eGW(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'evGW HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'RPA@evGW total energy :',ENuc + ERHF + EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'RPA@evGW correlation energy:',EcRPA,' au'
write(*,'(2X,A30,F15.6,A3)') 'GM@evGW total energy :',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A30,F15.6,A3)') 'GM@evGW correlation energy:',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@evGW total energy =',ENuc + ERHF + EcRPA,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@evGW correlation energy =',EcRPA,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@evGW total energy =',ENuc + ERHF + EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@evGW correlation energy =',EcGM,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)

View File

@ -28,7 +28,7 @@ subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex
! Local variables
integer :: x,ixyz,HOMO,LUMO
integer :: p,ixyz,HOMO,LUMO
double precision :: Gap
double precision,external :: trace_matrix
@ -54,27 +54,27 @@ subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex
endif
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') &
'|','#','|','e_HF (eV)','|','Sig_c (eV)','|','Z','|','e_QP (eV)','|'
'|','#','|','e_HF (eV)','|','Sig_GW (eV)','|','Z','|','e_GW (eV)','|'
write(*,*)'-------------------------------------------------------------------------------'
do x=1,nBas
do p=1,nBas
write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') &
'|',x,'|',eHF(x)*HaToeV,'|',SigC(x,x)*HaToeV,'|',Z(x),'|',eGW(x)*HaToeV,'|'
'|',p,'|',eHF(p)*HaToeV,'|',SigC(p,p)*HaToeV,'|',Z(p),'|',eGW(p)*HaToeV,'|'
enddo
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A10,I3)') 'Iteration ',nSCF
write(*,'(2X,A14,F15.5)')'Convergence = ',Conv
write(*,*)'-------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') 'qsGW HOMO energy:',eGW(HOMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'qsGW LUMO energy:',eGW(LUMO)*HaToeV,' eV'
write(*,'(2X,A30,F15.6,A3)') 'qsGW HOMO-LUMO gap :',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------'
write(*,'(2X,A30,F15.6,A3)') ' qsGW total energy:',ENuc + EqsGW,' au'
write(*,'(2X,A30,F15.6,A3)') ' qsGW exchange energy:',Ex,' au'
write(*,'(2X,A30,F15.6,A3)') ' GM@qsGW correlation energy:',EcGM,' au'
write(*,'(2X,A30,F15.6,A3)') 'RPA@qsGW correlation energy:',EcRPA,' au'
write(*,*)'-------------------------------------------'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') 'qsGW HOMO energy =',eGW(HOMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'qsGW LUMO energy =',eGW(LUMO)*HaToeV,' eV'
write(*,'(2X,A60,F15.6,A3)') 'qsGW HOMO-LUMO gap =',Gap*HaToeV,' eV'
write(*,*)'-------------------------------------------------------------------------------'
write(*,'(2X,A60,F15.6,A3)') ' qsGW total energy =',ENuc + EqsGW,' au'
write(*,'(2X,A60,F15.6,A3)') ' qsGW exchange energy =',Ex,' au'
write(*,'(2X,A60,F15.6,A3)') ' GM@qsGW correlation energy =',EcGM,' au'
write(*,'(2X,A60,F15.6,A3)') 'phRPA@qsGW correlation energy =',EcRPA,' au'
write(*,*)'-------------------------------------------------------------------------------'
write(*,*)
! Dump results for final iteration

View File

@ -182,7 +182,7 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,dop
call GW_excitation_density(nBas,nC,nO,nR,nS,ERI_MO,XpY,rho)
if(regularize) call GW_regularization(nBas,nC,nO,nR,nS,eGW,Om,rho)
if(regularize) call GW_regularization(nBas,nC,nO,nV,nR,nS,eGW,Om,rho)
call GW_self_energy(eta,nBas,nC,nO,nV,nR,nS,eGW,Om,rho,EcGM,SigC,Z)

View File

@ -69,7 +69,7 @@ program QuAcK
double precision :: thresh_HF,level_shift
logical :: DIIS_HF,guess_type,ortho_type,mix
logical :: regMP
logical :: reg_MP
integer :: maxSCF_CC,max_diis_CC
double precision :: thresh_CC
@ -81,19 +81,19 @@ program QuAcK
logical :: spin_flip
logical :: TDA
integer :: maxSCF_GF,max_diis_GF,renormGF
integer :: maxSCF_GF,max_diis_GF,renorm_GF
double precision :: thresh_GF
logical :: DIIS_GF,linGF,regGF
logical :: DIIS_GF,lin_GF,reg_GF
double precision :: eta_GF
integer :: maxSCF_GW,max_diis_GW
double precision :: thresh_GW
logical :: DIIS_GW,TDA_W,linGW,regGW
logical :: DIIS_GW,TDA_W,lin_GW,reg_GW
double precision :: eta_GW
integer :: maxSCF_GT,max_diis_GT
double precision :: thresh_GT
logical :: DIIS_GT,TDA_T,linGT,regGT
logical :: DIIS_GT,TDA_T,lin_GT,reg_GT
double precision :: eta_GT
logical :: dophBSE,dophBSE2,doppBSE,dBSE,dTDA
@ -141,13 +141,13 @@ program QuAcK
!--------------------------!
call read_options(maxSCF_HF,thresh_HF,DIIS_HF,max_diis_HF,guess_type,ortho_type,mix,level_shift,dostab, &
regMP, &
reg_MP, &
maxSCF_CC,thresh_CC,DIIS_CC,max_diis_CC, &
TDA,singlet,triplet,spin_conserved,spin_flip, &
maxSCF_GF,thresh_GF,DIIS_GF,max_diis_GF,linGF,eta_GF,renormGF,regGF, &
maxSCF_GW,thresh_GW,DIIS_GW,max_diis_GW,linGW,eta_GW,regGW,TDA_W, &
maxSCF_GT,thresh_GT,DIIS_GT,max_diis_GT,linGT,eta_GT,regGT,TDA_T, &
doACFDT,exchange_kernel,doXBS, &
TDA,singlet,triplet,spin_conserved,spin_flip, &
maxSCF_GF,thresh_GF,DIIS_GF,max_diis_GF,lin_GF,eta_GF,renorm_GF,reg_GF, &
maxSCF_GW,thresh_GW,DIIS_GW,max_diis_GW,lin_GW,eta_GW,reg_GW,TDA_W, &
maxSCF_GT,thresh_GT,DIIS_GT,max_diis_GT,lin_GT,eta_GT,reg_GT,TDA_T, &
doACFDT,exchange_kernel,doXBS, &
dophBSE,dophBSE2,doppBSE,dBSE,dTDA)
!------------------------------------------------!
@ -344,7 +344,7 @@ program QuAcK
if(doMP) then
call wall_time(start_MP)
call MP(doMP2,doMP3,unrestricted,regMP,nBas,nC,nO,nV,nR,ERI_MO,ERI_MO_aaaa,ERI_MO_aabb,ERI_MO_bbbb,ENuc,EHF,epsHF)
call MP(doMP2,doMP3,unrestricted,reg_MP,nBas,nC,nO,nV,nR,ERI_MO,ERI_MO_aaaa,ERI_MO_aabb,ERI_MO_bbbb,ENuc,EHF,epsHF)
call wall_time(end_MP)
t_MP = end_MP - start_MP
@ -423,8 +423,8 @@ program QuAcK
if(doGF) then
call wall_time(start_GF)
call GF(doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,unrestricted,renormGF,maxSCF_GF,thresh_GF,max_diis_GF, &
dophBSE,doppBSE,TDA,dBSE,dTDA,singlet,triplet,spin_conserved,spin_flip,linGF,eta_GF,regGF, &
call GF(doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,unrestricted,renorm_GF,maxSCF_GF,thresh_GF,max_diis_GF, &
dophBSE,doppBSE,TDA,dBSE,dTDA,singlet,triplet,spin_conserved,spin_flip,lin_GF,eta_GF,reg_GF, &
nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EHF,S,X,T,V,Hc,ERI_AO,ERI_MO,ERI_MO_aaaa,ERI_MO_aabb,ERI_MO_bbbb, &
dipole_int_AO,dipole_int_MO,dipole_int_aa,dipole_int_bb,PHF,cHF,epsHF)
call wall_time(end_GF)
@ -446,7 +446,7 @@ program QuAcK
call wall_time(start_GW)
call GW(doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW,unrestricted,maxSCF_GW,thresh_GW,max_diis_GW,doACFDT, &
exchange_kernel,doXBS,dophBSE,dophBSE2,doppBSE,TDA_W,TDA,dBSE,dTDA,singlet,triplet,spin_conserved,spin_flip, &
linGW,eta_GW,regGW,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EHF,S,X,T,V,Hc, &
lin_GW,eta_GW,reg_GW,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EHF,S,X,T,V,Hc, &
ERI_AO,ERI_MO,ERI_MO_aaaa,ERI_MO_aabb,ERI_MO_bbbb,dipole_int_AO,dipole_int_MO,dipole_int_aa,dipole_int_bb, &
PHF,cHF,epsHF)
call wall_time(end_GW)
@ -468,7 +468,7 @@ program QuAcK
call wall_time(start_GT)
call GT(doG0T0pp,doevGTpp,doqsGTpp,doG0T0eh,doevGTeh,doqsGTeh,unrestricted,maxSCF_GT,thresh_GT,max_diis_GT,doACFDT, &
exchange_kernel,doXBS,dophBSE,dophBSE2,doppBSE,TDA_T,TDA,dBSE,dTDA,singlet,triplet,spin_conserved,spin_flip, &
linGT,eta_GT,regGT,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EHF,S,X,T,V,Hc, &
lin_GT,eta_GT,reg_GT,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EHF,S,X,T,V,Hc, &
ERI_AO,ERI_MO,ERI_MO_aaaa,ERI_MO_aabb,ERI_MO_bbbb,dipole_int_AO,dipole_int_MO,dipole_int_aa,dipole_int_bb, &
PHF,cHF,epsHF)
call wall_time(end_GT)

View File

@ -1,10 +1,10 @@
subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,max_diis_HF,guess_type,ortho_type,mix,level_shift,dostab, &
regMP, &
reg_MP, &
maxSCF_CC,thresh_CC,DIIS_CC,max_diis_CC, &
TDA,singlet,triplet,spin_conserved,spin_flip, &
maxSCF_GF,thresh_GF,DIIS_GF,max_diis_GF,linGF,eta_GF,renormGF,regGF, &
maxSCF_GW,thresh_GW,DIIS_GW,max_diis_GW,linGW,eta_GW,regGW,TDA_W, &
maxSCF_GT,thresh_GT,DIIS_GT,max_diis_GT,linGT,eta_GT,regGT,TDA_T, &
maxSCF_GF,thresh_GF,DIIS_GF,max_diis_GF,lin_GF,eta_GF,renorm_GF,reg_GF, &
maxSCF_GW,thresh_GW,DIIS_GW,max_diis_GW,lin_GW,eta_GW,reg_GW,TDA_W, &
maxSCF_GT,thresh_GT,DIIS_GT,max_diis_GT,lin_GT,eta_GT,reg_GT,TDA_T, &
doACFDT,exchange_kernel,doXBS, &
dophBSE,dophBSE2,doppBSE,dBSE,dTDA)
@ -24,7 +24,7 @@ subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,max_diis_HF,guess_type,ortho
double precision,intent(out) :: level_shift
logical,intent(out) :: dostab
logical,intent(out) :: regMP
logical,intent(out) :: reg_MP
integer,intent(out) :: maxSCF_CC
double precision,intent(out) :: thresh_CC
@ -41,28 +41,28 @@ subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,max_diis_HF,guess_type,ortho
double precision,intent(out) :: thresh_GF
logical,intent(out) :: DIIS_GF
integer,intent(out) :: max_diis_GF
logical,intent(out) :: linGF
integer,intent(out) :: renormGF
logical,intent(out) :: lin_GF
integer,intent(out) :: renorm_GF
double precision,intent(out) :: eta_GF
logical,intent(out) :: regGF
logical,intent(out) :: reg_GF
integer,intent(out) :: maxSCF_GW
double precision,intent(out) :: thresh_GW
logical,intent(out) :: DIIS_GW
integer,intent(out) :: max_diis_GW
logical,intent(out) :: TDA_W
logical,intent(out) :: linGW
logical,intent(out) :: lin_GW
double precision,intent(out) :: eta_GW
logical,intent(out) :: regGW
logical,intent(out) :: reg_GW
integer,intent(out) :: maxSCF_GT
double precision,intent(out) :: thresh_GT
logical,intent(out) :: DIIS_GT
integer,intent(out) :: max_diis_GT
logical,intent(out) :: TDA_T
logical,intent(out) :: linGT
logical,intent(out) :: lin_GT
double precision,intent(out) :: eta_GT
logical,intent(out) :: regGT
logical,intent(out) :: reg_GT
logical,intent(out) :: doACFDT
logical,intent(out) :: exchange_kernel
@ -105,11 +105,11 @@ subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,max_diis_HF,guess_type,ortho
! Read MPn options
regMP = .false.
reg_MP = .false.
read(1,*)
read(1,*) ans1
if(ans1 == 'T') regMP = .true.
if(ans1 == 'T') reg_MP = .true.
! Read CC options
@ -144,63 +144,61 @@ subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,max_diis_HF,guess_type,ortho
! Read GF options
maxSCF_GF = 64
thresh_GF = 1d-5
DIIS_GF = .false.
maxSCF_GF = 64
thresh_GF = 1d-5
DIIS_GF = .false.
max_diis_GF = 5
linGF = .false.
eta_GF = 0d0
renormGF = 0
regGF = .false.
lin_GF = .false.
eta_GF = 0d0
renorm_GF = 0
reg_GF = .false.
read(1,*)
read(1,*) maxSCF_GF,thresh_GF,ans1,max_diis_GF,ans2,eta_GF,renormGF,ans3
read(1,*) maxSCF_GF,thresh_GF,ans1,max_diis_GF,ans2,eta_GF,renorm_GF,ans3
if(ans1 == 'T') DIIS_GF = .true.
if(ans2 == 'T') linGF = .true.
if(ans3 == 'T') regGF = .true.
if(ans2 == 'T') lin_GF = .true.
if(ans3 == 'T') reg_GF = .true.
if(.not.DIIS_GF) max_diis_GF = 1
! Read GW options
maxSCF_GW = 64
thresh_GW = 1d-5
DIIS_GW = .false.
maxSCF_GW = 64
thresh_GW = 1d-5
DIIS_GW = .false.
max_diis_GW = 5
linGW = .false.
eta_GW = 0d0
regGW = .false.
TDA_W = .false.
lin_GW = .false.
eta_GW = 0d0
reg_GW = .false.
TDA_W = .false.
read(1,*)
read(1,*) maxSCF_GW,thresh_GW,ans1,max_diis_GW,ans2,eta_GW, &
ans3,ans4
read(1,*) maxSCF_GW,thresh_GW,ans1,max_diis_GW,ans2,eta_GW,ans3,ans4
if(ans1 == 'T') DIIS_GW = .true.
if(ans2 == 'T') linGW = .true.
if(ans2 == 'T') lin_GW = .true.
if(ans3 == 'T') TDA_W = .true.
if(ans4 == 'T') regGW = .true.
if(ans4 == 'T') reg_GW = .true.
if(.not.DIIS_GW) max_diis_GW = 1
! Read GT options
maxSCF_GT = 64
thresh_GT = 1d-5
DIIS_GT = .false.
maxSCF_GT = 64
thresh_GT = 1d-5
DIIS_GT = .false.
max_diis_GT = 5
linGT = .false.
eta_GT = 0d0
regGT = .false.
TDA_T = .false.
lin_GT = .false.
eta_GT = 0d0
reg_GT = .false.
TDA_T = .false.
read(1,*)
read(1,*) maxSCF_GT,thresh_GT,ans1,max_diis_GT,ans2,eta_GT, &
ans3,ans4
read(1,*) maxSCF_GT,thresh_GT,ans1,max_diis_GT,ans2,eta_GT,ans3,ans4
if(ans1 == 'T') DIIS_GT = .true.
if(ans2 == 'T') linGT = .true.
if(ans2 == 'T') lin_GT = .true.
if(ans3 == 'T') TDA_T = .true.
if(ans4 == 'T') regGT = .true.
if(ans4 == 'T') reg_GT = .true.
if(.not.DIIS_GT) max_diis_GT = 1
! Options for adiabatic connection