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

Pardiso: refinement contraction rate

wjiang123
Beginner
1,467 Views

Dear Pardiso users:

I got the following errors by using pardiso (with ilp64 interface):

The following ERROE was detected: -4
*** error PARDISO ( numerical_factorization) error_num= -112
*** error pardiso: iterative refinement contraction rate greater 0.9, interrupt
*** error pardiso: zero pivot

There are 38436 equations with 58210068 nonzeros. Parameters and call sentence are as follows:

iparm(1) = 1 ! no solver default
iparm(2) = 2 ! fill-in reordering from METIS
iparm(3) = nproc ! number of processors
iparm(8) = 25
iparm(10) = 20
iparm(11) = 1
iparm(13) = 1
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 Interations
write(*,*)'OK!'
call pardiso(pt,1,1,11,13,Total_unknown,AG,IA,JA,0,1,iparm,
* 1,Y,X,ERROR)

Those works well for smaller size problems.

Could anyone give some suggestions on how to deal with this problem? Thanks,

Wen

0 Kudos
6 Replies
Sergey_P_Intel2
Employee
1,467 Views

Dear Wen!

Thank You for your question.

This error indicates that calculated relative residual in iterative refinement process becomes almost the same as the one on previous step or even bigger.Let me add some notes about this situation.

1. Parameter iparam(10) looks too big (eps = 10^(-20) istoo small). This parameter instructs PARDISO how to handle small pivots or zero pivots for solving matrices.Try to use default value iparam(10)=13 for un-symmetric matrices (mtype=11 or mtype=13).

2. Also try to use lessnumber for maximalamount of refinement steps (iparam(8)). It will be better to use iparam(8)= -MaxRefinamentStepsNumber (for example, iparam(8)=-5). In this case(when iparam(8) is less than zero) iterative refinement steps will beperformed in quad precision.

Hope that these advises will help you to solve the problem. Otherwise weneed to examine your matrix to find bettersolution.

Best regards,

Sergey

0 Kudos
kasimir88
Beginner
1,467 Views

Dear Wen,

have you tried to solve with default parameter?
I actually got the same problems/error and today i tried the default parameter

iparm(1) = 0

iparm(3) = nProc

and now it works.

But im still searching for the correct parameter configuration, because in my opinion there are some inconsistency between the Pardiso code sample from the reference manual, the reference manual parameter description itself and for instance the pardiso reference sheet.

Dear Pardiso User:

where can i find the correct description of iparm for intel mkl 10 ?
The iparm configuration from the code example

nIparm[0] = 1; /* No solver default */
nIparm[1] = 2; /* Fill-in reordering from METIS */
/* Numbers of processors, value of MKL_NUM_THREADS */
nIparm[2] = mkl_get_max_threads();
nIparm[3] = 0; /* No iterative-direct algorithm */
nIparm[4] = 0; /* No user fill-in reducing permutation */
nIparm[5] = 0; /* Write solution into x */
nIparm[6] = 0; /* Not in use */
nIparm[7] = 2; /* Max numbers of iterative refinement steps */
nIparm[8] = 0; /* Not in use */
nIparm[9] = 13; /* Perturb the pivot elements with 1E-13 */
nIparm[10] = 1; /* Use nonsymmetric permutation and scaling MPS */
nIparm[11] = 0; /* Not in use */
nIparm[12] = 0; /* Not in use */
nIparm[13] = 0; /* Output: Number of perturbed pivots */
nIparm[14] = 0; /* Not in use */
nIparm[15] = 0; /* Not in use */
nIparm[16] = 0; /* Not in use */
nIparm[17] = -1; /* Output: Number of nonzeros in the factor LU */
nIparm[18] = -1; /* Output: Mflops for LU factorization */
nIparm[19] = 0; /* Output: Numbers of CG Iterations */

must be different to

nIparm[0]=0;
nIparm[2] = mkl_get_max_threads();

because latter works....

Thanks for any advise!

Volker

0 Kudos
wjiang123
Beginner
1,467 Views
Hi, Volker,
I think you can find all documents of mkl 10 from http://www.intel.com/cd/software/products/asmo-na/eng/345631.htm. And the default value of iparm can be found in Reference Manual. Thanks for your reply,
Wen

0 Kudos
wjiang123
Beginner
1,467 Views

Sergey:

I tried to follow what you suggested but got the same error. Would you mind helping me studying my matrix? Thanks,

Wen

0 Kudos
wjiang123
Beginner
1,467 Views
Hi all,
I can run the program now by using the default value. But the result is very absurd for large size problem. I am wondering it might due to thenumber of nonzero elements are really small when problem size is increased. It can be small as 10^(-25). Is pardiso package can accept that small element? Does any one have any idea about this? Thanks,
Wen

0 Kudos
Sergey_P_Intel2
Employee
1,467 Views

Dear Wen,

PARDISO doesnt have any limitations on values of non-zeroes elements. So, small input values like 10^(-25) are valid.

We think that your matrix is ill-conditioned, so the solution process is very sensible to any input parameters. By default PARDISO used METIS reordering (see documentation). In your first attempt you also used METIS. Try to change reordering on other one, for example, try to use

iparm(2) = 0 ! Minimum degree algorithm.

Also, PARDISO admit to use your own reordering by using perm input vector and setting iparm(5)=1.

If this idea doesnt help you to solve the problem, we will help you studying your matrix.

- Sergey

0 Kudos
Reply