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

Pardiso iparm(30) not returning equation number correctly

schulzey
New Contributor I
995 Views

I am using Pardiso with the 2017 Update 2 Intel Fortran compiler in VS 2015 and I'm finding that when using mtype=2 (real and symmetric positive definite matrix) if my matrix has a singularity, iparm(30) always returns 1 rather than the location of the equation where the singularity occurs. In the 2016 version of the compiler this worked correctly. Has something changed or is this a bug?

​Refer to the Pardiso documentation as follows:
If Intel MKL PARDISO detects zero or negative pivot for mtype=2 or mtype=4 matrix types, the factorization is stopped, Intel MKL PARDISO returns immediately with an error = -4, and iparm(30) reports the number of the equation where the first zero or negative pivot is detected.
 

0 Kudos
6 Replies
Zhen_Z_Intel
Employee
995 Views

Hi Schulzey,

For mtype=2 factorization, the pardiso choose Cholesky decomposition. For those factorization using Gaussian elimination required to have positive pivot elements. If the matrix A is singular matrix, det(A)=0, it means there would be no solution or have countless results for factorization. To eliminate singularity, you probably could refer SVD. 

Best regards,
Fiona

0 Kudos
schulzey
New Contributor I
995 Views

Our application is structural engineering where a singularity in the stiffness matrix represents an instability in the structure. Usually the location of instabilities are unknown and so the iparm(30) value helps the engineer to find where the instability is. In the version of Pardiso shipped with MKL 2017 Update 2, it always returns iparm(30)=1 whenever a singularity occurs, whereas previously it returned the location of the first singularity found (even though there might be more than one). Returning iparm(30)=1 makes it impossible for the engineer to find the instability, plus it no longer complies with the Pardiso documentation as per my original post. Can this be fixed?

Regards, Peter

0 Kudos
Zhen_Z_Intel
Employee
995 Views

Hi schulzey,

I am not very clear with your problem, I tested both MKL11.3.3 & MKL2017u3, iparm[30] returns same value that is no. of equation which firstly detected 0 or negative pivots, which version of MKL you get that the iparm[30] is not no. of equation? Could you please provide your input matrix?

The positive definition matrix must be not a singular matrix, if your matrix is singular, you probably could set phase to 11(reordering process), and it would return error:
*** Error in PARDISO  ( numerical_factorization) error_num= -1
*** Error in PARDISO: zero or negative pivot, A is not SPD-matrix

Best regards,
Fiona

0 Kudos
schulzey
New Contributor I
995 Views

Hi Fiona,

I'm using MKL 2017 Update 2. I haven't had time to test 2017 Update 3 but I will try it and let you know if the problem persists.

Peter

0 Kudos
schulzey
New Contributor I
995 Views

Hi Fiona,

I have tested MKL 2017u3 and it has the same problem. I have also found that the problem only occurs with some matrices whereas others work Ok. I have attached a project with a test matrix that shows the problem. In MKL2017u3 my test matrix returns iparm(30)=1 which is incorrect, however if I run the same matrix with MKL 11.2.4 it returns iparm(30)=49 which is correct.

It looks like something has changed since MKL 11.2.4.

Regards,
​Peter

0 Kudos
schulzey
New Contributor I
995 Views

I have just installed the new 2018 Fortran compiler and MKL, and the problem appears to be fixed. Are these types of fixes supposed to be included in release notes somewhere? I can't see any mention of this issue anywhere.

0 Kudos
Reply