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

pardiso

wang_j_1
Beginner
398 Views

hi,all I want to use the pardiso to solve a complex and symmetrical matrix .But it display error:The type of the actual argument differs from the type of the dummy argument.But when the matrix is real ,it work. I can't understand why it happen.Then I check the 'mkl_pardiso.f90' file,and not find the complex statement.only real .So when the matrix is real,it work well. How can I fix it? Do I need to rewrite the mkl_pardiso.f90??? so i hope someone can point me to a good place or help me out! Thanks!

0 Kudos
5 Replies
mecej4
Honored Contributor III
398 Views

In order to diagnose the problem we need from you the exact call to Pardiso, and the declarations of the arguments in the call. It would be nicer if you can post a complete example source code that gives the error  message stated above.

0 Kudos
wang_j_1
Beginner
398 Views

hi,mecej4

    Here is a simple example:

INCLUDE 'mkl_pardiso.f90'
program Testpardiso
use mkl_pardiso
implicit none
TYPE(MKL_PARDISO_HANDLE)::pt(64)
integer::maxfct,mnum,mtype,phase,n,nrhs,error,msglvl,nnz,i
integer::error1
integer::iparm(64)
integer::perm(8)
integer::ia(9)
integer::ja(18)
complex(kind=8)::x(8)
complex(kind=8)::b(8)
complex(kind=8)::a(18)
integer::idum(1)
real(kind=8)::ddum(1)
!.............................................
Data ia /1,5,8,10,12,15,17,18,19/
Data ja /1,3,6,7,2,3,5,3,8,4,7,5,6,7,6,8,7,8/
Data a /7.0,1.0,2.0,7.0,-4.0,8.0,2.0,1.0,5.0,7.0,9.0,5.0,1.0,5.0,-1.0,5.0,11.0,5.0/
!.................................................................

n=8
nnz=18
nrhs=1
maxfct=1
mnum=1
error=0
msglvl=1
mtype=3
iparm(:)=0
do i =1,64
pt(i)%DUMMY=0
end do
b(:)=1.0
iparm(1)=1
iparm(2)=2
iparm(4)=0
iparm(5)=0
iparm(6)=0
iparm(8)=9
iparm(10)=13
iparm(11)=1
iparm(13)=0
iparm(14)=0
iparm(18)=-1
iparm(19)=-1
iparm(20)=0
!...............................................................
phase=11
CALL pardiso(pt,maxfct,mnum,mtype,phase,n,a,ia,ja,idum,nrhs,iparm,msglvl,ddum,ddum,error)

phase=22
CALL pardiso(pt,maxfct,mnum,mtype,phase,n,a,ia,ja,idum,nrhs,iparm,msglvl,ddum,ddum,error)
iparm(8)=2
phase=33
CALL pardiso(pt,maxfct,mnum,mtype,phase,n,a,ia,ja,idum,nrhs,iparm,msglvl,b,x,error)
phase=-1
CALL pardiso(pt,maxfct,mnum,mtype,phase,n,ddum,idum,idum,idum,nrhs,iparm,msglvl,ddum,ddum,error)

stop
end

...........................................................

error #6633: The type of the actual argument differs from the type of the dummy argument.   [ B]

so I check the interface f90 and not find the define A,x,b  as complex,all of them only defined as real.

so the  interface need to be rewrited  ?

thank you for your help

0 Kudos
wang_j_1
Beginner
398 Views

hi mecej4!  

  The code is the most simple . when A is defined as complex,code can't pass compile .The type of the actual argument differs from the type of the dummy argument. It can work after I rewrite the interface 'mkl_pardiso.f90' .As I said before,there was no complex statement. 

I use intel parallel studio XE 2011.It's so strange that the interface need to be rewrited by the user and there is only a  f90 example.Because it can't pass compile,I thick it dosen't matter anything else except the varibles statment. why it happen?

Thank you for help 

0 Kudos
SergeyKostrov
Valued Contributor II
398 Views
>>...it display error: The type of the actual argument differs from the type of the dummy argument... I had a similar MKL error when I used an MKL function with a wrong calling convension. Please also provide more details for your development environment.
0 Kudos
mecej4
Honored Contributor III
398 Views

The argument DDUM should be COMPLEX(kind=8). Even arguments that end up not being referenced in the subroutine must be of the correct type, because the compiler has to be able to compile subprogram sources independently.. It would be helpful if the compiler stated which argument is of the wrong type, but that is a bit difficult to do when there is more than one module procedure that may be a potential match.

Furthermore, you should make sure that argument arrays are sufficiently large (as large as the Pardiso documentation specifies).

It is ill-advised to modify Intel-provided files such as mkl_pardiso.f90  without having established that the code in the file has an error. The adage If it ain't broke, don't fix it! is quite apt here.

0 Kudos
Reply