Я пытался решить некоторые ODE и искать код fortran , такой как ODEPACK, но я не смог найти fortran 90 версии. Есть ли какой-либо ode-solver-код, например OPEPACK в fortran 90?Есть ли какой-либо ode-solver-код, например OPEPACK в fortran 90?
ответ
Вы можете назвать версию ODEPACK от Fortran 77 от Fortran 90. Fortran - один из самых отстающих в программировании языков программирования. Они не хотели аннулировать весь старый код. Использование Fortran 90 для вашего основного кода не исключает использования более старых библиотек, таких как ODEPACK.
Fortran действительно известен своей обратной совместимостью, и ничто не мешает JuYongLee использовать код ODEPACK из Fortran 77 в программе Fortran 90 (в зависимости от компилятора ему может потребоваться добавить флаг, указывающий, что код устаревших разрешен). Если я хорошо понимаю, JuYongLee ищет «простой в использовании» ODE-решатель. – Pap
спасибо, что у вас есть хороший день! – JuYongLee
Что я делаю, это реализовать подпрограмму 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, и все должно быть в порядке.
спасибо, что у вас есть хороший день! – JuYongLee
Какие поиски вы сделали, которые принесли плохие результаты? Мы не здесь, чтобы предложить инструмент. – Ross