我一直在尝试解决一些ODE并寻找fortran代码 比如ODEPACK,但我找不到fortran 90版本。 在fortran 90中是否有任何ode求解器代码,例如OPEPACK?
答案 0 :(得分:2)
您可以从Fortran 90调用Fortran 77版本的ODEPACK.Fortran是最兼容向后兼容的编程语言之一。他们不想让所有好的旧代码无效。将Fortran 90用作主代码并不排除使用ODEPACK等旧库。
答案 1 :(得分:2)
我所做的是实现一个Fortran 90/95子程序,它简化了遗留代码的使用,因此我的主程序根本无法直接访问遗留代码。在Fortran 90中没有真正需要重新实现ODEPACK。没有必要重新发明轮子,特别是如果那个“轮子”是ODEPACK,它只是工作得很好 - 我见过的最好的ODE求解器。
前段时间,我已经实施了DLSODAR_F95,您可能想尝试一下。它实际上是一个Fortran 95模块,它简化了ODEPACK最强大(和复杂)ODE求解器的使用,即DLSODAR。该模块提供了一个公共子例程ODE_DLSODAR
,您可以使用它来代替原始的DLSODAR
子例程。 ODE_DLSODAR
更容易使用,提供相同的功能。
原始的Fortran 77代码需要传递大量参数,并且大多数参数不需要根据要解决的ODE进行更改,或者所需的更改是微不足道的。 ODE_DLSODAR
将设置所有这些参数并在内部调用DLSODAR
来解决问题。如果需要,您仍然可以通过在DLSODAR
中传递可选参数来完全控制ODE_DLSODAR
,但通常只需要用很少的参数调用ODE_DLSODAR
,模块就会处理其余部分。
链接中的包还包含有关如何使用DLSODAR_F95的一些示例。如果您需要其他ODEPACK解算器而不是DLSODAR,我相信您应该实现类似于DLSODAR_F95的模块,您应该没问题。