Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.12.108.7] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Уважаемые старожилы!Работаю с моделями атмосферы, написанными ещё под фиксированный формат. В FPS код компилируется нормально, а вот перенёс на gfortran и появилась ошибка:"Incompatible types in assignment at(1), character(1) to integer(4)". интуитивно понимаю, что здесь что-то с объявлениями, но до конкретного результата не дошёл. Проконсультируйте в какую сторону двигаться!
|
Сообщ.
#2
,
|
|
|
Ну так тут все написано: попытка записать значение типа character(1) в переменную типа integer(4). А детальнее - давайте код (или хотя бы его проблемный участок).
|
Сообщ.
#3
,
|
|
|
На это моего английского хватило ! Но какой вопрос ... Проблема в файле Wind, в BLOCK DATA GWSBK5 стр.67 - там объявление, а используется в Gws5 (стр. 65 и 142). Попробовал явно объявить тип character - ошибка ушла, но программа аварийно завершается. Ну а поскольку я не программист возникает "затык" - работа стоит. Благодарю Вас за помощь!
[attach=#0][/attach] [attach=#2][/attach] |
Сообщ.
#4
,
|
|
|
По-моему, у Вас не получилось прикрепить файлы к сообщению.
P.S. Если это книга - напишите, какая, возможно, я найду ее сам. |
Сообщ.
#5
,
|
|
|
Точно, не прошло ! Программа с сайта http://ccmc.gsfc.nasa.gov/modelweb/, раздел "Atmosphere models" , название модели "Horizontal Wind Model". Используется в SUBROUTINE GWS5, объявление и инициализация в BLOCK DATA GWSBK5.
Добавлено Проблемы возникают с COMMON/DATW/ISDATE(3),ISTIME(2),NAME(2) DATA ISDATE/'28-J','AN-9','3 '/,ISTIME/'20:3','5:39'/ DATA NAME/'HWM9','3 '/ gfortran не хочет код воспринимать! |
Сообщ.
#6
,
|
|
|
Так, ясно. Тип этих переменных нигде не описан, соответственно, он устанавливается по умолчанию (и, так как они все начинаются с I или N, то он целый). Соответственно, надо повставлять в исходники объявления этих переменных как CHARACTER (вернее, как массивы строк) с подходящей длиной. Почему их нет в исходниках, непонятно - это противоречит стандарту, так что, наверное, является местной особенностью системы, под которую этот код был написан.
|
Сообщ.
#7
,
|
|
|
Где-то так я и предполагал, благодарю за консультацию!
|
Сообщ.
#8
,
|
|
|
В старые времена, когда фортран еще не имел символьного типа данных, описанным способом можно было записать строку в массив произвольного типа.
Чтобы программа заработала в g77 или gfortran (фортран-90,95) надо переписать участки, работающие с текстовыми строками (это приведенное описание, вероятно операторы ввода-вывода, и вполне могут быть хитрые участки, модифицирующие эти переменные) Проще всего эти места найти поиском имен ISDATE, ISTIME, NAME |
Сообщ.
#9
,
|
|
|
Если явно задаю тип данных character или комментирую объявление и использование этих строк, то ошибки исчесзают, а программа завершается с кодом:
/tmp/ccnNbdbv.o:(.data+0x60): multiple definition of `csw_' /tmp/cc4mmRTC.o:(.bss+0x20): first defined here collect2: выполнение ld завершилось с кодом возврата 1 В тоже время в FPS оба варианта работают нормально. P.S. Дальнейшее использование этих переменных не нашёл, хотя искал поиском по именам. Всё заканчивается в файле Gws5 и всё, дальше переменные нигде не обнаруживаются. Трудно понять мысль разработчиков |
Сообщ.
#10
,
|
|
|
Это уже другая ошибка, к которой те строки отношения не имеют. Там есть COMMON-блок CSW, и похоже, что проблема с его содержимым.
Но, похоже, все это означает, что этот код проще переписать. |
Сообщ.
#11
,
|
|
|
Фантом, благодарю Вас за помощь! Отредактировал COMMON - блок и программа "пошла".
|
Сообщ.
#12
,
|
|
|
Ну и слава богам. Особенно если пошла правильно.
|
Сообщ.
#13
,
|
|
|
Цитата Фантом @ Так, ясно. Тип этих переменных нигде не описан, соответственно, он устанавливается по умолчанию (и, так как они все начинаются с I или N, то он целый). Соответственно, надо повставлять в исходники объявления этих переменных как CHARACTER (вернее, как массивы строк) с подходящей длиной. Почему их нет в исходниках, непонятно - это противоречит стандарту, так что, наверное, является местной особенностью системы, под которую этот код был написан. В FORTRAN IV не было типа CHARACTER, но вместо него можно было использовать любой другой тип данных. Обычно использовался INTEGER с учетом, что в одном числе 4 символа. Так что стандарту это вовсе не противоречит. Вероятно, следует описать переменные как character*4, но лучше, конечно, переписать программу по уму, избавившись от 4-символьных ограничений на длину строки. |
Сообщ.
#14
,
|
|
|
Цитата andriano @ В FORTRAN IV не было типа CHARACTER, но вместо него можно было использовать любой другой тип данных. Обычно использовался INTEGER с учетом, что в одном числе 4 символа. Так что стандарту это вовсе не противоречит. Да, но Фортран IV и 77 - это разные стандарты, а там, кажется, все-таки есть элементы и 77-го. Хотя ручаться не буду - за давностию лет особенности IV я уже прочно забыл. |
Сообщ.
#15
,
|
|
|
Ещё раз благодарю всех откликнувшихся за помощь. Позволю себе ещё вопрос. Кто-нибудь работал в фортране с файлами расширения .nc (netCDF)? К сожалению вся информация по теме на "англицком". Может кто знает, либо где это толково описано, либо доходчиво просветит. В настоящее время пользуюсь питоном с установленными PyNio и т.д., который читает этот формат.
|