Fortran子程序挂断了OPEN语句



我最近开始编写一个现有的Fortran程序,同时学习该语言。我编写了以下子程序:

subroutine timing(yyyy, mm, dd, var, ntime, time_blocks, 
 *  time_day)
use myglobals
! ---------------------------------------------------------------------
!     Common Variables
! ---------------------------------------------------------------------    
    integer yyyy,       ! year
   *         mm,    ! month
   *         dd,    ! day
   *         ntime  ! nr of blocks for which time was measured
    real time_blocks(ntime),    
   *        time_day    
    character*4 var 
! ---------------------------------------------------------------------
!     Internal Variables
! ---------------------------------------------------------------------   
    integer ios
    integer out_unit=52
        open(unit=out_unit, file=diroutput(1:69)//'timing',
     * err=450, iostat=ios)
    450 print*, "iostat= ", iostat
    print*, "open"
    write(out_unit, format_str) yyyy, mm, dd, var, time_blocks, 
     *   time_day
    return
    end

这个子程序的目的是按照定义的格式(我的例子中没有包括格式定义),将从程序的另一部分获得的输入写入文件。该文件必须在该子例程的第一次调用时创建,然后在每次进一步调用时访问,以便附加新信息。CCD_ 1是在CCD_ 2中定义的字符串。

我的问题是,程序似乎在OPEN语句中挂断了,也就是说,在我终止进程之前,什么都不会发生。我用几个print*,语句运行代码来定位错误,并通过这种方式发现错误必须在OPEN语句中。奇怪的是,这个程序什么都不做,甚至没有跳到错误标签上。

由于我是Fortran的新手,我可能会错过一些显而易见的东西,所以由更有经验的人快速查看可能会有所帮助。我确信diroutput包含一个有效的路径。

我使用的是Linux(CentOS 5.5),我使用"英特尔Fortran编译器11.1"编译了程序。

从(通常)第6列中的连续字符来看,您的代码似乎是以固定形式编写的,尽管包含Fortran 90的功能。如果是固定形式,则语句标签(如450)应位于第1列到第5列中。我不明白为什么这会导致程序挂起而不是崩溃,但我建议你解决这个问题,然后再试一次。

最新更新