Registered Member
|
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? ) |
Moderator
|
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. |
Registered Member
|
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.
Ok thanks |
Moderator
|
"somedensematrix.llt().matrixL().transpose()" is fixed in the devel branch.
|
Registered Member
|
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. |
Registered users: Bing [Bot], claydoh, Google [Bot], rblackwell, Yahoo [Bot]