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

PARDISO - unknown cgs_error

bertrand_haut
Einsteiger
597Aufrufe

Dear all,

I'm using PARDISO to do the following:

1) Solve a linear system for a given matrix A using a direct method

I'm using the following options:

for (i = 0; i < 64; i++) {
iparm = 0;
}
iparm[0] = 1; /* No solver default */
iparm[1] = 2; /* Fill-in reordering from METIS */
iparm[2] = 1;
iparm[3] = 0; /* No iterative-direct algorithm */
iparm[4] = 0; /* No user fill-in reducing permutation */
iparm[5] = 0; /* Write solution into x */
iparm[6] = 0; /* Not in use */
iparm[7] = 2; /* Max numbers of iterative refinement steps */
iparm[8] = 0; /* Not in use */
iparm[9] = 13; /* Perturb the pivot elements with 1E-13 */
iparm[10] = 1; /* Use nonsymmetric permutation and scaling MPS */
iparm[11] = 0; /* Not in use */
iparm[12] = 1; /* Maximum weighted matching algorithm is switched-on (default for non-symmetric) */
iparm[13] = 0; /* Output: Number of perturbed pivots */
iparm[14] = 0; /* Not in use */
iparm[15] = 0; /* Not in use */
iparm[16] = 0; /* Not in use */
iparm[17] = -1; /* Output: Number of nonzeros in the factor LU */
iparm[18] = -1; /* Output: Mflops for LU factorization */
iparm[19] = 0; /* Output: Numbers of CG Iterations */
iparm[26]=1; /*Check matrix consistency*/

2) Modify slightly the matrix A, (only the values are changed, not the structure of the matrix)

3) Solve a new linear system by using an iterative method :

iparm[3] = 41;

The steps 1 and 2 are working well however I've a problem with step 3.

The call to PARDISO ends with an error code - 4. The value of iparm[19] is -16. It means that cgs_error is equal to 6. However in the PARDISO documentation only the values 1 to 5 are documented.

What does cgs_error = 6 means ?

Thanks in advance,

0 Kudos
3 Antworten
Gennady_F_Intel
Moderator
597Aufrufe

Bertrand,

This is an unexpected result. Could you give us the example for reproducing the problem?

--Gennady

bertrand_haut
Einsteiger
597Aufrufe

Unfortunatley I'm not allowed to post the matrix on which the problem has been identified (due to confidentiality restriction).

I've tried to reproduce the problem on a smaller matrix but without success.

However I've found the origin of the "problem". When I modified the matrix, I was using the following code:

M->x = M->x * (1 + (rand()-0.5)/100.0 );

I've forgot to divide by RAND_MAX. It means that I was modifying my matrix much more than expected. My matrix was quite large (around 130,000 variables) and very sparse (+/- 8 elements per line). Maybe you can reproduce the same problem on one of your testcase.

Dividing by RAND_MAX I obtain more reasonable results (either convergence or an error explained in the PARIDISO documentation).

Gennady_F_Intel
Moderator
597Aufrufe

Bertrand,

I wasn't able to do that on my side. The 130K of nnz is not very big task, I believe ( < 1.5 Mb) . Can you give us the testcase and attached it to this post? If it's the private data, then you can submit the private post.

--Gennady

Antworten