27#include <boost/math/constants/constants.hpp>
40template <
typename _Shell>
69 template <
typename Z = Shell>
122 const double p = a + b;
123 const double q = c + d;
124 const double alpha = p * q / (p + q);
126 const Vector<double, 3> P {E_x.centerOfMass(), E_y.centerOfMass(), E_z.centerOfMass()};
127 const Vector<double, 3> Q {E_x_.centerOfMass(), E_y_.centerOfMass(), E_z_.centerOfMass()};
134 for (
int t = 0; t <= i + j; t++) {
135 for (
int u = 0; u <= k + l; u++) {
136 for (
int v = 0; v <= m + n; v++) {
137 for (
int tau = 0; tau <= i_ + j_; tau++) {
138 for (
int mu = 0; mu <= k_ + l_; mu++) {
139 for (
int nu = 0; nu <= m_ + n_; nu++) {
141 integral += E_x(i, j, t) * E_y(k, l, u) * E_z(m, n, v) *
142 E_x_(i_, j_, tau) * E_y_(k_, l_, mu) * E_z_(m_, n_, nu) *
143 std::pow(-1, tau + mu + nu) * R(0, t + tau, u + mu, v + nu);
151 return 2 * std::pow(boost::math::constants::pi<double>(), 2.5) / (p * q * std::sqrt(p + q)) * integral;
169 template <
typename Z = Shell>
226 const double p = a + b;
227 const double q = c + d;
229 const Vector<double, 3> P {E_x.centerOfMass(), E_y.centerOfMass(), E_z.centerOfMass()};
230 const Vector<double, 3> Q {E_x_.centerOfMass(), E_y_.centerOfMass(), E_z_.centerOfMass()};
237 for (
int t = 0; t <= i + j; t++) {
238 for (
int u = 0; u <= k + l; u++) {
239 for (
int v = 0; v <= m + n; v++) {
240 for (
int tau = 0; tau <= i_ + j_; tau++) {
241 for (
int mu = 0; mu <= k_ + l_; mu++) {
242 for (
int nu = 0; nu <= m_ + n_; nu++) {
244 integral += E_x(i, j, t) * E_y(k, l, u) * E_z(m, n, v) *
245 E_x_(i_, j_, tau) * E_y_(k_, l_, mu) * E_z_(m_, n_, nu) *
246 R(0, t, u, v, tau, mu, nu);
254 return 2 * std::pow(boost::math::constants::pi<double>(), 2.5) / (p * q * std::sqrt(p + q)) *
255 std::exp(-k1.squaredNorm() / (4 * p)) * std::exp(-k2.squaredNorm() / (4 * q)) *
Definition: BaseScalarPrimitiveIntegralEngine.hpp:30
Definition: CartesianGTO.hpp:38
const Vector< double, 3 > & center() const
Definition: CartesianGTO.hpp:129
double gaussianExponent() const
Definition: CartesianGTO.hpp:139
const CartesianExponents & cartesianExponents() const
Definition: CartesianGTO.hpp:112
Definition: DoubleLondonHermiteCoulombIntegral.hpp:31
Definition: HermiteCoulombIntegral.hpp:30
Definition: LondonCartesianGTO.hpp:38
Vector< double, 3 > kVector() const
Definition: LondonCartesianGTO.cpp:45
const CartesianGTO & cartesianGTO() const
Definition: LondonCartesianGTO.hpp:89
Definition: Matrix.hpp:47
Definition: McMurchieDavidsonCoefficient.hpp:30
Definition: PrimitiveCoulombRepulsionIntegralEngine.hpp:42
enable_if_t< std::is_same< Z, LondonGTOShell >::value, IntegralScalar > calculate(const LondonCartesianGTO &left1, const LondonCartesianGTO &left2, const LondonCartesianGTO &right1, const LondonCartesianGTO &right2)
Definition: PrimitiveCoulombRepulsionIntegralEngine.hpp:170
product_t< CoulombRepulsionOperator::Scalar, typename Primitive::OutputType > IntegralScalar
Definition: PrimitiveCoulombRepulsionIntegralEngine.hpp:51
typename Shell::Primitive Primitive
Definition: PrimitiveCoulombRepulsionIntegralEngine.hpp:48
enable_if_t< std::is_same< Z, GTOShell >::value, IntegralScalar > calculate(const CartesianGTO &left1, const CartesianGTO &left2, const CartesianGTO &right1, const CartesianGTO &right2)
Definition: PrimitiveCoulombRepulsionIntegralEngine.hpp:70
_Shell Shell
Definition: PrimitiveCoulombRepulsionIntegralEngine.hpp:45
Definition: BaseOneElectronIntegralBuffer.hpp:25
typename std::enable_if< B, T >::type enable_if_t
Definition: type_traits.hpp:37
decltype(std::declval< T >() *std::declval< U >()) product_t
Definition: aliases.hpp:35
std::complex< double > complex
Definition: complex.hpp:31
@ z
Definition: CartesianDirection.hpp:30
@ x
Definition: CartesianDirection.hpp:28
@ y
Definition: CartesianDirection.hpp:29
@ alpha
Definition: Spin.hpp:28
size_t value(const CartesianDirection direction) const
Definition: CartesianExponents.hpp:116