1 /*
2  * Copyright (C) 2013-  Qiming Sun <osirpt.sun@gmail.com>
3  * Description: code generated by  gen-code.cl
4  */
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include "cint_bas.h"
8 #include "cart2sph.h"
9 #include "g1e.h"
10 #include "g1e_grids.h"
11 #include "g2e.h"
12 #include "optimizer.h"
13 #include "cint1e.h"
14 #include "cint2e.h"
15 #include "misc.h"
16 #include "c2f.h"
17 /* (NABLA i j|R12 |k) */
CINTgout2e_int3c2e_ip1(double * gout,double * g,FINT * idx,CINTEnvVars * envs,FINT gout_empty)18 void CINTgout2e_int3c2e_ip1(double *gout,
19 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
20 FINT nf = envs->nf;
21 FINT nrys_roots = envs->nrys_roots;
22 FINT ix, iy, iz, i, n;
23 double *g0 = g;
24 double *g1 = g0 + envs->g_size * 3;
25 G2E_D_I(g1, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
26 double s[3];
27 for (n = 0; n < nf; n++) {
28 ix = idx[0+n*3];
29 iy = idx[1+n*3];
30 iz = idx[2+n*3];
31 switch (nrys_roots) {
32 case 1:
33 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0];
34 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0];
35 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0];
36 break;
37 case 2:
38 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1];
39 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1];
40 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1];
41 break;
42 case 3:
43 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2];
44 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2];
45 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2];
46 break;
47 case 4:
48 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2]+ g1[ix+3]*g0[iy+3]*g0[iz+3];
49 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2]+ g0[ix+3]*g1[iy+3]*g0[iz+3];
50 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2]+ g0[ix+3]*g0[iy+3]*g1[iz+3];
51 break;
52 default:
53 for (i = 0; i < 3; i++) { s[i] = 0; }
54 for (i = 0; i < nrys_roots; i++) {
55 s[0] += g1[ix+i] * g0[iy+i] * g0[iz+i];
56 s[1] += g0[ix+i] * g1[iy+i] * g0[iz+i];
57 s[2] += g0[ix+i] * g0[iy+i] * g1[iz+i];
58 } break;}
59 if (gout_empty) {
60 gout[n*3+0] = + s[0];
61 gout[n*3+1] = + s[1];
62 gout[n*3+2] = + s[2];
63 } else {
64 gout[n*3+0] += + s[0];
65 gout[n*3+1] += + s[1];
66 gout[n*3+2] += + s[2];
67 }}}
int3c2e_ip1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)68 void int3c2e_ip1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
69 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
70 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
71 }
int3c2e_ip1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)72 CACHE_SIZE_T int3c2e_ip1_cart(double *out, FINT *dims, FINT *shls,
73 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
74 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
75 CINTEnvVars envs;
76 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
77 envs.f_gout = &CINTgout2e_int3c2e_ip1;
78 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
79 } // int3c2e_ip1_cart
int3c2e_ip1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)80 CACHE_SIZE_T int3c2e_ip1_sph(double *out, FINT *dims, FINT *shls,
81 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
82 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
83 CINTEnvVars envs;
84 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
85 envs.f_gout = &CINTgout2e_int3c2e_ip1;
86 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
87 } // int3c2e_ip1_sph
int3c2e_ip1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)88 CACHE_SIZE_T int3c2e_ip1_spinor(double complex *out, FINT *dims, FINT *shls,
89 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
90 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
91 CINTEnvVars envs;
92 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
93 envs.f_gout = &CINTgout2e_int3c2e_ip1;
94 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
95 } // int3c2e_ip1_spinor
96 ALL_CINT(int3c2e_ip1)
ALL_CINT_FORTRAN_(int3c2e_ip1)97 ALL_CINT_FORTRAN_(int3c2e_ip1)
98 /* (i j|R12 |NABLA k) */
99 void CINTgout2e_int3c2e_ip2(double *gout,
100 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
101 FINT nf = envs->nf;
102 FINT nrys_roots = envs->nrys_roots;
103 FINT ix, iy, iz, i, n;
104 double *g0 = g;
105 double *g1 = g0 + envs->g_size * 3;
106 G2E_D_K(g1, g0, envs->i_l+0, envs->j_l+0, envs->k_l+0, 0);
107 double s[3];
108 for (n = 0; n < nf; n++) {
109 ix = idx[0+n*3];
110 iy = idx[1+n*3];
111 iz = idx[2+n*3];
112 switch (nrys_roots) {
113 case 1:
114 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0];
115 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0];
116 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0];
117 break;
118 case 2:
119 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1];
120 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1];
121 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1];
122 break;
123 case 3:
124 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2];
125 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2];
126 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2];
127 break;
128 case 4:
129 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2]+ g1[ix+3]*g0[iy+3]*g0[iz+3];
130 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2]+ g0[ix+3]*g1[iy+3]*g0[iz+3];
131 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2]+ g0[ix+3]*g0[iy+3]*g1[iz+3];
132 break;
133 default:
134 for (i = 0; i < 3; i++) { s[i] = 0; }
135 for (i = 0; i < nrys_roots; i++) {
136 s[0] += g1[ix+i] * g0[iy+i] * g0[iz+i];
137 s[1] += g0[ix+i] * g1[iy+i] * g0[iz+i];
138 s[2] += g0[ix+i] * g0[iy+i] * g1[iz+i];
139 } break;}
140 if (gout_empty) {
141 gout[n*3+0] = + s[0];
142 gout[n*3+1] = + s[1];
143 gout[n*3+2] = + s[2];
144 } else {
145 gout[n*3+0] += + s[0];
146 gout[n*3+1] += + s[1];
147 gout[n*3+2] += + s[2];
148 }}}
int3c2e_ip2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)149 void int3c2e_ip2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
150 FINT ng[] = {0, 0, 1, 0, 1, 1, 1, 3};
151 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
152 }
int3c2e_ip2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)153 CACHE_SIZE_T int3c2e_ip2_cart(double *out, FINT *dims, FINT *shls,
154 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
155 FINT ng[] = {0, 0, 1, 0, 1, 1, 1, 3};
156 CINTEnvVars envs;
157 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
158 envs.f_gout = &CINTgout2e_int3c2e_ip2;
159 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
160 } // int3c2e_ip2_cart
int3c2e_ip2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)161 CACHE_SIZE_T int3c2e_ip2_sph(double *out, FINT *dims, FINT *shls,
162 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
163 FINT ng[] = {0, 0, 1, 0, 1, 1, 1, 3};
164 CINTEnvVars envs;
165 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
166 envs.f_gout = &CINTgout2e_int3c2e_ip2;
167 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
168 } // int3c2e_ip2_sph
int3c2e_ip2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)169 CACHE_SIZE_T int3c2e_ip2_spinor(double complex *out, FINT *dims, FINT *shls,
170 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
171 FINT ng[] = {0, 0, 1, 0, 1, 1, 1, 3};
172 CINTEnvVars envs;
173 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
174 envs.f_gout = &CINTgout2e_int3c2e_ip2;
175 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
176 } // int3c2e_ip2_spinor
177 ALL_CINT(int3c2e_ip2)
ALL_CINT_FORTRAN_(int3c2e_ip2)178 ALL_CINT_FORTRAN_(int3c2e_ip2)
179 /* (P* i DOT P j|R12 |k) */
180 void CINTgout2e_int3c2e_pvp1(double *gout,
181 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
182 FINT nf = envs->nf;
183 FINT nrys_roots = envs->nrys_roots;
184 FINT ix, iy, iz, i, n;
185 double *g0 = g;
186 double *g1 = g0 + envs->g_size * 3;
187 double *g2 = g1 + envs->g_size * 3;
188 double *g3 = g2 + envs->g_size * 3;
189 G2E_D_J(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l, 0);
190 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
191 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, 0);
192 double s[9];
193 for (n = 0; n < nf; n++) {
194 ix = idx[0+n*3];
195 iy = idx[1+n*3];
196 iz = idx[2+n*3];
197 for (i = 0; i < 9; i++) { s[i] = 0; }
198 for (i = 0; i < nrys_roots; i++) {
199 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
200 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
201 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
202 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
203 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
204 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
205 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
206 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
207 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
208 }
209 if (gout_empty) {
210 gout[n*1+0] = + s[0] + s[4] + s[8];
211 } else {
212 gout[n*1+0] += + s[0] + s[4] + s[8];
213 }}}
int3c2e_pvp1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)214 void int3c2e_pvp1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
215 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 1};
216 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
217 }
int3c2e_pvp1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)218 CACHE_SIZE_T int3c2e_pvp1_cart(double *out, FINT *dims, FINT *shls,
219 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
220 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 1};
221 CINTEnvVars envs;
222 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
223 envs.f_gout = &CINTgout2e_int3c2e_pvp1;
224 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
225 } // int3c2e_pvp1_cart
int3c2e_pvp1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)226 CACHE_SIZE_T int3c2e_pvp1_sph(double *out, FINT *dims, FINT *shls,
227 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
228 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 1};
229 CINTEnvVars envs;
230 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
231 envs.f_gout = &CINTgout2e_int3c2e_pvp1;
232 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
233 } // int3c2e_pvp1_sph
int3c2e_pvp1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)234 CACHE_SIZE_T int3c2e_pvp1_spinor(double complex *out, FINT *dims, FINT *shls,
235 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
236 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 1};
237 CINTEnvVars envs;
238 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
239 envs.f_gout = &CINTgout2e_int3c2e_pvp1;
240 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
241 } // int3c2e_pvp1_spinor
242 ALL_CINT(int3c2e_pvp1)
ALL_CINT_FORTRAN_(int3c2e_pvp1)243 ALL_CINT_FORTRAN_(int3c2e_pvp1)
244 /* (P* i CROSS P j|R12 |k) */
245 void CINTgout2e_int3c2e_pvxp1(double *gout,
246 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
247 FINT nf = envs->nf;
248 FINT nrys_roots = envs->nrys_roots;
249 FINT ix, iy, iz, i, n;
250 double *g0 = g;
251 double *g1 = g0 + envs->g_size * 3;
252 double *g2 = g1 + envs->g_size * 3;
253 double *g3 = g2 + envs->g_size * 3;
254 G2E_D_J(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l, 0);
255 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
256 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, 0);
257 double s[9];
258 for (n = 0; n < nf; n++) {
259 ix = idx[0+n*3];
260 iy = idx[1+n*3];
261 iz = idx[2+n*3];
262 for (i = 0; i < 9; i++) { s[i] = 0; }
263 for (i = 0; i < nrys_roots; i++) {
264 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
265 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
266 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
267 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
268 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
269 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
270 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
271 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
272 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
273 }
274 if (gout_empty) {
275 gout[n*3+0] = + s[5] - s[7];
276 gout[n*3+1] = + s[6] - s[2];
277 gout[n*3+2] = + s[1] - s[3];
278 } else {
279 gout[n*3+0] += + s[5] - s[7];
280 gout[n*3+1] += + s[6] - s[2];
281 gout[n*3+2] += + s[1] - s[3];
282 }}}
int3c2e_pvxp1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)283 void int3c2e_pvxp1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
284 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 3};
285 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
286 }
int3c2e_pvxp1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)287 CACHE_SIZE_T int3c2e_pvxp1_cart(double *out, FINT *dims, FINT *shls,
288 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
289 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 3};
290 CINTEnvVars envs;
291 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
292 envs.f_gout = &CINTgout2e_int3c2e_pvxp1;
293 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
294 } // int3c2e_pvxp1_cart
int3c2e_pvxp1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)295 CACHE_SIZE_T int3c2e_pvxp1_sph(double *out, FINT *dims, FINT *shls,
296 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
297 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 3};
298 CINTEnvVars envs;
299 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
300 envs.f_gout = &CINTgout2e_int3c2e_pvxp1;
301 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
302 } // int3c2e_pvxp1_sph
int3c2e_pvxp1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)303 CACHE_SIZE_T int3c2e_pvxp1_spinor(double complex *out, FINT *dims, FINT *shls,
304 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
305 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 3};
306 CINTEnvVars envs;
307 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
308 envs.f_gout = &CINTgout2e_int3c2e_pvxp1;
309 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
310 } // int3c2e_pvxp1_spinor
311 ALL_CINT(int3c2e_pvxp1)
ALL_CINT_FORTRAN_(int3c2e_pvxp1)312 ALL_CINT_FORTRAN_(int3c2e_pvxp1)
313 /* (NABLA i |R12 |j) */
314 static void CINTgout2e_int2c2e_ip1(double *gout,
315 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
316 FINT nf = envs->nf;
317 FINT nrys_roots = envs->nrys_roots;
318 FINT ix, iy, iz, i, n;
319 double *g0 = g;
320 double *g1 = g0 + envs->g_size * 3;
321 G2E_D_I(g1, g0, envs->i_l+0, 0, envs->k_l, 0);
322 double s[3];
323 for (n = 0; n < nf; n++) {
324 ix = idx[0+n*3];
325 iy = idx[1+n*3];
326 iz = idx[2+n*3];
327 switch (nrys_roots) {
328 case 1:
329 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0];
330 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0];
331 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0];
332 break;
333 case 2:
334 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1];
335 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1];
336 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1];
337 break;
338 case 3:
339 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2];
340 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2];
341 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2];
342 break;
343 case 4:
344 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2]+ g1[ix+3]*g0[iy+3]*g0[iz+3];
345 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2]+ g0[ix+3]*g1[iy+3]*g0[iz+3];
346 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2]+ g0[ix+3]*g0[iy+3]*g1[iz+3];
347 break;
348 default:
349 for (i = 0; i < 3; i++) { s[i] = 0; }
350 for (i = 0; i < nrys_roots; i++) {
351 s[0] += g1[ix+i] * g0[iy+i] * g0[iz+i];
352 s[1] += g0[ix+i] * g1[iy+i] * g0[iz+i];
353 s[2] += g0[ix+i] * g0[iy+i] * g1[iz+i];
354 } break;}
355 if (gout_empty) {
356 gout[n*3+0] = + s[0];
357 gout[n*3+1] = + s[1];
358 gout[n*3+2] = + s[2];
359 } else {
360 gout[n*3+0] += + s[0];
361 gout[n*3+1] += + s[1];
362 gout[n*3+2] += + s[2];
363 }}}
int2c2e_ip1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)364 void int2c2e_ip1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
365 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
366 CINTall_2c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
367 }
int2c2e_ip1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)368 CACHE_SIZE_T int2c2e_ip1_cart(double *out, FINT *dims, FINT *shls,
369 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
370 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
371 CINTEnvVars envs;
372 CINTinit_int2c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
373 envs.f_gout = &CINTgout2e_int2c2e_ip1;
374 return CINT2c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_1e);
375 } // int2c2e_ip1_cart
int2c2e_ip1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)376 CACHE_SIZE_T int2c2e_ip1_sph(double *out, FINT *dims, FINT *shls,
377 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
378 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
379 CINTEnvVars envs;
380 CINTinit_int2c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
381 envs.f_gout = &CINTgout2e_int2c2e_ip1;
382 return CINT2c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_1e);
383 } // int2c2e_ip1_sph
int2c2e_ip1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)384 CACHE_SIZE_T int2c2e_ip1_spinor(double complex *out, FINT *dims, FINT *shls,
385 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
386 fprintf(stderr, "&c2s_sf_1e_spinor not implementedn");
387 return 0;
388 }
389 ALL_CINT(int2c2e_ip1)
ALL_CINT_FORTRAN_(int2c2e_ip1)390 ALL_CINT_FORTRAN_(int2c2e_ip1)
391 /* (i |R12 |NABLA j) */
392 static void CINTgout2e_int2c2e_ip2(double *gout,
393 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
394 FINT nf = envs->nf;
395 FINT nrys_roots = envs->nrys_roots;
396 FINT ix, iy, iz, i, n;
397 double *g0 = g;
398 double *g1 = g0 + envs->g_size * 3;
399 G2E_D_K(g1, g0, envs->i_l+0, 0, envs->k_l+0, 0);
400 double s[3];
401 for (n = 0; n < nf; n++) {
402 ix = idx[0+n*3];
403 iy = idx[1+n*3];
404 iz = idx[2+n*3];
405 switch (nrys_roots) {
406 case 1:
407 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0];
408 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0];
409 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0];
410 break;
411 case 2:
412 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1];
413 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1];
414 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1];
415 break;
416 case 3:
417 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2];
418 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2];
419 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2];
420 break;
421 case 4:
422 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2]+ g1[ix+3]*g0[iy+3]*g0[iz+3];
423 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2]+ g0[ix+3]*g1[iy+3]*g0[iz+3];
424 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2]+ g0[ix+3]*g0[iy+3]*g1[iz+3];
425 break;
426 default:
427 for (i = 0; i < 3; i++) { s[i] = 0; }
428 for (i = 0; i < nrys_roots; i++) {
429 s[0] += g1[ix+i] * g0[iy+i] * g0[iz+i];
430 s[1] += g0[ix+i] * g1[iy+i] * g0[iz+i];
431 s[2] += g0[ix+i] * g0[iy+i] * g1[iz+i];
432 } break;}
433 if (gout_empty) {
434 gout[n*3+0] = + s[0];
435 gout[n*3+1] = + s[1];
436 gout[n*3+2] = + s[2];
437 } else {
438 gout[n*3+0] += + s[0];
439 gout[n*3+1] += + s[1];
440 gout[n*3+2] += + s[2];
441 }}}
int2c2e_ip2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)442 void int2c2e_ip2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
443 FINT ng[] = {0, 0, 1, 0, 1, 1, 1, 3};
444 CINTall_2c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
445 }
int2c2e_ip2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)446 CACHE_SIZE_T int2c2e_ip2_cart(double *out, FINT *dims, FINT *shls,
447 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
448 FINT ng[] = {0, 0, 1, 0, 1, 1, 1, 3};
449 CINTEnvVars envs;
450 CINTinit_int2c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
451 envs.f_gout = &CINTgout2e_int2c2e_ip2;
452 return CINT2c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_1e);
453 } // int2c2e_ip2_cart
int2c2e_ip2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)454 CACHE_SIZE_T int2c2e_ip2_sph(double *out, FINT *dims, FINT *shls,
455 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
456 FINT ng[] = {0, 0, 1, 0, 1, 1, 1, 3};
457 CINTEnvVars envs;
458 CINTinit_int2c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
459 envs.f_gout = &CINTgout2e_int2c2e_ip2;
460 return CINT2c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_1e);
461 } // int2c2e_ip2_sph
int2c2e_ip2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)462 CACHE_SIZE_T int2c2e_ip2_spinor(double complex *out, FINT *dims, FINT *shls,
463 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
464 fprintf(stderr, "&c2s_sf_1e_spinor not implementedn");
465 return 0;
466 }
467 ALL_CINT(int2c2e_ip2)
ALL_CINT_FORTRAN_(int2c2e_ip2)468 ALL_CINT_FORTRAN_(int2c2e_ip2)
469 /* (G i j|R12 |k) */
470 void CINTgout2e_int3c2e_ig1(double *gout,
471 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
472 FINT nf = envs->nf;
473 FINT nrys_roots = envs->nrys_roots;
474 FINT ix, iy, iz, i, n;
475 double *g0 = g;
476 double *g1 = g0 + envs->g_size * 3;
477 double rirj[3], c[3];
478 rirj[0] = envs->ri[0] - envs->rj[0];
479 rirj[1] = envs->ri[1] - envs->rj[1];
480 rirj[2] = envs->ri[2] - envs->rj[2];
481 c[0] = 1 * rirj[0];
482 c[1] = 1 * rirj[1];
483 c[2] = 1 * rirj[2];
484 G2E_R0I(g1, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
485 double s[3];
486 for (n = 0; n < nf; n++) {
487 ix = idx[0+n*3];
488 iy = idx[1+n*3];
489 iz = idx[2+n*3];
490 switch (nrys_roots) {
491 case 1:
492 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0];
493 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0];
494 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0];
495 break;
496 case 2:
497 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1];
498 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1];
499 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1];
500 break;
501 case 3:
502 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2];
503 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2];
504 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2];
505 break;
506 case 4:
507 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]+ g1[ix+2]*g0[iy+2]*g0[iz+2]+ g1[ix+3]*g0[iy+3]*g0[iz+3];
508 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]+ g0[ix+2]*g1[iy+2]*g0[iz+2]+ g0[ix+3]*g1[iy+3]*g0[iz+3];
509 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]+ g0[ix+2]*g0[iy+2]*g1[iz+2]+ g0[ix+3]*g0[iy+3]*g1[iz+3];
510 break;
511 default:
512 for (i = 0; i < 3; i++) { s[i] = 0; }
513 for (i = 0; i < nrys_roots; i++) {
514 s[0] += g1[ix+i] * g0[iy+i] * g0[iz+i];
515 s[1] += g0[ix+i] * g1[iy+i] * g0[iz+i];
516 s[2] += g0[ix+i] * g0[iy+i] * g1[iz+i];
517 } break;}
518 if (gout_empty) {
519 gout[n*3+0] = - c[1]*s[2] + c[2]*s[1];
520 gout[n*3+1] = - c[2]*s[0] + c[0]*s[2];
521 gout[n*3+2] = - c[0]*s[1] + c[1]*s[0];
522 } else {
523 gout[n*3+0] += - c[1]*s[2] + c[2]*s[1];
524 gout[n*3+1] += - c[2]*s[0] + c[0]*s[2];
525 gout[n*3+2] += - c[0]*s[1] + c[1]*s[0];
526 }}}
int3c2e_ig1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)527 void int3c2e_ig1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
528 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
529 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
530 }
int3c2e_ig1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)531 CACHE_SIZE_T int3c2e_ig1_cart(double *out, FINT *dims, FINT *shls,
532 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
533 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
534 CINTEnvVars envs;
535 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
536 envs.f_gout = &CINTgout2e_int3c2e_ig1;
537 envs.common_factor *= 0.5;
538 if (out != NULL && envs.shls[0] == envs.shls[1]) {
539 FINT i, nout;
540 FINT counts[4];
541 counts[0] = envs.nfi * envs.x_ctr[0];
542 counts[1] = envs.nfj * envs.x_ctr[1];
543 counts[2] = envs.nfk * envs.x_ctr[2];
544 counts[3] = 1;
545 if (dims == NULL) { dims = counts; }
546 nout = dims[0] * dims[1] * dims[2];
547 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
548 c2s_dset0(out+nout*i, dims, counts); }
549 return 0; }
550 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
551 } // int3c2e_ig1_cart
int3c2e_ig1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)552 CACHE_SIZE_T int3c2e_ig1_sph(double *out, FINT *dims, FINT *shls,
553 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
554 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
555 CINTEnvVars envs;
556 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
557 envs.f_gout = &CINTgout2e_int3c2e_ig1;
558 envs.common_factor *= 0.5;
559 if (out != NULL && envs.shls[0] == envs.shls[1]) {
560 FINT i, nout;
561 FINT counts[4];
562 counts[0] = (envs.i_l*2+1) * envs.x_ctr[0];
563 counts[1] = (envs.j_l*2+1) * envs.x_ctr[1];
564 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
565 counts[3] = 1;
566 if (dims == NULL) { dims = counts; }
567 nout = dims[0] * dims[1] * dims[2];
568 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
569 c2s_dset0(out+nout*i, dims, counts); }
570 return 0; }
571 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
572 } // int3c2e_ig1_sph
int3c2e_ig1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)573 CACHE_SIZE_T int3c2e_ig1_spinor(double complex *out, FINT *dims, FINT *shls,
574 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
575 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
576 CINTEnvVars envs;
577 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
578 envs.f_gout = &CINTgout2e_int3c2e_ig1;
579 envs.common_factor *= 0.5;
580 if (out != NULL && envs.shls[0] == envs.shls[1]) {
581 FINT i, nout;
582 FINT counts[4];
583 counts[0] = CINTcgto_spinor(envs.shls[0], envs.bas);
584 counts[1] = CINTcgto_spinor(envs.shls[1], envs.bas);
585 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
586 counts[3] = 1;
587 if (dims == NULL) { dims = counts; }
588 nout = dims[0] * dims[1] * dims[2];
589 for (i = 0; i < envs.ncomp_tensor; i++) {
590 c2s_zset0(out+nout*i, dims, counts); }
591 return 0; }
592 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
593 } // int3c2e_ig1_spinor
594 ALL_CINT(int3c2e_ig1)
ALL_CINT_FORTRAN_(int3c2e_ig1)595 ALL_CINT_FORTRAN_(int3c2e_ig1)
596 /* (SIGMA DOT P i SIGMA DOT P j|R12 |k) */
597 void CINTgout2e_int3c2e_spsp1(double *gout,
598 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
599 FINT nf = envs->nf;
600 FINT nrys_roots = envs->nrys_roots;
601 FINT ix, iy, iz, i, n;
602 double *g0 = g;
603 double *g1 = g0 + envs->g_size * 3;
604 double *g2 = g1 + envs->g_size * 3;
605 double *g3 = g2 + envs->g_size * 3;
606 G2E_D_J(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l, 0);
607 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
608 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, 0);
609 double s[9];
610 for (n = 0; n < nf; n++) {
611 ix = idx[0+n*3];
612 iy = idx[1+n*3];
613 iz = idx[2+n*3];
614 for (i = 0; i < 9; i++) { s[i] = 0; }
615 for (i = 0; i < nrys_roots; i++) {
616 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
617 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
618 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
619 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
620 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
621 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
622 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
623 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
624 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
625 }
626 if (gout_empty) {
627 gout[n*4+0] = + s[5] - s[7];
628 gout[n*4+1] = + s[6] - s[2];
629 gout[n*4+2] = + s[1] - s[3];
630 gout[n*4+3] = + s[0] + s[4] + s[8];
631 } else {
632 gout[n*4+0] += + s[5] - s[7];
633 gout[n*4+1] += + s[6] - s[2];
634 gout[n*4+2] += + s[1] - s[3];
635 gout[n*4+3] += + s[0] + s[4] + s[8];
636 }}}
int3c2e_spsp1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)637 void int3c2e_spsp1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
638 FINT ng[] = {1, 1, 0, 0, 2, 4, 1, 1};
639 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
640 }
int3c2e_spsp1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)641 CACHE_SIZE_T int3c2e_spsp1_cart(double *out, FINT *dims, FINT *shls,
642 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
643 FINT ng[] = {1, 1, 0, 0, 2, 4, 1, 1};
644 CINTEnvVars envs;
645 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
646 envs.f_gout = &CINTgout2e_int3c2e_spsp1;
647 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
648 } // int3c2e_spsp1_cart
int3c2e_spsp1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)649 CACHE_SIZE_T int3c2e_spsp1_sph(double *out, FINT *dims, FINT *shls,
650 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
651 FINT ng[] = {1, 1, 0, 0, 2, 4, 1, 1};
652 CINTEnvVars envs;
653 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
654 envs.f_gout = &CINTgout2e_int3c2e_spsp1;
655 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
656 } // int3c2e_spsp1_sph
int3c2e_spsp1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)657 CACHE_SIZE_T int3c2e_spsp1_spinor(double complex *out, FINT *dims, FINT *shls,
658 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
659 FINT ng[] = {1, 1, 0, 0, 2, 4, 1, 1};
660 CINTEnvVars envs;
661 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
662 envs.f_gout = &CINTgout2e_int3c2e_spsp1;
663 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_3c2e1, 0);
664 } // int3c2e_spsp1_spinor
665 ALL_CINT(int3c2e_spsp1)
ALL_CINT_FORTRAN_(int3c2e_spsp1)666 ALL_CINT_FORTRAN_(int3c2e_spsp1)
667 /* (NABLA SIGMA DOT P i SIGMA DOT P j|R12 |k) */
668 void CINTgout2e_int3c2e_ipspsp1(double *gout,
669 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
670 FINT nf = envs->nf;
671 FINT nrys_roots = envs->nrys_roots;
672 FINT ix, iy, iz, i, n;
673 double *g0 = g;
674 double *g1 = g0 + envs->g_size * 3;
675 double *g2 = g1 + envs->g_size * 3;
676 double *g3 = g2 + envs->g_size * 3;
677 double *g4 = g3 + envs->g_size * 3;
678 double *g5 = g4 + envs->g_size * 3;
679 double *g6 = g5 + envs->g_size * 3;
680 double *g7 = g6 + envs->g_size * 3;
681 G2E_D_J(g1, g0, envs->i_l+2, envs->j_l+0, envs->k_l, 0);
682 G2E_D_I(g2, g0, envs->i_l+1, envs->j_l, envs->k_l, 0);
683 G2E_D_I(g3, g1, envs->i_l+1, envs->j_l, envs->k_l, 0);
684 G2E_D_I(g4, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
685 G2E_D_I(g5, g1, envs->i_l+0, envs->j_l, envs->k_l, 0);
686 G2E_D_I(g6, g2, envs->i_l+0, envs->j_l, envs->k_l, 0);
687 G2E_D_I(g7, g3, envs->i_l+0, envs->j_l, envs->k_l, 0);
688 double s[27];
689 for (n = 0; n < nf; n++) {
690 ix = idx[0+n*3];
691 iy = idx[1+n*3];
692 iz = idx[2+n*3];
693 for (i = 0; i < 27; i++) { s[i] = 0; }
694 for (i = 0; i < nrys_roots; i++) {
695 s[0] += g7[ix+i] * g0[iy+i] * g0[iz+i];
696 s[1] += g6[ix+i] * g1[iy+i] * g0[iz+i];
697 s[2] += g6[ix+i] * g0[iy+i] * g1[iz+i];
698 s[3] += g5[ix+i] * g2[iy+i] * g0[iz+i];
699 s[4] += g4[ix+i] * g3[iy+i] * g0[iz+i];
700 s[5] += g4[ix+i] * g2[iy+i] * g1[iz+i];
701 s[6] += g5[ix+i] * g0[iy+i] * g2[iz+i];
702 s[7] += g4[ix+i] * g1[iy+i] * g2[iz+i];
703 s[8] += g4[ix+i] * g0[iy+i] * g3[iz+i];
704 s[9] += g3[ix+i] * g4[iy+i] * g0[iz+i];
705 s[10] += g2[ix+i] * g5[iy+i] * g0[iz+i];
706 s[11] += g2[ix+i] * g4[iy+i] * g1[iz+i];
707 s[12] += g1[ix+i] * g6[iy+i] * g0[iz+i];
708 s[13] += g0[ix+i] * g7[iy+i] * g0[iz+i];
709 s[14] += g0[ix+i] * g6[iy+i] * g1[iz+i];
710 s[15] += g1[ix+i] * g4[iy+i] * g2[iz+i];
711 s[16] += g0[ix+i] * g5[iy+i] * g2[iz+i];
712 s[17] += g0[ix+i] * g4[iy+i] * g3[iz+i];
713 s[18] += g3[ix+i] * g0[iy+i] * g4[iz+i];
714 s[19] += g2[ix+i] * g1[iy+i] * g4[iz+i];
715 s[20] += g2[ix+i] * g0[iy+i] * g5[iz+i];
716 s[21] += g1[ix+i] * g2[iy+i] * g4[iz+i];
717 s[22] += g0[ix+i] * g3[iy+i] * g4[iz+i];
718 s[23] += g0[ix+i] * g2[iy+i] * g5[iz+i];
719 s[24] += g1[ix+i] * g0[iy+i] * g6[iz+i];
720 s[25] += g0[ix+i] * g1[iy+i] * g6[iz+i];
721 s[26] += g0[ix+i] * g0[iy+i] * g7[iz+i];
722 }
723 if (gout_empty) {
724 gout[n*12+0] = + s[11] - s[19];
725 gout[n*12+1] = + s[18] - s[2];
726 gout[n*12+2] = + s[1] - s[9];
727 gout[n*12+3] = + s[0] + s[10] + s[20];
728 gout[n*12+4] = + s[14] - s[22];
729 gout[n*12+5] = + s[21] - s[5];
730 gout[n*12+6] = + s[4] - s[12];
731 gout[n*12+7] = + s[3] + s[13] + s[23];
732 gout[n*12+8] = + s[17] - s[25];
733 gout[n*12+9] = + s[24] - s[8];
734 gout[n*12+10] = + s[7] - s[15];
735 gout[n*12+11] = + s[6] + s[16] + s[26];
736 } else {
737 gout[n*12+0] += + s[11] - s[19];
738 gout[n*12+1] += + s[18] - s[2];
739 gout[n*12+2] += + s[1] - s[9];
740 gout[n*12+3] += + s[0] + s[10] + s[20];
741 gout[n*12+4] += + s[14] - s[22];
742 gout[n*12+5] += + s[21] - s[5];
743 gout[n*12+6] += + s[4] - s[12];
744 gout[n*12+7] += + s[3] + s[13] + s[23];
745 gout[n*12+8] += + s[17] - s[25];
746 gout[n*12+9] += + s[24] - s[8];
747 gout[n*12+10] += + s[7] - s[15];
748 gout[n*12+11] += + s[6] + s[16] + s[26];
749 }}}
int3c2e_ipspsp1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)750 void int3c2e_ipspsp1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
751 FINT ng[] = {2, 1, 0, 0, 3, 4, 1, 3};
752 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
753 }
int3c2e_ipspsp1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)754 CACHE_SIZE_T int3c2e_ipspsp1_cart(double *out, FINT *dims, FINT *shls,
755 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
756 FINT ng[] = {2, 1, 0, 0, 3, 4, 1, 3};
757 CINTEnvVars envs;
758 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
759 envs.f_gout = &CINTgout2e_int3c2e_ipspsp1;
760 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
761 } // int3c2e_ipspsp1_cart
int3c2e_ipspsp1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)762 CACHE_SIZE_T int3c2e_ipspsp1_sph(double *out, FINT *dims, FINT *shls,
763 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
764 FINT ng[] = {2, 1, 0, 0, 3, 4, 1, 3};
765 CINTEnvVars envs;
766 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
767 envs.f_gout = &CINTgout2e_int3c2e_ipspsp1;
768 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
769 } // int3c2e_ipspsp1_sph
int3c2e_ipspsp1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)770 CACHE_SIZE_T int3c2e_ipspsp1_spinor(double complex *out, FINT *dims, FINT *shls,
771 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
772 FINT ng[] = {2, 1, 0, 0, 3, 4, 1, 3};
773 CINTEnvVars envs;
774 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
775 envs.f_gout = &CINTgout2e_int3c2e_ipspsp1;
776 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_3c2e1, 0);
777 } // int3c2e_ipspsp1_spinor
778 ALL_CINT(int3c2e_ipspsp1)
ALL_CINT_FORTRAN_(int3c2e_ipspsp1)779 ALL_CINT_FORTRAN_(int3c2e_ipspsp1)
780 /* (SIGMA DOT P i SIGMA DOT P j|R12 |NABLA k) */
781 void CINTgout2e_int3c2e_spsp1ip2(double *gout,
782 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
783 FINT nf = envs->nf;
784 FINT nrys_roots = envs->nrys_roots;
785 FINT ix, iy, iz, i, n;
786 double *g0 = g;
787 double *g1 = g0 + envs->g_size * 3;
788 double *g2 = g1 + envs->g_size * 3;
789 double *g3 = g2 + envs->g_size * 3;
790 double *g4 = g3 + envs->g_size * 3;
791 double *g5 = g4 + envs->g_size * 3;
792 double *g6 = g5 + envs->g_size * 3;
793 double *g7 = g6 + envs->g_size * 3;
794 G2E_D_K(g1, g0, envs->i_l+1, envs->j_l+1, envs->k_l+0, 0);
795 G2E_D_J(g2, g0, envs->i_l+1, envs->j_l+0, envs->k_l, 0);
796 G2E_D_J(g3, g1, envs->i_l+1, envs->j_l+0, envs->k_l, 0);
797 G2E_D_I(g4, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
798 G2E_D_I(g5, g1, envs->i_l+0, envs->j_l, envs->k_l, 0);
799 G2E_D_I(g6, g2, envs->i_l+0, envs->j_l, envs->k_l, 0);
800 G2E_D_I(g7, g3, envs->i_l+0, envs->j_l, envs->k_l, 0);
801 double s[27];
802 for (n = 0; n < nf; n++) {
803 ix = idx[0+n*3];
804 iy = idx[1+n*3];
805 iz = idx[2+n*3];
806 for (i = 0; i < 27; i++) { s[i] = 0; }
807 for (i = 0; i < nrys_roots; i++) {
808 s[0] += g7[ix+i] * g0[iy+i] * g0[iz+i];
809 s[1] += g6[ix+i] * g1[iy+i] * g0[iz+i];
810 s[2] += g6[ix+i] * g0[iy+i] * g1[iz+i];
811 s[3] += g5[ix+i] * g2[iy+i] * g0[iz+i];
812 s[4] += g4[ix+i] * g3[iy+i] * g0[iz+i];
813 s[5] += g4[ix+i] * g2[iy+i] * g1[iz+i];
814 s[6] += g5[ix+i] * g0[iy+i] * g2[iz+i];
815 s[7] += g4[ix+i] * g1[iy+i] * g2[iz+i];
816 s[8] += g4[ix+i] * g0[iy+i] * g3[iz+i];
817 s[9] += g3[ix+i] * g4[iy+i] * g0[iz+i];
818 s[10] += g2[ix+i] * g5[iy+i] * g0[iz+i];
819 s[11] += g2[ix+i] * g4[iy+i] * g1[iz+i];
820 s[12] += g1[ix+i] * g6[iy+i] * g0[iz+i];
821 s[13] += g0[ix+i] * g7[iy+i] * g0[iz+i];
822 s[14] += g0[ix+i] * g6[iy+i] * g1[iz+i];
823 s[15] += g1[ix+i] * g4[iy+i] * g2[iz+i];
824 s[16] += g0[ix+i] * g5[iy+i] * g2[iz+i];
825 s[17] += g0[ix+i] * g4[iy+i] * g3[iz+i];
826 s[18] += g3[ix+i] * g0[iy+i] * g4[iz+i];
827 s[19] += g2[ix+i] * g1[iy+i] * g4[iz+i];
828 s[20] += g2[ix+i] * g0[iy+i] * g5[iz+i];
829 s[21] += g1[ix+i] * g2[iy+i] * g4[iz+i];
830 s[22] += g0[ix+i] * g3[iy+i] * g4[iz+i];
831 s[23] += g0[ix+i] * g2[iy+i] * g5[iz+i];
832 s[24] += g1[ix+i] * g0[iy+i] * g6[iz+i];
833 s[25] += g0[ix+i] * g1[iy+i] * g6[iz+i];
834 s[26] += g0[ix+i] * g0[iy+i] * g7[iz+i];
835 }
836 if (gout_empty) {
837 gout[n*12+0] = + s[15] - s[21];
838 gout[n*12+1] = + s[18] - s[6];
839 gout[n*12+2] = + s[3] - s[9];
840 gout[n*12+3] = + s[0] + s[12] + s[24];
841 gout[n*12+4] = + s[16] - s[22];
842 gout[n*12+5] = + s[19] - s[7];
843 gout[n*12+6] = + s[4] - s[10];
844 gout[n*12+7] = + s[1] + s[13] + s[25];
845 gout[n*12+8] = + s[17] - s[23];
846 gout[n*12+9] = + s[20] - s[8];
847 gout[n*12+10] = + s[5] - s[11];
848 gout[n*12+11] = + s[2] + s[14] + s[26];
849 } else {
850 gout[n*12+0] += + s[15] - s[21];
851 gout[n*12+1] += + s[18] - s[6];
852 gout[n*12+2] += + s[3] - s[9];
853 gout[n*12+3] += + s[0] + s[12] + s[24];
854 gout[n*12+4] += + s[16] - s[22];
855 gout[n*12+5] += + s[19] - s[7];
856 gout[n*12+6] += + s[4] - s[10];
857 gout[n*12+7] += + s[1] + s[13] + s[25];
858 gout[n*12+8] += + s[17] - s[23];
859 gout[n*12+9] += + s[20] - s[8];
860 gout[n*12+10] += + s[5] - s[11];
861 gout[n*12+11] += + s[2] + s[14] + s[26];
862 }}}
int3c2e_spsp1ip2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)863 void int3c2e_spsp1ip2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
864 FINT ng[] = {1, 1, 1, 0, 3, 4, 1, 3};
865 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
866 }
int3c2e_spsp1ip2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)867 CACHE_SIZE_T int3c2e_spsp1ip2_cart(double *out, FINT *dims, FINT *shls,
868 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
869 FINT ng[] = {1, 1, 1, 0, 3, 4, 1, 3};
870 CINTEnvVars envs;
871 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
872 envs.f_gout = &CINTgout2e_int3c2e_spsp1ip2;
873 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
874 } // int3c2e_spsp1ip2_cart
int3c2e_spsp1ip2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)875 CACHE_SIZE_T int3c2e_spsp1ip2_sph(double *out, FINT *dims, FINT *shls,
876 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
877 FINT ng[] = {1, 1, 1, 0, 3, 4, 1, 3};
878 CINTEnvVars envs;
879 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
880 envs.f_gout = &CINTgout2e_int3c2e_spsp1ip2;
881 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
882 } // int3c2e_spsp1ip2_sph
int3c2e_spsp1ip2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)883 CACHE_SIZE_T int3c2e_spsp1ip2_spinor(double complex *out, FINT *dims, FINT *shls,
884 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
885 FINT ng[] = {1, 1, 1, 0, 3, 4, 1, 3};
886 CINTEnvVars envs;
887 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
888 envs.f_gout = &CINTgout2e_int3c2e_spsp1ip2;
889 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_3c2e1, 0);
890 } // int3c2e_spsp1ip2_spinor
891 ALL_CINT(int3c2e_spsp1ip2)
ALL_CINT_FORTRAN_(int3c2e_spsp1ip2)892 ALL_CINT_FORTRAN_(int3c2e_spsp1ip2)
893 /* (NABLA NABLA i j|R12 |k) */
894 void CINTgout2e_int3c2e_ipip1(double *gout,
895 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
896 FINT nf = envs->nf;
897 FINT nrys_roots = envs->nrys_roots;
898 FINT ix, iy, iz, i, n;
899 double *g0 = g;
900 double *g1 = g0 + envs->g_size * 3;
901 double *g2 = g1 + envs->g_size * 3;
902 double *g3 = g2 + envs->g_size * 3;
903 G2E_D_I(g1, g0, envs->i_l+1, envs->j_l, envs->k_l, 0);
904 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
905 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, 0);
906 double s[9];
907 for (n = 0; n < nf; n++) {
908 ix = idx[0+n*3];
909 iy = idx[1+n*3];
910 iz = idx[2+n*3];
911 for (i = 0; i < 9; i++) { s[i] = 0; }
912 for (i = 0; i < nrys_roots; i++) {
913 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
914 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
915 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
916 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
917 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
918 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
919 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
920 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
921 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
922 }
923 if (gout_empty) {
924 gout[n*9+0] = + s[0];
925 gout[n*9+1] = + s[3];
926 gout[n*9+2] = + s[6];
927 gout[n*9+3] = + s[1];
928 gout[n*9+4] = + s[4];
929 gout[n*9+5] = + s[7];
930 gout[n*9+6] = + s[2];
931 gout[n*9+7] = + s[5];
932 gout[n*9+8] = + s[8];
933 } else {
934 gout[n*9+0] += + s[0];
935 gout[n*9+1] += + s[3];
936 gout[n*9+2] += + s[6];
937 gout[n*9+3] += + s[1];
938 gout[n*9+4] += + s[4];
939 gout[n*9+5] += + s[7];
940 gout[n*9+6] += + s[2];
941 gout[n*9+7] += + s[5];
942 gout[n*9+8] += + s[8];
943 }}}
int3c2e_ipip1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)944 void int3c2e_ipip1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
945 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
946 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
947 }
int3c2e_ipip1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)948 CACHE_SIZE_T int3c2e_ipip1_cart(double *out, FINT *dims, FINT *shls,
949 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
950 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
951 CINTEnvVars envs;
952 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
953 envs.f_gout = &CINTgout2e_int3c2e_ipip1;
954 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
955 } // int3c2e_ipip1_cart
int3c2e_ipip1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)956 CACHE_SIZE_T int3c2e_ipip1_sph(double *out, FINT *dims, FINT *shls,
957 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
958 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
959 CINTEnvVars envs;
960 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
961 envs.f_gout = &CINTgout2e_int3c2e_ipip1;
962 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
963 } // int3c2e_ipip1_sph
int3c2e_ipip1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)964 CACHE_SIZE_T int3c2e_ipip1_spinor(double complex *out, FINT *dims, FINT *shls,
965 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
966 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
967 CINTEnvVars envs;
968 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
969 envs.f_gout = &CINTgout2e_int3c2e_ipip1;
970 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
971 } // int3c2e_ipip1_spinor
972 ALL_CINT(int3c2e_ipip1)
ALL_CINT_FORTRAN_(int3c2e_ipip1)973 ALL_CINT_FORTRAN_(int3c2e_ipip1)
974 /* (i j|R12 |NABLA NABLA k) */
975 void CINTgout2e_int3c2e_ipip2(double *gout,
976 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
977 FINT nf = envs->nf;
978 FINT nrys_roots = envs->nrys_roots;
979 FINT ix, iy, iz, i, n;
980 double *g0 = g;
981 double *g1 = g0 + envs->g_size * 3;
982 double *g2 = g1 + envs->g_size * 3;
983 double *g3 = g2 + envs->g_size * 3;
984 G2E_D_K(g1, g0, envs->i_l+0, envs->j_l+0, envs->k_l+1, 0);
985 G2E_D_K(g2, g0, envs->i_l+0, envs->j_l+0, envs->k_l+0, 0);
986 G2E_D_K(g3, g1, envs->i_l+0, envs->j_l+0, envs->k_l+0, 0);
987 double s[9];
988 for (n = 0; n < nf; n++) {
989 ix = idx[0+n*3];
990 iy = idx[1+n*3];
991 iz = idx[2+n*3];
992 for (i = 0; i < 9; i++) { s[i] = 0; }
993 for (i = 0; i < nrys_roots; i++) {
994 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
995 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
996 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
997 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
998 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
999 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
1000 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
1001 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
1002 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
1003 }
1004 if (gout_empty) {
1005 gout[n*9+0] = + s[0];
1006 gout[n*9+1] = + s[3];
1007 gout[n*9+2] = + s[6];
1008 gout[n*9+3] = + s[1];
1009 gout[n*9+4] = + s[4];
1010 gout[n*9+5] = + s[7];
1011 gout[n*9+6] = + s[2];
1012 gout[n*9+7] = + s[5];
1013 gout[n*9+8] = + s[8];
1014 } else {
1015 gout[n*9+0] += + s[0];
1016 gout[n*9+1] += + s[3];
1017 gout[n*9+2] += + s[6];
1018 gout[n*9+3] += + s[1];
1019 gout[n*9+4] += + s[4];
1020 gout[n*9+5] += + s[7];
1021 gout[n*9+6] += + s[2];
1022 gout[n*9+7] += + s[5];
1023 gout[n*9+8] += + s[8];
1024 }}}
int3c2e_ipip2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)1025 void int3c2e_ipip2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
1026 FINT ng[] = {0, 0, 2, 0, 2, 1, 1, 9};
1027 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
1028 }
int3c2e_ipip2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1029 CACHE_SIZE_T int3c2e_ipip2_cart(double *out, FINT *dims, FINT *shls,
1030 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1031 FINT ng[] = {0, 0, 2, 0, 2, 1, 1, 9};
1032 CINTEnvVars envs;
1033 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1034 envs.f_gout = &CINTgout2e_int3c2e_ipip2;
1035 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
1036 } // int3c2e_ipip2_cart
int3c2e_ipip2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1037 CACHE_SIZE_T int3c2e_ipip2_sph(double *out, FINT *dims, FINT *shls,
1038 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1039 FINT ng[] = {0, 0, 2, 0, 2, 1, 1, 9};
1040 CINTEnvVars envs;
1041 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1042 envs.f_gout = &CINTgout2e_int3c2e_ipip2;
1043 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
1044 } // int3c2e_ipip2_sph
int3c2e_ipip2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1045 CACHE_SIZE_T int3c2e_ipip2_spinor(double complex *out, FINT *dims, FINT *shls,
1046 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1047 FINT ng[] = {0, 0, 2, 0, 2, 1, 1, 9};
1048 CINTEnvVars envs;
1049 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1050 envs.f_gout = &CINTgout2e_int3c2e_ipip2;
1051 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
1052 } // int3c2e_ipip2_spinor
1053 ALL_CINT(int3c2e_ipip2)
ALL_CINT_FORTRAN_(int3c2e_ipip2)1054 ALL_CINT_FORTRAN_(int3c2e_ipip2)
1055 /* (NABLA i NABLA j|R12 |k) */
1056 void CINTgout2e_int3c2e_ipvip1(double *gout,
1057 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
1058 FINT nf = envs->nf;
1059 FINT nrys_roots = envs->nrys_roots;
1060 FINT ix, iy, iz, i, n;
1061 double *g0 = g;
1062 double *g1 = g0 + envs->g_size * 3;
1063 double *g2 = g1 + envs->g_size * 3;
1064 double *g3 = g2 + envs->g_size * 3;
1065 G2E_D_J(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l, 0);
1066 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
1067 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, 0);
1068 double s[9];
1069 for (n = 0; n < nf; n++) {
1070 ix = idx[0+n*3];
1071 iy = idx[1+n*3];
1072 iz = idx[2+n*3];
1073 for (i = 0; i < 9; i++) { s[i] = 0; }
1074 for (i = 0; i < nrys_roots; i++) {
1075 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
1076 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
1077 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
1078 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
1079 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
1080 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
1081 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
1082 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
1083 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
1084 }
1085 if (gout_empty) {
1086 gout[n*9+0] = + s[0];
1087 gout[n*9+1] = + s[1];
1088 gout[n*9+2] = + s[2];
1089 gout[n*9+3] = + s[3];
1090 gout[n*9+4] = + s[4];
1091 gout[n*9+5] = + s[5];
1092 gout[n*9+6] = + s[6];
1093 gout[n*9+7] = + s[7];
1094 gout[n*9+8] = + s[8];
1095 } else {
1096 gout[n*9+0] += + s[0];
1097 gout[n*9+1] += + s[1];
1098 gout[n*9+2] += + s[2];
1099 gout[n*9+3] += + s[3];
1100 gout[n*9+4] += + s[4];
1101 gout[n*9+5] += + s[5];
1102 gout[n*9+6] += + s[6];
1103 gout[n*9+7] += + s[7];
1104 gout[n*9+8] += + s[8];
1105 }}}
int3c2e_ipvip1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)1106 void int3c2e_ipvip1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
1107 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 9};
1108 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
1109 }
int3c2e_ipvip1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1110 CACHE_SIZE_T int3c2e_ipvip1_cart(double *out, FINT *dims, FINT *shls,
1111 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1112 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 9};
1113 CINTEnvVars envs;
1114 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1115 envs.f_gout = &CINTgout2e_int3c2e_ipvip1;
1116 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
1117 } // int3c2e_ipvip1_cart
int3c2e_ipvip1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1118 CACHE_SIZE_T int3c2e_ipvip1_sph(double *out, FINT *dims, FINT *shls,
1119 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1120 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 9};
1121 CINTEnvVars envs;
1122 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1123 envs.f_gout = &CINTgout2e_int3c2e_ipvip1;
1124 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
1125 } // int3c2e_ipvip1_sph
int3c2e_ipvip1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1126 CACHE_SIZE_T int3c2e_ipvip1_spinor(double complex *out, FINT *dims, FINT *shls,
1127 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1128 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 9};
1129 CINTEnvVars envs;
1130 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1131 envs.f_gout = &CINTgout2e_int3c2e_ipvip1;
1132 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
1133 } // int3c2e_ipvip1_spinor
1134 ALL_CINT(int3c2e_ipvip1)
ALL_CINT_FORTRAN_(int3c2e_ipvip1)1135 ALL_CINT_FORTRAN_(int3c2e_ipvip1)
1136 /* (NABLA i j|R12 |NABLA k) */
1137 void CINTgout2e_int3c2e_ip1ip2(double *gout,
1138 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
1139 FINT nf = envs->nf;
1140 FINT nrys_roots = envs->nrys_roots;
1141 FINT ix, iy, iz, i, n;
1142 double *g0 = g;
1143 double *g1 = g0 + envs->g_size * 3;
1144 double *g2 = g1 + envs->g_size * 3;
1145 double *g3 = g2 + envs->g_size * 3;
1146 G2E_D_K(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l+0, 0);
1147 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, 0);
1148 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, 0);
1149 double s[9];
1150 for (n = 0; n < nf; n++) {
1151 ix = idx[0+n*3];
1152 iy = idx[1+n*3];
1153 iz = idx[2+n*3];
1154 for (i = 0; i < 9; i++) { s[i] = 0; }
1155 for (i = 0; i < nrys_roots; i++) {
1156 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
1157 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
1158 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
1159 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
1160 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
1161 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
1162 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
1163 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
1164 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
1165 }
1166 if (gout_empty) {
1167 gout[n*9+0] = + s[0];
1168 gout[n*9+1] = + s[1];
1169 gout[n*9+2] = + s[2];
1170 gout[n*9+3] = + s[3];
1171 gout[n*9+4] = + s[4];
1172 gout[n*9+5] = + s[5];
1173 gout[n*9+6] = + s[6];
1174 gout[n*9+7] = + s[7];
1175 gout[n*9+8] = + s[8];
1176 } else {
1177 gout[n*9+0] += + s[0];
1178 gout[n*9+1] += + s[1];
1179 gout[n*9+2] += + s[2];
1180 gout[n*9+3] += + s[3];
1181 gout[n*9+4] += + s[4];
1182 gout[n*9+5] += + s[5];
1183 gout[n*9+6] += + s[6];
1184 gout[n*9+7] += + s[7];
1185 gout[n*9+8] += + s[8];
1186 }}}
int3c2e_ip1ip2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)1187 void int3c2e_ip1ip2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
1188 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
1189 CINTall_3c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
1190 }
int3c2e_ip1ip2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1191 CACHE_SIZE_T int3c2e_ip1ip2_cart(double *out, FINT *dims, FINT *shls,
1192 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1193 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
1194 CINTEnvVars envs;
1195 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1196 envs.f_gout = &CINTgout2e_int3c2e_ip1ip2;
1197 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_3c2e1, 0);
1198 } // int3c2e_ip1ip2_cart
int3c2e_ip1ip2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1199 CACHE_SIZE_T int3c2e_ip1ip2_sph(double *out, FINT *dims, FINT *shls,
1200 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1201 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
1202 CINTEnvVars envs;
1203 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1204 envs.f_gout = &CINTgout2e_int3c2e_ip1ip2;
1205 return CINT3c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_3c2e1, 0);
1206 } // int3c2e_ip1ip2_sph
int3c2e_ip1ip2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1207 CACHE_SIZE_T int3c2e_ip1ip2_spinor(double complex *out, FINT *dims, FINT *shls,
1208 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1209 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
1210 CINTEnvVars envs;
1211 CINTinit_int3c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1212 envs.f_gout = &CINTgout2e_int3c2e_ip1ip2;
1213 return CINT3c2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_3c2e1, 0);
1214 } // int3c2e_ip1ip2_spinor
1215 ALL_CINT(int3c2e_ip1ip2)
ALL_CINT_FORTRAN_(int3c2e_ip1ip2)1216 ALL_CINT_FORTRAN_(int3c2e_ip1ip2)
1217 /* (NABLA NABLA i |R12 |j) */
1218 static void CINTgout2e_int2c2e_ipip1(double *gout,
1219 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
1220 FINT nf = envs->nf;
1221 FINT nrys_roots = envs->nrys_roots;
1222 FINT ix, iy, iz, i, n;
1223 double *g0 = g;
1224 double *g1 = g0 + envs->g_size * 3;
1225 double *g2 = g1 + envs->g_size * 3;
1226 double *g3 = g2 + envs->g_size * 3;
1227 G2E_D_I(g1, g0, envs->i_l+1, 0, envs->k_l, 0);
1228 G2E_D_I(g2, g0, envs->i_l+0, 0, envs->k_l, 0);
1229 G2E_D_I(g3, g1, envs->i_l+0, 0, envs->k_l, 0);
1230 double s[9];
1231 for (n = 0; n < nf; n++) {
1232 ix = idx[0+n*3];
1233 iy = idx[1+n*3];
1234 iz = idx[2+n*3];
1235 for (i = 0; i < 9; i++) { s[i] = 0; }
1236 for (i = 0; i < nrys_roots; i++) {
1237 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
1238 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
1239 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
1240 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
1241 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
1242 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
1243 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
1244 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
1245 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
1246 }
1247 if (gout_empty) {
1248 gout[n*9+0] = + s[0];
1249 gout[n*9+1] = + s[3];
1250 gout[n*9+2] = + s[6];
1251 gout[n*9+3] = + s[1];
1252 gout[n*9+4] = + s[4];
1253 gout[n*9+5] = + s[7];
1254 gout[n*9+6] = + s[2];
1255 gout[n*9+7] = + s[5];
1256 gout[n*9+8] = + s[8];
1257 } else {
1258 gout[n*9+0] += + s[0];
1259 gout[n*9+1] += + s[3];
1260 gout[n*9+2] += + s[6];
1261 gout[n*9+3] += + s[1];
1262 gout[n*9+4] += + s[4];
1263 gout[n*9+5] += + s[7];
1264 gout[n*9+6] += + s[2];
1265 gout[n*9+7] += + s[5];
1266 gout[n*9+8] += + s[8];
1267 }}}
int2c2e_ipip1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)1268 void int2c2e_ipip1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
1269 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
1270 CINTall_2c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
1271 }
int2c2e_ipip1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1272 CACHE_SIZE_T int2c2e_ipip1_cart(double *out, FINT *dims, FINT *shls,
1273 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1274 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
1275 CINTEnvVars envs;
1276 CINTinit_int2c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1277 envs.f_gout = &CINTgout2e_int2c2e_ipip1;
1278 return CINT2c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_1e);
1279 } // int2c2e_ipip1_cart
int2c2e_ipip1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1280 CACHE_SIZE_T int2c2e_ipip1_sph(double *out, FINT *dims, FINT *shls,
1281 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1282 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
1283 CINTEnvVars envs;
1284 CINTinit_int2c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1285 envs.f_gout = &CINTgout2e_int2c2e_ipip1;
1286 return CINT2c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_1e);
1287 } // int2c2e_ipip1_sph
int2c2e_ipip1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1288 CACHE_SIZE_T int2c2e_ipip1_spinor(double complex *out, FINT *dims, FINT *shls,
1289 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1290 fprintf(stderr, "&c2s_sf_1e_spinor not implementedn");
1291 return 0;
1292 }
1293 ALL_CINT(int2c2e_ipip1)
ALL_CINT_FORTRAN_(int2c2e_ipip1)1294 ALL_CINT_FORTRAN_(int2c2e_ipip1)
1295 /* (NABLA i |R12 |NABLA j) */
1296 static void CINTgout2e_int2c2e_ip1ip2(double *gout,
1297 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
1298 FINT nf = envs->nf;
1299 FINT nrys_roots = envs->nrys_roots;
1300 FINT ix, iy, iz, i, n;
1301 double *g0 = g;
1302 double *g1 = g0 + envs->g_size * 3;
1303 double *g2 = g1 + envs->g_size * 3;
1304 double *g3 = g2 + envs->g_size * 3;
1305 G2E_D_K(g1, g0, envs->i_l+1, 0, envs->k_l+0, 0);
1306 G2E_D_I(g2, g0, envs->i_l+0, 0, envs->k_l, 0);
1307 G2E_D_I(g3, g1, envs->i_l+0, 0, envs->k_l, 0);
1308 double s[9];
1309 for (n = 0; n < nf; n++) {
1310 ix = idx[0+n*3];
1311 iy = idx[1+n*3];
1312 iz = idx[2+n*3];
1313 for (i = 0; i < 9; i++) { s[i] = 0; }
1314 for (i = 0; i < nrys_roots; i++) {
1315 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
1316 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
1317 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
1318 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
1319 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
1320 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
1321 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
1322 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
1323 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
1324 }
1325 if (gout_empty) {
1326 gout[n*9+0] = + s[0];
1327 gout[n*9+1] = + s[1];
1328 gout[n*9+2] = + s[2];
1329 gout[n*9+3] = + s[3];
1330 gout[n*9+4] = + s[4];
1331 gout[n*9+5] = + s[5];
1332 gout[n*9+6] = + s[6];
1333 gout[n*9+7] = + s[7];
1334 gout[n*9+8] = + s[8];
1335 } else {
1336 gout[n*9+0] += + s[0];
1337 gout[n*9+1] += + s[1];
1338 gout[n*9+2] += + s[2];
1339 gout[n*9+3] += + s[3];
1340 gout[n*9+4] += + s[4];
1341 gout[n*9+5] += + s[5];
1342 gout[n*9+6] += + s[6];
1343 gout[n*9+7] += + s[7];
1344 gout[n*9+8] += + s[8];
1345 }}}
int2c2e_ip1ip2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)1346 void int2c2e_ip1ip2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
1347 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
1348 CINTall_2c2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
1349 }
int2c2e_ip1ip2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1350 CACHE_SIZE_T int2c2e_ip1ip2_cart(double *out, FINT *dims, FINT *shls,
1351 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1352 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
1353 CINTEnvVars envs;
1354 CINTinit_int2c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1355 envs.f_gout = &CINTgout2e_int2c2e_ip1ip2;
1356 return CINT2c2e_drv(out, dims, &envs, opt, cache, &c2s_cart_1e);
1357 } // int2c2e_ip1ip2_cart
int2c2e_ip1ip2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1358 CACHE_SIZE_T int2c2e_ip1ip2_sph(double *out, FINT *dims, FINT *shls,
1359 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1360 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
1361 CINTEnvVars envs;
1362 CINTinit_int2c2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1363 envs.f_gout = &CINTgout2e_int2c2e_ip1ip2;
1364 return CINT2c2e_drv(out, dims, &envs, opt, cache, &c2s_sph_1e);
1365 } // int2c2e_ip1ip2_sph
int2c2e_ip1ip2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1366 CACHE_SIZE_T int2c2e_ip1ip2_spinor(double complex *out, FINT *dims, FINT *shls,
1367 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1368 fprintf(stderr, "&c2s_sf_1e_spinor not implementedn");
1369 return 0;
1370 }
1371 ALL_CINT(int2c2e_ip1ip2)
1372 ALL_CINT_FORTRAN_(int2c2e_ip1ip2)
1373