mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-11 19:29:02 +08:00
Generalize solve_sparse_through_dense_panels to handle SparseVector.
This commit is contained in:
parent
f8bfe10613
commit
a5c2d8a3cc
@ -19,7 +19,8 @@ namespace internal {
|
|||||||
* The rhs is decomposed into small vertical panels which are solved through dense temporaries.
|
* The rhs is decomposed into small vertical panels which are solved through dense temporaries.
|
||||||
*/
|
*/
|
||||||
template<typename Decomposition, typename Rhs, typename Dest>
|
template<typename Decomposition, typename Rhs, typename Dest>
|
||||||
void solve_sparse_through_dense_panels(const Decomposition &dec, const Rhs& rhs, Dest &dest)
|
typename enable_if<Rhs::ColsAtCompileTime!=1 && Dest::ColsAtCompileTime!=1>::type
|
||||||
|
solve_sparse_through_dense_panels(const Decomposition &dec, const Rhs& rhs, Dest &dest)
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT((Dest::Flags&RowMajorBit)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
EIGEN_STATIC_ASSERT((Dest::Flags&RowMajorBit)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
||||||
typedef typename Dest::Scalar DestScalar;
|
typedef typename Dest::Scalar DestScalar;
|
||||||
@ -40,6 +41,19 @@ void solve_sparse_through_dense_panels(const Decomposition &dec, const Rhs& rhs,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Overload for vector as rhs
|
||||||
|
template<typename Decomposition, typename Rhs, typename Dest>
|
||||||
|
typename enable_if<Rhs::ColsAtCompileTime==1 || Dest::ColsAtCompileTime==1>::type
|
||||||
|
solve_sparse_through_dense_panels(const Decomposition &dec, const Rhs& rhs, Dest &dest)
|
||||||
|
{
|
||||||
|
typedef typename Dest::Scalar DestScalar;
|
||||||
|
Index size = rhs.rows();
|
||||||
|
Eigen::Matrix<DestScalar,Dynamic,1> rhs_dense(rhs);
|
||||||
|
Eigen::Matrix<DestScalar,Dynamic,1> dest_dense(size);
|
||||||
|
dest_dense = dec.solve(rhs_dense);
|
||||||
|
dest = dest_dense.sparseView();
|
||||||
|
}
|
||||||
|
|
||||||
} // end namespace internal
|
} // end namespace internal
|
||||||
|
|
||||||
/** \class SparseSolverBase
|
/** \class SparseSolverBase
|
||||||
|
Loading…
x
Reference in New Issue
Block a user