lefang的个人博客分享 http://blog.sciencenet.cn/u/lefang 湍流,计算流体力学

博文

[Fortran]用Unformatted格式生成的超大文件的另类通用读法

已有 8192 次阅读 2010-10-1 16:40 |个人分类:GNU Linux|系统分类:科研笔记| Fortran

有一个问题困扰我许多年了:同样是Fortran语言用Unformatted格式生成的数据文件,在32位和64位机器上大小不同。关于这一问题,在这里描述道:
Update (Jan 2008): It would appear that on 64 bit machines the 2 header elements are each written as 4 bytes instead of 2 bytes each.
但也没有给出解决方案。

终于我想到一个另类做法,可以通用地读取这样的文件。

假设原来的文件是这样生成的:
real*8 u_tmp(k1:kmax,k1:kmax,0:n/16-1)
open(10,file=filename,form='unformatted')
write(10)(((u_tmp(i,j,k),i=k1,k2),j=k1,k2),k=0,n/16-1)
close(10)

如果原来文件是在64位机上生成的,那么不需要做特殊处理。否则,假设生成的文件是u.dat,则另外新建一个4字节的文件,比如叫tmp。执行
cat z u.dat > u_new.dat
将4个字节插到u.dat的文件头,使得新文件的偏移量和原文件相同。

接着,用下面的程序读取      

       open(10,file=dat(ifn),access='direct', recl=8)

        do k = 0, n/16-1
        do j = k1, k2
        do i = k1, k2
        read(10, rec = k*n*n+(j-k1)*n+i-k1+2)
     &    u_tmp(i,j,k)
        enddo
        enddo
        enddo

这仅仅是针对real*8的读法,但其他格式的做法也类似

https://wap.sciencenet.cn/blog-423882-368829.html

上一篇:自动制作工作截屏动画
下一篇:bash_completion自动补全目录的问题
收藏 IP: .*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-29 13:49

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部