Фортран как написать программу

Use saved searches to filter your results more quickly

Cancel Create saved search

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window.

Reload to refresh your session.

Делаем статическую библиотеку на FORTRAN’е, линкуем её к C++–приложению. Подробный пример с компиляторами MSVC (Visual Studio 2015) и ifort.

License

56th/CPP-Calls-FORTRAN-lib

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Getting started with FORTRAN 77

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Alexander Žilyakov Update README.md
72f6d1b Jun 2, 2017

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time

README.md

Смешанное программирование: C++ вызывает FORTRAN

Положим, вам нужно из приложения, написанного на C++ , вызвать подпрограммы, написанные на FORTRAN ’е. Да, такое может легко с вами случиться. Сначала о том, зачем это понадобилось мне. Если вам хочется сразу к делу, пропускайте следующий пункт.

В проекте CATS’ PDEs часто приходится работать с большими разреженными матрицами — матрицами, большинство элементов которых равно нулю и не хранится. Существует, вообще говоря, довольно много 1 форматов хранения для таких матриц.

CSC–формат (Comressed Sparse Column, разреженно–столбцовый) является наиболее гибким и популярным в МКЭ форматом. На нём же и основан не менее популярный стандарт хранения матриц в виде ASCII–текста Harwell–Boeing 2 (да-да, те самые боинги).

Матрицы в HB–формате нынешний софт понимает и любит. Например, та же Mathematica умеет в импорт/экспорт HB–матриц в свой SparseArray, который, кстати, использует CSR–формат (Comressed Sparse Row, разреженно–строчный) андерхуд.

Очевидно 3 , что хороший тулкит вроде CATS’ PDEs, в котором предполагается работа с разреженными матрицами, должен поддерживать i/o стандартных форматов типа Harwell–Boeing, Matrix Market и так далее:

Структура программы на Fortran

  • Ввод. Чтобы тестировать решатели систем на матрицах, полученных из реальных задач моделирования течения жидкостей, акустики, экономики и так далее. Вот ссылка на коллекцию Harwell–Boeing.
  • Вывод. Чтобы с собранными в вашем приложении матрицами мог работать другой софт — например, чтобы тот же MatrixPlot в Математике нарисовать. Конечно, вы можете передать вашу матрицу и в плотном виде. Если она поместится в оперативную память и у вас есть желание подождать 1000 лет.

CATS’ PDEs написан преимущественно на C++11 . Существуют готовые библиотеки ввода/вывода для Harwell–Boeing, написанные на C / C++ :

  • раз, С++ (John Burkardt),
  • два, С (Karin A. Remington).

Однако ввод/вывод делать я решил на FORTRAN ’е и сейчас объясню, наконец, зачем. Так уж вышло, что Harwell–Boeing придумали в далёком 1992-м; если вы посмотрите в [2, с. 9], как он устроен, то довольно быстро поймёте, что формат очень FORTRAN –ориентирован — уже по первому предложению:

Our collection is held in an 80–column, fixed–length format for portability…

В отличие от C / C++ , FORTRAN очень богат на форматы ввода/вывода. Поэтому чтобы написать i/o на C / C++ … придётся писать свой FORTRAN –like форматный i/o! Что, кстати, обе вышеуказанные библиотеки и делают: первая — 4 226 строк, вторая — 1 604. И это против элегантных 129, написанных на FORTRAN ’е

Читайте также:
Программа сдача ПДД как в ГИБДД

Впрочем, свой FORTRAN на C / C++ — это ещё половина беды. Например, вот эту матрицу первое решение вообще не прочитает, потому что поддержку дескриптора P автор не сделал (упс, не дописали свой FORTRAN ).

А ещё в этом же решении мной был найден баг (смотрите 1232-ю строчку здесь или просто поищите “Alexander” — зачем мне врать). Короче, сами понимаете…

Надеюсь, на вопрос зачем я ответил.

С чем будем работать

  • платформа: Windows 10 x64,
  • компилятор C++ : MSVC (Visual Studio 2015),
  • компилятор FORTRAN : ifort.

Вероятно, Visual Studio* у вас уже есть. Intel Fortran суть часть Intel Parallel Studio, купить её можно здесь. Если вы студент, ресёрчер и т.п., можете забрать бесплатно — достаточно иметь вузовскую почту.

Скорее всего вам не захочется устанавливать все модули Intel Parallel Studio — оставьте чекбоксы только на ifort. Крайне советую установить их расширение для работы с FORTRAN ’ом для Visual Studio* (нажать чекбокс во время установки). Дальше я объясню, почему это удобно.

В Intel Parallel Studio нет GUI. Неочевидная вещь: если вы забыли установить какой-то модуль (или установили лишний), можно это исправить… через удаление. После запуска деинстоллера выбираете опцию “Modify” и вперёд.

Вызывать будем подпрограммы FORTRAN ’а из C++ –приложения. Точка входа в sln/C++ Sources/user.cpp , подпрограммы — в sln/FORTRAN Static Lib/add.f90 и ″/square.f90 .

Есть два пути: создать статическую (в Windows обычно имеет расширение .lib) или динамическую (shared) библиотеку (″ .dll). По своей природе статическая библиотека суть объектный файл (.o, .obj) и подключается к приложению во время линковки, динамическая — исполняемый файл (.exe), подключается в рантайме.

Для наших целей достаточно написать (возможно, много) подпрограмм на FORTRAN ’е, скормить их ifort’рану и собрать статическую библиотеку, которую затем успешно линковать к C++ . На времени компиляции основного приложения это не отразится и все будут счастливы.

Игрушечный пример: компиляция из терминала

Запускаем терминал ifort: [Start] — All Apps — Intel Parallel Studio* — Compiler* . Соберём и прилинкуем статическую библиотеку.

  1. Получаем объектные файлы: > ifort /c add.f90 square.f90
  2. Собираем библиотеку: > lib /out:f.lib add.obj square.obj
  3. Компилируем приложение с MSVC и запускаем: > cl /EHsc /Ox user.cpp f.lib > user.exe

Терминал ifort

Ту же штуку вне среды ifort у вас так просто провернуть не получится, потому что MSVC понятия не имеет, где искать FORTRAN ’онские библиотеки (типа ifconsol.lib и т.д., как предупреждает документация):

Терминал MSVC

Проблему можно решить, прилинковав вручную недостающие библиотеки. Дефолтно искать их стоит где-то в C:Program Files*IntelSWToolscompilers_and_libraries*windowscompilerlib .

Легко догадаться, что то же веселье вас ждёт и при работе из Visual Studio* (а бог не зря вам её послал — едва ли вы будете компилировать и дебажить большой проект вручную из терминала). Ну и ещё добавится возня с разными платформами — Win32 / x64, разными конфигурациями — Release / Debug и конфликтами C Run–Time Library — добавленные вручную библиотеки могут быть скомпилированы с разными ключами CRT.

Чтобы сего веселья избежать, удобно использовать интеловское расширение для Visual Studio*, которое в предыдущем пункте я советовал установить.

Положим, у нас есть в решении два проекта: пустой проект Visual C++ для user.cpp (C++ Sources в этом репозитории) и статическая библиотека Visual Fortran для add.f90 и square.f90 (FORTRAN Static Lib ″).

Второй создать очень просто (я предполагаю, что расширение установлено) — File — New Project — Intel(R) Visual Fortran — Library — Static Library .

Головной модуль расположен в C++ Sources, поэтому необходимо, чтобы компилировался именно этот проект: Right Click — Set as SrartUp Project .

Для настройки (почти) достаточно прочитать эту и эту странички документации и посмотреть примеры проектов, дефолтно расположенных примерно в C:Program Files*IntelSWToolssamples*encompiler_fpsxeMixedLanguage . Однако имеют место небольшие опечатки и недосказанности, поэтому я лучше здесь об этом напишу.

По какой-то причине Visual Fortran–проекты не переключаются на x64–платформу автоматически (естественно, если вы хотите делать 64-битные приложения, вы скачали эту версию ifort). Чтобы это исправить, нажимаем на селектбокс платформ Win32 / x64: Configuration Manager… — Platform — (напротив “FORTRAN Static Lib”) — x64 — Copy settings from: .

Теперь попробуйте билдить FORTRAN Static Lib, переключая платформы. Если всё верно, в режиме x64 в окошке с логами вы заметите что-то вроде Compiling with Intel(R) Visual Fortran Compiler* [Intel(R) 64]. , а в режиме Win32 — Compiling with Intel(R) Visual Fortran Compiler* [IA-32]. .

Читайте также:
Какие программы нужны для фотопечати

Осталось научить C++ Sources искать FORTRAN ’онские библиотеки (см. предыдущий пункт) в нужных местах. Настройка выполняется один раз для всех Visual C++–проектов.

Кликаем View — Other Windows — Property Manager — “C++ Sources” — Debug | Win32 — Microsoft.Cpp.Win32.user . Для настройки x64 выбираем ″ — Debug | x64 — ″ соответственно (Release–конфигурацию настраивать вручную не придётся).

Далее идём в VC++ Directories . В Include Directories добавляем $(IFORT_COMPILER[VERSION])compilerinclude (юху, Intel и макросы сделали для пути!). Вместо [VERSION] поставьте версию, у меня на момент написания стоит 16. Проверьте, что в Evaluated value: стоит что-то вменяемое типа C:Program Files (x86)IntelSWToolscompilers_and_libraries_2016.3.207windowscompilerinclude — скопируйте в проводник и откройте эту папку.

В Library Directories добавляем $(IFORT_COMPILER[VERSION])compilerlibia32 и $(IFORT_COMPILER[VERSION])compilerlibintel64 для Win32 и x64 соответственно.

Сбилдите FORTRAN Static Lib–проект и добавьте FORTRAN Static Lib.lib в C++ Sources (я предпочитаю вручную, но можно и в Project Properties подключить). Готово, можно компилировать.

Удобно, что исходники теперь аккуратно расфасованы по разным проектам и код можно редактировать в любимой IDE. Более того, дебаг работает привычным образом:

  1. Yousef Saad, SPARSKIT: A Basic Toolkit for Sparse Matrix Computations↩
  2. Iain Duff, Roger Grimes, and John Lewis, User’s Guide for the Harwell–Boeing Sparse Matrix Collection↩
  3. Почему-то в университетских курсах для инженеров вообще не рассказывают о том, что стандартные форматы для хранения матриц уже придумали. В России это как-то не принято (по крайней мере, у нас в НГТУ) — быть может, из-за не любви к истории (в одном только названии «боинг» столько романтики!). В иностранных курсах такое я встречал. Как следствие, студенты пишут свои велосипеды с нулём переносимости. Но вас я от этого уберёг — добавьте Matrix Market в закладки и живите спокойно. ↩

About

Делаем статическую библиотеку на FORTRAN’е, линкуем её к C++–приложению. Подробный пример с компиляторами MSVC (Visual Studio 2015) и ifort.

Источник: github.com

ЗАДАЧИ ДЛЯ ПРОГРАММИРОВАНИЯ

Способ записи программ на Фортране изначально была ориентирован на ввод данных с перфокарт (Рис. 5.1), содержащих в каждой строке 80 позиций для перфорирования. При этом 72 позиции использовалось собственно для записи программы и комментариев, а позиции с 73 по 80 как служебные, например, для управления обработкой перфокарт.

unix-workdir

Рис. 5.1. Перфокарта с разметкой колонок для Фортрана.

Формат записи текстов программ на Фортране сохранился и при переходе на текстовые и графические терминалы (Пример 1.1). Современные терминалы и текстовые редакторы, продолжают поддерживать текстовый режим отображения 80-ти символов в строке, обеспечивая программно-аппаратную совместимость вычислительной техники различных стандартов.

Пример 1.1. Простейшая программа в фиксированном формате

123456789^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^. 72^^^^^80 ^^^^^^program HELLO ^^^^^^print*, «Hello, World» ^^^^^^end

Запись программ в виде строк ограниченной длины связана именно с режимами отображения символьной информации текстовыми терминалами.

Такой подход гарантирует, что программа на Фортране может быть написана с использованием самого примитивного текстового редактора или без него – важно лишь наличие двух символов: «конец строки» (или «перевод каретки»), а также «конец файла», которые генерируются клавиатурами любых модификаций. Так символ «конец строки» генерируется нажатием клавиши ввода, например, «Enter». В текстовых редакторах этот символ, как правило, не виден, но его ввод переводит текстовый курсор на следующую строчку. Символ конца файла, как правило, генерируется сочетанием клавиш Ctrl+Z (например, в UNIX).

Формат записи программ, ориентированный на 72-х символьное отображение текста, был единственным вплоть до стандарта Фортран 90, и поэтому не имел никакого названия. В стандарте Фортран 90 и последующих, он получил название фиксированный формат, поскольку появился новый свободный формат, ориентированный на 132-х символьные текстовые строки (Пример 1.2), что связано с появлением соответствующих стандартов отображения символьной информации текстовыми терминалами (режим отображения текстовых терминалов «132 символа в строке»).

Пример 1.2. Простейшая программа в свободном формате

123456789^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^132 program HELLO print*, «Hello, World» end

Фиксированный формат записи программ поддерживается всеми современными компиляторами для обеспечения совместимости со стандартом FORTRAN 77 (Стандарты Fortran 90/95 декларируют FORTRAN 77 как свое неотъемлемое подмножество).

Используемый в данном практикуме компилятор Gfortran по умолчанию обрабатывает исходные файлы, имеющие расширение «f95», как тексты программ в свободном формате, а файлы с расширением «for» как программы в фиксированном формате.

При написании программы в фиксированном формате нужно обращать внимание, каким образом используемый текстовый редактор нумерует символьные позиции строки. Например, редактор mcedit (утилита файлового менеджера UNIX MidNight Cjmmander) нумерует символьные позиции строки начиная с нуля, вследствие чего 6-я символьная позиция строки (по нумерации редактора) на самом деле оказывается 7-й позицией.

Читайте также:
Программа которая работает в режиме диалога с пользователем

Источник: www.accel.ru

Основы и особенности Fortran

Fortran (от англ. Formula Translator – «переводчик формул») – это кроссплатформенный алгоритмический язык программирования, разработанный на раннем этапе развития вычислительной техники для решения научных и инженерных задач.

С течением времени, в процессе использования Fortran, к этому языку постепенно добавилось огромное количество готовых библиотек и кодов программ, позволяющих эффективно находить ответы на многие задачи, в частности, из области физико-математических наук, среди которых решение уравнений математической физики, решение интегральных и дифференциальных уравнений, а также многих вопросов из линейной алгебры (в особенности, задач, связанных с матрицами) и т.д. Кроме этого, Fortran поддерживает проведение параллельных вычислений на высокопроизводительных кластерах.

За время существования Fortran, с момента его создания фирмой IBM в середине 1950-х гг., было принято несколько стандартов этого языка. Все они полностью совместимы от более ранних к более поздним. К ним относятся Fortran 66, Fortran 77 (наиболее известная версия), Fortran 90 (возникший в связи с возрастанием мощности ЭВМ и появлением различных компьютерных платформ).

Далее продолжали создаваться очередные версии Fortran – в 1995 г. (для персональных компьютеров с операционными системами Windows 95 и Windows NT), в 2003 г. и в 2008 г., поддержка которых осуществляется нынешними компиляторами.

Итак, язык программирования Fortran в своём длительном развитии постоянно совершенствовался. В последних версиях проверенного временем Фортрана были включены возможности для осуществления объектно-ориентированного подхода при написании кода, а также поддержка современного стиля программирования. Вдобавок к этому, The Portland Group выпустила специальный компилятор PGI CUDA Fortran Compiler, который обеспечивает возможность проводить высокопараллельные расчёты на видеокартах.

«Основы и особенности Fortran»
Готовые курсовые работы и рефераты
Решение учебных вопросов в 2 клика
Помощь в написании учебной работы
Замечание 1

В научной среде язык Fortran зачастую оказывается до сих пор востребованным. Так, большинство важных моделей, например, из области физики атмосферы (в том числе и для проведения расчётов, позволяющих составить прогноз погоды), создаются именно на Фортране.

Для написания кода программ на языке Fortran потребуется любой текстовый редактор. Чтобы воспользоваться подсветкой синтаксиса, можно выбирать, например, Notepad++ (поддерживает синтаксис только 77 стандарта) или SublimeText. Для компиляции программ удобно использовать свободный GNU Fotran.

Особенности Fortran, его преимущества и недостатки

Фортран занимает особое место среди языков программирования. Являясь первым компилируемым языком программирования высокого уровня для решения научно-технических задач, он до сих пор продолжает развиваться, оказавшись более удачным, чем некоторые из более поздних языков программирования. При кажущейся в настоящее время невостребованности Фортрана, данный язык программирования обладает целым рядом преимуществ.

Достоинства языка Фортран:

  • Достаточно простой и удобный в обучении язык с понятным синтаксисом и богатой историей, который подходит для первого знакомства с программированием.
  • После изучения основ языка Фортран можно довольно легко переучиться на любой другой язык программирования.
  • Имеет бесплатный набор средств, позволяя не задумываться над лицензиями.
  • Широко распространён по всему миру, отличаясь наличием всевозможных библиотек и существованием огромных фондов прикладных программ, которые уже были накоплены ранее.
  • Является стандартизированным и кроссплатформенным языком программирования, в котором каждая последующая версия совместима с предыдущими.
  • Снабжён эффективными трансляторами для различных типов ЭВМ.
  • Практически на любом суперкомпьютере установлен фортрановский компилятор, что создаёт возможность проводить параллельные вычисления в сложных расчётах.
  • Позволяет создавать оптимальные и эффективные программные коды, что обеспечивало его незаменимость во времена ЭВМ с невысокой производительностью.
  • Полезен для студентов технических и, в особенности, физико-математических специальностей.
  • Актуален и востребован в настоящее время среди пользователей, решающих различные научно-технические задачи, связанные с численным моделированием и сложными математическими расчётами.

Тем не менее, на протяжении всего своего существования Fortran, будучи очень полезным и надёжным инструментом для решения довольно трудных задач, не отличался особыми изысками в области технологии программирования.

Так, к недостаткам языка Fortran относятся:

  • Жёсткая структура формата программного кода. Так, в стандарте FORTRAN 77 существовало ограничение на длину строки, и было необходимо делать отступ в её начале. Это создавало неудобства в далёкие времена перфокарт, и тем более – при работе с дисплеем на ПК. Поэтому в версии Fortran 90 эти правила были смягчены.
  • Примитивный набор операторов, предназначенных для управления структурой программы (так, без оператора GOTO написать программу было практически невозможно).
  • Слабые средства для описания данных.

Итак, реализация «свободной формы» исходного кода программы в более новых стандартах Fortran была просто необходима для того, чтобы его можно было причислить к современным языкам программирования.

Источник: spravochnick.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru