2012-04-17 71 views
1

我正在使用帶有MKL的Intel Virtual Fortran的IMSL。我試圖使用IMSL的例程。它編譯罰款,但是當我嘗試執行該文件時,它想出了一個錯誤說:使用IMSL時發生MKL錯誤

MKL ERROR: Parameter 7 was incorrect on entry to SGEEVX 

*** TERMINAL ERROR 2 from EVCRG. The required storage cannot be allocated. 
***   The specified N may be too large, where N = 1064682127. 

以下是我使用的代碼:

PROGRAM test_evcrg 
include 'link_fnl_static.h' 
!DEC$ OBJCOMMENT lib:'libiomp5mt.lib' 

IMPLICIT NONE 
REAL, Dimension(2,2) :: p,vr 
REAL, Dimension(2) :: w 

p = RESHAPE([0.7, 0.3, 0.5,0.5],[2,2]) 

CALL EVCRG (p,w,vr) 

WRITE (*,*), w 
WRITE (*,*) 
WRITE (*,*), vr 

END PROGRAM test_evcrg 

我怎樣才能解決這個問題?

後我加 使用EVCRG_INT

IT提供了錯誤信息描述:

test_evcrg.f90(14): error #6285: There is no matching specific subroutine for this generic subroutine call. [EVCRG] 
    CALL EVCRG(p,w,vr) 
---------^ 
    compilation aborted for test_evcrg.f90 (code 1) 

感謝。

在IMSL用戶指南,它說:

FORTRAN 90 Interface 
    Generic: CALL EVCRG (A, EVAL, EVEC [,…]) 
    Specific: The specific interface names are S_EVCRG and D_EVCRG. 

回答

2

我不知道IMSL不夠,但我認爲是的接口不匹配。因爲您沒有任何IMSL模塊,所以您沒有使用Fortran 90接口,而是使用Fortran 77接口,這需要更多參數。見IMSL manual。可以是模塊use,也可以將呼叫更改爲CALL EVCRG (2, p, 2,w, vr, 2)之類的內容。

您可以使用的使用說明可能是USE numerical_libraries

---- ----編輯

這意味着,添加使用是一件好事。現在它暴露在通話中確實存在錯誤。爭論是錯誤的。參數2和3,即EVAL和EVEC必須是COMPLEX

+0

非常感謝。我認爲接口是正確的,我正在使用Fortran 90接口。我做了另一次嘗試:我將USE EVCRG_INT添加到代碼中,我認爲它遵循庫的命名轉換。它給了一個新的錯誤:test_evcrg(我在我的文章中添加了新的信息)。 – 2012-04-17 11:09:48

+0

請參閱編輯,您必須使用'COMPLEX'變量。 – 2012-04-17 11:53:38

+0

問題解決了。非常感謝! – 2012-04-17 15:58:06