@@ -240,3 +240,89 @@ return CINT1e_grids_spinor_drv(out, dims, &envs, cache, &c2s_si_1e_grids);
240
240
} // int1e_grids_spvsp_spinor
241
241
ALL_CINT1E (int1e_grids_spvsp )
242
242
ALL_CINT1E_FORTRAN_ (int1e_grids_spvsp )
243
+ /* <NABLA NABLA i| 1/r_{grids} |j> */
244
+ void CINTgout1e_int1e_grids_ipip (double * gout , double * g , FINT * idx , CINTEnvVars * envs , FINT gout_empty ) {
245
+ FINT ngrids = envs -> ngrids ;
246
+ FINT bgrids = MIN (ngrids - envs -> grids_offset , GRID_BLKSIZE );
247
+ FINT nrys_roots = envs -> nrys_roots ;
248
+ FINT nf = envs -> nf ;
249
+ FINT ix , iy , iz , n , i , ig ;
250
+ double * g0 = g ;
251
+ double * g1 = g0 + envs -> g_size * 3 ;
252
+ double * g2 = g1 + envs -> g_size * 3 ;
253
+ double * g3 = g2 + envs -> g_size * 3 ;
254
+ double s [GRID_BLKSIZE * 9 ];
255
+ G1E_GRIDS_D_I (g1 , g0 , envs -> i_l + 1 , envs -> j_l );
256
+ G1E_GRIDS_D_I (g2 , g0 , envs -> i_l + 0 , envs -> j_l );
257
+ G1E_GRIDS_D_I (g3 , g1 , envs -> i_l + 0 , envs -> j_l );
258
+ for (n = 0 ; n < nf ; n ++ ) {
259
+ ix = idx [0 + n * 3 ];
260
+ iy = idx [1 + n * 3 ];
261
+ iz = idx [2 + n * 3 ];
262
+ for (i = 0 ; i < 9 ; i ++ ) {
263
+ for (ig = 0 ; ig < bgrids ; ig ++ ) { s [ig + i * GRID_BLKSIZE ] = 0 ; }}
264
+ for (i = 0 ; i < nrys_roots ; i ++ ) {
265
+ for (ig = 0 ; ig < bgrids ; ig ++ ) {
266
+ s [ig + GRID_BLKSIZE * 0 ] += g3 [ix + ig + i * GRID_BLKSIZE ] * g0 [iy + ig + i * GRID_BLKSIZE ] * g0 [iz + ig + i * GRID_BLKSIZE ];
267
+ s [ig + GRID_BLKSIZE * 1 ] += g2 [ix + ig + i * GRID_BLKSIZE ] * g1 [iy + ig + i * GRID_BLKSIZE ] * g0 [iz + ig + i * GRID_BLKSIZE ];
268
+ s [ig + GRID_BLKSIZE * 2 ] += g2 [ix + ig + i * GRID_BLKSIZE ] * g0 [iy + ig + i * GRID_BLKSIZE ] * g1 [iz + ig + i * GRID_BLKSIZE ];
269
+ s [ig + GRID_BLKSIZE * 3 ] += g1 [ix + ig + i * GRID_BLKSIZE ] * g2 [iy + ig + i * GRID_BLKSIZE ] * g0 [iz + ig + i * GRID_BLKSIZE ];
270
+ s [ig + GRID_BLKSIZE * 4 ] += g0 [ix + ig + i * GRID_BLKSIZE ] * g3 [iy + ig + i * GRID_BLKSIZE ] * g0 [iz + ig + i * GRID_BLKSIZE ];
271
+ s [ig + GRID_BLKSIZE * 5 ] += g0 [ix + ig + i * GRID_BLKSIZE ] * g2 [iy + ig + i * GRID_BLKSIZE ] * g1 [iz + ig + i * GRID_BLKSIZE ];
272
+ s [ig + GRID_BLKSIZE * 6 ] += g1 [ix + ig + i * GRID_BLKSIZE ] * g0 [iy + ig + i * GRID_BLKSIZE ] * g2 [iz + ig + i * GRID_BLKSIZE ];
273
+ s [ig + GRID_BLKSIZE * 7 ] += g0 [ix + ig + i * GRID_BLKSIZE ] * g1 [iy + ig + i * GRID_BLKSIZE ] * g2 [iz + ig + i * GRID_BLKSIZE ];
274
+ s [ig + GRID_BLKSIZE * 8 ] += g0 [ix + ig + i * GRID_BLKSIZE ] * g0 [iy + ig + i * GRID_BLKSIZE ] * g3 [iz + ig + i * GRID_BLKSIZE ];
275
+ }};
276
+ if (gout_empty ) {
277
+ for (ig = 0 ; ig < bgrids ; ig ++ ) {
278
+ gout [ig + bgrids * (n * 9 + 0 )] = + s [ig + GRID_BLKSIZE * 0 ];
279
+ gout [ig + bgrids * (n * 9 + 1 )] = + s [ig + GRID_BLKSIZE * 3 ];
280
+ gout [ig + bgrids * (n * 9 + 2 )] = + s [ig + GRID_BLKSIZE * 6 ];
281
+ gout [ig + bgrids * (n * 9 + 3 )] = + s [ig + GRID_BLKSIZE * 1 ];
282
+ gout [ig + bgrids * (n * 9 + 4 )] = + s [ig + GRID_BLKSIZE * 4 ];
283
+ gout [ig + bgrids * (n * 9 + 5 )] = + s [ig + GRID_BLKSIZE * 7 ];
284
+ gout [ig + bgrids * (n * 9 + 6 )] = + s [ig + GRID_BLKSIZE * 2 ];
285
+ gout [ig + bgrids * (n * 9 + 7 )] = + s [ig + GRID_BLKSIZE * 5 ];
286
+ gout [ig + bgrids * (n * 9 + 8 )] = + s [ig + GRID_BLKSIZE * 8 ];
287
+ }} else {
288
+ for (ig = 0 ; ig < bgrids ; ig ++ ) {
289
+ gout [ig + bgrids * (n * 9 + 0 )] += + s [ig + GRID_BLKSIZE * 0 ];
290
+ gout [ig + bgrids * (n * 9 + 1 )] += + s [ig + GRID_BLKSIZE * 3 ];
291
+ gout [ig + bgrids * (n * 9 + 2 )] += + s [ig + GRID_BLKSIZE * 6 ];
292
+ gout [ig + bgrids * (n * 9 + 3 )] += + s [ig + GRID_BLKSIZE * 1 ];
293
+ gout [ig + bgrids * (n * 9 + 4 )] += + s [ig + GRID_BLKSIZE * 4 ];
294
+ gout [ig + bgrids * (n * 9 + 5 )] += + s [ig + GRID_BLKSIZE * 7 ];
295
+ gout [ig + bgrids * (n * 9 + 6 )] += + s [ig + GRID_BLKSIZE * 2 ];
296
+ gout [ig + bgrids * (n * 9 + 7 )] += + s [ig + GRID_BLKSIZE * 5 ];
297
+ gout [ig + bgrids * (n * 9 + 8 )] += + s [ig + GRID_BLKSIZE * 8 ];
298
+ }}}}
299
+ void int1e_grids_ipip_optimizer (CINTOpt * * opt , FINT * atm , FINT natm , FINT * bas , FINT nbas , double * env ) {
300
+ FINT ng [] = {2 , 0 , 0 , 0 , 2 , 1 , 0 , 9 };
301
+ CINTall_1e_grids_optimizer (opt , ng , atm , natm , bas , nbas , env );
302
+ }
303
+ CACHE_SIZE_T int1e_grids_ipip_cart (double * out , FINT * dims , FINT * shls ,
304
+ FINT * atm , FINT natm , FINT * bas , FINT nbas , double * env , CINTOpt * opt , double * cache ) {
305
+ FINT ng [] = {2 , 0 , 0 , 0 , 2 , 1 , 0 , 9 };
306
+ CINTEnvVars envs ;
307
+ CINTinit_int1e_grids_EnvVars (& envs , ng , shls , atm , natm , bas , nbas , env );
308
+ envs .f_gout = & CINTgout1e_int1e_grids_ipip ;
309
+ return CINT1e_grids_drv (out , dims , & envs , cache , & c2s_cart_1e_grids );
310
+ } // int1e_grids_ipip_cart
311
+ CACHE_SIZE_T int1e_grids_ipip_sph (double * out , FINT * dims , FINT * shls ,
312
+ FINT * atm , FINT natm , FINT * bas , FINT nbas , double * env , CINTOpt * opt , double * cache ) {
313
+ FINT ng [] = {2 , 0 , 0 , 0 , 2 , 1 , 0 , 9 };
314
+ CINTEnvVars envs ;
315
+ CINTinit_int1e_grids_EnvVars (& envs , ng , shls , atm , natm , bas , nbas , env );
316
+ envs .f_gout = & CINTgout1e_int1e_grids_ipip ;
317
+ return CINT1e_grids_drv (out , dims , & envs , cache , & c2s_sph_1e_grids );
318
+ } // int1e_grids_ipip_sph
319
+ CACHE_SIZE_T int1e_grids_ipip_spinor (double complex * out , FINT * dims , FINT * shls ,
320
+ FINT * atm , FINT natm , FINT * bas , FINT nbas , double * env , CINTOpt * opt , double * cache ) {
321
+ FINT ng [] = {2 , 0 , 0 , 0 , 2 , 1 , 0 , 9 };
322
+ CINTEnvVars envs ;
323
+ CINTinit_int1e_grids_EnvVars (& envs , ng , shls , atm , natm , bas , nbas , env );
324
+ envs .f_gout = & CINTgout1e_int1e_grids_ipip ;
325
+ return CINT1e_grids_spinor_drv (out , dims , & envs , cache , & c2s_sf_1e_grids );
326
+ } // int1e_grids_ipip_spinor
327
+ ALL_CINT1E (int1e_grids_ipip )
328
+ ALL_CINT1E_FORTRAN_ (int1e_grids_ipip )
0 commit comments