- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I sent a post a couple of weeks ago, but I would like to specify my problem.
I want to solve a linear system of type Ax = b, for a common matrix A ( nonsymmetric, not positive-definite...), and b, x vectors.
Pardiso perfectly works in most of cases, but for my set of input data (see attached), it doesn't work: the result I obtain is totally aberrant. This is weird since A is inversible and very well conditionned (4.9819).
Here are my iparms :
357 iparm[0] = 1; /* No solver default */
358 iparm[1] = 2; /* Fill-in reordering from METIS */
359 iparm[2] = 8;
360 iparm[3] = 0; /* CGS */
361 iparm[4] = 0; /* No user fill-in reducing permutation */
362 iparm[5] = 0; /* Write solution into x */
363 iparm[6] = 0; /* Not in use */
364 iparm[7] = 0; /* Max numbers of iterative refinement steps */
365 iparm[8] = 0; /* Not in use */
366 iparm[9] = 13; /* Perturb the pivot elements with 1E-13 */
367 iparm[10] = 1; /* Use nonsymmetric permutation and scaling MPS */
368 iparm[11] = 0; /* Not in use */
369 iparm[12] = 0; /* Not in use */
370 iparm[13] = 0; /* Output: Number of perturbed pivots */
371 iparm[14] = 0; /* Not in use */
372 iparm[15] = 0; /* Not in use */
373 iparm[16] = 0; /* Not in use */
374 iparm[17] = -1; /* Output: Number of nonzeros in the factor LU */
375 iparm[18] = -1; /* Output: Mflops for LU factorization */
376 iparm[19] = 0; /* Output: Numbers of CG Iterations */
377 iparm[27] = 1; /* check the data structure */
378 iparm[31] = 1; /* iterative solver*/
380 maxfct = 1; /* Maximum number of numerical factorizations. */
381 mnum = 1; /* Which factorization to use. */
The Package ID of mkl is : l_mkl_p_10.0.011
Thanks for any help you can give me
Antoine
ps. A is stored in CSR format. Its file is composed of 4 lines : the size of datas (row column val), the ranks of the first element of the row, the columns, and the values. Tell me if you want another format.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
To have Pardiso check your matrix, set iparm[26]=1 (not iparm[27]=1 as you did).
The array ia must have one more entry: the last entry should be set as m_row[m_dim]=m_nnz+1; this is the CSR storage convention. You left this item undefined but, because of the preceding error, Pardiso did no checking of the matrix.
You have loops such as
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
mecej4 wrote:You are right, this really make no sens. Actually, I haven't done that in my real program. I needed to change the program a little and I added that, I don't know why.These make no sense. It is the indices of arrays b and x that may be zero- or one-based, not their values.
mecej4 wrote:This is done by m_row.push_back(m_val.size()+1);the last entry should be set as m_row[m_dim]=m_nnz+1
mecej4 wrote:I have just tried this... My matrix seems to be correctly input.To have Pardiso check your matrix, set iparm[26]=1
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Had you chosen the solver defaults for your matrix type, you would have had a working program quickly, which you could then tweak by modifying the iparm[] values to your satisfaction.
However, you chose to set iparm[0] to a non-zero value at the outset, which then shifted the responsibility to you for setting all 64 values correctly, taking into account the documentation's 1-based indexing and your C++ program's 0-based indexing.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page