mirror of
https://gitlab.com/scemama/eplf
synced 2024-10-31 19:23:55 +01:00
Improved AO overlap
This commit is contained in:
parent
42d8ba45ec
commit
dad4163808
BIN
EZFIO.tar.gz
BIN
EZFIO.tar.gz
Binary file not shown.
BIN
bin/to_ezfio.exe
BIN
bin/to_ezfio.exe
Binary file not shown.
@ -241,8 +241,8 @@ BEGIN_PROVIDER [ real, eplf_value_p ]
|
|||||||
aa = min(1.d0,aa)
|
aa = min(1.d0,aa)
|
||||||
ab = min(1.d0,ab)
|
ab = min(1.d0,ab)
|
||||||
aa = -dlog(aa)
|
aa = -dlog(aa)
|
||||||
ab = -dlog(ab)
|
|
||||||
aa = dsqrt(aa)
|
aa = dsqrt(aa)
|
||||||
|
ab = -dlog(ab)
|
||||||
ab = dsqrt(ab)
|
ab = dsqrt(ab)
|
||||||
eplf_value_p = (aa-ab)/(aa+ab+eps)
|
eplf_value_p = (aa-ab)/(aa+ab+eps)
|
||||||
else
|
else
|
||||||
@ -381,28 +381,6 @@ double precision function ao_eplf_integral_primitive_oneD(a,xa,i,b,xb,j,gmma,xr)
|
|||||||
|
|
||||||
end function
|
end function
|
||||||
|
|
||||||
double precision function rint(i,xa,a,j,xb,b,xr,gmma)
|
|
||||||
implicit double precision(a-h,o-z)
|
|
||||||
include 'constants.F'
|
|
||||||
beta=a+b+gmma
|
|
||||||
w=1.d0/dsqrt(beta)
|
|
||||||
alpha=a*xa**2+b*xb**2+gmma*xr**2
|
|
||||||
delta=xa*a+xb*b+xr*gmma
|
|
||||||
u=delta/beta-xa
|
|
||||||
v=delta/beta-xb
|
|
||||||
ac=0.d0
|
|
||||||
do n=0,i
|
|
||||||
do m=0,j
|
|
||||||
if(mod(n+m,2).eq.0)then
|
|
||||||
k=(n+m)/2
|
|
||||||
f=binom(n,i)*binom(m,j)*fact2(n+m-1)
|
|
||||||
ac=ac+u**(i-n)*v**(j-m)*w**(n+m)*f/2.d0**k
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
rint=ac*dsqrt(pi)*w*dexp(-alpha+delta**2/beta)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
double precision function ao_eplf_integral(i,j,gmma,center)
|
double precision function ao_eplf_integral(i,j,gmma,center)
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -141,7 +141,7 @@ double precision function primitive_overlap_oneD(a,xa,i,b,xb,j)
|
|||||||
real :: xp
|
real :: xp
|
||||||
real :: p
|
real :: p
|
||||||
double precision :: S(0:i+1,0:j)
|
double precision :: S(0:i+1,0:j)
|
||||||
double precision :: inv_p, di(max(i,j)), dj(j)
|
double precision :: inv_p, di(max(i,j)), dj(j), c
|
||||||
|
|
||||||
ASSERT (a>0.)
|
ASSERT (a>0.)
|
||||||
ASSERT (b>0.)
|
ASSERT (b>0.)
|
||||||
@ -153,15 +153,24 @@ double precision function primitive_overlap_oneD(a,xa,i,b,xb,j)
|
|||||||
xp = (a*xa+b*xb)
|
xp = (a*xa+b*xb)
|
||||||
inv_p = 1.d0/p
|
inv_p = 1.d0/p
|
||||||
xp = xp*inv_p
|
xp = xp*inv_p
|
||||||
S(0,0) = dexp(-a*b*inv_p*(xa-xb)**2)* dsqrt(pi*inv_p)
|
|
||||||
|
c = a*b*inv_p*(xa-xb)**2
|
||||||
|
!if ( c > 32.d0 ) then ! Cut-off on exp(-32)
|
||||||
|
! primitive_overlap_oneD = 0.d0
|
||||||
|
! return
|
||||||
|
!endif
|
||||||
|
|
||||||
|
c = dexp(-c)
|
||||||
|
|
||||||
|
S(0,0) = 1.d0
|
||||||
|
|
||||||
! Obara-Saika recursion
|
! Obara-Saika recursion
|
||||||
|
|
||||||
if (i>0) then
|
if (i>0) then
|
||||||
S(1,0) = (xp-xa) * S(0,0)
|
S(1,0) = xp-xa
|
||||||
endif
|
endif
|
||||||
if (j>0) then
|
if (j>0) then
|
||||||
S(0,1) = (xp-xb) * S(0,0)
|
S(0,1) = xp-xb
|
||||||
endif
|
endif
|
||||||
|
|
||||||
do ii=1,max(i,j)
|
do ii=1,max(i,j)
|
||||||
@ -187,7 +196,7 @@ double precision function primitive_overlap_oneD(a,xa,i,b,xb,j)
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
primitive_overlap_oneD = S(i,j)
|
primitive_overlap_oneD = S(i,j)*c* dsqrt(pi*inv_p)
|
||||||
|
|
||||||
end function
|
end function
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user