2014-06-11 63 views
1

我有一個棘手的問題,我不知道錯誤是從哪裏來的。Fortran位置='append'不起作用

我寫出來的數據好幾次在我calcualtions,總是當前數據附加到現有的文件,使用:

OPEN(UFO_FU,FILE=FNAME,STATUS="OLD",POSITION='APPEND',    & 
     FORM='UNFORMATTED',access='STREAM') 

這工作得很好我的電腦,我們的集羣上,但我的同事電腦上,數據不會被追加,但文件被覆蓋。

INQUIRE(UNIT=UFO_FU, POS=I) 
WRITE(*,*) "BLOCK", BN,"POS",I 

所以我們做了一些測試,結果非常混亂:

它工作在我的電腦上都ifort

我剛好開語句後詢問當前文件位置選中此(13.1.1)和gfortran(4.3.4)。

我的同事有相同的編譯器版本,但如果他編譯gfortran代碼不能正確追加,ifort仍然有效。

到目前爲止,它在他的電腦上看起來像一個gfortran配置問題,但在他的電腦上編譯的程序在我的電腦上正常工作,並且在我的電腦上編譯的程序在他的電腦上無法正常工作(再次只有gfortran )。

在我看來,只有gfortran有一個運行時問題,但我無言在哪看。

我們正在使用SUSE Linux的兩個:

Linux版本的3.0.13-0.27默認(geeko @ buildhost)(gcc版本4.3.4 [GCC-4_3-分支修訂152973](的SUSE Linux ))#1 SMP週三02月15日13點33分49秒UTC 2012(d73692b)

的SUSE Linux Enterprise Desktop 11的下(x86_64)

ldd-爲ifort版本:

linux-vdso.so.1 => (0x00007fffdd9ff000) 
libm.so.6 => /lib64/libm.so.6 (0x00007f33af57f000) 
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f33af361000) 
libc.so.6 => /lib64/libc.so.6 (0x00007f33aefe9000) 
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f33aedd3000) 
libdl.so.2 => /lib64/libdl.so.2 (0x00007f33aebce000) 
/lib64/ld-linux-x86-64.so.2 (0x00007f33af848000) 

Version information: 
bin/tascom3d: 
    libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2 
    libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0 
    libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1 
    libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 
/lib64/libm.so.6: 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 
/lib64/libpthread.so.0: 
    ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 
    ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2 
    ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2 
    libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6 
    libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 
/lib64/libc.so.6: 
    ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2 
    ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 
/lib64/libgcc_s.so.1: 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 
/lib64/libdl.so.2: 
    ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2 
    libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 

和gfortran版本:

linux-vdso.so.1 => (0x00007fff4d9ff000) 
libgfortran.so.3 => /usr/lib64/libgfortran.so.3 (0x00007f69375d0000) 
libm.so.6 => /lib64/libm.so.6 (0x00007f6937356000) 
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6937140000) 
libc.so.6 => /lib64/libc.so.6 (0x00007f6936dc8000) 
/lib64/ld-linux-x86-64.so.2 (0x00007f6937905000) 

Version information: 
bin/tascom3d: 
    libgcc_s.so.1 (GCC_4.0.0) => /lib64/libgcc_s.so.1 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 
    libgfortran.so.3 (GFORTRAN_1.0) => /usr/lib64/libgfortran.so.3 
    libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6 
/usr/lib64/libgfortran.so.3: 
    libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6 
    libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 
/lib64/libm.so.6: 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 
/lib64/libgcc_s.so.1: 
    libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 
/lib64/libc.so.6: 
    ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2 
    ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 

我尋找一些類似的問題,但沒能發現任何東西。

我真的很感激你的想法和幫助。

親切的問候,

羅馬

@edit:增加了LDD信息 @ EDIT2:增加了LDD -v信息

+0

你可以在你的可執行文件上運行'ldd'來檢查使用過的共享庫的版本嗎? – Peter

+1

海灣合作委員會4.3.4是從2009年8月。它是一個相當早期的gfortran版本。 gfortran自那以後有很多改進。嘗試升級到更新的版本。 –

+0

@ M.S.B。謝謝,我意識到這一點,並且我之前安裝了4.7版本,但由於我們的系統是由外部維護人員(無根訪問權限)管理的,而且我們真正的計算是使用最近的編譯器版本在羣集上完成的,所以我認爲這不值得。我們只使用本地機器進行測試,到目前爲止我們沒有任何問題。 –

回答

0

作爲一種可能的解決辦法,你可以試試這個:

integer sz 
open(unit,file='..',access='stream') 
inquire(unit,size=sz) 
write(unit,pos=sz) 

假設升級編譯器不是一個好的選擇,無論出於何種原因。