150 const AOShell& shell_col)
const {
152 const double pi = boost::math::constants::pi<double>();
157 Index lsum = lmax_row + lmax_col;
171 const Eigen::Vector3d& pos_row = shell_row.
getPos();
172 const Eigen::Vector3d& pos_col = shell_col.
getPos();
173 const Eigen::Vector3d diff = pos_row - pos_col;
176 double distsq = diff.squaredNorm();
178 Eigen::MatrixXd cartesian = Eigen::MatrixXd::Zero(
183 Eigen::Tensor<double, 3> nuc3(nrows, ncols, lsum + 1);
184 Eigen::Tensor<double, 4> dip4(nrows, ncols, 3, lsum + 1);
185 Eigen::Tensor<double, 3> dipc(nrows, ncols, lsum + 1);
186 Eigen::Tensor<double, 4> quad4(nrows, ncols, 5, lsum + 1);
187 Eigen::MatrixXd multipole(nrows, ncols);
188 Eigen::VectorXd FmU(lsum + 3);
191 for (
const auto& gaussian_row : shell_row) {
194 const double decay_row = gaussian_row.getDecay();
196 for (
const auto& gaussian_col : shell_col) {
198 const double decay_col = gaussian_col.getDecay();
200 const double zeta = decay_row + decay_col;
201 const double fak = 0.5 / zeta;
202 const double fak2 = 2.0 * fak;
203 const double xi = decay_row * decay_col * fak2;
205 double exparg = xi * distsq;
208 if (exparg > kMaxExpArg) {
213 const Eigen::Vector3d PmA =
214 fak2 * (decay_row * pos_row + decay_col * pos_col) - pos_row;
215 const Eigen::Vector3d PmB =
216 fak2 * (decay_row * pos_row + decay_col * pos_col) - pos_col;
221 const Index rank = site.rank;
222 const double charge = site.charge;
223 const Eigen::Vector3d& dipole = site.dipole;
224 const Eigen::Matrix3d& quadrupole = site.quadrupole;
225 const Eigen::Vector3d PmC =
226 fak2 * (decay_row * pos_row + decay_col * pos_col) - site.pos;
228 const double U = zeta * PmC.squaredNorm();
234 double prefactor = 4. * sqrt(2. / pi) *
235 pow(decay_row * decay_col, .75) * fak2 *
237 for (
Index m = 0; m < lsum + 1; m++) {
238 nuc3(0, 0, m) = prefactor * FmU[m];
244 for (
Index m = 0; m < lsum; m++) {
246 PmA(0) * nuc3(0, 0, m) - PmC(0) * nuc3(0, 0, m + 1);
248 PmA(1) * nuc3(0, 0, m) - PmC(1) * nuc3(0, 0, m + 1);
250 PmA(2) * nuc3(0, 0, m) - PmC(2) * nuc3(0, 0, m + 1);
257 for (
Index m = 0; m < lsum - 1; m++) {
258 double term = fak * (nuc3(0, 0, m) - nuc3(0, 0, m + 1));
260 PmC(0) * nuc3(
Cart::x, 0, m + 1) + term;
266 PmC(1) * nuc3(
Cart::y, 0, m + 1) + term;
270 PmC(2) * nuc3(
Cart::z, 0, m + 1) + term;
277 for (
Index m = 0; m < lsum - 2; m++) {
310 for (
Index m = 0; m < lsum - 3; m++) {
360 for (
Index m = 0; m < lmax_col; m++) {
362 PmB(0) * nuc3(0, 0, m) - PmC(0) * nuc3(0, 0, m + 1);
364 PmB(1) * nuc3(0, 0, m) - PmC(1) * nuc3(0, 0, m + 1);
366 PmB(2) * nuc3(0, 0, m) - PmC(2) * nuc3(0, 0, m + 1);
372 for (
Index m = 0; m < lmax_col; m++) {
373 double term = fak * (nuc3(0, 0, m) - nuc3(0, 0, m + 1));
374 for (
Index i = 1; i < 4; i++) {
375 nuc3(i,
Cart::x, m) = PmB(0) * nuc3(i, 0, m) -
376 PmC(0) * nuc3(i, 0, m + 1) + nx[i] * term;
377 nuc3(i,
Cart::y, m) = PmB(1) * nuc3(i, 0, m) -
378 PmC(1) * nuc3(i, 0, m + 1) + ny[i] * term;
379 nuc3(i,
Cart::z, m) = PmB(2) * nuc3(i, 0, m) -
380 PmC(2) * nuc3(i, 0, m + 1) + nz[i] * term;
387 for (
Index m = 0; m < lmax_col; m++) {
388 for (
Index i = 4; i < n_orbitals[lmax_row]; i++) {
392 int ilx_i = i_less_x[i];
393 int ily_i = i_less_y[i];
394 int ilz_i = i_less_z[i];
396 PmB(0) * nuc3(i, 0, m) - PmC(0) * nuc3(i, 0, m + 1) +
397 nx_i * fak * (nuc3(ilx_i, 0, m) - nuc3(ilx_i, 0, m + 1));
399 PmB(1) * nuc3(i, 0, m) - PmC(1) * nuc3(i, 0, m + 1) +
400 ny_i * fak * (nuc3(ily_i, 0, m) - nuc3(ily_i, 0, m + 1));
402 PmB(2) * nuc3(i, 0, m) - PmC(2) * nuc3(i, 0, m + 1) +
403 nz_i * fak * (nuc3(ilz_i, 0, m) - nuc3(ilz_i, 0, m + 1));
413 for (
Index m = 0; m < lmax_col - 1; m++) {
414 double term = fak * (nuc3(0, 0, m) - nuc3(0, 0, m + 1));
416 PmC(0) * nuc3(0,
Cart::x, m + 1) + term;
422 PmC(1) * nuc3(0,
Cart::y, m + 1) + term;
426 PmC(2) * nuc3(0,
Cart::z, m + 1) + term;
431 for (
Index m = 0; m < lmax_col - 1; m++) {
432 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
436 int ilx_i = i_less_x[i];
437 int ily_i = i_less_y[i];
438 int ilz_i = i_less_z[i];
439 double term = fak * (nuc3(i, 0, m) - nuc3(i, 0, m + 1));
442 PmC(0) * nuc3(i,
Cart::x, m + 1) +
448 PmC(0) * nuc3(i,
Cart::y, m + 1) +
453 PmC(0) * nuc3(i,
Cart::z, m + 1) +
458 PmC(1) * nuc3(i,
Cart::y, m + 1) +
464 PmC(1) * nuc3(i,
Cart::z, m + 1) +
469 PmC(2) * nuc3(i,
Cart::z, m + 1) +
482 for (
Index m = 0; m < lmax_col - 2; m++) {
513 for (
Index m = 0; m < lmax_col - 2; m++) {
514 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
518 int ilx_i = i_less_x[i];
519 int ily_i = i_less_y[i];
520 int ilz_i = i_less_z[i];
589 for (
Index m = 0; m < lmax_col - 3; m++) {
636 for (
Index m = 0; m < lmax_col - 3; m++) {
637 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
641 int ilx_i = i_less_x[i];
642 int ily_i = i_less_y[i];
643 int ilz_i = i_less_z[i];
736 multipole.noalias() +=
737 charge * Eigen::Map<Eigen::MatrixXd>(nuc3.data(), nrows, ncols);
741 ContractedDipoleIntegrals(nuc3, dipc, lmax_row, lmax_col, PmA, PmB,
742 PmC, fak, 2. * zeta * prefactor, FmU,
744 multipole += Eigen::Map<Eigen::MatrixXd>(dipc.data(), nrows, ncols);
745 }
else if (rank > 1) {
748 double prefactor_dip_ = 2. * zeta * prefactor;
749 for (
Index m = 0; m < lsum + 1; m++) {
750 dip4(0, 0, 0, m) = PmC(0) * prefactor_dip_ * FmU[m + 1];
751 dip4(0, 0, 1, m) = PmC(1) * prefactor_dip_ * FmU[m + 1];
752 dip4(0, 0, 2, m) = PmC(2) * prefactor_dip_ * FmU[m + 1];
758 for (
Index m = 0; m < lsum; m++) {
759 for (
Index k = 0; k < 3; k++) {
760 dip4(
Cart::x, 0, k, m) = PmA(0) * dip4(0, 0, k, m) -
761 PmC(0) * dip4(0, 0, k, m + 1) +
762 (k == 0) * nuc3(0, 0, m + 1);
763 dip4(
Cart::y, 0, k, m) = PmA(1) * dip4(0, 0, k, m) -
764 PmC(1) * dip4(0, 0, k, m + 1) +
765 (k == 1) * nuc3(0, 0, m + 1);
766 dip4(
Cart::z, 0, k, m) = PmA(2) * dip4(0, 0, k, m) -
767 PmC(2) * dip4(0, 0, k, m + 1) +
768 (k == 2) * nuc3(0, 0, m + 1);
776 for (
Index m = 0; m < lsum - 1; m++) {
777 for (
Index k = 0; k < 3; k++) {
778 double term = fak * (dip4(0, 0, k, m) - dip4(0, 0, k, m + 1));
780 PmC(0) * dip4(
Cart::x, 0, k, m + 1) +
781 (k == 0) * nuc3(
Cart::x, 0, m + 1) +
784 PmC(0) * dip4(
Cart::y, 0, k, m + 1) +
785 (k == 0) * nuc3(
Cart::y, 0, m + 1);
787 PmC(0) * dip4(
Cart::z, 0, k, m + 1) +
788 (k == 0) * nuc3(
Cart::z, 0, m + 1);
790 PmC(1) * dip4(
Cart::y, 0, k, m + 1) +
791 (k == 1) * nuc3(
Cart::y, 0, m + 1) +
794 PmC(1) * dip4(
Cart::z, 0, k, m + 1) +
795 (k == 1) * nuc3(
Cart::z, 0, m + 1);
797 PmC(2) * dip4(
Cart::z, 0, k, m + 1) +
798 (k == 2) * nuc3(
Cart::z, 0, m + 1) +
807 for (
Index m = 0; m < lsum - 2; m++) {
808 for (
Index k = 0; k < 3; k++) {
811 PmC(0) * dip4(
Cart::xx, 0, k, m + 1) +
812 (k == 0) * nuc3(
Cart::xx, 0, m + 1) +
817 PmC(1) * dip4(
Cart::xx, 0, k, m + 1) +
818 (k == 1) * nuc3(
Cart::xx, 0, m + 1);
821 PmC(2) * dip4(
Cart::xx, 0, k, m + 1) +
822 (k == 2) * nuc3(
Cart::xx, 0, m + 1);
825 PmC(0) * dip4(
Cart::yy, 0, k, m + 1) +
826 (k == 0) * nuc3(
Cart::yy, 0, m + 1);
829 PmC(0) * dip4(
Cart::yz, 0, k, m + 1) +
830 (k == 0) * nuc3(
Cart::yz, 0, m + 1);
833 PmC(0) * dip4(
Cart::zz, 0, k, m + 1) +
834 (k == 0) * nuc3(
Cart::zz, 0, m + 1);
837 PmC(1) * dip4(
Cart::yy, 0, k, m + 1) +
838 (k == 1) * nuc3(
Cart::yy, 0, m + 1) +
843 PmC(2) * dip4(
Cart::yy, 0, k, m + 1) +
844 (k == 2) * nuc3(
Cart::yy, 0, m + 1);
847 PmC(1) * dip4(
Cart::zz, 0, k, m + 1) +
848 (k == 1) * nuc3(
Cart::zz, 0, m + 1);
851 PmC(2) * dip4(
Cart::zz, 0, k, m + 1) +
852 (k == 2) * nuc3(
Cart::zz, 0, m + 1) +
862 for (
Index m = 0; m < lsum - 3; m++) {
863 for (
Index k = 0; k < 3; k++) {
864 double term_xx = fak * (dip4(
Cart::xx, 0, k, m) -
866 double term_yy = fak * (dip4(
Cart::yy, 0, k, m) -
868 double term_zz = fak * (dip4(
Cart::zz, 0, k, m) -
873 (k == 0) * nuc3(
Cart::xxx, 0, m + 1) + 3 * term_xx;
885 (k == 0) * nuc3(
Cart::xyy, 0, m + 1) + term_yy;
893 (k == 0) * nuc3(
Cart::xzz, 0, m + 1) + term_zz;
913 (k == 1) * nuc3(
Cart::yyy, 0, m + 1) + 3 * term_yy;
921 (k == 1) * nuc3(
Cart::yzz, 0, m + 1) + term_zz;
929 (k == 2) * nuc3(
Cart::zzz, 0, m + 1) + 3 * term_zz;
938 for (
Index m = 0; m < lmax_col; m++) {
939 for (
Index k = 0; k < 3; k++) {
940 dip4(0,
Cart::x, k, m) = PmB(0) * dip4(0, 0, k, m) -
941 PmC(0) * dip4(0, 0, k, m + 1) +
942 (k == 0) * nuc3(0, 0, m + 1);
943 dip4(0,
Cart::y, k, m) = PmB(1) * dip4(0, 0, k, m) -
944 PmC(1) * dip4(0, 0, k, m + 1) +
945 (k == 1) * nuc3(0, 0, m + 1);
946 dip4(0,
Cart::z, k, m) = PmB(2) * dip4(0, 0, k, m) -
947 PmC(2) * dip4(0, 0, k, m + 1) +
948 (k == 2) * nuc3(0, 0, m + 1);
955 for (
Index m = 0; m < lmax_col; m++) {
956 for (
Index i = 1; i < 4; i++) {
957 for (
Index k = 0; k < 3; k++) {
959 fak * (dip4(0, 0, k, m) - dip4(0, 0, k, m + 1));
960 dip4(i,
Cart::x, k, m) = PmB(0) * dip4(i, 0, k, m) -
961 PmC(0) * dip4(i, 0, k, m + 1) +
962 (k == 0) * nuc3(i, 0, m + 1) +
964 dip4(i,
Cart::y, k, m) = PmB(1) * dip4(i, 0, k, m) -
965 PmC(1) * dip4(i, 0, k, m + 1) +
966 (k == 1) * nuc3(i, 0, m + 1) +
968 dip4(i,
Cart::z, k, m) = PmB(2) * dip4(i, 0, k, m) -
969 PmC(2) * dip4(i, 0, k, m + 1) +
970 (k == 2) * nuc3(i, 0, m + 1) +
979 for (
Index m = 0; m < lmax_col; m++) {
980 for (
Index i = 4; i < n_orbitals[lmax_row]; i++) {
984 int ilx_i = i_less_x[i];
985 int ily_i = i_less_y[i];
986 int ilz_i = i_less_z[i];
987 for (
Index k = 0; k < 3; k++) {
989 PmB(0) * dip4(i, 0, k, m) -
990 PmC(0) * dip4(i, 0, k, m + 1) +
991 (k == 0) * nuc3(i, 0, m + 1) +
993 (dip4(ilx_i, 0, k, m) - dip4(ilx_i, 0, k, m + 1));
995 PmB(1) * dip4(i, 0, k, m) -
996 PmC(1) * dip4(i, 0, k, m + 1) +
997 (k == 1) * nuc3(i, 0, m + 1) +
999 (dip4(ily_i, 0, k, m) - dip4(ily_i, 0, k, m + 1));
1001 PmB(2) * dip4(i, 0, k, m) -
1002 PmC(2) * dip4(i, 0, k, m + 1) +
1003 (k == 2) * nuc3(i, 0, m + 1) +
1005 (dip4(ilz_i, 0, k, m) - dip4(ilz_i, 0, k, m + 1));
1016 for (
Index m = 0; m < lmax_col - 1; m++) {
1017 for (
Index k = 0; k < 3; k++) {
1018 double term = fak * (dip4(0, 0, k, m) - dip4(0, 0, k, m + 1));
1020 PmC(0) * dip4(0,
Cart::x, k, m + 1) +
1021 (k == 0) * nuc3(0,
Cart::x, m + 1) +
1024 PmC(0) * dip4(0,
Cart::y, k, m + 1) +
1025 (k == 0) * nuc3(0,
Cart::y, m + 1);
1027 PmC(0) * dip4(0,
Cart::z, k, m + 1) +
1028 (k == 0) * nuc3(0,
Cart::z, m + 1);
1030 PmC(1) * dip4(0,
Cart::y, k, m + 1) +
1031 (k == 1) * nuc3(0,
Cart::y, m + 1) +
1034 PmC(1) * dip4(0,
Cart::z, k, m + 1) +
1035 (k == 1) * nuc3(0,
Cart::z, m + 1);
1037 PmC(2) * dip4(0,
Cart::z, k, m + 1) +
1038 (k == 2) * nuc3(0,
Cart::z, m + 1) +
1045 for (
Index m = 0; m < lmax_col - 1; m++) {
1046 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
1050 int ilx_i = i_less_x[i];
1051 int ily_i = i_less_y[i];
1052 int ilz_i = i_less_z[i];
1053 for (
Index k = 0; k < 3; k++) {
1054 double term = fak * (dip4(i, 0, k, m) - dip4(i, 0, k, m + 1));
1056 PmB(0) * dip4(i,
Cart::x, k, m) -
1057 PmC(0) * dip4(i,
Cart::x, k, m + 1) +
1058 (k == 0) * nuc3(i,
Cart::x, m + 1) +
1061 dip4(ilx_i,
Cart::x, k, m + 1)) +
1064 PmB(0) * dip4(i,
Cart::y, k, m) -
1065 PmC(0) * dip4(i,
Cart::y, k, m + 1) +
1066 (k == 0) * nuc3(i,
Cart::y, m + 1) +
1069 dip4(ilx_i,
Cart::y, k, m + 1));
1071 PmB(0) * dip4(i,
Cart::z, k, m) -
1072 PmC(0) * dip4(i,
Cart::z, k, m + 1) +
1073 (k == 0) * nuc3(i,
Cart::z, m + 1) +
1076 dip4(ilx_i,
Cart::z, k, m + 1));
1078 PmB(1) * dip4(i,
Cart::y, k, m) -
1079 PmC(1) * dip4(i,
Cart::y, k, m + 1) +
1080 (k == 1) * nuc3(i,
Cart::y, m + 1) +
1083 dip4(ily_i,
Cart::y, k, m + 1)) +
1086 PmB(1) * dip4(i,
Cart::z, k, m) -
1087 PmC(1) * dip4(i,
Cart::z, k, m + 1) +
1088 (k == 1) * nuc3(i,
Cart::z, m + 1) +
1091 dip4(ily_i,
Cart::z, k, m + 1));
1093 PmB(2) * dip4(i,
Cart::z, k, m) -
1094 PmC(2) * dip4(i,
Cart::z, k, m + 1) +
1095 (k == 2) * nuc3(i,
Cart::z, m + 1) +
1098 dip4(ilz_i,
Cart::z, k, m + 1)) +
1110 for (
Index m = 0; m < lmax_col - 2; m++) {
1111 for (
Index k = 0; k < 3; k++) {
1114 PmC(0) * dip4(0,
Cart::xx, k, m + 1) +
1115 (k == 0) * nuc3(0,
Cart::xx, m + 1) +
1120 PmC(1) * dip4(0,
Cart::xx, k, m + 1) +
1121 (k == 1) * nuc3(0,
Cart::xx, m + 1);
1124 PmC(2) * dip4(0,
Cart::xx, k, m + 1) +
1125 (k == 2) * nuc3(0,
Cart::xx, m + 1);
1128 PmC(0) * dip4(0,
Cart::yy, k, m + 1) +
1129 (k == 0) * nuc3(0,
Cart::yy, m + 1);
1132 PmC(0) * dip4(0,
Cart::yz, k, m + 1) +
1133 (k == 0) * nuc3(0,
Cart::yz, m + 1);
1136 PmC(0) * dip4(0,
Cart::zz, k, m + 1) +
1137 (k == 0) * nuc3(0,
Cart::zz, m + 1);
1140 PmC(1) * dip4(0,
Cart::yy, k, m + 1) +
1141 (k == 1) * nuc3(0,
Cart::yy, m + 1) +
1146 PmC(2) * dip4(0,
Cart::yy, k, m + 1) +
1147 (k == 2) * nuc3(0,
Cart::yy, m + 1);
1150 PmC(1) * dip4(0,
Cart::zz, k, m + 1) +
1151 (k == 1) * nuc3(0,
Cart::zz, m + 1);
1154 PmC(2) * dip4(0,
Cart::zz, k, m + 1) +
1155 (k == 2) * nuc3(0,
Cart::zz, m + 1) +
1163 for (
Index m = 0; m < lmax_col - 2; m++) {
1164 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
1168 int ilx_i = i_less_x[i];
1169 int ily_i = i_less_y[i];
1170 int ilz_i = i_less_z[i];
1171 for (
Index k = 0; k < 3; k++) {
1183 PmC(0) * dip4(i,
Cart::xx, k, m + 1) +
1184 (k == 0) * nuc3(i,
Cart::xx, m + 1) +
1191 PmC(1) * dip4(i,
Cart::xx, k, m + 1) +
1192 (k == 1) * nuc3(i,
Cart::xx, m + 1) +
1198 PmC(2) * dip4(i,
Cart::xx, k, m + 1) +
1199 (k == 2) * nuc3(i,
Cart::xx, m + 1) +
1205 PmC(0) * dip4(i,
Cart::yy, k, m + 1) +
1206 (k == 0) * nuc3(i,
Cart::yy, m + 1) +
1212 PmC(0) * dip4(i,
Cart::yz, k, m + 1) +
1213 (k == 0) * nuc3(i,
Cart::yz, m + 1) +
1219 PmC(0) * dip4(i,
Cart::zz, k, m + 1) +
1220 (k == 0) * nuc3(i,
Cart::zz, m + 1) +
1226 PmC(1) * dip4(i,
Cart::yy, k, m + 1) +
1227 (k == 1) * nuc3(i,
Cart::yy, m + 1) +
1234 PmC(2) * dip4(i,
Cart::yy, k, m + 1) +
1235 (k == 2) * nuc3(i,
Cart::yy, m + 1) +
1241 PmC(1) * dip4(i,
Cart::zz, k, m + 1) +
1242 (k == 1) * nuc3(i,
Cart::zz, m + 1) +
1248 PmC(2) * dip4(i,
Cart::zz, k, m + 1) +
1249 (k == 2) * nuc3(i,
Cart::zz, m + 1) +
1264 for (
Index m = 0; m < lmax_col - 3; m++) {
1265 for (
Index k = 0; k < 3; k++) {
1266 double term_xx = fak * (dip4(0,
Cart::xx, k, m) -
1268 double term_yy = fak * (dip4(0,
Cart::yy, k, m) -
1270 double term_zz = fak * (dip4(0,
Cart::zz, k, m) -
1275 (k == 0) * nuc3(0,
Cart::xxx, m + 1) + 3 * term_xx;
1287 (k == 0) * nuc3(0,
Cart::xyy, m + 1) + term_yy;
1295 (k == 0) * nuc3(0,
Cart::xzz, m + 1) + term_zz;
1315 (k == 1) * nuc3(0,
Cart::yyy, m + 1) + 3 * term_yy;
1323 (k == 1) * nuc3(0,
Cart::yzz, m + 1) + term_zz;
1331 (k == 2) * nuc3(0,
Cart::zzz, m + 1) + 3 * term_zz;
1337 for (
Index m = 0; m < lmax_col - 3; m++) {
1338 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
1342 int ilx_i = i_less_x[i];
1343 int ily_i = i_less_y[i];
1344 int ilz_i = i_less_z[i];
1345 for (
Index k = 0; k < 3; k++) {
1346 double term_xx = fak * (dip4(i,
Cart::xx, k, m) -
1348 double term_yy = fak * (dip4(i,
Cart::yy, k, m) -
1350 double term_zz = fak * (dip4(i,
Cart::zz, k, m) -
1470 multipole += dipole.x() *
1471 Eigen::Map<Eigen::MatrixXd>(dip4.data(), nrows, ncols);
1472 size_t offset = nrows * ncols;
1473 multipole += dipole.y() * Eigen::Map<Eigen::MatrixXd>(
1474 dip4.data() + offset, nrows, ncols);
1475 multipole += dipole.z() * Eigen::Map<Eigen::MatrixXd>(
1476 dip4.data() + 2 * offset, nrows, ncols);
1480 double fact = 1. / 3.;
1481 std::array<double, 5> fac0 = {fact, fact, 0., 2. * fact, 0.};
1482 std::array<double, 5> fac1 = {fact, 0., fact, 0., 2. * fact};
1483 std::array<double, 5> fac2 = {0., fact, fact, -2. * fact,
1486 std::array<int, 5> ind0 = {1, 2, 0, 0, 0};
1487 std::array<int, 5> ind1 = {0, 0, 2, 0, 1};
1488 std::array<int, 5> ind2 = {0, 0, 1, 2, 2};
1491 double prefactor_quad = (4. * zeta * zeta * prefactor) / 3.;
1492 for (
Index m = 0; m < lsum + 1; m++) {
1493 quad4(0, 0, 0, m) = PmC(0) * PmC(1) * prefactor_quad * FmU[m + 2];
1494 quad4(0, 0, 1, m) = PmC(0) * PmC(2) * prefactor_quad * FmU[m + 2];
1495 quad4(0, 0, 2, m) = PmC(1) * PmC(2) * prefactor_quad * FmU[m + 2];
1496 quad4(0, 0, 3, m) = (PmC(0) * PmC(0) - PmC(2) * PmC(2)) *
1497 prefactor_quad * FmU[m + 2];
1498 quad4(0, 0, 4, m) = (PmC(1) * PmC(1) - PmC(2) * PmC(2)) *
1499 prefactor_quad * FmU[m + 2];
1505 for (
Index m = 0; m < lsum; m++) {
1506 for (
Index k = 0; k < 5; k++) {
1508 PmA(0) * quad4(0, 0, k, m) -
1509 PmC(0) * quad4(0, 0, k, m + 1) +
1510 fac0[k] * dip4(0, 0, ind0[k], m + 1);
1512 PmA(1) * quad4(0, 0, k, m) -
1513 PmC(1) * quad4(0, 0, k, m + 1) +
1514 fac1[k] * dip4(0, 0, ind1[k], m + 1);
1516 PmA(2) * quad4(0, 0, k, m) -
1517 PmC(2) * quad4(0, 0, k, m + 1) +
1518 fac2[k] * dip4(0, 0, ind2[k], m + 1);
1526 for (
Index m = 0; m < lsum - 1; m++) {
1527 for (
Index k = 0; k < 5; k++) {
1529 fak * (quad4(0, 0, k, m) - quad4(0, 0, k, m + 1));
1531 PmA(0) * quad4(
Cart::x, 0, k, m) -
1532 PmC(0) * quad4(
Cart::x, 0, k, m + 1) +
1533 fac0[k] * dip4(
Cart::x, 0, ind0[k], m + 1) + term;
1535 PmA(0) * quad4(
Cart::y, 0, k, m) -
1536 PmC(0) * quad4(
Cart::y, 0, k, m + 1) +
1537 fac0[k] * dip4(
Cart::y, 0, ind0[k], m + 1);
1539 PmA(0) * quad4(
Cart::z, 0, k, m) -
1540 PmC(0) * quad4(
Cart::z, 0, k, m + 1) +
1541 fac0[k] * dip4(
Cart::z, 0, ind0[k], m + 1);
1543 PmA(1) * quad4(
Cart::y, 0, k, m) -
1544 PmC(1) * quad4(
Cart::y, 0, k, m + 1) +
1545 fac1[k] * dip4(
Cart::y, 0, ind1[k], m + 1) + term;
1547 PmA(1) * quad4(
Cart::z, 0, k, m) -
1548 PmC(1) * quad4(
Cart::z, 0, k, m + 1) +
1549 fac1[k] * dip4(
Cart::z, 0, ind1[k], m + 1);
1551 PmA(2) * quad4(
Cart::z, 0, k, m) -
1552 PmC(2) * quad4(
Cart::z, 0, k, m + 1) +
1553 fac2[k] * dip4(
Cart::z, 0, ind2[k], m + 1) + term;
1561 for (
Index m = 0; m < lsum - 2; m++) {
1562 for (
Index k = 0; k < 5; k++) {
1564 PmA(0) * quad4(
Cart::xx, 0, k, m) -
1565 PmC(0) * quad4(
Cart::xx, 0, k, m + 1) +
1566 fac0[k] * dip4(
Cart::xx, 0, ind0[k], m + 1) +
1571 PmA(1) * quad4(
Cart::xx, 0, k, m) -
1572 PmC(1) * quad4(
Cart::xx, 0, k, m + 1) +
1573 fac1[k] * dip4(
Cart::xx, 0, ind1[k], m + 1);
1575 PmA(2) * quad4(
Cart::xx, 0, k, m) -
1576 PmC(2) * quad4(
Cart::xx, 0, k, m + 1) +
1577 fac2[k] * dip4(
Cart::xx, 0, ind2[k], m + 1);
1579 PmA(0) * quad4(
Cart::yy, 0, k, m) -
1580 PmC(0) * quad4(
Cart::yy, 0, k, m + 1) +
1581 fac0[k] * dip4(
Cart::yy, 0, ind0[k], m + 1);
1583 PmA(0) * quad4(
Cart::yz, 0, k, m) -
1584 PmC(0) * quad4(
Cart::yz, 0, k, m + 1) +
1585 fac0[k] * dip4(
Cart::yz, 0, ind0[k], m + 1);
1587 PmA(0) * quad4(
Cart::zz, 0, k, m) -
1588 PmC(0) * quad4(
Cart::zz, 0, k, m + 1) +
1589 fac0[k] * dip4(
Cart::zz, 0, ind0[k], m + 1);
1591 PmA(1) * quad4(
Cart::yy, 0, k, m) -
1592 PmC(1) * quad4(
Cart::yy, 0, k, m + 1) +
1593 fac1[k] * dip4(
Cart::yy, 0, ind1[k], m + 1) +
1598 PmA(2) * quad4(
Cart::yy, 0, k, m) -
1599 PmC(2) * quad4(
Cart::yy, 0, k, m + 1) +
1600 fac2[k] * dip4(
Cart::yy, 0, ind2[k], m + 1);
1602 PmA(1) * quad4(
Cart::zz, 0, k, m) -
1603 PmC(1) * quad4(
Cart::zz, 0, k, m + 1) +
1604 fac1[k] * dip4(
Cart::zz, 0, ind1[k], m + 1);
1606 PmA(2) * quad4(
Cart::zz, 0, k, m) -
1607 PmC(2) * quad4(
Cart::zz, 0, k, m + 1) +
1608 fac2[k] * dip4(
Cart::zz, 0, ind2[k], m + 1) +
1619 for (
Index m = 0; m < lsum - 3; m++) {
1620 for (
Index k = 0; k < 5; k++) {
1621 double term_xx = fak * (quad4(
Cart::xx, 0, k, m) -
1623 double term_yy = fak * (quad4(
Cart::yy, 0, k, m) -
1625 double term_zz = fak * (quad4(
Cart::zz, 0, k, m) -
1629 PmC(0) * quad4(
Cart::xxx, 0, k, m + 1) +
1630 fac0[k] * dip4(
Cart::xxx, 0, ind0[k], m + 1) +
1634 PmC(1) * quad4(
Cart::xxx, 0, k, m + 1) +
1635 fac1[k] * dip4(
Cart::xxx, 0, ind1[k], m + 1);
1638 PmC(2) * quad4(
Cart::xxx, 0, k, m + 1) +
1639 fac2[k] * dip4(
Cart::xxx, 0, ind2[k], m + 1);
1642 PmC(0) * quad4(
Cart::xyy, 0, k, m + 1) +
1643 fac0[k] * dip4(
Cart::xyy, 0, ind0[k], m + 1) + term_yy;
1646 PmC(1) * quad4(
Cart::xxz, 0, k, m + 1) +
1647 fac1[k] * dip4(
Cart::xxz, 0, ind1[k], m + 1);
1650 PmC(0) * quad4(
Cart::xzz, 0, k, m + 1) +
1651 fac0[k] * dip4(
Cart::xzz, 0, ind0[k], m + 1) + term_zz;
1654 PmC(0) * quad4(
Cart::yyy, 0, k, m + 1) +
1655 fac0[k] * dip4(
Cart::yyy, 0, ind0[k], m + 1);
1658 PmC(0) * quad4(
Cart::yyz, 0, k, m + 1) +
1659 fac0[k] * dip4(
Cart::yyz, 0, ind0[k], m + 1);
1662 PmC(0) * quad4(
Cart::yzz, 0, k, m + 1) +
1663 fac0[k] * dip4(
Cart::yzz, 0, ind0[k], m + 1);
1666 PmC(0) * quad4(
Cart::zzz, 0, k, m + 1) +
1667 fac0[k] * dip4(
Cart::zzz, 0, ind0[k], m + 1);
1670 PmC(1) * quad4(
Cart::yyy, 0, k, m + 1) +
1671 fac1[k] * dip4(
Cart::yyy, 0, ind1[k], m + 1) +
1675 PmC(2) * quad4(
Cart::yyy, 0, k, m + 1) +
1676 fac2[k] * dip4(
Cart::yyy, 0, ind2[k], m + 1);
1679 PmC(1) * quad4(
Cart::yzz, 0, k, m + 1) +
1680 fac1[k] * dip4(
Cart::yzz, 0, ind1[k], m + 1) + term_zz;
1683 PmC(1) * quad4(
Cart::zzz, 0, k, m + 1) +
1684 fac1[k] * dip4(
Cart::zzz, 0, ind1[k], m + 1);
1687 PmC(2) * quad4(
Cart::zzz, 0, k, m + 1) +
1688 fac2[k] * dip4(
Cart::zzz, 0, ind2[k], m + 1) +
1698 for (
Index m = 0; m < lmax_col; m++) {
1699 for (
Index k = 0; k < 5; k++) {
1701 PmB(0) * quad4(0, 0, k, m) -
1702 PmC(0) * quad4(0, 0, k, m + 1) +
1703 fac0[k] * dip4(0, 0, ind0[k], m + 1);
1705 PmB(1) * quad4(0, 0, k, m) -
1706 PmC(1) * quad4(0, 0, k, m + 1) +
1707 fac1[k] * dip4(0, 0, ind1[k], m + 1);
1709 PmB(2) * quad4(0, 0, k, m) -
1710 PmC(2) * quad4(0, 0, k, m + 1) +
1711 fac2[k] * dip4(0, 0, ind2[k], m + 1);
1718 for (
Index m = 0; m < lmax_col; m++) {
1719 for (
Index i = 1; i < 4; i++) {
1720 for (
Index k = 0; k < 5; k++) {
1722 fak * (quad4(0, 0, k, m) - quad4(0, 0, k, m + 1));
1724 PmB(0) * quad4(i, 0, k, m) -
1725 PmC(0) * quad4(i, 0, k, m + 1) +
1726 fac0[k] * dip4(i, 0, ind0[k], m + 1) + nx[i] * term;
1728 PmB(1) * quad4(i, 0, k, m) -
1729 PmC(1) * quad4(i, 0, k, m + 1) +
1730 fac1[k] * dip4(i, 0, ind1[k], m + 1) + ny[i] * term;
1732 PmB(2) * quad4(i, 0, k, m) -
1733 PmC(2) * quad4(i, 0, k, m + 1) +
1734 fac2[k] * dip4(i, 0, ind2[k], m + 1) + nz[i] * term;
1742 for (
Index m = 0; m < lmax_col; m++) {
1743 for (
Index i = 4; i < n_orbitals[lmax_row]; i++) {
1747 int ilx_i = i_less_x[i];
1748 int ily_i = i_less_y[i];
1749 int ilz_i = i_less_z[i];
1750 for (
Index k = 0; k < 5; k++) {
1752 PmB(0) * quad4(i, 0, k, m) -
1753 PmC(0) * quad4(i, 0, k, m + 1) +
1754 fac0[k] * dip4(i, 0, ind0[k], m + 1) +
1756 (quad4(ilx_i, 0, k, m) - quad4(ilx_i, 0, k, m + 1));
1758 PmB(1) * quad4(i, 0, k, m) -
1759 PmC(1) * quad4(i, 0, k, m + 1) +
1760 fac1[k] * dip4(i, 0, ind1[k], m + 1) +
1762 (quad4(ily_i, 0, k, m) - quad4(ily_i, 0, k, m + 1));
1764 PmB(2) * quad4(i, 0, k, m) -
1765 PmC(2) * quad4(i, 0, k, m + 1) +
1766 fac2[k] * dip4(i, 0, ind2[k], m + 1) +
1768 (quad4(ilz_i, 0, k, m) - quad4(ilz_i, 0, k, m + 1));
1779 for (
Index m = 0; m < lmax_col - 1; m++) {
1780 for (
Index k = 0; k < 5; k++) {
1782 fak * (quad4(0, 0, k, m) - quad4(0, 0, k, m + 1));
1784 PmB(0) * quad4(0,
Cart::x, k, m) -
1785 PmC(0) * quad4(0,
Cart::x, k, m + 1) +
1786 fac0[k] * dip4(0,
Cart::x, ind0[k], m + 1) + term;
1788 PmB(0) * quad4(0,
Cart::y, k, m) -
1789 PmC(0) * quad4(0,
Cart::y, k, m + 1) +
1790 fac0[k] * dip4(0,
Cart::y, ind0[k], m + 1);
1792 PmB(0) * quad4(0,
Cart::z, k, m) -
1793 PmC(0) * quad4(0,
Cart::z, k, m + 1) +
1794 fac0[k] * dip4(0,
Cart::z, ind0[k], m + 1);
1796 PmB(1) * quad4(0,
Cart::y, k, m) -
1797 PmC(1) * quad4(0,
Cart::y, k, m + 1) +
1798 fac1[k] * dip4(0,
Cart::y, ind1[k], m + 1) + term;
1800 PmB(1) * quad4(0,
Cart::z, k, m) -
1801 PmC(1) * quad4(0,
Cart::z, k, m + 1) +
1802 fac1[k] * dip4(0,
Cart::z, ind1[k], m + 1);
1804 PmB(2) * quad4(0,
Cart::z, k, m) -
1805 PmC(2) * quad4(0,
Cart::z, k, m + 1) +
1806 fac2[k] * dip4(0,
Cart::z, ind2[k], m + 1) + term;
1812 for (
Index m = 0; m < lmax_col - 1; m++) {
1813 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
1817 int ilx_i = i_less_x[i];
1818 int ily_i = i_less_y[i];
1819 int ilz_i = i_less_z[i];
1820 for (
Index k = 0; k < 5; k++) {
1822 fak * (quad4(i, 0, k, m) - quad4(i, 0, k, m + 1));
1824 PmB(0) * quad4(i,
Cart::x, k, m) -
1825 PmC(0) * quad4(i,
Cart::x, k, m + 1) +
1826 fac0[k] * dip4(i,
Cart::x, ind0[k], m + 1) +
1828 (quad4(ilx_i,
Cart::x, k, m) -
1829 quad4(ilx_i,
Cart::x, k, m + 1)) +
1832 PmB(0) * quad4(i,
Cart::y, k, m) -
1833 PmC(0) * quad4(i,
Cart::y, k, m + 1) +
1834 fac0[k] * dip4(i,
Cart::y, ind0[k], m + 1) +
1836 (quad4(ilx_i,
Cart::y, k, m) -
1837 quad4(ilx_i,
Cart::y, k, m + 1));
1839 PmB(0) * quad4(i,
Cart::z, k, m) -
1840 PmC(0) * quad4(i,
Cart::z, k, m + 1) +
1841 fac0[k] * dip4(i,
Cart::z, ind0[k], m + 1) +
1843 (quad4(ilx_i,
Cart::z, k, m) -
1844 quad4(ilx_i,
Cart::z, k, m + 1));
1846 PmB(1) * quad4(i,
Cart::y, k, m) -
1847 PmC(1) * quad4(i,
Cart::y, k, m + 1) +
1848 fac1[k] * dip4(i,
Cart::y, ind1[k], m + 1) +
1850 (quad4(ily_i,
Cart::y, k, m) -
1851 quad4(ily_i,
Cart::y, k, m + 1)) +
1854 PmB(1) * quad4(i,
Cart::z, k, m) -
1855 PmC(1) * quad4(i,
Cart::z, k, m + 1) +
1856 fac1[k] * dip4(i,
Cart::z, ind1[k], m + 1) +
1858 (quad4(ily_i,
Cart::z, k, m) -
1859 quad4(ily_i,
Cart::z, k, m + 1));
1861 PmB(2) * quad4(i,
Cart::z, k, m) -
1862 PmC(2) * quad4(i,
Cart::z, k, m + 1) +
1863 fac2[k] * dip4(i,
Cart::z, ind2[k], m + 1) +
1865 (quad4(ilz_i,
Cart::z, k, m) -
1866 quad4(ilz_i,
Cart::z, k, m + 1)) +
1878 for (
Index m = 0; m < lmax_col - 2; m++) {
1879 for (
Index k = 0; k < 5; k++) {
1881 PmB(0) * quad4(0,
Cart::xx, k, m) -
1882 PmC(0) * quad4(0,
Cart::xx, k, m + 1) +
1883 fac0[k] * dip4(0,
Cart::xx, ind0[k], m + 1) +
1888 PmB(1) * quad4(0,
Cart::xx, k, m) -
1889 PmC(1) * quad4(0,
Cart::xx, k, m + 1) +
1890 fac1[k] * dip4(0,
Cart::xx, ind1[k], m + 1);
1892 PmB(2) * quad4(0,
Cart::xx, k, m) -
1893 PmC(2) * quad4(0,
Cart::xx, k, m + 1) +
1894 fac2[k] * dip4(0,
Cart::xx, ind2[k], m + 1);
1896 PmB(0) * quad4(0,
Cart::yy, k, m) -
1897 PmC(0) * quad4(0,
Cart::yy, k, m + 1) +
1898 fac0[k] * dip4(0,
Cart::yy, ind0[k], m + 1);
1900 PmB(0) * quad4(0,
Cart::yz, k, m) -
1901 PmC(0) * quad4(0,
Cart::yz, k, m + 1) +
1902 fac0[k] * dip4(0,
Cart::yz, ind0[k], m + 1);
1904 PmB(0) * quad4(0,
Cart::zz, k, m) -
1905 PmC(0) * quad4(0,
Cart::zz, k, m + 1) +
1906 fac0[k] * dip4(0,
Cart::zz, ind0[k], m + 1);
1908 PmB(1) * quad4(0,
Cart::yy, k, m) -
1909 PmC(1) * quad4(0,
Cart::yy, k, m + 1) +
1910 fac1[k] * dip4(0,
Cart::yy, ind1[k], m + 1) +
1915 PmB(2) * quad4(0,
Cart::yy, k, m) -
1916 PmC(2) * quad4(0,
Cart::yy, k, m + 1) +
1917 fac2[k] * dip4(0,
Cart::yy, ind2[k], m + 1);
1919 PmB(1) * quad4(0,
Cart::zz, k, m) -
1920 PmC(1) * quad4(0,
Cart::zz, k, m + 1) +
1921 fac1[k] * dip4(0,
Cart::zz, ind1[k], m + 1);
1923 PmB(2) * quad4(0,
Cart::zz, k, m) -
1924 PmC(2) * quad4(0,
Cart::zz, k, m + 1) +
1925 fac2[k] * dip4(0,
Cart::zz, ind2[k], m + 1) +
1934 for (
Index m = 0; m < lmax_col - 2; m++) {
1935 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
1939 int ilx_i = i_less_x[i];
1940 int ily_i = i_less_y[i];
1941 int ilz_i = i_less_z[i];
1942 for (
Index k = 0; k < 5; k++) {
1953 PmB(0) * quad4(i,
Cart::xx, k, m) -
1954 PmC(0) * quad4(i,
Cart::xx, k, m + 1) +
1955 fac0[k] * dip4(i,
Cart::xx, ind0[k], m + 1) +
1958 quad4(ilx_i,
Cart::xx, k, m + 1)) +
1961 PmB(1) * quad4(i,
Cart::xx, k, m) -
1962 PmC(1) * quad4(i,
Cart::xx, k, m + 1) +
1963 fac1[k] * dip4(i,
Cart::xx, ind1[k], m + 1) +
1968 PmB(2) * quad4(i,
Cart::xx, k, m) -
1969 PmC(2) * quad4(i,
Cart::xx, k, m + 1) +
1970 fac2[k] * dip4(i,
Cart::xx, ind2[k], m + 1) +
1975 PmB(0) * quad4(i,
Cart::yy, k, m) -
1976 PmC(0) * quad4(i,
Cart::yy, k, m + 1) +
1977 fac0[k] * dip4(i,
Cart::yy, ind0[k], m + 1) +
1982 PmB(0) * quad4(i,
Cart::yz, k, m) -
1983 PmC(0) * quad4(i,
Cart::yz, k, m + 1) +
1984 fac0[k] * dip4(i,
Cart::yz, ind0[k], m + 1) +
1989 PmB(0) * quad4(i,
Cart::zz, k, m) -
1990 PmC(0) * quad4(i,
Cart::zz, k, m + 1) +
1991 fac0[k] * dip4(i,
Cart::zz, ind0[k], m + 1) +
1996 PmB(1) * quad4(i,
Cart::yy, k, m) -
1997 PmC(1) * quad4(i,
Cart::yy, k, m + 1) +
1998 fac1[k] * dip4(i,
Cart::yy, ind1[k], m + 1) +
2001 quad4(ily_i,
Cart::yy, k, m + 1)) +
2004 PmB(2) * quad4(i,
Cart::yy, k, m) -
2005 PmC(2) * quad4(i,
Cart::yy, k, m + 1) +
2006 fac2[k] * dip4(i,
Cart::yy, ind2[k], m + 1) +
2011 PmB(1) * quad4(i,
Cart::zz, k, m) -
2012 PmC(1) * quad4(i,
Cart::zz, k, m + 1) +
2013 fac1[k] * dip4(i,
Cart::zz, ind1[k], m + 1) +
2018 PmB(2) * quad4(i,
Cart::zz, k, m) -
2019 PmC(2) * quad4(i,
Cart::zz, k, m + 1) +
2020 fac2[k] * dip4(i,
Cart::zz, ind2[k], m + 1) +
2023 quad4(ilz_i,
Cart::zz, k, m + 1)) +
2035 for (
Index m = 0; m < lmax_col - 3; m++) {
2036 for (
Index k = 0; k < 5; k++) {
2037 double term_xx = fak * (quad4(0,
Cart::xx, k, m) -
2039 double term_yy = fak * (quad4(0,
Cart::yy, k, m) -
2041 double term_zz = fak * (quad4(0,
Cart::zz, k, m) -
2045 PmC(0) * quad4(0,
Cart::xxx, k, m + 1) +
2046 fac0[k] * dip4(0,
Cart::xxx, ind0[k], m + 1) +
2050 PmC(1) * quad4(0,
Cart::xxx, k, m + 1) +
2051 fac1[k] * dip4(0,
Cart::xxx, ind1[k], m + 1);
2054 PmC(2) * quad4(0,
Cart::xxx, k, m + 1) +
2055 fac2[k] * dip4(0,
Cart::xxx, ind2[k], m + 1);
2058 PmC(0) * quad4(0,
Cart::xyy, k, m + 1) +
2059 fac0[k] * dip4(0,
Cart::xyy, ind0[k], m + 1) + term_yy;
2062 PmC(1) * quad4(0,
Cart::xxz, k, m + 1) +
2063 fac1[k] * dip4(0,
Cart::xxz, ind1[k], m + 1);
2066 PmC(0) * quad4(0,
Cart::xzz, k, m + 1) +
2067 fac0[k] * dip4(0,
Cart::xzz, ind0[k], m + 1) + term_zz;
2070 PmC(0) * quad4(0,
Cart::yyy, k, m + 1) +
2071 fac0[k] * dip4(0,
Cart::yyy, ind0[k], m + 1);
2074 PmC(0) * quad4(0,
Cart::yyz, k, m + 1) +
2075 fac0[k] * dip4(0,
Cart::yyz, ind0[k], m + 1);
2078 PmC(0) * quad4(0,
Cart::yzz, k, m + 1) +
2079 fac0[k] * dip4(0,
Cart::yzz, ind0[k], m + 1);
2082 PmC(0) * quad4(0,
Cart::zzz, k, m + 1) +
2083 fac0[k] * dip4(0,
Cart::zzz, ind0[k], m + 1);
2086 PmC(1) * quad4(0,
Cart::yyy, k, m + 1) +
2087 fac1[k] * dip4(0,
Cart::yyy, ind1[k], m + 1) +
2091 PmC(2) * quad4(0,
Cart::yyy, k, m + 1) +
2092 fac2[k] * dip4(0,
Cart::yyy, ind2[k], m + 1);
2095 PmC(1) * quad4(0,
Cart::yzz, k, m + 1) +
2096 fac1[k] * dip4(0,
Cart::yzz, ind1[k], m + 1) + term_zz;
2099 PmC(1) * quad4(0,
Cart::zzz, k, m + 1) +
2100 fac1[k] * dip4(0,
Cart::zzz, ind1[k], m + 1);
2103 PmC(2) * quad4(0,
Cart::zzz, k, m + 1) +
2104 fac2[k] * dip4(0,
Cart::zzz, ind2[k], m + 1) +
2111 for (
Index m = 0; m < lmax_col - 3; m++) {
2112 for (
Index i = 1; i < n_orbitals[lmax_row]; i++) {
2116 int ilx_i = i_less_x[i];
2117 int ily_i = i_less_y[i];
2118 int ilz_i = i_less_z[i];
2119 for (
Index k = 0; k < 5; k++) {
2120 double term_xx = fak * (quad4(i,
Cart::xx, k, m) -
2122 double term_yy = fak * (quad4(i,
Cart::yy, k, m) -
2124 double term_zz = fak * (quad4(i,
Cart::zz, k, m) -
2128 PmC(0) * quad4(i,
Cart::xxx, k, m + 1) +
2129 fac0[k] * dip4(i,
Cart::xxx, ind0[k], m + 1) +
2136 PmC(1) * quad4(i,
Cart::xxx, k, m + 1) +
2137 fac1[k] * dip4(i,
Cart::xxx, ind1[k], m + 1) +
2143 PmC(2) * quad4(i,
Cart::xxx, k, m + 1) +
2144 fac2[k] * dip4(i,
Cart::xxx, ind2[k], m + 1) +
2150 PmC(0) * quad4(i,
Cart::xyy, k, m + 1) +
2151 fac0[k] * dip4(i,
Cart::xyy, ind0[k], m + 1) +
2158 PmC(1) * quad4(i,
Cart::xxz, k, m + 1) +
2159 fac1[k] * dip4(i,
Cart::xxz, ind1[k], m + 1) +
2165 PmC(0) * quad4(i,
Cart::xzz, k, m + 1) +
2166 fac0[k] * dip4(i,
Cart::xzz, ind0[k], m + 1) +
2173 PmC(0) * quad4(i,
Cart::yyy, k, m + 1) +
2174 fac0[k] * dip4(i,
Cart::yyy, ind0[k], m + 1) +
2180 PmC(0) * quad4(i,
Cart::yyz, k, m + 1) +
2181 fac0[k] * dip4(i,
Cart::yyz, ind0[k], m + 1) +
2187 PmC(0) * quad4(i,
Cart::yzz, k, m + 1) +
2188 fac0[k] * dip4(i,
Cart::yzz, ind0[k], m + 1) +
2194 PmC(0) * quad4(i,
Cart::zzz, k, m + 1) +
2195 fac0[k] * dip4(i,
Cart::zzz, ind0[k], m + 1) +
2201 PmC(1) * quad4(i,
Cart::yyy, k, m + 1) +
2202 fac1[k] * dip4(i,
Cart::yyy, ind1[k], m + 1) +
2209 PmC(2) * quad4(i,
Cart::yyy, k, m + 1) +
2210 fac2[k] * dip4(i,
Cart::yyy, ind2[k], m + 1) +
2216 PmC(1) * quad4(i,
Cart::yzz, k, m + 1) +
2217 fac1[k] * dip4(i,
Cart::yzz, ind1[k], m + 1) +
2224 PmC(1) * quad4(i,
Cart::zzz, k, m + 1) +
2225 fac1[k] * dip4(i,
Cart::zzz, ind1[k], m + 1) +
2231 PmC(2) * quad4(i,
Cart::zzz, k, m + 1) +
2232 fac2[k] * dip4(i,
Cart::zzz, ind2[k], m + 1) +
2244 multipole += quadrupole(0, 1) * Eigen::Map<Eigen::MatrixXd>(
2245 quad4.data(), nrows, ncols);
2247 quadrupole(0, 2) * Eigen::Map<Eigen::MatrixXd>(
2248 quad4.data() + offset, nrows, ncols);
2250 quadrupole(1, 2) * Eigen::Map<Eigen::MatrixXd>(
2251 quad4.data() + 2 * offset, nrows, ncols);
2252 multipole += 0.5 * quadrupole(0, 0) *
2253 Eigen::Map<Eigen::MatrixXd>(quad4.data() + 3 * offset,
2255 multipole += 0.5 * quadrupole(1, 1) *
2256 Eigen::Map<Eigen::MatrixXd>(quad4.data() + 4 * offset,
2267 shell_col.getCartesianNumFunc());