2011-08-27 56 views
1

我正在使用f2c轉換Fortran文件。該文件包含MODULE的定義,我無法將其轉換。該錯誤是錯誤線machine.f的1:無法歸類的語句(開始「modulemach」)問題轉換Fortran文件包含MODULE

該文件粘貼下面:

MODULE MACHINE 
IMPLICIT NONE 
SAVE 

! Machine dependant constants 
integer, parameter :: kind_io4 = 4, kind_io8 = 8 , kind_ior = 8 
&,     kind_evod = 8, kind_dbl_prec = 8 
&,     kind_rad = selected_real_kind(13,60) !the '60' maps to 64-bit real 
&,     kind_phys = selected_real_kind(13,60) ! the '60' maps to 64-bit real 
&,     kind_REAL = 8       ! used in cmp_comm 
&,     kind_INTEGER = 4      ! -,,- 
real(kind=kind_evod), parameter :: mprec = 1.e-12 ! machine precision to restrict dep 
END MODULE MACHINE 

任何幫助將不勝感激!

感謝

+3

你爲什麼要翻譯看起來不錯的現代Fortran代碼? – Rook

+1

由於它是Fortran> = 90,所以可能有另一種方法可行。如果您的目標是使代碼與C或C兼容語言一起使用,那麼您可以使用Fortran ISO C綁定與Fortran做到這一點。 –

回答

5

我用F2C只有幾次,並沒有太多的經驗,但不是它轉換的Fortran 77代碼ç的工具嗎?

模塊是在Fortran 90中引入的Fortran特性,它們不是Fortran 77的一部分(以及便攜式精度,例如KIND和其他一些東西),我不知道C是否具有模擬那些功能。有人肯定會澄清我的。

+2

是的,確切的; f2c僅支持F77。我想模擬變量的一個粗略模擬將是C中的文件範圍變量。 – janneb

+0

感謝您的答覆。其實,我有一個大型的FORTRAN代碼,我希望加速。我決定採用的路徑是我將使用f2c將FORTRAN轉換爲C an,然後使用CUDA FORTRAN將計算密集型部分移植到GPU。 NOW,我正面臨這個MODULE問題。請建議如何處理FORTRAN 90代碼。如何將其轉換爲C.以預期的方式感謝您。 – sohan

+2

@sohan - (我很確定其他人會支持我),但像這樣的翻譯可能最終不值得。現代Fortran代碼(如上面的代碼)已經非常快。你將遇到的微觀優化可能最終會讓你獲得更小的收益,而不是你必須處理的翻譯問題(例如,KIND,完全重組是另一個問題)。 C沒有模塊的直接類比(我知道)。最後,我確定這是一個錯字,但是在第一句中,「將它移植到C然後使用CUDA FORTRAN進行密集部分」? – Rook