39template <
typename _Scalar,
typename _Vectorizer,
typename _DerivedOperator>
41 public SQOperatorStorage<SquareMatrix<_Scalar>, _Vectorizer, SimpleSQOneElectronOperator<_Scalar, _Vectorizer, _DerivedOperator>>,
99 throw std::invalid_argument(
"SimpleSQOneElectronOperator::calculateExpectationValue(const Derived1DM<Scalar>&): The given 1-DM's dimension is not compatible with the one-electron operator.");
111 Eigen::Tensor<Scalar, 0> contraction = f_tensor.template einsum<2>(
"pq, pq->", D_tensor);
114 expectation_values[i] = contraction(0);
131 template <
typename Z = Scalar>
134 if (DM.numberOfOrbitals() != this->numberOfOrbitals()) {
135 throw std::invalid_argument(
"SimpleSQOneElectronOperator::calculateFockianMatrix(const Derived1DM&, const Derived2DM&): The 1-DM's dimensions are not compatible with this one-electron operator.");
138 if (dm.numberOfOrbitals() != this->numberOfOrbitals()) {
139 throw std::invalid_argument(
"SimpleSQOneElectronOperator::calculateFockianMatrix(const Derived1DM&, const Derived2DM&): The 2-DM's dimensions are not compatible with this one-electron operator.");
146 const auto& D = DM.matrix();
156 F_i(p, q) += f_i(q, r) * 0.5 * (D(p, r) + D(r, p));
177 template <
typename Z = Scalar>
180 if (DM.numberOfOrbitals() != this->numberOfOrbitals()) {
181 throw std::invalid_argument(
"SimpleSQOneElectronOperator::calculateFockianMatrix(const Derived1DM&, const Derived2DM&): The given 1-DM's dimensions are not compatible with this one-electron operator.");
184 if (dm.numberOfOrbitals() != this->numberOfOrbitals()) {
185 throw std::invalid_argument(
"SimpleSQOneElectronOperator::calculateFockianMatrix(const Derived1DM&, const Derived2DM&): The given 2-DM's dimensions are not compatible with this one-electron operator.");
194 const auto& D = DM.matrix();
198 const auto& F_i = F_vector[i];
209 G_i(p, q, r, s) += F_i(p, s);
212 G_i(p, q, r, s) -= f_i(s, p) * 0.5 * (D(r, q) + D(q, r));
244 result[i] = T.matrix().adjoint() * f_i * T.matrix();
272 const auto p = jacobi_rotation.
p();
273 const auto q = jacobi_rotation.
q();
274 const auto jacobi_rotation_eigen = jacobi_rotation.
Eigen();
279 result[i].applyOnTheLeft(p, q, jacobi_rotation_eigen.adjoint());
280 result[i].applyOnTheRight(p, q, jacobi_rotation_eigen);
310 result[i] = T.matrix().adjoint() * f_i + f_i * T.matrix();
339template <
typename _Scalar,
typename _Vectorizer,
typename _DerivedOperator>
Definition: JacobiRotatable.hpp:50
Definition: JacobiRotation.hpp:33
Eigen::JacobiRotation< double > Eigen() const
Definition: JacobiRotation.hpp:103
size_t p() const
Definition: JacobiRotation.hpp:88
size_t q() const
Definition: JacobiRotation.hpp:93
const MatrixRepresentation & parameters(const Indices &... indices) const
Definition: SQOperatorStorageBase.hpp:236
size_t numberOfOrbitals() const
Definition: SQOperatorStorageBase.hpp:277
const std::vector< MatrixRepresentation > & allParameters() const
Definition: SQOperatorStorageBase.hpp:221
StorageArray< MatrixRepresentation, Vectorizer > array
Definition: SQOperatorStorageBase.hpp:68
size_t numberOfComponents() const
Definition: SQOperatorStorageBase.hpp:272
Definition: SQOperatorStorage.hpp:44
Definition: SimpleSQOneElectronOperator.hpp:43
enable_if_t< std::is_same< Z, double >::value, StorageArray< SquareRankFourTensor< double >, Vectorizer > > calculateSuperFockianMatrix(const Derived1DM &DM, const Derived2DM &dm) const
Definition: SimpleSQOneElectronOperator.hpp:178
typename OperatorTraits< DerivedOperator >::Transformation Transformation
Definition: SimpleSQOneElectronOperator.hpp:64
_Vectorizer Vectorizer
Definition: SimpleSQOneElectronOperator.hpp:49
enable_if_t< std::is_same< Z, double >::value, StorageArray< SquareMatrix< double >, Vectorizer > > calculateFockianMatrix(const Derived1DM &DM, const Derived2DM &dm) const
Definition: SimpleSQOneElectronOperator.hpp:132
typename OperatorTraits< DerivedOperator >::TwoDM Derived2DM
Definition: SimpleSQOneElectronOperator.hpp:70
_DerivedOperator DerivedOperator
Definition: SimpleSQOneElectronOperator.hpp:52
typename OperatorTraits< DerivedOperator >::MullikenDomain MullikenDomain
Definition: SimpleSQOneElectronOperator.hpp:73
DerivedOperator partitioned(const Transformation &mulliken_projection_matrix) const
Definition: SimpleSQOneElectronOperator.hpp:328
DerivedOperator oneIndexTransformed(const Transformation &T) const
Definition: SimpleSQOneElectronOperator.hpp:301
DerivedOperator rotated(const JacobiRotation &jacobi_rotation) const override
Definition: SimpleSQOneElectronOperator.hpp:269
typename OperatorTraits< DerivedOperator >::ScalarOperator ScalarDerivedOperator
Definition: SimpleSQOneElectronOperator.hpp:61
typename OperatorTraits< DerivedOperator >::OneDM Derived1DM
Definition: SimpleSQOneElectronOperator.hpp:67
StorageArray< Scalar, Vectorizer > calculateExpectationValue(const Derived1DM &D) const
Definition: SimpleSQOneElectronOperator.hpp:96
DerivedOperator transformed(const Transformation &T) const override
Definition: SimpleSQOneElectronOperator.hpp:235
_Scalar Scalar
Definition: SimpleSQOneElectronOperator.hpp:46
static Self Zero(const size_t dim)
Definition: SquareMatrix.hpp:289
Definition: SquareRankFourTensor.hpp:36
Definition: StorageArray.hpp:38
const Vectorizer & vectorizer() const
Definition: StorageArray.hpp:177
Definition: Tensor.hpp:46
Definition: BaseOneElectronIntegralBuffer.hpp:25
typename std::enable_if< B, T >::type enable_if_t
Definition: type_traits.hpp:37
_Scalar Scalar
Definition: SimpleSQOneElectronOperator.hpp:343
_Vectorizer Vectorizer
Definition: SimpleSQOneElectronOperator.hpp:346
_DerivedOperator DerivedOperator
Definition: SimpleSQOneElectronOperator.hpp:349
Definition: OperatorTraits.hpp:28