2017-01-16 42 views

回答

2

您可以從Fortran 90中調用Fortran 77的ODEPACK版本。Fortran是其中最向後兼容的編程語言之一。他們不想讓所有優秀的舊代碼無效。將Fortran 90用於主代碼並不排除使用舊的庫,如ODEPACK。

+0

Fortran的向後兼容性確實臭名昭着,沒有什麼能阻止JuYongLee在Fortran 90程序中使用Fortran 77的ODEPACK代碼(取決於編譯器,他可能需要添加一個指示允許遺留代碼的標誌)。如果我理解的很好,JuYongLee正在尋找一種「易於使用」的ODE求解器。 – Pap

+0

非常感謝你有一個愉快的一天! – JuYongLee

2

我所做的是實現一個Fortran 90/95子例程,該子例程簡化了遺留代碼的使用,因此我的主程序根本無法直接訪問遺留代碼。在Fortran 90中沒有必要重新實現ODEPACK。沒有必要重新發明輪子,特別是如果「輪子」是ODEPACK,這很好用 - 我見過的最好的ODE解算器。

前段時間,我實施了DLSODAR_F95,您可能想嘗試。它實際上是一個Fortran 95模塊,它簡化了ODEPACK最強大(和複雜)的ODE解算器(即DLSODAR)的使用。該模塊提供了一個公共子程序ODE_DLSODAR,您可以使用該子程序代替原始的DLSODAR子程序。 ODE_DLSODAR更容易使用,提供相同的功能。

最初的Fortran 77代碼需要傳遞很多參數,並且大多數參數並不需要根據需要解決的常微分方式進行更改,或者所需的更改很簡單。 ODE_DLSODAR將設置所有這些參數並在內部調用DLSODAR來解決問題。如果需要,您仍然可以通過在ODE_DLSODAR中傳遞可選參數來完全控制DLSODAR,但通常您只需使用很少的參數就可以調用ODE_DLSODAR,模塊將負責處理其餘部分。

鏈接中的軟件包還包含有關如何使用DLSODAR_F95的一些示例。如果你需要其他ODEPACK的解算器而不是DLSODAR,我相信你應該實現一個類似於DLSODAR_F95的模塊,你應該沒問題。

+0

非常感謝你有一個愉快的一天! – JuYongLee