1

所以有人写了这段代码,它输出一些粒子的 x,y,z 位置。

    if rs.contains_block(file+'.hdf5',"POS ",parttype=1):
        d1 = rs.read_block(file, "POS ",parttype=1,verbose=False)
        blocksize = struct.pack('I', len(d1)*8*3)
        f.write(blocksize)
        for i in range(len(d1)):
            for j in range(3):
                data = struct.pack('d',d1[i][j])
                f.write(data)
        f.write(blocksize)
        print 'Position real', d1, k
    else:
        data = struct.pack('I',0)
        f.write(data)
        f.write(data)

或者基本上:

        for i = 1:Nparticles
             for j = 1:3
                write xyz[i][j]
             end
        end

现在我试图在 F90 中读回这个:

  real*4,   allocatable :: pos(:,:)
  N=sum(Nparticles)
  open (1, file=filename, form='unformatted')
  allocate(pos(1:3,1:N))
  read (1) pos
  close(1)

当我打印前三行时,我得到:

  do i =1,3
      print *, pos(1:3,i)
  end do

  >>   0.00000000       2.61613369      -2.00000000    
       1.88289821      -2.00000000       1.96834707    
       2.00000000       2.61616445       2.00000000 

现在我确定位置范围从 0 到 25,所以到处都得到 -2.0000 是令人担忧的。我的朋友 Python 写出 (f.write()) 有什么我需要告诉 Fortran 在读入期间执行的操作,以便正确输出位置吗?主角?分配修正?我使用了 Python 读入,前 3 个条目得到以下信息:

 >>> pos = rs.read_block("filename","POS ",parttype=1)
 >>> pos(1:3,:)
    array([[ 12.49398994,  21.89432526,   6.23691988],
           [ 12.48858261,  21.89297867,   6.23258686],
           [ 12.48777962,  21.89576149,   6.23423147],

当我在上面阅读 Fortran 时,这不是我得到的。

谢谢。

4

0 回答 0