(git:374b731)
Loading...
Searching...
No Matches
ai_verfc.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Build up the nuclear potential part of the core Hamiltonian matrix
10!> in the case of an allelectron calculation by computing the nuclear
11!> attraction integral matrix <a|-Z/r|b> and the integral matrix
12!> <a|Z*erf(r)/r|b>. The integrals <a|Z*erf(r)/r|b> can be rewritten
13!> as the three-center Coulomb integrals <ab||c> with a primitive
14!> s-type Gaussian function c multiplied by a factor N.
15!>
16!> erfc(r)
17!> <a|V|b> = -Z*<a|---------|b>
18!> r
19!>
20!> 1 - erf(r)
21!> = -Z*<a|------------|b>
22!> r
23!>
24!> 1 erf(r)
25!> = -Z*(<a|---|b> - <a|--------|b>)
26!> r r
27!>
28!> 1
29!> = -Z*(<a|---|b> - N*<ab||c>)
30!> r
31!>
32!> 1
33!> = -Z*<a|---|b> + Z*N*<ab||c>
34!> r
35!> \_______/ \_____/
36!> | |
37!> nuclear coulomb
38!> \par Literature
39!> S. Obara and A. Saika, J. Chem. Phys. 84, 3963 (1986)
40!> \par Parameters
41!> - ax,ay,az : Angular momentum index numbers of orbital a.
42!> - bx,by,bz : Angular momentum index numbers of orbital b.
43!> - coset : Cartesian orbital set pointer.
44!> - dab : Distance between the atomic centers a and b.
45!> - dac : Distance between the atomic centers a and c.
46!> - dbc : Distance between the atomic centers b and c.
47!> - l{a,b} : Angular momentum quantum number of shell a or b.
48!> - l{a,b}_max: Maximum angular momentum quantum number of shell a or b.
49!> - l{a,b}_min: Minimum angular momentum quantum number of shell a or b.
50!> - ncoset : Number of orbitals in a Cartesian orbital set.
51!> - npgf{a,b} : Degree of contraction of shell a or b.
52!> - rab : Distance vector between the atomic centers a and b.
53!> - rab2 : Square of the distance between the atomic centers a and b.
54!> - rac : Distance vector between the atomic centers a and c.
55!> - rac2 : Square of the distance between the atomic centers a and c.
56!> - rbc2 : Square of the distance between the atomic centers b and c.
57!> - rpgf{a,b} : Radius of the primitive Gaussian-type function a or b.
58!> - zet{a,b} : Exponents of the Gaussian-type functions a or b.
59!> - zetp : Reciprocal of the sum of the exponents of orbital a and b.
60!> - zetw : Reciprocal of the sum of the exponents of orbital a, b and c.
61!> Indices for pVp matrices
62!> - ax,ay,az : Angular momentum index numbers of orbital a.
63!> - n{x1,y1,z1}{x2,y2,z2} : indices for the pVp matrix elements
64!> <p_{x1,y1,z1}a|V|p_{x2,y2,z2}>
65!> - co{a,b}{m,p}{x,y,z} : coefficients of the pVp matrix elements: co == coset(lx,ly,lz)
66!> m == li - 1; p == li +1; li= x,y,z (which l quantum number is modified); l = a,b
67!> coset ( ... -1 ...) = 1 , should be zero, lmi = 1.0 for li >=1 and lmi = 0.0 for li = 0
68!> guarantees this as a prefactor
69!> - f{a,b}{x,y,z},ft{a,b},z : f(t)li: prefactors as a result of derivations of l with respect to i
70!> - pVpout : pVp matrix elements
71!> - pVp : local pVp matrix elements
72!> - lamin,lbmin : minimal angular quantum number used in pVp matrices
73!> _ vnucp : potential of the nuclei
74!> - vnuc : potential of the electrons
75!> _ pVpa, pVpb : pVpl=coset(lx,ly,lz)
76!> - na_pgf,nb_pgf : indices for primitive gaussian functions
77!> \par History
78!> 10.2008 added pVp matrix elements (jens)
79!> \author Matthias Krack (04.10.2000)
80! **************************************************************************************************
81
83
84 USE gamma, ONLY: fgamma => fgamma_0
85 USE kinds, ONLY: dp
86 USE mathconstants, ONLY: pi
87 USE orbital_pointers, ONLY: coset,&
88 ncoset
89#include "../base/base_uses.f90"
90
91 IMPLICIT NONE
92 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ai_verfc'
93 PRIVATE
94
95! *** Public subroutines ***
96
97 PUBLIC :: verfc
98
99CONTAINS
100
101! **************************************************************************************************
102!> \brief Calculation of the primitive three-center nuclear potential
103!> integrals <a|Z*erfc(r)/r|b> over Cartesian Gaussian-type
104!> functions.
105!> \param la_max1 ...
106!> \param npgfa ...
107!> \param zeta ...
108!> \param rpgfa ...
109!> \param la_min1 ...
110!> \param lb_max1 ...
111!> \param npgfb ...
112!> \param zetb ...
113!> \param rpgfb ...
114!> \param lb_min1 ...
115!> \param zetc ...
116!> \param rpgfc ...
117!> \param zc ...
118!> \param cerf ...
119!> \param rab ...
120!> \param rab2 ...
121!> \param rac ...
122!> \param rac2 ...
123!> \param rbc2 ...
124!> \param vabc ...
125!> \param verf ...
126!> \param vnuc ...
127!> \param f ...
128!> \param maxder ...
129!> \param vabc_plus ...
130!> \param vnabc ...
131!> \param pVp_sum ...
132!> \param pVp ...
133!> \param dkh_erfc ...
134!> \date 04.10.2000
135!> \author Matthias Krack
136!> \version 1.0
137! **************************************************************************************************
138 SUBROUTINE verfc(la_max1, npgfa, zeta, rpgfa, la_min1, lb_max1, npgfb, zetb, rpgfb, lb_min1, &
139 zetc, rpgfc, zc, cerf, rab, rab2, rac, rac2, rbc2, vabc, verf, vnuc, f, &
140 maxder, vabc_plus, vnabc, pVp_sum, pVp, dkh_erfc) !JT
141 INTEGER, INTENT(IN) :: la_max1, npgfa
142 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: zeta, rpgfa
143 INTEGER, INTENT(IN) :: la_min1, lb_max1, npgfb
144 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: zetb, rpgfb
145 INTEGER, INTENT(IN) :: lb_min1
146 REAL(kind=dp), INTENT(IN) :: zetc, rpgfc, zc, cerf
147 REAL(kind=dp), DIMENSION(3), INTENT(IN) :: rab
148 REAL(kind=dp), INTENT(IN) :: rab2
149 REAL(kind=dp), DIMENSION(3), INTENT(IN) :: rac
150 REAL(kind=dp), INTENT(IN) :: rac2, rbc2
151 REAL(kind=dp), DIMENSION(:, :), INTENT(INOUT) :: vabc
152 REAL(kind=dp), DIMENSION(:, :, :) :: verf, vnuc
153 REAL(kind=dp), DIMENSION(0:) :: f
154 INTEGER, INTENT(IN), OPTIONAL :: maxder
155 REAL(kind=dp), DIMENSION(:, :), OPTIONAL :: vabc_plus, vnabc, pvp_sum, pvp
156 LOGICAL, OPTIONAL :: dkh_erfc
157
158 INTEGER :: ax, ay, az, bx, by, bz, coamx, coamy, coamz, coapx, coapy, coapz, cobmx, cobmy, &
159 cobmz, cobpx, cobpy, cobpz, i, ipgf, j, jpgf, la, la_max, la_min, la_start, lb, lb_max, &
160 lb_min, maxder_local, n, na, nap, nb, nmax, nxx, nxy, nxz, nyx, nyy, nyz, nzx, nzy, nzz, &
161 pvpa, pvpb
162 LOGICAL :: do_dkh
163 REAL(kind=dp) :: dab, dac, dbc, f0, f1, f2, f3, f4, fax, &
164 fay, faz, fbx, fby, fbz, ferf, fnuc, &
165 ftaz, ftbz, fx, fy, fz, rcp2, t, zetp, &
166 zetq, zetw
167 REAL(kind=dp), DIMENSION(3) :: rap, rbp, rcp, rpw
168
169! ---------------------------------------------------------------------------
170
171 IF (PRESENT(maxder)) THEN
172 verf(1:ncoset(la_max1), 1:ncoset(lb_max1), 1) = 0._dp
173 vnuc(1:ncoset(la_max1), 1:ncoset(lb_max1), 1) = 0._dp
174 END IF
175
176 do_dkh = .false.
177
178 IF (PRESENT(pvp)) THEN
179 do_dkh = .true.
180 pvp = 0.0_dp
181 ! pVp matrices requires angular momentum quantum numbers l+1 and l-1
182
183 la_max = la_max1 + 1
184 IF (PRESENT(maxder)) THEN
185 IF (maxder > 0) THEN
186 la_max = la_max1
187 END IF
188 END IF
189 lb_max = lb_max1 + 1
190
191 la_min = max(0, la_min1 - 1)
192 lb_min = max(0, lb_min1 - 1)
193 ELSE
194 do_dkh = .false.
195 la_max = la_max1
196 lb_max = lb_max1
197 la_min = la_min1
198 lb_min = lb_min1
199 END IF
200
201 nmax = la_max + lb_max + 1
202
203 maxder_local = 0
204 IF (PRESENT(maxder)) maxder_local = maxder
205
206! *** Calculate the distances of the centers a, b and c ***
207
208 dab = sqrt(rab2)
209 dac = sqrt(rac2)
210 dbc = sqrt(rbc2)
211
212! *** Loop over all pairs of primitive Gaussian-type functions ***
213
214 na = 0
215 nap = 0
216
217 DO ipgf = 1, npgfa
218
219! *** Screening ***
220
221 IF (do_dkh) THEN
222 IF (dkh_erfc) THEN
223 IF (rpgfa(ipgf) + rpgfc < dac) THEN
224 na = na + ncoset(la_max1 - maxder_local) !JT
225 nap = nap + ncoset(la_max1) !JT
226 cycle
227 END IF
228 END IF
229 ELSE
230 IF (rpgfa(ipgf) + rpgfc < dac) THEN
231 na = na + ncoset(la_max1 - maxder_local) !JT
232 nap = nap + ncoset(la_max1) !JT
233 cycle
234 END IF
235 END IF
236
237 nb = 0
238
239 DO jpgf = 1, npgfb
240
241! *** Screening ***
242 IF (do_dkh) THEN
243 IF (dkh_erfc) THEN
244 IF ((rpgfb(jpgf) + rpgfc < dbc) .OR. &
245 (rpgfa(ipgf) + rpgfb(jpgf) < dab)) THEN
246 nb = nb + ncoset(lb_max1) !JT
247 cycle
248 END IF
249 END IF
250 ELSE
251 IF ((rpgfb(jpgf) + rpgfc < dbc) .OR. &
252 (rpgfa(ipgf) + rpgfb(jpgf) < dab)) THEN
253 nb = nb + ncoset(lb_max1) !JT
254 cycle
255 END IF
256 END IF
257! *** Calculate some prefactors ***
258
259 zetp = 1.0_dp/(zeta(ipgf) + zetb(jpgf))
260 zetq = 1.0_dp/zetc
261 zetw = 1.0_dp/(zeta(ipgf) + zetb(jpgf) + zetc)
262
263 f1 = zetb(jpgf)*zetp
264 f2 = 0.5_dp*zetp
265 f4 = -zetc*zetw
266
267 f0 = exp(-zeta(ipgf)*f1*rab2)
268
269 fnuc = 2.0_dp*pi*zetp*f0
270 ferf = 2.0_dp*sqrt(pi**5*zetw)*zetp*zetq*f0
271
272 rap(:) = f1*rab(:)
273 rcp(:) = rap(:) - rac(:)
274 rpw(:) = f4*rcp(:)
275
276! *** Calculate the incomplete Gamma function values ***
277
278 rcp2 = rcp(1)*rcp(1) + rcp(2)*rcp(2) + rcp(3)*rcp(3)
279
280 t = rcp2/zetp
281
282 CALL fgamma(nmax - 1, t, f)
283
284! *** Calculate the basic nuclear attraction integrals [s|A(0)|s]{n} ***
285
286 DO n = 1, nmax
287 vnuc(1, 1, n) = fnuc*f(n - 1)
288 END DO
289
290! *** Calculate the incomplete Gamma function values ***
291
292 t = -f4*rcp2/zetp
293
294 CALL fgamma(nmax - 1, t, f)
295
296! *** Calculate the basic three-center Coulomb integrals [ss||s]{n} ***
297
298 DO n = 1, nmax
299 verf(1, 1, n) = ferf*f(n - 1)
300 END DO
301
302! *** Recurrence steps: [s|A(0)|s] -> [a|A(0)|b] ***
303! *** [ss||s] -> [ab||s] ***
304
305 IF (la_max > 0) THEN
306
307! *** Vertical recurrence steps: [s|A(0)|s] -> [a|A(0)|s] ***
308! *** [ss||s] -> [as||s] ***
309
310! *** [p|A(0)|s]{n} = (Pi - Ai)*[s|A(0)|s]{n} - ***
311! *** (Pi - Ci)*[s|A(0)|s]{n+1} ***
312! *** [ps||s]{n} = (Pi - Ai)*[ss||s]{n} + ***
313! *** (Wi - Pi)*[ss||s]{n+1} (i = x,y,z) ***
314
315 DO n = 1, nmax - 1
316 vnuc(2, 1, n) = rap(1)*vnuc(1, 1, n) - rcp(1)*vnuc(1, 1, n + 1)
317 verf(2, 1, n) = rap(1)*verf(1, 1, n) + rpw(1)*verf(1, 1, n + 1)
318 vnuc(3, 1, n) = rap(2)*vnuc(1, 1, n) - rcp(2)*vnuc(1, 1, n + 1)
319 verf(3, 1, n) = rap(2)*verf(1, 1, n) + rpw(2)*verf(1, 1, n + 1)
320 vnuc(4, 1, n) = rap(3)*vnuc(1, 1, n) - rcp(3)*vnuc(1, 1, n + 1)
321 verf(4, 1, n) = rap(3)*verf(1, 1, n) + rpw(3)*verf(1, 1, n + 1)
322 END DO
323
324! *** [a|A(0)|s]{n} = (Pi - Ai)*[a-1i|A(0)|s]{n} - ***
325! *** (Pi - Ci)*[a-1i|A(0)|s]{n+1} + ***
326! *** f2*Ni(a-1i)*([a-2i|A(0)|s]{n} - ***
327! *** [a-2i|A(0)|s]{n+1} ***
328! *** [as||s]{n} = (Pi - Ai)*[(a-1i)s||s]{n} + ***
329! *** (Wi - Pi)*[(a-1i)s||s]{n+1} + ***
330! *** f2*Ni(a-1i)*( [(a-2i)s||s]{n} + ***
331! *** f4*[(a-2i)s||s]{n+1}) ***
332
333 DO la = 2, la_max
334
335 DO n = 1, nmax - la
336
337! *** Increase the angular momentum component z of function a ***
338
339 vnuc(coset(0, 0, la), 1, n) = &
340 rap(3)*vnuc(coset(0, 0, la - 1), 1, n) - &
341 rcp(3)*vnuc(coset(0, 0, la - 1), 1, n + 1) + &
342 f2*real(la - 1, dp)*(vnuc(coset(0, 0, la - 2), 1, n) - &
343 vnuc(coset(0, 0, la - 2), 1, n + 1))
344 verf(coset(0, 0, la), 1, n) = &
345 rap(3)*verf(coset(0, 0, la - 1), 1, n) + &
346 rpw(3)*verf(coset(0, 0, la - 1), 1, n + 1) + &
347 f2*real(la - 1, dp)*(verf(coset(0, 0, la - 2), 1, n) + &
348 f4*verf(coset(0, 0, la - 2), 1, n + 1))
349
350! *** Increase the angular momentum component y of function a ***
351
352 az = la - 1
353 vnuc(coset(0, 1, az), 1, n) = &
354 rap(2)*vnuc(coset(0, 0, az), 1, n) - &
355 rcp(2)*vnuc(coset(0, 0, az), 1, n + 1)
356 verf(coset(0, 1, az), 1, n) = &
357 rap(2)*verf(coset(0, 0, az), 1, n) + &
358 rpw(2)*verf(coset(0, 0, az), 1, n + 1)
359
360 DO ay = 2, la
361 az = la - ay
362 vnuc(coset(0, ay, az), 1, n) = &
363 rap(2)*vnuc(coset(0, ay - 1, az), 1, n) - &
364 rcp(2)*vnuc(coset(0, ay - 1, az), 1, n + 1) + &
365 f2*real(ay - 1, dp)*(vnuc(coset(0, ay - 2, az), 1, n) - &
366 vnuc(coset(0, ay - 2, az), 1, n + 1))
367 verf(coset(0, ay, az), 1, n) = &
368 rap(2)*verf(coset(0, ay - 1, az), 1, n) + &
369 rpw(2)*verf(coset(0, ay - 1, az), 1, n + 1) + &
370 f2*real(ay - 1, dp)*(verf(coset(0, ay - 2, az), 1, n) + &
371 f4*verf(coset(0, ay - 2, az), 1, n + 1))
372 END DO
373
374! *** Increase the angular momentum component x of function a ***
375
376 DO ay = 0, la - 1
377 az = la - 1 - ay
378 vnuc(coset(1, ay, az), 1, n) = &
379 rap(1)*vnuc(coset(0, ay, az), 1, n) - &
380 rcp(1)*vnuc(coset(0, ay, az), 1, n + 1)
381 verf(coset(1, ay, az), 1, n) = &
382 rap(1)*verf(coset(0, ay, az), 1, n) + &
383 rpw(1)*verf(coset(0, ay, az), 1, n + 1)
384 END DO
385
386 DO ax = 2, la
387 f3 = f2*real(ax - 1, dp)
388 DO ay = 0, la - ax
389 az = la - ax - ay
390 vnuc(coset(ax, ay, az), 1, n) = &
391 rap(1)*vnuc(coset(ax - 1, ay, az), 1, n) - &
392 rcp(1)*vnuc(coset(ax - 1, ay, az), 1, n + 1) + &
393 f3*(vnuc(coset(ax - 2, ay, az), 1, n) - &
394 vnuc(coset(ax - 2, ay, az), 1, n + 1))
395 verf(coset(ax, ay, az), 1, n) = &
396 rap(1)*verf(coset(ax - 1, ay, az), 1, n) + &
397 rpw(1)*verf(coset(ax - 1, ay, az), 1, n + 1) + &
398 f3*(verf(coset(ax - 2, ay, az), 1, n) + &
399 f4*verf(coset(ax - 2, ay, az), 1, n + 1))
400 END DO
401 END DO
402
403 END DO
404
405 END DO
406
407! *** Recurrence steps: [a|A(0)|s] -> [a|A(0)|b] ***
408! *** [as||s] -> [ab||s] ***
409
410 IF (lb_max > 0) THEN
411
412! *** Horizontal recurrence steps ***
413
414 rbp(:) = rap(:) - rab(:)
415
416! *** [a||A(0)|p]{n} = [a+1i|A(0)|s]{n} - (Bi - Ai)*[a|A(0)|s]{n} ***
417! *** [ap||s]{n} = [(a+1i)s||s]{n} - (Bi - Ai)*[as||s]{n} ***
418
419 la_start = max(0, la_min - 1)
420
421 DO la = la_start, la_max - 1
422 DO n = 1, nmax - la - 1
423 DO ax = 0, la
424 DO ay = 0, la - ax
425 az = la - ax - ay
426 vnuc(coset(ax, ay, az), 2, n) = &
427 vnuc(coset(ax + 1, ay, az), 1, n) - &
428 rab(1)*vnuc(coset(ax, ay, az), 1, n)
429 verf(coset(ax, ay, az), 2, n) = &
430 verf(coset(ax + 1, ay, az), 1, n) - &
431 rab(1)*verf(coset(ax, ay, az), 1, n)
432 vnuc(coset(ax, ay, az), 3, n) = &
433 vnuc(coset(ax, ay + 1, az), 1, n) - &
434 rab(2)*vnuc(coset(ax, ay, az), 1, n)
435 verf(coset(ax, ay, az), 3, n) = &
436 verf(coset(ax, ay + 1, az), 1, n) - &
437 rab(2)*verf(coset(ax, ay, az), 1, n)
438 vnuc(coset(ax, ay, az), 4, n) = &
439 vnuc(coset(ax, ay, az + 1), 1, n) - &
440 rab(3)*vnuc(coset(ax, ay, az), 1, n)
441 verf(coset(ax, ay, az), 4, n) = &
442 verf(coset(ax, ay, az + 1), 1, n) - &
443 rab(3)*verf(coset(ax, ay, az), 1, n)
444 END DO
445 END DO
446 END DO
447 END DO
448
449! *** Vertical recurrence step ***
450
451! *** [a|A(0)|p]{n} = (Pi - Bi)*[a|A(0)|s]{n} - ***
452! *** (Pi - Ci)*[a|A(0)|s]{n+1} + ***
453! *** f2*Ni(a)*([a-1i|A(0)|s]{n} - ***
454! *** [a-1i|A(0)|s]{n+1}) ***
455! *** [ap||s]{n} = (Pi - Bi)*[as||s]{n} + ***
456! *** (Wi - Pi)*[as||s]{n+1} + ***
457! *** f2*Ni(a)*( [(a-1i)s||s]{n} + ***
458! *** f4*[(a-1i)s||s]{n+1}) ***
459
460 DO n = 1, nmax - la_max - 1
461 DO ax = 0, la_max
462 fx = f2*real(ax, dp)
463 DO ay = 0, la_max - ax
464 fy = f2*real(ay, dp)
465 az = la_max - ax - ay
466 fz = f2*real(az, dp)
467
468 IF (ax == 0) THEN
469 vnuc(coset(ax, ay, az), 2, n) = &
470 rbp(1)*vnuc(coset(ax, ay, az), 1, n) - &
471 rcp(1)*vnuc(coset(ax, ay, az), 1, n + 1)
472 verf(coset(ax, ay, az), 2, n) = &
473 rbp(1)*verf(coset(ax, ay, az), 1, n) + &
474 rpw(1)*verf(coset(ax, ay, az), 1, n + 1)
475 ELSE
476 vnuc(coset(ax, ay, az), 2, n) = &
477 rbp(1)*vnuc(coset(ax, ay, az), 1, n) - &
478 rcp(1)*vnuc(coset(ax, ay, az), 1, n + 1) + &
479 fx*(vnuc(coset(ax - 1, ay, az), 1, n) - &
480 vnuc(coset(ax - 1, ay, az), 1, n + 1))
481 verf(coset(ax, ay, az), 2, n) = &
482 rbp(1)*verf(coset(ax, ay, az), 1, n) + &
483 rpw(1)*verf(coset(ax, ay, az), 1, n + 1) + &
484 fx*(verf(coset(ax - 1, ay, az), 1, n) + &
485 f4*verf(coset(ax - 1, ay, az), 1, n + 1))
486 END IF
487
488 IF (ay == 0) THEN
489 vnuc(coset(ax, ay, az), 3, n) = &
490 rbp(2)*vnuc(coset(ax, ay, az), 1, n) - &
491 rcp(2)*vnuc(coset(ax, ay, az), 1, n + 1)
492 verf(coset(ax, ay, az), 3, n) = &
493 rbp(2)*verf(coset(ax, ay, az), 1, n) + &
494 rpw(2)*verf(coset(ax, ay, az), 1, n + 1)
495 ELSE
496 vnuc(coset(ax, ay, az), 3, n) = &
497 rbp(2)*vnuc(coset(ax, ay, az), 1, n) - &
498 rcp(2)*vnuc(coset(ax, ay, az), 1, n + 1) + &
499 fy*(vnuc(coset(ax, ay - 1, az), 1, n) - &
500 vnuc(coset(ax, ay - 1, az), 1, n + 1))
501 verf(coset(ax, ay, az), 3, n) = &
502 rbp(2)*verf(coset(ax, ay, az), 1, n) + &
503 rpw(2)*verf(coset(ax, ay, az), 1, n + 1) + &
504 fy*(verf(coset(ax, ay - 1, az), 1, n) + &
505 f4*verf(coset(ax, ay - 1, az), 1, n + 1))
506 END IF
507
508 IF (az == 0) THEN
509 vnuc(coset(ax, ay, az), 4, n) = &
510 rbp(3)*vnuc(coset(ax, ay, az), 1, n) - &
511 rcp(3)*vnuc(coset(ax, ay, az), 1, n + 1)
512 verf(coset(ax, ay, az), 4, n) = &
513 rbp(3)*verf(coset(ax, ay, az), 1, n) + &
514 rpw(3)*verf(coset(ax, ay, az), 1, n + 1)
515 ELSE
516 vnuc(coset(ax, ay, az), 4, n) = &
517 rbp(3)*vnuc(coset(ax, ay, az), 1, n) - &
518 rcp(3)*vnuc(coset(ax, ay, az), 1, n + 1) + &
519 fz*(vnuc(coset(ax, ay, az - 1), 1, n) - &
520 vnuc(coset(ax, ay, az - 1), 1, n + 1))
521 verf(coset(ax, ay, az), 4, n) = &
522 rbp(3)*verf(coset(ax, ay, az), 1, n) + &
523 rpw(3)*verf(coset(ax, ay, az), 1, n + 1) + &
524 fz*(verf(coset(ax, ay, az - 1), 1, n) + &
525 f4*verf(coset(ax, ay, az - 1), 1, n + 1))
526 END IF
527
528 END DO
529 END DO
530 END DO
531
532! *** Recurrence steps: [a|A(0)|p] -> [a|A(0)|b] ***
533! *** [ap||s] -> [ab||s] ***
534
535 DO lb = 2, lb_max
536
537! *** Horizontal recurrence steps ***
538
539! *** [a||A(0)|b]{n} = [a+1i|A(0)|b-1i]{n} - ***
540! *** (Bi - Ai)*[a|A(0)|b-1i]{n} ***
541! *** [ab||s]{n} = [(a+1i)(b-1i)||s]{n} - ***
542! *** (Bi - Ai)*[a(b-1i)||s]{n} ***
543
544 la_start = max(0, la_min - 1)
545
546 DO la = la_start, la_max - 1
547 DO n = 1, nmax - la - lb
548 DO ax = 0, la
549 DO ay = 0, la - ax
550 az = la - ax - ay
551
552! *** Shift of angular momentum component z from a to b ***
553
554 vnuc(coset(ax, ay, az), coset(0, 0, lb), n) = &
555 vnuc(coset(ax, ay, az + 1), coset(0, 0, lb - 1), n) - &
556 rab(3)*vnuc(coset(ax, ay, az), coset(0, 0, lb - 1), n)
557 verf(coset(ax, ay, az), coset(0, 0, lb), n) = &
558 verf(coset(ax, ay, az + 1), coset(0, 0, lb - 1), n) - &
559 rab(3)*verf(coset(ax, ay, az), coset(0, 0, lb - 1), n)
560
561! *** Shift of angular momentum component y from a to b ***
562
563 DO by = 1, lb
564 bz = lb - by
565 vnuc(coset(ax, ay, az), coset(0, by, bz), n) = &
566 vnuc(coset(ax, ay + 1, az), coset(0, by - 1, bz), n) - &
567 rab(2)*vnuc(coset(ax, ay, az), coset(0, by - 1, bz), n)
568 verf(coset(ax, ay, az), coset(0, by, bz), n) = &
569 verf(coset(ax, ay + 1, az), coset(0, by - 1, bz), n) - &
570 rab(2)*verf(coset(ax, ay, az), coset(0, by - 1, bz), n)
571 END DO
572
573! *** Shift of angular momentum component x from a to b ***
574
575 DO bx = 1, lb
576 DO by = 0, lb - bx
577 bz = lb - bx - by
578 vnuc(coset(ax, ay, az), coset(bx, by, bz), n) = &
579 vnuc(coset(ax + 1, ay, az), coset(bx - 1, by, bz), n) - &
580 rab(1)*vnuc(coset(ax, ay, az), coset(bx - 1, by, bz), n)
581 verf(coset(ax, ay, az), coset(bx, by, bz), n) = &
582 verf(coset(ax + 1, ay, az), coset(bx - 1, by, bz), n) - &
583 rab(1)*verf(coset(ax, ay, az), coset(bx - 1, by, bz), n)
584 END DO
585 END DO
586
587 END DO
588 END DO
589 END DO
590 END DO
591
592! *** Vertical recurrence step ***
593
594! *** [a|A(0)|b]{n} = (Pi - Bi)*[a|A(0)|b-1i]{n} - ***
595! *** (Pi - Ci)*[a|A(0)|b-1i]{n+1} + ***
596! *** f2*Ni(a)*([a-1i|A(0)|b-1i]{n} - ***
597! *** [a-1i|A(0)|b-1i]{n+1}) + ***
598! *** f2*Ni(b-1i)*([a|A(0)|b-2i]{n} - ***
599! *** [a|A(0)|b-2i]{n+1}) ***
600! *** [ab||s]{n} = (Pi - Bi)*[a(b-1i)||s]{n} + ***
601! *** (Wi - Pi)*[a(b-1i)||s]{n+1} + ***
602! *** f2*Ni(a)*( [(a-1i)(b-1i)||s]{n} + ***
603! *** f4*[(a-1i)(b-1i)||s]{n+1}) ***
604! *** f2*Ni(b-1i)*( [a(b-2i)||s]{n} + ***
605! *** f4*[a(b-2i)||s]{n+1}) ***
606
607 DO n = 1, nmax - la_max - lb
608 DO ax = 0, la_max
609 fx = f2*real(ax, dp)
610 DO ay = 0, la_max - ax
611 fy = f2*real(ay, dp)
612 az = la_max - ax - ay
613 fz = f2*real(az, dp)
614
615! *** Shift of angular momentum component z from a to b ***
616
617 f3 = f2*real(lb - 1, dp)
618
619 IF (az == 0) THEN
620 vnuc(coset(ax, ay, az), coset(0, 0, lb), n) = &
621 rbp(3)*vnuc(coset(ax, ay, az), coset(0, 0, lb - 1), n) - &
622 rcp(3)*vnuc(coset(ax, ay, az), coset(0, 0, lb - 1), n + 1) + &
623 f3*(vnuc(coset(ax, ay, az), coset(0, 0, lb - 2), n) - &
624 vnuc(coset(ax, ay, az), coset(0, 0, lb - 2), n + 1))
625 verf(coset(ax, ay, az), coset(0, 0, lb), n) = &
626 rbp(3)*verf(coset(ax, ay, az), coset(0, 0, lb - 1), n) + &
627 rpw(3)*verf(coset(ax, ay, az), coset(0, 0, lb - 1), n + 1) + &
628 f3*(verf(coset(ax, ay, az), coset(0, 0, lb - 2), n) + &
629 f4*verf(coset(ax, ay, az), coset(0, 0, lb - 2), n + 1))
630 ELSE
631 vnuc(coset(ax, ay, az), coset(0, 0, lb), n) = &
632 rbp(3)*vnuc(coset(ax, ay, az), coset(0, 0, lb - 1), n) - &
633 rcp(3)*vnuc(coset(ax, ay, az), coset(0, 0, lb - 1), n + 1) + &
634 fz*(vnuc(coset(ax, ay, az - 1), coset(0, 0, lb - 1), n) - &
635 vnuc(coset(ax, ay, az - 1), coset(0, 0, lb - 1), n + 1)) + &
636 f3*(vnuc(coset(ax, ay, az), coset(0, 0, lb - 2), n) - &
637 vnuc(coset(ax, ay, az), coset(0, 0, lb - 2), n + 1))
638 verf(coset(ax, ay, az), coset(0, 0, lb), n) = &
639 rbp(3)*verf(coset(ax, ay, az), coset(0, 0, lb - 1), n) + &
640 rpw(3)*verf(coset(ax, ay, az), coset(0, 0, lb - 1), n + 1) + &
641 fz*(verf(coset(ax, ay, az - 1), coset(0, 0, lb - 1), n) + &
642 f4*verf(coset(ax, ay, az - 1), coset(0, 0, lb - 1), n + 1)) + &
643 f3*(verf(coset(ax, ay, az), coset(0, 0, lb - 2), n) + &
644 f4*verf(coset(ax, ay, az), coset(0, 0, lb - 2), n + 1))
645 END IF
646
647! *** Shift of angular momentum component y from a to b ***
648
649 IF (ay == 0) THEN
650 bz = lb - 1
651 vnuc(coset(ax, ay, az), coset(0, 1, bz), n) = &
652 rbp(2)*vnuc(coset(ax, ay, az), coset(0, 0, bz), n) - &
653 rcp(2)*vnuc(coset(ax, ay, az), coset(0, 0, bz), n + 1)
654 verf(coset(ax, ay, az), coset(0, 1, bz), n) = &
655 rbp(2)*verf(coset(ax, ay, az), coset(0, 0, bz), n) + &
656 rpw(2)*verf(coset(ax, ay, az), coset(0, 0, bz), n + 1)
657 DO by = 2, lb
658 bz = lb - by
659 f3 = f2*real(by - 1, dp)
660 vnuc(coset(ax, ay, az), coset(0, by, bz), n) = &
661 rbp(2)*vnuc(coset(ax, ay, az), coset(0, by - 1, bz), n) - &
662 rcp(2)*vnuc(coset(ax, ay, az), coset(0, by - 1, bz), n + 1) + &
663 f3*(vnuc(coset(ax, ay, az), coset(0, by - 2, bz), n) - &
664 vnuc(coset(ax, ay, az), coset(0, by - 2, bz), n + 1))
665 verf(coset(ax, ay, az), coset(0, by, bz), n) = &
666 rbp(2)*verf(coset(ax, ay, az), coset(0, by - 1, bz), n) + &
667 rpw(2)*verf(coset(ax, ay, az), coset(0, by - 1, bz), n + 1) + &
668 f3*(verf(coset(ax, ay, az), coset(0, by - 2, bz), n) + &
669 f4*verf(coset(ax, ay, az), coset(0, by - 2, bz), n + 1))
670 END DO
671 ELSE
672 bz = lb - 1
673 vnuc(coset(ax, ay, az), coset(0, 1, bz), n) = &
674 rbp(2)*vnuc(coset(ax, ay, az), coset(0, 0, bz), n) - &
675 rcp(2)*vnuc(coset(ax, ay, az), coset(0, 0, bz), n + 1) + &
676 fy*(vnuc(coset(ax, ay - 1, az), coset(0, 0, bz), n) - &
677 vnuc(coset(ax, ay - 1, az), coset(0, 0, bz), n + 1))
678 verf(coset(ax, ay, az), coset(0, 1, bz), n) = &
679 rbp(2)*verf(coset(ax, ay, az), coset(0, 0, bz), n) + &
680 rpw(2)*verf(coset(ax, ay, az), coset(0, 0, bz), n + 1) + &
681 fy*(verf(coset(ax, ay - 1, az), coset(0, 0, bz), n) + &
682 f4*verf(coset(ax, ay - 1, az), coset(0, 0, bz), n + 1))
683 DO by = 2, lb
684 bz = lb - by
685 f3 = f2*real(by - 1, dp)
686 vnuc(coset(ax, ay, az), coset(0, by, bz), n) = &
687 rbp(2)*vnuc(coset(ax, ay, az), coset(0, by - 1, bz), n) - &
688 rcp(2)*vnuc(coset(ax, ay, az), coset(0, by - 1, bz), n + 1) + &
689 fy*(vnuc(coset(ax, ay - 1, az), coset(0, by - 1, bz), n) - &
690 vnuc(coset(ax, ay - 1, az), coset(0, by - 1, bz), n + 1)) + &
691 f3*(vnuc(coset(ax, ay, az), coset(0, by - 2, bz), n) - &
692 vnuc(coset(ax, ay, az), coset(0, by - 2, bz), n + 1))
693 verf(coset(ax, ay, az), coset(0, by, bz), n) = &
694 rbp(2)*verf(coset(ax, ay, az), coset(0, by - 1, bz), n) + &
695 rpw(2)*verf(coset(ax, ay, az), coset(0, by - 1, bz), n + 1) + &
696 fy*(verf(coset(ax, ay - 1, az), coset(0, by - 1, bz), n) + &
697 f4*verf(coset(ax, ay - 1, az), &
698 coset(0, by - 1, bz), n + 1)) + &
699 f3*(verf(coset(ax, ay, az), coset(0, by - 2, bz), n) + &
700 f4*verf(coset(ax, ay, az), coset(0, by - 2, bz), n + 1))
701 END DO
702 END IF
703
704! *** Shift of angular momentum component x from a to b ***
705
706 IF (ax == 0) THEN
707 DO by = 0, lb - 1
708 bz = lb - 1 - by
709 vnuc(coset(ax, ay, az), coset(1, by, bz), n) = &
710 rbp(1)*vnuc(coset(ax, ay, az), coset(0, by, bz), n) - &
711 rcp(1)*vnuc(coset(ax, ay, az), coset(0, by, bz), n + 1)
712 verf(coset(ax, ay, az), coset(1, by, bz), n) = &
713 rbp(1)*verf(coset(ax, ay, az), coset(0, by, bz), n) + &
714 rpw(1)*verf(coset(ax, ay, az), coset(0, by, bz), n + 1)
715 END DO
716 DO bx = 2, lb
717 f3 = f2*real(bx - 1, dp)
718 DO by = 0, lb - bx
719 bz = lb - bx - by
720 vnuc(coset(ax, ay, az), coset(bx, by, bz), n) = &
721 rbp(1)*vnuc(coset(ax, ay, az), coset(bx - 1, by, bz), n) - &
722 rcp(1)*vnuc(coset(ax, ay, az), &
723 coset(bx - 1, by, bz), n + 1) + &
724 f3*(vnuc(coset(ax, ay, az), coset(bx - 2, by, bz), n) - &
725 vnuc(coset(ax, ay, az), coset(bx - 2, by, bz), n + 1))
726 verf(coset(ax, ay, az), coset(bx, by, bz), n) = &
727 rbp(1)*verf(coset(ax, ay, az), coset(bx - 1, by, bz), n) + &
728 rpw(1)*verf(coset(ax, ay, az), &
729 coset(bx - 1, by, bz), n + 1) + &
730 f3*(verf(coset(ax, ay, az), coset(bx - 2, by, bz), n) + &
731 f4*verf(coset(ax, ay, az), coset(bx - 2, by, bz), n + 1))
732 END DO
733 END DO
734 ELSE
735 DO by = 0, lb - 1
736 bz = lb - 1 - by
737 vnuc(coset(ax, ay, az), coset(1, by, bz), n) = &
738 rbp(1)*vnuc(coset(ax, ay, az), coset(0, by, bz), n) - &
739 rcp(1)*vnuc(coset(ax, ay, az), coset(0, by, bz), n + 1) + &
740 fx*(vnuc(coset(ax - 1, ay, az), coset(0, by, bz), n) - &
741 vnuc(coset(ax - 1, ay, az), coset(0, by, bz), n + 1))
742 verf(coset(ax, ay, az), coset(1, by, bz), n) = &
743 rbp(1)*verf(coset(ax, ay, az), coset(0, by, bz), n) + &
744 rpw(1)*verf(coset(ax, ay, az), coset(0, by, bz), n + 1) + &
745 fx*(verf(coset(ax - 1, ay, az), coset(0, by, bz), n) + &
746 f4*verf(coset(ax - 1, ay, az), coset(0, by, bz), n + 1))
747 END DO
748 DO bx = 2, lb
749 f3 = f2*real(bx - 1, dp)
750 DO by = 0, lb - bx
751 bz = lb - bx - by
752 vnuc(coset(ax, ay, az), coset(bx, by, bz), n) = &
753 rbp(1)*vnuc(coset(ax, ay, az), coset(bx - 1, by, bz), n) - &
754 rcp(1)*vnuc(coset(ax, ay, az), &
755 coset(bx - 1, by, bz), n + 1) + &
756 fx*(vnuc(coset(ax - 1, ay, az), coset(bx - 1, by, bz), n) - &
757 vnuc(coset(ax - 1, ay, az), &
758 coset(bx - 1, by, bz), n + 1)) + &
759 f3*(vnuc(coset(ax, ay, az), coset(bx - 2, by, bz), n) - &
760 vnuc(coset(ax, ay, az), coset(bx - 2, by, bz), n + 1))
761 verf(coset(ax, ay, az), coset(bx, by, bz), n) = &
762 rbp(1)*verf(coset(ax, ay, az), coset(bx - 1, by, bz), n) + &
763 rpw(1)*verf(coset(ax, ay, az), &
764 coset(bx - 1, by, bz), n + 1) + &
765 fx*(verf(coset(ax - 1, ay, az), &
766 coset(bx - 1, by, bz), n) + &
767 f4*verf(coset(ax - 1, ay, az), &
768 coset(bx - 1, by, bz), n + 1)) + &
769 f3*(verf(coset(ax, ay, az), coset(bx - 2, by, bz), n) + &
770 f4*verf(coset(ax, ay, az), coset(bx - 2, by, bz), n + 1))
771 END DO
772 END DO
773 END IF
774
775 END DO
776 END DO
777 END DO
778
779 END DO
780
781 END IF
782
783 ELSE
784
785 IF (lb_max > 0) THEN
786
787! *** Vertical recurrence steps: [s|A(0)|s] -> [s|A(0)|b] ***
788! *** [ss||s] -> [sb||s] ***
789
790 rbp(:) = rap(:) - rab(:)
791
792! *** [s|A(0)|p]{n} = (Pi - Bi)*[s|A(0)|s]{n} - ***
793! *** (Pi - Ci)*[s|A(0)|s]{n+1} ***
794! *** [sp||s]{n} = (Pi - Bi)*[ss||s]{n} + ***
795! *** (Wi - Pi)*[ss||s]{n+1} ***
796
797 DO n = 1, nmax - 1
798 vnuc(1, 2, n) = rbp(1)*vnuc(1, 1, n) - rcp(1)*vnuc(1, 1, n + 1)
799 verf(1, 2, n) = rbp(1)*verf(1, 1, n) + rpw(1)*verf(1, 1, n + 1)
800 vnuc(1, 3, n) = rbp(2)*vnuc(1, 1, n) - rcp(2)*vnuc(1, 1, n + 1)
801 verf(1, 3, n) = rbp(2)*verf(1, 1, n) + rpw(2)*verf(1, 1, n + 1)
802 vnuc(1, 4, n) = rbp(3)*vnuc(1, 1, n) - rcp(3)*vnuc(1, 1, n + 1)
803 verf(1, 4, n) = rbp(3)*verf(1, 1, n) + rpw(3)*verf(1, 1, n + 1)
804 END DO
805
806! *** [s|A(0)|b]{n} = (Pi - Bi)*[s|A(0)|b-1i]{n} - ***
807! *** (Pi - Ci)*[s|A(0)|b-1i]{n+1} + ***
808! *** f2*Ni(b-1i)*([s|A(0)|b-2i]{n} - ***
809! *** [s|A(0)|b-2i]{n+1} ***
810! *** [sb||s]{n} = (Pi - Bi)*[s(b-1i)||s]{n} + ***
811! *** (Wi - Pi)*[s(b-1i)||s]{n+1} + ***
812! *** f2*Ni(b-1i)*( [s(b-2i)||s]{n} + ***
813! *** f4*[s(b-2i)||s]{n+1}) ***
814
815 DO lb = 2, lb_max
816
817 DO n = 1, nmax - lb
818
819! *** Increase the angular momentum component z of function b ***
820
821 vnuc(1, coset(0, 0, lb), n) = &
822 rbp(3)*vnuc(1, coset(0, 0, lb - 1), n) - &
823 rcp(3)*vnuc(1, coset(0, 0, lb - 1), n + 1) + &
824 f2*real(lb - 1, dp)*(vnuc(1, coset(0, 0, lb - 2), n) - &
825 vnuc(1, coset(0, 0, lb - 2), n + 1))
826 verf(1, coset(0, 0, lb), n) = &
827 rbp(3)*verf(1, coset(0, 0, lb - 1), n) + &
828 rpw(3)*verf(1, coset(0, 0, lb - 1), n + 1) + &
829 f2*real(lb - 1, dp)*(verf(1, coset(0, 0, lb - 2), n) + &
830 f4*verf(1, coset(0, 0, lb - 2), n + 1))
831
832! *** Increase the angular momentum component y of function b ***
833
834 bz = lb - 1
835 vnuc(1, coset(0, 1, bz), n) = &
836 rbp(2)*vnuc(1, coset(0, 0, bz), n) - &
837 rcp(2)*vnuc(1, coset(0, 0, bz), n + 1)
838 verf(1, coset(0, 1, bz), n) = &
839 rbp(2)*verf(1, coset(0, 0, bz), n) + &
840 rpw(2)*verf(1, coset(0, 0, bz), n + 1)
841
842 DO by = 2, lb
843 bz = lb - by
844 vnuc(1, coset(0, by, bz), n) = &
845 rbp(2)*vnuc(1, coset(0, by - 1, bz), n) - &
846 rcp(2)*vnuc(1, coset(0, by - 1, bz), n + 1) + &
847 f2*real(by - 1, dp)*(vnuc(1, coset(0, by - 2, bz), n) - &
848 vnuc(1, coset(0, by - 2, bz), n + 1))
849 verf(1, coset(0, by, bz), n) = &
850 rbp(2)*verf(1, coset(0, by - 1, bz), n) + &
851 rpw(2)*verf(1, coset(0, by - 1, bz), n + 1) + &
852 f2*real(by - 1, dp)*(verf(1, coset(0, by - 2, bz), n) + &
853 f4*verf(1, coset(0, by - 2, bz), n + 1))
854 END DO
855
856! *** Increase the angular momentum component x of function b ***
857
858 DO by = 0, lb - 1
859 bz = lb - 1 - by
860 vnuc(1, coset(1, by, bz), n) = &
861 rbp(1)*vnuc(1, coset(0, by, bz), n) - &
862 rcp(1)*vnuc(1, coset(0, by, bz), n + 1)
863 verf(1, coset(1, by, bz), n) = &
864 rbp(1)*verf(1, coset(0, by, bz), n) + &
865 rpw(1)*verf(1, coset(0, by, bz), n + 1)
866 END DO
867
868 DO bx = 2, lb
869 f3 = f2*real(bx - 1, dp)
870 DO by = 0, lb - bx
871 bz = lb - bx - by
872 vnuc(1, coset(bx, by, bz), n) = &
873 rbp(1)*vnuc(1, coset(bx - 1, by, bz), n) - &
874 rcp(1)*vnuc(1, coset(bx - 1, by, bz), n + 1) + &
875 f3*(vnuc(1, coset(bx - 2, by, bz), n) - &
876 vnuc(1, coset(bx - 2, by, bz), n + 1))
877 verf(1, coset(bx, by, bz), n) = &
878 rbp(1)*verf(1, coset(bx - 1, by, bz), n) + &
879 rpw(1)*verf(1, coset(bx - 1, by, bz), n + 1) + &
880 f3*(verf(1, coset(bx - 2, by, bz), n) + &
881 f4*verf(1, coset(bx - 2, by, bz), n + 1))
882 END DO
883 END DO
884
885 END DO
886
887 END DO
888
889 END IF
890
891 END IF
892
893! *** Add the contribution of the current pair ***
894! *** of primitive Gaussian-type functions ***
895
896!JT
897 IF (do_dkh) THEN
898 DO j = 1, ncoset(lb_max1)
899 DO i = ncoset(la_min1 - 1) + 1, ncoset(la_max1 - maxder_local)
900 vnabc(na + i, nb + j) = vnabc(na + i, nb + j) + cerf*verf(i, j, 1)
901 END DO
902 END DO
903 DO j = 1, ncoset(lb_max1)
904 DO i = ncoset(la_min1 - 1) + 1, ncoset(la_max1 - maxder_local)
905 vabc(na + i, nb + j) = vabc(na + i, nb + j) - zc*vnuc(i, j, 1)
906 END DO
907 END DO
908 ELSE
909 DO j = 1, ncoset(lb_max1) !JT
910 DO i = ncoset(la_min1 - 1) + 1, ncoset(la_max1 - maxder_local) !JT
911 vabc(na + i, nb + j) = vabc(na + i, nb + j) - &
912 zc*vnuc(i, j, 1) + cerf*verf(i, j, 1)
913 END DO
914 END DO
915 END IF
916!JT
917
918 IF (PRESENT(maxder)) THEN
919 DO j = 1, ncoset(lb_max1) !JT
920 DO i = 1, ncoset(la_max1) !JT
921 vabc_plus(nap + i, nb + j) = vabc_plus(nap + i, nb + j) - &
922 zc*vnuc(i, j, 1) + cerf*verf(i, j, 1)
923 END DO
924 END DO
925 END IF
926!JTs
927 IF (do_dkh) THEN
928 ! *********** Calculate pVp matrix **************
929 ! [pa|V|pb]=4*zeta*zetb*[a+i|V|b+i]-2*zetb*Ni(a)*[a-i|V|b+i]-2*zeta*Ni(b)*[a+i|V|b-i]+Ni(a)*Ni(b)*[a-i|V|b-i]
930 ! Every integral has been calculated before (except [-1|V|-1],[a|V|-1] and [-1|V|b],
931 ! which do not contribute, because their prefactor Ni(a) or Ni(b) is zero)
932 ! and is given by verf/vnuc(coset(ax,ay,az),coset(bx,by,bz),1)
933 ! ***********************************************
934 ftaz = 2.0_dp*zeta(ipgf)
935 ftbz = 2.0_dp*zetb(jpgf)
936 nxx = 1
937 nyy = 2
938 nzz = 3
939 nxy = 4
940 nxz = 5
941 nyx = 6
942 nyz = 7
943 nzx = 8
944 nzy = 9
945 DO la = 0, la_max1
946 DO ax = 0, la
947 fax = real(ax, dp)
948 DO ay = 0, la - ax
949 fay = real(ay, dp)
950 az = la - ax - ay
951 faz = real(az, dp)
952 pvpa = coset(ax, ay, az)
953 coamx = coset(ax - 1, ay, az)
954 coamy = coset(ax, ay - 1, az)
955 coamz = coset(ax, ay, az - 1)
956 coapx = coset(ax + 1, ay, az)
957 coapy = coset(ax, ay + 1, az)
958 coapz = coset(ax, ay, az + 1)
959 DO lb = 0, lb_max1
960 DO bx = 0, lb
961 fbx = real(bx, dp)
962 DO by = 0, lb - bx
963 fby = real(by, dp)
964 bz = lb - bx - by
965 fbz = real(bz, dp)
966 pvpb = coset(bx, by, bz)
967 cobmx = coset(bx - 1, by, bz)
968 cobmy = coset(bx, by - 1, bz)
969 cobmz = coset(bx, by, bz - 1)
970 cobpx = coset(bx + 1, by, bz)
971 cobpy = coset(bx, by + 1, bz)
972 cobpz = coset(bx, by, bz + 1)
973 IF (dkh_erfc) THEN
974 pvp(pvpa, pvpb) = ftaz*ftbz*(-zc*vnuc(coapx, cobpx, 1) + cerf*verf(coapx, cobpx, 1)) - &
975 ftaz*fbx*(-zc*vnuc(coapx, cobmx, 1) + cerf*verf(coapx, cobmx, 1)) - &
976 ftbz*fax*(-zc*vnuc(coamx, cobpx, 1) + cerf*verf(coamx, cobpx, 1)) + &
977 fax*fbx*(-zc*vnuc(coamx, cobmx, 1) + cerf*verf(coamx, cobmx, 1)) + &
978 ftaz*ftbz*(-zc*vnuc(coapy, cobpy, 1) + cerf*verf(coapy, cobpy, 1)) - &
979 ftaz*fby*(-zc*vnuc(coapy, cobmy, 1) + cerf*verf(coapy, cobmy, 1)) - &
980 ftbz*fay*(-zc*vnuc(coamy, cobpy, 1) + cerf*verf(coamy, cobpy, 1)) + &
981 fay*fby*(-zc*vnuc(coamy, cobmy, 1) + cerf*verf(coamy, cobmy, 1)) + &
982 ftaz*ftbz*(-zc*vnuc(coapz, cobpz, 1) + cerf*verf(coapz, cobpz, 1)) - &
983 ftaz*fbz*(-zc*vnuc(coapz, cobmz, 1) + cerf*verf(coapz, cobmz, 1)) - &
984 ftbz*faz*(-zc*vnuc(coamz, cobpz, 1) + cerf*verf(coamz, cobpz, 1)) + &
985 faz*fbz*(-zc*vnuc(coamz, cobmz, 1) + cerf*verf(coamz, cobmz, 1))
986 ELSE
987 pvp(pvpa, pvpb) = ftaz*ftbz*(-zc*vnuc(coapx, cobpx, 1)) - &
988 ftaz*fbx*(-zc*vnuc(coapx, cobmx, 1)) - &
989 ftbz*fax*(-zc*vnuc(coamx, cobpx, 1)) + &
990 fax*fbx*(-zc*vnuc(coamx, cobmx, 1)) + &
991 ftaz*ftbz*(-zc*vnuc(coapy, cobpy, 1)) - &
992 ftaz*fby*(-zc*vnuc(coapy, cobmy, 1)) - &
993 ftbz*fay*(-zc*vnuc(coamy, cobpy, 1)) + &
994 fay*fby*(-zc*vnuc(coamy, cobmy, 1)) + &
995 ftaz*ftbz*(-zc*vnuc(coapz, cobpz, 1)) - &
996 ftaz*fbz*(-zc*vnuc(coapz, cobmz, 1)) - &
997 ftbz*faz*(-zc*vnuc(coamz, cobpz, 1)) + &
998 faz*fbz*(-zc*vnuc(coamz, cobmz, 1))
999 END IF
1000 END DO
1001 END DO
1002 END DO
1003 END DO
1004 END DO
1005 END DO
1006
1007 DO j = 1, ncoset(lb_max1)
1008 DO i = ncoset(la_min1 - 1) + 1, ncoset(la_max1 - maxder_local)
1009 pvp_sum(na + i, nb + j) = pvp_sum(na + i, nb + j) + pvp(i, j)
1010 END DO
1011 END DO
1012 END IF
1013!JTe
1014 nb = nb + ncoset(lb_max1) !JT
1015
1016 END DO
1017
1018 na = na + ncoset(la_max1 - maxder_local) !JT
1019 nap = nap + ncoset(la_max1) !JT
1020
1021 END DO
1022
1023 END SUBROUTINE verfc
1024
1025END MODULE ai_verfc
Build up the nuclear potential part of the core Hamiltonian matrix in the case of an allelectron calc...
Definition ai_verfc.F:82
subroutine, public verfc(la_max1, npgfa, zeta, rpgfa, la_min1, lb_max1, npgfb, zetb, rpgfb, lb_min1, zetc, rpgfc, zc, cerf, rab, rab2, rac, rac2, rbc2, vabc, verf, vnuc, f, maxder, vabc_plus, vnabc, pvp_sum, pvp, dkh_erfc)
Calculation of the primitive three-center nuclear potential integrals <a|Z*erfc(r)/r|b> over Cartesia...
Definition ai_verfc.F:141
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
Definition gamma.F:15
subroutine, public fgamma_0(nmax, t, f)
Calculation of the incomplete Gamma function F(t) for multicenter integrals over Gaussian functions....
Definition gamma.F:154
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
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