11#ifndef EIGEN_SPARSELU_SUPERNODAL_MATRIX_H
12#define EIGEN_SPARSELU_SUPERNODAL_MATRIX_H
32template <
typename _Scalar,
typename _StorageIndex>
33class MappedSuperNodalMatrix
36 typedef _Scalar Scalar;
37 typedef _StorageIndex StorageIndex;
41 MappedSuperNodalMatrix()
45 MappedSuperNodalMatrix(
Index m,
Index n, ScalarVector& nzval, IndexVector& nzval_colptr, IndexVector& rowind,
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);
51 ~MappedSuperNodalMatrix()
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 )
66 m_nzval = nzval.
data();
67 m_nzval_colptr = nzval_colptr.
data();
68 m_rowind = rowind.
data();
69 m_rowind_colptr = rowind_colptr.
data();
70 m_nsuper = col_to_sup(n);
71 m_col_to_sup = col_to_sup.
data();
72 m_sup_to_col = sup_to_col.
data();
101 return m_nzval_colptr;
106 return m_nzval_colptr;
114 const StorageIndex*
rowIndex()
const
126 return m_rowind_colptr;
134 const StorageIndex*
colToSup()
const
143 const StorageIndex*
supToCol()
const
157 template<
typename Dest>
168 StorageIndex* m_nzval_colptr;
169 StorageIndex* m_rowind;
170 StorageIndex* m_rowind_colptr;
171 StorageIndex* m_col_to_sup;
172 StorageIndex* m_sup_to_col;
181template<
typename Scalar,
typename StorageIndex>
190 m_startidval(m_idval),
201 inline Scalar value()
const {
return m_matrix.valuePtr()[m_idval]; }
203 inline Scalar& valueRef() {
return const_cast<Scalar&
>(m_matrix.valuePtr()[m_idval]); }
205 inline Index index()
const {
return m_matrix.rowIndex()[m_idrow]; }
206 inline Index row()
const {
return index(); }
207 inline Index col()
const {
return m_outer; }
209 inline Index supIndex()
const {
return m_supno; }
211 inline operator bool()
const
213 return ( (m_idval < m_endidval) && (m_idval >= m_startidval)
214 && (m_idrow < m_endidrow) );
218 const MappedSuperNodalMatrix& m_matrix;
222 const Index m_startidval;
223 const Index m_endidval;
232template<
typename Scalar,
typename Index_>
233template<
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.
topRows(nrow).noalias() = 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);
289 work(i, j) = Scalar(0);
RowsBlockXpr topRows(Index n)
Definition DenseBase.h:433
A matrix or vector expression mapping an existing array of data.
Definition Map.h:96
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
The matrix class, also used for vectors and row-vectors.
Definition Matrix.h:180
Convenience specialization of Stride to specify only an outer stride See class Map for some examples.
Definition Stride.h:102
Derived & setZero(Index size)
Definition CwiseNullaryOp.h:515
const Scalar * data() const
Definition PlainObjectBase.h:255
InnerIterator class to iterate over nonzero values of the current column in the supernodal matrix L.
Definition SparseLU_SupernodalMatrix.h:183
StorageIndex * supToCol()
Definition SparseLU_SupernodalMatrix.h:141
StorageIndex * rowIndex()
Definition SparseLU_SupernodalMatrix.h:112
StorageIndex * rowIndexPtr()
Definition SparseLU_SupernodalMatrix.h:122
Index cols()
Definition SparseLU_SupernodalMatrix.h:83
StorageIndex * colToSup()
Definition SparseLU_SupernodalMatrix.h:132
Index rows()
Definition SparseLU_SupernodalMatrix.h:78
StorageIndex * colIndexPtr()
Definition SparseLU_SupernodalMatrix.h:99
Index nsuper() const
Definition SparseLU_SupernodalMatrix.h:151
void solveInPlace(MatrixBase< Dest > &X) const
Solve with the supernode triangular matrix.
Definition SparseLU_SupernodalMatrix.h:234
Scalar * valuePtr()
Definition SparseLU_SupernodalMatrix.h:90
void setInfos(Index m, Index n, ScalarVector &nzval, IndexVector &nzval_colptr, IndexVector &rowind, IndexVector &rowind_colptr, IndexVector &col_to_sup, IndexVector &sup_to_col)
Definition SparseLU_SupernodalMatrix.h:61
Namespace containing all symbols from the Eigen library.
Definition A05_PortingFrom2To3.dox:1
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:65