MOAB  4.9.3pre
Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex > Class Template Reference

a class to manipulate the L supernodal factor from the SparseLU factorization More...

#include <SparseLU_SupernodalMatrix.h>

Inheritance diagram for Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >:

List of all members.

Classes

class  InnerIterator
 InnerIterator class to iterate over nonzero values of the current column in the supernodal matrix L. More...

Public Types

typedef _Scalar Scalar
typedef _StorageIndex StorageIndex
typedef Matrix< StorageIndex,
Dynamic, 1 > 
IndexVector
typedef Matrix< Scalar,
Dynamic, 1 > 
ScalarVector

Public Member Functions

 MappedSuperNodalMatrix ()
 MappedSuperNodalMatrix (Index m, Index n, ScalarVector &nzval, IndexVector &nzval_colptr, IndexVector &rowind, IndexVector &rowind_colptr, IndexVector &col_to_sup, IndexVector &sup_to_col)
 ~MappedSuperNodalMatrix ()
void setInfos (Index m, Index n, ScalarVector &nzval, IndexVector &nzval_colptr, IndexVector &rowind, IndexVector &rowind_colptr, IndexVector &col_to_sup, IndexVector &sup_to_col)
Index rows ()
Index cols ()
ScalarvaluePtr ()
const ScalarvaluePtr () const
StorageIndexcolIndexPtr ()
const StorageIndexcolIndexPtr () const
StorageIndexrowIndex ()
const StorageIndexrowIndex () const
StorageIndexrowIndexPtr ()
const StorageIndexrowIndexPtr () const
StorageIndexcolToSup ()
const StorageIndexcolToSup () const
StorageIndexsupToCol ()
const StorageIndexsupToCol () const
Index nsuper () const
template<typename Dest >
void solveInPlace (MatrixBase< Dest > &X) const
 Solve with the supernode triangular matrix.

Protected Attributes

Index m_row
Index m_col
Index m_nsuper
Scalarm_nzval
StorageIndexm_nzval_colptr
StorageIndexm_rowind
StorageIndexm_rowind_colptr
StorageIndexm_col_to_sup
StorageIndexm_sup_to_col

Detailed Description

template<typename _Scalar, typename _StorageIndex>
class Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >

a class to manipulate the L supernodal factor from the SparseLU factorization

This class contain the data to easily store and manipulate the supernodes during the factorization and solution phase of Sparse LU. Only the lower triangular matrix has supernodes.

NOTE : This class corresponds to the SCformat structure in SuperLU

Definition at line 33 of file SparseLU_SupernodalMatrix.h.


Member Typedef Documentation

template<typename _Scalar, typename _StorageIndex>
typedef Matrix<StorageIndex,Dynamic,1> Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::IndexVector

Definition at line 38 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
typedef _Scalar Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::Scalar

Definition at line 36 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
typedef Matrix<Scalar,Dynamic,1> Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::ScalarVector

Definition at line 39 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
typedef _StorageIndex Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::StorageIndex

Definition at line 37 of file SparseLU_SupernodalMatrix.h.


Constructor & Destructor Documentation

template<typename _Scalar, typename _StorageIndex>
Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::MappedSuperNodalMatrix ( ) [inline]

Definition at line 41 of file SparseLU_SupernodalMatrix.h.

    {
      
    }
template<typename _Scalar, typename _StorageIndex>
Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::MappedSuperNodalMatrix ( Index  m,
Index  n,
ScalarVector nzval,
IndexVector nzval_colptr,
IndexVector rowind,
IndexVector rowind_colptr,
IndexVector col_to_sup,
IndexVector sup_to_col 
) [inline]

Definition at line 45 of file SparseLU_SupernodalMatrix.h.

    {
      setInfos(m, n, nzval, nzval_colptr, rowind, rowind_colptr, col_to_sup, sup_to_col);
    }
template<typename _Scalar, typename _StorageIndex>
Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::~MappedSuperNodalMatrix ( ) [inline]

Definition at line 51 of file SparseLU_SupernodalMatrix.h.

    {
      
    }

Member Function Documentation

template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::colIndexPtr ( ) [inline]

Return the pointers to the beginning of each column in valuePtr()

Definition at line 99 of file SparseLU_SupernodalMatrix.h.

    {
      return m_nzval_colptr; 
    }
template<typename _Scalar, typename _StorageIndex>
const StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::colIndexPtr ( ) const [inline]

Definition at line 104 of file SparseLU_SupernodalMatrix.h.

    {
      return m_nzval_colptr; 
    }
template<typename _Scalar, typename _StorageIndex>
Index Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::cols ( void  ) [inline]

Number of columns

Definition at line 83 of file SparseLU_SupernodalMatrix.h.

{ return m_col; }
template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::colToSup ( ) [inline]

Return the array of column-to-supernode mapping

Definition at line 132 of file SparseLU_SupernodalMatrix.h.

{ return m_col_to_sup; }
template<typename _Scalar, typename _StorageIndex>
const StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::colToSup ( ) const [inline]

Definition at line 134 of file SparseLU_SupernodalMatrix.h.

    {
      return m_col_to_sup;       
    }
template<typename _Scalar, typename _StorageIndex>
Index Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::nsuper ( ) const [inline]

Return the number of supernodes

Definition at line 151 of file SparseLU_SupernodalMatrix.h.

    {
      return m_nsuper; 
    }
template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::rowIndex ( ) [inline]

Return the array of compressed row indices of all supernodes

Definition at line 112 of file SparseLU_SupernodalMatrix.h.

{ return m_rowind; }
template<typename _Scalar, typename _StorageIndex>
const StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::rowIndex ( ) const [inline]

Definition at line 114 of file SparseLU_SupernodalMatrix.h.

    {
      return m_rowind; 
    }
template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::rowIndexPtr ( ) [inline]

Return the location in rowvaluePtr() which starts each column

Definition at line 122 of file SparseLU_SupernodalMatrix.h.

{ return m_rowind_colptr; }
template<typename _Scalar, typename _StorageIndex>
const StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::rowIndexPtr ( ) const [inline]

Definition at line 124 of file SparseLU_SupernodalMatrix.h.

    {
      return m_rowind_colptr; 
    }
template<typename _Scalar, typename _StorageIndex>
Index Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::rows ( void  ) [inline]

Number of rows

Definition at line 78 of file SparseLU_SupernodalMatrix.h.

{ return m_row; }
template<typename _Scalar, typename _StorageIndex>
void Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::setInfos ( Index  m,
Index  n,
ScalarVector nzval,
IndexVector nzval_colptr,
IndexVector rowind,
IndexVector rowind_colptr,
IndexVector col_to_sup,
IndexVector sup_to_col 
) [inline]

Set appropriate pointers for the lower triangular supernodal matrix These infos are available at the end of the numerical factorization FIXME This class will be modified such that it can be use in the course of the factorization.

Definition at line 61 of file SparseLU_SupernodalMatrix.h.

    {
      m_row = m;
      m_col = n; 
      m_nzval = nzval.data(); 
      m_nzval_colptr = nzval_colptr.data(); 
      m_rowind = rowind.data(); 
      m_rowind_colptr = rowind_colptr.data(); 
      m_nsuper = col_to_sup(n); 
      m_col_to_sup = col_to_sup.data(); 
      m_sup_to_col = sup_to_col.data(); 
    }
template<typename Scalar , typename Index_ >
template<typename Dest >
void Eigen::internal::MappedSuperNodalMatrix< Scalar, Index_ >::solveInPlace ( MatrixBase< Dest > &  X) const

Solve with the supernode triangular matrix.

Definition at line 234 of file SparseLU_SupernodalMatrix.h.

{
    /* Explicit type conversion as the Index type of MatrixBase<Dest> may be wider than Index */
//    eigen_assert(X.rows() <= NumTraits<Index>::highest());
//    eigen_assert(X.cols() <= NumTraits<Index>::highest());
    Index n    = int(X.rows());
    Index nrhs = Index(X.cols());
    const Scalar * Lval = valuePtr();                 // Nonzero values 
    Matrix<Scalar,Dynamic,Dynamic, ColMajor> work(n, nrhs);     // working vector
    work.setZero();
    for (Index k = 0; k <= nsuper(); k ++)
    {
      Index fsupc = supToCol()[k];                    // First column of the current supernode 
      Index istart = rowIndexPtr()[fsupc];            // Pointer index to the subscript of the current column
      Index nsupr = rowIndexPtr()[fsupc+1] - istart;  // Number of rows in the current supernode
      Index nsupc = supToCol()[k+1] - fsupc;          // Number of columns in the current supernode
      Index nrow = nsupr - nsupc;                     // Number of rows in the non-diagonal part of the supernode
      Index irow;                                     //Current index row
      
      if (nsupc == 1 )
      {
        for (Index j = 0; j < nrhs; j++)
        {
          InnerIterator it(*this, fsupc);
          ++it; // Skip the diagonal element
          for (; it; ++it)
          {
            irow = it.row();
            X(irow, j) -= X(fsupc, j) * it.value();
          }
        }
      }
      else
      {
        // The supernode has more than one column 
        Index luptr = colIndexPtr()[fsupc]; 
        Index lda = colIndexPtr()[fsupc+1] - luptr;
        
        // Triangular solve 
        Map<const Matrix<Scalar,Dynamic,Dynamic, ColMajor>, 0, OuterStride<> > A( &(Lval[luptr]), nsupc, nsupc, OuterStride<>(lda) );
        Map< Matrix<Scalar,Dynamic,Dynamic, ColMajor>, 0, OuterStride<> > U (&(X(fsupc,0)), nsupc, nrhs, OuterStride<>(n) ); 
        U = A.template triangularView<UnitLower>().solve(U); 
        
        // Matrix-vector product 
        new (&A) Map<const Matrix<Scalar,Dynamic,Dynamic, ColMajor>, 0, OuterStride<> > ( &(Lval[luptr+nsupc]), nrow, nsupc, OuterStride<>(lda) );
        work.block(0, 0, nrow, nrhs) = A * U; 
        
        //Begin Scatter 
        for (Index j = 0; j < nrhs; j++)
        {
          Index iptr = istart + nsupc; 
          for (Index i = 0; i < nrow; i++)
          {
            irow = rowIndex()[iptr]; 
            X(irow, j) -= work(i, j); // Scatter operation
            work(i, j) = Scalar(0); 
            iptr++;
          }
        }
      }
    } 
}
template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::supToCol ( ) [inline]

Return the array of supernode-to-column mapping

Definition at line 141 of file SparseLU_SupernodalMatrix.h.

{ return m_sup_to_col; }
template<typename _Scalar, typename _StorageIndex>
const StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::supToCol ( ) const [inline]

Definition at line 143 of file SparseLU_SupernodalMatrix.h.

    {
      return m_sup_to_col;
    }
template<typename _Scalar, typename _StorageIndex>
Scalar* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::valuePtr ( ) [inline]

Return the array of nonzero values packed by column

The size is nnz

Definition at line 90 of file SparseLU_SupernodalMatrix.h.

{  return m_nzval; }
template<typename _Scalar, typename _StorageIndex>
const Scalar* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::valuePtr ( ) const [inline]

Definition at line 92 of file SparseLU_SupernodalMatrix.h.

    {
      return m_nzval; 
    }

Member Data Documentation

template<typename _Scalar, typename _StorageIndex>
Index Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_col [protected]

Definition at line 165 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_col_to_sup [protected]

Definition at line 171 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
Index Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_nsuper [protected]

Definition at line 166 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
Scalar* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_nzval [protected]

Definition at line 167 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_nzval_colptr [protected]

Definition at line 168 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
Index Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_row [protected]

Definition at line 164 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_rowind [protected]

Definition at line 169 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_rowind_colptr [protected]

Definition at line 170 of file SparseLU_SupernodalMatrix.h.

template<typename _Scalar, typename _StorageIndex>
StorageIndex* Eigen::internal::MappedSuperNodalMatrix< _Scalar, _StorageIndex >::m_sup_to_col [protected]

Definition at line 172 of file SparseLU_SupernodalMatrix.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines