Fortran二进制输出大于预期

时间:2017-05-01 01:05:45

标签: python io fortran

我正在以NxMxL矩阵的二进制格式编写输出Fortran数据,如下所示

open(94, file = 'mean_flow_sp.dat', status = 'replace', action = 'write', form = 'unformatted')
  do k = 0,L-1
    do j = 0,M-1
      do i = 0,N-1
        write(94) u(i,j,k), v(i,j,k), w(i,j,k)
      enddo
    enddo
  enddo
close(94)

其中u, v, w是分配为例如单个精度值的单精度值。 u(0:N-1,0:M-1,0:L-1)。然后我用Python读取输出文件,如下所示

f = open('mean_flow_sp.dat', 'rb')
data = np.fromfile(file=f, dtype=np.single).reshape(N,M,L)
f.close()

我注意到的第一个奇怪的事情是输出的Fortran文件长度为10,066,329,600字节(这是使用L = 640,M = 512,N = 1536)。所以问题是为什么这个文件不是1536 * 512 * 640 * 3(变量)* 4(字节)= 6,039,797,760字节长?

显然,Python脚本在尝试重新整形读取数据时会抛出错误,因为它的大小不是NxLxM x3(单精度)。

为什么输出文件太大了?

1 个答案:

答案 0 :(得分:0)

好的,所以我才意识到,就像发布here一样,“Fortran编译器通常在记录的开头和结尾写入记录的长度。”,那么输出文件的大小就会检出