mirror of
https://github.com/pfloos/quack
synced 2025-01-03 10:05:59 +01:00
DIP- and DEA-EOM-CCD
This commit is contained in:
parent
68008e5738
commit
1f2f6634bb
@ -3,7 +3,7 @@
|
|||||||
# MP2* MP3 MP2-F12
|
# MP2* MP3 MP2-F12
|
||||||
F F F
|
F F F
|
||||||
# CCD pCCD DCD CCSD CCSD(T)
|
# CCD pCCD DCD CCSD CCSD(T)
|
||||||
F F F F F
|
T F F F F
|
||||||
# drCCD rCCD crCCD lCCD
|
# drCCD rCCD crCCD lCCD
|
||||||
F F F F
|
F F F F
|
||||||
# CIS* CIS(D) CID CISD FCI
|
# CIS* CIS(D) CID CISD FCI
|
||||||
@ -15,7 +15,7 @@
|
|||||||
# G0W0* evGW* qsGW* ufG0W0 ufGW
|
# G0W0* evGW* qsGW* ufG0W0 ufGW
|
||||||
F F F F F
|
F F F F F
|
||||||
# G0T0 evGT qsGT
|
# G0T0 evGT qsGT
|
||||||
T F F
|
F F F
|
||||||
# MCMP2
|
# MCMP2
|
||||||
F
|
F
|
||||||
# * unrestricted version available
|
# * unrestricted version available
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
# CC: maxSCF thresh DIIS n_diis
|
# CC: maxSCF thresh DIIS n_diis
|
||||||
64 0.00001 T 5
|
64 0.00001 T 5
|
||||||
# spin: TDA singlet triplet spin_conserved spin_flip
|
# spin: TDA singlet triplet spin_conserved spin_flip
|
||||||
T T F T T
|
T T T T T
|
||||||
# GF: maxSCF thresh DIIS n_diis lin eta renorm reg
|
# GF: maxSCF thresh DIIS n_diis lin eta renorm reg
|
||||||
256 0.00001 T 5 T 0.0 3 F
|
256 0.00001 T 5 T 0.0 3 F
|
||||||
# GW: maxSCF thresh DIIS n_diis lin eta COHSEX SOSEX TDA_W G0W GW0 reg
|
# GW: maxSCF thresh DIIS n_diis lin eta COHSEX SOSEX TDA_W G0W GW0 reg
|
||||||
@ -15,6 +15,6 @@
|
|||||||
# ACFDT: AC Kx XBS
|
# ACFDT: AC Kx XBS
|
||||||
F F T
|
F F T
|
||||||
# BSE: BSE dBSE dTDA evDyn ppBSE
|
# BSE: BSE dBSE dTDA evDyn ppBSE
|
||||||
F F T F T
|
T F T F F
|
||||||
# MCMP2: nMC nEq nWalk dt nPrint iSeed doDrift
|
# MCMP2: nMC nEq nWalk dt nPrint iSeed doDrift
|
||||||
1000000 100000 10 0.3 10000 1234 T
|
1000000 100000 10 0.3 10000 1234 T
|
||||||
|
@ -52,14 +52,20 @@ subroutine CCD(BSE,maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ER
|
|||||||
double precision,allocatable :: u(:,:,:,:)
|
double precision,allocatable :: u(:,:,:,:)
|
||||||
double precision,allocatable :: v(:,:,:,:)
|
double precision,allocatable :: v(:,:,:,:)
|
||||||
|
|
||||||
double precision,allocatable :: r2(:,:,:,:)
|
double precision,allocatable :: r(:,:,:,:)
|
||||||
double precision,allocatable :: t2(:,:,:,:)
|
double precision,allocatable :: t(:,:,:,:)
|
||||||
|
|
||||||
integer :: n_diis,i,j,a,b
|
integer :: n_diis,i,j,a,b
|
||||||
double precision :: rcond
|
double precision :: rcond
|
||||||
double precision,allocatable :: error_diis(:,:)
|
double precision,allocatable :: error_diis(:,:)
|
||||||
double precision,allocatable :: t_diis(:,:)
|
double precision,allocatable :: t_diis(:,:)
|
||||||
|
|
||||||
|
logical :: do_EE_EOM_CC_1h1p = .false.
|
||||||
|
logical :: do_EA_EOM_CC_1p = .false.
|
||||||
|
logical :: do_IP_EOM_CC_1h = .false.
|
||||||
|
logical :: do_DEA_EOM_CC_2p = .true.
|
||||||
|
logical :: do_DIP_EOM_CC_2h = .true.
|
||||||
|
|
||||||
! Hello world
|
! Hello world
|
||||||
|
|
||||||
write(*,*)
|
write(*,*)
|
||||||
@ -123,11 +129,11 @@ subroutine CCD(BSE,maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ER
|
|||||||
|
|
||||||
! MP2 guess amplitudes
|
! MP2 guess amplitudes
|
||||||
|
|
||||||
allocate(t2(nO-nC,nO-nC,nV-nR,nV-nR))
|
allocate(t(nO-nC,nO-nC,nV-nR,nV-nR))
|
||||||
|
|
||||||
t2(:,:,:,:) = -OOVV(:,:,:,:)/delta_OOVV(:,:,:,:)
|
t(:,:,:,:) = -OOVV(:,:,:,:)/delta_OOVV(:,:,:,:)
|
||||||
|
|
||||||
call CCD_correlation_energy(nC,nO,nV,nR,OOVV,t2,EcMP2)
|
call CCD_correlation_energy(nC,nO,nV,nR,OOVV,t,EcMP2)
|
||||||
EcMP4 = 0d0
|
EcMP4 = 0d0
|
||||||
|
|
||||||
! Memory allocation for DIIS
|
! Memory allocation for DIIS
|
||||||
@ -136,7 +142,7 @@ subroutine CCD(BSE,maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ER
|
|||||||
|
|
||||||
! Initialization
|
! Initialization
|
||||||
|
|
||||||
allocate(r2(nO-nC,nO-nC,nV-nR,nV-nR),u(nO-nC,nO-nC,nV-nR,nV-nR),v(nO-nC,nO-nC,nV-nR,nV-nR))
|
allocate(r(nO-nC,nO-nC,nV-nR,nV-nR),u(nO-nC,nO-nC,nV-nR,nV-nR),v(nO-nC,nO-nC,nV-nR,nV-nR))
|
||||||
allocate(X1(nO-nC,nO-nC,nO-nC,nO-nC),X2(nV-nR,nV-nR),X3(nO-nC,nO-nC),X4(nO-nC,nO-nC,nV-nR,nV-nR))
|
allocate(X1(nO-nC,nO-nC,nO-nC,nO-nC),X2(nV-nR,nV-nR),X3(nO-nC,nO-nC),X4(nO-nC,nO-nC,nV-nR,nV-nR))
|
||||||
|
|
||||||
Conv = 1d0
|
Conv = 1d0
|
||||||
@ -165,33 +171,33 @@ subroutine CCD(BSE,maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ER
|
|||||||
|
|
||||||
! Form linear array
|
! Form linear array
|
||||||
|
|
||||||
call form_u(nC,nO,nV,nR,OOOO,VVVV,OVOV,t2,u)
|
call form_u(nC,nO,nV,nR,OOOO,VVVV,OVOV,t,u)
|
||||||
|
|
||||||
! Form interemediate arrays
|
! Form interemediate arrays
|
||||||
|
|
||||||
call form_X(nC,nO,nV,nR,OOVV,t2,X1,X2,X3,X4)
|
call form_X(nC,nO,nV,nR,OOVV,t,X1,X2,X3,X4)
|
||||||
|
|
||||||
! Form quadratic array
|
! Form quadratic array
|
||||||
|
|
||||||
call form_v(nC,nO,nV,nR,X1,X2,X3,X4,t2,v)
|
call form_v(nC,nO,nV,nR,X1,X2,X3,X4,t,v)
|
||||||
|
|
||||||
! Compute residual
|
! Compute residual
|
||||||
|
|
||||||
r2(:,:,:,:) = OOVV(:,:,:,:) + delta_OOVV(:,:,:,:)*t2(:,:,:,:) + u(:,:,:,:) + v(:,:,:,:)
|
r(:,:,:,:) = OOVV(:,:,:,:) + delta_OOVV(:,:,:,:)*t(:,:,:,:) + u(:,:,:,:) + v(:,:,:,:)
|
||||||
|
|
||||||
! Check convergence
|
! Check convergence
|
||||||
|
|
||||||
Conv = maxval(abs(r2(:,:,:,:)))
|
Conv = maxval(abs(r(:,:,:,:)))
|
||||||
|
|
||||||
! Update amplitudes
|
! Update amplitudes
|
||||||
|
|
||||||
t2(:,:,:,:) = t2(:,:,:,:) - r2(:,:,:,:)/delta_OOVV(:,:,:,:)
|
t(:,:,:,:) = t(:,:,:,:) - r(:,:,:,:)/delta_OOVV(:,:,:,:)
|
||||||
|
|
||||||
! Compute correlation energy
|
! Compute correlation energy
|
||||||
|
|
||||||
call CCD_correlation_energy(nC,nO,nV,nR,OOVV,t2,EcCCD)
|
call CCD_correlation_energy(nC,nO,nV,nR,OOVV,t,EcCCD)
|
||||||
|
|
||||||
if(nSCF == 1) call MP3_correlation_energy(nC,nO,nV,nR,OOVV,t2,v,delta_OOVV,EcMP3)
|
if(nSCF == 1) call MP3_correlation_energy(nC,nO,nV,nR,OOVV,t,v,delta_OOVV,EcMP3)
|
||||||
|
|
||||||
! Dump results
|
! Dump results
|
||||||
|
|
||||||
@ -200,7 +206,7 @@ subroutine CCD(BSE,maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ER
|
|||||||
! DIIS extrapolation
|
! DIIS extrapolation
|
||||||
|
|
||||||
n_diis = min(n_diis+1,max_diis)
|
n_diis = min(n_diis+1,max_diis)
|
||||||
call DIIS_extrapolation(rcond,(nO-nC)**2*(nV-nR)**2,(nO-nC)**2*(nV-nR)**2,n_diis,error_diis,t_diis,-r2/delta_OOVV,t2)
|
call DIIS_extrapolation(rcond,(nO-nC)**2*(nV-nR)**2,(nO-nC)**2*(nV-nR)**2,n_diis,error_diis,t_diis,-r/delta_OOVV,t)
|
||||||
|
|
||||||
! Reset DIIS if required
|
! Reset DIIS if required
|
||||||
|
|
||||||
@ -246,4 +252,28 @@ subroutine CCD(BSE,maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ER
|
|||||||
write(*,'(1X,A15,1X,F10.6)') 'Ec(MP4-SDQ) = ',EcMP4
|
write(*,'(1X,A15,1X,F10.6)') 'Ec(MP4-SDQ) = ',EcMP4
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
|
!------------------------------------------------------------------------
|
||||||
|
! EOM section
|
||||||
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
|
! EE-EOM-CCD (1h1p)
|
||||||
|
|
||||||
|
! if(do_EE-EOM-CC_1h1p) call EE-EOM-CCD_1h1p()
|
||||||
|
|
||||||
|
! EA-EOM (1p)
|
||||||
|
|
||||||
|
! if(do_EA-EOM-CC_1p) call EA-EOM-CCD_1p()
|
||||||
|
|
||||||
|
! IP-EOM-CCD(1h)
|
||||||
|
|
||||||
|
! if(do_IP-EOM-CC_1h) call IP-EOM-CCD_1h()
|
||||||
|
|
||||||
|
! DEA-EOM (2p)
|
||||||
|
|
||||||
|
if(do_DEA_EOM_CC_2p) call DEA_EOM_CCD_2p(nC,nO,nV,nR,eV,OOVV,VVVV,t)
|
||||||
|
|
||||||
|
! DIP-EOM-CCD(2h)
|
||||||
|
|
||||||
|
if(do_DIP_EOM_CC_2h) call DIP_EOM_CCD_2h(nC,nO,nV,nR,eO,OOVV,OOOO,t)
|
||||||
|
|
||||||
end subroutine CCD
|
end subroutine CCD
|
||||||
|
116
src/CC/DEA_EOM_CCD_2p.f90
Normal file
116
src/CC/DEA_EOM_CCD_2p.f90
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
subroutine DEA_EOM_CCD_2p(nC,nO,nV,nR,eV,OOVV,VVVV,t)
|
||||||
|
|
||||||
|
! DEA-EOM-CCD calculation up to 2p
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
! Input variables
|
||||||
|
|
||||||
|
integer,intent(in) :: nC
|
||||||
|
integer,intent(in) :: nO
|
||||||
|
integer,intent(in) :: nV
|
||||||
|
integer,intent(in) :: nR
|
||||||
|
double precision,intent(in) :: eV(nV)
|
||||||
|
double precision,intent(in) :: OOVV(nO,nO,nV,nV)
|
||||||
|
double precision,intent(in) :: VVVV(nV,nV,nV,nV)
|
||||||
|
double precision,intent(in) :: t(nO,nO,nV,nV)
|
||||||
|
|
||||||
|
! Local variables
|
||||||
|
|
||||||
|
integer :: a,b,c,d,ab,cd
|
||||||
|
integer :: i,j
|
||||||
|
integer :: nVV
|
||||||
|
double precision,external :: Kronecker_delta
|
||||||
|
double precision,allocatable :: F(:,:)
|
||||||
|
double precision,allocatable :: W(:,:,:,:)
|
||||||
|
double precision,allocatable :: H(:,:)
|
||||||
|
double precision,allocatable :: Om(:)
|
||||||
|
|
||||||
|
|
||||||
|
! Hello world
|
||||||
|
|
||||||
|
write(*,*)
|
||||||
|
write(*,*)'********************'
|
||||||
|
write(*,*)'| DEA-EOM-CCD (2p) |'
|
||||||
|
write(*,*)'********************'
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
! Size of the EOM Hamiltonian
|
||||||
|
|
||||||
|
nVV = nV*(nV-1)/2
|
||||||
|
|
||||||
|
! Memory allocation
|
||||||
|
|
||||||
|
allocate(F(nV,nV),W(nV,nV,nV,nV),H(nVV,nVV),Om(nVV))
|
||||||
|
|
||||||
|
! Form one-body terms
|
||||||
|
|
||||||
|
do a=1,nV-nR
|
||||||
|
do b=1,nV-nR
|
||||||
|
|
||||||
|
F(a,b) = eV(a)*Kronecker_delta(a,b)
|
||||||
|
|
||||||
|
do i=1,nO-nR
|
||||||
|
do j=1,nO-nR
|
||||||
|
do c=1,nV-nC
|
||||||
|
|
||||||
|
F(a,b) = F(a,b) - 0.5d0*OOVV(i,j,b,c)*t(i,j,a,c)
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Form two-body terms
|
||||||
|
|
||||||
|
do a=1,nV-nR
|
||||||
|
do b=1,nV-nR
|
||||||
|
do c=1,nV-nR
|
||||||
|
do d=1,nV-nR
|
||||||
|
|
||||||
|
W(a,b,c,d) = VVVV(a,b,c,d)
|
||||||
|
|
||||||
|
do i=1,nO-nC
|
||||||
|
do j=i+1,nO-nC
|
||||||
|
|
||||||
|
W(a,b,c,d) = W(a,b,c,d) + OOVV(i,j,a,b)*t(i,j,a,b)
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Form EOM Hamiltonian
|
||||||
|
|
||||||
|
ab = 0
|
||||||
|
do a=1,nV-nR
|
||||||
|
do b=a+1,nV-nR
|
||||||
|
ab = ab + 1
|
||||||
|
|
||||||
|
cd = 0
|
||||||
|
do c=1,nV-nR
|
||||||
|
do d=c+1,nV-nR
|
||||||
|
cd = cd + 1
|
||||||
|
|
||||||
|
H(ab,cd) = F(a,c)*Kronecker_delta(b,d) + Kronecker_delta(a,c)*F(b,d) + W(a,b,c,d)
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Diagonalize EOM Hamiltonian
|
||||||
|
|
||||||
|
if(nVV > 0) call diagonalize_matrix(nVV,H,Om)
|
||||||
|
|
||||||
|
! Dump results
|
||||||
|
|
||||||
|
call print_excitation('DEA-EOM-CCD ',3,nVV,Om)
|
||||||
|
|
||||||
|
end subroutine DEA_EOM_CCD_2p
|
116
src/CC/DIP_EOM_CCD_2h.f90
Normal file
116
src/CC/DIP_EOM_CCD_2h.f90
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
subroutine DIP_EOM_CCD_2h(nC,nO,nV,nR,eO,OOVV,OOOO,t)
|
||||||
|
|
||||||
|
! DIP-EOM-CCD calculation up to 2h
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
! Input variables
|
||||||
|
|
||||||
|
integer,intent(in) :: nC
|
||||||
|
integer,intent(in) :: nO
|
||||||
|
integer,intent(in) :: nV
|
||||||
|
integer,intent(in) :: nR
|
||||||
|
double precision,intent(in) :: eO(nO)
|
||||||
|
double precision,intent(in) :: OOVV(nO,nO,nV,nV)
|
||||||
|
double precision,intent(in) :: OOOO(nO,nO,nO,nO)
|
||||||
|
double precision,intent(in) :: t(nO,nO,nV,nV)
|
||||||
|
|
||||||
|
! Local variables
|
||||||
|
|
||||||
|
integer :: i,j,k,l,ij,kl
|
||||||
|
integer :: a,b
|
||||||
|
integer :: nOO
|
||||||
|
double precision,external :: Kronecker_delta
|
||||||
|
double precision,allocatable :: F(:,:)
|
||||||
|
double precision,allocatable :: W(:,:,:,:)
|
||||||
|
double precision,allocatable :: H(:,:)
|
||||||
|
double precision,allocatable :: Om(:)
|
||||||
|
|
||||||
|
|
||||||
|
! Hello world
|
||||||
|
|
||||||
|
write(*,*)
|
||||||
|
write(*,*)'********************'
|
||||||
|
write(*,*)'| DIP-EOM-CCD (2h) |'
|
||||||
|
write(*,*)'********************'
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
! Size of the EOM Hamiltonian
|
||||||
|
|
||||||
|
nOO = nO*(nO-1)/2
|
||||||
|
|
||||||
|
! Memory allocation
|
||||||
|
|
||||||
|
allocate(F(nO,nO),W(nO,nO,nO,nO),H(nOO,nOO),Om(nOO))
|
||||||
|
|
||||||
|
! Form one-body terms
|
||||||
|
|
||||||
|
do i=1,nO-nR
|
||||||
|
do j=1,nO-nR
|
||||||
|
|
||||||
|
F(i,j) = eO(i)*Kronecker_delta(i,j)
|
||||||
|
|
||||||
|
do k=1,nO-nR
|
||||||
|
do a=1,nV-nC
|
||||||
|
do b=1,nV-nC
|
||||||
|
|
||||||
|
F(i,j) = F(i,j) + 0.5d0*OOVV(i,k,a,b)*t(j,k,a,b)
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Form two-body terms
|
||||||
|
|
||||||
|
do i=1,nO-nC
|
||||||
|
do j=1,nO-nC
|
||||||
|
do k=1,nO-nC
|
||||||
|
do l=1,nO-nC
|
||||||
|
|
||||||
|
W(i,j,k,l) = OOOO(i,j,k,l)
|
||||||
|
|
||||||
|
do a=1,nV-nR
|
||||||
|
do b=a+1,nV-nR
|
||||||
|
|
||||||
|
W(i,j,k,l) = W(i,j,k,l) + OOVV(i,j,a,b)*t(i,j,a,b)
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Form EOM Hamiltonian
|
||||||
|
|
||||||
|
ij = 0
|
||||||
|
do i=1,nO-nC
|
||||||
|
do j=i+1,nO-nC
|
||||||
|
ij = ij + 1
|
||||||
|
|
||||||
|
kl = 0
|
||||||
|
do k=1,nO-nC
|
||||||
|
do l=k+1,nO-nC
|
||||||
|
kl = kl + 1
|
||||||
|
|
||||||
|
H(ij,kl) = - F(i,k)*Kronecker_delta(j,l) - Kronecker_delta(i,k)*F(j,l) + W(i,j,k,l)
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Diagonalize EOM Hamiltonian
|
||||||
|
|
||||||
|
if(nOO > 0) call diagonalize_matrix(nOO,H,Om)
|
||||||
|
|
||||||
|
! Dump results
|
||||||
|
|
||||||
|
call print_excitation('DIP-EOM-CCD ',3,nOO,Om)
|
||||||
|
|
||||||
|
end subroutine DIP_EOM_CCD_2h
|
@ -1,4 +1,4 @@
|
|||||||
subroutine rCCD(maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ERHF,eHF)
|
subroutine rCCD(BSE,maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ERHF,eHF)
|
||||||
|
|
||||||
! Ring CCD module
|
! Ring CCD module
|
||||||
|
|
||||||
@ -6,6 +6,7 @@ subroutine rCCD(maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ERHF,
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: BSE
|
||||||
integer,intent(in) :: maxSCF
|
integer,intent(in) :: maxSCF
|
||||||
integer,intent(in) :: max_diis
|
integer,intent(in) :: max_diis
|
||||||
double precision,intent(in) :: thresh
|
double precision,intent(in) :: thresh
|
||||||
@ -74,7 +75,15 @@ subroutine rCCD(maxSCF,thresh,max_diis,nBasin,nCin,nOin,nVin,nRin,ERI,ENuc,ERHF,
|
|||||||
|
|
||||||
allocate(dbERI(nBas,nBas,nBas,nBas))
|
allocate(dbERI(nBas,nBas,nBas,nBas))
|
||||||
|
|
||||||
call antisymmetrize_ERI(2,nBas,sERI,dbERI)
|
if(BSE) then
|
||||||
|
|
||||||
|
call static_screening(nBas,nC,nO,nV,nR,seHF,sERI,dbERI)
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
call antisymmetrize_ERI(2,nBas,sERI,dbERI)
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
deallocate(sERI)
|
deallocate(sERI)
|
||||||
|
|
||||||
|
@ -55,15 +55,17 @@ subroutine static_Tmatrix_C_pp(ispin,eta,nBas,nC,nO,nV,nR,nOO,nVV,nOOx,nVVx,lamb
|
|||||||
|
|
||||||
do ef=1,nVV
|
do ef=1,nVV
|
||||||
eps = + Om1(ef)
|
eps = + Om1(ef)
|
||||||
chi = chi + rho1(a,b,ef)*rho1(c,d,ef)*eps/(eps**2 + eta**2)
|
chi = chi + rho1(a,b,ef)*rho1(c,d,ef)*eps/(eps**2 + eta**2) &
|
||||||
|
+ rho1(a,b,ef)*rho1(d,c,ef)*eps/(eps**2 + eta**2)
|
||||||
end do
|
end do
|
||||||
|
|
||||||
do mn=1,nOO
|
do mn=1,nOO
|
||||||
eps = - Om2(mn)
|
eps = - Om2(mn)
|
||||||
chi = chi + rho2(a,b,mn)*rho2(c,d,mn)*eps/(eps**2 + eta**2)
|
chi = chi + rho2(a,b,mn)*rho2(c,d,mn)*eps/(eps**2 + eta**2) &
|
||||||
|
+ rho2(a,b,mn)*rho2(d,c,mn)*eps/(eps**2 + eta**2)
|
||||||
end do
|
end do
|
||||||
|
|
||||||
TC(ab,cd) = lambda*chi/sqrt((1d0 + Kronecker_delta(a,b))*(1d0 + Kronecker_delta(c,d)))
|
TC(ab,cd) = 0.5d0*lambda*chi/sqrt((1d0 + Kronecker_delta(a,b))*(1d0 + Kronecker_delta(c,d)))
|
||||||
|
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
@ -56,7 +56,7 @@ subroutine static_screening_WC_pp(ispin,eta,nBas,nC,nO,nV,nR,nS,nOO,nVV,lambda,E
|
|||||||
do m=1,nS
|
do m=1,nS
|
||||||
eps = Omega(m)**2 + eta**2
|
eps = Omega(m)**2 + eta**2
|
||||||
chi = chi + rho(a,c,m)*rho(b,d,m)*Omega(m)/eps &
|
chi = chi + rho(a,c,m)*rho(b,d,m)*Omega(m)/eps &
|
||||||
- rho(a,d,m)*rho(b,c,m)*Omega(m)/eps
|
+ rho(a,d,m)*rho(b,c,m)*Omega(m)/eps
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
WC(ab,cd) = + 4d0*lambda*chi/sqrt((1d0 + Kronecker_delta(a,b))*(1d0 + Kronecker_delta(c,d)))
|
WC(ab,cd) = + 4d0*lambda*chi/sqrt((1d0 + Kronecker_delta(a,b))*(1d0 + Kronecker_delta(c,d)))
|
||||||
|
@ -33,7 +33,7 @@ subroutine print_excitation(method,ispin,nS,Omega)
|
|||||||
'|','State','|',' Excitation energy (au) ','|',' Excitation energy (eV) ','|'
|
'|','State','|',' Excitation energy (au) ','|',' Excitation energy (eV) ','|'
|
||||||
write(*,*)'-------------------------------------------------------------'
|
write(*,*)'-------------------------------------------------------------'
|
||||||
|
|
||||||
do ia=1,maxS
|
do ia=1,min(maxS,nS)
|
||||||
write(*,'(1X,A1,1X,I5,1X,A1,1X,F23.6,1X,A1,1X,F23.6,1X,A1,1X)') &
|
write(*,'(1X,A1,1X,I5,1X,A1,1X,F23.6,1X,A1,1X,F23.6,1X,A1,1X)') &
|
||||||
'|',ia,'|',Omega(ia),'|',Omega(ia)*HaToeV,'|'
|
'|',ia,'|',Omega(ia),'|',Omega(ia)*HaToeV,'|'
|
||||||
enddo
|
enddo
|
||||||
|
@ -582,15 +582,15 @@ program QuAcK
|
|||||||
write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CCD = ',t_CCD,' seconds'
|
write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CCD = ',t_CCD,' seconds'
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
call cpu_time(start_CCD)
|
! call cpu_time(start_CCD)
|
||||||
call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,BSE,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE,singlet,triplet, &
|
! call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,BSE,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE,singlet,triplet, &
|
||||||
linGW,eta_GW,regGW,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int_MO,PHF,cHF,eHF,Vxc,eG0W0)
|
! linGW,eta_GW,regGW,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int_MO,PHF,cHF,eHF,Vxc,eG0W0)
|
||||||
call CCD(.true.,maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR,ERI_MO,ENuc,ERHF,eG0W0)
|
! call CCD(.true.,maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR,ERI_MO,ENuc,ERHF,eG0W0)
|
||||||
call cpu_time(end_CCD)
|
! call cpu_time(end_CCD)
|
||||||
|
|
||||||
t_CCD = end_CCD - start_CCD
|
! t_CCD = end_CCD - start_CCD
|
||||||
write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CCD@BSE = ',t_CCD,' seconds'
|
! write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CCD@BSE = ',t_CCD,' seconds'
|
||||||
write(*,*)
|
! write(*,*)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -627,16 +627,16 @@ program QuAcK
|
|||||||
write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CCSD or CCSD(T)= ',t_CCSD,' seconds'
|
write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CCSD or CCSD(T)= ',t_CCSD,' seconds'
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
call cpu_time(start_CCSD)
|
! call cpu_time(start_CCSD)
|
||||||
call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,BSE,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE,singlet,triplet, &
|
! call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,BSE,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE,singlet,triplet, &
|
||||||
linGW,eta_GW,regGW,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int_MO,PHF,cHF,eHF,Vxc,eG0W0)
|
! linGW,eta_GW,regGW,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int_MO,PHF,cHF,eHF,Vxc,eG0W0)
|
||||||
|
|
||||||
call CCSD(.true.,maxSCF_CC,thresh_CC,n_diis_CC,doCCSDT,nBas,nC,nO,nV,nR,ERI_MO,ENuc,ERHF,eG0W0)
|
! call CCSD(.true.,maxSCF_CC,thresh_CC,n_diis_CC,doCCSDT,nBas,nC,nO,nV,nR,ERI_MO,ENuc,ERHF,eG0W0)
|
||||||
call cpu_time(end_CCSD)
|
! call cpu_time(end_CCSD)
|
||||||
|
|
||||||
t_CCSD = end_CCSD - start_CCSD
|
! t_CCSD = end_CCSD - start_CCSD
|
||||||
write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CCSD or CCSD(T)= ',t_CCSD,' seconds'
|
! write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CCSD or CCSD(T)= ',t_CCSD,' seconds'
|
||||||
write(*,*)
|
! write(*,*)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -647,8 +647,7 @@ program QuAcK
|
|||||||
if(do_drCCD) then
|
if(do_drCCD) then
|
||||||
|
|
||||||
call cpu_time(start_CCD)
|
call cpu_time(start_CCD)
|
||||||
call drCCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR, &
|
call drCCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR,ERI_MO,ENuc,ERHF,eHF)
|
||||||
ERI_MO,ENuc,ERHF,eHF)
|
|
||||||
call cpu_time(end_CCD)
|
call cpu_time(end_CCD)
|
||||||
|
|
||||||
t_CCD = end_CCD - start_CCD
|
t_CCD = end_CCD - start_CCD
|
||||||
@ -664,8 +663,16 @@ program QuAcK
|
|||||||
if(do_rCCD) then
|
if(do_rCCD) then
|
||||||
|
|
||||||
call cpu_time(start_CCD)
|
call cpu_time(start_CCD)
|
||||||
call rCCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR, &
|
call rCCD(.false.,maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR,ERI_MO,ENuc,ERHF,eHF)
|
||||||
ERI_MO,ENuc,ERHF,eHF)
|
call cpu_time(end_CCD)
|
||||||
|
|
||||||
|
t_CCD = end_CCD - start_CCD
|
||||||
|
write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for ring CCD = ',t_CCD,' seconds'
|
||||||
|
write(*,*)
|
||||||
|
call cpu_time(start_CCD)
|
||||||
|
call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,BSE,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE,singlet,triplet, &
|
||||||
|
linGW,eta_GW,regGW,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int_MO,PHF,cHF,eHF,Vxc,eG0W0)
|
||||||
|
call rCCD(.true.,maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR,ERI_MO,ENuc,ERHF,eG0W0)
|
||||||
call cpu_time(end_CCD)
|
call cpu_time(end_CCD)
|
||||||
|
|
||||||
t_CCD = end_CCD - start_CCD
|
t_CCD = end_CCD - start_CCD
|
||||||
@ -681,8 +688,7 @@ program QuAcK
|
|||||||
if(do_crCCD) then
|
if(do_crCCD) then
|
||||||
|
|
||||||
call cpu_time(start_CCD)
|
call cpu_time(start_CCD)
|
||||||
call crCCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR, &
|
call crCCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC,nO,nV,nR,ERI_MO,ENuc,ERHF,eHF)
|
||||||
ERI_MO,ENuc,ERHF,eHF)
|
|
||||||
|
|
||||||
call cpu_time(end_CCD)
|
call cpu_time(end_CCD)
|
||||||
|
|
||||||
|
@ -74,10 +74,10 @@ subroutine ppRPA(TDA,doACFDT,singlet,triplet,nBas,nC,nO,nV,nR,ENuc,ERHF,ERI,dipo
|
|||||||
call linear_response_pp(ispin,TDA,nBas,nC,nO,nV,nR,nOO,nVV,1d0,e,ERI, &
|
call linear_response_pp(ispin,TDA,nBas,nC,nO,nV,nR,nOO,nVV,1d0,e,ERI, &
|
||||||
Omega1,X1,Y1,Omega2,X2,Y2,Ec_ppRPA(ispin))
|
Omega1,X1,Y1,Omega2,X2,Y2,Ec_ppRPA(ispin))
|
||||||
|
|
||||||
call print_transition_vectors_pp(.true.,nBas,nC,nO,nV,nR,nOO,nVV,dipole_int,Omega1,X1,Y1,Omega2,X2,Y2)
|
! call print_transition_vectors_pp(.true.,nBas,nC,nO,nV,nR,nOO,nVV,dipole_int,Omega1,X1,Y1,Omega2,X2,Y2)
|
||||||
|
|
||||||
! call print_excitation('pp-BSE (N+2)',ispin,nVV,Omega1)
|
call print_excitation('pp-BSE (N+2)',ispin,nVV,Omega1)
|
||||||
! call print_excitation('pp-BSE (N-2)',ispin,nOO,Omega2)
|
call print_excitation('pp-BSE (N-2)',ispin,nOO,Omega2)
|
||||||
|
|
||||||
deallocate(Omega1,X1,Y1,Omega2,X2,Y2)
|
deallocate(Omega1,X1,Y1,Omega2,X2,Y2)
|
||||||
|
|
||||||
@ -102,10 +102,10 @@ subroutine ppRPA(TDA,doACFDT,singlet,triplet,nBas,nC,nO,nV,nR,ENuc,ERHF,ERI,dipo
|
|||||||
call linear_response_pp(ispin,TDA,nBas,nC,nO,nV,nR,nOO,nVV,1d0,e,ERI, &
|
call linear_response_pp(ispin,TDA,nBas,nC,nO,nV,nR,nOO,nVV,1d0,e,ERI, &
|
||||||
Omega1,X1,Y1,Omega2,X2,Y2,Ec_ppRPA(ispin))
|
Omega1,X1,Y1,Omega2,X2,Y2,Ec_ppRPA(ispin))
|
||||||
|
|
||||||
call print_transition_vectors_pp(.false.,nBas,nC,nO,nV,nR,nOO,nVV,dipole_int,Omega1,X1,Y1,Omega2,X2,Y2)
|
! call print_transition_vectors_pp(.false.,nBas,nC,nO,nV,nR,nOO,nVV,dipole_int,Omega1,X1,Y1,Omega2,X2,Y2)
|
||||||
|
|
||||||
! call print_excitation('pp-BSE (N+2)',ispin,nVV,Omega1)
|
call print_excitation('pp-BSE (N+2)',ispin,nVV,Omega1)
|
||||||
! call print_excitation('pp-BSE (N-2)',ispin,nOO,Omega2)
|
call print_excitation('pp-BSE (N-2)',ispin,nOO,Omega2)
|
||||||
|
|
||||||
deallocate(Omega1,X1,Y1,Omega2,X2,Y2)
|
deallocate(Omega1,X1,Y1,Omega2,X2,Y2)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user