我最近开始编写一个现有的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列中。我不明白为什么这会导致程序挂起而不是崩溃,但我建议你解决这个问题,然后再试一次。