45template <
typename _Scalar,
typename _Vectorizer>
47 public DoublySpinResolvedBase<PureUSQTwoElectronOperatorComponent<_Scalar, _Vectorizer>, MixedUSQTwoElectronOperatorComponent<_Scalar, _Vectorizer>, USQTwoElectronOperator<_Scalar, _Vectorizer>>,
102 MixedUSQTwoElectronOperatorComponent<Scalar, Vectorizer> {StorageArray<SquareRankFourTensor<Scalar>,
Vectorizer> {gs_ba, vectorizer}},
103 PureUSQTwoElectronOperatorComponent<Scalar, Vectorizer> {StorageArray<SquareRankFourTensor<Scalar>,
Vectorizer> {gs_bb, vectorizer}}) {
106 const auto dimension_of_first_aa = gs_aa[0].dimension();
107 const auto dimension_of_first_ab = gs_ab[0].dimension();
108 const auto dimension_of_first_ba = gs_ba[0].dimension();
109 const auto dimension_of_first_bb = gs_bb[0].dimension();
111 for (
size_t i = 1; i < N; i++) {
113 const auto dimension_of_ith_aa = gs_aa[i].dimension();
114 const auto dimension_of_ith_ab = gs_ab[i].dimension();
115 const auto dimension_of_ith_ba = gs_ba[i].dimension();
116 const auto dimension_of_ith_bb = gs_bb[i].dimension();
118 if ((dimension_of_first_aa != dimension_of_ith_aa) || (dimension_of_first_ab != dimension_of_ith_ab) || (dimension_of_first_ba != dimension_of_ith_ba) || (dimension_of_first_bb != dimension_of_ith_bb)) {
119 throw std::invalid_argument(
"USQTwoElectronOperator(const std::array<SquareRankFourTensor<Scalar>, N>&, const std::array<SquareRankFourTensor<Scalar>, N>&, const std::array<SquareRankFourTensor<Scalar>, N>&, const std::array<SquareRankFourTensor<Scalar>, N>&): The given tensor representations do not have the same dimensions for either the alpha, beta or one of the mixed components.");
135 template <
typename Z = Vectorizer>
137 typename std::enable_if<std::is_same<Z, ScalarVectorizer>::value>::type* = 0) :
197 auto result_elements = expectation_value_elements_aa;
199 for (
size_t i = 0; i < vectorizer.numberOfElements(); i++) {
200 result_elements[i] += expectation_value_elements_ab[i] + expectation_value_elements_ba[i] + expectation_value_elements_bb[i];
298template <
typename Scalar>
302template <
typename Scalar>
306template <
typename Scalar>
310template <
typename Scalar,
size_t N>
320template <
typename Scalar,
typename Vectorizer>
344template <
typename Scalar,
typename Vectorizer>
359template <
typename Scalar,
typename Vectorizer>
376template <
typename _Scalar>
485 result.twoElectron().transform(T);
515 result.twoElectron().rotate(jacobi_rotation);
539 return this->
oneElectron().calculateExpectationValue(D)() + this->
twoElectron().calculateExpectationValue(d)();
553template <
typename Scalar>
570template <
typename Scalar>
Definition: DoublySpinResolvedBase.hpp:36
MixedUSQTwoElectronOperatorComponent< _Scalar, _Vectorizer > Mixed
Definition: DoublySpinResolvedBase.hpp:42
const Mixed & betaAlpha() const
Definition: DoublySpinResolvedBase.hpp:112
const Mixed & alphaBeta() const
Definition: DoublySpinResolvedBase.hpp:102
const Pure & alphaAlpha() const
Definition: DoublySpinResolvedBase.hpp:92
PureUSQTwoElectronOperatorComponent< _Scalar, _Vectorizer > Pure
Definition: DoublySpinResolvedBase.hpp:39
const Pure & betaBeta() const
Definition: DoublySpinResolvedBase.hpp:122
Definition: DoublySpinResolvedJacobiRotatable.hpp:35
USQTwoElectronOperator< _Scalar, _Vectorizer > rotated(const JacobiRotationType &jacobi_rotation) const override
Definition: DoublySpinResolvedJacobiRotatable.hpp:54
Definition: JacobiRotatable.hpp:50
Definition: MixedUSQTwoElectronOperatorComponent.hpp:40
StorageArray< Scalar, Vectorizer > calculateExpectationValue(const MixedSpinResolved2DMComponent< Scalar > &d) const
Definition: MixedUSQTwoElectronOperatorComponent.hpp:72
Definition: PureUSQTwoElectronOperatorComponent.hpp:39
Definition: RSQTwoElectronOperator.hpp:43
PureUSQTwoElectronOperatorComponent< Scalar, Vectorizer > alphaAlpha() const
Definition: RSQTwoElectronOperator.hpp:71
MixedUSQTwoElectronOperatorComponent< Scalar, Vectorizer > alphaBeta() const
Definition: RSQTwoElectronOperator.hpp:82
MixedUSQTwoElectronOperatorComponent< Scalar, Vectorizer > betaAlpha() const
Definition: RSQTwoElectronOperator.hpp:93
PureUSQTwoElectronOperatorComponent< Scalar, Vectorizer > betaBeta() const
Definition: RSQTwoElectronOperator.hpp:103
size_t numberOfOrbitals() const
Definition: SQOperatorStorageBase.hpp:277
const Vectorizer & vectorizer() const
Definition: SQOperatorStorageBase.hpp:282
static FinalOperator Zero(const size_t dim, const Vectorizer &vectorizer)
Definition: SQOperatorStorageBase.hpp:145
Definition: USQTwoElectronOperator.hpp:380
ScalarUSQOneElectronOperatorProduct< Scalar > Self
Definition: USQTwoElectronOperator.hpp:386
Self rotated(const UJacobiRotation &jacobi_rotation) const override
Definition: USQTwoElectronOperator.hpp:509
Scalar calculateExpectationValue(const SpinResolved1DM< Scalar > &D, const SpinResolved2DM< Scalar > &d) const
Definition: USQTwoElectronOperator.hpp:536
ScalarUSQOneElectronOperatorProduct(const ScalarUSQOneElectronOperator< Scalar > &o, const ScalarUSQTwoElectronOperator< Scalar > &t)
Definition: USQTwoElectronOperator.hpp:408
Self transformed(const UTransformation< Scalar > &T) const override
Definition: USQTwoElectronOperator.hpp:479
ScalarUSQOneElectronOperatorProduct & operator+=(const ScalarUSQOneElectronOperatorProduct &rhs) override
Definition: USQTwoElectronOperator.hpp:445
ScalarUSQOneElectronOperator< Scalar > & oneElectron()
Definition: USQTwoElectronOperator.hpp:430
ScalarUSQOneElectronOperatorProduct & operator*=(const Scalar &a) override
Definition: USQTwoElectronOperator.hpp:458
const ScalarUSQOneElectronOperator< Scalar > & oneElectron() const
Definition: USQTwoElectronOperator.hpp:420
ScalarUSQTwoElectronOperator< Scalar > & twoElectron()
Definition: USQTwoElectronOperator.hpp:435
const ScalarUSQTwoElectronOperator< Scalar > & twoElectron() const
Definition: USQTwoElectronOperator.hpp:425
_Scalar Scalar
Definition: USQTwoElectronOperator.hpp:383
StorageArray< Scalar, Vectorizer > calculateExpectationValue(const Derived2DM &d) const
Definition: SimpleSQTwoElectronOperator.hpp:104
Definition: SpinResolved1DM.hpp:44
Definition: SpinResolved2DM.hpp:44
Definition: SquareRankFourTensor.hpp:36
Definition: StorageArray.hpp:38
Definition: UJacobiRotation.hpp:32
Definition: USQOneElectronOperator.hpp:48
Definition: USQTwoElectronOperator.hpp:50
static USQTwoElectronOperator< Scalar, Vectorizer > FromRestricted(const RSQTwoElectronOperator< Scalar, Vectorizer > &g_restricted)
Definition: USQTwoElectronOperator.hpp:171
static USQTwoElectronOperator< Scalar, Vectorizer > Zero(const size_t dim)
Definition: USQTwoElectronOperator.hpp:157
USQTwoElectronOperator< Scalar, Vectorizer > Self
Definition: USQTwoElectronOperator.hpp:59
Self & operator+=(const Self &rhs) override
Definition: USQTwoElectronOperator.hpp:265
size_t numberOfOrbitals(const Spin sigma, const Spin tau) const
Definition: USQTwoElectronOperator.hpp:217
_Scalar Scalar
Definition: USQTwoElectronOperator.hpp:53
typename DoublySpinResolvedBase< PureUSQTwoElectronOperatorComponent< Scalar, Vectorizer >, MixedUSQTwoElectronOperatorComponent< Scalar, Vectorizer >, USQTwoElectronOperator< Scalar, Vectorizer > >::Pure PureComponentType
Definition: USQTwoElectronOperator.hpp:71
USQTwoElectronOperator()
Definition: USQTwoElectronOperator.hpp:144
_Vectorizer Vectorizer
Definition: USQTwoElectronOperator.hpp:56
size_t numberOfOrbitals() const
Definition: USQTwoElectronOperator.hpp:236
USQTwoElectronOperator(const SquareRankFourTensor< Scalar > &g_aa, const SquareRankFourTensor< Scalar > &g_ab, const SquareRankFourTensor< Scalar > &g_ba, const SquareRankFourTensor< Scalar > &g_bb, typename std::enable_if< std::is_same< Z, ScalarVectorizer >::value >::type *=0)
Definition: USQTwoElectronOperator.hpp:136
typename DoublySpinResolvedBase< PureUSQTwoElectronOperatorComponent< Scalar, Vectorizer >, MixedUSQTwoElectronOperatorComponent< Scalar, Vectorizer >, USQTwoElectronOperator< Scalar, Vectorizer > >::Mixed MixedComponentType
Definition: USQTwoElectronOperator.hpp:72
USQTwoElectronOperator(const std::array< SquareRankFourTensor< Scalar >, N > &gs_aa, const std::array< SquareRankFourTensor< Scalar >, N > &gs_ab, const std::array< SquareRankFourTensor< Scalar >, N > &gs_ba, const std::array< SquareRankFourTensor< Scalar >, N > &gs_bb, const Vectorizer &vectorizer)
Definition: USQTwoElectronOperator.hpp:96
StorageArray< Scalar, Vectorizer > calculateExpectationValue(const SpinResolved2DM< Scalar > &d) const
Definition: USQTwoElectronOperator.hpp:188
Self & operator*=(const Scalar &a) override
Definition: USQTwoElectronOperator.hpp:280
Definition: spinor_tags.hpp:37
Definition: VectorSpaceArithmetic.hpp:35
Definition: BaseOneElectronIntegralBuffer.hpp:25
UnrestrictedSpinorTag UnrestrictedSpinOrbitalTag
Definition: spinor_tags.hpp:42
DenseVectorizer< 0 > ScalarVectorizer
Definition: DenseVectorizer.hpp:203
Spin
Definition: Spin.hpp:27
@ beta
Definition: Spin.hpp:29
@ alpha
Definition: Spin.hpp:28
Definition: JacobiRotatable.hpp:37
Definition: OperatorTraits.hpp:28