mirror of
https://github.com/pfloos/quack
synced 2024-11-04 21:23:55 +01:00
FC in pCCD
This commit is contained in:
parent
d4e45efeec
commit
a13ab94a52
@ -2,4 +2,4 @@
|
|||||||
2 9 9 0 0
|
2 9 9 0 0
|
||||||
# Znuc x y z
|
# Znuc x y z
|
||||||
F 0. 0. 0.
|
F 0. 0. 0.
|
||||||
F 0. 0. 2
|
F 0. 0. 3.3
|
||||||
|
@ -194,8 +194,6 @@ subroutine G0T0(doACFDT,exchange_kernel,doXBS,BSE,TDA,singlet_manifold,triplet_m
|
|||||||
write(*,*)'-------------------------------------------------------------------------------'
|
write(*,*)'-------------------------------------------------------------------------------'
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
! Compute the BSE correlation energy via the adiabatic connection
|
|
||||||
|
|
||||||
! Compute the BSE correlation energy via the adiabatic connection
|
! Compute the BSE correlation energy via the adiabatic connection
|
||||||
|
|
||||||
if(doACFDT) then
|
if(doACFDT) then
|
||||||
|
@ -447,7 +447,7 @@ program QuAcK
|
|||||||
if(do_pCCD) then
|
if(do_pCCD) then
|
||||||
|
|
||||||
call cpu_time(start_CCD)
|
call cpu_time(start_CCD)
|
||||||
call pCCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nO(1),nV(1),ERI_MO_basis,ENuc,ERHF,eHF)
|
call pCCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nC(1),nO(1),nV(1),nR(1),ERI_MO_basis,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
|
||||||
@ -513,7 +513,8 @@ program QuAcK
|
|||||||
if(doppRPA) then
|
if(doppRPA) then
|
||||||
|
|
||||||
call cpu_time(start_ppRPA)
|
call cpu_time(start_ppRPA)
|
||||||
call ppRPA(singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,ENuc,ERHF,ERI_MO_basis,eHF)
|
call ppRPA(singlet_manifold,triplet_manifold, &
|
||||||
|
nBas,nC(1),nO(1),nV(1),nR(1),ENuc,ERHF,ERI_MO_basis,eHF)
|
||||||
call cpu_time(end_ppRPA)
|
call cpu_time(end_ppRPA)
|
||||||
|
|
||||||
t_ppRPA = end_ppRPA - start_ppRPA
|
t_ppRPA = end_ppRPA - start_ppRPA
|
||||||
@ -529,7 +530,8 @@ program QuAcK
|
|||||||
if(doADC) then
|
if(doADC) then
|
||||||
|
|
||||||
call cpu_time(start_ADC)
|
call cpu_time(start_ADC)
|
||||||
call ADC(singlet_manifold,triplet_manifold,maxSCF_GF,thresh_GF,n_diis_GF,nBas,nC(1),nO(1),nV(1),nR(1),eHF,ERI_MO_basis)
|
call ADC(singlet_manifold,triplet_manifold,maxSCF_GF,thresh_GF,n_diis_GF, &
|
||||||
|
nBas,nC(1),nO(1),nV(1),nR(1),eHF,ERI_MO_basis)
|
||||||
call cpu_time(end_ADC)
|
call cpu_time(end_ADC)
|
||||||
|
|
||||||
t_ADC = end_ADC - start_ADC
|
t_ADC = end_ADC - start_ADC
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine pCCD(maxSCF,thresh,max_diis,nBas,nO,nV,ERI,ENuc,ERHF,eHF)
|
subroutine pCCD(maxSCF,thresh,max_diis,nBas,nC,nO,nV,nR,ERI,ENuc,ERHF,eHF)
|
||||||
|
|
||||||
! pair CCD module
|
! pair CCD module
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ subroutine pCCD(maxSCF,thresh,max_diis,nBas,nO,nV,ERI,ENuc,ERHF,eHF)
|
|||||||
integer,intent(in) :: max_diis
|
integer,intent(in) :: max_diis
|
||||||
double precision,intent(in) :: thresh
|
double precision,intent(in) :: thresh
|
||||||
|
|
||||||
integer,intent(in) :: nBas,nO,nV
|
integer,intent(in) :: nBas,nC,nO,nV,nR
|
||||||
double precision,intent(in) :: ENuc,ERHF
|
double precision,intent(in) :: ENuc,ERHF
|
||||||
double precision,intent(in) :: eHF(nBas)
|
double precision,intent(in) :: eHF(nBas)
|
||||||
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
|
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
|
||||||
@ -31,8 +31,7 @@ subroutine pCCD(maxSCF,thresh,max_diis,nBas,nO,nV,ERI,ENuc,ERHF,eHF)
|
|||||||
double precision,allocatable :: OVVO(:,:)
|
double precision,allocatable :: OVVO(:,:)
|
||||||
double precision,allocatable :: VVVV(:,:)
|
double precision,allocatable :: VVVV(:,:)
|
||||||
|
|
||||||
double precision,allocatable :: X(:,:)
|
double precision,allocatable :: y(:,:)
|
||||||
double precision,allocatable :: Y(:,:)
|
|
||||||
|
|
||||||
double precision,allocatable :: r(:,:)
|
double precision,allocatable :: r(:,:)
|
||||||
double precision,allocatable :: t(:,:)
|
double precision,allocatable :: t(:,:)
|
||||||
@ -51,8 +50,8 @@ subroutine pCCD(maxSCF,thresh,max_diis,nBas,nO,nV,ERI,ENuc,ERHF,eHF)
|
|||||||
|
|
||||||
allocate(delta_OOVV(nO,nV))
|
allocate(delta_OOVV(nO,nV))
|
||||||
|
|
||||||
do i=1,nO
|
do i=nC+1,nO
|
||||||
do a=1,nV
|
do a=1,nV-nR
|
||||||
delta_OOVV(i,a) = 2d0*(eHF(nO+a) - eHF(i))
|
delta_OOVV(i,a) = 2d0*(eHF(nO+a) - eHF(i))
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
@ -61,22 +60,22 @@ subroutine pCCD(maxSCF,thresh,max_diis,nBas,nO,nV,ERI,ENuc,ERHF,eHF)
|
|||||||
|
|
||||||
allocate(OOOO(nO,nO),OOVV(nO,nV),OVOV(nO,nV),OVVO(nO,nV),VVVV(nV,nV))
|
allocate(OOOO(nO,nO),OOVV(nO,nV),OVOV(nO,nV),OVVO(nO,nV),VVVV(nV,nV))
|
||||||
|
|
||||||
do i=1,nO
|
do i=nC+1,nO
|
||||||
do j=1,nO
|
do j=nC+1,nO
|
||||||
OOOO(i,j) = ERI(i,i,j,j)
|
OOOO(i,j) = ERI(i,i,j,j)
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
|
||||||
do i=1,nO
|
do i=nC+1,nO
|
||||||
do a=1,nV
|
do a=1,nV-nR
|
||||||
OOVV(i,a) = ERI(i,i,nO+a,nO+a)
|
OOVV(i,a) = ERI(i,i,nO+a,nO+a)
|
||||||
OVOV(i,a) = ERI(i,nO+a,i,nO+a)
|
OVOV(i,a) = ERI(i,nO+a,i,nO+a)
|
||||||
OVVO(i,a) = ERI(i,nO+a,nO+a,i)
|
OVVO(i,a) = ERI(i,nO+a,nO+a,i)
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
|
||||||
do a=1,nV
|
do a=1,nV-nR
|
||||||
do b=1,nV
|
do b=1,nV-nR
|
||||||
VVVV(a,b) = ERI(nO+a,nO+a,nO+b,nO+b)
|
VVVV(a,b) = ERI(nO+a,nO+a,nO+b,nO+b)
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
@ -89,7 +88,7 @@ subroutine pCCD(maxSCF,thresh,max_diis,nBas,nO,nV,ERI,ENuc,ERHF,eHF)
|
|||||||
|
|
||||||
! Initialization
|
! Initialization
|
||||||
|
|
||||||
allocate(r(nO,nV),X(nV,nV),Y(nO,nO))
|
allocate(r(nO,nV),y(nO,nO))
|
||||||
|
|
||||||
Conv = 1d0
|
Conv = 1d0
|
||||||
nSCF = 0
|
nSCF = 0
|
||||||
@ -113,22 +112,34 @@ subroutine pCCD(maxSCF,thresh,max_diis,nBas,nO,nV,ERI,ENuc,ERHF,eHF)
|
|||||||
|
|
||||||
! Form intermediate array
|
! Form intermediate array
|
||||||
|
|
||||||
X(:,:) = matmul(transpose(OOVV(:,:)),t(:,:))
|
y(:,:) = 0d0
|
||||||
Y(:,:) = matmul(t(:,:),transpose(OOVV(:,:)))
|
do i=nC+1,nO
|
||||||
|
do j=nC+1,nO
|
||||||
|
do b=1,nV-nR
|
||||||
|
y(i,j) = y(i,j) + OOVV(j,b)*t(i,b)
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
! Compute residual
|
! Compute residual
|
||||||
|
|
||||||
do i=1,nO
|
do i=nC+1,nO
|
||||||
do a=1,nV
|
do a=1,nV-nR
|
||||||
r(i,a) = - 2d0*(X(a,a) + Y(i,i))*t(i,a)
|
|
||||||
|
r(i,a) = OOVV(i,a) + delta_OOVV(i,a)*t(i,a) &
|
||||||
|
- 2d0*(2d0*OVOV(i,a) - OVVO(i,a) - OOVV(i,a)*t(i,a))*t(i,a)
|
||||||
|
|
||||||
|
do j=nC+1,nO
|
||||||
|
r(i,a) = r(i,a) - 2d0*OOVV(j,a)*t(j,a)*t(i,a) + OOOO(j,i)*t(j,a) + y(i,j)*t(j,a)
|
||||||
|
end do
|
||||||
|
|
||||||
|
do b=1,nV-nR
|
||||||
|
r(i,a) = r(i,a) - 2d0*OOVV(i,b)*t(i,b)*t(i,a) + VVVV(a,b)*t(i,b)
|
||||||
|
end do
|
||||||
|
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
|
||||||
r(:,:) = r(:,:) + OOVV(:,:) + delta_OOVV(:,:)*t(:,:) &
|
|
||||||
- 2d0*(2d0*OVOV(:,:) - OVVO(:,:) - OOVV(:,:)*t(:,:))*t(:,:) &
|
|
||||||
+ matmul(t(:,:),transpose(VVVV(:,:))) &
|
|
||||||
+ matmul(transpose(OOOO(:,:)),t(:,:)) &
|
|
||||||
+ matmul(Y(:,:),t)
|
|
||||||
|
|
||||||
! Check convergence
|
! Check convergence
|
||||||
|
|
||||||
@ -140,7 +151,12 @@ subroutine pCCD(maxSCF,thresh,max_diis,nBas,nO,nV,ERI,ENuc,ERHF,eHF)
|
|||||||
|
|
||||||
! Compute correlation energy
|
! Compute correlation energy
|
||||||
|
|
||||||
EcCCD = trace_matrix(nO,matmul(t(:,:),transpose(OOVV(:,:))))
|
EcCCD = 0d0
|
||||||
|
do i=nC+1,nO
|
||||||
|
do a=1,nV-nR
|
||||||
|
EcCCD = EcCCD + t(i,a)*OOVV(i,a)
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
! Dump results
|
! Dump results
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user