1

MKL を使用した Intel Virtual Fortran で IMSL を使用しています。IMSL のルーチンを使用しようとしました。正常にコンパイルされましたが、ファイルを実行しようとすると、次のようなエラーが発生しました。

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

この問題を解決するにはどうすればよいですか?

USE EVCRG_INT を追加した後

エラー情報が表示されます:

    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 USER'S GUIDE には、次のように書かれています。

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

1 に答える 1

2

IMSL についてはよくわかりませんが、インターフェイスの不一致があると思います。useIMSL モジュールを使用していないため、Fortran 90 インターフェイスではなく、より多くの引数を必要とする Fortran 77 インターフェイスを使用しています。IMSL マニュアルを参照してください。モジュールかuse、呼び出しを のようなものに変更しますCALL EVCRG (2, p, 2,w, vr, 2)

使用できる use ステートメントはおそらくUSE numerical_libraries.

- - 編集 - -

つまり、用途を追加して良かったということです。これで、呼び出しに実際にエラーがあったことが明らかになりました。引数が間違っています。引数 2 と 3、つまり EVAL と EVEC はCOMPLEX!

于 2012-04-17T07:43:51.640 に答える