4
1
mirror of https://github.com/pfloos/quack synced 2024-07-04 18:36:03 +02:00

BSE almost done

This commit is contained in:
Pierre-Francois Loos 2020-06-01 22:01:21 +02:00
parent b72a23fc98
commit 29294ef5a4
12 changed files with 236 additions and 158 deletions

View File

@ -1,71 +1,66 @@
1 9 1 21
S 8 S 10
1 9046.0000000 0.0007000 1 54620.0000000 0.0000180
2 1357.0000000 0.0053890 2 8180.0000000 0.0001380
3 309.3000000 0.0274060 3 1862.0000000 0.0007230
4 87.7300000 0.1032070 4 527.3000000 0.0030390
5 28.5600000 0.2787230 5 172.0000000 0.0109080
6 10.2100000 0.4485400 6 62.1000000 0.0340350
7 3.8380000 0.2782380 7 24.2100000 0.0911930
8 0.7466000 0.0154400 8 9.9930000 0.1992680
S 8 9 4.3050000 0.3293550
1 9046.0000000 -0.0001530 10 1.9210000 0.3404890
2 1357.0000000 -0.0012080 S 10
3 309.3000000 -0.0059920 1 54620.0000000 -0.0000030
4 87.7300000 -0.0245440 2 8180.0000000 -0.0000250
5 28.5600000 -0.0674590 3 1862.0000000 -0.0001310
6 10.2100000 -0.1580780 4 527.3000000 -0.0005580
7 3.8380000 -0.1218310 5 172.0000000 -0.0019880
8 0.7466000 0.5490030 6 62.1000000 -0.0063700
7 24.2100000 -0.0172170
8 9.9930000 -0.0408580
9 4.3050000 -0.0742370
10 1.9210000 -0.1192340
S 1 S 1
1 0.2248000 1.0000000 1 0.8663000 1.0000000
S 1 S 1
1 0.0612400 1.0000000 1 0.2475000 1.0000000
P 3
1 13.5500000 0.0399190
2 2.9170000 0.2171690
3 0.7973000 0.5103190
P 1
1 0.2185000 1.0000000
P 1
1 0.0561100 1.0000000
D 1
1 0.8170000 1.0000000
D 1
1 0.2300000 1.0000000
2 9
S 8
1 9046.0000000 0.0007000
2 1357.0000000 0.0053890
3 309.3000000 0.0274060
4 87.7300000 0.1032070
5 28.5600000 0.2787230
6 10.2100000 0.4485400
7 3.8380000 0.2782380
8 0.7466000 0.0154400
S 8
1 9046.0000000 -0.0001530
2 1357.0000000 -0.0012080
3 309.3000000 -0.0059920
4 87.7300000 -0.0245440
5 28.5600000 -0.0674590
6 10.2100000 -0.1580780
7 3.8380000 -0.1218310
8 0.7466000 0.5490030
S 1 S 1
1 0.2248000 1.0000000 1 0.1009000 1.0000000
S 1 S 1
1 0.0612400 1.0000000 1 0.0412900 1.0000000
P 3 P 4
1 13.5500000 0.0399190 1 43.7500000 0.0006330
2 2.9170000 0.2171690 2 10.3300000 0.0048080
3 0.7973000 0.5103190 3 3.2260000 0.0205270
4 1.1270000 0.0678160
P 1 P 1
1 0.2185000 1.0000000 1 0.4334000 1.0000000
P 1 P 1
1 0.0561100 1.0000000 1 0.1808000 1.0000000
P 1
1 0.0782700 1.0000000
P 1
1 0.0337200 1.0000000
D 1 D 1
1 0.8170000 1.0000000 1 1.6350000 1.0000000
D 1 D 1
1 0.2300000 1.0000000 1 0.7410000 1.0000000
D 1
1 0.3350000 1.0000000
D 1
1 0.1519000 1.0000000
F 1
1 0.6860000 1.0000000
F 1
1 0.4010000 1.0000000
F 1
1 0.2350000 1.0000000
G 1
1 0.6030000 1.0000000
G 1
1 0.3240000 1.0000000
H 1
1 0.5100000 1.0000000

View File

@ -7,13 +7,13 @@
# drCCD rCCD lCCD pCCD # drCCD rCCD lCCD pCCD
F F F F F F F F
# CIS CID CISD # CIS CID CISD
F F F T F F
# RPA RPAx ppRPA # RPA RPAx ppRPA
F T F F T F
# G0F2 evGF2 G0F3 evGF3 # G0F2 evGF2 G0F3 evGF3
F F F F T F F F
# G0W0 evGW qsGW # G0W0 evGW qsGW
T F F F F F
# G0T0 evGT qsGT # G0T0 evGT qsGT
F F F F F F
# MCMP2 # MCMP2

View File

@ -1,5 +1,4 @@
# nAt nEla nElb nCore nRyd # nAt nEla nElb nCore nRyd
2 7 7 0 0 1 2 2 0 0
# Znuc x y z # Znuc x y z
N 0. 0. -1.04008632 Be 0.0 0.0 0.0
N 0. 0. +1.04008632

View File

@ -1,4 +1,3 @@
2 1
N 0.0000000000 0.0000000000 -0.5503900175 Be 0.0000000000 0.0000000000 0.0000000000
N 0.0000000000 0.0000000000 0.5503900175

View File

@ -9,7 +9,7 @@
# GF: maxSCF thresh DIIS n_diis lin renorm # GF: maxSCF thresh DIIS n_diis lin renorm
256 0.00001 T 5 T 3 256 0.00001 T 5 T 3
# GW/GT: maxSCF thresh DIIS n_diis COHSEX SOSEX BSE TDA G0W GW0 lin eta # GW/GT: maxSCF thresh DIIS n_diis COHSEX SOSEX BSE TDA G0W GW0 lin eta
256 0.00001 T 10 F F T F F F T 0.00367493 256 0.00001 T 10 F F T T F F T 0.0
# ACFDT: AC Kx XBS # ACFDT: AC Kx XBS
F F T F F T
# MCMP2: nMC nEq nWalk dt nPrint iSeed doDrift # MCMP2: nMC nEq nWalk dt nPrint iSeed doDrift

View File

@ -61,7 +61,8 @@ subroutine BSE2(TDA,singlet_manifold,triplet_manifold,eta,nBas,nC,nO,nV,nR,nS,ER
! call Bethe_Salpeter_2_dynamic_perturbation_iterative(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF(:),eGF(:), & ! call Bethe_Salpeter_2_dynamic_perturbation_iterative(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF(:),eGF(:), &
! OmBSE(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin)) ! OmBSE(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin))
else else
call BSE2_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF(:),eGF(:),OmBSE(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin)) call BSE2_dynamic_perturbation(singlet_manifold,triplet_manifold,eta,nBas,nC,nO,nV,nR,nS, &
ERI(:,:,:,:),eHF(:),eGF(:),OmBSE(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin))
end if end if
end if end if
@ -88,7 +89,8 @@ subroutine BSE2(TDA,singlet_manifold,triplet_manifold,eta,nBas,nC,nO,nV,nR,nS,ER
! call Bethe_Salpeter_2_dynamic_perturbation_iterative(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF(:),eGF(:), & ! call Bethe_Salpeter_2_dynamic_perturbation_iterative(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF(:),eGF(:), &
! OmBSE(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin)) ! OmBSE(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin))
else else
call BSE2_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF(:),eGF(:),OmBSE(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin)) call BSE2_dynamic_perturbation(singlet_manifold,triplet_manifold,eta,nBas,nC,nO,nV,nR,nS, &
ERI(:,:,:,:),eHF(:),eGF(:),OmBSE(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin))
end if end if
end if end if

View File

@ -1,76 +1,171 @@
subroutine BSE2_A_matrix_dynamic(eta,nBas,nC,nO,nV,nR,nS,lambda,eGW,OmRPA,OmBSE,rho,A_dyn) subroutine BSE2_A_matrix_dynamic(singlet_manifold,triplet_manifold,eta,nBas,nC,nO,nV,nR,nS,lambda, &
ERI,eHF,eGF,OmBSE,A_dyn,ZA_dyn)
! Compute the dynamic part of the Bethe-Salpeter equation matrices ! Compute the resonant part of the dynamic BSE2 matrix
implicit none implicit none
include 'parameters.h' include 'parameters.h'
! Input variables ! Input variables
logical,intent(in) :: singlet_manifold
logical,intent(in) :: triplet_manifold
integer,intent(in) :: nBas,nC,nO,nV,nR,nS integer,intent(in) :: nBas,nC,nO,nV,nR,nS
double precision,intent(in) :: eta double precision,intent(in) :: eta
double precision,intent(in) :: lambda double precision,intent(in) :: lambda
double precision,intent(in) :: eGW(nBas) double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
double precision,intent(in) :: OmRPA(nS) double precision,intent(in) :: eHF(nBas)
double precision,intent(in) :: eGF(nBas)
double precision,intent(in) :: OmBSE double precision,intent(in) :: OmBSE
double precision,intent(in) :: rho(nBas,nBas,nS)
! Local variables ! Local variables
integer :: maxS double precision :: dem,num
double precision :: chi integer :: i,j,k,l
double precision :: eps integer :: a,b,c,d
integer :: i,j,a,b,ia,jb,kc integer :: ia,jb
! Output variables ! Output variables
double precision,intent(out) :: A_dyn(nS,nS) double precision,intent(out) :: A_dyn(nS,nS)
double precision,intent(out) :: ZA_dyn(nS,nS)
! Initialization ! Initialization
A_dyn(:,:) = 0d0 A_dyn(:,:) = 0d0
ZA_dyn(:,:) = 0d0
! Number of poles taken into account ! Second-order correlation kernel for the block A of the singlet manifold
maxS = nS if(singlet_manifold) then
! Build dynamic A matrix ia = 0
do i=nC+1,nO
ia = 0 do a=nO+1,nBas-nR
do i=nC+1,nO ia = ia + 1
do a=nO+1,nBas-nR
ia = ia + 1
jb = 0
do j=nC+1,nO
do b=nO+1,nBas-nR
jb = jb + 1
chi = 0d0 jb = 0
do kc=1,maxS do j=nC+1,nO
do b=nO+1,nBas-nR
jb = jb + 1
do k=nC+1,nO
do c=nO+1,nBas-nR
dem = OmBSE - eGF(a) + eGF(k) - eGF(c) + eGF(j)
num = 2d0*ERI(j,k,i,c)*ERI(a,c,b,k) - ERI(j,k,i,c)*ERI(a,c,k,b) &
- ERI(j,k,c,i)*ERI(a,c,b,k) + 2d0*ERI(j,k,c,i)*ERI(a,c,k,b)
eps = OmRPA(kc)**2 + eta**2 A_dyn(ia,jb) = A_dyn(ia,jb) - num*dem/(dem**2 + eta**2)
chi = chi + rho(i,j,kc)*rho(a,b,kc)*OmRPA(kc)/eps ZA_dyn(ia,jb) = ZA_dyn(ia,jb) + num*(dem**2 - eta**2)/(dem**2 + eta**2)**2
dem = OmBSE + eGF(i) - eGF(c) + eGF(k) - eGF(b)
num = 2d0*ERI(j,c,i,k)*ERI(a,k,b,c) - ERI(j,c,i,k)*ERI(a,k,c,b) &
- ERI(j,c,k,i)*ERI(a,k,b,c) + 2d0*ERI(j,c,k,i)*ERI(a,k,c,b)
enddo A_dyn(ia,jb) = A_dyn(ia,jb) - num*dem/(dem**2 + eta**2)
ZA_dyn(ia,jb) = ZA_dyn(ia,jb) + num*(dem**2 - eta**2)/(dem**2 + eta**2)**2
end do
end do
A_dyn(ia,jb) = A_dyn(ia,jb) - 4d0*lambda*chi do c=nO+1,nBas-nR
do d=nO+1,nBas-nR
dem = OmBSE + eGF(i) + eGF(j) - eGF(c) - eGF(d)
num = 2d0*ERI(a,j,c,d)*ERI(c,d,i,b) - ERI(a,j,c,d)*ERI(c,d,b,i) &
- ERI(a,j,d,c)*ERI(c,d,i,b) + 2d0*ERI(a,j,d,c)*ERI(c,d,b,i)
chi = 0d0 A_dyn(ia,jb) = A_dyn(ia,jb) + 0.5d0*num*dem/(dem**2 + eta**2)
do kc=1,maxS ZA_dyn(ia,jb) = ZA_dyn(ia,jb) - 0.5d0*num*(dem**2 - eta**2)/(dem**2 + eta**2)**2
end do
end do
eps = (OmBSE - OmRPA(kc) - (eGW(a) - eGW(j)))**2 + eta**2 do k=nC+1,nO
chi = chi + rho(i,j,kc)*rho(a,b,kc)*(OmBSE - OmRPA(kc) - (eGW(a) - eGW(j)))/eps do l=nC+1,nO
eps = (OmBSE - OmRPA(kc) - (eGW(b) - eGW(i)))**2 + eta**2 dem = OmBSE - eGF(a) - eGF(b) + eGF(k) + eGF(l)
chi = chi + rho(i,j,kc)*rho(a,b,kc)*(OmBSE - OmRPA(kc) - (eGW(b) - eGW(i)))/eps num = 2d0*ERI(a,j,k,l)*ERI(k,l,i,b) - ERI(a,j,k,l)*ERI(k,l,b,i) &
- ERI(a,j,l,k)*ERI(k,l,i,b) + 2d0*ERI(a,j,l,k)*ERI(k,l,b,i)
enddo A_dyn(ia,jb) = A_dyn(ia,jb) + 0.5d0*num*dem/(dem**2 + eta**2)
ZA_dyn(ia,jb) = ZA_dyn(ia,jb) - 0.5d0*num*(dem**2 - eta**2)/(dem**2 + eta**2)**2
end do
end do
end do
end do
A_dyn(ia,jb) = A_dyn(ia,jb) - 2d0*lambda*chi end do
end do
end if
! Second-order correlation kernel for the block A of the triplet manifold
if(triplet_manifold) then
ia = 0
do i=nC+1,nO
do a=nO+1,nBas-nR
ia = ia + 1
jb = 0
do j=nC+1,nO
do b=nO+1,nBas-nR
jb = jb + 1
do k=nC+1,nO
do c=nO+1,nBas-nR
dem = OmBSE - eGF(a) + eGF(k) - eGF(c) + eGF(j)
num = 2d0*ERI(j,k,i,c)*ERI(a,c,b,k) - ERI(j,k,i,c)*ERI(a,c,k,b) - ERI(j,k,c,i)*ERI(a,c,b,k)
A_dyn(ia,jb) = A_dyn(ia,jb) - num*dem/(dem**2 + eta**2)
ZA_dyn(ia,jb) = ZA_dyn(ia,jb) + num*(dem**2 - eta**2)/(dem**2 + eta**2)**2
dem = OmBSE + eGF(i) - eGF(c) + eGF(k) - eGF(b)
num = 2d0*ERI(j,c,i,k)*ERI(a,k,b,c) - ERI(j,c,i,k)*ERI(a,k,c,b) - ERI(j,c,k,i)*ERI(a,k,b,c)
A_dyn(ia,jb) = A_dyn(ia,jb) - num*dem/(dem**2 + eta**2)
ZA_dyn(ia,jb) = ZA_dyn(ia,jb) + num*(dem**2 - eta**2)/(dem**2 + eta**2)**2
end do
end do
do c=nO+1,nBas-nR
do d=nO+1,nBas-nR
dem = OmBSE + eGF(i) + eGF(j) - eGF(c) - eGF(d)
num = ERI(a,j,c,d)*ERI(c,d,b,i) + ERI(a,j,d,c)*ERI(c,d,i,b)
A_dyn(ia,jb) = A_dyn(ia,jb) - 0.5d0*num*dem/(dem**2 + eta**2)
ZA_dyn(ia,jb) = ZA_dyn(ia,jb) + 0.5d0*num*(dem**2 - eta**2)/(dem**2 + eta**2)**2
end do
end do
do k=nC+1,nO
do l=nC+1,nO
dem = OmBSE - eGF(a) - eGF(b) + eGF(k) + eGF(l)
num = ERI(a,j,k,l)*ERI(k,l,b,i) + ERI(a,j,l,k)*ERI(k,l,i,b)
A_dyn(ia,jb) = A_dyn(ia,jb) - 0.5d0*num*dem/(dem**2 + eta**2)
ZA_dyn(ia,jb) = ZA_dyn(ia,jb) + 0.5d0*num*(dem**2 - eta**2)/(dem**2 + eta**2)**2
end do
end do
end do
end do
end do
end do
end if
enddo
enddo
enddo
enddo
end subroutine BSE2_A_matrix_dynamic end subroutine BSE2_A_matrix_dynamic

View File

@ -1,4 +1,4 @@
subroutine BSE2_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF,eGF,OmBSE,XpY,XmY) subroutine BSE2_dynamic_perturbation(singlet_manifold,triplet_manifold,eta,nBas,nC,nO,nV,nR,nS,ERI,eHF,eGF,OmBSE,XpY,XmY)
! Compute dynamical effects via perturbation theory for BSE ! Compute dynamical effects via perturbation theory for BSE
@ -7,7 +7,8 @@ subroutine BSE2_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF,eGF,OmBSE,X
! Input variables ! Input variables
logical,intent(in) :: TDA logical,intent(in) :: singlet_manifold
logical,intent(in) :: triplet_manifold
double precision,intent(in) :: eta double precision,intent(in) :: eta
integer,intent(in) :: nBas integer,intent(in) :: nBas
integer,intent(in) :: nC integer,intent(in) :: nC
@ -16,6 +17,7 @@ subroutine BSE2_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF,eGF,OmBSE,X
integer,intent(in) :: nR integer,intent(in) :: nR
integer,intent(in) :: nS integer,intent(in) :: nS
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
double precision,intent(in) :: eHF(nBas) double precision,intent(in) :: eHF(nBas)
double precision,intent(in) :: eGF(nBas) double precision,intent(in) :: eGF(nBas)
double precision,intent(in) :: OmBSE(nS) double precision,intent(in) :: OmBSE(nS)
@ -24,7 +26,7 @@ subroutine BSE2_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF,eGF,OmBSE,X
! Local variables ! Local variables
logical :: dTDA = .false. logical :: dTDA = .true.
integer :: ia integer :: ia
integer,parameter :: maxS = 10 integer,parameter :: maxS = 10
double precision :: gapGF double precision :: gapGF
@ -34,21 +36,17 @@ subroutine BSE2_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF,eGF,OmBSE,X
double precision,allocatable :: X(:) double precision,allocatable :: X(:)
double precision,allocatable :: Y(:) double precision,allocatable :: Y(:)
double precision,allocatable :: Ap_dyn(:,:) double precision,allocatable :: A_dyn(:,:)
double precision,allocatable :: Am_dyn(:,:) double precision,allocatable :: ZA_dyn(:,:)
double precision,allocatable :: ZAp_dyn(:,:)
double precision,allocatable :: ZAm_dyn(:,:)
double precision,allocatable :: Bp_dyn(:,:) double precision,allocatable :: B_dyn(:,:)
double precision,allocatable :: Bm_dyn(:,:) double precision,allocatable :: ZB_dyn(:,:)
double precision,allocatable :: ZBp_dyn(:,:)
double precision,allocatable :: ZBm_dyn(:,:)
! Memory allocation ! Memory allocation
allocate(OmDyn(nS),ZDyn(nS),X(nS),Y(nS),Ap_dyn(nS,nS),ZAp_dyn(nS,nS)) allocate(OmDyn(nS),ZDyn(nS),X(nS),Y(nS),A_dyn(nS,nS),ZA_dyn(nS,nS))
if(.not.dTDA) allocate(Am_dyn(nS,nS),ZAm_dyn(nS,nS),Bp_dyn(nS,nS),Bm_dyn(nS,nS),ZBp_dyn(nS,nS),ZBm_dyn(nS,nS)) if(.not.dTDA) allocate(B_dyn(nS,nS),ZB_dyn(nS,nS))
gapGF = eGF(nO+1) - eGF(nO) gapGF = eGF(nO+1) - eGF(nO)
@ -63,42 +61,32 @@ subroutine BSE2_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eHF,eGF,OmBSE,X
X(:) = 0.5d0*(XpY(ia,:) + XmY(ia,:)) X(:) = 0.5d0*(XpY(ia,:) + XmY(ia,:))
Y(:) = 0.5d0*(XpY(ia,:) - XmY(ia,:)) Y(:) = 0.5d0*(XpY(ia,:) - XmY(ia,:))
! First-order correction ! Resonant part of the BSE correction for dynamical TDA
call BSE2_A_matrix_dynamic(singlet_manifold,triplet_manifold,eta,nBas,nC,nO,nV,nR,nS,1d0, &
ERI(:,:,:,:),eHF(:),eGF(:),OmBSE(ia),A_dyn(:,:),ZA_dyn(:,:))
if(dTDA) then if(dTDA) then
! Resonant part of the BSE correction for dynamical TDA ZDyn(ia) = dot_product(X(:),matmul(ZA_dyn(:,:),X(:)))
OmDyn(ia) = dot_product(X(:),matmul(A_dyn(:,:),X(:)))
call BSE2_A_matrix_dynamic(eta,nBas,nC,nO,nV,nR,nS,1d0,eHF(:),eGF(:),OmBSE(ia),Ap_dyn(:,:))
! Renormalization factor of the resonant parts for dynamical TDA
call BSE2_ZA_matrix_dynamic(eta,nBas,nC,nO,nV,nR,nS,1d0,eHF(:),eGF(:),OmBSE(ia),ZAp_dyn(:,:))
ZDyn(ia) = dot_product(X(:),matmul(ZAp_dyn(:,:),X(:)))
OmDyn(ia) = dot_product(X(:),matmul(Ap_dyn(:,:),X(:)))
else else
! Resonant and anti-resonant part of the BSE correction ! Anti-resonant part of the BSE correction
! call Bethe_Salpeter_AB_matrix_dynamic(eta,nBas,nC,nO,nV,nR,nS,1d0,eHF(:),eGF(:),OmBSE(ia), & call BSE2_B_matrix_dynamic(singlet_manifold,triplet_manifold,eta,nBas,nC,nO,nV,nR,nS,1d0, &
! Ap_dyn(:,:),Am_dyn(:,:),Bp_dyn(:,:),Bm_dyn(:,:)) ERI(:,:,:,:),eHF(:),eGF(:),OmBSE(ia),B_dyn(:,:),ZB_dyn(:,:))
! Renormalization factor of the resonant and anti-resonant parts ZDyn(ia) = dot_product(X(:),matmul(ZA_dyn(:,:),X(:))) &
- dot_product(Y(:),matmul(ZA_dyn(:,:),Y(:))) &
+ dot_product(X(:),matmul(ZB_dyn(:,:),Y(:))) &
- dot_product(Y(:),matmul(ZB_dyn(:,:),X(:)))
! call Bethe_Salpeter_ZAB_matrix_dynamic(eta,nBas,nC,nO,nV,nR,nS,1d0,eHF(:),eGF(:),OmBSE(ia), & OmDyn(ia) = dot_product(X(:),matmul(A_dyn(:,:),X(:))) &
! ZAp_dyn(:,:),ZAm_dyn(:,:),ZBp_dyn(:,:),ZBm_dyn(:,:)) - dot_product(Y(:),matmul(A_dyn(:,:),Y(:))) &
+ dot_product(X(:),matmul(B_dyn(:,:),Y(:))) &
ZDyn(ia) = dot_product(X(:),matmul(ZAp_dyn(:,:),X(:))) & - dot_product(Y(:),matmul(B_dyn(:,:),X(:)))
- dot_product(Y(:),matmul(ZAm_dyn(:,:),Y(:))) &
+ dot_product(X(:),matmul(ZBp_dyn(:,:),Y(:))) &
- dot_product(Y(:),matmul(ZBm_dyn(:,:),X(:)))
OmDyn(ia) = dot_product(X(:),matmul(Ap_dyn(:,:),X(:))) &
- dot_product(Y(:),matmul(Am_dyn(:,:),Y(:))) &
+ dot_product(X(:),matmul(Bp_dyn(:,:),Y(:))) &
- dot_product(Y(:),matmul(Bm_dyn(:,:),X(:)))
end if end if

View File

@ -25,7 +25,7 @@ subroutine Bethe_Salpeter_dynamic_perturbation(TDA,eta,nBas,nC,nO,nV,nR,nS,eGW,O
! Local variables ! Local variables
logical :: dTDA = .false. logical :: dTDA = .true.
integer :: ia integer :: ia
integer,parameter :: maxS = 10 integer,parameter :: maxS = 10
double precision :: gapGW double precision :: gapGW

View File

@ -83,7 +83,7 @@ subroutine G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA, &
! Compute linear response ! Compute linear response
call linear_response(ispin,.true.,TDA,.false.,eta,nBas,nC,nO,nV,nR,nS,1d0,eHF,ERI, & call linear_response(ispin,.true.,.false.,.false.,eta,nBas,nC,nO,nV,nR,nS,1d0,eHF,ERI, &
rho(:,:,:,ispin),EcRPA(ispin),Omega(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin)) rho(:,:,:,ispin),EcRPA(ispin),Omega(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin))
! Compute correlation part of the self-energy ! Compute correlation part of the self-energy

View File

@ -112,7 +112,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSE
if(.not. GW0 .or. nSCF == 0) then if(.not. GW0 .or. nSCF == 0) then
call linear_response(ispin,.true.,TDA,.false.,eta,nBas,nC,nO,nV,nR,nS,1d0,eGW,ERI, & call linear_response(ispin,.true.,.false.,.false.,eta,nBas,nC,nO,nV,nR,nS,1d0,eGW,ERI, &
rho(:,:,:,ispin),EcRPA(ispin),Omega(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin)) rho(:,:,:,ispin),EcRPA(ispin),Omega(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin))
endif endif

View File

@ -141,7 +141,7 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,
if(.not. GW0 .or. nSCF == 0) then if(.not. GW0 .or. nSCF == 0) then
call linear_response(ispin,.true.,TDA,.false.,eta,nBas,nC,nO,nV,nR,nS,1d0,eGW,ERI_MO_basis, & call linear_response(ispin,.true.,.false.,.false.,eta,nBas,nC,nO,nV,nR,nS,1d0,eGW,ERI_MO_basis, &
rho(:,:,:,ispin),EcRPA(ispin),Omega(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin)) rho(:,:,:,ispin),EcRPA(ispin),Omega(:,ispin),XpY(:,:,ispin),XmY(:,:,ispin))
endif endif