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 /* <k i|GAUNT |SIGMA DOT P j SIGMA DOT P l> : i,j \in electron 1; k,l \in electron 2
18  * = (i SIGMA DOT P j|GAUNT |k SIGMA DOT P l) */
CINTgout2e_int2e_ssp1ssp2(double * gout,double * g,FINT * idx,CINTEnvVars * envs,FINT gout_empty)19 void CINTgout2e_int2e_ssp1ssp2(double *gout,
20 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
21 FINT nf = envs->nf;
22 FINT nrys_roots = envs->nrys_roots;
23 FINT ix, iy, iz, i, n;
24 double *g0 = g;
25 double *g1 = g0 + envs->g_size * 3;
26 double *g2 = g1 + envs->g_size * 3;
27 double *g3 = g2 + envs->g_size * 3;
28 G2E_D_L(g1, g0, envs->i_l+0, envs->j_l+1, envs->k_l+0, envs->l_l+0);
29 G2E_D_J(g2, g0, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l);
30 G2E_D_J(g3, g1, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l);
31 double s[9];
32 for (n = 0; n < nf; n++) {
33 ix = idx[0+n*3];
34 iy = idx[1+n*3];
35 iz = idx[2+n*3];
36 for (i = 0; i < 9; i++) { s[i] = 0; }
37 for (i = 0; i < nrys_roots; i++) {
38 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
39 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
40 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
41 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
42 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
43 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
44 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
45 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
46 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
47 }
48 if (gout_empty) {
49 gout[n*16+0] = + s[8] + s[4];
50 gout[n*16+1] = - s[1];
51 gout[n*16+2] = - s[2];
52 gout[n*16+3] = + s[5] - s[7];
53 gout[n*16+4] = - s[3];
54 gout[n*16+5] = + s[8] + s[0];
55 gout[n*16+6] = - s[5];
56 gout[n*16+7] = - s[2] + s[6];
57 gout[n*16+8] = - s[6];
58 gout[n*16+9] = - s[7];
59 gout[n*16+10] = + s[4] + s[0];
60 gout[n*16+11] = + s[1] - s[3];
61 gout[n*16+12] = + s[7] - s[5];
62 gout[n*16+13] = - s[6] + s[2];
63 gout[n*16+14] = + s[3] - s[1];
64 gout[n*16+15] = + s[0] + s[4] + s[8];
65 } else {
66 gout[n*16+0] += + s[8] + s[4];
67 gout[n*16+1] += - s[1];
68 gout[n*16+2] += - s[2];
69 gout[n*16+3] += + s[5] - s[7];
70 gout[n*16+4] += - s[3];
71 gout[n*16+5] += + s[8] + s[0];
72 gout[n*16+6] += - s[5];
73 gout[n*16+7] += - s[2] + s[6];
74 gout[n*16+8] += - s[6];
75 gout[n*16+9] += - s[7];
76 gout[n*16+10] += + s[4] + s[0];
77 gout[n*16+11] += + s[1] - s[3];
78 gout[n*16+12] += + s[7] - s[5];
79 gout[n*16+13] += - s[6] + s[2];
80 gout[n*16+14] += + s[3] - s[1];
81 gout[n*16+15] += + s[0] + s[4] + s[8];
82 }}}
int2e_ssp1ssp2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)83 void int2e_ssp1ssp2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
84 FINT ng[] = {0, 1, 0, 1, 2, 4, 4, 1};
85 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
86 }
int2e_ssp1ssp2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)87 CACHE_SIZE_T int2e_ssp1ssp2_cart(double *out, FINT *dims, FINT *shls,
88 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
89 FINT ng[] = {0, 1, 0, 1, 2, 4, 4, 1};
90 CINTEnvVars envs;
91 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
92 envs.f_gout = &CINTgout2e_int2e_ssp1ssp2;
93 envs.common_factor *= -1;
94 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
95 } // int2e_ssp1ssp2_cart
int2e_ssp1ssp2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)96 CACHE_SIZE_T int2e_ssp1ssp2_sph(double *out, FINT *dims, FINT *shls,
97 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
98 FINT ng[] = {0, 1, 0, 1, 2, 4, 4, 1};
99 CINTEnvVars envs;
100 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
101 envs.f_gout = &CINTgout2e_int2e_ssp1ssp2;
102 envs.common_factor *= -1;
103 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
104 } // int2e_ssp1ssp2_sph
int2e_ssp1ssp2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)105 CACHE_SIZE_T int2e_ssp1ssp2_spinor(double complex *out, FINT *dims, FINT *shls,
106 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
107 FINT ng[] = {0, 1, 0, 1, 2, 4, 4, 1};
108 CINTEnvVars envs;
109 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
110 envs.f_gout = &CINTgout2e_int2e_ssp1ssp2;
111 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_2e1i, &c2s_si_2e2i);
112 } // int2e_ssp1ssp2_spinor
113 ALL_CINT(int2e_ssp1ssp2)
ALL_CINT_FORTRAN_(int2e_ssp1ssp2)114 ALL_CINT_FORTRAN_(int2e_ssp1ssp2)
115 /* <SIGMA DOT P k i|GAUNT |SIGMA DOT P j l> : i,j \in electron 1; k,l \in electron 2
116  * = (i SIGMA DOT P j|GAUNT |SIGMA DOT P k l) */
117 void CINTgout2e_int2e_ssp1sps2(double *gout,
118 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
119 FINT nf = envs->nf;
120 FINT nrys_roots = envs->nrys_roots;
121 FINT ix, iy, iz, i, n;
122 double *g0 = g;
123 double *g1 = g0 + envs->g_size * 3;
124 double *g2 = g1 + envs->g_size * 3;
125 double *g3 = g2 + envs->g_size * 3;
126 G2E_D_K(g1, g0, envs->i_l+0, envs->j_l+1, envs->k_l+0, envs->l_l);
127 G2E_D_J(g2, g0, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l);
128 G2E_D_J(g3, g1, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l);
129 double s[9];
130 for (n = 0; n < nf; n++) {
131 ix = idx[0+n*3];
132 iy = idx[1+n*3];
133 iz = idx[2+n*3];
134 for (i = 0; i < 9; i++) { s[i] = 0; }
135 for (i = 0; i < nrys_roots; i++) {
136 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
137 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
138 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
139 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
140 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
141 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
142 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
143 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
144 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
145 }
146 if (gout_empty) {
147 gout[n*16+0] = + s[8] + s[4];
148 gout[n*16+1] = - s[1];
149 gout[n*16+2] = - s[2];
150 gout[n*16+3] = + s[5] - s[7];
151 gout[n*16+4] = - s[3];
152 gout[n*16+5] = + s[8] + s[0];
153 gout[n*16+6] = - s[5];
154 gout[n*16+7] = - s[2] + s[6];
155 gout[n*16+8] = - s[6];
156 gout[n*16+9] = - s[7];
157 gout[n*16+10] = + s[4] + s[0];
158 gout[n*16+11] = + s[1] - s[3];
159 gout[n*16+12] = - s[7] + s[5];
160 gout[n*16+13] = + s[6] - s[2];
161 gout[n*16+14] = - s[3] + s[1];
162 gout[n*16+15] = - s[0] - s[4] - s[8];
163 } else {
164 gout[n*16+0] += + s[8] + s[4];
165 gout[n*16+1] += - s[1];
166 gout[n*16+2] += - s[2];
167 gout[n*16+3] += + s[5] - s[7];
168 gout[n*16+4] += - s[3];
169 gout[n*16+5] += + s[8] + s[0];
170 gout[n*16+6] += - s[5];
171 gout[n*16+7] += - s[2] + s[6];
172 gout[n*16+8] += - s[6];
173 gout[n*16+9] += - s[7];
174 gout[n*16+10] += + s[4] + s[0];
175 gout[n*16+11] += + s[1] - s[3];
176 gout[n*16+12] += - s[7] + s[5];
177 gout[n*16+13] += + s[6] - s[2];
178 gout[n*16+14] += - s[3] + s[1];
179 gout[n*16+15] += - s[0] - s[4] - s[8];
180 }}}
int2e_ssp1sps2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)181 void int2e_ssp1sps2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
182 FINT ng[] = {0, 1, 1, 0, 2, 4, 4, 1};
183 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
184 }
int2e_ssp1sps2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)185 CACHE_SIZE_T int2e_ssp1sps2_cart(double *out, FINT *dims, FINT *shls,
186 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
187 FINT ng[] = {0, 1, 1, 0, 2, 4, 4, 1};
188 CINTEnvVars envs;
189 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
190 envs.f_gout = &CINTgout2e_int2e_ssp1sps2;
191 envs.common_factor *= -1;
192 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
193 } // int2e_ssp1sps2_cart
int2e_ssp1sps2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)194 CACHE_SIZE_T int2e_ssp1sps2_sph(double *out, FINT *dims, FINT *shls,
195 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
196 FINT ng[] = {0, 1, 1, 0, 2, 4, 4, 1};
197 CINTEnvVars envs;
198 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
199 envs.f_gout = &CINTgout2e_int2e_ssp1sps2;
200 envs.common_factor *= -1;
201 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
202 } // int2e_ssp1sps2_sph
int2e_ssp1sps2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)203 CACHE_SIZE_T int2e_ssp1sps2_spinor(double complex *out, FINT *dims, FINT *shls,
204 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
205 FINT ng[] = {0, 1, 1, 0, 2, 4, 4, 1};
206 CINTEnvVars envs;
207 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
208 envs.f_gout = &CINTgout2e_int2e_ssp1sps2;
209 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_2e1i, &c2s_si_2e2i);
210 } // int2e_ssp1sps2_spinor
211 ALL_CINT(int2e_ssp1sps2)
ALL_CINT_FORTRAN_(int2e_ssp1sps2)212 ALL_CINT_FORTRAN_(int2e_ssp1sps2)
213 /* <k SIGMA DOT P i|GAUNT |j SIGMA DOT P l> : i,j \in electron 1; k,l \in electron 2
214  * = (SIGMA DOT P i j|GAUNT |k SIGMA DOT P l) */
215 void CINTgout2e_int2e_sps1ssp2(double *gout,
216 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
217 FINT nf = envs->nf;
218 FINT nrys_roots = envs->nrys_roots;
219 FINT ix, iy, iz, i, n;
220 double *g0 = g;
221 double *g1 = g0 + envs->g_size * 3;
222 double *g2 = g1 + envs->g_size * 3;
223 double *g3 = g2 + envs->g_size * 3;
224 G2E_D_L(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l+0, envs->l_l+0);
225 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
226 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
227 double s[9];
228 for (n = 0; n < nf; n++) {
229 ix = idx[0+n*3];
230 iy = idx[1+n*3];
231 iz = idx[2+n*3];
232 for (i = 0; i < 9; i++) { s[i] = 0; }
233 for (i = 0; i < nrys_roots; i++) {
234 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
235 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
236 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
237 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
238 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
239 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
240 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
241 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
242 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
243 }
244 if (gout_empty) {
245 gout[n*16+0] = + s[8] + s[4];
246 gout[n*16+1] = - s[1];
247 gout[n*16+2] = - s[2];
248 gout[n*16+3] = - s[5] + s[7];
249 gout[n*16+4] = - s[3];
250 gout[n*16+5] = + s[8] + s[0];
251 gout[n*16+6] = - s[5];
252 gout[n*16+7] = + s[2] - s[6];
253 gout[n*16+8] = - s[6];
254 gout[n*16+9] = - s[7];
255 gout[n*16+10] = + s[4] + s[0];
256 gout[n*16+11] = - s[1] + s[3];
257 gout[n*16+12] = + s[7] - s[5];
258 gout[n*16+13] = - s[6] + s[2];
259 gout[n*16+14] = + s[3] - s[1];
260 gout[n*16+15] = - s[0] - s[4] - s[8];
261 } else {
262 gout[n*16+0] += + s[8] + s[4];
263 gout[n*16+1] += - s[1];
264 gout[n*16+2] += - s[2];
265 gout[n*16+3] += - s[5] + s[7];
266 gout[n*16+4] += - s[3];
267 gout[n*16+5] += + s[8] + s[0];
268 gout[n*16+6] += - s[5];
269 gout[n*16+7] += + s[2] - s[6];
270 gout[n*16+8] += - s[6];
271 gout[n*16+9] += - s[7];
272 gout[n*16+10] += + s[4] + s[0];
273 gout[n*16+11] += - s[1] + s[3];
274 gout[n*16+12] += + s[7] - s[5];
275 gout[n*16+13] += - s[6] + s[2];
276 gout[n*16+14] += + s[3] - s[1];
277 gout[n*16+15] += - s[0] - s[4] - s[8];
278 }}}
int2e_sps1ssp2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)279 void int2e_sps1ssp2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
280 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 1};
281 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
282 }
int2e_sps1ssp2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)283 CACHE_SIZE_T int2e_sps1ssp2_cart(double *out, FINT *dims, FINT *shls,
284 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
285 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 1};
286 CINTEnvVars envs;
287 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
288 envs.f_gout = &CINTgout2e_int2e_sps1ssp2;
289 envs.common_factor *= -1;
290 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
291 } // int2e_sps1ssp2_cart
int2e_sps1ssp2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)292 CACHE_SIZE_T int2e_sps1ssp2_sph(double *out, FINT *dims, FINT *shls,
293 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
294 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 1};
295 CINTEnvVars envs;
296 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
297 envs.f_gout = &CINTgout2e_int2e_sps1ssp2;
298 envs.common_factor *= -1;
299 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
300 } // int2e_sps1ssp2_sph
int2e_sps1ssp2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)301 CACHE_SIZE_T int2e_sps1ssp2_spinor(double complex *out, FINT *dims, FINT *shls,
302 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
303 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 1};
304 CINTEnvVars envs;
305 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
306 envs.f_gout = &CINTgout2e_int2e_sps1ssp2;
307 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_2e1i, &c2s_si_2e2i);
308 } // int2e_sps1ssp2_spinor
309 ALL_CINT(int2e_sps1ssp2)
ALL_CINT_FORTRAN_(int2e_sps1ssp2)310 ALL_CINT_FORTRAN_(int2e_sps1ssp2)
311 /* <SIGMA DOT P k SIGMA DOT P i|GAUNT |j l> : i,j \in electron 1; k,l \in electron 2
312  * = (SIGMA DOT P i j|GAUNT |SIGMA DOT P k l) */
313 void CINTgout2e_int2e_sps1sps2(double *gout,
314 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
315 FINT nf = envs->nf;
316 FINT nrys_roots = envs->nrys_roots;
317 FINT ix, iy, iz, i, n;
318 double *g0 = g;
319 double *g1 = g0 + envs->g_size * 3;
320 double *g2 = g1 + envs->g_size * 3;
321 double *g3 = g2 + envs->g_size * 3;
322 G2E_D_K(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l+0, envs->l_l);
323 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
324 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
325 double s[9];
326 for (n = 0; n < nf; n++) {
327 ix = idx[0+n*3];
328 iy = idx[1+n*3];
329 iz = idx[2+n*3];
330 for (i = 0; i < 9; i++) { s[i] = 0; }
331 for (i = 0; i < nrys_roots; i++) {
332 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
333 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
334 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
335 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
336 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
337 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
338 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
339 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
340 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
341 }
342 if (gout_empty) {
343 gout[n*16+0] = + s[8] + s[4];
344 gout[n*16+1] = - s[1];
345 gout[n*16+2] = - s[2];
346 gout[n*16+3] = - s[5] + s[7];
347 gout[n*16+4] = - s[3];
348 gout[n*16+5] = + s[8] + s[0];
349 gout[n*16+6] = - s[5];
350 gout[n*16+7] = + s[2] - s[6];
351 gout[n*16+8] = - s[6];
352 gout[n*16+9] = - s[7];
353 gout[n*16+10] = + s[4] + s[0];
354 gout[n*16+11] = - s[1] + s[3];
355 gout[n*16+12] = - s[7] + s[5];
356 gout[n*16+13] = + s[6] - s[2];
357 gout[n*16+14] = - s[3] + s[1];
358 gout[n*16+15] = + s[0] + s[4] + s[8];
359 } else {
360 gout[n*16+0] += + s[8] + s[4];
361 gout[n*16+1] += - s[1];
362 gout[n*16+2] += - s[2];
363 gout[n*16+3] += - s[5] + s[7];
364 gout[n*16+4] += - s[3];
365 gout[n*16+5] += + s[8] + s[0];
366 gout[n*16+6] += - s[5];
367 gout[n*16+7] += + s[2] - s[6];
368 gout[n*16+8] += - s[6];
369 gout[n*16+9] += - s[7];
370 gout[n*16+10] += + s[4] + s[0];
371 gout[n*16+11] += - s[1] + s[3];
372 gout[n*16+12] += - s[7] + s[5];
373 gout[n*16+13] += + s[6] - s[2];
374 gout[n*16+14] += - s[3] + s[1];
375 gout[n*16+15] += + s[0] + s[4] + s[8];
376 }}}
int2e_sps1sps2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)377 void int2e_sps1sps2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
378 FINT ng[] = {1, 0, 1, 0, 2, 4, 4, 1};
379 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
380 }
int2e_sps1sps2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)381 CACHE_SIZE_T int2e_sps1sps2_cart(double *out, FINT *dims, FINT *shls,
382 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
383 FINT ng[] = {1, 0, 1, 0, 2, 4, 4, 1};
384 CINTEnvVars envs;
385 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
386 envs.f_gout = &CINTgout2e_int2e_sps1sps2;
387 envs.common_factor *= -1;
388 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
389 } // int2e_sps1sps2_cart
int2e_sps1sps2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)390 CACHE_SIZE_T int2e_sps1sps2_sph(double *out, FINT *dims, FINT *shls,
391 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
392 FINT ng[] = {1, 0, 1, 0, 2, 4, 4, 1};
393 CINTEnvVars envs;
394 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
395 envs.f_gout = &CINTgout2e_int2e_sps1sps2;
396 envs.common_factor *= -1;
397 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
398 } // int2e_sps1sps2_sph
int2e_sps1sps2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)399 CACHE_SIZE_T int2e_sps1sps2_spinor(double complex *out, FINT *dims, FINT *shls,
400 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
401 FINT ng[] = {1, 0, 1, 0, 2, 4, 4, 1};
402 CINTEnvVars envs;
403 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
404 envs.f_gout = &CINTgout2e_int2e_sps1sps2;
405 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_2e1i, &c2s_si_2e2i);
406 } // int2e_sps1sps2_spinor
407 ALL_CINT(int2e_sps1sps2)
ALL_CINT_FORTRAN_(int2e_sps1sps2)408 ALL_CINT_FORTRAN_(int2e_sps1sps2)
409 /* <k RC CROSS SIGMA i|GAUNT |j SIGMA DOT P l> : i,j \in electron 1; k,l \in electron 2
410  * = (RC CROSS SIGMA i j|GAUNT |k SIGMA DOT P l) */
411 void CINTgout2e_int2e_cg_ssa10ssp2(double *gout,
412 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
413 FINT nf = envs->nf;
414 FINT nrys_roots = envs->nrys_roots;
415 FINT ix, iy, iz, i, n;
416 double *g0 = g;
417 double *g1 = g0 + envs->g_size * 3;
418 double *g2 = g1 + envs->g_size * 3;
419 double *g3 = g2 + envs->g_size * 3;
420 double dri[3];
421 dri[0] = envs->ri[0] - envs->env[PTR_COMMON_ORIG+0];
422 dri[1] = envs->ri[1] - envs->env[PTR_COMMON_ORIG+1];
423 dri[2] = envs->ri[2] - envs->env[PTR_COMMON_ORIG+2];
424 G2E_D_L(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l+0, envs->l_l+0);
425 G2E_RCI(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
426 G2E_RCI(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
427 double s[9];
428 for (n = 0; n < nf; n++) {
429 ix = idx[0+n*3];
430 iy = idx[1+n*3];
431 iz = idx[2+n*3];
432 for (i = 0; i < 9; i++) { s[i] = 0; }
433 for (i = 0; i < nrys_roots; i++) {
434 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
435 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
436 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
437 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
438 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
439 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
440 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
441 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
442 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
443 }
444 if (gout_empty) {
445 gout[n*48+0] = + s[5] - s[7];
446 gout[n*48+1] = 0;
447 gout[n*48+2] = 0;
448 gout[n*48+3] = + s[8] + s[4];
449 gout[n*48+4] = + s[6];
450 gout[n*48+5] = + s[5];
451 gout[n*48+6] = + s[8];
452 gout[n*48+7] = - s[3];
453 gout[n*48+8] = - s[3];
454 gout[n*48+9] = - s[4];
455 gout[n*48+10] = - s[7];
456 gout[n*48+11] = - s[6];
457 gout[n*48+12] = + s[4] + s[8];
458 gout[n*48+13] = - s[3];
459 gout[n*48+14] = - s[6];
460 gout[n*48+15] = + s[7] - s[5];
461 gout[n*48+16] = - s[2];
462 gout[n*48+17] = - s[7];
463 gout[n*48+18] = - s[8];
464 gout[n*48+19] = - s[1];
465 gout[n*48+20] = 0;
466 gout[n*48+21] = - s[2] + s[6];
467 gout[n*48+22] = 0;
468 gout[n*48+23] = + s[8] + s[0];
469 gout[n*48+24] = + s[0];
470 gout[n*48+25] = + s[1];
471 gout[n*48+26] = + s[6];
472 gout[n*48+27] = - s[7];
473 gout[n*48+28] = - s[1];
474 gout[n*48+29] = + s[0] + s[8];
475 gout[n*48+30] = - s[7];
476 gout[n*48+31] = - s[6] + s[2];
477 gout[n*48+32] = + s[1];
478 gout[n*48+33] = + s[4];
479 gout[n*48+34] = + s[5];
480 gout[n*48+35] = - s[2];
481 gout[n*48+36] = - s[0];
482 gout[n*48+37] = - s[3];
483 gout[n*48+38] = - s[2];
484 gout[n*48+39] = - s[5];
485 gout[n*48+40] = 0;
486 gout[n*48+41] = 0;
487 gout[n*48+42] = + s[1] - s[3];
488 gout[n*48+43] = + s[4] + s[0];
489 gout[n*48+44] = - s[2];
490 gout[n*48+45] = - s[5];
491 gout[n*48+46] = + s[0] + s[4];
492 gout[n*48+47] = + s[3] - s[1];
493 } else {
494 gout[n*48+0] += + s[5] - s[7];
495 gout[n*48+1] += 0;
496 gout[n*48+2] += 0;
497 gout[n*48+3] += + s[8] + s[4];
498 gout[n*48+4] += + s[6];
499 gout[n*48+5] += + s[5];
500 gout[n*48+6] += + s[8];
501 gout[n*48+7] += - s[3];
502 gout[n*48+8] += - s[3];
503 gout[n*48+9] += - s[4];
504 gout[n*48+10] += - s[7];
505 gout[n*48+11] += - s[6];
506 gout[n*48+12] += + s[4] + s[8];
507 gout[n*48+13] += - s[3];
508 gout[n*48+14] += - s[6];
509 gout[n*48+15] += + s[7] - s[5];
510 gout[n*48+16] += - s[2];
511 gout[n*48+17] += - s[7];
512 gout[n*48+18] += - s[8];
513 gout[n*48+19] += - s[1];
514 gout[n*48+20] += 0;
515 gout[n*48+21] += - s[2] + s[6];
516 gout[n*48+22] += 0;
517 gout[n*48+23] += + s[8] + s[0];
518 gout[n*48+24] += + s[0];
519 gout[n*48+25] += + s[1];
520 gout[n*48+26] += + s[6];
521 gout[n*48+27] += - s[7];
522 gout[n*48+28] += - s[1];
523 gout[n*48+29] += + s[0] + s[8];
524 gout[n*48+30] += - s[7];
525 gout[n*48+31] += - s[6] + s[2];
526 gout[n*48+32] += + s[1];
527 gout[n*48+33] += + s[4];
528 gout[n*48+34] += + s[5];
529 gout[n*48+35] += - s[2];
530 gout[n*48+36] += - s[0];
531 gout[n*48+37] += - s[3];
532 gout[n*48+38] += - s[2];
533 gout[n*48+39] += - s[5];
534 gout[n*48+40] += 0;
535 gout[n*48+41] += 0;
536 gout[n*48+42] += + s[1] - s[3];
537 gout[n*48+43] += + s[4] + s[0];
538 gout[n*48+44] += - s[2];
539 gout[n*48+45] += - s[5];
540 gout[n*48+46] += + s[0] + s[4];
541 gout[n*48+47] += + s[3] - s[1];
542 }}}
int2e_cg_ssa10ssp2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)543 void int2e_cg_ssa10ssp2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
544 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 3};
545 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
546 }
int2e_cg_ssa10ssp2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)547 CACHE_SIZE_T int2e_cg_ssa10ssp2_cart(double *out, FINT *dims, FINT *shls,
548 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
549 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 3};
550 CINTEnvVars envs;
551 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
552 envs.f_gout = &CINTgout2e_int2e_cg_ssa10ssp2;
553 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
554 } // int2e_cg_ssa10ssp2_cart
int2e_cg_ssa10ssp2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)555 CACHE_SIZE_T int2e_cg_ssa10ssp2_sph(double *out, FINT *dims, FINT *shls,
556 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
557 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 3};
558 CINTEnvVars envs;
559 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
560 envs.f_gout = &CINTgout2e_int2e_cg_ssa10ssp2;
561 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
562 } // int2e_cg_ssa10ssp2_sph
int2e_cg_ssa10ssp2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)563 CACHE_SIZE_T int2e_cg_ssa10ssp2_spinor(double complex *out, FINT *dims, FINT *shls,
564 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
565 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 3};
566 CINTEnvVars envs;
567 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
568 envs.f_gout = &CINTgout2e_int2e_cg_ssa10ssp2;
569 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_2e1, &c2s_si_2e2i);
570 } // int2e_cg_ssa10ssp2_spinor
571 ALL_CINT(int2e_cg_ssa10ssp2)
ALL_CINT_FORTRAN_(int2e_cg_ssa10ssp2)572 ALL_CINT_FORTRAN_(int2e_cg_ssa10ssp2)
573 /* <k R CROSS SIGMA i|GAUNT |j SIGMA DOT P l> : i,j \in electron 1; k,l \in electron 2
574  * = (R CROSS SIGMA i j|GAUNT |k SIGMA DOT P l) */
575 void CINTgout2e_int2e_giao_ssa10ssp2(double *gout,
576 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
577 FINT nf = envs->nf;
578 FINT nrys_roots = envs->nrys_roots;
579 FINT ix, iy, iz, i, n;
580 double *g0 = g;
581 double *g1 = g0 + envs->g_size * 3;
582 double *g2 = g1 + envs->g_size * 3;
583 double *g3 = g2 + envs->g_size * 3;
584 G2E_D_L(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l+0, envs->l_l+0);
585 G2E_R_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
586 G2E_R_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
587 double s[9];
588 for (n = 0; n < nf; n++) {
589 ix = idx[0+n*3];
590 iy = idx[1+n*3];
591 iz = idx[2+n*3];
592 for (i = 0; i < 9; i++) { s[i] = 0; }
593 for (i = 0; i < nrys_roots; i++) {
594 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
595 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
596 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
597 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
598 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
599 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
600 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
601 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
602 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
603 }
604 if (gout_empty) {
605 gout[n*48+0] = + s[5] - s[7];
606 gout[n*48+1] = 0;
607 gout[n*48+2] = 0;
608 gout[n*48+3] = + s[8] + s[4];
609 gout[n*48+4] = + s[6];
610 gout[n*48+5] = + s[5];
611 gout[n*48+6] = + s[8];
612 gout[n*48+7] = - s[3];
613 gout[n*48+8] = - s[3];
614 gout[n*48+9] = - s[4];
615 gout[n*48+10] = - s[7];
616 gout[n*48+11] = - s[6];
617 gout[n*48+12] = + s[4] + s[8];
618 gout[n*48+13] = - s[3];
619 gout[n*48+14] = - s[6];
620 gout[n*48+15] = + s[7] - s[5];
621 gout[n*48+16] = - s[2];
622 gout[n*48+17] = - s[7];
623 gout[n*48+18] = - s[8];
624 gout[n*48+19] = - s[1];
625 gout[n*48+20] = 0;
626 gout[n*48+21] = - s[2] + s[6];
627 gout[n*48+22] = 0;
628 gout[n*48+23] = + s[8] + s[0];
629 gout[n*48+24] = + s[0];
630 gout[n*48+25] = + s[1];
631 gout[n*48+26] = + s[6];
632 gout[n*48+27] = - s[7];
633 gout[n*48+28] = - s[1];
634 gout[n*48+29] = + s[0] + s[8];
635 gout[n*48+30] = - s[7];
636 gout[n*48+31] = - s[6] + s[2];
637 gout[n*48+32] = + s[1];
638 gout[n*48+33] = + s[4];
639 gout[n*48+34] = + s[5];
640 gout[n*48+35] = - s[2];
641 gout[n*48+36] = - s[0];
642 gout[n*48+37] = - s[3];
643 gout[n*48+38] = - s[2];
644 gout[n*48+39] = - s[5];
645 gout[n*48+40] = 0;
646 gout[n*48+41] = 0;
647 gout[n*48+42] = + s[1] - s[3];
648 gout[n*48+43] = + s[4] + s[0];
649 gout[n*48+44] = - s[2];
650 gout[n*48+45] = - s[5];
651 gout[n*48+46] = + s[0] + s[4];
652 gout[n*48+47] = + s[3] - s[1];
653 } else {
654 gout[n*48+0] += + s[5] - s[7];
655 gout[n*48+1] += 0;
656 gout[n*48+2] += 0;
657 gout[n*48+3] += + s[8] + s[4];
658 gout[n*48+4] += + s[6];
659 gout[n*48+5] += + s[5];
660 gout[n*48+6] += + s[8];
661 gout[n*48+7] += - s[3];
662 gout[n*48+8] += - s[3];
663 gout[n*48+9] += - s[4];
664 gout[n*48+10] += - s[7];
665 gout[n*48+11] += - s[6];
666 gout[n*48+12] += + s[4] + s[8];
667 gout[n*48+13] += - s[3];
668 gout[n*48+14] += - s[6];
669 gout[n*48+15] += + s[7] - s[5];
670 gout[n*48+16] += - s[2];
671 gout[n*48+17] += - s[7];
672 gout[n*48+18] += - s[8];
673 gout[n*48+19] += - s[1];
674 gout[n*48+20] += 0;
675 gout[n*48+21] += - s[2] + s[6];
676 gout[n*48+22] += 0;
677 gout[n*48+23] += + s[8] + s[0];
678 gout[n*48+24] += + s[0];
679 gout[n*48+25] += + s[1];
680 gout[n*48+26] += + s[6];
681 gout[n*48+27] += - s[7];
682 gout[n*48+28] += - s[1];
683 gout[n*48+29] += + s[0] + s[8];
684 gout[n*48+30] += - s[7];
685 gout[n*48+31] += - s[6] + s[2];
686 gout[n*48+32] += + s[1];
687 gout[n*48+33] += + s[4];
688 gout[n*48+34] += + s[5];
689 gout[n*48+35] += - s[2];
690 gout[n*48+36] += - s[0];
691 gout[n*48+37] += - s[3];
692 gout[n*48+38] += - s[2];
693 gout[n*48+39] += - s[5];
694 gout[n*48+40] += 0;
695 gout[n*48+41] += 0;
696 gout[n*48+42] += + s[1] - s[3];
697 gout[n*48+43] += + s[4] + s[0];
698 gout[n*48+44] += - s[2];
699 gout[n*48+45] += - s[5];
700 gout[n*48+46] += + s[0] + s[4];
701 gout[n*48+47] += + s[3] - s[1];
702 }}}
int2e_giao_ssa10ssp2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)703 void int2e_giao_ssa10ssp2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
704 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 3};
705 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
706 }
int2e_giao_ssa10ssp2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)707 CACHE_SIZE_T int2e_giao_ssa10ssp2_cart(double *out, FINT *dims, FINT *shls,
708 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
709 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 3};
710 CINTEnvVars envs;
711 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
712 envs.f_gout = &CINTgout2e_int2e_giao_ssa10ssp2;
713 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
714 } // int2e_giao_ssa10ssp2_cart
int2e_giao_ssa10ssp2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)715 CACHE_SIZE_T int2e_giao_ssa10ssp2_sph(double *out, FINT *dims, FINT *shls,
716 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
717 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 3};
718 CINTEnvVars envs;
719 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
720 envs.f_gout = &CINTgout2e_int2e_giao_ssa10ssp2;
721 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
722 } // int2e_giao_ssa10ssp2_sph
int2e_giao_ssa10ssp2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)723 CACHE_SIZE_T int2e_giao_ssa10ssp2_spinor(double complex *out, FINT *dims, FINT *shls,
724 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
725 FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 3};
726 CINTEnvVars envs;
727 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
728 envs.f_gout = &CINTgout2e_int2e_giao_ssa10ssp2;
729 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_2e1, &c2s_si_2e2i);
730 } // int2e_giao_ssa10ssp2_spinor
731 ALL_CINT(int2e_giao_ssa10ssp2)
ALL_CINT_FORTRAN_(int2e_giao_ssa10ssp2)732 ALL_CINT_FORTRAN_(int2e_giao_ssa10ssp2)
733 /* <k G i|GAUNT |SIGMA DOT P j SIGMA DOT P l> : i,j \in electron 1; k,l \in electron 2
734  * = (G i SIGMA DOT P j|GAUNT |k SIGMA DOT P l) */
735 void CINTgout2e_int2e_gssp1ssp2(double *gout,
736 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
737 FINT nf = envs->nf;
738 FINT nrys_roots = envs->nrys_roots;
739 FINT ix, iy, iz, i, n;
740 double *g0 = g;
741 double *g1 = g0 + envs->g_size * 3;
742 double *g2 = g1 + envs->g_size * 3;
743 double *g3 = g2 + envs->g_size * 3;
744 double *g4 = g3 + envs->g_size * 3;
745 double *g5 = g4 + envs->g_size * 3;
746 double *g6 = g5 + envs->g_size * 3;
747 double *g7 = g6 + envs->g_size * 3;
748 double rirj[3];
749 rirj[0] = envs->ri[0] - envs->rj[0];
750 rirj[1] = envs->ri[1] - envs->rj[1];
751 rirj[2] = envs->ri[2] - envs->rj[2];
752 double c[3];
753 c[0] = 1 * rirj[0];
754 c[1] = 1 * rirj[1];
755 c[2] = 1 * rirj[2];
756 G2E_D_L(g1, g0, envs->i_l+1, envs->j_l+1, envs->k_l+0, envs->l_l+0);
757 G2E_D_J(g2, g0, envs->i_l+1, envs->j_l+0, envs->k_l, envs->l_l);
758 G2E_D_J(g3, g1, envs->i_l+1, envs->j_l+0, envs->k_l, envs->l_l);
759 G2E_R0I(g4, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
760 G2E_R0I(g5, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
761 G2E_R0I(g6, g2, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
762 G2E_R0I(g7, g3, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
763 double s[27];
764 for (n = 0; n < nf; n++) {
765 ix = idx[0+n*3];
766 iy = idx[1+n*3];
767 iz = idx[2+n*3];
768 for (i = 0; i < 27; i++) { s[i] = 0; }
769 for (i = 0; i < nrys_roots; i++) {
770 s[0] += g7[ix+i] * g0[iy+i] * g0[iz+i];
771 s[1] += g6[ix+i] * g1[iy+i] * g0[iz+i];
772 s[2] += g6[ix+i] * g0[iy+i] * g1[iz+i];
773 s[3] += g5[ix+i] * g2[iy+i] * g0[iz+i];
774 s[4] += g4[ix+i] * g3[iy+i] * g0[iz+i];
775 s[5] += g4[ix+i] * g2[iy+i] * g1[iz+i];
776 s[6] += g5[ix+i] * g0[iy+i] * g2[iz+i];
777 s[7] += g4[ix+i] * g1[iy+i] * g2[iz+i];
778 s[8] += g4[ix+i] * g0[iy+i] * g3[iz+i];
779 s[9] += g3[ix+i] * g4[iy+i] * g0[iz+i];
780 s[10] += g2[ix+i] * g5[iy+i] * g0[iz+i];
781 s[11] += g2[ix+i] * g4[iy+i] * g1[iz+i];
782 s[12] += g1[ix+i] * g6[iy+i] * g0[iz+i];
783 s[13] += g0[ix+i] * g7[iy+i] * g0[iz+i];
784 s[14] += g0[ix+i] * g6[iy+i] * g1[iz+i];
785 s[15] += g1[ix+i] * g4[iy+i] * g2[iz+i];
786 s[16] += g0[ix+i] * g5[iy+i] * g2[iz+i];
787 s[17] += g0[ix+i] * g4[iy+i] * g3[iz+i];
788 s[18] += g3[ix+i] * g0[iy+i] * g4[iz+i];
789 s[19] += g2[ix+i] * g1[iy+i] * g4[iz+i];
790 s[20] += g2[ix+i] * g0[iy+i] * g5[iz+i];
791 s[21] += g1[ix+i] * g2[iy+i] * g4[iz+i];
792 s[22] += g0[ix+i] * g3[iy+i] * g4[iz+i];
793 s[23] += g0[ix+i] * g2[iy+i] * g5[iz+i];
794 s[24] += g1[ix+i] * g0[iy+i] * g6[iz+i];
795 s[25] += g0[ix+i] * g1[iy+i] * g6[iz+i];
796 s[26] += g0[ix+i] * g0[iy+i] * g7[iz+i];
797 }
798 if (gout_empty) {
799 gout[n*48+0] = - c[1]*s[26] + c[2]*s[17] - c[1]*s[22] + c[2]*s[13];
800 gout[n*48+1] = + c[1]*s[19] - c[2]*s[10];
801 gout[n*48+2] = + c[1]*s[20] - c[2]*s[11];
802 gout[n*48+3] = - c[1]*s[23] + c[2]*s[14] + c[1]*s[25] - c[2]*s[16];
803 gout[n*48+4] = + c[1]*s[21] - c[2]*s[12];
804 gout[n*48+5] = - c[1]*s[26] + c[2]*s[17] - c[1]*s[18] + c[2]*s[9];
805 gout[n*48+6] = + c[1]*s[23] - c[2]*s[14];
806 gout[n*48+7] = + c[1]*s[20] - c[2]*s[11] - c[1]*s[24] + c[2]*s[15];
807 gout[n*48+8] = + c[1]*s[24] - c[2]*s[15];
808 gout[n*48+9] = + c[1]*s[25] - c[2]*s[16];
809 gout[n*48+10] = - c[1]*s[22] + c[2]*s[13] - c[1]*s[18] + c[2]*s[9];
810 gout[n*48+11] = - c[1]*s[19] + c[2]*s[10] + c[1]*s[21] - c[2]*s[12];
811 gout[n*48+12] = - c[1]*s[25] + c[2]*s[16] + c[1]*s[23] - c[2]*s[14];
812 gout[n*48+13] = + c[1]*s[24] - c[2]*s[15] - c[1]*s[20] + c[2]*s[11];
813 gout[n*48+14] = - c[1]*s[21] + c[2]*s[12] + c[1]*s[19] - c[2]*s[10];
814 gout[n*48+15] = - c[1]*s[18] + c[2]*s[9] - c[1]*s[22] + c[2]*s[13] - c[1]*s[26] + c[2]*s[17];
815 gout[n*48+16] = - c[2]*s[8] + c[0]*s[26] - c[2]*s[4] + c[0]*s[22];
816 gout[n*48+17] = + c[2]*s[1] - c[0]*s[19];
817 gout[n*48+18] = + c[2]*s[2] - c[0]*s[20];
818 gout[n*48+19] = - c[2]*s[5] + c[0]*s[23] + c[2]*s[7] - c[0]*s[25];
819 gout[n*48+20] = + c[2]*s[3] - c[0]*s[21];
820 gout[n*48+21] = - c[2]*s[8] + c[0]*s[26] - c[2]*s[0] + c[0]*s[18];
821 gout[n*48+22] = + c[2]*s[5] - c[0]*s[23];
822 gout[n*48+23] = + c[2]*s[2] - c[0]*s[20] - c[2]*s[6] + c[0]*s[24];
823 gout[n*48+24] = + c[2]*s[6] - c[0]*s[24];
824 gout[n*48+25] = + c[2]*s[7] - c[0]*s[25];
825 gout[n*48+26] = - c[2]*s[4] + c[0]*s[22] - c[2]*s[0] + c[0]*s[18];
826 gout[n*48+27] = - c[2]*s[1] + c[0]*s[19] + c[2]*s[3] - c[0]*s[21];
827 gout[n*48+28] = - c[2]*s[7] + c[0]*s[25] + c[2]*s[5] - c[0]*s[23];
828 gout[n*48+29] = + c[2]*s[6] - c[0]*s[24] - c[2]*s[2] + c[0]*s[20];
829 gout[n*48+30] = - c[2]*s[3] + c[0]*s[21] + c[2]*s[1] - c[0]*s[19];
830 gout[n*48+31] = - c[2]*s[0] + c[0]*s[18] - c[2]*s[4] + c[0]*s[22] - c[2]*s[8] + c[0]*s[26];
831 gout[n*48+32] = - c[0]*s[17] + c[1]*s[8] - c[0]*s[13] + c[1]*s[4];
832 gout[n*48+33] = + c[0]*s[10] - c[1]*s[1];
833 gout[n*48+34] = + c[0]*s[11] - c[1]*s[2];
834 gout[n*48+35] = - c[0]*s[14] + c[1]*s[5] + c[0]*s[16] - c[1]*s[7];
835 gout[n*48+36] = + c[0]*s[12] - c[1]*s[3];
836 gout[n*48+37] = - c[0]*s[17] + c[1]*s[8] - c[0]*s[9] + c[1]*s[0];
837 gout[n*48+38] = + c[0]*s[14] - c[1]*s[5];
838 gout[n*48+39] = + c[0]*s[11] - c[1]*s[2] - c[0]*s[15] + c[1]*s[6];
839 gout[n*48+40] = + c[0]*s[15] - c[1]*s[6];
840 gout[n*48+41] = + c[0]*s[16] - c[1]*s[7];
841 gout[n*48+42] = - c[0]*s[13] + c[1]*s[4] - c[0]*s[9] + c[1]*s[0];
842 gout[n*48+43] = - c[0]*s[10] + c[1]*s[1] + c[0]*s[12] - c[1]*s[3];
843 gout[n*48+44] = - c[0]*s[16] + c[1]*s[7] + c[0]*s[14] - c[1]*s[5];
844 gout[n*48+45] = + c[0]*s[15] - c[1]*s[6] - c[0]*s[11] + c[1]*s[2];
845 gout[n*48+46] = - c[0]*s[12] + c[1]*s[3] + c[0]*s[10] - c[1]*s[1];
846 gout[n*48+47] = - c[0]*s[9] + c[1]*s[0] - c[0]*s[13] + c[1]*s[4] - c[0]*s[17] + c[1]*s[8];
847 } else {
848 gout[n*48+0] += - c[1]*s[26] + c[2]*s[17] - c[1]*s[22] + c[2]*s[13];
849 gout[n*48+1] += + c[1]*s[19] - c[2]*s[10];
850 gout[n*48+2] += + c[1]*s[20] - c[2]*s[11];
851 gout[n*48+3] += - c[1]*s[23] + c[2]*s[14] + c[1]*s[25] - c[2]*s[16];
852 gout[n*48+4] += + c[1]*s[21] - c[2]*s[12];
853 gout[n*48+5] += - c[1]*s[26] + c[2]*s[17] - c[1]*s[18] + c[2]*s[9];
854 gout[n*48+6] += + c[1]*s[23] - c[2]*s[14];
855 gout[n*48+7] += + c[1]*s[20] - c[2]*s[11] - c[1]*s[24] + c[2]*s[15];
856 gout[n*48+8] += + c[1]*s[24] - c[2]*s[15];
857 gout[n*48+9] += + c[1]*s[25] - c[2]*s[16];
858 gout[n*48+10] += - c[1]*s[22] + c[2]*s[13] - c[1]*s[18] + c[2]*s[9];
859 gout[n*48+11] += - c[1]*s[19] + c[2]*s[10] + c[1]*s[21] - c[2]*s[12];
860 gout[n*48+12] += - c[1]*s[25] + c[2]*s[16] + c[1]*s[23] - c[2]*s[14];
861 gout[n*48+13] += + c[1]*s[24] - c[2]*s[15] - c[1]*s[20] + c[2]*s[11];
862 gout[n*48+14] += - c[1]*s[21] + c[2]*s[12] + c[1]*s[19] - c[2]*s[10];
863 gout[n*48+15] += - c[1]*s[18] + c[2]*s[9] - c[1]*s[22] + c[2]*s[13] - c[1]*s[26] + c[2]*s[17];
864 gout[n*48+16] += - c[2]*s[8] + c[0]*s[26] - c[2]*s[4] + c[0]*s[22];
865 gout[n*48+17] += + c[2]*s[1] - c[0]*s[19];
866 gout[n*48+18] += + c[2]*s[2] - c[0]*s[20];
867 gout[n*48+19] += - c[2]*s[5] + c[0]*s[23] + c[2]*s[7] - c[0]*s[25];
868 gout[n*48+20] += + c[2]*s[3] - c[0]*s[21];
869 gout[n*48+21] += - c[2]*s[8] + c[0]*s[26] - c[2]*s[0] + c[0]*s[18];
870 gout[n*48+22] += + c[2]*s[5] - c[0]*s[23];
871 gout[n*48+23] += + c[2]*s[2] - c[0]*s[20] - c[2]*s[6] + c[0]*s[24];
872 gout[n*48+24] += + c[2]*s[6] - c[0]*s[24];
873 gout[n*48+25] += + c[2]*s[7] - c[0]*s[25];
874 gout[n*48+26] += - c[2]*s[4] + c[0]*s[22] - c[2]*s[0] + c[0]*s[18];
875 gout[n*48+27] += - c[2]*s[1] + c[0]*s[19] + c[2]*s[3] - c[0]*s[21];
876 gout[n*48+28] += - c[2]*s[7] + c[0]*s[25] + c[2]*s[5] - c[0]*s[23];
877 gout[n*48+29] += + c[2]*s[6] - c[0]*s[24] - c[2]*s[2] + c[0]*s[20];
878 gout[n*48+30] += - c[2]*s[3] + c[0]*s[21] + c[2]*s[1] - c[0]*s[19];
879 gout[n*48+31] += - c[2]*s[0] + c[0]*s[18] - c[2]*s[4] + c[0]*s[22] - c[2]*s[8] + c[0]*s[26];
880 gout[n*48+32] += - c[0]*s[17] + c[1]*s[8] - c[0]*s[13] + c[1]*s[4];
881 gout[n*48+33] += + c[0]*s[10] - c[1]*s[1];
882 gout[n*48+34] += + c[0]*s[11] - c[1]*s[2];
883 gout[n*48+35] += - c[0]*s[14] + c[1]*s[5] + c[0]*s[16] - c[1]*s[7];
884 gout[n*48+36] += + c[0]*s[12] - c[1]*s[3];
885 gout[n*48+37] += - c[0]*s[17] + c[1]*s[8] - c[0]*s[9] + c[1]*s[0];
886 gout[n*48+38] += + c[0]*s[14] - c[1]*s[5];
887 gout[n*48+39] += + c[0]*s[11] - c[1]*s[2] - c[0]*s[15] + c[1]*s[6];
888 gout[n*48+40] += + c[0]*s[15] - c[1]*s[6];
889 gout[n*48+41] += + c[0]*s[16] - c[1]*s[7];
890 gout[n*48+42] += - c[0]*s[13] + c[1]*s[4] - c[0]*s[9] + c[1]*s[0];
891 gout[n*48+43] += - c[0]*s[10] + c[1]*s[1] + c[0]*s[12] - c[1]*s[3];
892 gout[n*48+44] += - c[0]*s[16] + c[1]*s[7] + c[0]*s[14] - c[1]*s[5];
893 gout[n*48+45] += + c[0]*s[15] - c[1]*s[6] - c[0]*s[11] + c[1]*s[2];
894 gout[n*48+46] += - c[0]*s[12] + c[1]*s[3] + c[0]*s[10] - c[1]*s[1];
895 gout[n*48+47] += - c[0]*s[9] + c[1]*s[0] - c[0]*s[13] + c[1]*s[4] - c[0]*s[17] + c[1]*s[8];
896 }}}
int2e_gssp1ssp2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)897 void int2e_gssp1ssp2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
898 FINT ng[] = {1, 1, 0, 1, 3, 4, 4, 3};
899 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
900 }
int2e_gssp1ssp2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)901 CACHE_SIZE_T int2e_gssp1ssp2_cart(double *out, FINT *dims, FINT *shls,
902 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
903 FINT ng[] = {1, 1, 0, 1, 3, 4, 4, 3};
904 CINTEnvVars envs;
905 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
906 envs.f_gout = &CINTgout2e_int2e_gssp1ssp2;
907 envs.common_factor *= 0.5;
908 FINT i, nout;
909 FINT counts[4];
910 if (out != NULL && envs.shls[0] == envs.shls[1]) {
911 counts[0] = envs.nfi * envs.x_ctr[0];
912 counts[1] = envs.nfj * envs.x_ctr[1];
913 counts[2] = envs.nfk * envs.x_ctr[2];
914 counts[3] = envs.nfl * envs.x_ctr[3];
915 if (dims == NULL) { dims = counts; }
916 nout = dims[0] * dims[1] * dims[2] * dims[3];
917 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
918 c2s_dset0(out+nout*i, dims, counts); }
919 return 0; }
920 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
921 } // int2e_gssp1ssp2_cart
int2e_gssp1ssp2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)922 CACHE_SIZE_T int2e_gssp1ssp2_sph(double *out, FINT *dims, FINT *shls,
923 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
924 FINT ng[] = {1, 1, 0, 1, 3, 4, 4, 3};
925 CINTEnvVars envs;
926 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
927 envs.f_gout = &CINTgout2e_int2e_gssp1ssp2;
928 envs.common_factor *= 0.5;
929 FINT i, nout;
930 FINT counts[4];
931 if (out != NULL && envs.shls[0] == envs.shls[1]) {
932 counts[0] = (envs.i_l*2+1) * envs.x_ctr[0];
933 counts[1] = (envs.j_l*2+1) * envs.x_ctr[1];
934 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
935 counts[3] = (envs.l_l*2+1) * envs.x_ctr[3];
936 if (dims == NULL) { dims = counts; }
937 nout = dims[0] * dims[1] * dims[2] * dims[3];
938 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
939 c2s_dset0(out+nout*i, dims, counts); }
940 return 0; }
941 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
942 } // int2e_gssp1ssp2_sph
int2e_gssp1ssp2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)943 CACHE_SIZE_T int2e_gssp1ssp2_spinor(double complex *out, FINT *dims, FINT *shls,
944 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
945 FINT ng[] = {1, 1, 0, 1, 3, 4, 4, 3};
946 CINTEnvVars envs;
947 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
948 envs.f_gout = &CINTgout2e_int2e_gssp1ssp2;
949 envs.common_factor *= 0.5;
950 FINT i, nout;
951 FINT counts[4];
952 if (out != NULL && envs.shls[0] == envs.shls[1]) {
953 counts[0] = CINTcgto_spinor(envs.shls[0], envs.bas);
954 counts[1] = CINTcgto_spinor(envs.shls[1], envs.bas);
955 counts[2] = CINTcgto_spinor(envs.shls[2], envs.bas);
956 counts[3] = CINTcgto_spinor(envs.shls[3], envs.bas);
957 if (dims == NULL) { dims = counts; }
958 nout = dims[0] * dims[1] * dims[2] * dims[3];
959 for (i = 0; i < envs.ncomp_tensor; i++) {
960 c2s_zset0(out+nout*i, dims, counts); }
961 return 0; }
962 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_2e1, &c2s_si_2e2i);
963 } // int2e_gssp1ssp2_spinor
964 ALL_CINT(int2e_gssp1ssp2)
965 ALL_CINT_FORTRAN_(int2e_gssp1ssp2)
966