2017-07-08 106 views
0

我試圖編譯一個使用pgf90或pgfortran(可以處理各種源文件,即f90或f77)的文件,這個文件是用fortran 77構造函數編寫的(即具有.f擴展名)。我現在的問題是延續線。pgfortran續行

open(10,file='/home/adaba/original/potentialenergy/vorticity/data/run/fort.10') 

所以這條線清楚地超出了第72列。這是我試過的。我嘗試在新行中使用第6列中的'&'字符將其分解爲兩行並編譯它。它編譯得很好,但是當我運行該程序時,我得到一個錯誤,說沒有找到這樣的文件,因爲它將連續行解釋爲run和fort.10之間的額外空間,並且報告找不到文件。

因此,我將代碼保存在一行中,然後添加-Mextend,它是用於擴展行的pgi特定指令。現在它似乎在一個子例程中稍後添加一些奇怪的字符到另一個文件名的末尾。它確實打開了fort.10,但它沒有在代碼中稍後打開另一個文件,並在該文件的末尾添加了一些奇怪的字符(以二進制形式)。在我的編輯器的Emacs中,在fort.10語句之後,我只能看到紫色(表示某事不對)。

有人可以使用pgi fortran的經驗嗎?

UPDATE

open(10,file='/home/adabas/originalPV/potentialenergy/vorticity/' // & 
&  'data/run/fort.10') 

我得到一個pgf90-S-0034語法錯誤處或附近&(在上線)

的PGF版本17.0.4 64位

+0

你究竟如何將它分成兩行?另外,當添加'-Mextend'時,可能會導致問題的另一個錯誤。 – Ross

回答

1

關閉我的頭頂,我會先嚐試一些事情。

您可以請求編譯器允許fixed format(.f)文件長於72個字符。在PGI中,這是通過-Mextend編譯器標誌完成的。

或者,您應該可以通過將其分成兩行來構造文件名。例如:

open(10,file='/home/adaba/original/' // 
& 'potentialenergy/vorticity/data/run/fort.10') 

其中//是組合字符串的運算符。還有其他方法可以做到這一點 - 例如,您可以首先將字符串定義爲fname

+0

我的第二個解決方案出現語法錯誤.pgf90在上面的&符號後面報告錯誤 – gansub

+0

哎呀,對不起 - 上面一行中的&符號不應該存在於固定格式源文件中。現在怎麼樣? – Ross

+0

這個工程。我仍然必須處理子例程文件打開問題。我仍然在那裏得到二進制字符。但是這樣做了。非常感謝 – gansub

1

擴展在@Ross答案以上: 在自由格式的Fortran標準,還有另外一個選擇:你可以使用STRING延續類似下面的語法:

open(10,file = "/home/adaba/original/& &potentialenergy/vorticity/data/run/fort.10")

這裏只有一個單一的字符串分割並繼續兩行。兩個&符號之間的空白被完全忽略。但是在第一個和第二個&符號之前的任何東西,甚至是空格,都被視爲字符串的一部分。