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

Problem with Intel Fortran error #6633

schulzey
New Contributor I
528 Views

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?

0 Kudos
3 Replies
mecej4
Honored Contributor III
528 Views

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]
0 Kudos
schulzey
New Contributor I
528 Views

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.

0 Kudos
mecej4
Honored Contributor III
528 Views

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.

0 Kudos
Reply