4
C> \brief Compute the multipole integral derivatives
6
C> Compute the multipole integral derivatives of the general form
8
C> \frac{\partial (\mu|M_A|\nu)}{\partial R_x} &=&
9
C> \int \frac{\partial [g_\mu(X_\mu,r_1)(R_A-r_1)_x^{n_x}(R_A-r_1)_y^{n_y}(R_A-r_1)_z^{n_z}g_\nu(X_\nu,r_1)]}{\partial X_x}dr_1
11
C> where the output buffer is logically organized as
12
C> `MP(mrange,jlo:jhi,ilo:ihi,ncoord,natom)` where
14
C> * `mrange` is the range of multipoles 1:((l+1)*(l+2)/2)
16
C> * `jlo:jhi` is the range of basis functions associated with `jsh`
18
C> * `ilo:ihi` is the range of basis functions associated with `ish`
20
C> * `ncoord` represents the 3 Cartesian coordinates of the derivative
22
C> * `natom` represents the 3 "atoms" involved in the integral, where
23
C> 1 is the center associated with `ish`, 2 is the center associate with
24
C> `jsh`, and 3 is associated with the center of the multipole.
26
C> Integral derivatives are returned in shell blocks of <L|ish|jsh> L=lval
27
C> one block for the given L value. EACH block repeated for 9 (xyz,atoms)
28
C> for ish = d and Lval = 1 and jsh = p you would get:
30
C> * (6*3*3)*3*3=486 integral derivatives
34
C> <xx|x|x> <xx|y|x> <xx|z|x> ( 1- 3)(x,atom1)
35
C> <xx|x|y> <xx|y|y> <xx|z|y> ( 4- 6)(x,atom1)
36
C> <xx|x|z> <xx|y|z> <xx|z|z> ( 7- 9)(x,atom1)
37
C> <xy|x|x> <xy|y|x> <xy|z|x> (10-12)(x,atom1)
38
C> <xy|x|y> <xy|y|y> <xy|z|y> (13-15)(x,atom1)
39
C> <xy|x|z> <xy|y|z> <xy|z|z> (16-18)(x,atom1)
40
C> <xz|x|x> <xz|y|x> <xz|z|x> (19-21)(x,atom1)
41
C> <xz|x|y> <xz|y|y> <xz|z|y> (22-24)(x,atom1)
42
C> <xz|x|z> <xz|y|z> <xz|z|z> (25-27)(x,atom1)
43
C> <yy|x|x> <yy|y|x> <yy|z|x> (28-30)(x,atom1)
44
C> <yy|x|y> <yy|y|y> <yy|z|y> (31-33)(x,atom1)
45
C> <yy|x|z> <yy|y|z> <yy|z|z> (34-36)(x,atom1)
46
C> <yz|x|x> <yz|y|x> <yz|z|x> (37-39)(x,atom1)
47
C> <yz|x|y> <yz|y|y> <yz|z|y> (40-42)(x,atom1)
48
C> <yz|x|z> <yz|y|z> <yz|z|z> (43-45)(x,atom1)
49
C> <zz|x|x> <zz|y|x> <zz|z|x> (46-48)(x,atom1)
50
C> <zz|x|y> <zz|y|y> <zz|z|y> (49-51)(x,atom1)
51
C> <zz|x|z> <zz|y|z> <zz|z|z> (52-54)(x,atom1)
52
C> repeat above for (y,atom1), (z,atom1)
53
C> repeat above for atom2 and multipole center
58
C> For ish = p and Lval = 2 and jsh = p you would get:
60
C> * (3*6*3)*3*3 = 486 integral derivatives
64
C> <x|xx|x> <x|xy|x> <x|xz|x> <x|yy|x> <x|yz|x> <x|zz|x> ( 1- 6)(x,atom1)
65
C> <x|xx|y> <x|xy|y> <x|xz|y> <x|yy|y> <x|yz|y> <x|zz|y> ( 7-12)(x,atom1)
66
C> <x|xx|z> <x|xy|z> <x|xz|z> <x|yy|z> <x|yz|z> <x|zz|z> (13-18)(x,atom1)
67
C> <y|xx|x> <y|xy|x> <y|xz|x> <y|yy|x> <y|yz|x> <y|zz|x> (19-24)(x,atom1)
68
C> <y|xx|y> <y|xy|y> <y|xz|y> <y|yy|y> <y|yz|y> <y|zz|y> (25-30)(x,atom1)
69
C> <y|xx|z> <y|xy|z> <y|xz|z> <y|yy|z> <y|yz|z> <y|zz|z> (31-36)(x,atom1)
70
C> <z|xx|x> <z|xy|x> <z|xz|x> <z|yy|x> <z|yz|x> <z|zz|x> (37-42)(x,atom1)
71
C> <z|xx|y> <z|xy|y> <z|xz|y> <z|yy|y> <z|yz|y> <z|zz|y> (43-48)(x,atom1)
72
C> <z|xx|z> <z|xy|z> <z|xz|z> <z|yy|z> <z|yz|z> <z|zz|z> (49-54)(x,atom1)
73
C> repeat above for (y,atom1), (z,atom1)
74
C> repeat above for atom2 and multipole center
77
C> For ish = s and lval = 4 and jsh = p you would get:
79
C> * (1*15*3)*3*3 = 405 integral derivatives
81
C> and the order would be
83
C> <s|xxxx|x> <s|xxxy|x> <s|xxxz|x> <s|xxyy|x> <s|xxyz|x> <s|xxzz|x> ( 1- 6)(x,atom1)
84
C> <s|xyyy|x> <s|xyyz|x> <s|xyzz|x> <s|xzzz|x> <s|yyyy|x> <s|yyyz|x> ( 7-12)(x,atom1)
85
C> <s|yyzz|x> <s|yzzz|x> <s|zzzz|x> (13-15)(x,atom1)
86
C> <s|xxxx|y> <s|xxxy|y> <s|xxxz|y> <s|xxyy|y> <s|xxyz|y> <s|xxzz|y> (16-21)(x,atom1)
87
C> <s|xyyy|y> <s|xyyz|y> <s|xyzz|y> <s|xzzz|y> <s|yyyy|y> <s|yyyz|y> (22-27)(x,atom1)
88
C> <s|yyzz|y> <s|yzzz|y> <s|zzzz|y> (28-30)(x,atom1)
89
C> <s|xxxx|z> <s|xxxy|z> <s|xxxz|z> <s|xxyy|z> <s|xxyz|z> <s|xxzz|z> (31-36)(x,atom1)
90
C> <s|xyyy|z> <s|xyyz|z> <s|xyzz|z> <s|xzzz|z> <s|yyyy|z> <s|yyyz|z> (37-42)(x,atom1)
91
C> <s|yyzz|z> <s|yzzz|z> <s|zzzz|z> (43-45)(x,atom1)
92
C> repeat above for (y,atom1), (z,atom1)
93
C> repeat above for atom2 and multipole center
1
96
subroutine intd_mpolel(i_basis, ish, j_basis, jsh,
3
98
& lscr, scr, lmpint, MP, num_mpint,
6
* $Id: intd_mpolel.F 19696 2010-10-29 16:53:42Z d3y133 $
101
* $Id: intd_mpolel.F 23317 2012-12-21 18:21:44Z d3y133 $
9
104
c routine to compute multipole integral derivatives at a given lvalue
96
191
external int_chk_init
97
192
external int_nint_cart
99
integer i_basis ! [input] basis set handle for ish
100
integer ish ! [input] i shell/contraction
101
integer j_basis ! [input] basis set handle for jsh
102
integer jsh ! [input] j shell/contraction
103
integer lval ! [input] maximum lvalue for
194
integer i_basis !< [Input] basis set handle for ish
195
integer ish !< [Input] i shell/contraction
196
integer j_basis !< [Input] basis set handle for jsh
197
integer jsh !< [Input] j shell/contraction
198
integer lval !< [Input] maximum lvalue for
104
199
*.......................................... multipole integrals
105
200
*.......................................... in this batch
106
double precision centerl(3) ! [input] coordinates of multipole
107
integer lscr ! [input] length of scratch array
108
double precision scr(lscr) ! [input] scratch array
109
integer lmpint ! [input] length of multipole
201
double precision centerl(3) !< [Input] coordinates of multipole
202
integer lscr !< [Input] length of scratch array
203
double precision scr(lscr) !< [Input] scratch array
204
integer lmpint !< [Input] length of multipole
110
205
*.......................................... integrals array
111
double precision MP(lmpint) ! [output] multipole integrals
112
integer num_mpint ! [output] number of multipole integrals
113
integer idatom(3) ! [output] array identifying centers for derivatives
206
double precision MP(lmpint) !< [Output] multipole integrals
207
integer num_mpint !< [Output] number of multipole integrals
208
integer idatom(3) !< [Output] array identifying centers for derivatives
114
209
c ! e.g., the first nint*3 derivatives go to center idatom(1)
115
210
c ! the second nint*3 derivatives go to center idatom(2)