Re: [eigen] Complex symmetric Cholesky factorization

[ Thread Index | Date Index | More Archives ]

Yes, it is for MKL's Pardiso.


On Mon, Aug 17, 2015 at 10:10 PM, John Daily <John.Daily@xxxxxxxxxxxxxxxxx> wrote:

Does Eigen's Pardiso wrapper only work with the MKL version of Pardiso? 

On 17 August 2015 at 13:46, Gael Guennebaud <gael.guennebaud@xxxxxxxxx> wrote:

On Mon, Aug 17, 2015 at 6:33 PM, John Daily <John.Daily@xxxxxxxxxxxxxxxxx> wrote:
We already have a SelfAdjoint and Symmetric enums to distinguish between the two cases, so perhaps an idea would be to allow to pass Symmetric to the second template parameter, like:

[Simplicial]L[D]LT<MatrixType, {{Lower,Upper,Lower|Upper}[|Symmetric] , Symmetric}>

I don't quite follow your notation here for the Symmetric enum, did you mean one of those to be SelfAdjoint as written? 

The trick is that the default is Lower which is also equal to 0. Therefore, one can simply pass "Symmetric" as a synonym of "Lower|Symmetric". This is why I put Symmetric twice. So basically, the test for symmetric instead of self-adjoint should be "(Options&Symmetric)==Symmetric" (after renaming the UpLo parameter to Options).
Actually, this solution is already the one we adopted for PardisoLLT<> and PardisoLDLT<>.

I'll take a look at that. I'll try and make a branch achieving this and will let you know when I have something that can be reviewed. 


In a second time, for consistency, we should also add a symmetricView<>() method to [Sparse]MatrixBase<> returning a SelfAdjointView<...,{Upper,Lower}[|Symmetric]>. Likewise, we could also think about adding templated variants of adjoint() / selfadjointView() to ease writing generic code with true compile-time branches...

I don't have enough familiarity with the sparse internals to know how difficult this part will be. I'll start with the above. 

Sure, this part might be a bit tricky.


Mail converted by MHonArc 2.6.19+