Fortran Coder

标题: 关于Fortran 读取IBM格式的segy,读取结果与Segy分析工具不一... [打印本页]

作者: 紫雪封尘    时间: 2020-12-10 16:08
标题: 关于Fortran 读取IBM格式的segy,读取结果与Segy分析工具不一...
本帖最后由 紫雪封尘 于 2020-12-10 16:22 编辑

我最近用Fortran 读取SUN工作站格式sgy文件,但是读取结果与segy分析工具和matlab 读取结果不一致 ,我感觉程序有问题,下面附上我的代码,请各位老师指教
open(70,file=FileName1,           &    !打开segy文件
    access='stream',                  &    !<< 流访问,即按字节访问文件
    form='unformatted',             &
    CONVERT='BIG_ENDIAN',     &    !<< IEEE Big Endian  ^^ Little_ENDIAN
    iostat=ios,                           &
    iomsg=iom)

Do i=1,ntrace
        irec=3600+(i-1)*(nt*4+240)  !读取的二进制位置
        read(70,pos=irec+1) head
        write(19,pos=(i-1)*240+1) head
        read(70,pos=73+irec) sx(i)   !道头中73-76字节表示炮点x坐标
        write(13,pos=(i-1)*4+1) sx(i)
        read(70,pos=77+irec) sy(i)   !道头中73-76字节表示炮点y坐标
        !!道头中77-80字节表示炮点y坐标
        write(14,pos=(i-1)*4+1) sy(i)
        read(70,pos=81+irec) rx(i)   !道头中81-84字节表示检波点x坐标
        write(15,pos=(i-1)*4+1) rx(i)
        read(70,pos=85+irec) ry(i)   !道头中85-88字节表示检波点y坐标
        write(16,pos=(i-1)*4+1) ry(i)
        read(70,pos=241+irec) (sgydata(j,i),j=1,nt)!!读取sgy数据
        write(*,*)sgydata(1,i)   
    End DO




作者: vvt    时间: 2020-12-10 21:27
因为你的系统是 IEEE浮点,而不是IBM浮点。你需要转换一下。
作者: 紫雪封尘    时间: 2020-12-13 19:28
vvt 发表于 2020-12-10 21:27
因为你的系统是 IEEE浮点,而不是IBM浮点。你需要转换一下。

您的意思是我读取的数据是IBM格式的,但是我是用IEEE格式的浮点数存储的,所以输出到屏幕上的数值是不正确的,需要改变存储的位顺序嘛?可我不是很清楚这个怎么转换啊,我倒是从网上找到了一篇文章,和C语言的代码,但是Fortran的转换,我无处下手,请指教啊




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2