2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Error: Rank mismatch in array reference at (1) (1/2)
Сообщение24.09.2010, 21:32 
Доброе время всем суток!

На днях перешел с виндоуса на Ubuntu10.04 и собираю свой фортрановский проект в Eclipse Galileo. Конечно же я поставил Photran и прочее иже с ним.
Что самое интересное в виндоусе не было ни одной ошибки и программа работала прекрасно... Теперь же я имею ошибку:
Код:
Error: Rank mismatch in array reference at (1) (1/2)


Код:
PROGRAM trouble
double precision :: z(3,4),  x(6), ...
...
    z = array_valued_function(x)
...
END PROGRAM trouble


В другом файле func.f90 я описываю функцию:

Код:
FUNCTION array_valued_function(x)
double precision :: array_valued_function(3,4),x(6)
    array_valued_function = ...
END FUNCTION


Файл func.f90 сделан в виде набора функций (без модуля).

Код:
z = array_valued_function(x)
                         1
Error: Rank mismatch in array reference at (1) (1/2)


Все размерности массивов я проверил неоднократно... Переписал даже еще раз... Тоже самое...

Oleg.

-- Пт сен 24, 2010 22:10:55 --

А как только я заключаю файл func.f90 в модуль (coordinate_transformations), так имею на выходе, что Eclipse не может
An internal error occurred during: "Building Workspace".
Could not find a file to match the module name: coordinate_transformations

 
 
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение25.09.2010, 16:55 
Ulrih в сообщении #355915 писал(а):
Что самое интересное в виндоусе не было ни одной ошибки и программа работала прекрасно...
Возможно, компилятор на Windows реализует некоторые конструкции из F95 и/или F2003.

Попробуйте такой код:
Код:
PROGRAM trouble
double precision :: z(3,4),  x(6), ...
    ...
    array_valued_subroutine(x, z)
    ...
END PROGRAM trouble

SUBROUTINE array_valued_subroutine(x, z)
double precision :: z(3,4),x(6)
    z(1,1) = ...
    ...
END FUNCTION

 
 
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение25.09.2010, 18:26 
Yuri Gendelman
Спасибо!)
Засыпая я думал об этом, утром сделал) а теперь +1 подтверждение)...

А тогда как так получается, что компиляторы работают лучше с subroutine чем с function... и как это можно прокоментировать?..
Я давно пишу через подпрограммы, а с функциями мне коды прислали... хотя странно, они там считают под Линуксом.

Олег.

 
 
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение26.09.2010, 18:57 
Ulrih в сообщении #356140 писал(а):
А тогда как так получается, что компиляторы работают лучше с subroutine чем с function... и как это можно прокоментировать?..
Любой компилятор фортрана работает с function. Но у Вас функция не простая, а типа "двумерный массив с элементами простого типа". Такая конструкция может быть не везде реализована.

Компиляторы обычно реализуют не какой-либо чистый стандарт языка (например FORTRAN90), а стандарт + (некоторые расширения) - (некоторые ограничения). Причем набор расширений/ограничений разный у разных разработчиков и даже в разных версиях компиляторов одного разработчика.

 
 
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение26.09.2010, 19:44 
Версия Photran 5. + еще куча всего присоеденил к нему... Так что, мне следует такие сложные функции переписывать через subroutine.
А еще у меня есть функция для алгоритма Рунге-Кутта 4-го порядка, которая возвращает runge4(3,4,2)...
По тем цифрам, что я вижу --- лучше переписать.

PS. А где можно почитать на эту тему?

Олег.

 
 
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение27.09.2010, 17:38 
Ulrih в сообщении #356462 писал(а):
Так что, мне следует такие сложные функции переписывать через subroutine.
... А где можно почитать на эту тему?
Читать нужно документацию по Вашему компилятору, в особенности по особенностям реализации Фортрана. Возможно, для определения таких функций есть какие-то специальные операторы или ключевые слова.
Например, можно попробовать явно определенный тип для функции:
Код:
TYPE dp34
   DOUBLE PRECISION z(3,4)
END TYPE dp34

 
 
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение20.10.2010, 19:43 
это не глюк компилятора а самой IDE.

 
 
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение21.10.2010, 00:57 
zmi в сообщении #364040 писал(а):
это не глюк компилятора а самой IDE.
Это легко проверить из командной строки (gmake).

 
 
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение22.10.2010, 13:45 
конечно, вчера проверил, у меня было тоже самое, с консоли все собирается.

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group