def Intgrl(N,R,Zeta1,Zeta2,Za,Zb):
"""
Declares the variables and compiles the integrals.
"""
global S12,T11,T12,T22,V11A,V12A,V22A,V11B,V12B,V22B,V1111,V2111,V2121,V2211,V2221,V2222
S12 = 0.0
T11 = 0.0
T12 = 0.0
T22 = 0.0
V11A = 0.0
V12A = 0.0
V22A = 0.0
V11B = 0.0
V12B = 0.0
V22B = 0.0
V1111 = 0.0
V2111 = 0.0
V2121 = 0.0
V2211 = 0.0
V2221 = 0.0
V2222 = 0.0
R2 = R*R
# The coefficients for the contracted Gaussian functions are below
Coeff = np.array([[1.00000,0.0000000,0.000000],
[0.678914,0.430129,0.000000],
[0.444635,0.535328,0.154329]])
Expon = np.array([[0.270950,0.000000,0.000000],
[0.151623,0.851819,0.000000],
[0.109818,0.405771,2.227660]])
D1 = np.zeros([3])
A1 = np.zeros([3])
D2 = np.zeros([3])
A2 = np.zeros([3])
# This loop constructs the contracted Gaussian functions
for i in range(N):
A1[i] = Expon[N-1,i]*(Zeta1**2)
D1[i] = Coeff[N-1,i]*((2.0*A1[i]/np.pi)**0.75)
A2[i] = Expon[N-1,i]*(Zeta2**2)
D2[i] = Coeff[N-1,i]*((2.0*A2[i]/np.pi)**0.75)
# Calculate one electron integrals
# Centre A is first atom centre B is second atom
# Origin is on second atom
# V12A - off diagonal nuclear attraction to centre A etc.
for i in range(N):
for j in range(N):
# Rap2 - squared distance between centre A and centre P
Rap = A2[j]*R/(A1[i]+A2[j])
Rap2 = Rap**2
Rbp2 = (R-Rap)**2
S12 = S12 + S_int(A1[i],A2[j],R2)*D1[i]*D2[j]
T11 = T11 + T_int(A1[i],A1[j],0.0)*D1[i]*D1[j]
T12 = T12 + T_int(A1[i],A2[j],R2)*D1[i]*D2[j]
T22 = T22 + T_int(A2[i],A2[j],0.0)*D2[i]*D2[j]
V11A = V11A + V_int(A1[i],A1[j],0.0,0.0,Za)*D1[i]*D1[j]
V12A = V12A + V_int(A1[i],A2[j],R2,Rap2,Za)*D1[i]*D2[j]
V22A = V22A + V_int(A2[i],A2[j],0.0,R2,Za)*D2[i]*D2[j]
V11B = V11B + V_int(A1[i],A1[j],0.0,R2,Zb)*D1[i]*D1[j]
V12B = V12B + V_int(A1[i],A2[j],R2,Rbp2,Zb)*D1[i]*D2[j]
V22B = V22B + V_int(A2[i],A2[j],0.0,0.0,Zb)*D2[i]*D2[j]
# Calculate two electron integrals
for i in range(N):
for j in range(N):
for k in range(N):
for l in range(N):
Rap = A2[i]*R/(A2[i]+A1[j])
Rbp = R - Rap
Raq = A2[k]*R/(A2[k]+A1[l])
Rbq = R - Raq
Rpq = Rap - Raq
Rap2 = Rap*Rap
Rbp2 = Rbp*Rbp
Raq2 = Raq*Raq
Rbq2 = Rbq*Rbq
Rpq2 = Rpq*Rpq
V1111 = V1111 + TwoE(A1[i],A1[j],A1[k],A1[l],0.0,0.0,0.0)*D1[i]*D1[j]*D1[k]*D1[l]
V2111 = V2111 + TwoE(A2[i],A1[j],A1[k],A1[l],R2,0.0,Rap2)*D2[i]*D1[j]*D1[k]*D1[l]
V2121 = V2121 + TwoE(A2[i],A1[j],A2[k],A1[l],R2,R2,Rpq2)*D2[i]*D1[j]*D2[k]*D1[l]
V2211 = V2211 + TwoE(A2[i],A2[j],A1[k],A1[l],0.0,0.0,R2)*D2[i]*D2[j]*D1[k]*D1[l]
V2221 = V2221 + TwoE(A2[i],A2[j],A2[k],A1[l],0.0,R2,Rbq2)*D2[i]*D2[j]*D2[k]*D1[l]
V2222 = V2222 + TwoE(A2[i],A2[j],A2[k],A2[l],0.0,0.0,0.0)*D2[i]*D2[j]*D2[k]*D2[l]
return