we are currently integrating PARDISO into our software and stumbled upon some (from our point of view) weird behaviour.
First the setting:
Given a sparse matrix of type -2 we start with phase 12, so reordering and symbolic factorization. After that we wanted to use phase 33 with a sparse right hand side and thus set iparm = 1.
In the documentation it says that for using iparm = 1 (what we wanted to do), we should
Disable iparm (scaling) and iparm = 1 (matching) when using the two-level factorization algorithm. Otherwise Intel MKL PARDISO uses the classic factorization algorithm.
First of all, we are not quite sure what that is supposed to mean: Does it say set iparm and iparm both to zero? Or does it say set iparm = 0 and iparm = 1?
Ok, so, nevertheless, we set both to one and in addition set iparm = 1, because we didn't quite read the hint at that time and anyway, we expected that this would lead to a behaviour similar to iparm = 0.
The reason for setting iparm and iparm in the first place was that, indeed, our matrices come from a interior point method.
Now the weird part.
During phase 12 we did not set iparm (since pardisoinit did not and we did not hand over a right hand side at that point - also, the documentation says iparm
controls the solve step of Intel MKL PARDISO.
For phase 33 we then set iparm = 1 and got a segfault back from pardiso.
Now, we did find two ways to get rid of the segfault neither of which seem to make any sense:
a) when setting iparm = 1 for phase 12 and 33 the segfault disappears
b) setting iparm = 0 or iparm = 10 during solution phase lets the segfault disappear too
Frankly we are not quite sure what is going on here, I assume we misunderstood something.
Another thing we saw happening: during phase 12 PARDISO sets paramter iparm = -1. Iparm is described as an input parameter and thus should not be set by PARDISO? Or does this indicate some kind of error?
We hope you can help us.
With best regards,
I attached the example we were using, it is a modified version of the pardiso_sym_c.c example. Compiler command is on the top of the file in some comment. You can also find the complete setting of iparm we were using during phase 12 and the on we were using during phase 33 (iparm2).
First of all thank you for using Intel MKL Pardiso. And sorry for not clear explanation of iparm array in documantation.
About 2-level factorization, to turn it on you need to set iparm=0, iparm=0, iparm=1. And another main point - to use partial solving functionality you need to set iparm to 1 and correspond perm before reordering step (phase 11). That was done because pardiso use specefic reordering algorithm in case of partial solving. In case of correct parameters your exampel works correctly