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

我该如何解决这个问题?

在我添加使用 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 用户指南中,它说:

   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,但我认为接口不匹配。因为您没有use任何 IMSL 模块,所以您使用的不是 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 回答