在Fortran子程序中读取许多文件

时间:2016-08-16 23:29:52

标签: fortran

我有一个Fortran子例程,在主程序中调用了几次(我无法访问)。在我的子程序中,我希望根据输入参数在每次迭代中从几个(~10 ^ 4)个文件中的一个读取数据。每个文件都有一行数据;我的数据格式如下:

  0.97014199999999995       0.24253600000000000        0.0000000000000000    

我正在使用以下代码行来打开和阅读文件:

      program test_read
      implicit none
      integer  :: i, iopen_status, iread_status
      real :: gb
      CHARACTER(len=25) :: filename
      CHARACTER(*), PARAMETER :: fileplace =
     & "/home/ajax/hexmesh_readn/G3/"
      dimension gb(3)

      i = 5
      WRITE(filename,'(a,I0,a)')'GBn_',i,'.txt'
      open(unit=15,
     & file=fileplace//filename,IOSTAT=iopen_status)
      read (15,*,IOSTAT=iread_status) gb
      print *,"gb",gb(1),gb(2),gb(3)
      close(15)
      end program test_read
  • 在主程序中,我是一个变量,但我有一个文件,表示i的所有可能值。
  • 现在,当我在本地计算机上运行时,此代码运行良好。但是,当我将它与主程序一起提交时,它表现得有些奇怪。具体来说,它会读取一些文件,但不会读取其他文件。
  • 当我打开IOSTAT进行打开和读取时,我看到所有文件的打开IOSTAT为0,而对于某些文件,读命令的0为0,有些为-1,其他为29!我查看了错误代码29的含义,并了解到它可能表明该文件未在路径中找到。但文件绝对是存在的。
  • 另外,我看不到它无法读取的文件有什么不同。事实上,我甚至看到同一个文件给出IOSTAT值为0和29!
  • 需要注意的一点是,我在几个核心上运行主程序。这可能与错误有关吗?

1 个答案:

答案 0 :(得分:1)

您是否同时运行同一程序的多个实例?在某些操作系统上,不同的程序无法同时打开同一个文件。指定您希望只读访问可能允许多个程序访问。在Fortran公开声明中:action='read'

如果您正在运行多线程程序,那么不同的线程可能在不同的文件上同时执行IO ...每个线程应使用不同的单元号以避免冲突。