pardiso

pardiso

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!

6 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

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.

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.   [A] [X][ 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

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 

>>...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.

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.

Leave a Comment

Please sign in to add a comment. Not a member? Join today