28#include <boost/math/constants/constants.hpp>
41template <
typename _Shell>
70 quadrupole_operator {quadrupole_operator},
86 template <
typename Z = Shell>
123 return this->
calculate1D(k1_x, a, K_x, i, b, L_x, j) * S0.
calculate1D(k1_y, a, K_y, k, b, L_y, l) * S0.
calculate1D(k1_z, a, K_z, m, b, L_z, n);
128 return S1.calculate1D(k1_x, a, K_x, i, b, L_x, j) * S1.calculate1D(k1_y, a, K_y, k, b, L_y, l) * S0.
calculate1D(k1_z, a, K_z, m, b, L_z, n);
133 return S1.calculate1D(k1_x, a, K_x, i, b, L_x, j) * S0.
calculate1D(k1_y, a, K_y, k, b, L_y, l) * S1.calculate1D(k1_z, a, K_z, m, b, L_z, n);
138 return S1.calculate1D(k1_x, a, K_x, i, b, L_x, j) * S1.calculate1D(k1_y, a, K_y, k, b, L_y, l) * S0.
calculate1D(k1_z, a, K_z, m, b, L_z, n);
143 return S0.
calculate1D(k1_x, a, K_x, i, b, L_x, j) * this->
calculate1D(k1_y, a, K_y, k, b, L_y, l) * S0.
calculate1D(k1_z, a, K_z, m, b, L_z, n);
148 return S0.
calculate1D(k1_x, a, K_x, i, b, L_x, j) * S1.calculate1D(k1_y, a, K_y, k, b, L_y, l) * S1.calculate1D(k1_z, a, K_z, m, b, L_z, n);
153 return S1.calculate1D(k1_x, a, K_x, i, b, L_x, j) * S0.
calculate1D(k1_y, a, K_y, k, b, L_y, l) * S1.calculate1D(k1_z, a, K_z, m, b, L_z, n);
158 return S0.
calculate1D(k1_x, a, K_x, i, b, L_x, j) * S1.calculate1D(k1_y, a, K_y, k, b, L_y, l) * S1.calculate1D(k1_z, a, K_z, m, b, L_z, n);
163 return S0.
calculate1D(k1_x, a, K_x, i, b, L_x, j) * S0.
calculate1D(k1_y, a, K_y, k, b, L_y, l) * this->
calculate1D(k1_z, a, K_z, m, b, L_z, n);
183 template <
typename Z = Shell>
188 switch (this->component) {
210 2 * X_KC * S0.
calculate1D(k1, a, K, i + 1, b, L, j) +
211 std::pow(X_KC, 2) * S0.
calculate1D(k1, a, K, i, b, L, j);
Definition: BaseMatrixPrimitiveIntegralEngine.hpp:32
DyadicCartesianDirection component
Definition: BaseMatrixPrimitiveIntegralEngine.hpp:35
const Vector< double, 3 > & reference() const
Definition: BaseReferenceDependentOperator.hpp:66
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: ElectronicDipoleOperator.hpp:33
Definition: ElectronicQuadrupoleOperator.hpp:33
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: PrimitiveElectronicDipoleIntegralEngine.hpp:42
Definition: PrimitiveElectronicQuadrupoleIntegralEngine.hpp:43
enable_if_t< std::is_same< Z, LondonGTOShell >::value, IntegralScalar > calculate(const LondonCartesianGTO &left, const LondonCartesianGTO &right)
Definition: PrimitiveElectronicQuadrupoleIntegralEngine.hpp:87
_Shell Shell
Definition: PrimitiveElectronicQuadrupoleIntegralEngine.hpp:46
product_t< ElectronicQuadrupoleOperator::Scalar, typename Primitive::OutputType > IntegralScalar
Definition: PrimitiveElectronicQuadrupoleIntegralEngine.hpp:52
typename Shell::Primitive Primitive
Definition: PrimitiveElectronicQuadrupoleIntegralEngine.hpp:49
enable_if_t< std::is_same< Z, LondonGTOShell >::value, IntegralScalar > calculate1D(const complex k1, const double a, const double K, const int i, const double b, const double L, const int j)
Definition: PrimitiveElectronicQuadrupoleIntegralEngine.hpp:184
PrimitiveElectronicQuadrupoleIntegralEngine(const ElectronicQuadrupoleOperator &quadrupole_operator, const DyadicCartesianDirection component=DyadicCartesianDirection::xx)
Definition: PrimitiveElectronicQuadrupoleIntegralEngine.hpp:69
Definition: PrimitiveOverlapIntegralEngine.hpp:43
enable_if_t< std::is_same< Z, GTOShell >::value, IntegralScalar > calculate1D(const double a, const double K, const int i, const double b, const double L, const int j)
Definition: PrimitiveOverlapIntegralEngine.hpp:97
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
DyadicCartesianDirection
Definition: DyadicCartesianDirection.hpp:27
@ zx
Definition: DyadicCartesianDirection.hpp:34
@ xz
Definition: DyadicCartesianDirection.hpp:30
@ yy
Definition: DyadicCartesianDirection.hpp:32
@ yx
Definition: DyadicCartesianDirection.hpp:31
@ xy
Definition: DyadicCartesianDirection.hpp:29
@ xx
Definition: DyadicCartesianDirection.hpp:28
@ yz
Definition: DyadicCartesianDirection.hpp:33
@ zy
Definition: DyadicCartesianDirection.hpp:35
@ zz
Definition: DyadicCartesianDirection.hpp:36
CartesianDirection
Definition: CartesianDirection.hpp:27
@ z
Definition: CartesianDirection.hpp:30
@ x
Definition: CartesianDirection.hpp:28
@ y
Definition: CartesianDirection.hpp:29
size_t value(const CartesianDirection direction) const
Definition: CartesianExponents.hpp:116