GQCP
Loading...
Searching...
No Matches
AP1roGGeminalCoefficients.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
26
27
28namespace GQCP {
29
30
35private:
36 size_t K; // the number of spatial orbitals corresponding to these geminal coefficients
37 size_t N_P; // the number of electron pairs (i.e. the number of geminals) corresponding to these geminal coefficients
38 ImplicitMatrixSlice<double> G; // the AP1roG geminal coefficients (not including the identity matrix on the left), as a block matrix, so it implements easy operator(i,a) calls
39
40
41public:
42 // CONSTRUCTORS
43
47 AP1roGGeminalCoefficients(const ImplicitMatrixSlice<double>& G, const size_t N_P, const size_t K);
48
53
60 AP1roGGeminalCoefficients(const size_t N_P, const size_t K);
61
62
63 // DESTRUCTOR
64
69
70
71 // OPERATORS
72
79 double operator()(const size_t i, const size_t a) const;
80
81
82 // NAMED CONSTRUCTORS
83
90 static AP1roGGeminalCoefficients FromColumnMajor(const VectorX<double>& g, const size_t N_P, const size_t K);
91
98 static AP1roGGeminalCoefficients FromRowMajor(const VectorX<double>& g, const size_t N_P, const size_t K);
99
106 static AP1roGGeminalCoefficients WeakInteractionLimit(const RSQHamiltonian<double>& sq_hamiltonian, const size_t N_P);
107
108
109 // STATIC PUBLIC METHODS
110
117 static size_t numberOfGeminalCoefficients(const size_t N_P, const size_t K);
118
119
120 // PUBLIC METHODS
121
126
130 VectorX<double> asVector() const { return this->G.asVector(); }
131
135 size_t count() const { return AP1roGGeminalCoefficients::numberOfGeminalCoefficients(this->N_P, this->K); }
136
140 size_t numberOfElectronPairs() const { return this->N_P; }
141
145 size_t numberOfSpatialOrbitals() const { return this->K; }
146
151
157 double overlap(const SpinUnresolvedONV& onv) const override;
158};
159
160
161} // namespace GQCP
Definition: AP1roGGeminalCoefficients.hpp:34
size_t numberOfElectronPairs() const
Definition: AP1roGGeminalCoefficients.hpp:140
VectorX< double > asVector() const
Definition: AP1roGGeminalCoefficients.hpp:130
static size_t numberOfGeminalCoefficients(const size_t N_P, const size_t K)
Definition: AP1roGGeminalCoefficients.cpp:164
size_t numberOfSpatialOrbitals() const
Definition: AP1roGGeminalCoefficients.hpp:145
double overlap(const SpinUnresolvedONV &onv) const override
Definition: AP1roGGeminalCoefficients.cpp:214
double operator()(const size_t i, const size_t a) const
Definition: AP1roGGeminalCoefficients.cpp:82
static AP1roGGeminalCoefficients FromColumnMajor(const VectorX< double > &g, const size_t N_P, const size_t K)
Definition: AP1roGGeminalCoefficients.cpp:98
MatrixX< double > asMatrix() const
Definition: AP1roGGeminalCoefficients.cpp:182
OrbitalSpace orbitalSpace() const
Definition: AP1roGGeminalCoefficients.cpp:200
static AP1roGGeminalCoefficients WeakInteractionLimit(const RSQHamiltonian< double > &sq_hamiltonian, const size_t N_P)
Definition: AP1roGGeminalCoefficients.cpp:133
size_t count() const
Definition: AP1roGGeminalCoefficients.hpp:135
static AP1roGGeminalCoefficients FromRowMajor(const VectorX< double > &g, const size_t N_P, const size_t K)
Definition: AP1roGGeminalCoefficients.cpp:116
~AP1roGGeminalCoefficients() override
Definition: AP1roGGeminalCoefficients.cpp:69
Definition: GeminalCoefficientsInterface.hpp:28
Definition: ImplicitMatrixSlice.hpp:38
VectorX< Scalar > asVector() const
Definition: ImplicitMatrixSlice.hpp:248
Definition: Matrix.hpp:47
Definition: OrbitalSpace.hpp:40
Definition: SQHamiltonian.hpp:54
Definition: BaseOneElectronIntegralBuffer.hpp:25