125 int j = lx + ly - abs(m);
131 if (!((m > 0 && (abs(m) - lx) % 2 == 0) || (m == 0 && lx % 2 == 0) ||
132 (m < 0 && (abs(m) - lx) % 2 != 0))) {
141 double u_lm_lx_ly_lz = 0.0;
142 for (
int i = j;
i <= (l - abs(m)) / 2;
i++) {
144 if (2 * l - 2 *
i < 0) {
148 if (l - abs(m) - 2 *
i < 0) {
158 for (
int k = 0; k <= j; k++) {
160 pow(-1, (abs(m) - lx + 2 * k) / 2);
163 u_lm_lx_ly_lz += factor_1 * sum;
166 u_lm_lx_ly_lz *= prefactor;
167 if (m == 0 && (lx % 2 == 0)) {
171 return u_lm_lx_ly_lz;
183 double kx_powers[200];
184 double ky_powers[200];
185 double kz_powers[200];
189 double length_k = sqrt(k[0] * k[0] + k[1] * k[1] + k[2] * k[2]);
192 unitary_kx = k[0] / length_k;
193 unitary_ky = k[1] / length_k;
194 unitary_kz = k[2] / length_k;
205 for (
int i = 1;
i <= l;
i++) {
206 kx_powers[
i] = kx_powers[
i - 1] * unitary_kx;
207 ky_powers[
i] = ky_powers[
i - 1] * unitary_ky;
208 kz_powers[
i] = kz_powers[
i - 1] * unitary_kz;
214 for (
int icomb = 0; icomb < ncart; icomb++) {
218 double y_lm_rst = rsh_coef_l->
coeffs[(m + l) * ncart + icomb];
220 value += y_lm_rst * kx_powers[r] * ky_powers[s] * kz_powers[t];
236 double kx_powers[200];
237 double ky_powers[200];
238 double kz_powers[200];
242 double length_k = sqrt(k[0] * k[0] + k[1] * k[1] + k[2] * k[2]);
245 double inv_length = 1.0 / length_k;
246 unitary_kx = k[0] * inv_length;
247 unitary_ky = k[1] * inv_length;
248 unitary_kz = k[2] * inv_length;
259 for (
int i = 1;
i <= l;
i++) {
260 kx_powers[
i] = kx_powers[
i - 1] * unitary_kx;
261 ky_powers[
i] = ky_powers[
i - 1] * unitary_ky;
262 kz_powers[
i] = kz_powers[
i - 1] * unitary_kz;
265 memset(rsh_array, 0, (2 * l + 1) *
sizeof(
double));
270 for (
int icomb = 0; icomb < ncart; icomb++) {
271 int r = rst_array[3 * icomb];
272 int s = rst_array[3 * icomb + 1];
273 int t = rst_array[3 * icomb + 2];
275 double k_xyz = kx_powers[r] * ky_powers[s] * kz_powers[t];
277 for (
int m = -l; m <= l; m++) {
278 double y_lm_rst = rsh_coef_l->
coeffs[(m + l) * ncart + icomb];
279 rsh_array[m + l] += y_lm_rst * k_xyz;