54 typedef typename Solver::MatrixType MatrixType;
55 typedef typename Solver::Scalar value_type;
59 static size_t coarse_enough()
64 template <
class Matrix>
65 EigenSolver(
const Matrix& A,
const params& = params())
66 : n(backend::nbRow(A))
68 typedef typename std::remove_const<typename std::remove_pointer<typename backend::col_data_impl<Matrix>::type>::type>::type col_type;
69 typedef typename std::remove_const<typename std::remove_pointer<typename backend::ptr_data_impl<Matrix>::type>::type>::type ptr_type;
71 S.compute(MatrixType(Eigen::Map<Eigen::SparseMatrix<value_type, Eigen::RowMajor, ptrdiff_t>>(
72 backend::nbRow(A), backend::nbColumn(A), backend::nonzeros(A),
73 const_cast<ptr_type*
>(backend::ptr_data(A)),
74 const_cast<col_type*
>(backend::col_data(A)),
75 const_cast<value_type*
>(backend::val_data(A)))));
78 template <
class Vec1,
class Vec2>
79 void operator()(
const Vec1& rhs, Vec2& x)
const
81 Eigen::Map<Eigen::Matrix<value_type, Eigen::Dynamic, 1>>
82 RHS(
const_cast<value_type*
>(&rhs[0]), n), X(&x[0], n);
87 friend std::ostream& operator<<(std::ostream& os,
const EigenSolver& s)
89 return os <<
"eigen: " << s.n <<
" unknowns";