easyconfigs-it4i/m/MRCC/mrcc_files/dfint_mid_OUT_der.f
2024-07-25 10:27:17 +02:00

97 lines
2.6 KiB
Fortran
Executable File

! Set some necessary variables for the integral calculations
ccontr=nicontr*njcontr*nkcontr
nckl=nc12*nkcontr
nclkj=nckl*njcontr
ncklp=nckl*njprim
nc12p=nc12*nkprim
nckl1=nckl-1
nclkj1=nclkj-1
nc121=nc12-1
! Allocate memory
it2=imem
imem=imem+nc12*nkprim
kbuff=imem
imem=imem+nc12
kbuff1=imem-1
it3=imem
imem=imem+nc12*nkcontr*njprim
jbuff=imem
imem=imem+nc12*nkcontr
jbuff1=imem-1
it4=imem
imem=imem+nc12*nkcontr*njcontr*niprim
ibuff=imem
imem=imem+nc12*nkcontr*njcontr
ibuff1=imem-1
if(max(imem,imem+nc12)-imem1.gt.maxcor) then
write(iout,*)
write(iout,*) 'Insufficient memory for integral calculation! '
write(iout,*) 'Increase the memory available to the program '
write(iout,*) 'or run integral-direct calculations! '
call mrccend(1)
endif
! Loop over primitives
ptol=itol/dfloat(max(1,niprim*njprim*nkprim))
cf0=cf(0)
cf02=cf0*cf0
nzip=0
do var_c=1,nkprim
rc(var_c)=1.d0/gexpk(var_c)
enddo
jlength=it4-nclkj
xab=ax-bx
yab=ay-by
zab=az-bz
b2=2.d0*gexpj(1:njprim)
do iprim=1,niprim
ptoli=ptol
icc=1.d0
if(ip(iprim).ne.0) then
icc=gci(iprim,ip(iprim))
ptoli=ptol*niprim
endif
a=gexpi(iprim)
a2=2.d0*a
nzjp=0
jlength=jlength+nclkj
do jprim=1,njprim
jcc=icc
ncklj=it3+(jprim-1)*nckl
ptolj=ptoli
if(jp(jprim).ne.0) then
jcc=jcc*gcj(jprim,jp(jprim))
ncklj=jlength+(jp(jprim)-1)*nckl
ptolj=ptoli*njprim
endif
if(dpremat(jprim,iprim).gt.ptolj) then
b=gexpj(jprim)
p=a+b
rp=1.d0/p
ap=a*rp
bp=b*rp
px=ap*ax+bp*bx
py=ap*ay+bp*by
pz=ap*az+bp*bz
xpa=px-ax
ypa=py-ay
zpa=pz-az
xpq=px-cx
ypq=py-cy
zpq=pz-cz
norm2=34.98683665524972569252564335974310d0*dexp(-ap*b*sb2)*rp
rp=0.5d0*rp
argij=p*(xpq*xpq+ypq*ypq+zpq*zpq)
do kprim=1,nkprim
kcc=jcc
ij=it2+(kprim-1)*nc12
if(kp(kprim).ne.0) then
kcc=kcc*gck(kprim,kp(kprim))
ij=ncklj+(kp(kprim)-1)*nc12
endif
c=gexpk(kprim)
psq=1.d0/(p+c)
alp=c*psq
arg=alp*argij
alq=p*psq
norm=norm2*dsqrt(psq)*rc(kprim)*kcc