Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

HELP! Problems encountered when using PARDISO

Gators_vs__Sundevil
744 Views

Hi,

I'm trying to solve a huge sparse linear system using the PARDISO. I intend to use a subroutine named psolver to include all information and solution processes required when using PARDISO. First, I included the "mkl_pardiso.f90" file and also USEd "mkl_pardiso" in the main program. All quantities for the PARDISO is defined within the subroutine and copied exact from the MKL example only with the matrix input from my own data. The MKL parallel library is also specified in the project property. Strange things happed when I try to compile the code. It prompted me that

"Error 1 error #6285: There is no matching specific subroutine for this generic subroutine call. [PARDISO]" 

I also tried to run the example which come with the mkl library, and everything works pretty good. I even changed the example to make the PARDISO as a subroutine and modified the data type, such as from real(kind=dp) to double precision. And the example still works. So, can anybody tell me what's care should I take when using PARSIDO? Why PARDISO is not working in my own code?

Another question is can I use PARDISO to solve huge ill-conditioned highly sparse system? What I mean huge is the dense matrix form will be over several hundreds thousand dofs, ill-conditioned is the condition number is very large, >10^16. If possible, what solution technique or what parameters I should set for PARDISO? Any suggestions and comments will be much appreciated.

 

0 Kudos
8 Replies
Gennady_F_Intel
Moderator
744 Views

fortran compiler is picky about the types of arguments to the routine. pls check how you declare and pass all parameters to Pardiso. 

if your input is dense - then may be ScaLapack would be the best choise in that case? 

0 Kudos
Gators_vs__Sundevil
744 Views

Gennady Fedorov (Intel) wrote:

fortran compiler is picky about the types of arguments to the routine. pls check how you declare and pass all parameters to Pardiso. 

if your input is dense - then may be ScaLapack would be the best choise in that case? 

Hi Gennady,

Thanks for your inputs. But all the parameters are exactly the same as the given example in the mkl package except the coefficient matrix a and right handside vector b. Any other suggestions?

0 Kudos
Chao_Y_Intel
Moderator
744 Views

Hello,

For the compiler error, as Gennady suggested, it is likely related to the input variable type.

I talked with our engineer owner with such ill condition problem on the pardiso: Generally, the pardiso can’t handle such matrix well with such condition number. There are some tricks on how we can found the solution (for example solution is in non-ill condition subspace or try to use quad precision iterative refinement or other), but if you have some information, that may help on further check on the problem: for example,  the example of the matrix, the way how this matrix have been constructed (diff. operator,  Domain, )

Thanks,
Chao

0 Kudos
Gators_vs__Sundevil
744 Views

Chao Y (Intel) wrote:

Hello,

For the compiler error, as Gennady suggested, it is likely related to the input variable type.

I talked with our engineer owner with such ill condition problem on the pardiso: Generally, the pardiso can’t handle such matrix well with such condition number. There are some tricks on how we can found the solution (for example solution is in non-ill condition subspace or try to use quad precision iterative refinement or other), but if you have some information, that may help on further check on the problem: for example,  the example of the matrix, the way how this matrix have been constructed (diff. operator,  Domain, )

Thanks,
Chao

Hi Chao,

Thanks for your suggestions. At small size level, say 8000x8000, I stored the a matrix in the dense form. The LAPACK equilibrating routines are used to reduce the condition number. And the solution turned out to be very accurate. But as the size of the problem goes up, it's impossible to store the matrix a in a dense format. Sparse format is very efficient for the matrix a since it's highly sparse.

Matrix a is produced almost in the same way as the global stiffness matrix in the finite elements. I just wondering are there any subroutines in MKL to equilibrating the sparse matrix a to reduce the condition number, like what I have done for the dense form of a? If a copy of the matrix a is needed for the analysis purpose, I will upload one soon. Again, thanks for the helps.  

0 Kudos
Alexander_K_Intel2
744 Views

HI,

There is similar functionality to LAPACK equilibrating in PARDISO - matching and scaling. In term of iparm parameter it is iparm(11) and iparm(13). It is a solution for all ill condition matrix but it could help on some matrices.

Thanks,

Alexander Kalinkin

0 Kudos
Gators_vs__Sundevil
744 Views

Alexander Kalinkin (Intel) wrote:

HI,

There is similar functionality to LAPACK equilibrating in PARDISO - matching and scaling. In term of iparm parameter it is iparm(11) and iparm(13). It is a solution for all ill condition matrix but it could help on some matrices.

Thanks,

Alexander Kalinkin

Hi,

In the example comes with the MKL, at phase 11 and 22, the PARDISO is called in following form:

CALL PARDISO (pt, maxfct, mnum, mtype, phase, n, K, IK, JK, idum, 1, iparm, msglvl, ddum, ddum, error)

where integer idum(1) and  real ddum(1). And this is the place where I got the previous errors. But there is no error in the original example.

Then I changed it to

CALL PARDISO (pt, maxfct, mnum, mtype, phase, n, K, IK, JK, perm, 1, iparm, msglvl, f, du, error)

where integer perm(n), K, IK, JK, f, du are the inputs from my side.

Now the error message becomes "access violation"

Question is how to solve this issue? Thanks.

0 Kudos
Chao_Y_Intel
Moderator
744 Views

Hello, 

In which phase in the error reported?  Also can you add matrix checker (set the iparm(27)=1) to have a check if the input matrix data is valid?
some tips is list here: http://software.intel.com/en-us/articles/pardiso-tips

Thanks
Chao 

0 Kudos
Gators_vs__Sundevil
744 Views

Chao Y (Intel) wrote:

Hello, 

In which phase in the error reported?  Also can you add matrix checker (set the iparm(27)=1) to have a check if the input matrix data is valid?
some tips is list here: http://software.intel.com/en-us/articles/pardiso-tips

Thanks
Chao 

Thanks, Chao,

The PARDISO is currently working. The issue I have located is the data type of my matrix K even though I have defined it as the double. Again, thanks for your help.

Another question is how can I achieve computing using multi-core or thread? The code ran using only one core given that the computer has additional 7 available. Thanks.

0 Kudos
Reply