mirror of
https://github.com/pfloos/quack
synced 2024-12-22 20:35:36 +01:00
qsUGW works
This commit is contained in:
parent
78927741d7
commit
b75798078b
@ -9,7 +9,7 @@
|
|||||||
# GF: maxSCF thresh DIIS n_diis lin eta renorm
|
# GF: maxSCF thresh DIIS n_diis lin eta renorm
|
||||||
256 0.00001 T 5 T 0.0 3
|
256 0.00001 T 5 T 0.0 3
|
||||||
# GW/GT: maxSCF thresh DIIS n_diis lin eta COHSEX SOSEX TDA_W G0W GW0
|
# GW/GT: maxSCF thresh DIIS n_diis lin eta COHSEX SOSEX TDA_W G0W GW0
|
||||||
128 0.00001 T 5 T 0.00367493 F F T F F
|
128 0.00001 T 5 T 0.00367493 F F F F F
|
||||||
# ACFDT: AC Kx XBS
|
# ACFDT: AC Kx XBS
|
||||||
F F T
|
F F T
|
||||||
# BSE: BSE dBSE dTDA evDyn
|
# BSE: BSE dBSE dTDA evDyn
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,ENuc,P,T,V,J,K,F,SigC,Z,EcRPA,EqsGW)
|
subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,ENuc,P,T,V,J,K,F,SigC,Z,EcRPA,EqsGW,dipole)
|
||||||
|
|
||||||
|
|
||||||
! Print one-electron energies and other stuff for qsGW
|
! Print one-electron energies and other stuff for qsGW
|
||||||
@ -14,10 +14,11 @@ subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,ENuc,P,T,V,J,K,F,SigC,Z
|
|||||||
double precision,intent(in) :: T(nBas,nBas),V(nBas,nBas)
|
double precision,intent(in) :: T(nBas,nBas),V(nBas,nBas)
|
||||||
double precision,intent(in) :: J(nBas,nBas),K(nBas,nBas),F(nBas,nBas)
|
double precision,intent(in) :: J(nBas,nBas),K(nBas,nBas),F(nBas,nBas)
|
||||||
double precision,intent(in) :: Z(nBas),SigC(nBas,nBas)
|
double precision,intent(in) :: Z(nBas),SigC(nBas,nBas)
|
||||||
|
double precision,intent(in) :: dipole(ncart)
|
||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
integer :: x,HOMO,LUMO
|
integer :: x,ixyz,HOMO,LUMO
|
||||||
double precision :: Gap,ET,EV,EJ,Ex,Ec
|
double precision :: Gap,ET,EV,EJ,Ex,Ec
|
||||||
double precision,external :: trace_matrix
|
double precision,external :: trace_matrix
|
||||||
|
|
||||||
@ -92,6 +93,10 @@ subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,ENuc,P,T,V,J,K,F,SigC,Z
|
|||||||
write(*,'(A32,1X,F16.10)') ' Nuclear repulsion ',ENuc
|
write(*,'(A32,1X,F16.10)') ' Nuclear repulsion ',ENuc
|
||||||
write(*,'(A32,1X,F16.10)') ' qsGW energy ',ENuc + EqsGW
|
write(*,'(A32,1X,F16.10)') ' qsGW energy ',ENuc + EqsGW
|
||||||
write(*,'(A50)') '---------------------------------------'
|
write(*,'(A50)') '---------------------------------------'
|
||||||
|
write(*,'(A35)') ' Dipole moment (Debye) '
|
||||||
|
write(*,'(10X,4A10)') 'X','Y','Z','Tot.'
|
||||||
|
write(*,'(10X,4F10.6)') (dipole(ixyz)*auToD,ixyz=1,ncart),norm2(dipole)*auToD
|
||||||
|
write(*,'(A50)') '-----------------------------------------'
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
write(*,'(A50)') '---------------------------------------'
|
write(*,'(A50)') '---------------------------------------'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA, &
|
subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA, &
|
||||||
G0W,GW0,dBSE,dTDA,evDyn,singlet,triplet,eta,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,S,X,T,V, &
|
G0W,GW0,dBSE,dTDA,evDyn,singlet,triplet,eta,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,ERHF, &
|
||||||
Hc,ERI_AO_basis,ERI_MO_basis,dipole_int,PHF,cHF,eHF)
|
S,X,T,V,Hc,ERI_AO,ERI_MO,dipole_int_AO,dipole_int_MO,PHF,cHF,eHF)
|
||||||
|
|
||||||
! Perform a quasiparticle self-consistent GW calculation
|
! Perform a quasiparticle self-consistent GW calculation
|
||||||
|
|
||||||
@ -28,8 +28,13 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSE
|
|||||||
logical,intent(in) :: singlet
|
logical,intent(in) :: singlet
|
||||||
logical,intent(in) :: triplet
|
logical,intent(in) :: triplet
|
||||||
double precision,intent(in) :: eta
|
double precision,intent(in) :: eta
|
||||||
integer,intent(in) :: nBas,nC,nO,nV,nR,nS
|
|
||||||
|
integer,intent(in) :: nNuc
|
||||||
|
double precision,intent(in) :: ZNuc(nNuc)
|
||||||
|
double precision,intent(in) :: rNuc(nNuc,ncart)
|
||||||
double precision,intent(in) :: ENuc
|
double precision,intent(in) :: ENuc
|
||||||
|
|
||||||
|
integer,intent(in) :: nBas,nC,nO,nV,nR,nS
|
||||||
double precision,intent(in) :: ERHF
|
double precision,intent(in) :: ERHF
|
||||||
double precision,intent(in) :: eHF(nBas)
|
double precision,intent(in) :: eHF(nBas)
|
||||||
double precision,intent(in) :: cHF(nBas,nBas)
|
double precision,intent(in) :: cHF(nBas,nBas)
|
||||||
@ -39,9 +44,10 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSE
|
|||||||
double precision,intent(in) :: V(nBas,nBas)
|
double precision,intent(in) :: V(nBas,nBas)
|
||||||
double precision,intent(in) :: Hc(nBas,nBas)
|
double precision,intent(in) :: Hc(nBas,nBas)
|
||||||
double precision,intent(in) :: X(nBas,nBas)
|
double precision,intent(in) :: X(nBas,nBas)
|
||||||
double precision,intent(in) :: ERI_AO_basis(nBas,nBas,nBas,nBas)
|
double precision,intent(in) :: ERI_AO(nBas,nBas,nBas,nBas)
|
||||||
double precision,intent(inout):: ERI_MO_basis(nBas,nBas,nBas,nBas)
|
double precision,intent(inout):: ERI_MO(nBas,nBas,nBas,nBas)
|
||||||
double precision,intent(in) :: dipole_int(nBas,nBas,ncart)
|
double precision,intent(in) :: dipole_int_AO(nBas,nBas,ncart)
|
||||||
|
double precision,intent(in) :: dipole_int_MO(nBas,nBas,ncart)
|
||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
@ -57,6 +63,8 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSE
|
|||||||
double precision :: Conv
|
double precision :: Conv
|
||||||
double precision :: rcond
|
double precision :: rcond
|
||||||
double precision,external :: trace_matrix
|
double precision,external :: trace_matrix
|
||||||
|
double precision :: dipole(ncart)
|
||||||
|
|
||||||
double precision,allocatable :: error_diis(:,:)
|
double precision,allocatable :: error_diis(:,:)
|
||||||
double precision,allocatable :: F_diis(:,:)
|
double precision,allocatable :: F_diis(:,:)
|
||||||
double precision,allocatable :: OmRPA(:)
|
double precision,allocatable :: OmRPA(:)
|
||||||
@ -153,28 +161,28 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSE
|
|||||||
|
|
||||||
! Buid Coulomb matrix
|
! Buid Coulomb matrix
|
||||||
|
|
||||||
call Coulomb_matrix_AO_basis(nBas,P,ERI_AO_basis,J)
|
call Coulomb_matrix_AO_basis(nBas,P,ERI_AO,J)
|
||||||
|
|
||||||
! Compute exchange part of the self-energy
|
! Compute exchange part of the self-energy
|
||||||
|
|
||||||
call exchange_matrix_AO_basis(nBas,P,ERI_AO_basis,K)
|
call exchange_matrix_AO_basis(nBas,P,ERI_AO,K)
|
||||||
|
|
||||||
! AO to MO transformation of two-electron integrals
|
! AO to MO transformation of two-electron integrals
|
||||||
|
|
||||||
call AOtoMO_integral_transform(1,1,1,1,nBas,c,ERI_AO_basis,ERI_MO_basis)
|
call AOtoMO_integral_transform(1,1,1,1,nBas,c,ERI_AO,ERI_MO)
|
||||||
|
|
||||||
! Compute linear response
|
! Compute linear response
|
||||||
|
|
||||||
if(.not. GW0 .or. nSCF == 0) then
|
if(.not. GW0 .or. nSCF == 0) then
|
||||||
|
|
||||||
call linear_response(ispin,.true.,TDA_W,.false.,eta,nBas,nC,nO,nV,nR,nS,1d0,eGW,ERI_MO_basis, &
|
call linear_response(ispin,.true.,TDA_W,.false.,eta,nBas,nC,nO,nV,nR,nS,1d0,eGW,ERI_MO, &
|
||||||
OmRPA,rho_RPA,EcRPA,OmRPA,XpY_RPA,XmY_RPA)
|
OmRPA,rho_RPA,EcRPA,OmRPA,XpY_RPA,XmY_RPA)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
! Compute correlation part of the self-energy
|
! Compute correlation part of the self-energy
|
||||||
|
|
||||||
call excitation_density(nBas,nC,nO,nR,nS,ERI_MO_basis,XpY_RPA,rho_RPA)
|
call excitation_density(nBas,nC,nO,nR,nS,ERI_MO,XpY_RPA,rho_RPA)
|
||||||
|
|
||||||
if(G0W) then
|
if(G0W) then
|
||||||
|
|
||||||
@ -226,8 +234,8 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSE
|
|||||||
|
|
||||||
! Print results
|
! Print results
|
||||||
|
|
||||||
! call print_excitation('RPA ',ispin,nS,Omega(:,ispin))
|
call dipole_moment(nBas,P,nNuc,ZNuc,rNuc,dipole_int_AO,dipole)
|
||||||
call print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,ENuc,P,T,V,J,K,F,SigCp,Z,EcRPA,EqsGW)
|
call print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,ENuc,P,T,V,J,K,F,SigCp,Z,EcRPA,EqsGW,dipole)
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
@ -268,7 +276,7 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSE
|
|||||||
|
|
||||||
if(BSE) then
|
if(BSE) then
|
||||||
|
|
||||||
call Bethe_Salpeter(TDA_W,TDA,dBSE,dTDA,evDyn,singlet,triplet,eta,nBas,nC,nO,nV,nR,nS,ERI_MO_basis,dipole_int, &
|
call Bethe_Salpeter(TDA_W,TDA,dBSE,dTDA,evDyn,singlet,triplet,eta,nBas,nC,nO,nV,nR,nS,ERI_MO,dipole_int_MO, &
|
||||||
eGW,eGW,EcBSE)
|
eGW,eGW,EcBSE)
|
||||||
|
|
||||||
if(exchange_kernel) then
|
if(exchange_kernel) then
|
||||||
@ -303,7 +311,7 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSE
|
|||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
call ACFDT(exchange_kernel,doXBS,.true.,TDA_W,TDA,BSE,singlet,triplet,eta,nBas,nC,nO,nV,nR,nS,ERI_MO_basis,eGW,eGW,EcAC)
|
call ACFDT(exchange_kernel,doXBS,.true.,TDA_W,TDA,BSE,singlet,triplet,eta,nBas,nC,nO,nV,nR,nS,ERI_MO,eGW,eGW,EcAC)
|
||||||
|
|
||||||
write(*,*)
|
write(*,*)
|
||||||
write(*,*)'-------------------------------------------------------------------------------'
|
write(*,*)'-------------------------------------------------------------------------------'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
subroutine qsUGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA, &
|
subroutine qsUGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA, &
|
||||||
G0W,GW0,dBSE,dTDA,evDyn,spin_conserved,spin_flip,eta,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO, &
|
G0W,GW0,dBSE,dTDA,evDyn,spin_conserved,spin_flip,eta,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO, &
|
||||||
nV,nR,nS,EUHF,S,X,T,V,Hc,ERI_AO,ERI_aaaa,ERI_aabb,ERI_bbbb,dipole_int,dipole_int_aa, &
|
nV,nR,nS,EUHF,S,X,T,V,Hc,ERI_AO,ERI_aaaa,ERI_aabb,ERI_bbbb,dipole_int_AO,dipole_int_aa, &
|
||||||
dipole_int_bb,PHF,cHF,eHF)
|
dipole_int_bb,PHF,cHF,eHF)
|
||||||
|
|
||||||
! Perform a quasiparticle self-consistent GW calculation
|
! Perform a quasiparticle self-consistent GW calculation
|
||||||
@ -55,7 +55,7 @@ subroutine qsUGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOS
|
|||||||
double precision,intent(inout):: ERI_aaaa(nBas,nBas,nBas,nBas)
|
double precision,intent(inout):: ERI_aaaa(nBas,nBas,nBas,nBas)
|
||||||
double precision,intent(inout):: ERI_aabb(nBas,nBas,nBas,nBas)
|
double precision,intent(inout):: ERI_aabb(nBas,nBas,nBas,nBas)
|
||||||
double precision,intent(inout):: ERI_bbbb(nBas,nBas,nBas,nBas)
|
double precision,intent(inout):: ERI_bbbb(nBas,nBas,nBas,nBas)
|
||||||
double precision,intent(in) :: dipole_int(nBas,nBas,ncart)
|
double precision,intent(in) :: dipole_int_AO(nBas,nBas,ncart)
|
||||||
double precision,intent(in) :: dipole_int_aa(nBas,nBas,ncart)
|
double precision,intent(in) :: dipole_int_aa(nBas,nBas,ncart)
|
||||||
double precision,intent(in) :: dipole_int_bb(nBas,nBas,ncart)
|
double precision,intent(in) :: dipole_int_bb(nBas,nBas,ncart)
|
||||||
|
|
||||||
@ -224,12 +224,12 @@ subroutine qsUGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOS
|
|||||||
|
|
||||||
if(G0W) then
|
if(G0W) then
|
||||||
|
|
||||||
call unrestricted_self_energy_correlation_diag(eta,nBas,nC,nO,nV,nR,nS_sc,eHF,OmRPA,rho_RPA,SigC)
|
call unrestricted_self_energy_correlation(eta,nBas,nC,nO,nV,nR,nS_sc,eHF,OmRPA,rho_RPA,SigC)
|
||||||
call unrestricted_renormalization_factor(eta,nBas,nC,nO,nV,nR,nS_sc,eHF,OmRPA,rho_RPA,Z)
|
call unrestricted_renormalization_factor(eta,nBas,nC,nO,nV,nR,nS_sc,eHF,OmRPA,rho_RPA,Z)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
call unrestricted_self_energy_correlation_diag(eta,nBas,nC,nO,nV,nR,nS_sc,eGW,OmRPA,rho_RPA,SigC)
|
call unrestricted_self_energy_correlation(eta,nBas,nC,nO,nV,nR,nS_sc,eGW,OmRPA,rho_RPA,SigC)
|
||||||
call unrestricted_renormalization_factor(eta,nBas,nC,nO,nV,nR,nS_sc,eGW,OmRPA,rho_RPA,Z)
|
call unrestricted_renormalization_factor(eta,nBas,nC,nO,nV,nR,nS_sc,eGW,OmRPA,rho_RPA,Z)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
@ -298,7 +298,7 @@ subroutine qsUGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOS
|
|||||||
|
|
||||||
! Print results
|
! Print results
|
||||||
|
|
||||||
call dipole_moment(nBas,P(:,:,1)+P(:,:,2),nNuc,ZNuc,rNuc,dipole_int,dipole)
|
call dipole_moment(nBas,P(:,:,1)+P(:,:,2),nNuc,ZNuc,rNuc,dipole_int_AO,dipole)
|
||||||
call print_qsUGW(nBas,nO,S,nSCF,Conv,thresh,eGW,c,P,T,V,J,K,ENuc,EHF,SigC,Z,EcRPA,dipole)
|
call print_qsUGW(nBas,nO,S,nSCF,Conv,thresh,eGW,c,P,T,V,J,K,ENuc,EHF,SigC,Z,EcRPA,dipole)
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
@ -58,7 +58,8 @@ program QuAcK
|
|||||||
double precision,allocatable :: V(:,:)
|
double precision,allocatable :: V(:,:)
|
||||||
double precision,allocatable :: Hc(:,:)
|
double precision,allocatable :: Hc(:,:)
|
||||||
double precision,allocatable :: X(:,:)
|
double precision,allocatable :: X(:,:)
|
||||||
double precision,allocatable :: dipole_int(:,:,:)
|
double precision,allocatable :: dipole_int_AO(:,:,:)
|
||||||
|
double precision,allocatable :: dipole_int_MO(:,:,:)
|
||||||
double precision,allocatable :: dipole_int_aa(:,:,:)
|
double precision,allocatable :: dipole_int_aa(:,:,:)
|
||||||
double precision,allocatable :: dipole_int_bb(:,:,:)
|
double precision,allocatable :: dipole_int_bb(:,:,:)
|
||||||
double precision,allocatable :: ERI_AO(:,:,:,:)
|
double precision,allocatable :: ERI_AO(:,:,:,:)
|
||||||
@ -234,7 +235,7 @@ program QuAcK
|
|||||||
|
|
||||||
allocate(cHF(nBas,nBas,nspin),eHF(nBas,nspin),eG0W0(nBas,nspin),eG0T0(nBas,nspin),PHF(nBas,nBas,nspin), &
|
allocate(cHF(nBas,nBas,nspin),eHF(nBas,nspin),eG0W0(nBas,nspin),eG0T0(nBas,nspin),PHF(nBas,nBas,nspin), &
|
||||||
S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas),X(nBas,nBas),ERI_AO(nBas,nBas,nBas,nBas), &
|
S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas),X(nBas,nBas),ERI_AO(nBas,nBas,nBas,nBas), &
|
||||||
dipole_int(nBas,nBas,ncart))
|
dipole_int_AO(nBas,nBas,ncart),dipole_int_MO(nBas,nBas,ncart))
|
||||||
|
|
||||||
! Read integrals
|
! Read integrals
|
||||||
|
|
||||||
@ -247,7 +248,7 @@ program QuAcK
|
|||||||
else
|
else
|
||||||
|
|
||||||
call read_integrals(nBas,S,T,V,Hc,ERI_AO)
|
call read_integrals(nBas,S,T,V,Hc,ERI_AO)
|
||||||
call read_dipole_integrals(nBas,dipole_int)
|
call read_dipole_integrals(nBas,dipole_int_AO)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -278,7 +279,7 @@ program QuAcK
|
|||||||
|
|
||||||
call cpu_time(start_HF)
|
call cpu_time(start_HF)
|
||||||
call RHF(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,nNuc,ZNuc,rNuc,ENuc, &
|
call RHF(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,nNuc,ZNuc,rNuc,ENuc, &
|
||||||
nBas,nO,S,T,V,Hc,ERI_AO,dipole_int,X,ERHF,eHF,cHF,PHF)
|
nBas,nO,S,T,V,Hc,ERI_AO,dipole_int_AO,X,ERHF,eHF,cHF,PHF)
|
||||||
call cpu_time(end_HF)
|
call cpu_time(end_HF)
|
||||||
|
|
||||||
t_HF = end_HF - start_HF
|
t_HF = end_HF - start_HF
|
||||||
@ -298,7 +299,7 @@ program QuAcK
|
|||||||
|
|
||||||
call cpu_time(start_HF)
|
call cpu_time(start_HF)
|
||||||
call UHF(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,nNuc,ZNuc,rNuc,ENuc, &
|
call UHF(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,nNuc,ZNuc,rNuc,ENuc, &
|
||||||
nBas,nO,S,T,V,Hc,ERI_AO,dipole_int,X,EUHF,eHF,cHF,PHF)
|
nBas,nO,S,T,V,Hc,ERI_AO,dipole_int_AO,X,EUHF,eHF,cHF,PHF)
|
||||||
call cpu_time(end_HF)
|
call cpu_time(end_HF)
|
||||||
|
|
||||||
t_HF = end_HF - start_HF
|
t_HF = end_HF - start_HF
|
||||||
@ -316,7 +317,7 @@ program QuAcK
|
|||||||
call cpu_time(start_KS)
|
call cpu_time(start_KS)
|
||||||
call eDFT(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,nNuc,ZNuc,rNuc,ENuc,nBas,nEl,nC, &
|
call eDFT(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,nNuc,ZNuc,rNuc,ENuc,nBas,nEl,nC, &
|
||||||
nO,nV,nR,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell, &
|
nO,nV,nR,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell, &
|
||||||
max_ang_mom,min_exponent,max_exponent,S,T,V,Hc,X,ERI_AO,dipole_int)
|
max_ang_mom,min_exponent,max_exponent,S,T,V,Hc,X,ERI_AO,dipole_int_AO)
|
||||||
|
|
||||||
call cpu_time(end_KS)
|
call cpu_time(end_KS)
|
||||||
|
|
||||||
@ -367,8 +368,8 @@ program QuAcK
|
|||||||
! Read and transform dipole-related integrals
|
! Read and transform dipole-related integrals
|
||||||
|
|
||||||
allocate(dipole_int_aa(nBas,nBas,ncart),dipole_int_bb(nBas,nBas,ncart))
|
allocate(dipole_int_aa(nBas,nBas,ncart),dipole_int_bb(nBas,nBas,ncart))
|
||||||
dipole_int_aa(:,:,:) = dipole_int(:,:,:)
|
dipole_int_aa(:,:,:) = dipole_int_AO(:,:,:)
|
||||||
dipole_int_bb(:,:,:) = dipole_int(:,:,:)
|
dipole_int_bb(:,:,:) = dipole_int_AO(:,:,:)
|
||||||
do ixyz=1,ncart
|
do ixyz=1,ncart
|
||||||
call AOtoMO_transform(nBas,cHF(:,:,1),dipole_int_aa(:,:,ixyz))
|
call AOtoMO_transform(nBas,cHF(:,:,1),dipole_int_aa(:,:,ixyz))
|
||||||
call AOtoMO_transform(nBas,cHF(:,:,2),dipole_int_bb(:,:,ixyz))
|
call AOtoMO_transform(nBas,cHF(:,:,2),dipole_int_bb(:,:,ixyz))
|
||||||
@ -410,8 +411,9 @@ program QuAcK
|
|||||||
|
|
||||||
! Read and transform dipole-related integrals
|
! Read and transform dipole-related integrals
|
||||||
|
|
||||||
|
dipole_int_MO(:,:,:) = dipole_int_AO(:,:,:)
|
||||||
do ixyz=1,ncart
|
do ixyz=1,ncart
|
||||||
call AOtoMO_transform(nBas,cHF,dipole_int(:,:,ixyz))
|
call AOtoMO_transform(nBas,cHF,dipole_int_MO(:,:,ixyz))
|
||||||
end do
|
end do
|
||||||
|
|
||||||
! 4-index transform
|
! 4-index transform
|
||||||
@ -627,7 +629,7 @@ program QuAcK
|
|||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
call CIS(singlet,triplet,doCIS_D,nBas,nC,nO,nV,nR,nS,ERI_MO,dipole_int,eHF)
|
call CIS(singlet,triplet,doCIS_D,nBas,nC,nO,nV,nR,nS,ERI_MO,dipole_int_MO,eHF)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
call cpu_time(end_CIS)
|
call cpu_time(end_CIS)
|
||||||
@ -684,7 +686,7 @@ program QuAcK
|
|||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
call RPA(TDA,doACFDT,exchange_kernel,singlet,triplet,0d0,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int,eHF)
|
call RPA(TDA,doACFDT,exchange_kernel,singlet,triplet,0d0,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int_MO,eHF)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
call cpu_time(end_RPA)
|
call cpu_time(end_RPA)
|
||||||
@ -709,7 +711,7 @@ program QuAcK
|
|||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
call RPAx(TDA,doACFDT,exchange_kernel,singlet,triplet,0d0,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int,eHF)
|
call RPAx(TDA,doACFDT,exchange_kernel,singlet,triplet,0d0,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int_MO,eHF)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
call cpu_time(end_RPAx)
|
call cpu_time(end_RPAx)
|
||||||
@ -761,7 +763,7 @@ program QuAcK
|
|||||||
|
|
||||||
call cpu_time(start_GF2)
|
call cpu_time(start_GF2)
|
||||||
call G0F2(BSE,TDA,dBSE,dTDA,evDyn,singlet,triplet,linGF, &
|
call G0F2(BSE,TDA,dBSE,dTDA,evDyn,singlet,triplet,linGF, &
|
||||||
eta_GF,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int,eHF)
|
eta_GF,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int_MO,eHF)
|
||||||
call cpu_time(end_GF2)
|
call cpu_time(end_GF2)
|
||||||
|
|
||||||
t_GF2 = end_GF2 - start_GF2
|
t_GF2 = end_GF2 - start_GF2
|
||||||
@ -779,7 +781,7 @@ program QuAcK
|
|||||||
call cpu_time(start_GF2)
|
call cpu_time(start_GF2)
|
||||||
call evGF2(BSE,TDA,dBSE,dTDA,evDyn,maxSCF_GF,thresh_GF,n_diis_GF, &
|
call evGF2(BSE,TDA,dBSE,dTDA,evDyn,maxSCF_GF,thresh_GF,n_diis_GF, &
|
||||||
singlet,triplet,linGF,eta_GF,nBas,nC,nO,nV,nR,nS,ENuc,ERHF, &
|
singlet,triplet,linGF,eta_GF,nBas,nC,nO,nV,nR,nS,ENuc,ERHF, &
|
||||||
ERI_MO,dipole_int,eHF)
|
ERI_MO,dipole_int_MO,eHF)
|
||||||
call cpu_time(end_GF2)
|
call cpu_time(end_GF2)
|
||||||
|
|
||||||
t_GF2 = end_GF2 - start_GF2
|
t_GF2 = end_GF2 - start_GF2
|
||||||
@ -837,7 +839,7 @@ program QuAcK
|
|||||||
else
|
else
|
||||||
|
|
||||||
call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA,dBSE,dTDA,evDyn,singlet,triplet, &
|
call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA,dBSE,dTDA,evDyn,singlet,triplet, &
|
||||||
linGW,eta_GW,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int,eHF,eG0W0)
|
linGW,eta_GW,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int_MO,eHF,eG0W0)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -867,7 +869,7 @@ program QuAcK
|
|||||||
|
|
||||||
call evGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX, &
|
call evGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX, &
|
||||||
BSE,TDA_W,TDA,G0W,GW0,dBSE,dTDA,evDyn,singlet,triplet,eta_GW, &
|
BSE,TDA_W,TDA,G0W,GW0,dBSE,dTDA,evDyn,singlet,triplet,eta_GW, &
|
||||||
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int,eHF,eG0W0)
|
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int_MO,eHF,eG0W0)
|
||||||
end if
|
end if
|
||||||
call cpu_time(end_evGW)
|
call cpu_time(end_evGW)
|
||||||
|
|
||||||
@ -887,16 +889,16 @@ program QuAcK
|
|||||||
|
|
||||||
if(unrestricted) then
|
if(unrestricted) then
|
||||||
|
|
||||||
call qsUGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA, &
|
call qsUGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA, &
|
||||||
G0W,GW0,dBSE,dTDA,evDyn,spin_conserved,spin_flip,eta_GW,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO, &
|
G0W,GW0,dBSE,dTDA,evDyn,spin_conserved,spin_flip,eta_GW,nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO, &
|
||||||
nV,nR,nS,EUHF,S,X,T,V,Hc,ERI_AO,ERI_MO_aaaa,ERI_MO_aabb,ERI_MO_bbbb,dipole_int,dipole_int_aa, &
|
nV,nR,nS,EUHF,S,X,T,V,Hc,ERI_AO,ERI_MO_aaaa,ERI_MO_aabb,ERI_MO_bbbb,dipole_int_AO, &
|
||||||
dipole_int_bb,PHF,cHF,eHF)
|
dipole_int_aa,dipole_int_bb,PHF,cHF,eHF)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
call qsGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX, &
|
call qsGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX, &
|
||||||
BSE,TDA_W,TDA,G0W,GW0,dBSE,dTDA,evDyn,singlet,triplet,eta_GW, &
|
BSE,TDA_W,TDA,G0W,GW0,dBSE,dTDA,evDyn,singlet,triplet,eta_GW,nNuc,ZNuc,rNuc,ENuc, &
|
||||||
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,S,X,T,V,Hc,ERI_AO,ERI_MO,dipole_int,PHF,cHF,eHF)
|
nBas,nC,nO,nV,nR,nS,ERHF,S,X,T,V,Hc,ERI_AO,ERI_MO,dipole_int_AO,dipole_int_MO,PHF,cHF,eHF)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -919,7 +921,7 @@ program QuAcK
|
|||||||
call cpu_time(start_G0T0)
|
call cpu_time(start_G0T0)
|
||||||
call G0T0(doACFDT,exchange_kernel,doXBS,BSE,TDA_W,TDA, &
|
call G0T0(doACFDT,exchange_kernel,doXBS,BSE,TDA_W,TDA, &
|
||||||
dBSE,dTDA,evDyn,singlet,triplet,linGW,eta_GW, &
|
dBSE,dTDA,evDyn,singlet,triplet,linGW,eta_GW, &
|
||||||
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int,eHF,eG0T0)
|
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int_MO,eHF,eG0T0)
|
||||||
call cpu_time(end_G0T0)
|
call cpu_time(end_G0T0)
|
||||||
|
|
||||||
t_G0T0 = end_G0T0 - start_G0T0
|
t_G0T0 = end_G0T0 - start_G0T0
|
||||||
@ -937,7 +939,7 @@ program QuAcK
|
|||||||
call cpu_time(start_evGT)
|
call cpu_time(start_evGT)
|
||||||
call evGT(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS, &
|
call evGT(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS, &
|
||||||
BSE,TDA_W,TDA,dBSE,dTDA,evDyn,singlet,triplet,eta_GW, &
|
BSE,TDA_W,TDA,dBSE,dTDA,evDyn,singlet,triplet,eta_GW, &
|
||||||
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int,eHF,eG0T0)
|
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,dipole_int_MO,eHF,eG0T0)
|
||||||
call cpu_time(end_evGT)
|
call cpu_time(end_evGT)
|
||||||
|
|
||||||
t_evGT = end_evGT - start_evGT
|
t_evGT = end_evGT - start_evGT
|
||||||
@ -1050,7 +1052,7 @@ program QuAcK
|
|||||||
call cpu_time(start_G0W0)
|
call cpu_time(start_G0W0)
|
||||||
call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA, &
|
call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA_W,TDA, &
|
||||||
dBSE,dTDA,evDyn,singlet,triplet,linGW,eta_GW, &
|
dBSE,dTDA,evDyn,singlet,triplet,linGW,eta_GW, &
|
||||||
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_ERF_MO,dipole_int,eHF,eG0W0)
|
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_ERF_MO,dipole_int_MO,eHF,eG0W0)
|
||||||
call cpu_time(end_G0W0)
|
call cpu_time(end_G0W0)
|
||||||
|
|
||||||
t_G0W0 = end_G0W0 - start_G0W0
|
t_G0W0 = end_G0W0 - start_G0W0
|
||||||
@ -1064,7 +1066,7 @@ program QuAcK
|
|||||||
call cpu_time(start_G0T0)
|
call cpu_time(start_G0T0)
|
||||||
call G0T0(doACFDT,exchange_kernel,doXBS,BSE,TDA_W,TDA,dBSE,dTDA,evDyn, &
|
call G0T0(doACFDT,exchange_kernel,doXBS,BSE,TDA_W,TDA,dBSE,dTDA,evDyn, &
|
||||||
singlet,triplet,linGW,eta_GW, &
|
singlet,triplet,linGW,eta_GW, &
|
||||||
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_ERF_MO,dipole_int,eHF,eG0T0)
|
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_ERF_MO,dipole_int_MO,eHF,eG0T0)
|
||||||
call cpu_time(end_G0T0)
|
call cpu_time(end_G0T0)
|
||||||
|
|
||||||
t_G0T0 = end_G0T0 - start_G0T0
|
t_G0T0 = end_G0T0 - start_G0T0
|
||||||
|
Loading…
Reference in New Issue
Block a user