FINT int2e_vsp1spsp2_cart(double *out, FINT *dims, FINT *shls, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) { FINT ng[] = {0, 1, 1, 1, 3, 4, 4, 1}; CINTEnvVars envs; CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env); envs.f_gout = &CINTgout2e_int2e_vsp1spsp2; return CINT2e_cart_drv(out, dims, &envs, opt, cache); } // int2e_vsp1spsp2_cart
FINT int2e_spv1spsp2_spinor(double complex *out, FINT *dims, FINT *shls, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) { FINT ng[] = {1, 0, 1, 1, 3, 4, 4, 1}; CINTEnvVars envs; CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env); envs.f_gout = &CINTgout2e_int2e_spv1spsp2; return CINT2e_spinor_drv(out, dims, &envs, opt, cache, &c2s_si_2e1, &c2s_si_2e2); } // int2e_spv1spsp2_spinor
FINT int2e_spv1vsp2_sph(double *out, FINT *dims, FINT *shls, FINT *atm, FINT natm, FINT *bas, FINT nbas, double *env, CINTOpt *opt, double *cache) { FINT ng[] = {1, 0, 0, 1, 2, 4, 4, 1}; CINTEnvVars envs; CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env); envs.f_gout = &CINTgout2e_int2e_spv1vsp2; return CINT2e_spheric_drv(out, dims, &envs, opt, cache); } // int2e_spv1vsp2_sph
FINT cint2e_ip1ip2_sph(double *opijkl, const FINT *shls, const FINT *atm, const FINT natm, const FINT *bas, const FINT nbas, const double *env, CINTOpt *opt) { FINT ng[] = {1, 0, 1, 0, 2, 1, 1, 9}; CINTEnvVars envs; CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, bas, nbas, env); envs.f_gout = &CINTgout2e_cint2e_ip1ip2_sph; envs.common_factor *= 1; return CINT2e_spheric_drv(opijkl, &envs, opt); }
/* len(ng) = 8. The first 4 items are the increment adding to envs.li_ceil * ... envs.ll_ceil for shell i, j, k, l */ void CINTOpt_set_index_xyz(CINTOpt *opt, FINT *ng, const FINT *atm, const FINT natm, const FINT *bas, const FINT nbas, const double *env) { FINT i, j, k, l, ptr; FINT n = ANG_MAX*ANG_MAX*ANG_MAX*ANG_MAX; opt->index_xyz_array = (FINT **)malloc(sizeof(FINT *) * n); for (i = 0; i < n; i++) { opt->index_xyz_array[i] = NULL; } FINT max_l = 0; for (i = 0; i < nbas; i++) { max_l = MAX(max_l, bas(ANG_OF,i)); } FINT fakenbas = max_l+1; FINT fakebas[BAS_SLOTS*fakenbas]; memset(fakebas, 0, sizeof(FINT)*BAS_SLOTS*fakenbas); // fakebas only initializes ANG_OF, since the others does not // affect index_xyz for (i = 0; i <= max_l; i++) { fakebas[BAS_SLOTS*i+ANG_OF] = i; } CINTEnvVars envs; FINT shls[4]; for (i = 0; i <= max_l; i++) { for (j = 0; j <= max_l; j++) { for (k = 0; k <= max_l; k++) { for (l = 0; l <= max_l; l++) { shls[0] = i; shls[1] = j; shls[2] = k; shls[3] = l; CINTinit_int2e_EnvVars(&envs, ng, shls, atm, natm, fakebas, fakenbas, env); ptr = i*ANG_MAX*ANG_MAX*ANG_MAX + j*ANG_MAX*ANG_MAX + k*ANG_MAX + l; opt->index_xyz_array[ptr] = (FINT *)malloc(sizeof(FINT)*envs.nf*3); CINTg2e_index_xyz(opt->index_xyz_array[ptr], &envs); } } } } }