На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
    > Программирование в gfortran , Ошибка компиляции
      Уважаемые старожилы!Работаю с моделями атмосферы, написанными ещё под фиксированный формат. В FPS код компилируется нормально, а вот перенёс на gfortran и появилась ошибка:"Incompatible types in assignment at(1), character(1) to integer(4)". интуитивно понимаю, что здесь что-то с объявлениями, но до конкретного результата не дошёл. Проконсультируйте в какую сторону двигаться! :D
        Ну так тут все написано: попытка записать значение типа character(1) в переменную типа integer(4). А детальнее - давайте код (или хотя бы его проблемный участок).
          На это моего английского хватило :D ! Но какой вопрос ... Проблема в файле Wind, в BLOCK DATA GWSBK5 стр.67 - там объявление, а используется в Gws5 (стр. 65 и 142). Попробовал явно объявить тип character - ошибка ушла, но программа аварийно завершается. Ну а поскольку я не программист возникает "затык" - работа стоит. :( Благодарю Вас за помощь!
          [attach=#0][/attach]
          [attach=#2][/attach]
            По-моему, у Вас не получилось прикрепить файлы к сообщению. :crazy:

            P.S. Если это книга - напишите, какая, возможно, я найду ее сам.
              Точно, не прошло :angry: ! Программа с сайта 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 не хочет код воспринимать!
                Так, ясно. Тип этих переменных нигде не описан, соответственно, он устанавливается по умолчанию (и, так как они все начинаются с I или N, то он целый). Соответственно, надо повставлять в исходники объявления этих переменных как CHARACTER (вернее, как массивы строк) с подходящей длиной. Почему их нет в исходниках, непонятно - это противоречит стандарту, так что, наверное, является местной особенностью системы, под которую этот код был написан.
                  Где-то так я и предполагал, благодарю за консультацию!
                    В старые времена, когда фортран еще не имел символьного типа данных, описанным способом можно было записать строку в массив произвольного типа.
                    Чтобы программа заработала в g77 или gfortran (фортран-90,95) надо переписать участки, работающие с текстовыми строками (это приведенное описание, вероятно операторы ввода-вывода, и вполне могут быть хитрые участки, модифицирующие эти переменные)
                    Проще всего эти места найти поиском имен ISDATE, ISTIME, NAME
                      Если явно задаю тип данных 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 и всё, дальше переменные нигде не обнаруживаются. :( Трудно понять мысль разработчиков
                        Это уже другая ошибка, к которой те строки отношения не имеют. Там есть COMMON-блок CSW, и похоже, что проблема с его содержимым.

                        Но, похоже, все это означает, что этот код проще переписать. :yes-sad:
                          Фантом, благодарю Вас за помощь! Отредактировал COMMON - блок и программа "пошла".
                            Ну и слава богам. Особенно если пошла правильно. ;)
                              Цитата Фантом @
                              Так, ясно. Тип этих переменных нигде не описан, соответственно, он устанавливается по умолчанию (и, так как они все начинаются с I или N, то он целый). Соответственно, надо повставлять в исходники объявления этих переменных как CHARACTER (вернее, как массивы строк) с подходящей длиной. Почему их нет в исходниках, непонятно - это противоречит стандарту, так что, наверное, является местной особенностью системы, под которую этот код был написан.

                              В FORTRAN IV не было типа CHARACTER, но вместо него можно было использовать любой другой тип данных. Обычно использовался INTEGER с учетом, что в одном числе 4 символа. Так что стандарту это вовсе не противоречит.
                              Вероятно, следует описать переменные как character*4, но лучше, конечно, переписать программу по уму, избавившись от 4-символьных ограничений на длину строки.
                                Цитата andriano @

                                В FORTRAN IV не было типа CHARACTER, но вместо него можно было использовать любой другой тип данных. Обычно использовался INTEGER с учетом, что в одном числе 4 символа. Так что стандарту это вовсе не противоречит.

                                Да, но Фортран IV и 77 - это разные стандарты, а там, кажется, все-таки есть элементы и 77-го. Хотя ручаться не буду - за давностию лет особенности IV я уже прочно забыл.
                                  Ещё раз благодарю всех откликнувшихся за помощь. Позволю себе ещё вопрос. Кто-нибудь работал в фортране с файлами расширения .nc (netCDF)? К сожалению вся информация по теме на "англицком". Может кто знает, либо где это толково описано, либо доходчиво просветит. В настоящее время пользуюсь питоном с установленными PyNio и т.д., который читает этот формат.
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0323 ]   [ 16 queries used ]   [ Generated: 19.04.24, 11:54 GMT ]