/* <k i|R12 |SIGMA DOT P j l> : i,j \in electron 1; k,l \in electron 2 * = (i SIGMA DOT P j|R12 |k l) */ void CINTgout2e_int2e_vsp1(double *gout, double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) { FINT nf = envs->nf; FINT nrys_roots = envs->nrys_roots; FINT ix, iy, iz, i, n; double *g0 = g; double *g1 = g0 + envs->g_size * 3; G2E_D_J(g1, g0, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l); double s[3]; for (n = 0; n < nf; n++) { ix = idx[0+n*3]; iy = idx[1+n*3]; iz = idx[2+n*3]; switch (nrys_roots) { case 1: s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]; s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]; s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]; break; case 2: s[0] = + g1[ix+0]*g0[iy+0]*g0[iz+0]+ g1[ix+1]*g0[iy+1]*g0[iz+1]; s[1] = + g0[ix+0]*g1[iy+0]*g0[iz+0]+ g0[ix+1]*g1[iy+1]*g0[iz+1]; s[2] = + g0[ix+0]*g0[iy+0]*g1[iz+0]+ g0[ix+1]*g0[iy+1]*g1[iz+1]; break; case 3: 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]; 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]; 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]; break; case 4: 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]; 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]; 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]; break; default: for (i = 0; i < 3; i++) { s[i] = 0; } for (i = 0; i < nrys_roots; i++) { s[0] += g1[ix+i] * g0[iy+i] * g0[iz+i]; s[1] += g0[ix+i] * g1[iy+i] * g0[iz+i]; s[2] += g0[ix+i] * g0[iy+i] * g1[iz+i]; } break;} if (gout_empty) { gout[n*4+0] = - s[0]; gout[n*4+1] = - s[1]; gout[n*4+2] = - s[2]; gout[n*4+3] = 0; } else { gout[n*4+0] += - s[0]; gout[n*4+1] += - s[1]; gout[n*4+2] += - s[2]; gout[n*4+3] += 0; }}}
/* <SIGMA DOT P k i|R12 |SIGMA DOT P j SIGMA DOT P l> : i,j \in electron 1; k,l \in electron 2 * = (i SIGMA DOT P j|R12 |SIGMA DOT P k SIGMA DOT P l) */ void CINTgout2e_int2e_vsp1spsp2(double *gout, double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) { FINT nf = envs->nf; FINT nrys_roots = envs->nrys_roots; FINT ix, iy, iz, i, n; double *g0 = g; double *g1 = g0 + envs->g_size * 3; double *g2 = g1 + envs->g_size * 3; double *g3 = g2 + envs->g_size * 3; double *g4 = g3 + envs->g_size * 3; double *g5 = g4 + envs->g_size * 3; double *g6 = g5 + envs->g_size * 3; double *g7 = g6 + envs->g_size * 3; G2E_D_L(g1, g0, envs->i_l+0, envs->j_l+1, envs->k_l+1, envs->l_l+0); G2E_D_K(g2, g0, envs->i_l+0, envs->j_l+1, envs->k_l+0, envs->l_l); G2E_D_K(g3, g1, envs->i_l+0, envs->j_l+1, envs->k_l+0, envs->l_l); G2E_D_J(g4, g0, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l); G2E_D_J(g5, g1, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l); G2E_D_J(g6, g2, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l); G2E_D_J(g7, g3, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l); double s[27]; for (n = 0; n < nf; n++) { ix = idx[0+n*3]; iy = idx[1+n*3]; iz = idx[2+n*3]; for (i = 0; i < 27; i++) { s[i] = 0; } for (i = 0; i < nrys_roots; i++) { s[0] += g7[ix+i] * g0[iy+i] * g0[iz+i]; s[1] += g6[ix+i] * g1[iy+i] * g0[iz+i]; s[2] += g6[ix+i] * g0[iy+i] * g1[iz+i]; s[3] += g5[ix+i] * g2[iy+i] * g0[iz+i]; s[4] += g4[ix+i] * g3[iy+i] * g0[iz+i]; s[5] += g4[ix+i] * g2[iy+i] * g1[iz+i]; s[6] += g5[ix+i] * g0[iy+i] * g2[iz+i]; s[7] += g4[ix+i] * g1[iy+i] * g2[iz+i]; s[8] += g4[ix+i] * g0[iy+i] * g3[iz+i]; s[9] += g3[ix+i] * g4[iy+i] * g0[iz+i]; s[10] += g2[ix+i] * g5[iy+i] * g0[iz+i]; s[11] += g2[ix+i] * g4[iy+i] * g1[iz+i]; s[12] += g1[ix+i] * g6[iy+i] * g0[iz+i]; s[13] += g0[ix+i] * g7[iy+i] * g0[iz+i]; s[14] += g0[ix+i] * g6[iy+i] * g1[iz+i]; s[15] += g1[ix+i] * g4[iy+i] * g2[iz+i]; s[16] += g0[ix+i] * g5[iy+i] * g2[iz+i]; s[17] += g0[ix+i] * g4[iy+i] * g3[iz+i]; s[18] += g3[ix+i] * g0[iy+i] * g4[iz+i]; s[19] += g2[ix+i] * g1[iy+i] * g4[iz+i]; s[20] += g2[ix+i] * g0[iy+i] * g5[iz+i]; s[21] += g1[ix+i] * g2[iy+i] * g4[iz+i]; s[22] += g0[ix+i] * g3[iy+i] * g4[iz+i]; s[23] += g0[ix+i] * g2[iy+i] * g5[iz+i]; s[24] += g1[ix+i] * g0[iy+i] * g6[iz+i]; s[25] += g0[ix+i] * g1[iy+i] * g6[iz+i]; s[26] += g0[ix+i] * g0[iy+i] * g7[iz+i]; } if (gout_empty) { gout[n*16+0] = - s[5] + s[7]; gout[n*16+1] = - s[14] + s[16]; gout[n*16+2] = - s[23] + s[25]; gout[n*16+3] = 0; gout[n*16+4] = - s[6] + s[2]; gout[n*16+5] = - s[15] + s[11]; gout[n*16+6] = - s[24] + s[20]; gout[n*16+7] = 0; gout[n*16+8] = - s[1] + s[3]; gout[n*16+9] = - s[10] + s[12]; gout[n*16+10] = - s[19] + s[21]; gout[n*16+11] = 0; gout[n*16+12] = - s[0] - s[4] - s[8]; gout[n*16+13] = - s[9] - s[13] - s[17]; gout[n*16+14] = - s[18] - s[22] - s[26]; gout[n*16+15] = 0; } else { gout[n*16+0] += - s[5] + s[7]; gout[n*16+1] += - s[14] + s[16]; gout[n*16+2] += - s[23] + s[25]; gout[n*16+3] += 0; gout[n*16+4] += - s[6] + s[2]; gout[n*16+5] += - s[15] + s[11]; gout[n*16+6] += - s[24] + s[20]; gout[n*16+7] += 0; gout[n*16+8] += - s[1] + s[3]; gout[n*16+9] += - s[10] + s[12]; gout[n*16+10] += - s[19] + s[21]; gout[n*16+11] += 0; gout[n*16+12] += - s[0] - s[4] - s[8]; gout[n*16+13] += - s[9] - s[13] - s[17]; gout[n*16+14] += - s[18] - s[22] - s[26]; gout[n*16+15] += 0; }}}
/* <k i|R12 |SIGMA DOT P j SIGMA DOT P l> : i,j \in electron 1; k,l \in electron 2 * = (i SIGMA DOT P j|R12 |k SIGMA DOT P l) */ void CINTgout2e_int2e_vsp1vsp2(double *gout, double *g, FINT *idx, CINTEnvVars *envs, FINT gout_empty) { FINT nf = envs->nf; FINT nrys_roots = envs->nrys_roots; FINT ix, iy, iz, i, n; double *g0 = g; double *g1 = g0 + envs->g_size * 3; double *g2 = g1 + envs->g_size * 3; double *g3 = g2 + envs->g_size * 3; G2E_D_L(g1, g0, envs->i_l+0, envs->j_l+1, envs->k_l+0, envs->l_l+0); G2E_D_J(g2, g0, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l); G2E_D_J(g3, g1, envs->i_l+0, envs->j_l+0, envs->k_l, envs->l_l); double s[9]; for (n = 0; n < nf; n++) { ix = idx[0+n*3]; iy = idx[1+n*3]; iz = idx[2+n*3]; for (i = 0; i < 9; i++) { s[i] = 0; } for (i = 0; i < nrys_roots; i++) { s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i]; s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i]; s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i]; s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i]; s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i]; s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i]; s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i]; s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i]; s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i]; } if (gout_empty) { gout[n*16+0] = + s[0]; gout[n*16+1] = + s[3]; gout[n*16+2] = + s[6]; gout[n*16+3] = 0; gout[n*16+4] = + s[1]; gout[n*16+5] = + s[4]; gout[n*16+6] = + s[7]; gout[n*16+7] = 0; gout[n*16+8] = + s[2]; gout[n*16+9] = + s[5]; gout[n*16+10] = + s[8]; gout[n*16+11] = 0; gout[n*16+12] = 0; gout[n*16+13] = 0; gout[n*16+14] = 0; gout[n*16+15] = 0; } else { gout[n*16+0] += + s[0]; gout[n*16+1] += + s[3]; gout[n*16+2] += + s[6]; gout[n*16+3] += 0; gout[n*16+4] += + s[1]; gout[n*16+5] += + s[4]; gout[n*16+6] += + s[7]; gout[n*16+7] += 0; gout[n*16+8] += + s[2]; gout[n*16+9] += + s[5]; gout[n*16+10] += + s[8]; gout[n*16+11] += 0; gout[n*16+12] += 0; gout[n*16+13] += 0; gout[n*16+14] += 0; gout[n*16+15] += 0; }}}
/* <k NABLA i|R12 |NABLA j l> : i,j \in electron 1; k,l \in electron 2 * = (NABLA i NABLA j|R12 |k l) */ static void CINTgout2e_cint2e_ipvip1_sph(double *g, double *gout, const FINT *idx, const CINTEnvVars *envs, FINT gout_empty) { const double *env = envs->env; const FINT nf = envs->nf; const FINT i_l = envs->i_l; const FINT j_l = envs->j_l; const FINT k_l = envs->k_l; const FINT l_l = envs->l_l; const double *ri = envs->ri; const double *rj = envs->rj; const double *rk = envs->rk; const double *rl = envs->rl; FINT ix, iy, iz, i, n; double *g0 = g; double *g1 = g0 + envs->g_size * 3; double *g2 = g1 + envs->g_size * 3; double *g3 = g2 + envs->g_size * 3; double *g4 = g3 + envs->g_size * 3; double s[9]; G2E_D_J(g1, g0, i_l+1, j_l+0, k_l, l_l); G2E_D_I(g2, g0, i_l+0, j_l, k_l, l_l); G2E_D_I(g3, g1, i_l+0, j_l, k_l, l_l); for (n = 0; n < nf; n++, idx+=3) { ix = idx[0]; iy = idx[1]; iz = idx[2]; CINTdset0(9, s); for (i = 0; i < envs->nrys_roots; i++) { s[0] += g3[ix+i] * g0[iy+i] * g0[iz+i]; s[1] += g2[ix+i] * g1[iy+i] * g0[iz+i]; s[2] += g2[ix+i] * g0[iy+i] * g1[iz+i]; s[3] += g1[ix+i] * g2[iy+i] * g0[iz+i]; s[4] += g0[ix+i] * g3[iy+i] * g0[iz+i]; s[5] += g0[ix+i] * g2[iy+i] * g1[iz+i]; s[6] += g1[ix+i] * g0[iy+i] * g2[iz+i]; s[7] += g0[ix+i] * g1[iy+i] * g2[iz+i]; s[8] += g0[ix+i] * g0[iy+i] * g3[iz+i]; } if (gout_empty) { gout[0] = + s[0]; gout[1] = + s[1]; gout[2] = + s[2]; gout[3] = + s[3]; gout[4] = + s[4]; gout[5] = + s[5]; gout[6] = + s[6]; gout[7] = + s[7]; gout[8] = + s[8]; gout += 9; } else { gout[0] += + s[0]; gout[1] += + s[1]; gout[2] += + s[2]; gout[3] += + s[3]; gout[4] += + s[4]; gout[5] += + s[5]; gout[6] += + s[6]; gout[7] += + s[7]; gout[8] += + s[8]; gout += 9; }}}