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 G i|R12 |j l> : i,j \in electron 1; k,l \in electron 2
18  * = (G i j|R12 |k l) */
CINTgout2e_int2e_ig1(double * gout,double * g,FINT * idx,CINTEnvVars * envs,FINT gout_empty)19 void CINTgout2e_int2e_ig1(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 rirj[3];
27 rirj[0] = envs->ri[0] - envs->rj[0];
28 rirj[1] = envs->ri[1] - envs->rj[1];
29 rirj[2] = envs->ri[2] - envs->rj[2];
30 double c[3];
31 c[0] = 1 * rirj[0];
32 c[1] = 1 * rirj[1];
33 c[2] = 1 * rirj[2];
34 G2E_R0I(g1, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
35 double s[3];
36 for (n = 0; n < nf; n++) {
37 ix = idx[0+n*3];
38 iy = idx[1+n*3];
39 iz = idx[2+n*3];
40 switch (nrys_roots) {
41 case 1:
42 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0];
43 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0];
44 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0];
45 break;
46 case 2:
47 s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1];
48 s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1];
49 s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1];
50 break;
51 case 3:
52 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];
53 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];
54 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];
55 break;
56 case 4:
57 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];
58 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];
59 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];
60 break;
61 default:
62 for (i = 0; i < 3; i++) { s[i] = 0; }
63 for (i = 0; i < nrys_roots; i++) {
64 s[0] += g1[ix+i] * g0[iy+i] * g0[iz+i];
65 s[1] += g0[ix+i] * g1[iy+i] * g0[iz+i];
66 s[2] += g0[ix+i] * g0[iy+i] * g1[iz+i];
67 } break;}
68 if (gout_empty) {
69 gout[n*3+0] = - c[1]*s[2] + c[2]*s[1];
70 gout[n*3+1] = - c[2]*s[0] + c[0]*s[2];
71 gout[n*3+2] = - c[0]*s[1] + c[1]*s[0];
72 } else {
73 gout[n*3+0] += - c[1]*s[2] + c[2]*s[1];
74 gout[n*3+1] += - c[2]*s[0] + c[0]*s[2];
75 gout[n*3+2] += - c[0]*s[1] + c[1]*s[0];
76 }}}
int2e_ig1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)77 void int2e_ig1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
78 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
79 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
80 }
int2e_ig1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)81 CACHE_SIZE_T int2e_ig1_cart(double *out, FINT *dims, FINT *shls,
82 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
83 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
84 CINTEnvVars envs;
85 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
86 envs.f_gout = &CINTgout2e_int2e_ig1;
87 envs.common_factor *= 0.5;
88 FINT i, nout;
89 FINT counts[4];
90 if (out != NULL && envs.shls[0] == envs.shls[1]) {
91 counts[0] = envs.nfi * envs.x_ctr[0];
92 counts[1] = envs.nfj * envs.x_ctr[1];
93 counts[2] = envs.nfk * envs.x_ctr[2];
94 counts[3] = envs.nfl * envs.x_ctr[3];
95 if (dims == NULL) { dims = counts; }
96 nout = dims[0] * dims[1] * dims[2] * dims[3];
97 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
98 c2s_dset0(out+nout*i, dims, counts); }
99 return 0; }
100 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
101 } // int2e_ig1_cart
int2e_ig1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)102 CACHE_SIZE_T int2e_ig1_sph(double *out, FINT *dims, FINT *shls,
103 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
104 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
105 CINTEnvVars envs;
106 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
107 envs.f_gout = &CINTgout2e_int2e_ig1;
108 envs.common_factor *= 0.5;
109 FINT i, nout;
110 FINT counts[4];
111 if (out != NULL && envs.shls[0] == envs.shls[1]) {
112 counts[0] = (envs.i_l*2+1) * envs.x_ctr[0];
113 counts[1] = (envs.j_l*2+1) * envs.x_ctr[1];
114 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
115 counts[3] = (envs.l_l*2+1) * envs.x_ctr[3];
116 if (dims == NULL) { dims = counts; }
117 nout = dims[0] * dims[1] * dims[2] * dims[3];
118 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
119 c2s_dset0(out+nout*i, dims, counts); }
120 return 0; }
121 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
122 } // int2e_ig1_sph
int2e_ig1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)123 CACHE_SIZE_T int2e_ig1_spinor(double complex *out, FINT *dims, FINT *shls,
124 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
125 FINT ng[] = {1, 0, 0, 0, 1, 1, 1, 3};
126 CINTEnvVars envs;
127 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
128 envs.f_gout = &CINTgout2e_int2e_ig1;
129 envs.common_factor *= 0.5;
130 FINT i, nout;
131 FINT counts[4];
132 if (out != NULL && envs.shls[0] == envs.shls[1]) {
133 counts[0] = CINTcgto_spinor(envs.shls[0], envs.bas);
134 counts[1] = CINTcgto_spinor(envs.shls[1], envs.bas);
135 counts[2] = CINTcgto_spinor(envs.shls[2], envs.bas);
136 counts[3] = CINTcgto_spinor(envs.shls[3], envs.bas);
137 if (dims == NULL) { dims = counts; }
138 nout = dims[0] * dims[1] * dims[2] * dims[3];
139 for (i = 0; i < envs.ncomp_tensor; i++) {
140 c2s_zset0(out+nout*i, dims, counts); }
141 return 0; }
142 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_2e1, &c2s_sf_2e2);
143 } // int2e_ig1_spinor
144 ALL_CINT(int2e_ig1)
ALL_CINT_FORTRAN_(int2e_ig1)145 ALL_CINT_FORTRAN_(int2e_ig1)
146 /* <k G G i|R12 |j l> : i,j \in electron 1; k,l \in electron 2
147  * = (G G i j|R12 |k l) */
148 void CINTgout2e_int2e_gg1(double *gout,
149 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
150 FINT nf = envs->nf;
151 FINT nrys_roots = envs->nrys_roots;
152 FINT ix, iy, iz, i, n;
153 double *g0 = g;
154 double *g1 = g0 + envs->g_size * 3;
155 double *g2 = g1 + envs->g_size * 3;
156 double *g3 = g2 + envs->g_size * 3;
157 double rirj[3];
158 rirj[0] = envs->ri[0] - envs->rj[0];
159 rirj[1] = envs->ri[1] - envs->rj[1];
160 rirj[2] = envs->ri[2] - envs->rj[2];
161 double c[9];
162 c[0] = 1 * rirj[0] * rirj[0];
163 c[1] = 1 * rirj[0] * rirj[1];
164 c[2] = 1 * rirj[0] * rirj[2];
165 c[3] = 1 * rirj[1] * rirj[0];
166 c[4] = 1 * rirj[1] * rirj[1];
167 c[5] = 1 * rirj[1] * rirj[2];
168 c[6] = 1 * rirj[2] * rirj[0];
169 c[7] = 1 * rirj[2] * rirj[1];
170 c[8] = 1 * rirj[2] * rirj[2];
171 G2E_R0I(g1, g0, envs->i_l+1, envs->j_l, envs->k_l, envs->l_l);
172 G2E_R0I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
173 G2E_R0I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
174 double s[9];
175 for (n = 0; n < nf; n++) {
176 ix = idx[0+n*3];
177 iy = idx[1+n*3];
178 iz = idx[2+n*3];
179 for (i = 0; i < 9; i++) { s[i] = 0; }
180 for (i = 0; i < nrys_roots; i++) {
181 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
182 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
183 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
184 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
185 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
186 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
187 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
188 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
189 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
190 }
191 if (gout_empty) {
192 gout[n*9+0] = - c[4]*s[8] + 2*c[5]*s[7] - c[8]*s[4];
193 gout[n*9+1] = - c[7]*s[2] + c[1]*s[8] + c[8]*s[1] - c[2]*s[7];
194 gout[n*9+2] = - c[1]*s[5] + c[4]*s[2] + c[2]*s[4] - c[5]*s[1];
195 gout[n*9+3] = - c[5]*s[6] + c[8]*s[3] + c[3]*s[8] - c[6]*s[5];
196 gout[n*9+4] = - c[8]*s[0] + 2*c[6]*s[2] - c[0]*s[8];
197 gout[n*9+5] = - c[2]*s[3] + c[5]*s[0] + c[0]*s[5] - c[3]*s[2];
198 gout[n*9+6] = - c[3]*s[7] + c[6]*s[4] + c[4]*s[6] - c[7]*s[3];
199 gout[n*9+7] = - c[6]*s[1] + c[0]*s[7] + c[7]*s[0] - c[1]*s[6];
200 gout[n*9+8] = - c[0]*s[4] + 2*c[1]*s[3] - c[4]*s[0];
201 } else {
202 gout[n*9+0] += - c[4]*s[8] + 2*c[5]*s[7] - c[8]*s[4];
203 gout[n*9+1] += - c[7]*s[2] + c[1]*s[8] + c[8]*s[1] - c[2]*s[7];
204 gout[n*9+2] += - c[1]*s[5] + c[4]*s[2] + c[2]*s[4] - c[5]*s[1];
205 gout[n*9+3] += - c[5]*s[6] + c[8]*s[3] + c[3]*s[8] - c[6]*s[5];
206 gout[n*9+4] += - c[8]*s[0] + 2*c[6]*s[2] - c[0]*s[8];
207 gout[n*9+5] += - c[2]*s[3] + c[5]*s[0] + c[0]*s[5] - c[3]*s[2];
208 gout[n*9+6] += - c[3]*s[7] + c[6]*s[4] + c[4]*s[6] - c[7]*s[3];
209 gout[n*9+7] += - c[6]*s[1] + c[0]*s[7] + c[7]*s[0] - c[1]*s[6];
210 gout[n*9+8] += - c[0]*s[4] + 2*c[1]*s[3] - c[4]*s[0];
211 }}}
int2e_gg1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)212 void int2e_gg1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
213 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
214 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
215 }
int2e_gg1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)216 CACHE_SIZE_T int2e_gg1_cart(double *out, FINT *dims, FINT *shls,
217 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
218 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
219 CINTEnvVars envs;
220 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
221 envs.f_gout = &CINTgout2e_int2e_gg1;
222 envs.common_factor *= 0.25;
223 FINT i, nout;
224 FINT counts[4];
225 if (out != NULL && envs.shls[0] == envs.shls[1]) {
226 counts[0] = envs.nfi * envs.x_ctr[0];
227 counts[1] = envs.nfj * envs.x_ctr[1];
228 counts[2] = envs.nfk * envs.x_ctr[2];
229 counts[3] = envs.nfl * envs.x_ctr[3];
230 if (dims == NULL) { dims = counts; }
231 nout = dims[0] * dims[1] * dims[2] * dims[3];
232 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
233 c2s_dset0(out+nout*i, dims, counts); }
234 return 0; }
235 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
236 } // int2e_gg1_cart
int2e_gg1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)237 CACHE_SIZE_T int2e_gg1_sph(double *out, FINT *dims, FINT *shls,
238 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
239 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
240 CINTEnvVars envs;
241 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
242 envs.f_gout = &CINTgout2e_int2e_gg1;
243 envs.common_factor *= 0.25;
244 FINT i, nout;
245 FINT counts[4];
246 if (out != NULL && envs.shls[0] == envs.shls[1]) {
247 counts[0] = (envs.i_l*2+1) * envs.x_ctr[0];
248 counts[1] = (envs.j_l*2+1) * envs.x_ctr[1];
249 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
250 counts[3] = (envs.l_l*2+1) * envs.x_ctr[3];
251 if (dims == NULL) { dims = counts; }
252 nout = dims[0] * dims[1] * dims[2] * dims[3];
253 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
254 c2s_dset0(out+nout*i, dims, counts); }
255 return 0; }
256 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
257 } // int2e_gg1_sph
int2e_gg1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)258 CACHE_SIZE_T int2e_gg1_spinor(double complex *out, FINT *dims, FINT *shls,
259 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
260 FINT ng[] = {2, 0, 0, 0, 2, 1, 1, 9};
261 CINTEnvVars envs;
262 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
263 envs.f_gout = &CINTgout2e_int2e_gg1;
264 envs.common_factor *= 0.25;
265 FINT i, nout;
266 FINT counts[4];
267 if (out != NULL && envs.shls[0] == envs.shls[1]) {
268 counts[0] = CINTcgto_spinor(envs.shls[0], envs.bas);
269 counts[1] = CINTcgto_spinor(envs.shls[1], envs.bas);
270 counts[2] = CINTcgto_spinor(envs.shls[2], envs.bas);
271 counts[3] = CINTcgto_spinor(envs.shls[3], envs.bas);
272 if (dims == NULL) { dims = counts; }
273 nout = dims[0] * dims[1] * dims[2] * dims[3];
274 for (i = 0; i < envs.ncomp_tensor; i++) {
275 c2s_zset0(out+nout*i, dims, counts); }
276 return 0; }
277 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_2e1, &c2s_sf_2e2);
278 } // int2e_gg1_spinor
279 ALL_CINT(int2e_gg1)
ALL_CINT_FORTRAN_(int2e_gg1)280 ALL_CINT_FORTRAN_(int2e_gg1)
281 /* <G k G i|R12 |j l> : i,j \in electron 1; k,l \in electron 2
282  * = (G i j|R12 |G k l) */
283 void CINTgout2e_int2e_g1g2(double *gout,
284 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
285 FINT nf = envs->nf;
286 FINT nrys_roots = envs->nrys_roots;
287 FINT ix, iy, iz, i, n;
288 double *g0 = g;
289 double *g1 = g0 + envs->g_size * 3;
290 double *g2 = g1 + envs->g_size * 3;
291 double *g3 = g2 + envs->g_size * 3;
292 double rirj[3];
293 rirj[0] = envs->ri[0] - envs->rj[0];
294 rirj[1] = envs->ri[1] - envs->rj[1];
295 rirj[2] = envs->ri[2] - envs->rj[2];
296 double rkrl[3];
297 rkrl[0] = envs->rk[0] - envs->rl[0];
298 rkrl[1] = envs->rk[1] - envs->rl[1];
299 rkrl[2] = envs->rk[2] - envs->rl[2];
300 double c[9];
301 c[0] = 1 * rirj[0] * rkrl[0];
302 c[1] = 1 * rirj[0] * rkrl[1];
303 c[2] = 1 * rirj[0] * rkrl[2];
304 c[3] = 1 * rirj[1] * rkrl[0];
305 c[4] = 1 * rirj[1] * rkrl[1];
306 c[5] = 1 * rirj[1] * rkrl[2];
307 c[6] = 1 * rirj[2] * rkrl[0];
308 c[7] = 1 * rirj[2] * rkrl[1];
309 c[8] = 1 * rirj[2] * rkrl[2];
310 G2E_R0K(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l+0, envs->l_l);
311 G2E_R0I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
312 G2E_R0I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
313 double s[9];
314 for (n = 0; n < nf; n++) {
315 ix = idx[0+n*3];
316 iy = idx[1+n*3];
317 iz = idx[2+n*3];
318 for (i = 0; i < 9; i++) { s[i] = 0; }
319 for (i = 0; i < nrys_roots; i++) {
320 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
321 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
322 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
323 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
324 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
325 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
326 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
327 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
328 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
329 }
330 if (gout_empty) {
331 gout[n*9+0] = + c[4]*s[8] - c[7]*s[5] - c[5]*s[7] + c[8]*s[4];
332 gout[n*9+1] = + c[5]*s[6] - c[8]*s[3] - c[3]*s[8] + c[6]*s[5];
333 gout[n*9+2] = + c[3]*s[7] - c[6]*s[4] - c[4]*s[6] + c[7]*s[3];
334 gout[n*9+3] = + c[7]*s[2] - c[1]*s[8] - c[8]*s[1] + c[2]*s[7];
335 gout[n*9+4] = + c[8]*s[0] - c[2]*s[6] - c[6]*s[2] + c[0]*s[8];
336 gout[n*9+5] = + c[6]*s[1] - c[0]*s[7] - c[7]*s[0] + c[1]*s[6];
337 gout[n*9+6] = + c[1]*s[5] - c[4]*s[2] - c[2]*s[4] + c[5]*s[1];
338 gout[n*9+7] = + c[2]*s[3] - c[5]*s[0] - c[0]*s[5] + c[3]*s[2];
339 gout[n*9+8] = + c[0]*s[4] - c[3]*s[1] - c[1]*s[3] + c[4]*s[0];
340 } else {
341 gout[n*9+0] += + c[4]*s[8] - c[7]*s[5] - c[5]*s[7] + c[8]*s[4];
342 gout[n*9+1] += + c[5]*s[6] - c[8]*s[3] - c[3]*s[8] + c[6]*s[5];
343 gout[n*9+2] += + c[3]*s[7] - c[6]*s[4] - c[4]*s[6] + c[7]*s[3];
344 gout[n*9+3] += + c[7]*s[2] - c[1]*s[8] - c[8]*s[1] + c[2]*s[7];
345 gout[n*9+4] += + c[8]*s[0] - c[2]*s[6] - c[6]*s[2] + c[0]*s[8];
346 gout[n*9+5] += + c[6]*s[1] - c[0]*s[7] - c[7]*s[0] + c[1]*s[6];
347 gout[n*9+6] += + c[1]*s[5] - c[4]*s[2] - c[2]*s[4] + c[5]*s[1];
348 gout[n*9+7] += + c[2]*s[3] - c[5]*s[0] - c[0]*s[5] + c[3]*s[2];
349 gout[n*9+8] += + c[0]*s[4] - c[3]*s[1] - c[1]*s[3] + c[4]*s[0];
350 }}}
int2e_g1g2_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)351 void int2e_g1g2_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
352 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
353 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
354 }
int2e_g1g2_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)355 CACHE_SIZE_T int2e_g1g2_cart(double *out, FINT *dims, FINT *shls,
356 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
357 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
358 CINTEnvVars envs;
359 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
360 envs.f_gout = &CINTgout2e_int2e_g1g2;
361 envs.common_factor *= -0.25;
362 FINT i, nout;
363 FINT counts[4];
364 if (out != NULL && envs.shls[0] == envs.shls[1]) {
365 counts[0] = envs.nfi * envs.x_ctr[0];
366 counts[1] = envs.nfj * envs.x_ctr[1];
367 counts[2] = envs.nfk * envs.x_ctr[2];
368 counts[3] = envs.nfl * envs.x_ctr[3];
369 if (dims == NULL) { dims = counts; }
370 nout = dims[0] * dims[1] * dims[2] * dims[3];
371 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
372 c2s_dset0(out+nout*i, dims, counts); }
373 return 0; }
374 if (out != NULL && envs.shls[2] == envs.shls[3]) {
375 counts[0] = envs.nfi * envs.x_ctr[0];
376 counts[1] = envs.nfj * envs.x_ctr[1];
377 counts[2] = envs.nfk * envs.x_ctr[2];
378 counts[3] = envs.nfl * envs.x_ctr[3];
379 if (dims == NULL) { dims = counts; }
380 nout = dims[0] * dims[1] * dims[2] * dims[3];
381 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
382 c2s_dset0(out+nout*i, dims, counts); }
383 return 0; }
384 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
385 } // int2e_g1g2_cart
int2e_g1g2_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)386 CACHE_SIZE_T int2e_g1g2_sph(double *out, FINT *dims, FINT *shls,
387 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
388 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
389 CINTEnvVars envs;
390 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
391 envs.f_gout = &CINTgout2e_int2e_g1g2;
392 envs.common_factor *= -0.25;
393 FINT i, nout;
394 FINT counts[4];
395 if (out != NULL && envs.shls[0] == envs.shls[1]) {
396 counts[0] = (envs.i_l*2+1) * envs.x_ctr[0];
397 counts[1] = (envs.j_l*2+1) * envs.x_ctr[1];
398 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
399 counts[3] = (envs.l_l*2+1) * envs.x_ctr[3];
400 if (dims == NULL) { dims = counts; }
401 nout = dims[0] * dims[1] * dims[2] * dims[3];
402 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
403 c2s_dset0(out+nout*i, dims, counts); }
404 return 0; }
405 if (out != NULL && envs.shls[2] == envs.shls[3]) {
406 counts[0] = (envs.i_l*2+1) * envs.x_ctr[0];
407 counts[1] = (envs.j_l*2+1) * envs.x_ctr[1];
408 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
409 counts[3] = (envs.l_l*2+1) * envs.x_ctr[3];
410 if (dims == NULL) { dims = counts; }
411 nout = dims[0] * dims[1] * dims[2] * dims[3];
412 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
413 c2s_dset0(out+nout*i, dims, counts); }
414 return 0; }
415 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
416 } // int2e_g1g2_sph
int2e_g1g2_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)417 CACHE_SIZE_T int2e_g1g2_spinor(double complex *out, FINT *dims, FINT *shls,
418 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
419 FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9};
420 CINTEnvVars envs;
421 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
422 envs.f_gout = &CINTgout2e_int2e_g1g2;
423 envs.common_factor *= -0.25;
424 FINT i, nout;
425 FINT counts[4];
426 if (out != NULL && envs.shls[0] == envs.shls[1]) {
427 counts[0] = CINTcgto_spinor(envs.shls[0], envs.bas);
428 counts[1] = CINTcgto_spinor(envs.shls[1], envs.bas);
429 counts[2] = CINTcgto_spinor(envs.shls[2], envs.bas);
430 counts[3] = CINTcgto_spinor(envs.shls[3], envs.bas);
431 if (dims == NULL) { dims = counts; }
432 nout = dims[0] * dims[1] * dims[2] * dims[3];
433 for (i = 0; i < envs.ncomp_tensor; i++) {
434 c2s_zset0(out+nout*i, dims, counts); }
435 return 0; }
436 if (out != NULL && envs.shls[2] == envs.shls[3]) {
437 counts[0] = CINTcgto_spinor(envs.shls[0], envs.bas);
438 counts[1] = CINTcgto_spinor(envs.shls[1], envs.bas);
439 counts[2] = CINTcgto_spinor(envs.shls[2], envs.bas);
440 counts[3] = CINTcgto_spinor(envs.shls[3], envs.bas);
441 if (dims == NULL) { dims = counts; }
442 nout = dims[0] * dims[1] * dims[2] * dims[3];
443 for (i = 0; i < envs.ncomp_tensor; i++) {
444 c2s_zset0(out+nout*i, dims, counts); }
445 return 0; }
446 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_2e1i, &c2s_sf_2e2i);
447 } // int2e_g1g2_spinor
448 ALL_CINT(int2e_g1g2)
ALL_CINT_FORTRAN_(int2e_g1g2)449 ALL_CINT_FORTRAN_(int2e_g1g2)
450 /* <k P* i|R12 |CROSS P j l> : i,j \in electron 1; k,l \in electron 2
451  * = (P* i CROSS P j|R12 |k l) */
452 void CINTgout2e_int2e_p1vxp1(double *gout,
453 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
454 FINT nf = envs->nf;
455 FINT nrys_roots = envs->nrys_roots;
456 FINT ix, iy, iz, i, n;
457 double *g0 = g;
458 double *g1 = g0 + envs->g_size * 3;
459 double *g2 = g1 + envs->g_size * 3;
460 double *g3 = g2 + envs->g_size * 3;
461 G2E_D_J(g1, g0, envs->i_l+1, envs->j_l+0, envs->k_l, envs->l_l);
462 G2E_D_I(g2, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
463 G2E_D_I(g3, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
464 double s[9];
465 for (n = 0; n < nf; n++) {
466 ix = idx[0+n*3];
467 iy = idx[1+n*3];
468 iz = idx[2+n*3];
469 for (i = 0; i < 9; i++) { s[i] = 0; }
470 for (i = 0; i < nrys_roots; i++) {
471 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
472 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
473 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
474 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
475 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
476 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
477 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
478 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
479 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
480 }
481 if (gout_empty) {
482 gout[n*3+0] = + s[5] - s[7];
483 gout[n*3+1] = + s[6] - s[2];
484 gout[n*3+2] = + s[1] - s[3];
485 } else {
486 gout[n*3+0] += + s[5] - s[7];
487 gout[n*3+1] += + s[6] - s[2];
488 gout[n*3+2] += + s[1] - s[3];
489 }}}
int2e_p1vxp1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)490 void int2e_p1vxp1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
491 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 3};
492 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
493 }
int2e_p1vxp1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)494 CACHE_SIZE_T int2e_p1vxp1_cart(double *out, FINT *dims, FINT *shls,
495 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
496 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 3};
497 CINTEnvVars envs;
498 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
499 envs.f_gout = &CINTgout2e_int2e_p1vxp1;
500 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
501 } // int2e_p1vxp1_cart
int2e_p1vxp1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)502 CACHE_SIZE_T int2e_p1vxp1_sph(double *out, FINT *dims, FINT *shls,
503 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
504 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 3};
505 CINTEnvVars envs;
506 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
507 envs.f_gout = &CINTgout2e_int2e_p1vxp1;
508 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
509 } // int2e_p1vxp1_sph
int2e_p1vxp1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)510 CACHE_SIZE_T int2e_p1vxp1_spinor(double complex *out, FINT *dims, FINT *shls,
511 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
512 FINT ng[] = {1, 1, 0, 0, 2, 1, 1, 3};
513 CINTEnvVars envs;
514 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
515 envs.f_gout = &CINTgout2e_int2e_p1vxp1;
516 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_2e1, &c2s_sf_2e2);
517 } // int2e_p1vxp1_spinor
518 ALL_CINT(int2e_p1vxp1)
ALL_CINT_FORTRAN_(int2e_p1vxp1)519 ALL_CINT_FORTRAN_(int2e_p1vxp1)
520 /* <k i|NABLA-R12 |RC j l> : i,j \in electron 1; k,l \in electron 2
521  * = (i RC j|NABLA-R12 |k l) */
522 void CINTgout2e_int2e_ip1v_rc1(double *gout,
523 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
524 FINT nf = envs->nf;
525 FINT nrys_roots = envs->nrys_roots;
526 FINT ix, iy, iz, i, n;
527 double *g0 = g;
528 double *g1 = g0 + envs->g_size * 3;
529 double *g2 = g1 + envs->g_size * 3;
530 double *g3 = g2 + envs->g_size * 3;
531 double drj[3];
532 drj[0] = envs->rj[0] - envs->env[PTR_COMMON_ORIG+0];
533 drj[1] = envs->rj[1] - envs->env[PTR_COMMON_ORIG+1];
534 drj[2] = envs->rj[2] - envs->env[PTR_COMMON_ORIG+2];
535 G2E_RCJ(g1, g0, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l);
536 G2E_D_J(g2, g0, envs->i_l+0, envs->j_l+1, envs->k_l, envs->l_l);
537 G2E_D_I(g3, g0, envs->i_l+0, envs->j_l+1, envs->k_l, envs->l_l);
538 for (ix = 0; ix < envs->g_size * 3; ix++) {g2[ix] += g3[ix];}
539 G2E_RCJ(g3, g2, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l);
540 double s[9];
541 for (n = 0; n < nf; n++) {
542 ix = idx[0+n*3];
543 iy = idx[1+n*3];
544 iz = idx[2+n*3];
545 for (i = 0; i < 9; i++) { s[i] = 0; }
546 for (i = 0; i < nrys_roots; i++) {
547 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
548 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
549 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
550 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
551 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
552 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
553 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
554 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
555 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
556 }
557 if (gout_empty) {
558 gout[n*9+0] = + s[0];
559 gout[n*9+1] = + s[1];
560 gout[n*9+2] = + s[2];
561 gout[n*9+3] = + s[3];
562 gout[n*9+4] = + s[4];
563 gout[n*9+5] = + s[5];
564 gout[n*9+6] = + s[6];
565 gout[n*9+7] = + s[7];
566 gout[n*9+8] = + s[8];
567 } else {
568 gout[n*9+0] += + s[0];
569 gout[n*9+1] += + s[1];
570 gout[n*9+2] += + s[2];
571 gout[n*9+3] += + s[3];
572 gout[n*9+4] += + s[4];
573 gout[n*9+5] += + s[5];
574 gout[n*9+6] += + s[6];
575 gout[n*9+7] += + s[7];
576 gout[n*9+8] += + s[8];
577 }}}
int2e_ip1v_rc1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)578 void int2e_ip1v_rc1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
579 FINT ng[] = {1, 2, 0, 0, 2, 1, 1, 9};
580 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
581 }
int2e_ip1v_rc1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)582 CACHE_SIZE_T int2e_ip1v_rc1_cart(double *out, FINT *dims, FINT *shls,
583 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
584 FINT ng[] = {1, 2, 0, 0, 2, 1, 1, 9};
585 CINTEnvVars envs;
586 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
587 envs.f_gout = &CINTgout2e_int2e_ip1v_rc1;
588 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
589 } // int2e_ip1v_rc1_cart
int2e_ip1v_rc1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)590 CACHE_SIZE_T int2e_ip1v_rc1_sph(double *out, FINT *dims, FINT *shls,
591 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
592 FINT ng[] = {1, 2, 0, 0, 2, 1, 1, 9};
593 CINTEnvVars envs;
594 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
595 envs.f_gout = &CINTgout2e_int2e_ip1v_rc1;
596 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
597 } // int2e_ip1v_rc1_sph
int2e_ip1v_rc1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)598 CACHE_SIZE_T int2e_ip1v_rc1_spinor(double complex *out, FINT *dims, FINT *shls,
599 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
600 FINT ng[] = {1, 2, 0, 0, 2, 1, 1, 9};
601 CINTEnvVars envs;
602 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
603 envs.f_gout = &CINTgout2e_int2e_ip1v_rc1;
604 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_2e1, &c2s_sf_2e2);
605 } // int2e_ip1v_rc1_spinor
606 ALL_CINT(int2e_ip1v_rc1)
ALL_CINT_FORTRAN_(int2e_ip1v_rc1)607 ALL_CINT_FORTRAN_(int2e_ip1v_rc1)
608 /* <k i|NABLA-R12 |R j l> : i,j \in electron 1; k,l \in electron 2
609  * = (i R j|NABLA-R12 |k l) */
610 void CINTgout2e_int2e_ip1v_r1(double *gout,
611 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
612 FINT nf = envs->nf;
613 FINT nrys_roots = envs->nrys_roots;
614 FINT ix, iy, iz, i, n;
615 double *g0 = g;
616 double *g1 = g0 + envs->g_size * 3;
617 double *g2 = g1 + envs->g_size * 3;
618 double *g3 = g2 + envs->g_size * 3;
619 G2E_R_J(g1, g0, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l);
620 G2E_D_J(g2, g0, envs->i_l+0, envs->j_l+1, envs->k_l, envs->l_l);
621 G2E_D_I(g3, g0, envs->i_l+0, envs->j_l+1, envs->k_l, envs->l_l);
622 for (ix = 0; ix < envs->g_size * 3; ix++) {g2[ix] += g3[ix];}
623 G2E_R_J(g3, g2, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l);
624 double s[9];
625 for (n = 0; n < nf; n++) {
626 ix = idx[0+n*3];
627 iy = idx[1+n*3];
628 iz = idx[2+n*3];
629 for (i = 0; i < 9; i++) { s[i] = 0; }
630 for (i = 0; i < nrys_roots; i++) {
631 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
632 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
633 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
634 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
635 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
636 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
637 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
638 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
639 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
640 }
641 if (gout_empty) {
642 gout[n*9+0] = + s[0];
643 gout[n*9+1] = + s[1];
644 gout[n*9+2] = + s[2];
645 gout[n*9+3] = + s[3];
646 gout[n*9+4] = + s[4];
647 gout[n*9+5] = + s[5];
648 gout[n*9+6] = + s[6];
649 gout[n*9+7] = + s[7];
650 gout[n*9+8] = + s[8];
651 } else {
652 gout[n*9+0] += + s[0];
653 gout[n*9+1] += + s[1];
654 gout[n*9+2] += + s[2];
655 gout[n*9+3] += + s[3];
656 gout[n*9+4] += + s[4];
657 gout[n*9+5] += + s[5];
658 gout[n*9+6] += + s[6];
659 gout[n*9+7] += + s[7];
660 gout[n*9+8] += + s[8];
661 }}}
int2e_ip1v_r1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)662 void int2e_ip1v_r1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
663 FINT ng[] = {1, 2, 0, 0, 2, 1, 1, 9};
664 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
665 }
int2e_ip1v_r1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)666 CACHE_SIZE_T int2e_ip1v_r1_cart(double *out, FINT *dims, FINT *shls,
667 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
668 FINT ng[] = {1, 2, 0, 0, 2, 1, 1, 9};
669 CINTEnvVars envs;
670 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
671 envs.f_gout = &CINTgout2e_int2e_ip1v_r1;
672 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
673 } // int2e_ip1v_r1_cart
int2e_ip1v_r1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)674 CACHE_SIZE_T int2e_ip1v_r1_sph(double *out, FINT *dims, FINT *shls,
675 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
676 FINT ng[] = {1, 2, 0, 0, 2, 1, 1, 9};
677 CINTEnvVars envs;
678 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
679 envs.f_gout = &CINTgout2e_int2e_ip1v_r1;
680 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
681 } // int2e_ip1v_r1_sph
int2e_ip1v_r1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)682 CACHE_SIZE_T int2e_ip1v_r1_spinor(double complex *out, FINT *dims, FINT *shls,
683 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
684 FINT ng[] = {1, 2, 0, 0, 2, 1, 1, 9};
685 CINTEnvVars envs;
686 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
687 envs.f_gout = &CINTgout2e_int2e_ip1v_r1;
688 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_2e1, &c2s_sf_2e2);
689 } // int2e_ip1v_r1_spinor
690 ALL_CINT(int2e_ip1v_r1)
ALL_CINT_FORTRAN_(int2e_ip1v_r1)691 ALL_CINT_FORTRAN_(int2e_ip1v_r1)
692 /* <k G i|NABLA-R12 CROSS P |j l> : i,j \in electron 1; k,l \in electron 2
693  * = (G i j|NABLA-R12 CROSS P |k l) */
694 void CINTgout2e_int2e_ipvg1_xp1(double *gout,
695 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
696 FINT nf = envs->nf;
697 FINT nrys_roots = envs->nrys_roots;
698 FINT ix, iy, iz, i, n;
699 double *g0 = g;
700 double *g1 = g0 + envs->g_size * 3;
701 double *g2 = g1 + envs->g_size * 3;
702 double *g3 = g2 + envs->g_size * 3;
703 double *g4 = g3 + envs->g_size * 3;
704 double *g5 = g4 + envs->g_size * 3;
705 double *g6 = g5 + envs->g_size * 3;
706 double *g7 = g6 + envs->g_size * 3;
707 double rirj[3];
708 rirj[0] = envs->ri[0] - envs->rj[0];
709 rirj[1] = envs->ri[1] - envs->rj[1];
710 rirj[2] = envs->ri[2] - envs->rj[2];
711 double c[3];
712 c[0] = 1 * rirj[0];
713 c[1] = 1 * rirj[1];
714 c[2] = 1 * rirj[2];
715 G2E_D_J(g1, g0, envs->i_l+2, envs->j_l+0, envs->k_l, envs->l_l);
716 G2E_D_J(g2, g0, envs->i_l+1, envs->j_l+1, envs->k_l, envs->l_l);
717 G2E_D_I(g3, g0, envs->i_l+1, envs->j_l+1, envs->k_l, envs->l_l);
718 for (ix = 0; ix < envs->g_size * 3; ix++) {g2[ix] += g3[ix];}
719 G2E_D_J(g3, g2, envs->i_l+2, envs->j_l+0, envs->k_l, envs->l_l);
720 G2E_R0I(g4, g0, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
721 G2E_R0I(g5, g1, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
722 G2E_R0I(g6, g2, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
723 G2E_R0I(g7, g3, envs->i_l+0, envs->j_l, envs->k_l, envs->l_l);
724 double s[27];
725 for (n = 0; n < nf; n++) {
726 ix = idx[0+n*3];
727 iy = idx[1+n*3];
728 iz = idx[2+n*3];
729 for (i = 0; i < 27; i++) { s[i] = 0; }
730 for (i = 0; i < nrys_roots; i++) {
731 s[0] += g7[ix+i] * g0[iy+i] * g0[iz+i];
732 s[1] += g6[ix+i] * g1[iy+i] * g0[iz+i];
733 s[2] += g6[ix+i] * g0[iy+i] * g1[iz+i];
734 s[3] += g5[ix+i] * g2[iy+i] * g0[iz+i];
735 s[4] += g4[ix+i] * g3[iy+i] * g0[iz+i];
736 s[5] += g4[ix+i] * g2[iy+i] * g1[iz+i];
737 s[6] += g5[ix+i] * g0[iy+i] * g2[iz+i];
738 s[7] += g4[ix+i] * g1[iy+i] * g2[iz+i];
739 s[8] += g4[ix+i] * g0[iy+i] * g3[iz+i];
740 s[9] += g3[ix+i] * g4[iy+i] * g0[iz+i];
741 s[10] += g2[ix+i] * g5[iy+i] * g0[iz+i];
742 s[11] += g2[ix+i] * g4[iy+i] * g1[iz+i];
743 s[12] += g1[ix+i] * g6[iy+i] * g0[iz+i];
744 s[13] += g0[ix+i] * g7[iy+i] * g0[iz+i];
745 s[14] += g0[ix+i] * g6[iy+i] * g1[iz+i];
746 s[15] += g1[ix+i] * g4[iy+i] * g2[iz+i];
747 s[16] += g0[ix+i] * g5[iy+i] * g2[iz+i];
748 s[17] += g0[ix+i] * g4[iy+i] * g3[iz+i];
749 s[18] += g3[ix+i] * g0[iy+i] * g4[iz+i];
750 s[19] += g2[ix+i] * g1[iy+i] * g4[iz+i];
751 s[20] += g2[ix+i] * g0[iy+i] * g5[iz+i];
752 s[21] += g1[ix+i] * g2[iy+i] * g4[iz+i];
753 s[22] += g0[ix+i] * g3[iy+i] * g4[iz+i];
754 s[23] += g0[ix+i] * g2[iy+i] * g5[iz+i];
755 s[24] += g1[ix+i] * g0[iy+i] * g6[iz+i];
756 s[25] += g0[ix+i] * g1[iy+i] * g6[iz+i];
757 s[26] += g0[ix+i] * g0[iy+i] * g7[iz+i];
758 }
759 if (gout_empty) {
760 gout[n*9+0] = + c[1]*s[23] - c[2]*s[14] - c[1]*s[25] + c[2]*s[16];
761 gout[n*9+1] = + c[1]*s[24] - c[2]*s[15] - c[1]*s[20] + c[2]*s[11];
762 gout[n*9+2] = + c[1]*s[19] - c[2]*s[10] - c[1]*s[21] + c[2]*s[12];
763 gout[n*9+3] = + c[2]*s[5] - c[0]*s[23] - c[2]*s[7] + c[0]*s[25];
764 gout[n*9+4] = + c[2]*s[6] - c[0]*s[24] - c[2]*s[2] + c[0]*s[20];
765 gout[n*9+5] = + c[2]*s[1] - c[0]*s[19] - c[2]*s[3] + c[0]*s[21];
766 gout[n*9+6] = + c[0]*s[14] - c[1]*s[5] - c[0]*s[16] + c[1]*s[7];
767 gout[n*9+7] = + c[0]*s[15] - c[1]*s[6] - c[0]*s[11] + c[1]*s[2];
768 gout[n*9+8] = + c[0]*s[10] - c[1]*s[1] - c[0]*s[12] + c[1]*s[3];
769 } else {
770 gout[n*9+0] += + c[1]*s[23] - c[2]*s[14] - c[1]*s[25] + c[2]*s[16];
771 gout[n*9+1] += + c[1]*s[24] - c[2]*s[15] - c[1]*s[20] + c[2]*s[11];
772 gout[n*9+2] += + c[1]*s[19] - c[2]*s[10] - c[1]*s[21] + c[2]*s[12];
773 gout[n*9+3] += + c[2]*s[5] - c[0]*s[23] - c[2]*s[7] + c[0]*s[25];
774 gout[n*9+4] += + c[2]*s[6] - c[0]*s[24] - c[2]*s[2] + c[0]*s[20];
775 gout[n*9+5] += + c[2]*s[1] - c[0]*s[19] - c[2]*s[3] + c[0]*s[21];
776 gout[n*9+6] += + c[0]*s[14] - c[1]*s[5] - c[0]*s[16] + c[1]*s[7];
777 gout[n*9+7] += + c[0]*s[15] - c[1]*s[6] - c[0]*s[11] + c[1]*s[2];
778 gout[n*9+8] += + c[0]*s[10] - c[1]*s[1] - c[0]*s[12] + c[1]*s[3];
779 }}}
int2e_ipvg1_xp1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)780 void int2e_ipvg1_xp1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
781 FINT ng[] = {2, 1, 0, 0, 3, 1, 1, 9};
782 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
783 }
int2e_ipvg1_xp1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)784 CACHE_SIZE_T int2e_ipvg1_xp1_cart(double *out, FINT *dims, FINT *shls,
785 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
786 FINT ng[] = {2, 1, 0, 0, 3, 1, 1, 9};
787 CINTEnvVars envs;
788 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
789 envs.f_gout = &CINTgout2e_int2e_ipvg1_xp1;
790 envs.common_factor *= 0.5;
791 FINT i, nout;
792 FINT counts[4];
793 if (out != NULL && envs.shls[0] == envs.shls[1]) {
794 counts[0] = envs.nfi * envs.x_ctr[0];
795 counts[1] = envs.nfj * envs.x_ctr[1];
796 counts[2] = envs.nfk * envs.x_ctr[2];
797 counts[3] = envs.nfl * envs.x_ctr[3];
798 if (dims == NULL) { dims = counts; }
799 nout = dims[0] * dims[1] * dims[2] * dims[3];
800 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
801 c2s_dset0(out+nout*i, dims, counts); }
802 return 0; }
803 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
804 } // int2e_ipvg1_xp1_cart
int2e_ipvg1_xp1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)805 CACHE_SIZE_T int2e_ipvg1_xp1_sph(double *out, FINT *dims, FINT *shls,
806 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
807 FINT ng[] = {2, 1, 0, 0, 3, 1, 1, 9};
808 CINTEnvVars envs;
809 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
810 envs.f_gout = &CINTgout2e_int2e_ipvg1_xp1;
811 envs.common_factor *= 0.5;
812 FINT i, nout;
813 FINT counts[4];
814 if (out != NULL && envs.shls[0] == envs.shls[1]) {
815 counts[0] = (envs.i_l*2+1) * envs.x_ctr[0];
816 counts[1] = (envs.j_l*2+1) * envs.x_ctr[1];
817 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
818 counts[3] = (envs.l_l*2+1) * envs.x_ctr[3];
819 if (dims == NULL) { dims = counts; }
820 nout = dims[0] * dims[1] * dims[2] * dims[3];
821 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
822 c2s_dset0(out+nout*i, dims, counts); }
823 return 0; }
824 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
825 } // int2e_ipvg1_xp1_sph
int2e_ipvg1_xp1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)826 CACHE_SIZE_T int2e_ipvg1_xp1_spinor(double complex *out, FINT *dims, FINT *shls,
827 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
828 FINT ng[] = {2, 1, 0, 0, 3, 1, 1, 9};
829 CINTEnvVars envs;
830 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
831 envs.f_gout = &CINTgout2e_int2e_ipvg1_xp1;
832 envs.common_factor *= 0.5;
833 FINT i, nout;
834 FINT counts[4];
835 if (out != NULL && envs.shls[0] == envs.shls[1]) {
836 counts[0] = CINTcgto_spinor(envs.shls[0], envs.bas);
837 counts[1] = CINTcgto_spinor(envs.shls[1], envs.bas);
838 counts[2] = CINTcgto_spinor(envs.shls[2], envs.bas);
839 counts[3] = CINTcgto_spinor(envs.shls[3], envs.bas);
840 if (dims == NULL) { dims = counts; }
841 nout = dims[0] * dims[1] * dims[2] * dims[3];
842 for (i = 0; i < envs.ncomp_tensor; i++) {
843 c2s_zset0(out+nout*i, dims, counts); }
844 return 0; }
845 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_2e1, &c2s_sf_2e2);
846 } // int2e_ipvg1_xp1_spinor
847 ALL_CINT(int2e_ipvg1_xp1)
ALL_CINT_FORTRAN_(int2e_ipvg1_xp1)848 ALL_CINT_FORTRAN_(int2e_ipvg1_xp1)
849 /* <G k i|NABLA-R12 CROSS P |j l> : i,j \in electron 1; k,l \in electron 2
850  * = (i j|NABLA-R12 CROSS P |G k l) */
851 void CINTgout2e_int2e_ipvg2_xp1(double *gout,
852 double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
853 FINT nf = envs->nf;
854 FINT nrys_roots = envs->nrys_roots;
855 FINT ix, iy, iz, i, n;
856 double *g0 = g;
857 double *g1 = g0 + envs->g_size * 3;
858 double *g2 = g1 + envs->g_size * 3;
859 double *g3 = g2 + envs->g_size * 3;
860 double *g4 = g3 + envs->g_size * 3;
861 double *g5 = g4 + envs->g_size * 3;
862 double *g6 = g5 + envs->g_size * 3;
863 double *g7 = g6 + envs->g_size * 3;
864 double rkrl[3];
865 rkrl[0] = envs->rk[0] - envs->rl[0];
866 rkrl[1] = envs->rk[1] - envs->rl[1];
867 rkrl[2] = envs->rk[2] - envs->rl[2];
868 double c[3];
869 c[0] = 1 * rkrl[0];
870 c[1] = 1 * rkrl[1];
871 c[2] = 1 * rkrl[2];
872 G2E_R0K(g1, g0, envs->i_l+1, envs->j_l+1, envs->k_l+0, envs->l_l);
873 G2E_D_J(g2, g0, envs->i_l+1, envs->j_l+0, envs->k_l, envs->l_l);
874 G2E_D_J(g3, g1, envs->i_l+1, envs->j_l+0, envs->k_l, envs->l_l);
875 G2E_D_J(g4, g0, envs->i_l+0, envs->j_l+1, envs->k_l, envs->l_l);
876 G2E_D_I(g5, g0, envs->i_l+0, envs->j_l+1, envs->k_l, envs->l_l);
877 for (ix = 0; ix < envs->g_size * 3; ix++) {g4[ix] += g5[ix];}
878 G2E_D_J(g5, g1, envs->i_l+0, envs->j_l+1, envs->k_l, envs->l_l);
879 G2E_D_I(g6, g1, envs->i_l+0, envs->j_l+1, envs->k_l, envs->l_l);
880 for (ix = 0; ix < envs->g_size * 3; ix++) {g5[ix] += g6[ix];}
881 G2E_D_J(g6, g4, envs->i_l+1, envs->j_l+0, envs->k_l, envs->l_l);
882 G2E_D_J(g7, g5, envs->i_l+1, envs->j_l+0, envs->k_l, envs->l_l);
883 double s[27];
884 for (n = 0; n < nf; n++) {
885 ix = idx[0+n*3];
886 iy = idx[1+n*3];
887 iz = idx[2+n*3];
888 for (i = 0; i < 27; i++) { s[i] = 0; }
889 for (i = 0; i < nrys_roots; i++) {
890 s[0] += g7[ix+i] * g0[iy+i] * g0[iz+i];
891 s[1] += g6[ix+i] * g1[iy+i] * g0[iz+i];
892 s[2] += g6[ix+i] * g0[iy+i] * g1[iz+i];
893 s[3] += g5[ix+i] * g2[iy+i] * g0[iz+i];
894 s[4] += g4[ix+i] * g3[iy+i] * g0[iz+i];
895 s[5] += g4[ix+i] * g2[iy+i] * g1[iz+i];
896 s[6] += g5[ix+i] * g0[iy+i] * g2[iz+i];
897 s[7] += g4[ix+i] * g1[iy+i] * g2[iz+i];
898 s[8] += g4[ix+i] * g0[iy+i] * g3[iz+i];
899 s[9] += g3[ix+i] * g4[iy+i] * g0[iz+i];
900 s[10] += g2[ix+i] * g5[iy+i] * g0[iz+i];
901 s[11] += g2[ix+i] * g4[iy+i] * g1[iz+i];
902 s[12] += g1[ix+i] * g6[iy+i] * g0[iz+i];
903 s[13] += g0[ix+i] * g7[iy+i] * g0[iz+i];
904 s[14] += g0[ix+i] * g6[iy+i] * g1[iz+i];
905 s[15] += g1[ix+i] * g4[iy+i] * g2[iz+i];
906 s[16] += g0[ix+i] * g5[iy+i] * g2[iz+i];
907 s[17] += g0[ix+i] * g4[iy+i] * g3[iz+i];
908 s[18] += g3[ix+i] * g0[iy+i] * g4[iz+i];
909 s[19] += g2[ix+i] * g1[iy+i] * g4[iz+i];
910 s[20] += g2[ix+i] * g0[iy+i] * g5[iz+i];
911 s[21] += g1[ix+i] * g2[iy+i] * g4[iz+i];
912 s[22] += g0[ix+i] * g3[iy+i] * g4[iz+i];
913 s[23] += g0[ix+i] * g2[iy+i] * g5[iz+i];
914 s[24] += g1[ix+i] * g0[iy+i] * g6[iz+i];
915 s[25] += g0[ix+i] * g1[iy+i] * g6[iz+i];
916 s[26] += g0[ix+i] * g0[iy+i] * g7[iz+i];
917 }
918 if (gout_empty) {
919 gout[n*9+0] = - c[1]*s[17] + c[1]*s[23] + c[2]*s[16] - c[2]*s[22];
920 gout[n*9+1] = - c[2]*s[15] + c[2]*s[21] + c[0]*s[17] - c[0]*s[23];
921 gout[n*9+2] = - c[0]*s[16] + c[0]*s[22] + c[1]*s[15] - c[1]*s[21];
922 gout[n*9+3] = - c[1]*s[20] + c[1]*s[8] + c[2]*s[19] - c[2]*s[7];
923 gout[n*9+4] = - c[2]*s[18] + c[2]*s[6] + c[0]*s[20] - c[0]*s[8];
924 gout[n*9+5] = - c[0]*s[19] + c[0]*s[7] + c[1]*s[18] - c[1]*s[6];
925 gout[n*9+6] = - c[1]*s[5] + c[1]*s[11] + c[2]*s[4] - c[2]*s[10];
926 gout[n*9+7] = - c[2]*s[3] + c[2]*s[9] + c[0]*s[5] - c[0]*s[11];
927 gout[n*9+8] = - c[0]*s[4] + c[0]*s[10] + c[1]*s[3] - c[1]*s[9];
928 } else {
929 gout[n*9+0] += - c[1]*s[17] + c[1]*s[23] + c[2]*s[16] - c[2]*s[22];
930 gout[n*9+1] += - c[2]*s[15] + c[2]*s[21] + c[0]*s[17] - c[0]*s[23];
931 gout[n*9+2] += - c[0]*s[16] + c[0]*s[22] + c[1]*s[15] - c[1]*s[21];
932 gout[n*9+3] += - c[1]*s[20] + c[1]*s[8] + c[2]*s[19] - c[2]*s[7];
933 gout[n*9+4] += - c[2]*s[18] + c[2]*s[6] + c[0]*s[20] - c[0]*s[8];
934 gout[n*9+5] += - c[0]*s[19] + c[0]*s[7] + c[1]*s[18] - c[1]*s[6];
935 gout[n*9+6] += - c[1]*s[5] + c[1]*s[11] + c[2]*s[4] - c[2]*s[10];
936 gout[n*9+7] += - c[2]*s[3] + c[2]*s[9] + c[0]*s[5] - c[0]*s[11];
937 gout[n*9+8] += - c[0]*s[4] + c[0]*s[10] + c[1]*s[3] - c[1]*s[9];
938 }}}
int2e_ipvg2_xp1_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)939 void int2e_ipvg2_xp1_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
940 FINT ng[] = {1, 1, 1, 0, 3, 1, 1, 9};
941 CINTall_2e_optimizer(opt, ng, atm, natm, bas, nbas, env);
942 }
int2e_ipvg2_xp1_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)943 CACHE_SIZE_T int2e_ipvg2_xp1_cart(double *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, 1, 0, 3, 1, 1, 9};
946 CINTEnvVars envs;
947 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
948 envs.f_gout = &CINTgout2e_int2e_ipvg2_xp1;
949 envs.common_factor *= 0.5;
950 FINT i, nout;
951 FINT counts[4];
952 if (out != NULL && envs.shls[2] == envs.shls[3]) {
953 counts[0] = envs.nfi * envs.x_ctr[0];
954 counts[1] = envs.nfj * envs.x_ctr[1];
955 counts[2] = envs.nfk * envs.x_ctr[2];
956 counts[3] = envs.nfl * envs.x_ctr[3];
957 if (dims == NULL) { dims = counts; }
958 nout = dims[0] * dims[1] * dims[2] * dims[3];
959 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
960 c2s_dset0(out+nout*i, dims, counts); }
961 return 0; }
962 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_cart_2e1);
963 } // int2e_ipvg2_xp1_cart
int2e_ipvg2_xp1_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)964 CACHE_SIZE_T int2e_ipvg2_xp1_sph(double *out, FINT *dims, FINT *shls,
965 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
966 FINT ng[] = {1, 1, 1, 0, 3, 1, 1, 9};
967 CINTEnvVars envs;
968 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
969 envs.f_gout = &CINTgout2e_int2e_ipvg2_xp1;
970 envs.common_factor *= 0.5;
971 FINT i, nout;
972 FINT counts[4];
973 if (out != NULL && envs.shls[2] == envs.shls[3]) {
974 counts[0] = (envs.i_l*2+1) * envs.x_ctr[0];
975 counts[1] = (envs.j_l*2+1) * envs.x_ctr[1];
976 counts[2] = (envs.k_l*2+1) * envs.x_ctr[2];
977 counts[3] = (envs.l_l*2+1) * envs.x_ctr[3];
978 if (dims == NULL) { dims = counts; }
979 nout = dims[0] * dims[1] * dims[2] * dims[3];
980 for (i = 0; i < envs.ncomp_e1 * envs.ncomp_e2 * envs.ncomp_tensor; i++) {
981 c2s_dset0(out+nout*i, dims, counts); }
982 return 0; }
983 return CINT2e_drv(out, dims, &envs, opt, cache, &c2s_sph_2e1);
984 } // int2e_ipvg2_xp1_sph
int2e_ipvg2_xp1_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)985 CACHE_SIZE_T int2e_ipvg2_xp1_spinor(double complex *out, FINT *dims, FINT *shls,
986 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
987 FINT ng[] = {1, 1, 1, 0, 3, 1, 1, 9};
988 CINTEnvVars envs;
989 CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
990 envs.f_gout = &CINTgout2e_int2e_ipvg2_xp1;
991 envs.common_factor *= 0.5;
992 FINT i, nout;
993 FINT counts[4];
994 if (out != NULL && envs.shls[2] == envs.shls[3]) {
995 counts[0] = CINTcgto_spinor(envs.shls[0], envs.bas);
996 counts[1] = CINTcgto_spinor(envs.shls[1], envs.bas);
997 counts[2] = CINTcgto_spinor(envs.shls[2], envs.bas);
998 counts[3] = CINTcgto_spinor(envs.shls[3], envs.bas);
999 if (dims == NULL) { dims = counts; }
1000 nout = dims[0] * dims[1] * dims[2] * dims[3];
1001 for (i = 0; i < envs.ncomp_tensor; i++) {
1002 c2s_zset0(out+nout*i, dims, counts); }
1003 return 0; }
1004 return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_sf_2e1i, &c2s_sf_2e2i);
1005 } // int2e_ipvg2_xp1_spinor
1006 ALL_CINT(int2e_ipvg2_xp1)
ALL_CINT_FORTRAN_(int2e_ipvg2_xp1)1007 ALL_CINT_FORTRAN_(int2e_ipvg2_xp1)
1008 /* <i|NUC |RC CROSS P j> */
1009 void CINTgout1e_int1e_inuc_rcxp(double *gout, double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
1010 FINT nf = envs->nf;
1011 FINT nrys_roots = envs->nrys_roots;
1012 FINT ix, iy, iz, n, i;
1013 double *g0 = g;
1014 double *g1 = g0 + envs->g_size * 3;
1015 double *g2 = g1 + envs->g_size * 3;
1016 double *g3 = g2 + envs->g_size * 3;
1017 double drj[3];
1018 drj[0] = envs->rj[0] - envs->env[PTR_COMMON_ORIG+0];
1019 drj[1] = envs->rj[1] - envs->env[PTR_COMMON_ORIG+1];
1020 drj[2] = envs->rj[2] - envs->env[PTR_COMMON_ORIG+2];
1021 G2E_D_J(g1, g0, envs->i_l+0, envs->j_l+0, 0, 0);
1022 G2E_RCJ(g2, g0, envs->i_l+0, envs->j_l+1, 0, 0);
1023 G2E_D_J(g3, g2, envs->i_l+0, envs->j_l+0, 0, 0);
1024 double s[9];
1025 for (n = 0; n < nf; n++) {
1026 ix = idx[0+n*3];
1027 iy = idx[1+n*3];
1028 iz = idx[2+n*3];
1029 for (i = 0; i < 9; i++) { s[i] = 0; }
1030 for (i = 0; i < nrys_roots; i++) {
1031 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
1032 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
1033 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
1034 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
1035 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
1036 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
1037 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
1038 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
1039 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
1040 }
1041 if (gout_empty) {
1042 gout[n*3+0] = + s[5] - s[7];
1043 gout[n*3+1] = + s[6] - s[2];
1044 gout[n*3+2] = + s[1] - s[3];
1045 } else {
1046 gout[n*3+0] += + s[5] - s[7];
1047 gout[n*3+1] += + s[6] - s[2];
1048 gout[n*3+2] += + s[1] - s[3];
1049 }}}
int1e_inuc_rcxp_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)1050 void int1e_inuc_rcxp_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
1051 FINT ng[] = {0, 2, 0, 0, 2, 1, 0, 3};
1052 CINTall_1e_optimizer(opt, ng, atm, natm, bas, nbas, env);
1053 }
int1e_inuc_rcxp_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1054 CACHE_SIZE_T int1e_inuc_rcxp_cart(double *out, FINT *dims, FINT *shls,
1055 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1056 FINT ng[] = {0, 2, 0, 0, 2, 1, 0, 3};
1057 CINTEnvVars envs;
1058 CINTinit_int1e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1059 envs.f_gout = &CINTgout1e_int1e_inuc_rcxp;
1060 return CINT1e_drv(out, dims, &envs, cache, &c2s_cart_1e, 2);
1061 } // int1e_inuc_rcxp_cart
int1e_inuc_rcxp_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1062 CACHE_SIZE_T int1e_inuc_rcxp_sph(double *out, FINT *dims, FINT *shls,
1063 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1064 FINT ng[] = {0, 2, 0, 0, 2, 1, 0, 3};
1065 CINTEnvVars envs;
1066 CINTinit_int1e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1067 envs.f_gout = &CINTgout1e_int1e_inuc_rcxp;
1068 return CINT1e_drv(out, dims, &envs, cache, &c2s_sph_1e, 2);
1069 } // int1e_inuc_rcxp_sph
int1e_inuc_rcxp_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1070 CACHE_SIZE_T int1e_inuc_rcxp_spinor(double complex *out, FINT *dims, FINT *shls,
1071 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1072 FINT ng[] = {0, 2, 0, 0, 2, 1, 0, 3};
1073 CINTEnvVars envs;
1074 CINTinit_int1e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1075 envs.f_gout = &CINTgout1e_int1e_inuc_rcxp;
1076 return CINT1e_spinor_drv(out, dims, &envs, cache, &c2s_sf_1e, 2);
1077 } // int1e_inuc_rcxp_spinor
1078 ALL_CINT1E(int1e_inuc_rcxp)
ALL_CINT1E_FORTRAN_(int1e_inuc_rcxp)1079 ALL_CINT1E_FORTRAN_(int1e_inuc_rcxp)
1080 /* <i|NUC |R CROSS P j> */
1081 void CINTgout1e_int1e_inuc_rxp(double *gout, double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) {
1082 FINT nf = envs->nf;
1083 FINT nrys_roots = envs->nrys_roots;
1084 FINT ix, iy, iz, n, i;
1085 double *g0 = g;
1086 double *g1 = g0 + envs->g_size * 3;
1087 double *g2 = g1 + envs->g_size * 3;
1088 double *g3 = g2 + envs->g_size * 3;
1089 G2E_D_J(g1, g0, envs->i_l+0, envs->j_l+0, 0, 0);
1090 G2E_R_J(g2, g0, envs->i_l+0, envs->j_l+1, 0, 0);
1091 G2E_D_J(g3, g2, envs->i_l+0, envs->j_l+0, 0, 0);
1092 double s[9];
1093 for (n = 0; n < nf; n++) {
1094 ix = idx[0+n*3];
1095 iy = idx[1+n*3];
1096 iz = idx[2+n*3];
1097 for (i = 0; i < 9; i++) { s[i] = 0; }
1098 for (i = 0; i < nrys_roots; i++) {
1099 s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i];
1100 s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i];
1101 s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i];
1102 s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i];
1103 s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i];
1104 s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i];
1105 s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i];
1106 s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i];
1107 s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i];
1108 }
1109 if (gout_empty) {
1110 gout[n*3+0] = + s[5] - s[7];
1111 gout[n*3+1] = + s[6] - s[2];
1112 gout[n*3+2] = + s[1] - s[3];
1113 } else {
1114 gout[n*3+0] += + s[5] - s[7];
1115 gout[n*3+1] += + s[6] - s[2];
1116 gout[n*3+2] += + s[1] - s[3];
1117 }}}
int1e_inuc_rxp_optimizer(CINTOpt ** opt,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env)1118 void int1e_inuc_rxp_optimizer(CINTOpt **opt, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env) {
1119 FINT ng[] = {0, 2, 0, 0, 2, 1, 0, 3};
1120 CINTall_1e_optimizer(opt, ng, atm, natm, bas, nbas, env);
1121 }
int1e_inuc_rxp_cart(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1122 CACHE_SIZE_T int1e_inuc_rxp_cart(double *out, FINT *dims, FINT *shls,
1123 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1124 FINT ng[] = {0, 2, 0, 0, 2, 1, 0, 3};
1125 CINTEnvVars envs;
1126 CINTinit_int1e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1127 envs.f_gout = &CINTgout1e_int1e_inuc_rxp;
1128 return CINT1e_drv(out, dims, &envs, cache, &c2s_cart_1e, 2);
1129 } // int1e_inuc_rxp_cart
int1e_inuc_rxp_sph(double * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1130 CACHE_SIZE_T int1e_inuc_rxp_sph(double *out, FINT *dims, FINT *shls,
1131 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1132 FINT ng[] = {0, 2, 0, 0, 2, 1, 0, 3};
1133 CINTEnvVars envs;
1134 CINTinit_int1e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1135 envs.f_gout = &CINTgout1e_int1e_inuc_rxp;
1136 return CINT1e_drv(out, dims, &envs, cache, &c2s_sph_1e, 2);
1137 } // int1e_inuc_rxp_sph
int1e_inuc_rxp_spinor(double complex * out,FINT * dims,FINT * shls,FINT * atm,FINT natm,FINT * bas,FINT nbas,double * env,CINTOpt * opt,double * cache)1138 CACHE_SIZE_T int1e_inuc_rxp_spinor(double complex *out, FINT *dims, FINT *shls,
1139 FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) {
1140 FINT ng[] = {0, 2, 0, 0, 2, 1, 0, 3};
1141 CINTEnvVars envs;
1142 CINTinit_int1e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env);
1143 envs.f_gout = &CINTgout1e_int1e_inuc_rxp;
1144 return CINT1e_spinor_drv(out, dims, &envs, cache, &c2s_sf_1e, 2);
1145 } // int1e_inuc_rxp_spinor
1146 ALL_CINT1E(int1e_inuc_rxp)
1147 ALL_CINT1E_FORTRAN_(int1e_inuc_rxp)
1148