30#ifndef SPARSELU_COLUMN_DFS_H
31#define SPARSELU_COLUMN_DFS_H
33template <
typename Scalar,
typename StorageIndex>
class SparseLUImpl;
38template<
typename IndexVector,
typename ScalarVector>
41 typedef typename ScalarVector::Scalar
Scalar;
92template <
typename Scalar,
typename StorageIndex>
108 Index krow = lsub_col(k);
110 Index kmark = marker2(krow);
113 if (kmark == jcol)
continue;
115 dfs_kernel(StorageIndex(jcol), perm_r, nseg, glu.
lsub, segrep, repfnz, xprune, marker2, parent,
116 xplore, glu, nextl, krow,
traits);
120 StorageIndex nsuper = glu.
supno(jcol);
121 StorageIndex jcolp1 = StorageIndex(jcol) + 1;
122 Index jcolm1 = jcol - 1;
127 nsuper = glu.
supno(0) = 0 ;
131 fsupc = glu.
xsup(nsuper);
132 StorageIndex jptr = glu.
xlsub(jcol);
133 StorageIndex jm1ptr = glu.
xlsub(jcolm1);
136 if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper =
emptyIdxLU;
140 if ( (jcol - fsupc) >= maxsuper) jsuper =
emptyIdxLU;
149 if ( (fsupc < jcolm1-1) )
151 StorageIndex ito = glu.
xlsub(fsupc+1);
152 glu.
xlsub(jcolm1) = ito;
153 StorageIndex istop = ito + jptr - jm1ptr;
154 xprune(jcolm1) = istop;
155 glu.
xlsub(jcol) = istop;
157 for (StorageIndex ifrom = jm1ptr; ifrom < nextl; ++ifrom, ++ito)
162 glu.
supno(jcol) = nsuper;
167 glu.
xsup(nsuper+1) = jcolp1;
168 glu.
supno(jcolp1) = nsuper;
169 xprune(jcol) = StorageIndex(nextl);
170 glu.
xlsub(jcolp1) = StorageIndex(nextl);
A matrix or vector expression mapping an existing expression.
Definition: Ref.h:283
Expression of a fixed-size or dynamic-size sub-vector.
Definition: VectorBlock.h:60
Base class for sparseLU.
Definition: SparseLUImpl.h:21
Index column_dfs(const Index m, const Index jcol, IndexVector &perm_r, Index maxsuper, Index &nseg, BlockIndexVector lsub_col, IndexVector &segrep, BlockIndexVector repfnz, IndexVector &xprune, IndexVector &marker, IndexVector &parent, IndexVector &xplore, GlobalLU_t &glu)
Performs a symbolic factorization on column jcol and decide the supernode boundary.
Definition: SparseLU_column_dfs.h:93
Definition: XprHelper.h:110
Definition: SparseLU_column_dfs.h:33
@ emptyIdxLU
Definition: SparseLU_Memory.h:38
@ LSUB
Definition: SparseLU_Structs.h:74
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
Definition: SparseLU_Structs.h:77
IndexVector xsup
Definition: SparseLU_Structs.h:79
IndexVector supno
Definition: SparseLU_Structs.h:80
IndexVector lsub
Definition: SparseLU_Structs.h:82
IndexVector xlsub
Definition: SparseLU_Structs.h:84
Definition: SparseLU_column_dfs.h:40
bool update_segrep(Index, Index)
Definition: SparseLU_column_dfs.h:46
SparseLUImpl< Scalar, StorageIndex > & m_luImpl
Definition: SparseLU_column_dfs.h:61
SparseLUImpl< Scalar, StorageIndex >::GlobalLU_t & m_glu
Definition: SparseLU_column_dfs.h:60
void mem_expand(IndexVector &lsub, Index &nextl, Index chmark)
Definition: SparseLU_column_dfs.h:50
@ ExpandMem
Definition: SparseLU_column_dfs.h:56
IndexVector::Scalar StorageIndex
Definition: SparseLU_column_dfs.h:42
column_dfs_traits(Index jcol, Index &jsuper, typename SparseLUImpl< Scalar, StorageIndex >::GlobalLU_t &glu, SparseLUImpl< Scalar, StorageIndex > &luImpl)
Definition: SparseLU_column_dfs.h:43
Index & m_jsuper_ref
Definition: SparseLU_column_dfs.h:59
ScalarVector::Scalar Scalar
Definition: SparseLU_column_dfs.h:41
Index m_jcol
Definition: SparseLU_column_dfs.h:58
Definition: ForwardDeclarations.h:17