Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
6977 Discussions

MKL PARDISO: getting determinant AND diagonal of factorized matrix

mlucio89
Beginner
1,563 Views

Dear all,

I am introducing the use of MKL PARDISO for the solution of linear systems in some Finite Element legacy code. The 'old' (i.e. 'MKL-less') version of the code writes on a file the values of the determinant and diagonal elements of the (factorized) coefficient matrix. You could reasonably argue that this is not necessarily useful, or that it is even detrimental for very large matrices. However, for historical reasons, I do not have the choice at the moment and the 'MKL version' of the code must provide the same information.

Now that we're done with the context, let us make some considerations:

1) OneAPI MKL PARDISO interface can provide the diagonal (through getdiag()) but not the determinant of the coefficients matrix

2) The DSS interface for PARDISO can provide the determinant but not the diagonal of the factorized matrix

3) Of course, I do not want to factorize the same matrix twice (once using oneAPI-MKL interface and once using DSS interface) to obtain the two pieces of information.

4) For the moment the only solution I came up with is the following (MTYPE=-2, in my case): 

- Let A be the coefficient matrix, its factorization is (or should be, if I interpret correctly what PARDISO does) A=PLDL^T (P being a permutation matrix).

- PARDISO returns d=diag(D). So 'almost' OK for the diagonal (please see question c) below).

- We should also be able to retrieve the determinant as det(A)=sign*det(L)*det(D)*det(L^T), where det(L)=det(L^T)=1, det(D) = Product of all the d(i), and sign=+1 if even number of permutations and sign=-1 if odd number of permutations.

Here are my questions:

a) Are considerations 1) - 4) correct?

b) Is there a way to retrieve the number of permutations occurred during factorization phase?

c) the documentation states that the order of the elements returned by getdiag() may not be coherent with the permutation vector (perm) computed in phase 1. Can I conclude that the order of the diagonal elements coincide with the original order of the equations (before factorization, hence before permutation)? Or this is not the case either?

I hope I've made myself sufficiently clear.

Thank you very much for your help!

ML

0 Kudos
1 Solution
Khang_N_Intel
Employee
1,271 Views

Hi ML,

1 - 3: Yes

4:

a) Yes

b) No. More explanation in c)

c) No. When there are no pivots detected, the returned diagonal will match the permutation returned after the reordering. But if pivots are detected, there will be some small permutation which we account for inside PARDISO but the user currently cannot know what is the sign of this permutation (and hence cannot get the sign of the determinant right).


I already put in the request to get the determinant in pardiso. We don't know when this feature will be implement.


Best,

Khang




View solution in original post

0 Kudos
7 Replies
AbhishekD_Intel
Moderator
1,547 Views

Hi,


Thanks for reaching out to us.

We are forwarding this issue to the SME.



Warm Regards,

Abhishek


0 Kudos
Khang_N_Intel
Employee
1,348 Views

Hi,

Pardiso functionality is described in the oneMKL reference or developer guide.

If you have any suggestion about pardiso in terms of additional functionalities or better description please let us know.


0 Kudos
Khang_N_Intel
Employee
1,272 Views

Hi ML,

1 - 3: Yes

4:

a) Yes

b) No. More explanation in c)

c) No. When there are no pivots detected, the returned diagonal will match the permutation returned after the reordering. But if pivots are detected, there will be some small permutation which we account for inside PARDISO but the user currently cannot know what is the sign of this permutation (and hence cannot get the sign of the determinant right).


I already put in the request to get the determinant in pardiso. We don't know when this feature will be implement.


Best,

Khang




0 Kudos
mlucio89
Beginner
1,256 Views

Thank you very much for your feedback Khang, much appreciated!

 

Regards,

 

ML

0 Kudos
ShanmukhS_Intel
Moderator
887 Views

Hi,

 

Thank you for your feedback. We have provided your feedback to the relevant team. At this moment there is no visibility when it will be implemented and available for use. Could you please let me know if we can go ahead and close this case?

 

Best Regards,
Shanmukh.SS

 

0 Kudos
mlucio89
Beginner
874 Views

Hi,

 

Thank you for the information. No problem from my side if you want to close the issue.

 

Best regards,

 

ML

0 Kudos
ShanmukhS_Intel
Moderator
864 Views

Hi,


Thanks for the confirmation. If you need any additional information, please post a new question as this thread will no longer be monitored by Intel.


Best Regards,

Shanmukh.SS



0 Kudos
Reply