我最近开始研究现有的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
这个子程序的目的是按照定义的格式(从我的例子中不包括格式定义)将它从程序的另一部分获得的输入写入文件。必须在第一次调用此子例程时创建该文件,然后在每次进一步调用时访问该文件以附加新信息。 diroutput
是myglobals
中定义的字符串。
我的问题是该程序似乎挂在OPEN
语句中,即在我终止该进程之前没有任何反应。我使用几个print*,
语句运行代码来查找错误,并发现错误必须在OPEN
语句中。看起来很奇怪,程序什么也不做,甚至没有跳转到错误标签。
由于我是Fortran的新手,我可能会遗漏一些相当明显的东西,所以有经验的人快速浏览可能有所帮助。我确定diroutput
包含有效路径。
我正在使用Linux(CentOS 5.5),我用英特尔Fortran编译器11.1编译了我的程序。
答案 0 :(得分:0)
您的代码似乎从(通常)第6列中的延续字符开始,尽管包含Fortran 90的功能,但仍以固定格式编写。如果它是固定格式,则语句标签,例如450
应该在第1列到第5列中。我不会立即看到为什么会导致程序挂起而不是崩溃,但我建议您解决此问题并重试。