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

Result error in Pardiso

danielsue
Beginner
267 Views

Hi All,

I have many linear equations derived from flow problem at different time steps. These equations have the same structure (same non-zero entries) but different stiffness matrices and right-hand-sides. The condition number for these matrices are around 4E15, close to ill-conditioned. There seems something wrong with the Pardiso that only the result of the first equation is correct.  I have successfully solved these equations by PETSc and exported the results so as to compare.

The parameters used in Pardiso are as follows:

      iparm = 0
      iparm(1) = 1 ! no solver default
      iparm(2) = 2 ! fill-in reordering from METIS
      iparm(3) = 0 ! numbers of processors      
      iparm(4) = 0 ! no iterative-direct algorithm
      iparm(5) = 0 ! 0 no user fill-in reducing permutation
      iparm(6) = 0 ! =0 solution on the first n compoments of x
      iparm(7) = 0 ! not in use
      iparm(8) = 9 ! numbers of iterative refinement steps
      iparm(9) = 0 ! not in use
      iparm(10) = 13 ! perturbe the pivot elements with 1E-13
      iparm(11) = 1 ! use nonsymmetric permutation and scaling MPS
      iparm(12) = 0 ! not in use
      iparm(13) = 1 ! maximum weighted matching algorithm is switched-on (default for non-symmetric)
      iparm(14) = 0 ! Output: number of perturbed pivots
      iparm(15) = 0 ! not in use
      iparm(16) = 0 ! not in use
      iparm(17) = 0 ! not in use
      iparm(18) = -1 ! Output: number of nonzeros in the factor LU
      iparm(19) = -1 ! Output: Mflops for LU factorization
      iparm(20) = 0 ! Output: Numbers of CG Iterations
      iparm(27) = 0 ! 1: check matrix error
      error = 0 ! initialize error flag
      msglvl = 0 ! print statistical information
      mtype = 11 ! real unsymmetric

For the source codes, data and results, please look into the attached file.

Thanks and Regards,

Daniel

0 Kudos
2 Replies
mecej4
Honored Contributor III
267 Views

With a condition number of 4E15, and the 15.95 decimal digits that 64-bit reals provide, you have less than one reliable digit in your solution. How, then, do you conclude that  "the result of the first equation is correct"?

To proceed further, we need to know more data on a case where you judge the results to be wrong -- for example, you may provide a file containing the Pardiso solutions and another containing the "correct" solutions from another solver (please specify its identity completely).

0 Kudos
danielsue
Beginner
267 Views

mecej4 wrote:

With a condition number of 4E15, and the 15.95 decimal digits that 64-bit reals provide, you have less than one reliable digit in your solution. How, then, do you conclude that  "the result of the first equation is correct"?

To proceed further, we need to know more data on a case where you judge the results to be wrong -- for example, you may provide a file containing the Pardiso solutions and another containing the "correct" solutions from another (please specify its identity completely).

I have compared the solution with other two solvers, the origional sequential solver that use ILU precondition and PETSc. The latter two solver can generate close results while Pardiso cannot. More important, this is from a flow problem, we check the results with theoretical analysis and we are sure the results by the other two solvers are correct, at least, resonable.

One question is that Pardiso can solve one equation correctly, seems that for matrices with high condition number, Pardiso may solve it by chance.

Please find the results compare in the attached file (some of them have also been included in the previous attachment), where x_pardiso_i.txt is the result of pardiso, x_PETSc_i.txt is the result of PETSc and x_i.txt is the result of origional sequential solver, i is the ith linear equation.

Thanks,

Daniel

0 Kudos
Reply