11#ifndef EIGEN_SPARSELU_SUPERNODAL_MATRIX_H
12#define EIGEN_SPARSELU_SUPERNODAL_MATRIX_H
32template <
typename _Scalar,
typename _StorageIndex>
48 setInfos(m, n, nzval, nzval_colptr, rowind, rowind_colptr, col_to_sup, sup_to_col);
157 template<
typename Dest>
159 template<
bool Conjugate,
typename Dest>
184template<
typename Scalar,
typename StorageIndex>
193 m_startidval(m_idval),
204 inline Scalar value()
const {
return m_matrix.valuePtr()[m_idval]; }
208 inline Index index()
const {
return m_matrix.rowIndex()[m_idrow]; }
214 inline operator bool()
const
216 return ( (m_idval < m_endidval) && (m_idval >= m_startidval)
217 && (m_idrow < m_endidrow) );
235template<
typename Scalar,
typename Index_>
236template<
typename Dest>
242 Index n = int(X.rows());
244 const Scalar * Lval = valuePtr();
247 for (
Index k = 0; k <= nsuper(); k ++)
249 Index fsupc = supToCol()[k];
250 Index istart = rowIndexPtr()[fsupc];
251 Index nsupr = rowIndexPtr()[fsupc+1] - istart;
252 Index nsupc = supToCol()[k+1] - fsupc;
253 Index nrow = nsupr - nsupc;
258 for (
Index j = 0; j < nrhs; j++)
265 X(irow, j) -= X(fsupc, j) * it.
value();
272 Index luptr = colIndexPtr()[fsupc];
273 Index lda = colIndexPtr()[fsupc+1] - luptr;
278 U = A.template triangularView<UnitLower>().solve(U);
282 work.topRows(nrow).noalias() = A * U;
285 for (
Index j = 0; j < nrhs; j++)
287 Index iptr = istart + nsupc;
288 for (
Index i = 0; i < nrow; i++)
290 irow = rowIndex()[iptr];
291 X(irow, j) -=
work(i, j);
300template<
typename Scalar,
typename Index_>
301template<
bool Conjugate,
typename Dest>
305 Index n = int(X.rows());
307 const Scalar * Lval = valuePtr();
310 for (
Index k = nsuper(); k >= 0; k--)
312 Index fsupc = supToCol()[k];
313 Index istart = rowIndexPtr()[fsupc];
314 Index nsupr = rowIndexPtr()[fsupc+1] - istart;
315 Index nsupc = supToCol()[k+1] - fsupc;
316 Index nrow = nsupr - nsupc;
321 for (
Index j = 0; j < nrhs; j++)
335 Index luptr = colIndexPtr()[fsupc];
336 Index lda = colIndexPtr()[fsupc+1] - luptr;
339 for (
Index j = 0; j < nrhs; j++)
341 Index iptr = istart + nsupc;
342 for (
Index i = 0; i < nrow; i++)
344 irow = rowIndex()[iptr];
345 work.topRows(nrow)(i,j)= X(irow,j);
354 U = U - A.adjoint() *
work.topRows(nrow);
356 U = U - A.transpose() *
work.topRows(nrow);
361 U = A.adjoint().template triangularView<UnitUpper>().solve(U);
363 U = A.transpose().template triangularView<UnitUpper>().solve(U);
and restrictions which apply to each piece of software is included later in this file and or inside of the individual applicable source files The disclaimer of warranty in the WPILib license above applies to all code in and nothing in any of the other licenses gives permission to use the names of FIRST nor the names of the WPILib contributors to endorse or promote products derived from this software The following pieces of software have additional or alternate and or Google Inc All rights reserved Redistribution and use in source and binary with or without are permitted provided that the following conditions are this list of conditions and the following disclaimer *Redistributions in binary form must reproduce the above copyright this list of conditions and the following disclaimer in the documentation and or other materials provided with the distribution *Neither the name of Google Inc nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY OR CONSEQUENTIAL WHETHER IN STRICT OR EVEN IF ADVISED OF THE POSSIBILITY OF SUCH January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation and configuration files Object form shall mean any form resulting from mechanical transformation or translation of a Source including but not limited to compiled object generated and conversions to other media types Work shall mean the work of whether in Source or Object made available under the as indicated by a copyright notice that is included in or attached to the work(an example is provided in the Appendix below). "Derivative Works" shall mean any work
Definition: ForwardDeclarations.h:87
An InnerIterator allows to loop over the element of any matrix expression.
Definition: CoreIterators.h:34
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
Convenience specialization of Stride to specify only an outer stride See class Map for some examples.
Definition: Stride.h:107
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar * data() const
Definition: PlainObjectBase.h:247
InnerIterator class to iterate over nonzero values of the current column in the supernodal matrix L.
Definition: SparseLU_SupernodalMatrix.h:186
Index m_idval
Definition: SparseLU_SupernodalMatrix.h:224
const Index m_startidval
Definition: SparseLU_SupernodalMatrix.h:225
Index m_endidrow
Definition: SparseLU_SupernodalMatrix.h:228
Scalar value() const
Definition: SparseLU_SupernodalMatrix.h:204
InnerIterator(const MappedSuperNodalMatrix &mat, Index outer)
Definition: SparseLU_SupernodalMatrix.h:188
const Index m_endidval
Definition: SparseLU_SupernodalMatrix.h:226
Scalar & valueRef()
Definition: SparseLU_SupernodalMatrix.h:206
Index supIndex() const
Definition: SparseLU_SupernodalMatrix.h:212
InnerIterator & operator++()
Definition: SparseLU_SupernodalMatrix.h:198
Index m_idrow
Definition: SparseLU_SupernodalMatrix.h:227
Index col() const
Definition: SparseLU_SupernodalMatrix.h:210
const MappedSuperNodalMatrix & m_matrix
Definition: SparseLU_SupernodalMatrix.h:221
Index index() const
Definition: SparseLU_SupernodalMatrix.h:208
const Index m_outer
Definition: SparseLU_SupernodalMatrix.h:222
const Index m_supno
Definition: SparseLU_SupernodalMatrix.h:223
Index row() const
Definition: SparseLU_SupernodalMatrix.h:209
a class to manipulate the L supernodal factor from the SparseLU factorization
Definition: SparseLU_SupernodalMatrix.h:34
StorageIndex * supToCol()
Return the array of supernode-to-column mapping.
Definition: SparseLU_SupernodalMatrix.h:141
const StorageIndex * colToSup() const
Definition: SparseLU_SupernodalMatrix.h:134
StorageIndex * rowIndex()
Return the array of compressed row indices of all supernodes.
Definition: SparseLU_SupernodalMatrix.h:112
_Scalar Scalar
Definition: SparseLU_SupernodalMatrix.h:36
Index m_nsuper
Definition: SparseLU_SupernodalMatrix.h:169
StorageIndex * rowIndexPtr()
Return the location in rowvaluePtr() which starts each column.
Definition: SparseLU_SupernodalMatrix.h:122
MappedSuperNodalMatrix(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:45
Scalar * m_nzval
Definition: SparseLU_SupernodalMatrix.h:170
const Scalar * valuePtr() const
Definition: SparseLU_SupernodalMatrix.h:92
StorageIndex * colToSup()
Return the array of column-to-supernode mapping.
Definition: SparseLU_SupernodalMatrix.h:132
StorageIndex * m_sup_to_col
Definition: SparseLU_SupernodalMatrix.h:175
StorageIndex * m_col_to_sup
Definition: SparseLU_SupernodalMatrix.h:174
const StorageIndex * rowIndexPtr() const
Definition: SparseLU_SupernodalMatrix.h:124
Matrix< StorageIndex, Dynamic, 1 > IndexVector
Definition: SparseLU_SupernodalMatrix.h:38
_StorageIndex StorageIndex
Definition: SparseLU_SupernodalMatrix.h:37
StorageIndex * m_rowind
Definition: SparseLU_SupernodalMatrix.h:172
void solveTransposedInPlace(MatrixBase< Dest > &X) const
Definition: SparseLU_SupernodalMatrix.h:302
StorageIndex * colIndexPtr()
Return the pointers to the beginning of each column in valuePtr()
Definition: SparseLU_SupernodalMatrix.h:99
Index nsuper() const
Return the number of supernodes.
Definition: SparseLU_SupernodalMatrix.h:151
const StorageIndex * rowIndex() const
Definition: SparseLU_SupernodalMatrix.h:114
StorageIndex * m_nzval_colptr
Definition: SparseLU_SupernodalMatrix.h:171
Index rows() const
Number of rows.
Definition: SparseLU_SupernodalMatrix.h:78
const StorageIndex * colIndexPtr() const
Definition: SparseLU_SupernodalMatrix.h:104
Matrix< Scalar, Dynamic, 1 > ScalarVector
Definition: SparseLU_SupernodalMatrix.h:39
void solveInPlace(MatrixBase< Dest > &X) const
Solve with the supernode triangular matrix.
Definition: SparseLU_SupernodalMatrix.h:237
Index m_col
Definition: SparseLU_SupernodalMatrix.h:168
MappedSuperNodalMatrix()
Definition: SparseLU_SupernodalMatrix.h:41
Scalar * valuePtr()
Return the array of nonzero values packed by column.
Definition: SparseLU_SupernodalMatrix.h:90
const StorageIndex * supToCol() const
Definition: SparseLU_SupernodalMatrix.h:143
Index m_row
Definition: SparseLU_SupernodalMatrix.h:167
StorageIndex * m_rowind_colptr
Definition: SparseLU_SupernodalMatrix.h:173
Index cols() const
Number of columns.
Definition: SparseLU_SupernodalMatrix.h:83
void setInfos(Index m, Index n, ScalarVector &nzval, IndexVector &nzval_colptr, IndexVector &rowind, IndexVector &rowind_colptr, IndexVector &col_to_sup, IndexVector &sup_to_col)
Set appropriate pointers for the lower triangular supernodal matrix These infos are available at the ...
Definition: SparseLU_SupernodalMatrix.h:61
~MappedSuperNodalMatrix()
Definition: SparseLU_SupernodalMatrix.h:51
Namespace containing all symbols from the Eigen library.
Definition: Core:141
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
Definition: Eigen_Colamd.h:50