2 #ifndef LSST_JOINTCAL_EIGENSTUFF_H 3 #define LSST_JOINTCAL_EIGENSTUFF_H 5 #include "Eigen/CholmodSupport" 9 typedef Eigen::Matrix<double, Eigen::Dynamic, 2>
MatrixX2d;
11 typedef Eigen::SparseMatrix<double>
SpMat;
22 template <
typename _MatrixType,
int _UpLo = Eigen::Lower>
24 :
public Eigen::CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT2<_MatrixType, _UpLo>> {
25 typedef Eigen::CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT2> Base;
26 using Base::m_cholmod;
30 typedef typename MatrixType::Index
Index;
37 this->compute(matrix);
43 Index
const size = Base::m_cholmodFactor->n;
44 EIGEN_UNUSED_VARIABLE(size);
45 eigen_assert(size == H.rows());
47 cholmod_sparse C_cs = viewAsCholmod(H);
50 cholmod_sparse *C_cs_perm =
51 cholmod_submatrix(&C_cs, (
int *)Base::m_cholmodFactor->Perm, Base::m_cholmodFactor->n,
52 nullptr, -1,
true,
true, &this->cholmod());
54 int ret = cholmod_updown(UpOrDown, C_cs_perm, Base::m_cholmodFactor, &this->cholmod());
55 cholmod_free_sparse(&C_cs_perm, &this->cholmod());
62 m_cholmod.final_asis = 1;
63 m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
66 Base::m_shiftOffset[0] = Base::m_shiftOffset[1] =
RealScalar(0.0);
70 #endif // LSST_JOINTCAL_EIGENSTUFF_H int update(SpMat const &H, bool UpOrDown)
CholmodSimplicialLDLT2(MatrixType const &matrix)
MatrixType::RealScalar RealScalar
Eigen::SparseMatrix< double > SpMat
Eigen::Matrix< double, Eigen::Dynamic, 2 > MatrixX2d