61template <
typename _ExpansionScalar,
typename _Shell>
92 std::declval<Primitive>()(std::declval<Vector<double, 3>>())
150 template <
typename FQOneElectronOperator,
typename Z = Shell>
158 ResultOperator op {one_op_par};
171 template <
typename Z = Shell>
180 for (
size_t i = 0; i < g_par.dimension(0); i++) {
181 for (
size_t j = 0; j < g_par.dimension(1); j++) {
182 for (
size_t k = 0; k < g_par.dimension(2); k++) {
183 for (
size_t l = 0; l < g_par.dimension(3); l++) {
184 g(i, j, k, l) = g_par(i, j, k, l);
190 ResultOperator op {g};
207 template <
typename Z = Shell>
213 auto primitive_engine = GQCP::IntegralEngine::InHouse<GTOShell>(fq_one_op);
216 std::array<SquareMatrix<ResultScalar>, 3> one_op_par_square;
217 for (
size_t i = 0; i < 3; i++) {
221 ResultOperator op {one_op_par_square};
234 template <
typename Z = Shell>
240 auto primitive_engine = GQCP::IntegralEngine::InHouse<GTOShell>(fq_one_op);
243 std::array<SquareMatrix<ResultScalar>, 3> one_op_par_square;
244 for (
size_t i = 0; i < 3; i++) {
248 ResultOperator op {one_op_par_square};
268 for (
size_t p = 0; p < K; p++) {
269 for (
size_t q = 0; q < K; q++) {
270 rho_par(p, q) = phi[p] * phi[q];
294 std::vector<SquareMatrix<CurrentDensityMatrixElement<ExpansionScalar, CartesianGTO>>> j_par_vector {};
295 for (
size_t i = 0; i < 3; i++) {
298 for (
size_t p = 0; p < K; p++) {
299 for (
size_t q = 0; q < K; q++) {
304 j_par_vector.push_back(j_i);
322 template <
typename FQOneElectronOperator,
typename Z = Shell>
327 using Vectorizer =
typename FQOneElectronOperator::Vectorizer;
329 const auto N = FQOneElectronOperator::NumberOfComponents;
330 const auto& vectorizer = FQOneElectronOperator::vectorizer;
340 auto engine = GQCP::IntegralEngine::InHouse<GQCP::LondonGTOShell>(fq_one_op);
345 std::array<SquareMatrix<ResultScalar>, N> fs;
346 for (
size_t i = 0; i < N; i++) {
353 ResultOperator op {array};
366 template <
typename Z = Shell>
370 const auto L = this->
quantize(op.angularMomentum());
371 const auto& B = op.magneticField().strength();
372 return 0.5 * L.dot(B);
383 template <
typename Z = Shell>
391 const auto Q = this->
quantize(op.electronicQuadrupole()).allParameters();
392 const auto& B = op.magneticField().strength();
408 (std::pow(B_x, 2) + std::pow(B_z, 2)) * Q_yy +
409 (std::pow(B_x, 2) + std::pow(B_y, 2)) * Q_zz -
410 2 * B_x * B_y * Q_xy -
411 2 * B_x * B_z * Q_xz -
412 2 * B_y * B_z * Q_yz);
414 return ResultOperator {D_par};
425 template <
typename Z = Shell>
437 for (
size_t i = 0; i < g_par.dimension(0); i++) {
438 for (
size_t j = 0; j < g_par.dimension(1); j++) {
439 for (
size_t k = 0; k < g_par.dimension(2); k++) {
440 for (
size_t l = 0; l < g_par.dimension(3); l++) {
441 g(i, j, k, l) = g_par(i, j, k, l);
447 ResultOperator op {g};
460 template <
typename Z = Shell>
508 const auto&
C = this->
C;
512 std::vector<SpatialOrbital> spatial_orbitals;
518 for (
size_t mu = 0; mu < basis_functions.size(); mu++) {
520 const auto& function = basis_functions[mu];
521 spatial_orbital.append(coefficient, function);
524 spatial_orbitals.push_back(spatial_orbital);
527 return spatial_orbitals;
539 std::vector<GQCP::Vector<SpatialOrbitalDerivative, 3>> spatial_orbital_gradients {K};
540 for (
size_t m = 0; m < 3; m++) {
541 for (
size_t p = 0; p < K; p++) {
542 const auto& spatial_orbital = spatial_orbitals[p];
545 const auto& expansion_coefficients = spatial_orbital.coefficients();
546 const auto& basis_functions = spatial_orbital.functions();
548 std::vector<Vector<BasisFunctionDerivative, 3>> basis_function_gradients {K};
549 for (
size_t mu = 0; mu < K; mu++) {
550 const auto& expansion_coefficient = expansion_coefficients[mu];
551 const auto& basis_function = basis_functions[mu];
552 const auto contraction_length = basis_function.length();
555 const auto& contraction_coefficients = basis_function.coefficients();
556 const auto& primitives = basis_function.functions();
558 for (
size_t d = 0; d < contraction_length; d++) {
559 const auto& contraction_coefficient = contraction_coefficients[d];
560 const auto primitive_gradient = primitives[d].calculatePositionGradient();
561 basis_function_gradients[mu](m).append(contraction_coefficient, primitive_gradient(m));
564 spatial_orbital_gradients[p](m).append(expansion_coefficient, basis_function_gradients[mu](m));
569 return spatial_orbital_gradients;
576 std::vector<Spinor<ExpansionScalar, BasisFunction>>
spinOrbitals()
const {
581 std::vector<Spinor<ExpansionScalar, BasisFunction>> spin_orbitals;
583 for (
const auto& spatial_orbital : spatial_orbitals) {
587 spin_orbitals.push_back(alpha_spin_orbital);
590 spin_orbitals.push_back(beta_spin_orbital);
593 return spin_orbitals;
643 std::vector<ExpansionScalar> AO_vals;
649 AO_vals.push_back(AOs[i](r));
665 size_t K = AOs.size();
668 std::vector<std::vector<ExpansionScalar>> grad_AO_vals;
669 grad_AO_vals.reserve(K);
671 for (
size_t i = 0; i < K; ++i) {
672 const auto& basis_function = AOs[i];
673 const auto& contraction_coefficients = basis_function.coefficients();
674 const auto& primitives = basis_function.functions();
678 for (
size_t d = 0; d < primitives.size(); ++d) {
679 auto c = contraction_coefficients[d];
681 auto prim_grad = primitives[d].calculatePositionGradient();
683 for (
int dir = 0; dir < 3; ++dir) {
685 sum[dir] += c * prim_grad(dir)(r);
688 grad_AO_vals.push_back(sum);
700template <
typename ExpansionScalar,
typename Shell>
711template <
typename _ExpansionScalar,
typename _Shell>
731template <
typename _ExpansionScalar,
typename _Shell>
746template <
typename _ExpansionScalar,
typename _Shell>
Definition: AngularMomentumOperator.hpp:35
_Vectorizer Vectorizer
Definition: BaseFQOperator.hpp:48
Definition: CoulombRepulsionOperator.hpp:31
Definition: CurrentDensityMatrixElement.hpp:39
Definition: CurrentDensityOperator.hpp:32
Definition: DenseVectorizer.hpp:49
Definition: DiamagneticOperator.hpp:35
Definition: ElectronicDensityOperator.hpp:31
Definition: EvaluableLinearCombination.hpp:46
Definition: EvaluableRSQOneElectronOperator.hpp:37
Definition: FQMolecularHamiltonian.hpp:33
const KineticOperator & kinetic() const
Definition: FQMolecularHamiltonian.hpp:73
const NuclearAttractionOperator & nuclearAttraction() const
Definition: FQMolecularHamiltonian.hpp:78
const CoulombRepulsionOperator & coulombRepulsion() const
Definition: FQMolecularHamiltonian.hpp:83
Definition: FQMolecularMagneticHamiltonian.hpp:35
const DiamagneticOperator & diamagnetic() const
Definition: FQMolecularMagneticHamiltonian.hpp:80
const OrbitalZeemanOperator & orbitalZeeman() const
Definition: FQMolecularMagneticHamiltonian.hpp:75
Definition: Function.hpp:49
static Matrix< double > calculateLibintIntegrals(const FQOneElectronOperator &fq_one_op, const ScalarBasis< GTOShell > &left_scalar_basis, const ScalarBasis< GTOShell > &right_scalar_basis)
Definition: IntegralCalculator.hpp:181
static auto calculate(BaseOneElectronIntegralEngine< Shell, N, IntegralScalar > &engine, const ShellSet< Shell > &left_shell_set, const ShellSet< Shell > &right_shell_set) -> std::array< MatrixX< IntegralScalar >, N >
Definition: IntegralCalculator.hpp:61
Definition: JacobiRotation.hpp:33
Definition: LinearMomentumOperator.hpp:33
Definition: Matrix.hpp:47
Definition: OrbitalZeemanOperator.hpp:35
Definition: RMullikenDomain.hpp:35
Definition: RSQOneElectronOperator.hpp:42
Definition: RSQTwoElectronOperator.hpp:43
Definition: RSpinOrbitalBasis.hpp:63
std::vector< std::vector< ExpansionScalar > > evalGradBasisSetAtPoint(const GQCP::Vector< double, 3 > &r) const
Definition: RSpinOrbitalBasis.hpp:662
RMullikenDomain< ExpansionScalar > mullikenDomain(const std::function< bool(const Shell &)> &selector) const
Definition: RSpinOrbitalBasis.hpp:622
auto quantize(const OrbitalZeemanOperator &op) const -> enable_if_t< std::is_same< Z, LondonGTOShell >::value, RSQOneElectronOperator< product_t< OrbitalZeemanOperator::Scalar, ExpansionScalar >, OrbitalZeemanOperator::Vectorizer > >
Definition: RSpinOrbitalBasis.hpp:367
auto quantize(const CoulombRepulsionOperator &fq_op) const -> enable_if_t< std::is_same< Z, GTOShell >::value, RSQTwoElectronOperator< product_t< CoulombRepulsionOperator::Scalar, ExpansionScalar >, CoulombRepulsionOperator::Vectorizer > >
Definition: RSpinOrbitalBasis.hpp:172
auto quantize(const DiamagneticOperator &op) const -> enable_if_t< std::is_same< Z, LondonGTOShell >::value, RSQOneElectronOperator< product_t< DiamagneticOperator::Scalar, ExpansionScalar >, DiamagneticOperator::Vectorizer > >
Definition: RSpinOrbitalBasis.hpp:384
size_t numberOfSpinors() const
Definition: RSpinOrbitalBasis.hpp:129
_Shell Shell
Definition: RSpinOrbitalBasis.hpp:69
RMullikenDomain< ExpansionScalar > mullikenDomain(const std::function< bool(const BasisFunction &)> &selector) const
Definition: RSpinOrbitalBasis.hpp:608
std::vector< Spinor< ExpansionScalar, BasisFunction > > spinOrbitals() const
Definition: RSpinOrbitalBasis.hpp:576
std::vector< SpatialOrbital > spatialOrbitals() const
Definition: RSpinOrbitalBasis.hpp:504
_ExpansionScalar ExpansionScalar
Definition: RSpinOrbitalBasis.hpp:66
size_t numberOfSpinOrbitals() const
Definition: RSpinOrbitalBasis.hpp:134
auto quantize(const LinearMomentumOperator &fq_one_op) const -> enable_if_t< std::is_same< Z, GTOShell >::value, RSQOneElectronOperator< product_t< LinearMomentumOperator::Scalar, ExpansionScalar >, typename LinearMomentumOperator::Vectorizer > >
Definition: RSpinOrbitalBasis.hpp:235
std::vector< Vector< SpatialOrbitalDerivative, 3 > > spatialOrbitalGradients() const
Definition: RSpinOrbitalBasis.hpp:534
RSQHamiltonian< ExpansionScalar > quantize(const FQMolecularHamiltonian &fq_hamiltonian) const
Definition: RSpinOrbitalBasis.hpp:486
enable_if_t< std::is_same< Z, LondonGTOShell >::value, RSQHamiltonian< ExpansionScalar > > quantize(const FQMolecularMagneticHamiltonian &fq_hamiltonian) const
Definition: RSpinOrbitalBasis.hpp:461
VectorEvaluableRSQOneElectronOperator< CurrentDensityMatrixElement< ExpansionScalar, CartesianGTO > > quantize(const CurrentDensityOperator &fq_current_density_op) const
Definition: RSpinOrbitalBasis.hpp:285
std::vector< ExpansionScalar > evalBasisSetAtPoint(const GQCP::Vector< double, 3 > &r) const
Definition: RSpinOrbitalBasis.hpp:639
size_t numberOfSpatialOrbitals() const
Definition: RSpinOrbitalBasis.hpp:124
auto quantize(const AngularMomentumOperator &fq_one_op) const -> enable_if_t< std::is_same< Z, GTOShell >::value, RSQOneElectronOperator< product_t< AngularMomentumOperator::Scalar, ExpansionScalar >, typename AngularMomentumOperator::Vectorizer > >
Definition: RSpinOrbitalBasis.hpp:208
decltype(std::declval< Primitive >()(std::declval< Vector< double, 3 > >())) PrimitiveScalar
Definition: RSpinOrbitalBasis.hpp:93
auto quantize(const FQOneElectronOperator &fq_one_op) const -> enable_if_t< std::is_same< Z, GTOShell >::value, RSQOneElectronOperator< product_t< typename FQOneElectronOperator::Scalar, ExpansionScalar >, typename FQOneElectronOperator::Vectorizer > >
Definition: RSpinOrbitalBasis.hpp:151
auto quantize(const CoulombRepulsionOperator &fq_op) const -> enable_if_t< std::is_same< Z, LondonGTOShell >::value, RSQTwoElectronOperator< product_t< CoulombRepulsionOperator::Scalar, ExpansionScalar >, CoulombRepulsionOperator::Vectorizer > >
Definition: RSpinOrbitalBasis.hpp:426
auto quantize(const FQOneElectronOperator &fq_one_op) const -> enable_if_t< std::is_same< Z, LondonGTOShell >::value, RSQOneElectronOperator< product_t< typename FQOneElectronOperator::Scalar, ExpansionScalar >, typename FQOneElectronOperator::Vectorizer > >
Definition: RSpinOrbitalBasis.hpp:323
ScalarEvaluableRSQOneElectronOperator< DensityDistribution > quantize(const ElectronicDensityOperator &fq_density_op) const
Definition: RSpinOrbitalBasis.hpp:261
typename Shell::BasisFunction BasisFunction
Definition: RSpinOrbitalBasis.hpp:81
typename Shell::Primitive Primitive
Definition: RSpinOrbitalBasis.hpp:78
Definition: SQHamiltonian.hpp:54
std::vector< BasisFunction > basisFunctions() const
Definition: ScalarBasis.hpp:150
size_t numberOfBasisFunctions() const
Definition: ScalarBasis.hpp:155
std::vector< size_t > basisFunctionIndices(const std::function< bool(const Shell &)> &selector) const
Definition: ScalarBasis.hpp:164
Definition: SimpleSpinOrbitalBasis.hpp:39
ScalarBasis< Shell > scalar_basis
Definition: SimpleSpinOrbitalBasis.hpp:59
const ScalarBasis< Shell > & scalarBasis() const
Definition: SimpleSpinOrbitalBasis.hpp:133
const Transformation & expansion() const
Definition: SimpleSpinorBasis.hpp:98
Transformation C
Definition: SimpleSpinorBasis.hpp:76
Definition: Spinor.hpp:34
Definition: SquareMatrix.hpp:39
static Self Zero(const size_t dim)
Definition: SquareRankFourTensor.hpp:147
Definition: StorageArray.hpp:38
Definition: complex.hpp:57
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
@ xz
Definition: DyadicCartesianDirection.hpp:30
@ yy
Definition: DyadicCartesianDirection.hpp:32
@ xy
Definition: DyadicCartesianDirection.hpp:29
@ xx
Definition: DyadicCartesianDirection.hpp:28
@ yz
Definition: DyadicCartesianDirection.hpp:33
@ zz
Definition: DyadicCartesianDirection.hpp:36
@ z
Definition: CartesianDirection.hpp:30
@ x
Definition: CartesianDirection.hpp:28
@ y
Definition: CartesianDirection.hpp:29
Definition: JacobiRotatable.hpp:37
_ExpansionScalar ExpansionScalar
Definition: RSpinOrbitalBasis.hpp:714
Definition: SimpleSpinorBasis.hpp:38