72 jsupno = glu.supno(jcol);
79 for (ksub = 0; ksub < nseg; ksub++) {
82 ksupno = glu.supno(krep);
83 if (jsupno != ksupno) {
85 fsupc = glu.xsup(ksupno);
86 fst_col = (std::max)(fsupc, fpanelc);
90 d_fsupc = fst_col - fsupc;
92 luptr = glu.xlusup(fst_col) + d_fsupc;
93 lptr = glu.xlsub(fsupc) + d_fsupc;
96 kfnz = (std::max)(kfnz, fpanelc);
98 segsize = krep - kfnz + 1;
99 nsupc = krep - fst_col + 1;
100 nsupr = glu.xlsub(fsupc + 1) - glu.xlsub(fsupc);
101 nrow = nsupr - d_fsupc - nsupc;
102 Index lda = glu.xlusup(fst_col + 1) - glu.xlusup(fst_col);
106 no_zeros = kfnz - fst_col;
108 LU_kernel_bmod<1>::run(segsize, dense, tempv, glu.lusup, luptr, lda, nrow, glu.lsub, lptr, no_zeros);
110 LU_kernel_bmod<Dynamic>::run(segsize, dense, tempv, glu.lusup, luptr, lda, nrow, glu.lsub, lptr, no_zeros);
115 nextlu = glu.xlusup(jcol);
116 fsupc = glu.xsup(jsupno);
120 new_next = nextlu + glu.xlsub(fsupc + 1) - glu.xlsub(fsupc);
121 Index offset = internal::first_multiple<Index>(new_next, internal::packet_traits<Scalar>::size) - new_next;
122 if (offset) new_next += offset;
123 while (new_next > glu.nzlumax) {
124 mem = memXpand<ScalarVector>(glu.lusup, glu.nzlumax, nextlu, LUSUP, glu.num_expansions);
128 for (isub = glu.xlsub(fsupc); isub < glu.xlsub(fsupc + 1); isub++) {
129 irow = glu.lsub(isub);
130 glu.lusup(nextlu) = dense(irow);
131 dense(irow) = Scalar(0.0);
136 glu.lusup.segment(nextlu, offset).setZero();
139 glu.xlusup(jcol + 1) = StorageIndex(nextlu);
147 fst_col = (std::max)(fsupc, fpanelc);
149 if (fst_col < jcol) {
152 d_fsupc = fst_col - fsupc;
154 lptr = glu.xlsub(fsupc) + d_fsupc;
155 luptr = glu.xlusup(fst_col) + d_fsupc;
156 nsupr = glu.xlsub(fsupc + 1) - glu.xlsub(fsupc);
157 nsupc = jcol - fst_col;
158 nrow = nsupr - d_fsupc - nsupc;
161 ufirst = glu.xlusup(jcol) + d_fsupc;
162 Index lda = glu.xlusup(jcol + 1) - glu.xlusup(jcol);
163 MappedMatrixBlock A(&(glu.lusup.data()[luptr]), nsupc, nsupc, OuterStride<>(lda));
164 VectorBlock<ScalarVector> u(glu.lusup, ufirst, nsupc);
165 u = A.template triangularView<UnitLower>().solve(u);
167 new (&A) MappedMatrixBlock(&(glu.lusup.data()[luptr + nsupc]), nrow, nsupc, OuterStride<>(lda));
168 VectorBlock<ScalarVector> l(glu.lusup, ufirst + nsupc, nrow);
169 l.noalias() -= A * u;