Dear Intel MKL R&Ds,
I have a question about the pivoting in the numerical factorization in Pardiso solver. Let me explain in details. First, we have our own ordering and factorization code. Now, we want to try the MKL Pardiso and see if the Pardiso solver can help with the performance. We found Pardiso is very very slow in some tests. One test case is a newton problem. On each time step, we solve the Jacobian system Ax=b derived from the Newton method. The matrix size A is about 400k.
Here is how our own factorization code works. Since our system is pretty stable, we basically only do the order and factor ( corresponding to the symbolic factorization ) for the first time. This order and factor involves looking for a good pivot at each step, do row/column exchange (the ordering) and allocating the memory for the new fill-ins. After this, we keep the matrix order and do numerical factorization without ANY searching for pivot (just use the diagonals), without ANY row/column exchange, without ANY allocation of new memory in the matrix.
Now, when we test the Pardiso, we hope it does the same thing as our own code. So, for the first time, we let it do the symbolic factorization. then later on, it just does the numerical factorization. However, it is very slow. The IPARM output for the number of perturbed pivots are always nonzero (# of perturbed pivot is around 50k). Furthermore, the number of perturbed pivots actually changes slightly but frequently.
So, here is my question, does this mean that pardiso numerical factorization still searches for pivot or even reorder instead of blindly to use the diagonals to do the factorization? if so, how can we disable this? I want it blindly use the diagonals to do the numerical factorization.
If a zero diagonal really happens during the numerical factorization, we hope the Pardiso solver to quit and report zero diagonal to us. Then we explicitly call order and factor ( the symbolic factorization ) on the same matrix. If this time it is still singular, we think it is really singular. Otherwise, we keep doing the numerical factorization with the new matrix order until meeting a zero-diagonal again. To do this, which parameters of pardiso do we need to set?
Thank you very much.