2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Error: Rank mismatch in array reference at (1) (1/2)
Сообщение24.09.2010, 21:32 


27/07/08
107
Russia
Доброе время всем суток!

На днях перешел с виндоуса на 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 
Заслуженный участник


15/05/05
3445
USA
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 


27/07/08
107
Russia
Yuri Gendelman
Спасибо!)
Засыпая я думал об этом, утром сделал) а теперь +1 подтверждение)...

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

Олег.

 Профиль  
                  
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение26.09.2010, 18:57 
Заслуженный участник


15/05/05
3445
USA
Ulrih в сообщении #356140 писал(а):
А тогда как так получается, что компиляторы работают лучше с subroutine чем с function... и как это можно прокоментировать?..
Любой компилятор фортрана работает с function. Но у Вас функция не простая, а типа "двумерный массив с элементами простого типа". Такая конструкция может быть не везде реализована.

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

 Профиль  
                  
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение26.09.2010, 19:44 


27/07/08
107
Russia
Версия 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 
Заслуженный участник


15/05/05
3445
USA
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 


05/10/09
22
это не глюк компилятора а самой IDE.

 Профиль  
                  
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение21.10.2010, 00:57 
Заслуженный участник


15/05/05
3445
USA
zmi в сообщении #364040 писал(а):
это не глюк компилятора а самой IDE.
Это легко проверить из командной строки (gmake).

 Профиль  
                  
 
 Re: Error: Rank mismatch in array reference at (1) (1/2)
Сообщение22.10.2010, 13:45 


05/10/09
22
конечно, вчера проверил, у меня было тоже самое, с консоли все собирается.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group