mirror of
https://gitlab.com/libeigen/eigen.git
synced 2024-12-21 07:19:46 +08:00
working version of sparse LU without fill-reducing permutation
This commit is contained in:
parent
3095e4a5f9
commit
de2544cc9b
@ -234,7 +234,7 @@ class SparseLU
|
|||||||
{
|
{
|
||||||
for (jcol = fsupc; jcol < fsupc + nsupc; jcol++)
|
for (jcol = fsupc; jcol < fsupc + nsupc; jcol++)
|
||||||
{
|
{
|
||||||
for (i = m_Ustore.outerIndexPtr()[jcol]; i < m_Ustore.outerIndexPtr()[jcol]; i++)
|
for (i = m_Ustore.outerIndexPtr()[jcol]; i < m_Ustore.outerIndexPtr()[jcol+1]; i++)
|
||||||
{
|
{
|
||||||
irow = m_Ustore.innerIndexPtr()[i];
|
irow = m_Ustore.innerIndexPtr()[i];
|
||||||
X(irow, j) -= X(jcol, j) * m_Ustore.valuePtr()[i];
|
X(irow, j) -= X(jcol, j) * m_Ustore.valuePtr()[i];
|
||||||
@ -454,7 +454,7 @@ void SparseLU<MatrixType, OrderingType>::factorize(const MatrixType& matrix)
|
|||||||
IndexVector xplore(m);
|
IndexVector xplore(m);
|
||||||
IndexVector repfnz(maxpanel);
|
IndexVector repfnz(maxpanel);
|
||||||
IndexVector panel_lsub(maxpanel);
|
IndexVector panel_lsub(maxpanel);
|
||||||
IndexVector xprune(n);
|
IndexVector xprune(n); xprune.setZero();
|
||||||
IndexVector marker(m*LU_NO_MARKER);
|
IndexVector marker(m*LU_NO_MARKER);
|
||||||
|
|
||||||
repfnz.setConstant(-1);
|
repfnz.setConstant(-1);
|
||||||
@ -642,7 +642,7 @@ void SparseLU<MatrixType, OrderingType>::factorize(const MatrixType& matrix)
|
|||||||
for (i = 0; i < nseg; i++)
|
for (i = 0; i < nseg; i++)
|
||||||
{
|
{
|
||||||
irep = segrep(i);
|
irep = segrep(i);
|
||||||
repfnz(irep) = IND_EMPTY;
|
repfnz_k(irep) = IND_EMPTY;
|
||||||
}
|
}
|
||||||
} // end SparseLU within the panel
|
} // end SparseLU within the panel
|
||||||
jcol += panel_size; // Move to the next panel
|
jcol += panel_size; // Move to the next panel
|
||||||
|
@ -132,7 +132,6 @@ void LU_panel_bmod(const int m, const int w, const int jcol, const int nseg, Sca
|
|||||||
luptr += nsupr * no_zeros + no_zeros;
|
luptr += nsupr * no_zeros + no_zeros;
|
||||||
// triangular solve with Eigen
|
// triangular solve with Eigen
|
||||||
Map<Matrix<Scalar,Dynamic, Dynamic>, 0, OuterStride<> > A( &(lusup.data()[luptr]), segsize, segsize, OuterStride<>(nsupr) );
|
Map<Matrix<Scalar,Dynamic, Dynamic>, 0, OuterStride<> > A( &(lusup.data()[luptr]), segsize, segsize, OuterStride<>(nsupr) );
|
||||||
std::cout<< " Matrix \n" << A << std::endl;
|
|
||||||
VectorBlock<ScalarVector> u(tempv, 0, segsize);
|
VectorBlock<ScalarVector> u(tempv, 0, segsize);
|
||||||
u = A.template triangularView<UnitLower>().solve(u);
|
u = A.template triangularView<UnitLower>().solve(u);
|
||||||
|
|
||||||
@ -165,7 +164,6 @@ void LU_panel_bmod(const int m, const int w, const int jcol, const int nseg, Sca
|
|||||||
l(i) = Scalar(0);
|
l(i) = Scalar(0);
|
||||||
++isub;
|
++isub;
|
||||||
}
|
}
|
||||||
std::cout<< jj << " : " << dense_col.transpose() << std::endl;
|
|
||||||
} // End for each column in the panel
|
} // End for each column in the panel
|
||||||
|
|
||||||
} // End for each updating supernode
|
} // End for each updating supernode
|
||||||
|
@ -126,7 +126,7 @@ void LU_panel_dfs(const int m, const int w, const int jcol, MatrixType& A, Index
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// krow is in U : if its sup²ernode-representative krep
|
// krow is in U : if its supernode-representative krep
|
||||||
// has been explored, update repfnz(*)
|
// has been explored, update repfnz(*)
|
||||||
krep = xsup(supno(kperm)+1) - 1;
|
krep = xsup(supno(kperm)+1) - 1;
|
||||||
myfnz = repfnz_col(krep);
|
myfnz = repfnz_col(krep);
|
||||||
|
Loading…
Reference in New Issue
Block a user