2017-01-16 2 views
-3

Я пытался решить некоторые ODE и искать код fortran , такой как ODEPACK, но я не смог найти fortran 90 версии. Есть ли какой-либо ode-solver-код, например OPEPACK в fortran 90?Есть ли какой-либо ode-solver-код, например OPEPACK в fortran 90?

+2

Какие поиски вы сделали, которые принесли плохие результаты? Мы не здесь, чтобы предложить инструмент. – Ross

ответ

2

Вы можете назвать версию ODEPACK от Fortran 77 от Fortran 90. Fortran - один из самых отстающих в программировании языков программирования. Они не хотели аннулировать весь старый код. Использование Fortran 90 для вашего основного кода не исключает использования более старых библиотек, таких как ODEPACK.

+0

Fortran действительно известен своей обратной совместимостью, и ничто не мешает JuYongLee использовать код ODEPACK из Fortran 77 в программе Fortran 90 (в зависимости от компилятора ему может потребоваться добавить флаг, указывающий, что код устаревших разрешен). Если я хорошо понимаю, JuYongLee ищет «простой в использовании» ODE-решатель. – Pap

+0

спасибо, что у вас есть хороший день! – JuYongLee

2

Что я делаю, это реализовать подпрограмму Fortran 90/95, которая упрощает использование устаревшего кода, так что моя основная программа не имеет прямого доступа к устаревшему коду вообще. Нет никакой реальной потребности в повторной реализации ODEPACK в Fortran 90. Нет необходимости изобретать колесо, особенно если это «колесо» - это ODEPACK, который просто отлично работает - лучший решатель ODE, который я когда-либо видел.

Некоторое время назад я применил DLSODAR_F95, который вы можете попробовать. Это фактически модуль Fortran 95, который упрощает использование самого мощного (и сложного) ODEPACK-решения, а именно DLSODAR. Модуль предоставляет общедоступную подпрограмму, ODE_DLSODAR, которую вы можете использовать вместо оригинальной подпрограммы DLSODAR. ODE_DLSODAR намного проще в использовании, обеспечивая ту же функциональность.

Для оригинального кода Fortran 77 требуется множество аргументов, которые необходимо передать, и большинство из них действительно не нужно изменять в зависимости от решений ODE, которые необходимо решить, или необходимые изменения являются тривиальными. ODE_DLSODAR настроит все эти аргументы и вызовет DLSODAR внутренне, чтобы решить проблему. Вы по-прежнему имеете полный контроль над DLSODAR, передавая необязательные аргументы в ODE_DLSODAR, если необходимо, но обычно вам просто нужно позвонить ODE_DLSODAR с очень небольшим количеством аргументов, и модуль позаботится об остальном.

Пакет в ссылке также содержит некоторые примеры использования DLSODAR_F95. Если вам нужны другие решатели ODEPACK вместо DLSODAR, я считаю, что вы должны реализовать модуль, похожий на DLSODAR_F95, и все должно быть в порядке.

+0

спасибо, что у вас есть хороший день! – JuYongLee