GQCP
Loading...
Searching...
No Matches
RSQOneElectronOperator.hpp
Go to the documentation of this file.
1// This file is part of GQCG-GQCP.
2//
3// Copyright (C) 2017-2020 the GQCG developers
4//
5// GQCG-GQCP is free software: you can redistribute it and/or modify
6// it under the terms of the GNU Lesser General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// GQCG-GQCP is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU Lesser General Public License for more details.
14//
15// You should have received a copy of the GNU Lesser General Public License
16// along with GQCG-GQCP. If not, see <http://www.gnu.org/licenses/>.
17
18#pragma once
19
20
29
30
31namespace GQCP {
32
33
40template <typename _Scalar, typename _Vectorizer>
42 public SimpleSQOneElectronOperator<_Scalar, _Vectorizer, RSQOneElectronOperator<_Scalar, _Vectorizer>> {
43public:
44 // The scalar type used for a single parameter: real or complex.
45 using Scalar = _Scalar;
46
47 // The type of the vectorizer that relates a one-dimensional storage of matrices to the tensor structure of one-electron operators. This allows for a distinction between scalar operators (such as the kinetic energy operator), vector operators (such as the spin operator) and matrix/tensor operators (such as quadrupole and multipole operators).
48 using Vectorizer = _Vectorizer;
49
50 // The spinor tag corresponding to an `RSQOneElectronOperator`.
52
53
54public:
55 /*
56 * MARK: Constructors
57 */
58
59 // Inherit `SimpleSQOneElectronOperator`'s constructors.
60 using SimpleSQOneElectronOperator<_Scalar, _Vectorizer, RSQOneElectronOperator<_Scalar, _Vectorizer>>::SimpleSQOneElectronOperator;
61
62
63 /*
64 * MARK: Conversions to spin components
65 */
66
71
72 // Since f_pq = f_{p alpha, q alpha}, we can just wrap the one-electron integrals into the correct class.
75 }
76
77
78 /*
79 * @return The beta-component of this restricted one-electron operator.
80 */
82
83 // The alpha- and beta- integrals are equal for a restricted operator, f_pq = f_{p alpha, q alpha} = f_{p beta, q_beta}.
84 return this->alpha();
85 }
86}; // namespace GQCP
87
88
89/*
90 * MARK: Convenience aliases
91 */
92
93// A scalar-like RSQOneElectronOperator, i.e. with scalar-like access.
94template <typename Scalar>
96
97// A vector-like RSQOneElectronOperator, i.e. with vector-like access.
98template <typename Scalar>
100
101// A matrix-like RSQOneElectronOperator, i.e. with matrix-like access.
102template <typename Scalar>
104
105// A tensor-like RSQOneElectronOperator, i.e. with tensor-like access.
106template <typename Scalar, size_t N>
108
109
110/*
111 * MARK: Operator traits
112 */
113
120template <typename Scalar, typename Vectorizer>
121struct OperatorTraits<RSQOneElectronOperator<Scalar, Vectorizer>> {
122
123 // A type that corresponds to the scalar version of the associated restricted one-electron operator type.
125
126 // The type of transformation that is naturally associated to an `RSQOneElectronOperator`.
128
129 // The type of the one-particle density matrix that is naturally associated an `RSQOneElectronOperator`.
131
132 // The type of the two-particle density matrix that is naturally associated an `RSQOneElectronOperator`.
134
135 // The type used to encapsulate the Mulliken domain.
137};
138
139
140/*
141 * MARK: BasisTransformableTraits
142 */
143
147template <typename Scalar, typename Vectorizer>
149
150 // The type of transformation that is naturally associated to an `RSQOneElectronOperator`.
152};
153
154
155/*
156 * MARK: JacobiRotatableTraits
157 */
158
162template <typename Scalar, typename Vectorizer>
164
165 // The type of Jacobi rotation for which the Jacobi rotation should be defined.
167};
168
169
170} // namespace GQCP
Definition: JacobiRotation.hpp:33
Definition: Orbital1DM.hpp:42
Definition: Orbital2DM.hpp:41
Definition: RMullikenDomain.hpp:35
Definition: RSQOneElectronOperator.hpp:42
_Vectorizer Vectorizer
Definition: RSQOneElectronOperator.hpp:48
USQOneElectronOperatorComponent< Scalar, Vectorizer > beta() const
Definition: RSQOneElectronOperator.hpp:81
_Scalar Scalar
Definition: RSQOneElectronOperator.hpp:45
USQOneElectronOperatorComponent< Scalar, Vectorizer > alpha() const
Definition: RSQOneElectronOperator.hpp:70
Definition: spinor_tags.hpp:27
const std::vector< MatrixRepresentation > & allParameters() const
Definition: SQOperatorStorageBase.hpp:221
const Vectorizer & vectorizer() const
Definition: SQOperatorStorageBase.hpp:282
StorageArray< MatrixRepresentation, Vectorizer > array
Definition: SQOperatorStorageBase.hpp:68
Definition: SimpleSQOneElectronOperator.hpp:43
Definition: StorageArray.hpp:38
Definition: USQOneElectronOperatorComponent.hpp:40
Definition: BaseOneElectronIntegralBuffer.hpp:25
RestrictedSpinorTag RestrictedSpinOrbitalTag
Definition: spinor_tags.hpp:32
Definition: BasisTransformable.hpp:37
Definition: JacobiRotatable.hpp:37
Definition: OperatorTraits.hpp:28