Fortran Coder

标题: 编写的SGY 文件道数据读取程序,读取的与seisee显示的不同 [打印本页]

作者: zy_cd    时间: 2022-8-31 10:51
标题: 编写的SGY 文件道数据读取程序,读取的与seisee显示的不同
这是我写的代码
     
[Fortran] 纯文本查看 复制代码
 program SRME
    real*4,ALLOCATABLE::SEISMIC_DATA(:)
    CHARACTER*20 filename
    integer*2 SAMPLE_RATE,TRACE_LENGTH,TRACE_AMOUNT

      TRACE_AMOUNT=5765
    filename='Z10-CH-1.sgy'
      
    WRITE(*,*)'获得SGY数据采样率、采样长度'
    OPEN(15,FILE=FILENAME,ACCESS='DIRECT',
     $FORM='BINARY',RECL=2,convert='big_endian')
    READ(15,REC=1859) SAMPLE_RATE
    READ(15,REC=1858) TRACE_LENGTH
    WRITE(*,*)'采样率=',SAMPLE_RATE,'采样长度=',TRACE_LENGTH
    CLOSE(15)
    ALLOCATE(SEISMIC_DATA(1:TRACE_LENGTH))     
         
       OPEN(30,FILE=FILENAME,FORM='binary',
     $ACCESS='DIRECT',RECL=4,convert='big_endian')
       WRITE(*,*)'读取SGY地震数据'
       DO I=1,TRACE_AMOUNT
          OPEN(30,FILE=FILENAME,FORM='BINARY',
     $ACCESS='DIRECT',RECL=4,convert='big_endian')
            DO L1=1,TRACE_LENGTH
             READ(30,REC=900+60*I+(I-1)*TRACE_LENGTH+L1)
     $SEISMIC_DATA(L1)
             write(*,*)L1,seismic_data(l1)
          END DO
    PAUSE
         END DO
      END PROGRAM


这是运行结果,是sgy文件第一道前26个采样点的数据







作者: zy_cd    时间: 2022-8-31 10:52
本帖最后由 zy_cd 于 2022-8-31 11:03 编辑

这是用SEISEE软件打开的第一道前26个采样点数据



作者: li913    时间: 2022-9-2 14:17
试试 convert='IBM'
作者: zy_cd    时间: 2022-9-9 10:16
li913 发表于 2022-9-2 14:17
试试 convert='IBM'

已解决, real*4,ALLOCATABLE::SEISMIC_DATA(:)这个语句改为 integer*4,ALLOCATABLE::SEISMIC_DATA(:)后就正常了。可能我用的sgy文件数据部分就是以整形存储的,用实型变量读的话就出现这种情况。
作者: li913    时间: 2022-9-9 11:08
sgy卷头中3225-3226字节表示数据格式,你的可能是2

QQ截图20220909110452.png (82.1 KB, 下载次数: 102)

QQ截图20220909110452.png

作者: zy_cd    时间: 2022-9-9 16:09
本帖最后由 zy_cd 于 2022-9-9 16:14 编辑
li913 发表于 2022-9-9 11:08
sgy卷头中3225-3226字节表示数据格式,你的可能是2


确实是2,再次感谢,您也是物探专业的吗?


作者: li913    时间: 2022-9-11 16:51
zy_cd 发表于 2022-9-9 16:09
确实是2,再次感谢,您也是物探专业的吗?

恩,Fortran程序员物探的很多。




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