Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Dong_Zheng
Beginner
43 Views

Pardiso failed after using cgs option

We were using composer_xe_2013.2.146 and noticed a problem recently. The pardiso solver worked for 4, 6, or 8 cpu but failed for 10 or 12 cpu. Then we update to parallel_studio_xe_2016.2.062, but find another problem.

Our application has a number of non-symmetric matrices  A1, A2, A3, A4, etc with the same non-zero pattern. Some of them are also numerically quite close. So we use pardiso solver and some time turn on the cgs iterative option (iparm(4) = 61). The program looks like  the following

1) initialize pardiso and symbolic factorization (phase=11)

2) Solve A1 directly with phase=23 and iparm(4) = 0

3) Solve A2 directly with phase=23 and iparm(4) = 0

4) Solve A3 using cgs with phase=33 and iparm(4)=61

5) Solve A4 directly with phase=23 and iparm(4)=0 ( pardiso skip numerical factorization and return wrong solution!!!)

The problem is also in parallel_studio_2016.1.056. It is reproducible. It failed at the first 2 examples we tried.

 

0 Kudos
4 Replies
Gennady_F_Intel
Moderator
43 Views

Dong, I am not sure I understand the problem: when you solve only one separate case ( let say A1) did you obtain wrong solution with iparm(4) == 0 and when iparm(4) == 61?

Dong_Zheng
Beginner
43 Views

Gennady, Error only happens at step 5 in my example. That is, using cgs we got the right solution. After using cgs (iparm(4)=61) when we get a new matrix and we ask pardiso to do factorization again (phase=23 with iparm(4)=0), pardiso skips the factorization step and directly uses the old L&U to do the solution step.

 To produce the error has to have at least three steps after initialization. 1) Solve A1 directly (phase=23, iparm(4)=0). 2) Solve A2 using cgs (phase=33, iparm(4)=61). 3) Solve A3 directly (phase=23, iparm(4)=0) to see the error.

Gennady_F_Intel
Moderator
43 Views

we need the example for reproducing the problem on our side. 

Dong_Zheng
Beginner
43 Views

Test code and data is added. In the output, look for the word "Norm". It is the error norm. The last call of pardiso failed to give right solution.