21 #ifndef QMCPLUSPLUS_SOA_CARTESIAN_TENSOR_H 22 #define QMCPLUSPLUS_SOA_CARTESIAN_TENSOR_H 89 for (
size_t i = 0, nl =
cXYZ.
size(); i < nl; i++)
97 for (
size_t i = 0, nl =
cXYZ.
size(); i < nl; i++)
112 const size_t nElec = xyz.
size(0);
113 const size_t Npbc = xyz.
size(1);
114 assert(xyz.
size(2) == 3);
116 assert(XYZ.
size(0) == nElec);
117 assert(XYZ.
size(1) == Npbc);
118 const size_t Nlm = XYZ.
size(2);
120 size_t nR = nElec * Npbc;
122 auto* xyz_ptr = xyz.
data();
123 auto* XYZ_ptr = XYZ.
data();
126 PRAGMA_OFFLOAD(
"omp target teams distribute parallel for \ 127 map(to:norm_factor__ptr[:Nlm]) \ 128 map(to:xyz_ptr[:3*nR], XYZ_ptr[:Nlm*nR])")
129 for (uint32_t ir = 0; ir < nR; ir++)
131 evaluate_bare(xyz_ptr[0 + 3 * ir], xyz_ptr[1 + 3 * ir], xyz_ptr[2 + 3 * ir], XYZ_ptr + (ir * Nlm),
Lmax);
132 for (uint32_t i = 0; i < Nlm; i++)
133 XYZ_ptr[ir * Nlm + i] *= norm_factor__ptr[i];
148 const size_t nElec = xyz.
size(0);
149 const size_t Npbc = xyz.
size(1);
150 assert(xyz.
size(2) == 3);
152 assert(XYZ_vgl.
size(0) == 5);
153 assert(XYZ_vgl.
size(1) == nElec);
154 assert(XYZ_vgl.
size(2) == Npbc);
155 const size_t Nlm = XYZ_vgl.
size(3);
158 size_t nR = nElec * Npbc;
159 size_t offset = Nlm * nR;
161 auto* xyz_ptr = xyz.
data();
162 auto* XYZ_vgl_ptr = XYZ_vgl.
data();
168 PRAGMA_OFFLOAD(
"omp target teams distribute parallel for \ 169 map(to:norm_factor__ptr[:Nlm]) \ 170 map(to: xyz_ptr[:3*nR], XYZ_vgl_ptr[:5*nR*Nlm])")
171 for (uint32_t ir = 0; ir < nR; ir++)
173 constexpr T
czero(0);
174 for (uint32_t i = 0; i < Nlm; i++)
176 XYZ_vgl_ptr[ir * Nlm + offset * 1 + i] =
czero;
177 XYZ_vgl_ptr[ir * Nlm + offset * 2 + i] =
czero;
178 XYZ_vgl_ptr[ir * Nlm + offset * 3 + i] =
czero;
179 XYZ_vgl_ptr[ir * Nlm + offset * 4 + i] =
czero;
181 evaluateVGL_impl(xyz_ptr[0 + 3 * ir], xyz_ptr[1 + 3 * ir], xyz_ptr[2 + 3 * ir], XYZ_vgl_ptr + (ir * Nlm),
182 XYZ_vgl_ptr + (ir * Nlm + offset * 1), XYZ_vgl_ptr + (ir * Nlm + offset * 2),
183 XYZ_vgl_ptr + (ir * Nlm + offset * 3), XYZ_vgl_ptr + (ir * Nlm + offset * 4),
Lmax,
184 norm_factor__ptr, Nlm);
195 inline int index(
int l,
int m)
const {
return (l * (l + 1)) +
m; }
208 inline void getABC(
int n,
int& a,
int& b,
int& c);
215 : Lmax(l_max), norm_factor_ptr_(
std::make_shared<
OffloadVector>()), norm_factor_(*norm_factor_ptr_)
219 throw std::runtime_error(
"CartesianTensor can't handle Lmax > 6.\n");
222 for (
int i = 0; i <=
Lmax; i++)
223 ntot += (i + 1) * (i + 2) / 2;
227 int a = 0, b = 0, c = 0;
229 for (
int l = 0; l <=
Lmax; l++)
231 int n = (l + 1) * (l + 2) / 2;
232 for (
int k = 0; k <
n; k++)
240 double L =
static_cast<T
>(l);
256 constexpr T
czero(0);
258 evaluateVGL_impl(x, y, z, cXYZ.data(0), cXYZ.data(1), cXYZ.data(2), cXYZ.data(3), cXYZ.data(4), Lmax,
259 norm_factor_.data(), norm_factor_.size());
262 PRAGMA_OFFLOAD(
"omp declare target")
266 const T x2 = x * x, y2 = y * y, z2 = z * z;
267 const T x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
268 const T x4 = x3 * x, y4 = y3 * y, z4 = z3 * z;
269 const T x5 = x4 * x, y5 = y4 * y, z5 = z4 * z;
273 XYZ[83] = x2 * y2 * z2;
274 XYZ[82] = x * y2 * z3;
275 XYZ[81] = x2 * y * z3;
276 XYZ[80] = x * y3 * z2;
277 XYZ[79] = x2 * y3 * z;
278 XYZ[78] = x3 * y * z2;
279 XYZ[77] = x3 * y2 * z;
283 XYZ[73] = x * y * z4;
284 XYZ[72] = x * y4 * z;
285 XYZ[71] = x4 * y * z;
292 XYZ[64] = y * z * z4;
293 XYZ[63] = x * z * z4;
294 XYZ[62] = y * y4 * z;
295 XYZ[61] = x * y * y4;
296 XYZ[60] = x * x4 * z;
297 XYZ[59] = x * x4 * y;
302 XYZ[55] = x * y2 * z2;
303 XYZ[54] = x2 * y * z2;
304 XYZ[53] = x2 * y2 * z;
305 XYZ[52] = x * y * z3;
306 XYZ[51] = x * y3 * z;
307 XYZ[50] = x3 * y * z;
324 XYZ[34] = x * y * z2;
325 XYZ[33] = x * y2 * z;
326 XYZ[32] = x2 * y * z;
365 PRAGMA_OFFLOAD(
"omp end declare target")
368 PRAGMA_OFFLOAD("omp declare target")
382 const T x2 = x * x, y2 = y * y, z2 = z * z;
383 const T x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
384 const T x4 = x3 * x, y4 = y3 * y, z4 = z3 * z;
385 const T x5 = x4 * x, y5 = y4 * y, z5 = z4 * z;
390 XYZ[83] = x2 * y2 * z2;
391 gr0[83] = 2 * x * y2 * z2;
392 gr1[83] = 2 * x2 * y * z2;
393 gr2[83] = 2 * x2 * y2 * z;
394 lap[83] = 2 * x2 * y2 + 2 * x2 * z2 + 2 * y2 * z2;
395 XYZ[82] = x * y2 * z3;
397 gr1[82] = 2 * x * y * z3;
398 gr2[82] = 3 * x * y2 * z2;
399 lap[82] = 6 * x * y2 * z + 2 * x * z3;
400 XYZ[81] = x2 * y * z3;
401 gr0[81] = 2 * x * y * z3;
403 gr2[81] = 3 * x2 * y * z2;
404 lap[81] = 6 * x2 * y * z + 2 * y * z3;
405 XYZ[80] = x * y3 * z2;
407 gr1[80] = 3 * x * y2 * z2;
408 gr2[80] = 2 * x * y3 * z;
409 lap[80] = 6 * x * y * z2 + 2 * x * y3;
410 XYZ[79] = x2 * y3 * z;
411 gr0[79] = 2 * x * y3 * z;
412 gr1[79] = 3 * x2 * y2 * z;
414 lap[79] = 6 * x2 * y * z + 2 * y3 * z;
415 XYZ[78] = x3 * y * z2;
416 gr0[78] = 3 * x2 * y * z2;
418 gr2[78] = 2 * x3 * y * z;
419 lap[78] = 6 * x * y * z2 + 2 * x3 * y;
420 XYZ[77] = x3 * y2 * z;
421 gr0[77] = 3 * x2 * y2 * z;
422 gr1[77] = 2 * x3 * y * z;
424 lap[77] = 6 * x * y2 * z + 2 * x3 * z;
426 gr1[76] = 3 * y2 * z3;
427 gr2[76] = 3 * y3 * z2;
428 lap[76] = 6 * y * z3 + 6 * y3 * z;
430 gr0[75] = 3 * x2 * z3;
431 gr2[75] = 3 * x3 * z2;
432 lap[75] = 6 * x * z3 + 6 * x3 * z;
434 gr0[74] = 3 * x2 * y3;
435 gr1[74] = 3 * x3 * y2;
436 lap[74] = 6 * x * y3 + 6 * x3 * y;
437 XYZ[73] = x * y * z4;
440 gr2[73] = 4 * x * y * z3;
441 lap[73] = 12 * x * y * z2;
442 XYZ[72] = x * y4 * z;
444 gr1[72] = 4 * x * y3 * z;
446 lap[72] = 12 * x * y2 * z;
447 XYZ[71] = x4 * y * z;
448 gr0[71] = 4 * x3 * y * z;
451 lap[71] = 12 * x2 * y * z;
453 gr1[70] = 2 * y * z4;
454 gr2[70] = 4 * y2 * z3;
455 lap[70] = 12 * y2 * z2 + 2 * z4;
457 gr0[69] = 2 * x * z4;
458 gr2[69] = 4 * x2 * z3;
459 lap[69] = 12 * x2 * z2 + 2 * z4;
461 gr1[68] = 4 * y3 * z2;
462 gr2[68] = 2 * y4 * z;
463 lap[68] = 12 * y2 * z2 + 2 * y4;
465 gr0[67] = 2 * x * y4;
466 gr1[67] = 4 * x2 * y3;
467 lap[67] = 12 * x2 * y2 + 2 * y4;
469 gr0[66] = 4 * x3 * z2;
470 gr2[66] = 2 * x4 * z;
471 lap[66] = 12 * x2 * z2 + 2 * x4;
473 gr0[65] = 4 * x3 * y2;
474 gr1[65] = 2 * x4 * y;
475 lap[65] = 12 * x2 * y2 + 2 * x4;
476 XYZ[64] = y * z * z4;
478 gr2[64] = 5 * y * z4;
479 lap[64] = 20 * y * z3;
480 XYZ[63] = x * z * z4;
482 gr2[63] = 5 * x * z4;
483 lap[63] = 20 * x * z3;
484 XYZ[62] = y * y4 * z;
485 gr1[62] = 5 * y4 * z;
487 lap[62] = 20 * y3 * z;
488 XYZ[61] = x * y * y4;
490 gr1[61] = 5 * x * y4;
491 lap[61] = 20 * x * y3;
492 XYZ[60] = x * x4 * z;
493 gr0[60] = 5 * x4 * z;
495 lap[60] = 20 * x3 * z;
496 XYZ[59] = x * x4 * y;
497 gr0[59] = 5 * x4 * y;
499 lap[59] = 20 * x3 * y;
501 gr2[58] = 6 * z * z4;
504 gr1[57] = 6 * y * y4;
507 gr0[56] = 6 * x * x4;
510 XYZ[55] = x * y2 * z2;
512 gr1[55] = 2 * x * y * z2;
513 gr2[55] = 2 * x * y2 * z;
514 lap[55] = 2 * x * y2 + 2 * x * z2;
515 XYZ[54] = x2 * y * z2;
516 gr0[54] = 2 * x * y * z2;
518 gr2[54] = 2 * x2 * y * z;
519 lap[54] = 2 * x2 * y + 2 * y * z2;
520 XYZ[53] = x2 * y2 * z;
521 gr0[53] = 2 * x * y2 * z;
522 gr1[53] = 2 * x2 * y * z;
524 lap[53] = 2 * x2 * z + 2 * y2 * z;
525 XYZ[52] = x * y * z3;
528 gr2[52] = 3 * x * y * z2;
529 lap[52] = 6 * x * y * z;
530 XYZ[51] = x * y3 * z;
532 gr1[51] = 3 * x * y2 * z;
534 lap[51] = 6 * x * y * z;
535 XYZ[50] = x3 * y * z;
536 gr0[50] = 3 * x2 * y * z;
539 lap[50] = 6 * x * y * z;
541 gr1[49] = 2 * y * z3;
542 gr2[49] = 3 * y2 * z2;
543 lap[49] = 6 * y2 * z + 2 * z3;
545 gr0[48] = 2 * x * z3;
546 gr2[48] = 3 * x2 * z2;
547 lap[48] = 6 * x2 * z + 2 * z3;
549 gr1[47] = 3 * y2 * z2;
550 gr2[47] = 2 * y3 * z;
551 lap[47] = 6 * y * z2 + 2 * y3;
553 gr0[46] = 2 * x * y3;
554 gr1[46] = 3 * x2 * y2;
555 lap[46] = 6 * x2 * y + 2 * y3;
557 gr0[45] = 3 * x2 * z2;
558 gr2[45] = 2 * x3 * z;
559 lap[45] = 6 * x * z2 + 2 * x3;
561 gr0[44] = 3 * x2 * y2;
562 gr1[44] = 2 * x3 * y;
563 lap[44] = 6 * x * y2 + 2 * x3;
566 gr2[43] = 4 * y * z3;
567 lap[43] = 12 * y * z2;
570 gr2[42] = 4 * x * z3;
571 lap[42] = 12 * x * z2;
573 gr1[41] = 4 * y3 * z;
575 lap[41] = 12 * y2 * z;
578 gr1[40] = 4 * x * y3;
579 lap[40] = 12 * x * y2;
581 gr0[39] = 4 * x3 * z;
583 lap[39] = 12 * x2 * z;
585 gr0[38] = 4 * x3 * y;
587 lap[38] = 12 * x2 * y;
598 XYZ[34] = x * y * z2;
601 gr2[34] = 2 * x * y * z;
603 XYZ[33] = x * y2 * z;
605 gr1[33] = 2 * x * y * z;
608 XYZ[32] = x2 * y * z;
609 gr0[32] = 2 * x * y * z;
614 gr1[31] = 2 * y * z2;
615 gr2[31] = 2 * y2 * z;
616 lap[31] = 2 * y2 + 2 * z2;
618 gr0[30] = 2 * x * z2;
619 gr2[30] = 2 * x2 * z;
620 lap[30] = 2 * x2 + 2 * z2;
622 gr0[29] = 2 * x * y2;
623 gr1[29] = 2 * x2 * y;
624 lap[29] = 2 * x2 + 2 * y2;
627 gr2[28] = 3 * y * z2;
631 gr2[27] = 3 * x * z2;
634 gr1[26] = 3 * y2 * z;
639 gr1[25] = 3 * x * y2;
642 gr0[24] = 3 * x2 * z;
646 gr0[23] = 3 * x2 * y;
726 for (
size_t i = 0; i < n_normfac; i++)
728 XYZ[i] *= normfactor[i];
729 gr0[i] *= normfactor[i];
730 gr1[i] *= normfactor[i];
731 gr2[i] *= normfactor[i];
732 lap[i] *= normfactor[i];
735 PRAGMA_OFFLOAD(
"omp end declare target")
741 constexpr T
czero(0);
744 const T x2 = x * x, y2 = y * y, z2 = z * z;
745 const T x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
746 const T x4 = x3 * x, y4 = y3 * y, z4 = z3 * z;
747 const T x5 = x4 * x, y5 = y4 * y, z5 = z4 * z;
749 T* restrict XYZ = cXYZ.data(0);
750 T* restrict gr0 = cXYZ.data(1);
751 T* restrict gr1 = cXYZ.data(2);
752 T* restrict gr2 = cXYZ.data(3);
753 T* restrict h00 = cXYZ.data(4);
754 T* restrict h01 = cXYZ.data(5);
755 T* restrict h02 = cXYZ.data(6);
756 T* restrict h11 = cXYZ.data(7);
757 T* restrict h12 = cXYZ.data(8);
758 T* restrict h22 = cXYZ.data(9);
764 XYZ[83] = x2 * y2 * z2;
765 gr0[83] = 2 * x * y2 * z2;
766 gr1[83] = 2 * x2 * y * z2;
767 gr2[83] = 2 * x2 * y2 * z;
768 h00[83] = 2 * y2 * z2;
769 h01[83] = 4 * x * y * z2;
770 h02[83] = 4 * x * y2 * z;
771 h11[83] = 2 * x2 * z2;
772 h12[83] = 4 * x2 * y * z;
773 h22[83] = 2 * x2 * y2;
774 XYZ[82] = x * y2 * z3;
776 gr1[82] = 2 * x * y * z3;
777 gr2[82] = 3 * x * y2 * z2;
778 h01[82] = 2 * y * z3;
779 h02[82] = 3 * y2 * z2;
780 h11[82] = 2 * x * z3;
781 h12[82] = 6 * x * y * z2;
782 h22[82] = 6 * x * y2 * z;
783 XYZ[81] = x2 * y * z3;
784 gr0[81] = 2 * x * y * z3;
786 gr2[81] = 3 * x2 * y * z2;
787 h00[81] = 2 * y * z3;
788 h01[81] = 2 * x * z3;
789 h02[81] = 6 * x * y * z2;
790 h12[81] = 3 * x2 * z2;
791 h22[81] = 6 * x2 * y * z;
792 XYZ[80] = x * y3 * z2;
794 gr1[80] = 3 * x * y2 * z2;
795 gr2[80] = 2 * x * y3 * z;
796 h01[80] = 3 * y2 * z2;
797 h02[80] = 2 * y3 * z;
798 h11[80] = 6 * x * y * z2;
799 h12[80] = 6 * x * y2 * z;
800 h22[80] = 2 * x * y3;
801 XYZ[79] = x2 * y3 * z;
802 gr0[79] = 2 * x * y3 * z;
803 gr1[79] = 3 * x2 * y2 * z;
805 h00[79] = 2 * y3 * z;
806 h01[79] = 6 * x * y2 * z;
807 h02[79] = 2 * x * y3;
808 h11[79] = 6 * x2 * y * z;
809 h12[79] = 3 * x2 * y2;
810 XYZ[78] = x3 * y * z2;
811 gr0[78] = 3 * x2 * y * z2;
813 gr2[78] = 2 * x3 * y * z;
814 h00[78] = 6 * x * y * z2;
815 h01[78] = 3 * x2 * z2;
816 h02[78] = 6 * x2 * y * z;
817 h12[78] = 2 * x3 * z;
818 h22[78] = 2 * x3 * y;
819 XYZ[77] = x3 * y2 * z;
820 gr0[77] = 3 * x2 * y2 * z;
821 gr1[77] = 2 * x3 * y * z;
823 h00[77] = 6 * x * y2 * z;
824 h01[77] = 6 * x2 * y * z;
825 h02[77] = 3 * x2 * y2;
826 h11[77] = 2 * x3 * z;
827 h12[77] = 2 * x3 * y;
829 gr1[76] = 3 * y2 * z3;
830 gr2[76] = 3 * y3 * z2;
831 h11[76] = 6 * y * z3;
832 h12[76] = 9 * y2 * z2;
833 h22[76] = 6 * y3 * z;
835 gr0[75] = 3 * x2 * z3;
836 gr2[75] = 3 * x3 * z2;
837 h00[75] = 6 * x * z3;
838 h02[75] = 9 * x2 * z2;
839 h22[75] = 6 * x3 * z;
841 gr0[74] = 3 * x2 * y3;
842 gr1[74] = 3 * x3 * y2;
843 h00[74] = 6 * x * y3;
844 h01[74] = 9 * x2 * y2;
845 h11[74] = 6 * x3 * y;
846 XYZ[73] = x * y * z4;
849 gr2[73] = 4 * x * y * z3;
851 h02[73] = 4 * y * z3;
852 h12[73] = 4 * x * z3;
853 h22[73] = 12 * x * y * z2;
854 XYZ[72] = x * y4 * z;
856 gr1[72] = 4 * x * y3 * z;
858 h01[72] = 4 * y3 * z;
860 h11[72] = 12 * x * y2 * z;
861 h12[72] = 4 * x * y3;
862 XYZ[71] = x4 * y * z;
863 gr0[71] = 4 * x3 * y * z;
866 h00[71] = 12 * x2 * y * z;
867 h01[71] = 4 * x3 * z;
868 h02[71] = 4 * x3 * y;
871 gr1[70] = 2 * y * z4;
872 gr2[70] = 4 * y2 * z3;
874 h12[70] = 8 * y * z3;
875 h22[70] = 12 * y2 * z2;
877 gr0[69] = 2 * x * z4;
878 gr2[69] = 4 * x2 * z3;
880 h02[69] = 8 * x * z3;
881 h22[69] = 12 * x2 * z2;
883 gr1[68] = 4 * y3 * z2;
884 gr2[68] = 2 * y4 * z;
885 h11[68] = 12 * y2 * z2;
886 h12[68] = 8 * y3 * z;
889 gr0[67] = 2 * x * y4;
890 gr1[67] = 4 * x2 * y3;
892 h01[67] = 8 * x * y3;
893 h11[67] = 12 * x2 * y2;
895 gr0[66] = 4 * x3 * z2;
896 gr2[66] = 2 * x4 * z;
897 h00[66] = 12 * x2 * z2;
898 h02[66] = 8 * x3 * z;
901 gr0[65] = 4 * x3 * y2;
902 gr1[65] = 2 * x4 * y;
903 h00[65] = 12 * x2 * y2;
904 h01[65] = 8 * x3 * y;
906 XYZ[64] = y * z * z4;
908 gr2[64] = 5 * y * z4;
910 h22[64] = 20 * y * z3;
911 XYZ[63] = x * z * z4;
913 gr2[63] = 5 * x * z4;
915 h22[63] = 20 * x * z3;
916 XYZ[62] = y * y4 * z;
917 gr1[62] = 5 * y4 * z;
919 h11[62] = 20 * y3 * z;
921 XYZ[61] = x * y * y4;
923 gr1[61] = 5 * x * y4;
925 h11[61] = 20 * x * y3;
926 XYZ[60] = x * x4 * z;
927 gr0[60] = 5 * x4 * z;
929 h00[60] = 20 * x3 * z;
931 XYZ[59] = x * x4 * y;
932 gr0[59] = 5 * x4 * y;
934 h00[59] = 20 * x3 * y;
937 gr2[58] = 6 * z * z4;
940 gr1[57] = 6 * y * y4;
943 gr0[56] = 6 * x * x4;
946 XYZ[55] = x * y2 * z2;
948 gr1[55] = 2 * x * y * z2;
949 gr2[55] = 2 * x * y2 * z;
950 h01[55] = 2 * y * z2;
951 h02[55] = 2 * y2 * z;
952 h11[55] = 2 * x * z2;
953 h12[55] = 4 * x * y * z;
954 h22[55] = 2 * x * y2;
955 XYZ[54] = x2 * y * z2;
956 gr0[54] = 2 * x * y * z2;
958 gr2[54] = 2 * x2 * y * z;
959 h00[54] = 2 * y * z2;
960 h01[54] = 2 * x * z2;
961 h02[54] = 4 * x * y * z;
962 h12[54] = 2 * x2 * z;
963 h22[54] = 2 * x2 * y;
964 XYZ[53] = x2 * y2 * z;
965 gr0[53] = 2 * x * y2 * z;
966 gr1[53] = 2 * x2 * y * z;
968 h00[53] = 2 * y2 * z;
969 h01[53] = 4 * x * y * z;
970 h02[53] = 2 * x * y2;
971 h11[53] = 2 * x2 * z;
972 h12[53] = 2 * x2 * y;
973 XYZ[52] = x * y * z3;
976 gr2[52] = 3 * x * y * z2;
978 h02[52] = 3 * y * z2;
979 h12[52] = 3 * x * z2;
980 h22[52] = 6 * x * y * z;
981 XYZ[51] = x * y3 * z;
983 gr1[51] = 3 * x * y2 * z;
985 h01[51] = 3 * y2 * z;
987 h11[51] = 6 * x * y * z;
988 h12[51] = 3 * x * y2;
989 XYZ[50] = x3 * y * z;
990 gr0[50] = 3 * x2 * y * z;
993 h00[50] = 6 * x * y * z;
994 h01[50] = 3 * x2 * z;
995 h02[50] = 3 * x2 * y;
998 gr1[49] = 2 * y * z3;
999 gr2[49] = 3 * y2 * z2;
1001 h12[49] = 6 * y * z2;
1002 h22[49] = 6 * y2 * z;
1004 gr0[48] = 2 * x * z3;
1005 gr2[48] = 3 * x2 * z2;
1007 h02[48] = 6 * x * z2;
1008 h22[48] = 6 * x2 * z;
1010 gr1[47] = 3 * y2 * z2;
1011 gr2[47] = 2 * y3 * z;
1012 h11[47] = 6 * y * z2;
1013 h12[47] = 6 * y2 * z;
1016 gr0[46] = 2 * x * y3;
1017 gr1[46] = 3 * x2 * y2;
1019 h01[46] = 6 * x * y2;
1020 h11[46] = 6 * x2 * y;
1022 gr0[45] = 3 * x2 * z2;
1023 gr2[45] = 2 * x3 * z;
1024 h00[45] = 6 * x * z2;
1025 h02[45] = 6 * x2 * z;
1028 gr0[44] = 3 * x2 * y2;
1029 gr1[44] = 2 * x3 * y;
1030 h00[44] = 6 * x * y2;
1031 h01[44] = 6 * x2 * y;
1035 gr2[43] = 4 * y * z3;
1037 h22[43] = 12 * y * z2;
1040 gr2[42] = 4 * x * z3;
1042 h22[42] = 12 * x * z2;
1044 gr1[41] = 4 * y3 * z;
1046 h11[41] = 12 * y2 * z;
1050 gr1[40] = 4 * x * y3;
1052 h11[40] = 12 * x * y2;
1054 gr0[39] = 4 * x3 * z;
1056 h00[39] = 12 * x2 * z;
1059 gr0[38] = 4 * x3 * y;
1061 h00[38] = 12 * x2 * y;
1073 XYZ[34] = x * y * z2;
1076 gr2[34] = 2 * x * y * z;
1078 h02[34] = 2 * y * z;
1079 h12[34] = 2 * x * z;
1080 h22[34] = 2 * x * y;
1081 XYZ[33] = x * y2 * z;
1083 gr1[33] = 2 * x * y * z;
1085 h01[33] = 2 * y * z;
1087 h11[33] = 2 * x * z;
1088 h12[33] = 2 * x * y;
1089 XYZ[32] = x2 * y * z;
1090 gr0[32] = 2 * x * y * z;
1093 h00[32] = 2 * y * z;
1094 h01[32] = 2 * x * z;
1095 h02[32] = 2 * x * y;
1098 gr1[31] = 2 * y * z2;
1099 gr2[31] = 2 * y2 * z;
1101 h12[31] = 4 * y * z;
1104 gr0[30] = 2 * x * z2;
1105 gr2[30] = 2 * x2 * z;
1107 h02[30] = 4 * x * z;
1110 gr0[29] = 2 * x * y2;
1111 gr1[29] = 2 * x2 * y;
1113 h01[29] = 4 * x * y;
1117 gr2[28] = 3 * y * z2;
1119 h22[28] = 6 * y * z;
1122 gr2[27] = 3 * x * z2;
1124 h22[27] = 6 * x * z;
1126 gr1[26] = 3 * y2 * z;
1128 h11[26] = 6 * y * z;
1132 gr1[25] = 3 * x * y2;
1134 h11[25] = 6 * x * y;
1136 gr0[24] = 3 * x2 * z;
1138 h00[24] = 6 * x * z;
1141 gr0[23] = 3 * x2 * y;
1143 h00[23] = 6 * x * y;
1155 XYZ[19] = x * y * z;
1164 gr2[18] = 2 * y * z;
1169 gr2[17] = 2 * x * z;
1173 gr1[16] = 2 * y * z;
1179 gr1[15] = 2 * x * y;
1183 gr0[14] = 2 * x * z;
1188 gr0[13] = 2 * x * y;
1234 const size_t ntot = cXYZ.size();
1235 for (
size_t i = 0; i < ntot; ++i)
1237 XYZ[i] *= norm_factor_[i];
1238 gr0[i] *= norm_factor_[i];
1239 gr1[i] *= norm_factor_[i];
1240 gr2[i] *= norm_factor_[i];
1241 h00[i] *= norm_factor_[i];
1242 h01[i] *= norm_factor_[i];
1243 h02[i] *= norm_factor_[i];
1244 h11[i] *= norm_factor_[i];
1245 h12[i] *= norm_factor_[i];
1246 h22[i] *= norm_factor_[i];
1254 constexpr T
czero(0);
1257 const T x2 = x * x, y2 = y * y, z2 = z * z;
1258 const T x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
1259 const T x4 = x3 * x, y4 = y3 * y, z4 = z3 * z;
1260 const T x5 = x4 * x, y5 = y4 * y, z5 = z4 * z;
1262 T* restrict XYZ = cXYZ.data(0);
1263 T* restrict gr0 = cXYZ.data(1);
1264 T* restrict gr1 = cXYZ.data(2);
1265 T* restrict gr2 = cXYZ.data(3);
1266 T* restrict h00 = cXYZ.data(4);
1267 T* restrict h01 = cXYZ.data(5);
1268 T* restrict h02 = cXYZ.data(6);
1269 T* restrict h11 = cXYZ.data(7);
1270 T* restrict h12 = cXYZ.data(8);
1271 T* restrict h22 = cXYZ.data(9);
1272 T* restrict gh000 = cXYZ.data(10);
1273 T* restrict gh001 = cXYZ.data(11);
1274 T* restrict gh002 = cXYZ.data(12);
1275 T* restrict gh011 = cXYZ.data(13);
1276 T* restrict gh012 = cXYZ.data(14);
1277 T* restrict gh022 = cXYZ.data(15);
1278 T* restrict gh111 = cXYZ.data(16);
1279 T* restrict gh112 = cXYZ.data(17);
1280 T* restrict gh122 = cXYZ.data(18);
1281 T* restrict gh222 = cXYZ.data(19);
1286 XYZ[83] = x2 * y2 * z2;
1287 gr0[83] = 2 * x * y2 * z2;
1288 gr1[83] = 2 * x2 * y * z2;
1289 gr2[83] = 2 * x2 * y2 * z;
1290 h00[83] = 2 * y2 * z2;
1291 h01[83] = 4 * x * y * z2;
1292 h02[83] = 4 * x * y2 * z;
1293 h11[83] = 2 * x2 * z2;
1294 h12[83] = 4 * x2 * y * z;
1295 h22[83] = 2 * x2 * y2;
1296 gh001[83] = 4 * y * z2;
1297 gh002[83] = 4 * y2 * z;
1298 gh011[83] = 4 * x * z2;
1299 gh012[83] = 8 * x * y * z;
1300 gh022[83] = 4 * x * y2;
1301 gh112[83] = 4 * x2 * z;
1302 gh122[83] = 4 * x2 * y;
1303 XYZ[82] = x * y2 * z3;
1305 gr1[82] = 2 * x * y * z3;
1306 gr2[82] = 3 * x * y2 * z2;
1307 h01[82] = 2 * y * z3;
1308 h02[82] = 3 * y2 * z2;
1309 h11[82] = 2 * x * z3;
1310 h12[82] = 6 * x * y * z2;
1311 h22[82] = 6 * x * y2 * z;
1313 gh012[82] = 6 * y * z2;
1314 gh022[82] = 6 * y2 * z;
1315 gh112[82] = 6 * x * z2;
1316 gh122[82] = 12 * x * y * z;
1317 gh222[82] = 6 * x * y2;
1318 XYZ[81] = x2 * y * z3;
1319 gr0[81] = 2 * x * y * z3;
1321 gr2[81] = 3 * x2 * y * z2;
1322 h00[81] = 2 * y * z3;
1323 h01[81] = 2 * x * z3;
1324 h02[81] = 6 * x * y * z2;
1325 h12[81] = 3 * x2 * z2;
1326 h22[81] = 6 * x2 * y * z;
1328 gh002[81] = 6 * y * z2;
1329 gh012[81] = 6 * x * z2;
1330 gh022[81] = 12 * x * y * z;
1331 gh122[81] = 6 * x2 * z;
1332 gh222[81] = 6 * x2 * y;
1333 XYZ[80] = x * y3 * z2;
1335 gr1[80] = 3 * x * y2 * z2;
1336 gr2[80] = 2 * x * y3 * z;
1337 h01[80] = 3 * y2 * z2;
1338 h02[80] = 2 * y3 * z;
1339 h11[80] = 6 * x * y * z2;
1340 h12[80] = 6 * x * y2 * z;
1341 h22[80] = 2 * x * y3;
1342 gh011[80] = 6 * y * z2;
1343 gh012[80] = 6 * y2 * z;
1345 gh111[80] = 6 * x * z2;
1346 gh112[80] = 12 * x * y * z;
1347 gh122[80] = 6 * x * y2;
1348 XYZ[79] = x2 * y3 * z;
1349 gr0[79] = 2 * x * y3 * z;
1350 gr1[79] = 3 * x2 * y2 * z;
1352 h00[79] = 2 * y3 * z;
1353 h01[79] = 6 * x * y2 * z;
1354 h02[79] = 2 * x * y3;
1355 h11[79] = 6 * x2 * y * z;
1356 h12[79] = 3 * x2 * y2;
1357 gh001[79] = 6 * y2 * z;
1359 gh011[79] = 12 * x * y * z;
1360 gh012[79] = 6 * x * y2;
1361 gh111[79] = 6 * x2 * z;
1362 gh112[79] = 6 * x2 * y;
1363 XYZ[78] = x3 * y * z2;
1364 gr0[78] = 3 * x2 * y * z2;
1366 gr2[78] = 2 * x3 * y * z;
1367 h00[78] = 6 * x * y * z2;
1368 h01[78] = 3 * x2 * z2;
1369 h02[78] = 6 * x2 * y * z;
1370 h12[78] = 2 * x3 * z;
1371 h22[78] = 2 * x3 * y;
1372 gh000[78] = 6 * y * z2;
1373 gh001[78] = 6 * x * z2;
1374 gh002[78] = 12 * x * y * z;
1375 gh012[78] = 6 * x2 * z;
1376 gh022[78] = 6 * x2 * y;
1378 XYZ[77] = x3 * y2 * z;
1379 gr0[77] = 3 * x2 * y2 * z;
1380 gr1[77] = 2 * x3 * y * z;
1382 h00[77] = 6 * x * y2 * z;
1383 h01[77] = 6 * x2 * y * z;
1384 h02[77] = 3 * x2 * y2;
1385 h11[77] = 2 * x3 * z;
1386 h12[77] = 2 * x3 * y;
1387 gh000[77] = 6 * y2 * z;
1388 gh001[77] = 12 * x * y * z;
1389 gh002[77] = 6 * x * y2;
1390 gh011[77] = 6 * x2 * z;
1391 gh012[77] = 6 * x2 * y;
1394 gr1[76] = 3 * y2 * z3;
1395 gr2[76] = 3 * y3 * z2;
1396 h11[76] = 6 * y * z3;
1397 h12[76] = 9 * y2 * z2;
1398 h22[76] = 6 * y3 * z;
1400 gh112[76] = 18 * y * z2;
1401 gh122[76] = 18 * y2 * z;
1404 gr0[75] = 3 * x2 * z3;
1405 gr2[75] = 3 * x3 * z2;
1406 h00[75] = 6 * x * z3;
1407 h02[75] = 9 * x2 * z2;
1408 h22[75] = 6 * x3 * z;
1410 gh002[75] = 18 * x * z2;
1411 gh022[75] = 18 * x2 * z;
1414 gr0[74] = 3 * x2 * y3;
1415 gr1[74] = 3 * x3 * y2;
1416 h00[74] = 6 * x * y3;
1417 h01[74] = 9 * x2 * y2;
1418 h11[74] = 6 * x3 * y;
1420 gh001[74] = 18 * x * y2;
1421 gh011[74] = 18 * x2 * y;
1423 XYZ[73] = x * y * z4;
1426 gr2[73] = 4 * x * y * z3;
1428 h02[73] = 4 * y * z3;
1429 h12[73] = 4 * x * z3;
1430 h22[73] = 12 * x * y * z2;
1432 gh022[73] = 12 * y * z2;
1433 gh122[73] = 12 * x * z2;
1434 gh222[73] = 24 * x * y * z;
1435 XYZ[72] = x * y4 * z;
1437 gr1[72] = 4 * x * y3 * z;
1439 h01[72] = 4 * y3 * z;
1441 h11[72] = 12 * x * y2 * z;
1442 h12[72] = 4 * x * y3;
1443 gh011[72] = 12 * y2 * z;
1445 gh111[72] = 24 * x * y * z;
1446 gh112[72] = 12 * x * y2;
1447 XYZ[71] = x4 * y * z;
1448 gr0[71] = 4 * x3 * y * z;
1451 h00[71] = 12 * x2 * y * z;
1452 h01[71] = 4 * x3 * z;
1453 h02[71] = 4 * x3 * y;
1455 gh000[71] = 24 * x * y * z;
1456 gh001[71] = 12 * x2 * z;
1457 gh002[71] = 12 * x2 * y;
1460 gr1[70] = 2 * y * z4;
1461 gr2[70] = 4 * y2 * z3;
1463 h12[70] = 8 * y * z3;
1464 h22[70] = 12 * y2 * z2;
1466 gh122[70] = 24 * y * z2;
1467 gh222[70] = 24 * y2 * z;
1469 gr0[69] = 2 * x * z4;
1470 gr2[69] = 4 * x2 * z3;
1472 h02[69] = 8 * x * z3;
1473 h22[69] = 12 * x2 * z2;
1475 gh022[69] = 24 * x * z2;
1476 gh222[69] = 24 * x2 * z;
1478 gr1[68] = 4 * y3 * z2;
1479 gr2[68] = 2 * y4 * z;
1480 h11[68] = 12 * y2 * z2;
1481 h12[68] = 8 * y3 * z;
1483 gh111[68] = 24 * y * z2;
1484 gh112[68] = 24 * y2 * z;
1487 gr0[67] = 2 * x * y4;
1488 gr1[67] = 4 * x2 * y3;
1490 h01[67] = 8 * x * y3;
1491 h11[67] = 12 * x2 * y2;
1493 gh011[67] = 24 * x * y2;
1494 gh111[67] = 24 * x2 * y;
1496 gr0[66] = 4 * x3 * z2;
1497 gr2[66] = 2 * x4 * z;
1498 h00[66] = 12 * x2 * z2;
1499 h02[66] = 8 * x3 * z;
1501 gh000[66] = 24 * x * z2;
1502 gh002[66] = 24 * x2 * z;
1505 gr0[65] = 4 * x3 * y2;
1506 gr1[65] = 2 * x4 * y;
1507 h00[65] = 12 * x2 * y2;
1508 h01[65] = 8 * x3 * y;
1510 gh000[65] = 24 * x * y2;
1511 gh001[65] = 24 * x2 * y;
1513 XYZ[64] = y * z * z4;
1515 gr2[64] = 5 * y * z4;
1517 h22[64] = 20 * y * z3;
1518 gh122[64] = 20 * z3;
1519 gh222[64] = 60 * y * z2;
1520 XYZ[63] = x * z * z4;
1522 gr2[63] = 5 * x * z4;
1524 h22[63] = 20 * x * z3;
1525 gh022[63] = 20 * z3;
1526 gh222[63] = 60 * x * z2;
1527 XYZ[62] = y * y4 * z;
1528 gr1[62] = 5 * y4 * z;
1530 h11[62] = 20 * y3 * z;
1532 gh111[62] = 60 * y2 * z;
1533 gh112[62] = 20 * y3;
1534 XYZ[61] = x * y * y4;
1536 gr1[61] = 5 * x * y4;
1538 h11[61] = 20 * x * y3;
1539 gh011[61] = 20 * y3;
1540 gh111[61] = 60 * x * y2;
1541 XYZ[60] = x * x4 * z;
1542 gr0[60] = 5 * x4 * z;
1544 h00[60] = 20 * x3 * z;
1546 gh000[60] = 60 * x2 * z;
1547 gh002[60] = 20 * x3;
1548 XYZ[59] = x * x4 * y;
1549 gr0[59] = 5 * x4 * y;
1551 h00[59] = 20 * x3 * y;
1553 gh000[59] = 60 * x2 * y;
1554 gh001[59] = 20 * x3;
1556 gr2[58] = 6 * z * z4;
1558 gh222[58] = 120 * z3;
1560 gr1[57] = 6 * y * y4;
1562 gh111[57] = 120 * y3;
1564 gr0[56] = 6 * x * x4;
1566 gh000[56] = 120 * x3;
1568 XYZ[55] = x * y2 * z2;
1570 gr1[55] = 2 * x * y * z2;
1571 gr2[55] = 2 * x * y2 * z;
1572 h01[55] = 2 * y * z2;
1573 h02[55] = 2 * y2 * z;
1574 h11[55] = 2 * x * z2;
1575 h12[55] = 4 * x * y * z;
1576 h22[55] = 2 * x * y2;
1578 gh012[55] = 4 * y * z;
1580 gh112[55] = 4 * x * z;
1581 gh122[55] = 4 * x * y;
1582 XYZ[54] = x2 * y * z2;
1583 gr0[54] = 2 * x * y * z2;
1585 gr2[54] = 2 * x2 * y * z;
1586 h00[54] = 2 * y * z2;
1587 h01[54] = 2 * x * z2;
1588 h02[54] = 4 * x * y * z;
1589 h12[54] = 2 * x2 * z;
1590 h22[54] = 2 * x2 * y;
1592 gh002[54] = 4 * y * z;
1593 gh012[54] = 4 * x * z;
1594 gh022[54] = 4 * x * y;
1596 XYZ[53] = x2 * y2 * z;
1597 gr0[53] = 2 * x * y2 * z;
1598 gr1[53] = 2 * x2 * y * z;
1600 h00[53] = 2 * y2 * z;
1601 h01[53] = 4 * x * y * z;
1602 h02[53] = 2 * x * y2;
1603 h11[53] = 2 * x2 * z;
1604 h12[53] = 2 * x2 * y;
1605 gh001[53] = 4 * y * z;
1607 gh011[53] = 4 * x * z;
1608 gh012[53] = 4 * x * y;
1610 XYZ[52] = x * y * z3;
1613 gr2[52] = 3 * x * y * z2;
1615 h02[52] = 3 * y * z2;
1616 h12[52] = 3 * x * z2;
1617 h22[52] = 6 * x * y * z;
1619 gh022[52] = 6 * y * z;
1620 gh122[52] = 6 * x * z;
1621 gh222[52] = 6 * x * y;
1622 XYZ[51] = x * y3 * z;
1624 gr1[51] = 3 * x * y2 * z;
1626 h01[51] = 3 * y2 * z;
1628 h11[51] = 6 * x * y * z;
1629 h12[51] = 3 * x * y2;
1630 gh011[51] = 6 * y * z;
1632 gh111[51] = 6 * x * z;
1633 gh112[51] = 6 * x * y;
1634 XYZ[50] = x3 * y * z;
1635 gr0[50] = 3 * x2 * y * z;
1638 h00[50] = 6 * x * y * z;
1639 h01[50] = 3 * x2 * z;
1640 h02[50] = 3 * x2 * y;
1642 gh000[50] = 6 * y * z;
1643 gh001[50] = 6 * x * z;
1644 gh002[50] = 6 * x * y;
1647 gr1[49] = 2 * y * z3;
1648 gr2[49] = 3 * y2 * z2;
1650 h12[49] = 6 * y * z2;
1651 h22[49] = 6 * y2 * z;
1653 gh122[49] = 12 * y * z;
1656 gr0[48] = 2 * x * z3;
1657 gr2[48] = 3 * x2 * z2;
1659 h02[48] = 6 * x * z2;
1660 h22[48] = 6 * x2 * z;
1662 gh022[48] = 12 * x * z;
1665 gr1[47] = 3 * y2 * z2;
1666 gr2[47] = 2 * y3 * z;
1667 h11[47] = 6 * y * z2;
1668 h12[47] = 6 * y2 * z;
1671 gh112[47] = 12 * y * z;
1674 gr0[46] = 2 * x * y3;
1675 gr1[46] = 3 * x2 * y2;
1677 h01[46] = 6 * x * y2;
1678 h11[46] = 6 * x2 * y;
1680 gh011[46] = 12 * x * y;
1683 gr0[45] = 3 * x2 * z2;
1684 gr2[45] = 2 * x3 * z;
1685 h00[45] = 6 * x * z2;
1686 h02[45] = 6 * x2 * z;
1689 gh002[45] = 12 * x * z;
1692 gr0[44] = 3 * x2 * y2;
1693 gr1[44] = 2 * x3 * y;
1694 h00[44] = 6 * x * y2;
1695 h01[44] = 6 * x2 * y;
1698 gh001[44] = 12 * x * y;
1702 gr2[43] = 4 * y * z3;
1704 h22[43] = 12 * y * z2;
1705 gh122[43] = 12 * z2;
1706 gh222[43] = 24 * y * z;
1709 gr2[42] = 4 * x * z3;
1711 h22[42] = 12 * x * z2;
1712 gh022[42] = 12 * z2;
1713 gh222[42] = 24 * x * z;
1715 gr1[41] = 4 * y3 * z;
1717 h11[41] = 12 * y2 * z;
1719 gh111[41] = 24 * y * z;
1720 gh112[41] = 12 * y2;
1723 gr1[40] = 4 * x * y3;
1725 h11[40] = 12 * x * y2;
1726 gh011[40] = 12 * y2;
1727 gh111[40] = 24 * x * y;
1729 gr0[39] = 4 * x3 * z;
1731 h00[39] = 12 * x2 * z;
1733 gh000[39] = 24 * x * z;
1734 gh002[39] = 12 * x2;
1736 gr0[38] = 4 * x3 * y;
1738 h00[38] = 12 * x2 * y;
1740 gh000[38] = 24 * x * y;
1741 gh001[38] = 12 * x2;
1745 gh222[37] = 60 * z2;
1749 gh111[36] = 60 * y2;
1753 gh000[35] = 60 * x2;
1755 XYZ[34] = x * y * z2;
1758 gr2[34] = 2 * x * y * z;
1760 h02[34] = 2 * y * z;
1761 h12[34] = 2 * x * z;
1762 h22[34] = 2 * x * y;
1766 XYZ[33] = x * y2 * z;
1768 gr1[33] = 2 * x * y * z;
1770 h01[33] = 2 * y * z;
1772 h11[33] = 2 * x * z;
1773 h12[33] = 2 * x * y;
1777 XYZ[32] = x2 * y * z;
1778 gr0[32] = 2 * x * y * z;
1781 h00[32] = 2 * y * z;
1782 h01[32] = 2 * x * z;
1783 h02[32] = 2 * x * y;
1789 gr1[31] = 2 * y * z2;
1790 gr2[31] = 2 * y2 * z;
1792 h12[31] = 4 * y * z;
1797 gr0[30] = 2 * x * z2;
1798 gr2[30] = 2 * x2 * z;
1800 h02[30] = 4 * x * z;
1805 gr0[29] = 2 * x * y2;
1806 gr1[29] = 2 * x2 * y;
1808 h01[29] = 4 * x * y;
1814 gr2[28] = 3 * y * z2;
1816 h22[28] = 6 * y * z;
1821 gr2[27] = 3 * x * z2;
1823 h22[27] = 6 * x * z;
1827 gr1[26] = 3 * y2 * z;
1829 h11[26] = 6 * y * z;
1835 gr1[25] = 3 * x * y2;
1837 h11[25] = 6 * x * y;
1841 gr0[24] = 3 * x2 * z;
1843 h00[24] = 6 * x * z;
1848 gr0[23] = 3 * x2 * y;
1850 h00[23] = 6 * x * y;
1867 XYZ[19] = x * y * z;
1877 gr2[18] = 2 * y * z;
1883 gr2[17] = 2 * x * z;
1888 gr1[16] = 2 * y * z;
1895 gr1[15] = 2 * x * y;
1900 gr0[14] = 2 * x * z;
1906 gr0[13] = 2 * x * y;
1956 const size_t ntot = cXYZ.size();
1957 for (
size_t i = 0; i < ntot; ++i)
1959 XYZ[i] *= norm_factor_[i];
1960 gr0[i] *= norm_factor_[i];
1961 gr1[i] *= norm_factor_[i];
1962 gr2[i] *= norm_factor_[i];
1963 h00[i] *= norm_factor_[i];
1964 h01[i] *= norm_factor_[i];
1965 h02[i] *= norm_factor_[i];
1966 h11[i] *= norm_factor_[i];
1967 h12[i] *= norm_factor_[i];
1968 h22[i] *= norm_factor_[i];
1969 gh000[i] *= norm_factor_[i];
1970 gh001[i] *= norm_factor_[i];
1971 gh002[i] *= norm_factor_[i];
1972 gh011[i] *= norm_factor_[i];
1973 gh012[i] *= norm_factor_[i];
1974 gh022[i] *= norm_factor_[i];
1975 gh111[i] *= norm_factor_[i];
1976 gh112[i] *= norm_factor_[i];
1977 gh122[i] *= norm_factor_[i];
1978 gh222[i] *= norm_factor_[i];
2418 throw std::runtime_error(
"CartesianTensor::getABC() - Incorrect index.\n");
void resize(size_type n, Type_t val=Type_t())
Resize the container.
void evaluateV(T x, T y, T z, T *XYZ)
compute Ylm
helper functions for EinsplineSetBuilder
OffloadVector & norm_factor_
norm_factor reference
void getABC(int n, int &a, int &b, int &c)
int Lmax
maximum angular momentum
constexpr std::complex< float > czero
Soa Container for D-dim vectors.
static void evaluateVGL_impl(T x, T y, T z, T *restrict XYZ, T *restrict gr0, T *restrict gr1, T *restrict gr2, T *restrict lap, int lmax, const T *normfactor, int n_normfac)
const T * operator[](size_t component) const
return the starting address of the component
MakeReturn< BinaryNode< FnPow, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t, typename CreateLeaf< Vector< T2, C2 > >::Leaf_t > >::Expression_t pow(const Vector< T1, C1 > &l, const Vector< T2, C2 > &r)
const std::shared_ptr< OffloadVector > norm_factor_ptr_
Normalization factors.
size_type size() const
return the current size
MakeReturn< UnaryNode< FnArcTan, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t atan(const Vector< T1, C1 > &l)
void evaluateV(T x, T y, T z)
compute Ylm
int index(int l, int m) const
returns dummy: this is not used
void evaluateV(T x, T y, T z, T *XYZ) const
compute Ylm
T * data()
return the base
auto & getcXYZ() const
cXYZ accessor
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
void evaluateVGH(T x, T y, T z)
void batched_evaluateV(const OffloadArray3D &xyz, OffloadArray3D &XYZ) const
evaluate for multiple electrons and multiple pbc images
void evaluateVGHGH(T x, T y, T z)
void updateTo(size_type size=0, std::ptrdiff_t offset=0)
void resize(size_type n)
resize myData
A D-dimensional Array class based on PETE.
size_type size() const
return the physical size
CartesianTensor according to Gamess order.
SoaCartesianTensor(const int l_max, bool addsign=false)
constructor
VectorSoaContainer< T, 20 > cXYZ
composite V,Gx,Gy,Gz,[L | H00, H01, H02, H11, H12, H12]
void evaluateVGL(T x, T y, T z)
makes a table of and their gradients up to Lmax.
void batched_evaluateVGL(const OffloadArray3D &xyz, OffloadArray4D &XYZ_vgl) const
evaluate VGL for multiple electrons and multiple pbc images
static void evaluate_bare(T x, T y, T z, T *XYZ, int lmax)
compute Ylm