2012-04-17 12 views
1

MKLを使用したインテル®バーチャル・ポートランでIMSLを使用しています。私はIMSLからルーチンを使用しようとしました。それは罰金コンパイルが、私は、ファイルを実行しようとすると、それはというエラーを思い付いた:私はこの問題を解決するにはどうすればよいIMSLを使用しているときのMKLエラー

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 

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. 

次は私が使用していたコードです?

私は 使用EVCRG_INT

を追加した後は、ERRORのINFOMATION与える:

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知らないが、私はインターフェイスの不一致があると思います。 use IMSLモジュールを使用していないため、Fortran 90インターフェイスは使用しませんが、より多くの引数を必要とするFortran 77インターフェイスを使用しています。 IMSL manualを参照してください。 useモジュール、またはCALL EVCRG (2, p, 2,w, vr, 2)のようなものに変更してください。

使用可能な文はおそらくUSE numerical_librariesです。

---- EDIT ----

それは使用を追加することは良いことだったことを、意味しています。今、それは本当に呼び出しにエラーがあったことを明らかにします。議論は間違っている。引数2と3、つまりEVALとEVECはCOMPLEXでなければなりません!

+0

ありがとうございました。私はインターフェイスが正しいと思う、私はFortran 90インターフェイスを使用しています。別の試みをしました:コードにUSE EVCRG_INTを追加しました。これは、ライブラリの命名規則に従うと思います。それは新しいエラーを出しました:test_evcrg(私は私の記事の新しい情報を追加しました)。 –

+0

編集を参照するには、 'COMPLEX'変数を使用する必要があります。 –

+0

問題が解決しました。どうもありがとう! –

関連する問題