30 #ifndef SPARSELU_COLUMN_DFS_H 31 #define SPARSELU_COLUMN_DFS_H 38 template<
typename IndexVector,
typename ScalarVector>
41 typedef typename ScalarVector::Scalar
Scalar;
42 typedef typename IndexVector::Scalar
Index;
50 void mem_expand(IndexVector& lsub, Index& nextl, Index chmark)
52 if (nextl >=
m_glu.nzlmax)
92 template <
typename Scalar,
typename Index>
93 Index SparseLUImpl<Scalar,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)
106 Index krow = lsub_col(k);
108 Index kmark = marker2(krow);
111 if (kmark == jcol)
continue;
113 dfs_kernel(jcol, perm_r, nseg, glu.
lsub, segrep, repfnz, xprune, marker2, parent,
114 xplore, glu, nextl, krow, traits);
117 Index fsupc, jptr, jm1ptr, ito, ifrom, istop;
119 Index jcolp1 = jcol + 1;
120 Index jcolm1 = jcol - 1;
125 nsuper = glu.
supno(0) = 0 ;
129 fsupc = glu.
xsup(nsuper);
130 jptr = glu.
xlsub(jcol);
131 jm1ptr = glu.
xlsub(jcolm1);
134 if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper =
emptyIdxLU;
138 if ( (jcol - fsupc) >= maxsuper) jsuper =
emptyIdxLU;
147 if ( (fsupc < jcolm1-1) )
149 ito = glu.
xlsub(fsupc+1);
150 glu.
xlsub(jcolm1) = ito;
151 istop = ito + jptr - jm1ptr;
152 xprune(jcolm1) = istop;
153 glu.
xlsub(jcol) = istop;
155 for (ifrom = jm1ptr; ifrom < nextl; ++ifrom, ++ito)
160 glu.
supno(jcol) = nsuper;
165 glu.
xsup(nsuper+1) = jcolp1;
166 glu.
supno(jcolp1) = nsuper;
167 xprune(jcol) = nextl;
168 glu.
xlsub(jcolp1) = nextl;
ScalarVector::Scalar Scalar
column_dfs_traits(Index jcol, Index &jsuper, typename SparseLUImpl< Scalar, Index >::GlobalLU_t &glu, SparseLUImpl< Scalar, Index > &luImpl)
iterative scaling algorithm to equilibrate rows and column norms in matrices
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.
Expression of a fixed-size or dynamic-size sub-vector.
A matrix or vector expression mapping an existing expressions.
bool update_segrep(Index, Index)
SparseLUImpl< Scalar, Index > & m_luImpl
void mem_expand(IndexVector &lsub, Index &nextl, Index chmark)
IndexVector::Scalar Index
SparseLUImpl< Scalar, Index >::GlobalLU_t & m_glu