4
1
mirror of https://github.com/pfloos/quack synced 2024-07-17 16:33:43 +02:00
quack/src/MCQC/read_integrals.f90

115 lines
2.3 KiB
Fortran
Raw Normal View History

2019-02-07 22:49:12 +01:00
subroutine read_integrals(nBas,S,T,V,Hc,G)
! Read one- and two-electron integrals from files
implicit none
! Input variables
integer,intent(in) :: nBas
! Local variables
logical :: debug
integer :: mu,nu,la,si
double precision :: Ov,Kin,Nuc,ERI
! Output variables
double precision,intent(out) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas),G(nBas,nBas,nBas,nBas)
! Open file with integrals
debug = .false.
open(unit=8 ,file='int/Ov.dat')
open(unit=9 ,file='int/Kin.dat')
open(unit=10,file='int/Nuc.dat')
open(unit=11,file='int/ERI.dat')
! Read overlap integrals
S = 0d0
do
read(8,*,end=8) mu,nu,Ov
S(mu,nu) = Ov
enddo
8 close(unit=8)
! Read kinetic integrals
T = 0d0
do
read(9,*,end=9) mu,nu,Kin
2019-03-13 11:34:51 +01:00
T(mu,nu) = Kin
2019-02-07 22:49:12 +01:00
enddo
9 close(unit=9)
! Read nuclear integrals
V = 0d0
do
read(10,*,end=10) mu,nu,Nuc
V(mu,nu) = Nuc
enddo
10 close(unit=10)
! Define core Hamiltonian
Hc = T + V
! Read nuclear integrals
G = 0d0
do
2019-03-13 11:34:51 +01:00
read(11,*,end=11) mu,nu,la,si,ERI
! (12|34)
2019-02-07 22:49:12 +01:00
G(mu,nu,la,si) = ERI
2019-03-13 11:34:51 +01:00
! (21|34)
G(nu,mu,la,si) = ERI
! (12|43)
G(mu,nu,si,la) = ERI
! (21|43)
2019-02-07 22:49:12 +01:00
G(nu,mu,si,la) = ERI
2019-03-13 11:34:51 +01:00
! (34|12)
G(la,si,mu,nu) = ERI
! (43|12)
G(si,la,mu,nu) = ERI
! (34|21)
G(la,si,nu,mu) = ERI
! (43|21)
2019-02-07 22:49:12 +01:00
G(si,la,nu,mu) = ERI
enddo
11 close(unit=11)
! Print results
if(debug) then
write(*,'(A28)') '----------------------'
write(*,'(A28)') 'Overlap integrals'
write(*,'(A28)') '----------------------'
call matout(nBas,nBas,S)
write(*,*)
write(*,'(A28)') '----------------------'
write(*,'(A28)') 'Kinetic integrals'
write(*,'(A28)') '----------------------'
call matout(nBas,nBas,T)
write(*,*)
write(*,'(A28)') '----------------------'
write(*,'(A28)') 'Nuclear integrals'
write(*,'(A28)') '----------------------'
call matout(nBas,nBas,V)
write(*,*)
write(*,'(A28)') '----------------------'
write(*,'(A28)') 'Electron repulsion integrals'
write(*,'(A28)') '----------------------'
do la=1,nBas
do si=1,nBas
call matout(nBas,nBas,G(1,1,la,si))
enddo
enddo
write(*,*)
endif
end subroutine read_integrals