This forum has been archived. All content is frozen. Please use KDE Discuss instead.

SparseLLT in Eigen 3.1.0-alpha2

Tags: None
(comma "," separated)
Dtag
Registered Member
Posts
7
Karma
0

SparseLLT in Eigen 3.1.0-alpha2

Tue Apr 10, 2012 12:31 pm
Hi,

I recently switched to Eigen 3.1.0-alpha2. I previously used SparseLLT (in combination with cholmod) from the SparseExtra module. Since the update however, the SparseLLT is no longer defined. Further investigation of the problem has shown that the header "unsupported/Eigen/SparseExtra" no longer includes "unsupported/Eigen/src/SparseExtra/SparseLLT.h" file, which it did in previous releases. In fact I have not found any header, which still includes SparseLLT.h. How is it supposed to be used? One is surely not intended to directly include the SparseLLT.h header somehow...?

I tried the new SimplicialLLT instead, however in my application, it turned out to be a bit slower than the Cholmod/SparseLLT combination.

Thanks
Frank

(
On a sidenote: Though it does not make too much sense -- why does somedensematrix.llt().matrixL().transpose() no longer work? It always results in "/usr/local/include/eigen3/Eigen/src/Core/TriangularMatrix.h:283:7: error: static assertion failed: "THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY"
". I dont see how transpose() triggers this assertion, since I want to have the transpose of the matrix -- I do not want to transposeInPlace. Is that a bug?
)
User avatar
ggael
Moderator
Posts
3447
Karma
19
OS
SparseLLT has been removed. It has been deprecated for a while. Its implementation was pretty bad: dynamic realloc, no fillin reducing, etc. I'm very surprised that it worked faster than SimplicialLLT for you. That really does not make sense. In the future, a similar implementation might be resurrected as an incomplete Cholesky preconditioner though.

Regarding your issue with somedensematrix.llt().matrixL().transpose(), I'll have a look.
Dtag
Registered Member
Posts
7
Karma
0

Re: SparseLLT in Eigen 3.1.0-alpha2

Tue Apr 10, 2012 1:21 pm
ggael wrote:SparseLLT has been removed. It has been deprecated for a while. Its implementation was pretty bad: dynamic realloc, no fillin reducing, etc. I'm very surprised that it worked faster than SimplicialLLT for you. That really does not make sense. In the future, a similar implementation might be resurrected as an incomplete Cholesky preconditioner though.


Ok maybe that's just my specific matrix then. Its 13200x13200 or something, with a "wide" diagonal part for the most part (not sure what the correct term for that is). So at least I won't need cholmod anymore then ;)

Looking at the documentation, maybe I need to use analyzePattern? I am in fact solving multiple similar problems with the same pattern. SparseLLT did not have an equivalent function.

ggael wrote:Regarding your issue with somedensematrix.llt().matrixL().transpose(), I'll have a look.


Ok thanks :)
User avatar
ggael
Moderator
Posts
3447
Karma
19
OS

Re: SparseLLT in Eigen 3.1.0-alpha2

Tue Apr 10, 2012 1:41 pm
"somedensematrix.llt().matrixL().transpose()" is fixed in the devel branch.
Dtag
Registered Member
Posts
7
Karma
0

Re: SparseLLT in Eigen 3.1.0-alpha2

Tue Apr 10, 2012 1:54 pm
Great. Thanks again :-)

I also fixed my speed issue. SimplicialLLT was only slightly faster when doing analyzePattern only once (reduced my solving time from ~630 to ~620 ms). What I am not doing instead is to use "Eigen::CholmodDecomposition<Eigen::SparseMatrix<double> >", again calling analyzePattern once at the beginning. This is even faster than my old code with SparseLLT.


Bookmarks



Who is online

Registered users: Bing [Bot], claydoh, Google [Bot], rblackwell, Yahoo [Bot]