- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi everybody!
I have a problem with Pardiso in a fortran project. I am trying to write a simple routine to solve a linear system, but compilation stops at calling pardiso_64 (or pardiso in the case of 32bit version of my program). The error is:
Error 1 error #6285: There is no matching specific subroutine for this generic subroutine call. [PARDISO_64]
Here it is my code. A module defines the variables to be shared between all project file:
MODULE variables
INTEGER*8 :: M ! Lines
INTEGER*8 :: N ! Columns
DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: MATRA ! original 2D matrix
INTEGER*8, DIMENSION(:), ALLOCATABLE :: ROWSA,COLSA ! matrix of row pointers and column positions
DOUBLE PRECISION, dimension(:), ALLOCATABLE :: VALSA
DOUBLE PRECISION, dimension(:,:), ALLOCATABLE :: RHSVC, SOLVC ! matrix of values, right hand side and solution vector
END MODULE variables
After filling in the arrays VALSA, COLSA, ROWSA, RHSVC, SOLVC, we call a subroutine that prepares variables and calls pardiso:
SUBROUTINE INTPAR
USE VARIABLES
USE mkl_pardiso
! Internal solver memory pointer for 64-bit architectures
INTEGER*8 PT(64)
! Other variables
INTEGER*8 maxfct, mnum, mtype, phase, nrhs, error, msglvl
! Solver Parameters vectors
INTEGER*8, ALLOCATABLE, DIMENSION(:) :: iparm, perm
!---- ALLOCATION OF VECTORS
ALLOCATE(SOLVC(M,1))
ALLOCATE(RHSVC(M,1))
ALLOCATE(iparm(64))
ALLOCATE(perm(M))
!.... END OF ALLOCATION
!---- CHOICE OF PARDISO PARAMETERS
iparm(1) = 1
iparm(2) = 2
iparm(3) = 1
iparm(4) = 0
iparm(5) = 0
iparm(6) = 0
iparm(7) = 0
iparm(8) = 9
iparm(9) = 0
iparm(10) = 13
iparm(11) = 1
iparm(12) = 0
iparm(13) = 0
iparm(14) = 0
iparm(15) = 0
iparm(16) = 0
iparm(17) = 0
iparm(18) = -1
iparm(19) = -1
iparm(20) = 0
iparm(21) = 0
iparm(22) = 0
iparm(23) = 0
iparm(24) = 1
iparm(25) = 0
iparm(26) = 0
iparm(27) = 1
iparm(28) = 0
iparm(29) = 0
iparm(30) = 0
iparm(31) = 0
iparm(32) = 0
iparm(33) = 0
iparm(34) = 0
iparm(35) = 0
iparm(36) = 0
iparm(37) = 0
iparm(38) = 0
iparm(39) = 0
iparm(40) = 0
iparm(41) = 0
iparm(42) = 0
iparm(43) = 0
iparm(44) = 0
iparm(45) = 0
iparm(46) = 0
iparm(47) = 0
iparm(48) = 0
iparm(49) = 0
iparm(50) = 0
iparm(51) = 0
iparm(52) = 0
iparm(53) = 0
iparm(54) = 0
iparm(55) = 0
iparm(56) = 0
iparm(57) = 0
iparm(58) = 0
iparm(59) = 0
iparm(60) = 1
iparm(61) = 0
iparm(62) = 0
iparm(63) = 0
iparm(64) = 0
maxfct = 1
mnum = 1
nrhs = 1
error = 0
msglvl = 1
mtype = -2
! Initiliaze the internal solver memory pointer.
do i = 1, 64
pt(i)=0
end do
!.... END OF VARIABLES INITIALIZATION
!---- PHASE 11 - ANALYSIS
! Reordering and Symbolic Factorization, This step also allocates
! all memory that is necessary for the factorization
phase = 11 ! only reordering and symbolic factorization
CALL pardiso_64 (PT, maxfct, mnum, mtype, phase, n, VALSA, COLSA, &
ROWSA, perm, nrhs, iparm, msglvl, RHSVC, SOLVC, error)
WRITE(*,*) 'Reordering completed ... '
END SUBROUTINE INTPAR
Again, the compilation of such code stops with error: Error 1 error #6285: There is no matching specific subroutine for this generic subroutine call. [PARDISO_64]
It is compiled in debug mode, on 64bit configuration in Visual Studio 2010 with Intel Fortran Compiler XE 12.0
Any solution? Thank you very much!
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I see you use integer*8 data types - then question - do you use /4I8 option while compiling this example?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Reading the description of the option /4I8 in the manual I found out that it does not make any difference if all INTEGER values are declared as INTEGER(kind=8), right?
The problem that I found is that the interface to the function "Pardiso" is not pardiso_64 but pardiso_?_64 where "?" is the type of values you are putting in. In my case I have pardiso_D_64, and now, at least, it starts. Is there any known issue of this interface? The MKL manual does not present this kind of declaration!!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
1. Options such as /4I do not cause size changes to variables declared with explicit size/KIND. Likewise, one has to allow for what such options do to integer constants and constant integer expressions -- there can be bad surprises here.
2. When using a library function/subroutine (such as Pardiso) which has been designed to be accessed using the F77 interface (all arguments included in call/invocation, user has responsibility for checking sequence, type, size of arguments) or a more simplified/versatile F9X interface, there are three types of interfaces in the library:
(a) the generic F9X interface, which is the choice when the interface is adequate,
(b) the F77 interface, and
(c) the specific interfaces.
It is not intended that the specific interfaces be called by library users, and they are, therefore, often not mentioned in the documentation. That is why, unless you have valid reasons to access the specific interfaces such as pardiso_?_64, you should refrain from doing so. If the library developers changed the specific interfaces when issuing a new version of MKL, your code that called the specific interfaces would probably malfunction.

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