![]() |
|
|
![]()
|
|
| Aleskert |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.10.2008 Репутация: нет Всего: нет |
Доброго времени суток.
Я прошу у Вас помощи. Дело в том, что не могу разобраться как конвертировать из Fortran в C с помощью программы f2c. Было бы неплохо посмотреть step-by-step. Если вы имеете опыт в работе с этой программой или более-менее разбираетесь, прошу помочь. Если Вам не составит труда: гляньте код программы Суть проги: рассчитывает поток воды в криволинейных областях
|
||||||||
|
|||||||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Насчет f2c ничего не скажу.
Но в данной программе слишком много опечаток (много больше 10) + ошибки форматирования исходника (относительно стандартного фиксированного формата F77) . Кстати, а файл 'LAGEN.DAT' у тебя есть? |
|||
|
||||
| Aleskert |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.10.2008 Репутация: нет Всего: нет |
LAGEN.DAT - файл с исходными данными
LAGEN.OUT - файл с обработанными данными Если Вас не затруднит, залейте сюда код на С и скомпилированный выполняемый файл. Ибо в Фортране и f2c не смыслю ровным счетом ничего. Заранее спасибо! |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Насчет f2c, как уже выше писал, ничего не скажу.
Но, судя по характеру ошибок в листинге, его перепечатывали в далекие времена на машинке, и помимо явных опечаток там могут быть и скрытые недоразумения, например неправильно указанные метки (например 10 и 17). По моему, если знаешь алгоритм, надежнее сразу написать на С/C++ или современном фортране. Это сообщение отредактировал(а) FCM - 26.4.2009, 19:19 |
|||
|
||||
| Aleskert |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.10.2008 Репутация: нет Всего: нет |
В том то и дело, что я в Фортране ничего не смыслю!
Я не могу понять даже что и куда там обращается - только общий смысл улавливаю. А общий смысл мне не надо |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Есть другой путь: собрать из данного фортран-исходника библиотеку и затем вызывать ее из С/С++,
но опять же все упирается в опечатки исходника, надежное устранение которых требует понимания алгоритма. А тестовые значения для LAGEN.DAT и LAGEN.OUT имеются? Это сообщение отредактировал(а) FCM - 26.4.2009, 19:22 |
|||
|
||||
| Aleskert |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.10.2008 Репутация: нет Всего: нет |
LAGEN.OUT
LAGEN.DAT
|
||||
|
|||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Файл LAGEN.DAT действительно такой короткий?
ПРоверь на всякий случай. |
|||
|
||||
| Aleskert |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.10.2008 Репутация: нет Всего: нет |
Да, в этом файле находятся исходные значения переменных, который используются в программе.
Они потом дублируются в файле результатов в 3 и 4 строчке, только уже с объяснениями что какая переменная делает. |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Фортран-программа заработала.
В принципе далее можно попробовать сделать из нее библиотеку и вызывать ее из C++ программы, если конечно не нужно вмешиваться в алгоритм. Это сообщение отредактировал(а) FCM - 30.4.2009, 18:14 |
|||
|
||||
| Aleskert |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.10.2008 Репутация: нет Всего: нет |
Можно код в С++ ?
Или экзешку выложить? |
|||
|
||||
| FCM |
|
||||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
1)Кода в С++ у меня нет. Но выкладываю подправленный вариант фортран-программы (преобразованной также к стандарту Fortran-90), по которому сам можешь сделать С++ аналог (не так это и трудно в данном случае - нужно просто распечать нижеприведенные исходники и постепенно картина станет ясной).
где
Добавлено @ 19:05 2) Другой вариант. Можно вызвать библиотеку, скомпонованную под фортраном, из С++ программ. В данном случае это в первом приближении может выглядеть так.
где процедура LAGEN_F90 и используемые ею оформляется предварительно в проекте типа стат.библиотека под Intel Fortran. Отличие от вышеприведенных исходников будет только в первом листинге
Вывод будет вестись в LAGEN.OUT в текущей рабочей директории для С++ программы. Если речь идет МVC++ или Intel C++(под Windows ), то никаких проблем со статикой не должно быть. В др. случаях возможно потребуется строить динамическую библиотеку. Сама стат. библиотека (в Debug-сборке) здесь Это сообщение отредактировал(а) FCM - 4.5.2009, 09:37 Присоединённый файл ( Кол-во скачиваний: 2 )
LAGEN_F90.lib 103,85 Kb |
||||||||||||||||
|
|||||||||||||||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
ps
по приведенному ранее тобой LAGEN.OUT не совсем понятно почему есть некоторое несовпадение по промежуточным точкам - так и должно быть ? Это сообщение отредактировал(а) FCM - 2.5.2009, 19:44 |
|||
|
||||
| Aleskert |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.10.2008 Репутация: нет Всего: нет |
Огромное спасибо!
Несовпадение может получаться. Задача построена для потока воды в криволинейных областях. То есть могут быть "завихрения" в течении. Но как они представлены в программе - буду выяснять (еще не до конца разобрался в представлении переменных и их обработке). Главное что программа считает все точки более-менее правильно Еще раз спасибо! |
|||
|
||||
| Aleskert |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 18.10.2008 Репутация: нет Всего: нет |
Огромное спасибо!
Несовпадение может получаться. Задача построена для потока воды в криволинейных областях. То есть могут быть "завихрения" в течении. Но как они представлены в программе - буду выяснять (еще не до конца разобрался в представлении переменных и их обработке). Главное что программа считает все точки более-менее правильно Еще раз спасибо! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Fortran | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |