2012-04-17 2 views
1

MKL이있는 Intel Virtual Fortran에서 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. 

다음은 내가 사용하고있는 코드입니다 ?

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) 

감사 :

나는 IT 오류 INFOMATION를 부여 사용 EVCRG_INT에게

추가 후에.

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

답변

2

내가 충분히 IMSL을 모르겠지만, 인터페이스의 불일치가 있다고 생각 다음 IMSL 사용 설명서에서

, 그것은 말했다. use 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 (저는 새 정보를 내 게시물에 추가했습니다). –

+0

편집을 보시려면'COMPLEX' 변수를 사용해야합니다. –

+0

문제가 해결되었습니다. 고마워요! –

관련 문제