Fortran position ='append'不起作用

时间:2014-06-11 08:12:03

标签: linux fortran append gfortran intel-fortran

我有一个棘手的问题,我不知道错误来自哪里。

我在计算过程中偶尔写出数据,总是将当前数据附加到现有文件中,使用:

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

这在我的计算机和CLUSTER上工作得很好,但是在我同事的计算机上,数据没有被追加,但文件被覆盖了。

我通过在open语句之后查询当前文件位置来检查这个:

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-default(geeko @ buildhost)(gcc版本4.3.4 [gcc-4_3-branch revision 152973](SUSE Linux))#1 SMP Wed Feb 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 info

1 个答案:

答案 0 :(得分:0)

作为一种可能的工作,你可以试试这个:

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

假设无论出于何种原因升级编译器都不是一个好选择。