46 double *momentum_x_matrix,
47 double *momentum_y_matrix,
48 double *momentum_z_matrix) {
52 double *buf_x = calloc(size_A * size_B,
sizeof(
double));
53 double *buf_y = calloc(size_A * size_B,
sizeof(
double));
54 double *buf_z = calloc(size_A * size_B,
sizeof(
double));
56 memset(momentum_x_matrix, 0, size_A * size_B *
sizeof(
double));
57 memset(momentum_y_matrix, 0, size_A * size_B *
sizeof(
double));
58 memset(momentum_z_matrix, 0, size_A * size_B *
sizeof(
double));
63 double alpha_i = shell_A->
alpha[
i];
64 double alpha_j = shell_B->
alpha[j];
65 double coef_A_i = shell_A->
coeffs[
i];
66 double coef_B_j = shell_B->
coeffs[j];
69 alpha_j, buf_x, buf_y, buf_z);
87 double alpha_B,
double *momentum_x_matrix,
double *momentum_y_matrix,
88 double *momentum_z_matrix) {
96 double p = alpha_A + alpha_B;
97 double mu = alpha_A * alpha_B / (alpha_A + alpha_B);
98 double *A = shell_A->
origin;
99 double *B = shell_B->
origin;
104 for (
int coord = 0; coord < 3; coord++) {
105 double P = (alpha_A * A[coord] + alpha_B * B[coord]) / p;
107 double X_AB = A[coord] - B[coord];
108 double X_PA = P - A[coord];
109 double X_PB = P - B[coord];
110 double pfac = 1.0 / (2.0 * p);
112 for (
int i = 0;
i <= L_A + 1;
i++) {
113 for (
int j = 0; j <= L_B + 1; j++) {
117 S[coord][0][0] = sqrt(
M_PI / p) * exp(-mu * X_AB * X_AB);
122 S_ij += X_PB * S[coord][
i][j - 1];
124 S_ij += (j - 1) * pfac * S[coord][
i][j - 2];
127 S_ij += X_PA * S[coord][
i - 1][j];
129 S_ij += (
i - 1) * pfac * S[coord][
i - 2][j];
132 S_ij += j * pfac * S[coord][
i - 1][j - 1];
136 S[coord][
i][j] = S_ij;
145 for (
int coord = 0; coord < 3; coord++) {
146 for (
int i = 0;
i <= L_A;
i++) {
147 for (
int j = 0; j <= L_B; j++) {
150 D1_ij += 2.0 * alpha_A * S[coord][
i + 1][j];
152 D1_ij -=
i * S[coord][
i - 1][j];
155 D1[coord][
i][j] = D1_ij;
161 for (
int m = 0; m < size_A; m++) {
162 for (
int n = 0; n < size_B; n++) {
170 momentum_x_matrix[m * size_B + n] =
171 -N_A * N_B * D1[0][n_A][n_B] * S[1][l_A][l_B] * S[2][m_A][m_B];
172 momentum_y_matrix[m * size_B + n] =
173 -N_A * N_B * S[0][n_A][n_B] * D1[1][l_A][l_B] * S[2][m_A][m_B];
174 momentum_z_matrix[m * size_B + n] =
175 -N_A * N_B * S[0][n_A][n_B] * S[1][l_A][l_B] * D1[2][m_A][m_B];
static void momentum_integrals_shell_pair_obara_saika(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double alpha_A, double alpha_B, double *momentum_x_matrix, double *momentum_y_matrix, double *momentum_z_matrix)
void libgrpp_momentum_integrals(libgrpp_shell_t *shell_A, libgrpp_shell_t *shell_B, double *momentum_x_matrix, double *momentum_y_matrix, double *momentum_z_matrix)