29 #if defined(_RHEOLEF_HAVE_CHOLMOD)
33 template<
class T,
class M>
42 using namespace Eigen;
43 Matrix<int,Dynamic,1> nnz_row (
a.nrow());
46 nnz_row[i] = ia[i+1] - ia[i];
48 SparseMatrix<T> a_tmp (
a.nrow(),
a.ncol());
49 a_tmp.reserve (nnz_row);
52 a_tmp.insert (i, (*p).first) = (*p).second;
55 a_tmp.makeCompressed();
56 _llt_a.compute (a_tmp);
57 check_macro (_llt_a.info() == Success,
"cholmod LLt factorization failed: non-positive definite matrix");
60 if (base::option().compute_determinant) {
61 T det_a = _llt_a.determinant();
63 _det.exponant = _llt_a.logDeterminant() / log(
T(10));
67 template<
class T,
class M>
72 if (_a.nnz() == 0)
return x;
73 using namespace Eigen;
74 Map<Matrix<T,Dynamic,1> > b_map ((
T*)(&(*
b.begin())),
b.size()),
75 x_map ( &(*x.begin()), x.size());
76 x_map = _llt_a.solve (b_map);
79 template<
class T,
class M>
91 #ifdef _RHEOLEF_HAVE_MPI
93 #endif // _RHEOLEF_HAVE_MPI
96 #endif // _RHEOLEF_HAVE_CHOLMOD