我正在尝试创建一个简单的示例,以便使用MKL Intel库中的Pardiso求解器。我一直在遵循所提供的示例,但是如果我将对Pardiso的调用放在一个子例程中,它就不能工作。我担心这与INCLUDE语句或链接方面有关。
所有子例程使用的数组都包含在一个名为变量的模块中
MODULE variables
INTEGER :: M ! Lines
INTEGER :: N ! Columns
REAL*8, DIMENSION(:,:), ALLOCATABLE :: MATRA ! original matrix
INTEGER, DIMENSION(:), ALLOCATABLE :: ROWSA,COLSA ! ia and ja in pardiso
REAL*8, dimension(:), ALLOCATABLE :: VALSA, RHSVC, SOLVC ! a, b, x
END MODULE variables包含该程序的文件如下:
INCLUDE 'mkl_pardiso.f90'
program PardisoFortran
use variables
use mkl_pardiso
implicit none
! do some stuff to create the matrices
call create_matrices
call INITPARDISO
end program最后,文件initpardiso
subroutine INITPARDISO
USE VARIABLES
USE mkl_pardiso
! pardiso variable declaration
TYPE(MKL_PARDISO_HANDLE), ALLOCATABLE :: pt(:)
INTEGER maxfct, mnum, mtype, phase, nrhs, error, msglvl
INTEGER, ALLOCATABLE, DIMENSION(:) :: iparm
INTEGER i, idum
REAL*8 waltime1, waltime2, ddum
! --- then I allocate and fill the variables
! Finally I can call pardiso
phase = 11 ! only reordering and symbolic factorization phase
CALL pardiso_64 (PT, maxfct, mnum, mtype, phase, M, VALSA, COLSA, &
ROWSA, idum, nrhs, iparm, msglvl, ddum, ddum, error)
end subroutine现在,我还将附加的Include目录添加到Visual Studio项目配置中(即
C:\Program Files (x86)\Intel\ComposerXE-2011\mkl\include;
C:\Program Files (x86)\Intel\ComposerXE-2011\mkl\lib\intel64;
C:\Program Files (x86)\Intel\ComposerXE-2011\mkl\lib\ia32)如果我注释对pardiso的调用,一切都能正常工作,否则它会停止编译,并显示以下错误:
错误1错误#6285:此泛型子例程调用没有匹配的特定子例程。PARDISO_64 ....PardisoFortran\initpardiso.f 144
对此有什么想法吗?上面的INCLUDE语句有问题吗?我应该把它放在哪里?
发布于 2013-01-26 06:48:48
我相信pardiso_64是一个使用64位整数的子例程版本。您的代码片段显示没有证据表明您已采取措施确保您的整数是64位的。我想您可能已经使用了编译器选项或其他方法来告诉编译器默认为64位整数。
您发布的错误消息是在调用库泛型过程时,伪参数和实际参数不匹配时得到的典型错误消息。假设您的整数只有32位,那么编译器正在寻找一个名为pardiso_64的例程,但没有找到,该例程接受32位整数参数。
我不认为这个错误与include语句有关。
发布于 2013-01-28 08:24:05
我在你的代码中发现了一个问题。参数'ddum‘是一个标量。它应该是一个维数组(M,nrhs)。可能会有更多的问题。我需要看到完整的代码来提供帮助。
像往常一样,询问英特尔MKL相关问题的最佳位置是MKL论坛:http://software.intel.com/en-us/forums/intel-math-kernel-library。在这里发布你的问题,并附上你的整个程序。你会得到一个更快的答案!
https://stackoverflow.com/questions/14530024
复制相似问题