2012-04-17 6 views
1

Я использую IMSL с Intel Virtual Fortran с MKL. Я попытался использовать рутину из IMSL. Он был составлен в порядке, но когда я пытаюсь выполнить файл, он пришел с ошибкой, говоря:Ошибка MKL при использовании 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

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 достаточно, но я думаю, что есть несоответствие интерфейсов. Поскольку у вас нет 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

Проблема решена. Большое спасибо! –

Смежные вопросы