Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Intel Community
- Software
- Software Development SDKs and Libraries
- Intel® oneAPI Math Kernel Library
- PARDISO + ILL CONDITIONED MATRIX

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

Alemdar__Bulent

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-05-2012
12:42 PM

81 Views

PARDISO + ILL CONDITIONED MATRIX

Hi All

I am using PARDISO to solve a system of KX=F (K: real symmetric definite matrix).

I have these two cases: K1 and K2 (both matrices are given below). PARDISO returns a success for K1 and it gives an error for K2 (instability in the system).

In fact, both K1 and K2 are not well-conditioned matrices (i.e., they are ill-conditioned) but interestingly the PARDISO returns success for K1. The condition numbers I calculated are something like 10^16 for K1 and 10^17 for K2.

Is there a way to avoid this kind of problems? Any way to set some parameters for PARDISO that catches this? We have other (in-house) solvers that catches this, and I am suprised that PARDISO fails to detect it !..

Regards

Bulent

P.S. My system configuration: Windows7, 64bit, VS2010 C++

K1:

%%MatrixMarket matrix coordinate real symmetric

8 8 16

1 1 14098.547767242315000000

1 3 3485.242905845857900000

1 5 6812.909667832833300000

2 2 14098.547767242315000000

2 6 3485.242905845857900000

2 8 6812.909667832833300000

3 3 82377.582791945460000000

3 5 3485.242905845857900000

3 6 -81215.835156663510000000

4 4 81215.835156663510000000

4 7 -0.000000000000113687

5 5 14098.547767242315000000

6 6 82377.582791945460000000

6 8 3485.242905845857900000

7 7 81215.835156663510000000

8 8 14098.547767242315000000

K2:

%%MatrixMarket matrix coordinate real symmetric

8 8 17

1 1 14571.276198818963000000

1 3 3642.819049704741200000

1 5 7285.638099409481600000

2 2 14571.276198818963000000

2 6 3642.819049704741200000

2 8 7285.638099409481600000

3 3 82430.108173231754000000

3 5 3642.819049704741200000

3 6 -81215.835156663510000000

4 4 81215.835156663510000000

4 5 -0.000000000000454747

4 7 0.000000000000113687

5 5 14571.276198818963000000

6 6 82430.108173231754000000

6 8 3642.819049704741200000

7 7 81215.835156663510000000

8 8 14571.276198818963000000

Link Copied

4 Replies

mecej4

Black Belt

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-05-2012
02:07 PM

81 Views

Something is inconsistent in the story, or I have made a mistake. Would you please post the code that uses Pardiso on these matrices?

Alemdar__Bulent

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-05-2012
03:18 PM

81 Views

Anyway, below is my code that uses PARDISO.

Regards

Bulent

m_iparm[0] = 1;

m_iparm[1] = 3;

m_iparm[2] = 0;

m_iparm[3] = 0;

m_iparm[4] = 0;

m_iparm[5] = 1;

m_iparm[7] = 2;

m_iparm[8] = 0;

m_iparm[9] = 13;

m_iparm[10] = 1;

m_iparm[11] = 0;

m_iparm[12] = 0;

m_iparm[13] = 0;

m_iparm[14] = 0;

m_iparm[15] = 0;

m_iparm[16] = 0;

m_iparm[17] = -1;

m_iparm[18] = -1;

m_iparm[19] = 0;

m_iparm[20] = 0;

m_iparm[24] = 1;

m_iparm[26] = 0;

m_iparm[27] = 0;

m_iparm[59] = 0;

void ThreadedSolver(void* param)

{

double ddum; /* Double dummy*/

int idum; /* Integer dummy.*/

int* Perm = NULL;

PARDISO ( (_MKL_DSS_HANDLE_t*) p->p_pt, p->p_maxfct, p->p_mnum, p->p_mtype, &phase,

p->p_NumberOfEqns,

p->p_GStiffnessVector, p->p_RowIndexVector, p->p_ColumnsVector,

&idum,

p->p_lNumLoadVectors,

p->p_iparm,

p->p_msglvl,

&ddum, &ddum, &error);

if ( Perm != NULL )

delete [] Perm;

if (error != 0)

{

//..

return;

}

// --------------------------------------------------------------------*/

// .. Numerical factorization.*/

// --------------------------------------------------------------------*/

phase = 22;

PARDISO ( (_MKL_DSS_HANDLE_t*) p->p_pt, p->p_maxfct, p->p_mnum, p->p_mtype, &phase,

p->p_NumberOfEqns,

p->p_GStiffnessVector, p->p_RowIndexVector, p->p_ColumnsVector,

&idum,

p->p_lNumLoadVectors,

p->p_iparm, p->p_msglvl, &ddum, &ddum, &error);

if ( error != 0 )

{

//...

return;

}

*p->p_lLastErrorCode = 0;

}

mecej4

Black Belt

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-05-2012
05:11 PM

81 Views

I repeated the runs with the Pardiso 4.1.2 (not from Intel) and again both examples ran without errors.

Alemdar__Bulent

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-12-2012
08:49 AM

81 Views

Thanks for having time to look into this. I am a bit suprised with your results. When I run these matrices in my code with MKL-PARDISO, I am getting success for K1 and failure for K2. In fact, I was expecting no success for K1 too.

These matrices are from a finite element model that is intentionally unstable and hence, it was expected that PARDISO should have reported numerical instability for both K1 and K2.

I just run the matrix "K1" in Mathematica (i.e., taking inverse of K1). It returns some results but it also indicates that "Inverse::luc: Result for Inverse of badly conditioned matrix", which was expected (see the log below)

Please note that I am using matrix type "2" for PARDISO solution (i.e., real symmetric definite matrix).

Regards

BUlent

Mathematica Results:

K1 = {{14098.547767242315, 0, 3485.242905845858, 0, 6812.909667832833, 0, 0, 0}, {0, 14098.547767242315, 0, 0, 0, 3485.242905845858, 0, 6812.909667832833}, {3485.242905845858,

0, 82377.58279194546, 0, 3485.242905845858, -81215.83515666351, 0, 0}, {0, 0, 0, 81215.83515666351, 0, 0, -1.13687*10^-13, 0}, {6812.909667832833, 0, 3485.242905845858, 0,

14098.547767242315, 0, 0, 0}, {0, 3485.242905845858, -81215.83515666351, 0, 0, 82377.58279194546,

0, 3485.242905845858}, {0, 0, 0, -1.13687*10^-13, 0, 0, 81215.83515666351, 0}, {0, 6812.909667832833, 0, 0, 0, 3485.242905845858, 0, 14098.547767242315}};

Inverse[K1]

Inverse::luc: Result for Inverse of badly conditioned matrix {{14098.5,0.,3485.24,0.,6812.91,0.,0.,0.},{0.,14098.5,0.,0.,0.,3485.24,0.,6812.91},{3485.24,0.,82377.6,0.,3485.24,-81215.8,0.,0.},{0.,0.,0.,81215.8,0.,0.,-1.13687*10^-13,0.},{6812.91,0.,3485.24,0.,14098.5,0.,0.,0.},{0.,3485.24,-81215.8,0.,0.,82377.6,0.,3485.24},{0.,0.,0.,-1.13687*10^-13,0.,0.,81215.8,0.},{0.,6812.91,0.,0.,0.,3485.24,0.,14098.5}} may contain significant numerical errors. >>

{{5.55309*10^9, 5.55309*10^9, -3.33185*10^10, 0.,

5.55309*10^9, -3.33185*10^10, 0., 5.55309*10^9}, {5.55309*10^9,

5.55309*10^9, -3.33185*10^10, 0., 5.55309*10^9, -3.33185*10^10, 0.,

5.55309*10^9}, {-3.33185*10^10, -3.33185*10^10, 1.99911*10^11,

0., -3.33185*10^10, 1.99911*10^11, 0., -3.33185*10^10}, {0., 0., 0.,

0.0000123129, 0., 0., 1.72357*10^-23, 0.}, {5.55309*10^9,

5.55309*10^9, -3.33185*10^10, 0., 5.55309*10^9, -3.33185*10^10, 0.,

5.55309*10^9}, {-3.33185*10^10, -3.33185*10^10, 1.99911*10^11,

0., -3.33185*10^10, 1.99911*10^11, 0., -3.33185*10^10}, {0., 0., 0.,

1.72357*10^-23, 0., 0., 0.0000123129, 0.}, {5.55309*10^9,

5.55309*10^9, -3.33185*10^10, 0., 5.55309*10^9, -3.33185*10^10, 0.,

5.55309*10^9}}

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

For more complete information about compiler optimizations, see our Optimization Notice.