所以有人写了这段代码,它输出一些粒子的 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 时,这不是我得到的。
谢谢。