- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to use the Pardiso matrix routines but I keep getting an error #6633 “The type of the actual argument differs from the type of the dummy” with the PT variable when I compile. The relevant segments of my code are as follows:
IMPLICIT NONE
INCLUDE 'mkl.fi'
INTEGER*8 pt(64)
INTEGER maxfct,mnum,mtype,phase,n,nrhs,msglvl,error
INTEGER ia(1001),ja(1000000),perm(1000),iparm(64)
REAL*8 a(1000000),b(1000),x(1000)
call pardiso_d (pt, maxfct, mnum, mtype, phase, n, a, ia, ja, perm, nrhs, iparm, msglvl, b, x, error)
The mkl_pardiso.fi file (referred to from mkl.fi) in C:\Program Files (x86)\Intel\Composer XE 2013 SP1.139\mkl\include contains the following:
TYPE MKL_PARDISO_HANDLE; INTEGER(KIND=8) DUMMY; END TYPE
INTEGER, PARAMETER :: PARDISO_OOC_FILE_NAME = 1
SUBROUTINE PARDISO_D( PT, MAXFCT, MNUM, MTYPE, PHASE, N, A, IA, &
& JA, PERM, NRHS, IPARM, MSGLVL, B, X, ERROR )
IMPORT MKL_PARDISO_HANDLE
TYPE(MKL_PARDISO_HANDLE), INTENT(INOUT) :: PT(*)
INTEGER, INTENT(IN) :: MAXFCT
INTEGER, INTENT(IN) :: MNUM
INTEGER, INTENT(IN) :: MTYPE
INTEGER, INTENT(IN) :: PHASE
INTEGER, INTENT(IN) :: N
INTEGER, INTENT(IN) :: IA(*)
INTEGER, INTENT(IN) :: JA(*)
INTEGER, INTENT(INOUT) :: PERM(*)
INTEGER, INTENT(IN) :: NRHS
INTEGER, INTENT(INOUT) :: IPARM(*)
INTEGER, INTENT(IN) :: MSGLVL
INTEGER, INTENT(OUT) :: ERROR
REAL(KIND=8), INTENT(IN) :: A(*)
REAL(KIND=8), INTENT(INOUT) :: B(*)
REAL(KIND=8), INTENT(OUT) :: X(*)
END SUBROUTINE PARDISO_D
I have tried changing my INTEGER*8 pt(64) line to TYPE(MKL_PARDISO_HANDLE) :: pt(64) but still get the same error.
What am I doing wrong?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If you intend to call Pardiso from free-format Fortran code, the file to include is "mkl_pardiso.f90". The code below (please ignore the formatting errors introduced by the IDF software) is accepted by the 14.0 compiler.
[fortran]INCLUDE 'mkl_pardiso.f90' IMPLICIT NONE INTEGER pt(64) INTEGER maxfct,mnum,mtype,phase,n,nrhs,msglvl,error INTEGER ia(1001),ja(1000000),perm(1000),iparm(64) REAL*8 a(1000000),b(1000),x(1000) call pardiso (pt, maxfct, mnum, mtype, phase, n, a, ia, ja, perm, & nrhs, iparm, msglvl, b, x, error) end [/fortran]- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
No, I'm not intending to use free-format Fortran code and would prefer to use mkl.fi. In that case, what do I need to change to get it to work?
By the way, what makes you think I am using free-format code? Note that the call pardiso_d(...) line is continued onto a second line in my real code. I just put it on one line in this post for readability.
I also found that if I call pardiso instead of pardiso_d it can't find the subroutine when I compile.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
As you can see in the relevant example source files in the .../mkl/examples/solverf/source directory, you use
INCLUDE 'mkl_pardiso.f77'
for fixed format Fortran source files that call Pardiso.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page