суббота, 24 декабря 2011 г.

Fortran и ОС Windows 7

Задача: Поставить компилятор fortran-а на компьютер/ноутбук с операционной системой Windows7 (на 64 разрядную)
Методы решения: Geany, CVF, gfortran, MinGW

Для пользователей ОС Windows XP самой распространённой "программой с фортраном" является, наверное, Compaq Visual Fortran. Так бы и сидел научный брат за старым, но никем не отменным сине-зелёным фортаном, но повальный переход на новые 64 разрядные ОС (в т.ч. и Windows7) привёл к неизбежным переменам. Несмотря на то, что у CVF есть версия для 64 разрядных ОС, конкретно под Windows7 полноценно CVF отказывается работать.
Перед пользователем встаёт вопрос: как быть? Как вариант - можно снести Windows7 и поставить Windows XP, где CVF работает отлично. А можно перейти на какой-либо дистрибутив ОC Linux и программировать на свободном программном обеспечении (СПО, gfortran и g95). Правда для консервативного пользователя такое решение представляется слишком радикальным.
А ведь хочется как: работать под новенькой Windows7 и пользоваться всеми благами прежних программным пакетов. Преемником фирмы Compaq (последним продуктом CVF, кажется, стала версия 6.6) по поддержке и развитию фортрана стала фирма Microsoft с программным продуктом Microsoft Visual Studio (MSVS). Причём компилятор фортрана в него необходимо ставить отдельно, он не входит в дистрибутив по умолчанию. Для чистой совести также необходима лицензия MS.

Есть компромиссные варианты.

Вариант I: gfortran

Можно установить БЕСПЛАТНЫЙ и СВОБОДНО распространяемый компилятор gfortran под Windows7 и работать с ним через Geany.
Он с успехом справляется с подавляющим большинством научных задач, решаемых на фортране. И gfortran и Geany являются СПО, так что на них можно работать как под ОС Windows, так и под ОС Linux.


Вариант II: CVF через Geany

Есть один маленький фокус. Если установить на компьютер с Windows 7 или 8 Compaq Visual Fortran (CVF) и во время установки оставить все параметры по умолчанию, то можно будет "подцепить" компилятор CVF (df) через Geany или любой другой IDE (например, Notepad++).





ИНСТРУКЦИЯ I

1. Необходимо скачать MinGW. Что такое MinGW - здесь, а где скачать - тут. После загрузки, запускаем файл-установщик. Установка стандартная для пользователей Windows. Устанавливать рекомендуется в корневой каталог, например, "c:\MinGw", так как расположенные в "Program files (x86)" папки почему-то некорректно работают с, например, модулем питона f2py. Но если установить по умолчанию (т.е. в Program files), то сам gfortran работать будет отлично!
2. Необходимо скачать IDE Geany. Что такое Geany - тут, а скачать последнюю версию можно тут. Выбрать нужно Windows Binaries (Full Installer). Загружаем и устанавливаем.
3. Чтобы IDE Geany "подцепила" компилятор фортрана из MinGW, необходимо вручную прописать пути. Нам понадобится внести изменения в переменные среды. Для Windows7 делаем так:
Пуск\Панель управления\Система и безопасность\Система. Слева выбираем "Дополнительные параметры системы". На открывшейся вкладке "Дополнительно" кликаем кнопку "Переменные среды" (справа внизу).
Далее в  переменных среды пользователя (сверху) добавляем (или изменяем, если такая переменная уже есть) переменную path (можно PATH или Path). Ей прописываем полный путь к bin-у MinGW из папки, куда вы установили MinGW. Например так: Имя переменной - path; Путь - "C:\MinGW\bin"
4. Перезагружаем компьютер
5. Запускаем Geany и в открывшемся рабочем окне  пишем тестовую программу:
      program test
      print*, 'Hello, world!'
      end program
Сохраняем её как "test.f90" или "test.for". Нажимаем кнопку "Скомпилировать", затем "Собрать" и, наконец, "Выполнить".
6. Вуаля, всё работает! =)
7. Если всё-таки не работает - повторите пункты 1- 5. Или посмотрите тут.

ИНСТРУКЦИЯ II

При установке CVF на Windows 7 или 8 обычный setup не запустится. Для установки на 64-х разрядную систему (что Windows 7, что Windows 8) нужно зайти в папку "X86", а далее setupx86.exe. Устанавливаем с настройками по умолчанию. Важно ответить "yes" на вопрос об установке путей переменных среды.

Настраиваем сборку. В случае Geany необходимо войти во вкладки:

1) Сборка -> Установить параметры сборки
2) В графе "Скомпилировать" написать, например:
df -c "%f"
3) В графе "Сборка" написать, например:
df "%f"

Обратите внимание на формат файла. Идем в "Документ/Установить тип файла/Языки программирования/Fortran". Geany поддерживает подсветку синтаксиса двух форматов - F77 и F90. Подсветка синтаксиса автоматически определяется после сохранения файла соответствующего расширения (*.f90 - для F90 и *.for или *.f для F77). В любой момент подсветку синтаксиса файла соответствующего формата можно поменять.
Стоит учесть, что меняя правила компиляции и сборки (см. выше) для какого-то файла, вы меняете правила для всех файлов данного типа (F77 или F90). Таким образом, можно иметь два разных варианта сборки для разных типов фортран файлов.

Вот так! ;)

P.S. Для Windows 8 всё аналогично.





19 комментариев:

  1. Есть один маленький фокус.
    Если до всей описанной выше процедуры установить на компьютер CVF и во время установки оставить все параметры по умолчанию, то в какой-то момент установщик предложит прописать пути автоматически. Соглашаемся, т.е. просто нажимаем "далее". Заканчиваем установку CVF.
    После совершаем операции под номерами 1-6.

    В итоге Geany сможет "подцепить" компилятор CVF!
    Т.е. можно будет свободно пользоваться смешанным синтаксисом (77 + 90 + 95 ,что, вообще говоря, не очень хорошо, но иногда жизненно необходимо).

    Чтобы Geany подцепил компилятор необходимо войти в IDE во вкладки:

    1) Сборка - Установить параметры сборки
    2) В графе "Скомпилировать" написать, например:
    df -c "%f"
    3) В графе "Сборка" написать, например:
    df "%f"

    Вот так! ;)

    ОтветитьУдалить
  2. А если не устанавливать Compaq Visual Fortran каким можно будет пользоваться синтаксисом? 77?

    ОтветитьУдалить
  3. Добрый день, Кирилл!
    Если не устанавливать CVF, то нужно будет писать в синтаксисе "f90".

    ОтветитьУдалить
  4. Уважаемый Автор, а будут ли при такой установке работать подключаемые библиотеки IMSL без дополнительной установки чего-либо? Вы, конечно, написали, что для большинства научных задач подходит (а какая же наука без библиотек IMSL), но я всё же решил переспросить.

    И, кстати, у меня была системная переменная Path. Чтобы всё заработало, оказалось, что нужно и системную изменить и такую же переменную пользователя создать. Иначе не работало. Это вообще нормально?

    Заранее спасибо за ответ.

    ОтветитьУдалить
  5. По поводу системной переменной: да, это нормально.
    По поводу библиотеки IMSL: скорее всего да, если аккуратно прописать пути к библиотеке в переменных среды или непосредственно при компиляции. Как именно это сделать - я лично не пробовал, обходился своими и сторонними подпрограммами. Думаю, что в скором времени разберусь с этим. =)

    ОтветитьУдалить
  6. Проверил: для файла формата F77 (*.for, *.f) в программе прописываем "use numerical_libraries", чтобы подключить библиотеки. А далее вызываем нужные подпрграммы оператором "call".
    Для файла формата F99 (*.f90) IMSL таким образом вызвать не получится...

    ОтветитьУдалить
    Ответы
    1. Спасибо за ответы. Очень благодарен Вам за отличную статью, сейчас без всяких проблем работаю на Фортране из-под 7 винды, не надо никаких виртуальных машин, или ставить что-то на старые машины.

      >Для файла формата F99 (*.f90) IMSL таким образом вызвать не >получится...

      А вот это печально, всегда работал только из-под f90, не знаю, что будет с моей математикой в f77. Но не писать же сложные сплайны вручную. А что в принципе можно сделать, чтоб остаться в f90, но и IMSL использовать, не подскажите?

      Удалить
    2. >Проверил: для файла формата F77 (*.for, *.f) в программе >прописываем "use numerical_libraries", чтобы подключить >библиотеки. А далее вызываем нужные подпрграммы оператором "call".

      То есть все библиотеки IMSL в Geany содержатся, ничего дополнительно изыскивать не надо?

      Удалить
    3. Нет, Geany - это просто графическая оболочка для написания программного кода, редактор с продвинутыми функциями. В Geany библиотек IMSL нет. Они поставляются с CVF (Compaq Visual Fortran).

      Удалить
  7. И ещё, у меня есть Компак Вижуал Фортран для XP. Если я установлю его под свою 7 винду, смогу я подцепить компилятор CFV и пользоваться в Geany библиотеками IMSL из-под f90?

    А то, как я понял, в Geany можно работать только в f90, а значит доступа к IMSL у меня не будет.

    ОтветитьУдалить
    Ответы
    1. Беда с CVF на Window 7 в том, что сама Visual Studio отказывается по каким-то причинам корректно работать.
      На только что установленную Windows 7 у меня CVF какое-то время работал: компилировал, создавал объектные файлы и исполнял их! Но вскоре CVF "слетал": программа выдавала ошибку и закрывалась. Вроде как все проблемы в каких-то динамических библиотеках, которых, видимо, нет Windows 7, или они лежат в отличном от XP месте.
      В итоге Visuaд Studio от CVF не работает на Windows 7.
      Но сам компилятор (DF) и все библиотеки работают! Geany позволяет использовать компилятор и библиотеки, если они есть(а они автоматически ставятся при установке CVF).

      Теперь про f90 и f77.
      Я проверил - и в файлах формата f77 (они же "fixed" format) и в файлах формата f90 (они же "free" format) библиотека IMSL из CVF работают! Они работают, так как используется один и тот же компилятор - df.

      Вчера, когда я проверял работу IMSL, я забыл, что для формата *.f90 я в настройках Geany (Сборка - Установить команды сборки) поставил gfortran, для формата f77 - df.

      Если ты хочешь работать с файлами фортрана обоих форматов ставь следующие настройки для компиляции (Сборка - Установить команды):

      Скомпилировать: df -c "%f"
      Сборка: df "%f"

      Удалить
  8. Братцы! Вы чушь несете. Единственное для чего нужен Visual Studio - это визуальное редактирование ресурсов. Я всегда собирался через nmake и думаю, что это гораздо веселее, чем под средой, тем более, что редактор у среды абсолютно тухлый, а помощи типа Resherper или Delphi у него нет.
    Поэтому редактор может быть любым. Я пользовался Jedit, Uedit и MultyEdit c одинаковым успехом. Кабы не буква "я", так ME - идеален.
    Отладчик в расчетных задачах бессилен. Единственное что требуется - визуальный редактор ресурсов.

    ОтветитьУдалить
  9. Конечно редактор может быть любой!
    Для пользователей windows смена редактора обычно воспринимается болезненно. Чем более новый редактор похож на старый - тем лучше! Geany в одном и том же виде есть и под windows и под linux. Поэтому я рекомендую Geany как простой и надежный редактор. И если вдруг пользователь сменит ненадолго windows на linux (такое бывает), то ему не придется осваивать новый софт.

    ОтветитьУдалить
    Ответы
    1. Приветствую! Подскажите, если возможно, как настроить GEANY для работы с файлами фортран 77 и компилятором MinGW. ОС Win 7 64 максимальная. С фортраном 90 всё получается.Заранее благодарен.
      А. Полохов. NMVGAN@YANDEX.RU

      Удалить
    2. Можно воспользоваться инструкцией II, то есть поставить CVF и пользоваться компилятором df. У него же (CVF) есть и другой компилятор - f77, который говорит сам за себя. Оба отлично справляются с кодом Фортрана 77.
      Вообще говоря есть ещё компилятор g77, но он старый и больше не входит в состав gcc. Вместо него входит gfortran.

      Удалить
  10. Здравствуйте! Убил 3 дня, но Фортран мне не дался. И Маленький Гиви не помог.
    Буду Вам крайне признателен если поможете скомпилировать две маленьких старых программы, выполненных на Фортране для ЭВМ СМ-4.
    0001 REAL K, LAMBDA, NI
    0002 TYPE 2
    0003 2 FORMAT (‘ВВЕДИТЕ Q, HS, DP, D1, D2, SUML, SUMDZE, NI, DELTAE’)
    0004 ACCEPT 3, Q, HS, DP, D1, D2, SUML, SUMDZE, NI, DELTAE
    0005 3 FORMAT (9F10.7)
    0006 PRINT 4
    0007 4 FORMAT (10X, ‘ОПРЕДЕЛЕНИЕ ДИАМЕТРА’//)
    0008 N=0
    0009 D=DP
    0010 7 K=DELTAE/D
    0011 V=4*Q/(3.24*D*D)
    0012 RE=V*D/NI
    0013 IF (RE.GE.4000.) GOTO 5
    0014 IF (RE.GT.2320.) GOTO 6
    0015 LAMBDA=64./RE
    0016 GOTO 8
    0017 6 D=D+DP
    0018 N=N+1
    0019 GOTO 7
    0020 5 LAMBDA=0.11*(((68./RE)+K)**0.25)
    0021 8 IF (DL.EQ.0.) GOTO 15
    0022 B=(D/DL)**4
    0023 GOTO 16
    0024 15 B=1
    0025 16 IF (D2.EQ.0) GOTO 17
    0026 A=(D/D2)
    0027 GOTO 18
    0028 17 A=1
    0029 18 H=(V*V/19.62)*(LAMBDA*SUML/D+SUMDZE+A-B)
    0030 IF (H.GT.HS) GOTO 9
    0031 PRINT 10, Q, HS, D1, D2, D, V, RE, LAMBDA, H, N
    0032 10 FORMAT (10X, ‘ДАНО:Q’, = F8.6, 12X, ‘HS=’, F6, 1, 3X, ‘, ‘D1=’, F5.3, 10X,
    ‘D2=’, F5.3, 10X, ‘ОПРЕДЕЛЕНО:D=’, 15.3, ‘V=’, F6.3, 10X, ‘RE=’, F9.1, 13X,
    ‘LAMBDA=’, F7.5, 2X, ‘H=’, F6.1, ‘N=’, 13)
    0033 STOP
    0034 9 D=D+DP
    0035 N=N+1
    0036 GOTO 7
    0037 END


    0001 REAL K, KL, EK, NK, D, L, HS, QP, QG, QH
    0002 TYPE 1
    0003 1 FORMAT (‘ВВЕДИТЕ KL, EK, D, L, HS, QP, QG, QH’)
    0004 ACCEPT 2, KL, EK, NK, D, L, HS, QP, QG, QH
    0005 2 FORMAT (F13.10, F10.7, 7F10.5)
    0006 S=3.14*D*D/4.
    0007 Q=QP
    0008 3 V=Q/S
    0009 HV=NK*V*V/19.62
    0010 RE=F*D/KL
    0011 IF (RE.LE.2320.) GOTO 5
    0012 K=0.11*SQRT(SQRT(EK/D+68./RE))
    0013 GOTO 6
    0014 5 K=64./RE
    0015 HK=K*L*V*V/(19.62*D)
    0016 HN=HV+HK
    0017 H=HS+HN
    0018 PRINT 7, Q, H, V, RE, K, HV, HK, HN
    0019 7 FORMAT (5X, ‘Q=’, F8.5, 2X, ‘H=’, F7.2, 2X, ‘V=’, F7.3, ‘RE=’, F9.1, 2X, ‘K=’,
    F9.6,2X, ‘HV=’, F8.4, 2X, ‘HK=’, F8.4, 2X, ‘HN=’, F8.4)
    0020 Q=Q+QH
    0021 IF (Q.LE.QG) GOTO 3
    0022 STOP
    0023 END


    Заранее благодарен!
    Мой обратный адрес: ApxunoB-52@Yandex.Ru

    ОтветитьУдалить
    Ответы
    1. В алгоритмах есть неточности. В первой программе DL не определено и не изменяется. Во второй - F также не определено.
      А exe-ники я отослал. Надеюсь, что это вам помогло.

      Удалить
  11. Этот комментарий был удален автором.

    ОтветитьУдалить

Как перевести UV в направление и скорость ветра? How to convert wind UV-components to direction and velocity?

 Всё просто.  def uv2dir(u, v):     '''     Источник:     https://github.com/blaylockbk/Ute_WRF/blob/master/functions/wind_calc...