StatMech
Loading...
Searching...
No Matches
MatrixUtils.hpp
Go to the documentation of this file.
1
11#pragma once
12#include "Headers/mytypes.hpp"
13#include "Headers/mydebug.hpp"
14#include <Eigen/Core>
15#include <Eigen/Dense>
16#include <Eigen/Sparse>
17
18namespace MatrixUtils {
19 template<class DenseMatrix>
21
22 template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
23 class EigenSolver< Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> > {
24 private:
25 using Matrix_t = Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>;
26
28 Eigen::SelfAdjointEigenSolver<Matrix_t> m_solver;
29 Eigen::ComputationInfo m_info = Eigen::InvalidInput;
30 Eigen::DecompositionOptions m_option = Eigen::ComputeEigenvectors;
31
32 public:
33 EigenSolver() = delete;
34 EigenSolver(EigenSolver const&) = delete;
36 EigenSolver(int dim) : m_inMatrix(dim, dim) {}
37
38 EigenSolver(Matrix_t const& mat) = delete;
39 EigenSolver(Matrix_t&& mat) : m_inMatrix{std::move(mat)} { this->compute(); }
40
42 m_solver.compute(m_inMatrix, m_option);
43 m_info = m_solver.info();
44 return *this;
45 }
46
47 EigenSolver& setOpt(Eigen::DecompositionOptions option) {
48 m_option = option;
49 return *this;
50 }
51
52 auto eigenvalues() -> decltype(m_solver.eigenvalues()) const& {
53 return m_solver.eigenvalues();
54 }
55
56 auto eigenvectors() -> decltype(m_solver.eigenvectors()) const& {
57 return m_solver.eigenvectors();
58 }
59
60 Matrix_t& inMatrix() { return m_inMatrix; }
61 };
62} // namespace MatrixUtils
63
64#ifdef GPU
65 #include "MatrixUtils.cuh"
66#endif
Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > Matrix_t
Definition MatrixUtils.hpp:25
EigenSolver & setOpt(Eigen::DecompositionOptions option)
Definition MatrixUtils.hpp:47
auto eigenvalues() -> decltype(m_solver.eigenvalues()) const &
Definition MatrixUtils.hpp:52
Eigen::SelfAdjointEigenSolver< Matrix_t > m_solver
Definition MatrixUtils.hpp:28
auto eigenvectors() -> decltype(m_solver.eigenvectors()) const &
Definition MatrixUtils.hpp:56
Definition MatrixUtils.hpp:20
Definition OperatorSpace_test.cpp:3
Definition MatrixUtils.cuh:781