MKL使用出现了问题,求帮助
我现在打算使用MKL自带的lapack程序解大型稀疏矩阵于是尝试写了一段程序来验证一下使用方法,但是总也不成功。
现在做的工作有:
1、MKL库的连接。从INTEL的说明文档和网上的相关信息已经确认连接的方法,比如本站给出的
http://fcode.cn/guide-58-1.html
2、关于LAPACK函数的调用。我打算使用SPOSV这个函数,这个函数有几个种类,如下
https://software.intel.com/zh-cn/node/468894#A2F80478-BAC2-46F6-A0FB-9CC1F4456803
如SPOSV或者POSV。前者需要的参数多,而后者少。但是后者需要INTERFACE。其实就是调用
几个MODULE,如我程序中使用的LAPACK.MOD等。
存在的问题:
1、通过以上两步,调用POSV函数,仍然会出现“SPOSV_F95不能找到”这样的错误。
2、而如果调用的是SPOSV,则又会出现ACCESS VIOLATION的问题,不知道是不是参数设置错误了。
************************************************************************************************
以下是我的程序
program main
USE LAPACK95
USE F95_PRECISION
REAL,ALLOCATABLE :: A1(:,:),B1(:,:)
INTEGER N,NRHS,LDA LDB
! INTERFACE
! SUBROUTINE sposv( uplo, n, nrhs, a, lda, b, ldb, info )
! REAL A(:,:)
! REAL B(:,:)
! CHARACTER(LEN=1), OPTIONAL :: UPLO
! INTEGER, OPTIONAL :: INFO
! INTEGER N,NRHS,LDA LDB
! END SUBROUTINE SPOSV
! END INTERFACE
ALLOCATE(A1(5,5),B1(5,3))
N=5
NRHS=3
LDA=5
LDB=5
OPEN(11,FILE='A.TXT')
OPEN(12,FILE='B.TXT')
DO I=1,5
READ(11,*)(A1(I,J),J=1,5)
END DO
DO I=1,5
READ(12,*)(B1(I,J),J=1,3)
END DO
CALL SPOSV(n, nrhs, A1, lda, B1, ldb)
DO I=1,5
WRITE(*,*)(B1(I,J),J=1,3)
END DO
DEALLOCATE(A1,B1)
end program main 以下代码测试成功。注意代码中的 A=A*AT 只是为了得到正定阵,没有别的目的,实际使用时请不要写
需要在工程属性里添加:
Program main
Use lapack95
Use f95_precision
Real, Allocatable :: a1(:, :), b1(:, :)
Integer :: n = 5 , nrhs = 3 ,info = 999
Allocate( a1(N,N) , b1(N,NRHS) )
Open( 11 , File='A.TXT' )
Open( 12 , File='B.TXT' )
Do i = 1, N
Read (11, *) a1(i, :)
End Do
a1 = matmul(a1, transpose(a1)) !// A=A*AT 为了得到正定阵
Do i = 1, N
Read (12, *) b1(i, :)
End Do
!CALL SPOSV(n, nrhs, A1, lda, B1, ldb)
Call posv( a1 , b1 , 'U' , info )
Write (*, *) info !//输出0则表示成功
Do i = 1, N
Write (*, *) b1(i, :)
End Do
Deallocate(a1, b1)
Close( 11 )
Close( 11 )
End Program main fcode 发表于 2015-12-6 18:17
以下代码测试成功。注意代码中的 A=A*AT 只是为了得到正定阵,没有别的目的,实际使用时请不要写
需要在工 ...
太赞了!
页:
[1]