11 #ifndef EIGEN_SPARSELU_SUPERNODAL_MATRIX_H    12 #define EIGEN_SPARSELU_SUPERNODAL_MATRIX_H    32 template <
typename _Scalar, 
typename _StorageIndex>
    46              IndexVector& rowind_colptr, IndexVector& col_to_sup, IndexVector& sup_to_col )
    48       setInfos(m, n, nzval, nzval_colptr, rowind, rowind_colptr, col_to_sup, sup_to_col);
    61     void setInfos(
Index m, 
Index n, ScalarVector& nzval, IndexVector& nzval_colptr, IndexVector& rowind,
    62              IndexVector& rowind_colptr, IndexVector& col_to_sup, IndexVector& sup_to_col )
   157     template<
typename Dest>
   181 template<
typename Scalar, 
typename StorageIndex>
   190         m_startidval(m_idval),
   201     inline Scalar value()
 const { 
return m_matrix.valuePtr()[m_idval]; }
   205     inline Index index()
 const { 
return m_matrix.rowIndex()[m_idrow]; }
   211     inline operator bool()
 const    213       return ( (m_idval < m_endidval) && (m_idval >= m_startidval)
   214                 && (m_idrow < m_endidrow) );
   232 template<
typename Scalar, 
typename Index_>
   233 template<
typename Dest>
   239     Index n    = int(X.rows());
   250       Index nrow = nsupr - nsupc;                     
   255         for (
Index j = 0; j < nrhs; j++)
   262             X(irow, j) -= X(fsupc, j) * it.
value();
   275         U = A.template triangularView<UnitLower>().solve(U); 
   279         work.block(0, 0, nrow, nrhs) = A * U; 
   282         for (
Index j = 0; j < nrhs; j++)
   284           Index iptr = istart + nsupc; 
   285           for (
Index i = 0; i < nrow; i++)
   288             X(irow, j) -= work(i, j); 
   301 #endif // EIGEN_SPARSELU_MATRIX_H MappedSuperNodalMatrix(Index m, Index n, ScalarVector &nzval, IndexVector &nzval_colptr, IndexVector &rowind, IndexVector &rowind_colptr, IndexVector &col_to_sup, IndexVector &sup_to_col)
const StorageIndex * rowIndexPtr() const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar * data() const
A matrix or vector expression mapping an existing array of data. 
const Scalar * valuePtr() const
StorageIndex * m_sup_to_col
StorageIndex * colIndexPtr()
StorageIndex * m_rowind_colptr
InnerIterator class to iterate over nonzero values of the current column in the supernodal matrix L...
InnerIterator(const MappedSuperNodalMatrix &mat, Index outer)
StorageIndex * m_nzval_colptr
StorageIndex * rowIndexPtr()
StorageIndex * m_col_to_sup
EIGEN_STRONG_INLINE Index row() const
InnerIterator & operator++()
StorageIndex * colToSup()
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API. 
void setInfos(Index m, Index n, ScalarVector &nzval, IndexVector &nzval_colptr, IndexVector &rowind, IndexVector &rowind_colptr, IndexVector &col_to_sup, IndexVector &sup_to_col)
const MappedSuperNodalMatrix & m_matrix
StorageIndex * supToCol()
void solveInPlace(MatrixBase< Dest > &X) const
Solve with the supernode triangular matrix. 
const StorageIndex * supToCol() const
EIGEN_DEVICE_FUNC Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > & setZero(Index size)
Matrix< Scalar, Dynamic, 1 > ScalarVector
EIGEN_STRONG_INLINE Scalar value() const
_StorageIndex StorageIndex
Matrix< StorageIndex, Dynamic, 1 > IndexVector
const StorageIndex * colToSup() const
const StorageIndex * rowIndex() const
Convenience specialization of Stride to specify only an outer stride See class Map for some examples...
const StorageIndex * colIndexPtr() const
a class to manipulate the L supernodal factor from the SparseLU factorization 
Base class for all dense matrices, vectors, and expressions. 
~MappedSuperNodalMatrix()
StorageIndex * rowIndex()
An InnerIterator allows to loop over the element of any matrix expression.