33template <
typename _Scalar>
59 throw std::invalid_argument(
"HoppingMatrix::HoppingMatrix(const SquareMatrix<Scalar>&): The given hopping matrix must be Hermitian.");
75 template <
typename Z = Scalar>
79 GQCP::VectorX<double> upper_triangle = Eigen::Map<Eigen::VectorXd>(triagonal_data.data(), triagonal_data.size());
92 template <
typename Z = Scalar>
106 template <
typename Z = Scalar>
109 size_t dim = A.
matrix().rows();
114 if (A.
matrix()(0, dim - 1) == 0) {
115 if (link_vector.size() != dim - 1) {
116 throw std::invalid_argument(
"HoppingMatrix::FromLinkVector(const AdjacencyMatrix& A, std::vector<double>& link_vector): The dimension of the link vector does not match the adjacency matrix.");
118 for (
size_t i = 0; i < dim - 1; i++) {
119 H(i, i + 1) = link_vector[i];
120 H(i + 1, i) = link_vector[i];
125 else if (A.
matrix()(0, dim - 1) == 1) {
126 if (link_vector.size() != dim) {
127 throw std::invalid_argument(
"HoppingMatrix::FromLinkVector(const AdjacencyMatrix& A, std::vector<double>& link_vector): The dimension of the link vector does not match the adjacency matrix.");
129 for (
size_t i = 0; i < dim - 1; i++) {
130 H(i, i + 1) = link_vector[i];
131 H(i + 1, i) = link_vector[i];
134 H(0, dim - 1) = link_vector[dim - 1];
135 H(dim - 1, 0) = link_vector[dim - 1];
Definition: AdjacencyMatrix.hpp:30
const SquareMatrix< size_t > & matrix() const
Definition: AdjacencyMatrix.hpp:75
Definition: HoppingMatrix.hpp:34
static enable_if_t< std::is_same< Z, double >::value, HoppingMatrix< double > > Homogeneous(const AdjacencyMatrix &A, const double t)
Definition: HoppingMatrix.hpp:93
static enable_if_t< std::is_same< Z, double >::value, HoppingMatrix< double > > FromLinkVector(const AdjacencyMatrix &A, std::vector< double > &link_vector)
Definition: HoppingMatrix.hpp:107
static enable_if_t< std::is_same< Z, double >::value, HoppingMatrix< double > > Dense(std::vector< double > &triagonal_data)
Definition: HoppingMatrix.hpp:76
const SquareMatrix< Scalar > & matrix() const
Definition: HoppingMatrix.hpp:160
_Scalar Scalar
Definition: HoppingMatrix.hpp:37
HoppingMatrix(const SquareMatrix< Scalar > &H)
Definition: HoppingMatrix.hpp:55
SquareMatrix< Scalar > & matrix()
Definition: HoppingMatrix.hpp:165
size_t numberOfLatticeSites() const
Definition: HoppingMatrix.hpp:150
Definition: Matrix.hpp:47
Definition: SquareMatrix.hpp:39
size_t dimension() const
Definition: SquareMatrix.hpp:299
bool isHermitian(const double threshold=1.0e-08) const
Definition: SquareMatrix.hpp:311
static Self SymmetricFromUpperTriangleWithoutDiagonal(const VectorX< Scalar > &v)
Definition: SquareMatrix.hpp:260
static Self Zero(const size_t dim)
Definition: SquareMatrix.hpp:289
Definition: BaseOneElectronIntegralBuffer.hpp:25
typename std::enable_if< B, T >::type enable_if_t
Definition: type_traits.hpp:37