- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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!
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page