85 libgrpp_shell_t **oc_shells,
double *arep,
double *esop_x,
double *esop_y,
92 memset(arep, 0, size_A * size_B *
sizeof(
double));
93 memset(esop_x, 0, size_A * size_B *
sizeof(
double));
94 memset(esop_y, 0, size_A * size_B *
sizeof(
double));
95 memset(esop_z, 0, size_A * size_B *
sizeof(
double));
98 for (
int ioc = 0; ioc < num_oc_shells; ioc++) {
99 oc_shells[ioc]->
origin[0] = rpp_origin[0];
100 oc_shells[ioc]->
origin[1] = rpp_origin[1];
101 oc_shells[ioc]->
origin[2] = rpp_origin[2];
105 for (
int ioc = 0; ioc < num_oc_shells; ioc++) {
110 shell_A, shell_B, rpp_origin, pot, nlj, arep, esop_x, esop_y, esop_z);
114 for (
int ioc = 0; ioc < num_oc_shells; ioc++) {
115 for (
int joc = 0; joc < num_oc_shells; joc++) {
123 shell_A, shell_B, rpp_origin, pot_1, nlj_1, pot_2, nlj_2, arep,
124 esop_x, esop_y, esop_z);
136 double *arep_matrix,
double *so_x_matrix,
double *so_y_matrix,
137 double *so_z_matrix) {
139 double J = oc_potential->
J / 2.0;
147 oc_shell->
origin[0] = C[0];
148 oc_shell->
origin[1] = C[1];
149 oc_shell->
origin[2] = C[2];
156 double *S_lm_coef = (
double *)calloc((2 * L + 1) * size_nlj,
sizeof(double));
157 for (
int m = -L; m <= +L; m++) {
158 for (
int icart = 0; icart < size_nlj; icart++) {
159 int r = oc_shell->
cart_list[3 * icart + 0];
160 int s = oc_shell->
cart_list[3 * icart + 1];
161 int t = oc_shell->
cart_list[3 * icart + 2];
164 S_lm_coef[size_nlj * (m + L) + icart] = u;
176 double *S_nljm_b_cart =
184 S_a_nljm, S_lm_coef);
186 S_nljm_b, S_lm_coef);
198 double *U_nljm_b_cart =
208 U_a_nljm, S_lm_coef);
210 U_nljm_b, S_lm_coef);
219 (J < L) ? (L / (2.0 * L + 1)) : ((L + 1) / (2.0 * L + 1));
223 libgrpp_daxpy(size_A * size_B, arep_factor, buf, arep_matrix);
230 double **L_matrices =
alloc_zeros_2d(3, (2 * L + 1) * (2 * L + 1));
232 L_matrices[1], L_matrices[2]);
237 for (
int icoord = 0; icoord < 3; icoord++) {
239 memset(buf, 0, (2 * L + 1) * size_B *
sizeof(
double));
246 memset(buf, 0, (2 * L + 1) * size_A *
sizeof(
double));
248 L_matrices[icoord], buf);
255 double esop_factor = (J < L) ? (-2.0 / (2 * L + 1)) : (+2.0 / (2 * L + 1));
256 libgrpp_daxpy(size_A * size_B, esop_factor, so_buf[0], so_x_matrix);
257 libgrpp_daxpy(size_A * size_B, esop_factor, so_buf[1], so_y_matrix);
258 libgrpp_daxpy(size_A * size_B, esop_factor, so_buf[2], so_z_matrix);
280 double *arep_matrix,
double *so_x_matrix,
double *so_y_matrix,
281 double *so_z_matrix) {
285 if (oc_potential_1->
L != oc_potential_2->
L) {
288 if (oc_potential_1->
J != oc_potential_2->
J) {
295 oc_shell_1->
origin[0] = C[0];
296 oc_shell_1->
origin[1] = C[1];
297 oc_shell_1->
origin[2] = C[2];
298 oc_shell_2->
origin[0] = C[0];
299 oc_shell_2->
origin[1] = C[1];
300 oc_shell_2->
origin[2] = C[2];
310 int L = oc_potential_1->
L;
311 double J = oc_potential_1->
J / 2.0;
315 oc_potential_2, oc_shell_2);
322 double *S_lm_coef = (
double *)calloc((2 * L + 1) * size_nlj,
sizeof(double));
323 for (
int m = -L; m <= +L; m++) {
324 for (
int icart = 0; icart < size_nlj; icart++) {
325 int r = oc_shell_1->
cart_list[3 * icart + 0];
326 int s = oc_shell_1->
cart_list[3 * icart + 1];
327 int t = oc_shell_1->
cart_list[3 * icart + 2];
330 S_lm_coef[size_nlj * (m + L) + icart] = u;
342 double *S_nljm2_b_cart =
351 S_a_nljm1, S_lm_coef);
353 S_nljm2_b, S_lm_coef);
354 free(S_nljm2_b_cart);
355 free(S_a_nljm1_cart);
362 (J < L) ? (L / (2.0 * L + 1)) : ((L + 1) / (2.0 * L + 1));
366 libgrpp_daxpy(size_A * size_B, (-1.0) * delta * arep_factor, buf,
374 double **L_matrices =
alloc_zeros_2d(3, (2 * L + 1) * (2 * L + 1));
376 L_matrices[1], L_matrices[2]);
380 for (
int icoord = 0; icoord < 3; icoord++) {
381 memset(buf, 0, (2 * L + 1) * size_B *
sizeof(
double));
389 double esop_factor = (J < L) ? (-2.0 / (2 * L + 1)) : (+2.0 / (2 * L + 1));
390 libgrpp_daxpy(size_A * size_B, (-1.0) * delta * esop_factor, so_buf[0],
392 libgrpp_daxpy(size_A * size_B, (-1.0) * delta * esop_factor, so_buf[1],
394 libgrpp_daxpy(size_A * size_B, (-1.0) * delta * esop_factor, so_buf[2],
489 static const double factors[] = {
490 2.5264751109842587, 2.9173221708553032, 2.6093322745198853,
491 1.9724697960897537, 1.3149798640598356, 7.9296269381073192e-1,
492 4.3985656185609934e-1, 2.2714095183849672e-1, 1.1017954545099481e-1,
493 5.0553842554329785e-2, 2.2063505731056757e-2, 9.2011179391124215e-3,
494 3.6804471756449694e-3, 1.4166047783978804e-3, 5.2611380677564405e-4,
495 1.8898565833279173e-4, 6.5796360823633550e-5, 2.2243229718298637e-5,
496 7.3135288801774484e-6, 2.3422037547660024e-6};
498 return factors[L] * pow(alpha, 0.75 + L / 2.0);
void libgrpp_outercore_potential_integrals_part_1(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *C, libgrpp_potential_t *oc_potential, libgrpp_shell_t *oc_shell, double *arep_matrix, double *so_x_matrix, double *so_y_matrix, double *so_z_matrix)
void libgrpp_outercore_potential_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *rpp_origin, int num_oc_shells, libgrpp_potential_t **oc_potentials, libgrpp_shell_t **oc_shells, double *arep, double *esop_x, double *esop_y, double *esop_z)
void libgrpp_outercore_potential_integrals_part_2(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *C, libgrpp_potential_t *oc_potential_1, libgrpp_shell_t *oc_shell_1, libgrpp_potential_t *oc_potential_2, libgrpp_shell_t *oc_shell_2, double *arep_matrix, double *so_x_matrix, double *so_y_matrix, double *so_z_matrix)