47 memset(matrix, 0, size_A * size_B *
sizeof(
double));
55 double *A = shell_A->
origin;
56 double *B = shell_B->
origin;
57 double *C = rpp_origin;
59 double CA_x = C[0] - A[0];
60 double CA_y = C[1] - A[1];
61 double CA_z = C[2] - A[2];
62 double CB_x = C[0] - B[0];
63 double CB_y = C[1] - B[1];
64 double CB_z = C[2] - B[2];
65 double CA_2 = CA_x * CA_x + CA_y * CA_y + CA_z * CA_z;
66 double CB_2 = CB_x * CB_x + CB_y * CB_y + CB_z * CB_z;
68 double alpha_A = shell_A->
alpha[0];
69 double alpha_B = shell_B->
alpha[0];
70 double kA_x = -2.0 * (alpha_A * CA_x);
71 double kA_y = -2.0 * (alpha_A * CA_y);
72 double kA_z = -2.0 * (alpha_A * CA_z);
73 double kB_x = -2.0 * (alpha_B * CB_x);
74 double kB_y = -2.0 * (alpha_B * CB_y);
75 double kB_z = -2.0 * (alpha_B * CB_z);
85 int lambda1_max = L + L_A;
86 int lambda2_max = L + L_B;
87 int N_max = L_A + L_B;
92 int lmax =
int_max3(lambda1_max, lambda2_max, L);
99 lambda1_max, lambda2_max, N_max, CA_2, CB_2, potential, shell_A, shell_B);
104 double rsh_values_kA[3 *
LMAX][6 *
LMAX];
105 double rsh_values_kB[3 *
LMAX][6 *
LMAX];
107 for (
int lambda = 0; lambda <= lmax; lambda++) {
109 rsh_values_kA[lambda]);
111 rsh_values_kB[lambda]);
118 for (
int icart = 0; icart < size_A; icart++) {
119 for (
int jcart = 0; jcart < size_B; jcart++) {
121 double gamma_AB = 0.0;
123 int n_A = shell_A->
cart_list[3 * icart + 0];
124 int l_A = shell_A->
cart_list[3 * icart + 1];
125 int m_A = shell_A->
cart_list[3 * icart + 2];
126 int n_B = shell_B->
cart_list[3 * jcart + 0];
127 int l_B = shell_B->
cart_list[3 * jcart + 1];
128 int m_B = shell_B->
cart_list[3 * jcart + 2];
130 for (
int a = 0; a <= n_A; a++) {
133 double pow_CA_x = pow(CA_x, n_A - a);
135 for (
int b = 0; b <= l_A; b++) {
138 double pow_CA_y = pow(CA_y, l_A - b);
140 for (
int c = 0; c <= m_A; c++) {
143 double pow_CA_z = pow(CA_z, m_A - c);
145 for (
int d = 0; d <= n_B; d++) {
148 double pow_CB_x = pow(CB_x, n_B - d);
150 for (
int e = 0; e <= l_B; e++) {
153 double pow_CB_y = pow(CB_y, l_B - e);
155 for (
int f = 0; f <= m_B; f++) {
158 double pow_CB_z = pow(CB_z, m_B - f);
160 double factor = C_nA_a * C_lA_b * C_mA_c * C_nB_d * C_lB_e *
161 C_mB_f * pow_CA_x * pow_CA_y * pow_CA_z *
162 pow_CB_x * pow_CB_y * pow_CB_z;
164 if (fabs(factor) < 1e-13) {
168 int N = a + b + c + d + e + f;
169 double sum_omega_Q = 0.0;
171 int lambda1_lower =
int_max2(L - a - b - c, 0);
172 int lambda2_lower =
int_max2(L - d - e - f, 0);
173 int lambda1_upper = L + a + b + c;
174 int lambda2_upper = L + d + e + f;
176 for (
int lambda_1 = lambda1_lower; lambda_1 <= lambda1_upper;
178 if ((L + a + b + c - lambda_1) % 2 != 0) {
182 for (
int lambda_2 = lambda2_lower;
183 lambda_2 <= lambda2_upper; lambda_2++) {
184 if ((L + d + e + f - lambda_2) % 2 != 0) {
189 radial_table, lambda_1, lambda_2, N);
190 if (fabs(QN) < 1e-16) {
195 L, lambda_1, a, b, c, lambda_2, d, e, f,
196 rsh_values_kA[lambda_1], rsh_values_kB[lambda_2]);
198 sum_omega_Q += QN * sum_angular;
202 gamma_AB += factor * sum_omega_Q;
212 matrix[icart * size_B + jcart] = gamma_AB;
224 int lambda_2,
int d,
int e,
int f,
225 double *rsh_values_kA,
double *rsh_values_kB) {
226 double sum_angular = 0.0;
231 for (
int m = -L; m <= L; m++) {
234 if (fabs(omega_1) < 1e-16) {
241 sum_angular += omega_1 * omega_2;
radial_type2_table_t * libgrpp_tabulate_radial_type2_integrals(int lambda1_max, int lambda2_max, int n_max, double CA_2, double CB_2, libgrpp_potential_t *potential, libgrpp_shell_t *bra, libgrpp_shell_t *ket)
static double type2_angular_sum(int L, int lambda_1, int a, int b, int c, int lambda_2, int d, int e, int f, double *rsh_values_kA, double *rsh_values_kB)