44 #include "../base/base_uses.f90"
47 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'ai_elec_field'
80 SUBROUTINE efg(la_max, la_min, npgfa, rpgfa, zeta, &
81 lb_max, lb_min, npgfb, rpgfb, zetb, &
82 rac, rbc, rab, vab, ldrr1, ldrr2, rr)
83 INTEGER,
INTENT(IN) :: la_max, la_min, npgfa
84 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
85 INTEGER,
INTENT(IN) :: lb_max, lb_min, npgfb
86 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
87 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac, rbc, rab
88 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT) :: vab
89 INTEGER,
INTENT(IN) :: ldrr1, ldrr2
90 REAL(kind=
dp),
DIMENSION(0:ldrr1-1, ldrr2, *), &
93 INTEGER :: ax, ay, az, bx, by, bz, coa, coam1x, coam1y, coam1z, coam2x, coam2y, coam2z, &
94 coamxpy, coamxpz, coamxy, coamxz, coamypx, coamypz, coamyz, coamzpx, coamzpy, coap1x, &
95 coap1y, coap1z, coap2x, coap2y, coap2z, coapxy, coapxz, coapyz, cob, cobm1x, cobm1y, &
96 cobm1z, cobm2x, cobm2y, cobm2z, cobmxpy, cobmxpz, cobmxy, cobmxz, cobmypx, cobmypz, &
97 cobmyz, cobmzpx, cobmzpy, cobp1x, cobp1y, cobp1z, cobp2x, cobp2y, cobp2z, cobpxy, cobpxz, &
98 cobpyz, i, ipgf, j, jpgf, la, lb, ma, mb, na, nb
99 REAL(kind=
dp) :: dab, dum, dumxx, dumxy, dumxz, dumyy, &
100 dumyz, dumzz, f0, rab2, xhi, za, zb, &
102 REAL(kind=
dp),
DIMENSION(3) :: rap, rbp, rcp
106 rab2 = rab(1)**2 + rab(2)**2 + rab(3)**2
121 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab)
THEN
122 DO j = nb + 1, nb +
ncoset(lb_max)
123 DO i = na + 1, na +
ncoset(la_max)
124 vab(i, j, 1) = 0.0_dp
125 vab(i, j, 2) = 0.0_dp
126 vab(i, j, 3) = 0.0_dp
127 vab(i, j, 4) = 0.0_dp
128 vab(i, j, 5) = 0.0_dp
129 vab(i, j, 6) = 0.0_dp
144 rcp = -(za*rac + zb*rbc)/zet
145 f0 = 2.0_dp*sqrt(zet/
pi)*(
pi/zet)**(1.5_dp)*exp(-xhi*rab2)
149 CALL os_rr_coul(rap, la_max + 2, rbp, lb_max + 2, rcp, zet, ldrr1, ldrr2, rr)
153 DO lb = lb_min, lb_max
157 cob =
coset(bx, by, bz)
158 cobm1x =
coset(max(bx - 1, 0), by, bz)
159 cobm1y =
coset(bx, max(by - 1, 0), bz)
160 cobm1z =
coset(bx, by, max(bz - 1, 0))
161 cobm2x =
coset(max(bx - 2, 0), by, bz)
162 cobm2y =
coset(bx, max(by - 2, 0), bz)
163 cobm2z =
coset(bx, by, max(bz - 2, 0))
164 cobmxy =
coset(max(bx - 1, 0), max(by - 1, 0), bz)
165 cobmxz =
coset(max(bx - 1, 0), by, max(bz - 1, 0))
166 cobmyz =
coset(bx, max(by - 1, 0), max(bz - 1, 0))
167 cobp1x =
coset(bx + 1, by, bz)
168 cobp1y =
coset(bx, by + 1, bz)
169 cobp1z =
coset(bx, by, bz + 1)
170 cobp2x =
coset(bx + 2, by, bz)
171 cobp2y =
coset(bx, by + 2, bz)
172 cobp2z =
coset(bx, by, bz + 2)
173 cobpxy =
coset(bx + 1, by + 1, bz)
174 cobpxz =
coset(bx + 1, by, bz + 1)
175 cobpyz =
coset(bx, by + 1, bz + 1)
176 cobmxpy =
coset(max(bx - 1, 0), by + 1, bz)
177 cobmxpz =
coset(max(bx - 1, 0), by, bz + 1)
178 cobmypx =
coset(bx + 1, max(by - 1, 0), bz)
179 cobmypz =
coset(bx, max(by - 1, 0), bz + 1)
180 cobmzpx =
coset(bx + 1, by, max(bz - 1, 0))
181 cobmzpy =
coset(bx, by + 1, max(bz - 1, 0))
183 DO la = la_min, la_max
187 coa =
coset(ax, ay, az)
188 coap1x =
coset(ax + 1, ay, az)
189 coap1y =
coset(ax, ay + 1, az)
190 coap1z =
coset(ax, ay, az + 1)
191 coap2x =
coset(ax + 2, ay, az)
192 coap2y =
coset(ax, ay + 2, az)
193 coap2z =
coset(ax, ay, az + 2)
194 coapxy =
coset(ax + 1, ay + 1, az)
195 coapxz =
coset(ax + 1, ay, az + 1)
196 coapyz =
coset(ax, ay + 1, az + 1)
197 coam1x =
coset(max(ax - 1, 0), ay, az)
198 coam1y =
coset(ax, max(ay - 1, 0), az)
199 coam1z =
coset(ax, ay, max(az - 1, 0))
200 coam2x =
coset(max(ax - 2, 0), ay, az)
201 coam2y =
coset(ax, max(ay - 2, 0), az)
202 coam2z =
coset(ax, ay, max(az - 2, 0))
203 coamxy =
coset(max(ax - 1, 0), max(ay - 1, 0), az)
204 coamxz =
coset(max(ax - 1, 0), ay, max(az - 1, 0))
205 coamyz =
coset(ax, max(ay - 1, 0), max(az - 1, 0))
206 coamxpy =
coset(max(ax - 1, 0), ay + 1, az)
207 coamxpz =
coset(max(ax - 1, 0), ay, az + 1)
208 coamypx =
coset(ax + 1, max(ay - 1, 0), az)
209 coamypz =
coset(ax, max(ay - 1, 0), az + 1)
210 coamzpx =
coset(ax + 1, ay, max(az - 1, 0))
211 coamzpy =
coset(ax, ay + 1, max(az - 1, 0))
215 dum = 4.0_dp*(za**2*rr(0, coap2x, cob) + zb**2*rr(0, coa, cobp2x) &
216 & + 2.0_dp*za*zb*rr(0, coap1x, cobp1x)) &
217 - 2.0_dp*rr(0, coa, cob)*(za*real(2*ax + 1,
dp) + zb*real(2*bx + 1,
dp))
218 IF (ax .GT. 1) dum = dum + real(ax*(ax - 1),
dp)*rr(0, coam2x, cob)
219 IF (bx .GT. 1) dum = dum + real(bx*(bx - 1),
dp)*rr(0, coa, cobm2x)
220 IF (ax .GT. 0) dum = dum - 4.0_dp*zb*real(ax,
dp)*rr(0, coam1x, cobp1x)
221 IF (bx .GT. 0) dum = dum - 4.0_dp*za*real(bx,
dp)*rr(0, coap1x, cobm1x)
222 IF (ax .GT. 0 .AND. bx .GT. 0) dum = dum + 2.0_dp*real(ax*bx,
dp)*rr(0, coam1x, cobm1x)
226 dum = 4.0_dp*(za**2*rr(0, coap2y, cob) + zb**2*rr(0, coa, cobp2y) &
227 & + 2.0_dp*za*zb*rr(0, coap1y, cobp1y)) &
228 - 2.0_dp*rr(0, coa, cob)*(za*real(2*ay + 1,
dp) + zb*real(2*by + 1,
dp))
229 IF (ay .GT. 1) dum = dum + real(ay*(ay - 1),
dp)*rr(0, coam2y, cob)
230 IF (by .GT. 1) dum = dum + real(by*(by - 1),
dp)*rr(0, coa, cobm2y)
231 IF (ay .GT. 0) dum = dum - 4.0_dp*zb*real(ay,
dp)*rr(0, coam1y, cobp1y)
232 IF (by .GT. 0) dum = dum - 4.0_dp*za*real(by,
dp)*rr(0, coap1y, cobm1y)
233 IF (ay .GT. 0 .AND. by .GT. 0) dum = dum + 2.0_dp*real(ay*by,
dp)*rr(0, coam1y, cobm1y)
237 dum = 4.0_dp*(za**2*rr(0, coap2z, cob) + zb**2*rr(0, coa, cobp2z) &
238 & + 2.0_dp*za*zb*rr(0, coap1z, cobp1z)) &
239 - 2.0_dp*rr(0, coa, cob)*(za*real(2*az + 1,
dp) + zb*real(2*bz + 1,
dp))
240 IF (az .GT. 1) dum = dum + real(az*(az - 1),
dp)*rr(0, coam2z, cob)
241 IF (bz .GT. 1) dum = dum + real(bz*(bz - 1),
dp)*rr(0, coa, cobm2z)
242 IF (az .GT. 0) dum = dum - 4.0_dp*zb*real(az,
dp)*rr(0, coam1z, cobp1z)
243 IF (bz .GT. 0) dum = dum - 4.0_dp*za*real(bz,
dp)*rr(0, coap1z, cobm1z)
244 IF (az .GT. 0 .AND. bz .GT. 0) dum = dum + 2.0_dp*real(az*bz,
dp)*rr(0, coam1z, cobm1z)
248 dum = 4.0_dp*(za**2*rr(0, coapxy, cob) + zb**2*rr(0, coa, cobpxy) &
249 & + za*zb*(rr(0, coap1x, cobp1y) + rr(0, coap1y, cobp1x)))
250 IF (ax .GT. 0) dum = dum - 2.0_dp*real(ax,
dp)* &
251 & (za*rr(0, coamxpy, cob) + zb*rr(0, coam1x, cobp1y))
252 IF (ay .GT. 0) dum = dum - 2.0_dp*real(ay,
dp)* &
253 & (za*rr(0, coamypx, cob) + zb*rr(0, coam1y, cobp1x))
254 IF (ax .GT. 0 .AND. ay .GT. 0) dum = dum + real(ax*ay,
dp)*rr(0, coamxy, cob)
255 IF (bx .GT. 0) dum = dum - 2.0_dp*real(bx,
dp)* &
256 & (zb*rr(0, coa, cobmxpy) + za*rr(0, coap1y, cobm1x))
257 IF (by .GT. 0) dum = dum - 2.0_dp*real(by,
dp)* &
258 & (zb*rr(0, coa, cobmypx) + za*rr(0, coap1x, cobm1y))
259 IF (bx .GT. 0 .AND. by .GT. 0) dum = dum + real(bx*by,
dp)*rr(0, coa, cobmxy)
260 IF (ax .GT. 0 .AND. by .GT. 0) dum = dum + real(ax*by,
dp)*rr(0, coam1x, cobm1y)
261 IF (ay .GT. 0 .AND. bx .GT. 0) dum = dum + real(ay*bx,
dp)*rr(0, coam1y, cobm1x)
265 dum = 4.0_dp*(za**2*rr(0, coapxz, cob) + zb**2*rr(0, coa, cobpxz) &
266 & + za*zb*(rr(0, coap1x, cobp1z) + rr(0, coap1z, cobp1x)))
267 IF (ax .GT. 0) dum = dum - 2.0_dp*real(ax,
dp)* &
268 & (za*rr(0, coamxpz, cob) + zb*rr(0, coam1x, cobp1z))
269 IF (az .GT. 0) dum = dum - 2.0_dp*real(az,
dp)* &
270 & (za*rr(0, coamzpx, cob) + zb*rr(0, coam1z, cobp1x))
271 IF (ax .GT. 0 .AND. az .GT. 0) dum = dum + real(ax*az,
dp)*rr(0, coamxz, cob)
272 IF (bx .GT. 0) dum = dum - 2.0_dp*real(bx,
dp)* &
273 & (zb*rr(0, coa, cobmxpz) + za*rr(0, coap1z, cobm1x))
274 IF (bz .GT. 0) dum = dum - 2.0_dp*real(bz,
dp)* &
275 & (zb*rr(0, coa, cobmzpx) + za*rr(0, coap1x, cobm1z))
276 IF (bx .GT. 0 .AND. bz .GT. 0) dum = dum + real(bx*bz,
dp)*rr(0, coa, cobmxz)
277 IF (ax .GT. 0 .AND. bz .GT. 0) dum = dum + real(ax*bz,
dp)*rr(0, coam1x, cobm1z)
278 IF (az .GT. 0 .AND. bx .GT. 0) dum = dum + real(az*bx,
dp)*rr(0, coam1z, cobm1x)
282 dum = 4.0_dp*(za**2*rr(0, coapyz, cob) + zb**2*rr(0, coa, cobpyz) &
283 & + za*zb*(rr(0, coap1y, cobp1z) + rr(0, coap1z, cobp1y)))
284 IF (ay .GT. 0) dum = dum - 2.0_dp*real(ay,
dp)* &
285 & (za*rr(0, coamypz, cob) + zb*rr(0, coam1y, cobp1z))
286 IF (az .GT. 0) dum = dum - 2.0_dp*real(az,
dp)* &
287 & (za*rr(0, coamzpy, cob) + zb*rr(0, coam1z, cobp1y))
288 IF (ay .GT. 0 .AND. az .GT. 0) dum = dum + real(ay*az,
dp)*rr(0, coamyz, cob)
289 IF (by .GT. 0) dum = dum - 2.0_dp*real(by,
dp)* &
290 & (zb*rr(0, coa, cobmypz) + za*rr(0, coap1z, cobm1y))
291 IF (bz .GT. 0) dum = dum - 2.0_dp*real(bz,
dp)* &
292 & (zb*rr(0, coa, cobmzpy) + za*rr(0, coap1y, cobm1z))
293 IF (by .GT. 0 .AND. bz .GT. 0) dum = dum + real(by*bz,
dp)*rr(0, coa, cobmyz)
294 IF (ay .GT. 0 .AND. bz .GT. 0) dum = dum + real(ay*bz,
dp)*rr(0, coam1y, cobm1z)
295 IF (az .GT. 0 .AND. by .GT. 0) dum = dum + real(az*by,
dp)*rr(0, coam1z, cobm1y)
299 vab(ma, mb, 1) = (2.0_dp*dumxx - dumyy - dumzz)/3.0_dp
300 vab(ma, mb, 2) = dumxy
301 vab(ma, mb, 3) = dumxz
302 vab(ma, mb, 4) = (2.0_dp*dumyy - dumzz - dumxx)/3.0_dp
303 vab(ma, mb, 5) = dumyz
304 vab(ma, mb, 6) = (2.0_dp*dumzz - dumxx - dumyy)/3.0_dp
Calculation of Coulomb integrals over Cartesian Gaussian-type functions (electron repulsion integrals...
subroutine, public efg(la_max, la_min, npgfa, rpgfa, zeta, lb_max, lb_min, npgfb, rpgfb, zetb, rac, rbc, rab, vab, ldrr1, ldrr2, rr)
Calculation of the primitive electric field integrals over Cartesian Gaussian-type functions.
subroutine, public os_rr_coul(rap, la_max, rbp, lb_max, rcp, zet, ldrr1, ldrr2, rr)
Calculation of the Obara-Saika recurrence relation for 1/r_C.
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public ncoset
integer, dimension(:, :, :), allocatable, public coset