My program have two solvers, solver A is based on Bi-CGSTAB acceleration that was developed by someone else before, and another one (solver B) is pardiso. I found for Pardiso works fine as solver A for most of the time, but it run much slower than solver A if I use 1 or two threads.
The following settings is used in solver A:
maximum number of solver iterations: 100
solver residual tolerance: 1.0E-7
solver update tolerance: 1.0E-7.
I try to use this settings in pardiso as follows:
iparm(8) = 100 !numbers of iterative refinement steps
iparm(10) = 7 !perturbe the pivot elements with 1E-7
Is this correct? And how to set the residual tolerance?
Thanks and regards,
PS: other parameters
iparm(1) = 1 ! no solver default
iparm(2) = 3 ! fill-in reordering from METIS ,0-MIN DEGREE, 2-METIS, 3-OPENMP VERSION
iparm(3) = 0 ! numbers of processors. Input the next call mkl_set_dynamic(0), mkl_set_num_threads(n);
iparm(4) = 0 ! 0-no iterative-direct algorithm; 10*L+1 - CGS; 10*L+2 - CG; 10^-L is the tolerance.
iparm(5) = 0 ! no user fill-in reducing permutation
iparm(6) = 0 ! if == 0, the array of b is replaced with the solution x.
iparm(7) = 0 ! not in use
iparm(9) = 0 ! not in use
iparm(11) = 1 ! use nonsymmetric permutation and scaling MPS
iparm(12) = 0 ! not in use
iparm(13) = 1 ! maximum weighted matching algorithm is switched-on (default for non-symmetric)
iparm(14) = 0 ! Output: number of perturbed pivots
iparm(15) = 0 ! not in use
iparm(16) = 0 ! not in use
iparm(17) = 0 ! not in use
iparm(18) = -1 ! Output: number of nonzeros in the factor LU
iparm(19) = -1 ! Output: Mflops for LU factorization
iparm(20) = 0 ! Output: Numbers of CG Iterations
iparm(27) = 0 !check matrix error, 0-without check, 1-check
maxfct = 1
mnum = 1
nrhs = 1
error = 0 ! initialize error flag
msglvl = 0 ! print statistical information
mtype = 11 ! real unsymmetric