⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gri2sgy.c

📁 一个读写SGY格式的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
#include <malloc.h>
#include <string.h>
#include "SEGY1.h"
#include "GRISYS.h"
#define   MAX_VALUE  0
#define   MIN_VALUE  9999999
#define   FAILED    1

int   inum;
FILE *infile,*outfile;
  int    CDP_GATHER_FOLD;
  int    MAX_IDENT_NUM = MAX_VALUE;
  int    MAX_TRACE_NUM = MAX_VALUE;
  int    MAX_CMP = MAX_VALUE;
  int    MAX_OFFSET = MAX_VALUE;
  int    MIN_IDENT_NUM = MIN_VALUE;
  int    MIN_TRACE_NUM = MIN_VALUE;
  int    MIN_CMP = MIN_VALUE;
  int    MIN_OFFSET = MIN_VALUE;
  int    EBCDIC_FIRST = 200000L;


main(argc,argv)
int argc;
char *argv[];
{
   struct BINARY_HEADER bin_header;
   struct TRACE_HEADER trace_head;
   struct GRISYS_DATA_TRACE_HEADER gri_head;
   float *ALLOC_VAR;
   int     TEST[128];
   char  GRISYS[10]="GRISYS_";
   char  * out_filename;
   char  SEGY[10]="SEGY_"; 
   int i,i1;
   int *p;

char          * EBCDIC_HEADER[80];
/*                   12345678901234567890123456789012345678901234567890123456789012345678901234567890*/
EBCDIC_HEADER[ 0  ]="C 1 CLIENT NJCC                   COMPANY                       CREW NO         ";
EBCDIC_HEADER[ 1  ]="C 2 LINE LINE000    AREA JIANGSU                                                ";
EBCDIC_HEADER[ 2  ]="C 3 REEL NO           DAY-START OF REEL     YEAR      OBSERVER                  ";
EBCDIC_HEADER[ 3  ]="C 4 INSTRUMENT  MFG            MODEL            SERIAL NO                       ";
EBCDIC_HEADER[ 4  ]="C 5 DATA TRACES/RECORD        AUXILIARY TRACES/RECORD         CDP FOLD          ";
EBCDIC_HEADER[ 5  ]="C 6 SAMPLE INTERVAL         SAMPLES/TRACE                    BYTES/SAMPLE       ";
EBCDIC_HEADER[ 6  ]="C 7 RECORDING FORMAT        FORMAT THIS REEL SEG-Y  MEASUREMENT SYSTEM METERS   ";
EBCDIC_HEADER[ 7  ]="C 8 SAMPLE CODE FLOATING PT                                                     ";
EBCDIC_HEADER[ 8  ]="C 9 GAIN  TYPE                                                                  ";
EBCDIC_HEADER[ 9  ]="C10 FILTERS                                                                     ";
EBCDIC_HEADER[ 10 ]="C11 SOURCE  TYPE            NUMBER/POINT        POINT INTERVAL                  ";
EBCDIC_HEADER[ 11 ]="C12     PATTERN                            LENGTH        WIDTH                  ";
EBCDIC_HEADER[ 12 ]="C13 SWEEP  START     HZ  END     HZ  LENGTH      MS  CHANNEL NO     TYPE        ";
EBCDIC_HEADER[ 13 ]="C14 TAPER  START LENGTH       MS  END LENGTH       MS  TYPE                     ";
EBCDIC_HEADER[ 14 ]="C15 SPREAD  OFFSET        MAX DISTANCE        GROUP INTERVAL                    ";
EBCDIC_HEADER[ 15 ]="C16 GEOPHONES  PER GROUP     SPACING     FREQUENCY     MFG          MODEL       ";
EBCDIC_HEADER[ 16 ]="C17      TYPE                              LENGTH        WIDTH                  ";
EBCDIC_HEADER[ 17 ]="C18 TRACES SORTED BY RECORD        PROJECT                LINE ID               ";
EBCDIC_HEADER[ 18 ]="C19 AMPLITUDE RECOVERY                                                          ";
EBCDIC_HEADER[ 19 ]="C20 MAP PROJECTION                      ZONE ID       COORDINATE UNITS          ";
EBCDIC_HEADER[ 20 ]="C21 FIELD SUM       NAVIGATION SYSTEM               RECORDING PARTY             ";
EBCDIC_HEADER[ 21 ]="C22 CABLE TYPE                   DEPTH        SHOOTING DIRECTION                ";
EBCDIC_HEADER[ 22 ]="C23                                                                             ";
EBCDIC_HEADER[ 23 ]="C24                                                                             ";
EBCDIC_HEADER[ 24 ]="C25                                                                             ";
EBCDIC_HEADER[ 25 ]="C26                                                                             ";
EBCDIC_HEADER[ 26 ]="C27                                                                             ";
EBCDIC_HEADER[ 27 ]="C28                                                                             ";
EBCDIC_HEADER[ 28 ]="C29                                                                             ";
EBCDIC_HEADER[ 29 ]="C30                                                                             ";
EBCDIC_HEADER[ 30 ]="C31                                                                             ";
EBCDIC_HEADER[ 31 ]="C32                                                                             ";
EBCDIC_HEADER[ 32 ]="C33                                                                             ";
EBCDIC_HEADER[ 33 ]="C34                                                                             ";
EBCDIC_HEADER[ 34 ]="C35                                                                             ";
EBCDIC_HEADER[ 35 ]="C36                                                                             ";
EBCDIC_HEADER[ 36 ]="C37                                                                             ";
EBCDIC_HEADER[ 37 ]="C38                                                                             ";
EBCDIC_HEADER[ 38 ]="C39                                                                             ";
EBCDIC_HEADER[ 39 ]="C40 END EBCDIC                                                                  ";
/*---------------------------------------------*/
   gri_head.LSTSAM=0;    /*001     ***/
   gri_head.NUMSHP=0;
   gri_head.TRACEH=0;
   gri_head.NUMCMP=0;
   gri_head.RPCMP4=0;
   gri_head.FSTSAM=0;
   gri_head.TAPERL=0;
   gri_head.NUMFLD=0;
   gri_head.SAMINT=0;
   gri_head.TRACEL=0;
   gri_head.TRACEV=0;   /*011     ***/
   gri_head.RECDID=0;
   gri_head.BITSFT=0;
   gri_head.AMPMAX=0;
   gri_head.TRACEI=0;
   gri_head.DELAYT=0;
   gri_head.TRACEN=0;
   gri_head.NUMREP=0;
   gri_head.PROSET=0;
   gri_head.OFFSET=0;
   gri_head.RPSHP4=0;   /*021-      */
   gri_head.NOCELL1[12]=0;  /* hd22-hd33 use for temporary. */ 
   gri_head.ELEAUD=0;
   gri_head.TIMEBH=0;
   gri_head.DEPSHP=0;
   gri_head.DEPREC=0;
   gri_head.ELESHP=0;
   gri_head.ELEREC=0;
   gri_head.ELECMP=0;
   gri_head.STASHP=0;   /*041-    ***/
   gri_head.STAREC=0;  
   gri_head.STACMP=0;
   gri_head.STSCMP=0;
   gri_head.STRCMP=0;
   gri_head.ELEDAT=0;
   gri_head.VELSUB=0;
   gri_head.RSTSHP=0;
   gri_head.RSTRCC=0;
   gri_head.RSTCMP=0;
   gri_head.FLCSTA=0;   /*051     ***/
   gri_head.TONCMP=0;   
   gri_head.AMPCOE=0;
   gri_head.AZIMUT=0;
   gri_head.FORMAT=0;
   gri_head.MNUMFIL=0;
   gri_head.NUMSPZ=0;
   gri_head.WBRSHP=0;
   gri_head.WBRREC=0;
   gri_head.WBRCMP=0;
   gri_head.X_YCOINT=0; /*061     ***/
   gri_head.XCOSHP=0;  
   gri_head.YCOSHP=0;
   gri_head.XCOREC=0;
   gri_head.YCOREC=0;
   gri_head.XCOCMP=0;
   gri_head.YCOCMP=0;
   gri_head.NUMLIN=0;
   gri_head.MAXAMS=0;
   gri_head.NOCELL2[45]=0;  /*hd 70--hd114*****   save wavelet   *****/ 
   gri_head.NOCELL3[8]=0;   /*hd115--hd122*****   now  no  use   *****/ 
   gri_head.CELNUM=0;  /*123 --- 128*/
   gri_head.STNUMB=0;
   gri_head.MARINE=0;
   gri_head.XCORSE=0;
   gri_head.YCORSE=0;
   gri_head.FORDAT=0;
/********    end definition   **********/
/***************************************  open the file  ***************************************************/
        if(argc==1) { 
             printf("Forget the exchange file.\n");
             exit(FAILED);
          }
         
        if((infile=fopen(argv[1],"rb"))==NULL) 
           { printf("can't open %s !\n",argv[1]);exit(FAILED);}
          
          
/*************************** test for finding the data_type of the data   ***********************************/

      i1=sizeof(TEST[0]);
printf("sizeof(TEST)=%6d\n",i1);
         fread(&TEST[0],4,1,infile);  
         fseek(infile,0L,0);
printf("TEST=%6d\n",TEST[0]);
/*
         fread(TEST,4,128,infile); 
         fseek(infile,0L,0);
for(i=0;i<128;i++){
printf("%6d,",TEST[i]);
if((i%10)==0) printf("\n");
}
exit(0);
*/
         
    /**********************      SEGY ----->  GRISYS     ********************************/

         if(abs(TEST[0])>10000)     
               { 
                  printf("segy------grisys.\n"); 
                  strcat(GRISYS,argv[1]);
                  
             /*************  construct the output filename  **************/
                if(argv[2] == NULL) {
                  printf("out file is %s\n",GRISYS);
                  outfile=fopen(GRISYS,"wb");
                  out_filename = GRISYS;
                 }
                else {
                  printf("out file is %s\n",argv[2]);
                  outfile=fopen(argv[2],"wb");
                  out_filename = argv[2];
                 }


          
               /***********     read segy binary header     ***********/
          
                  fseek(infile,3200L,0);
                  if(fread(&bin_header,sizeof(struct BINARY_HEADER),1,infile)!=1)
                     {
                       printf("read segy BINARY_HEADER failed.\n");
                       exit(FAILED);
                       }
          
                  CDP_GATHER_FOLD = bin_header.CDP_MULTIPLICITY;             
                printf("NUM_of_SAMP_POINT_HERE %d\n",bin_header.NUM_of_SAMP_POINT_HERE);
                printf("SAMPLE_INTERVAL_HERE %dms.\n",bin_header.SAMPLE_INTERVAL_HERE/1000);
/*
                 printf("CDP_GATHER_FOLD is %d.\n",CDP_GATHER_FOLD);
*/

                   inum=0;

           while(feof(infile)==0 )
                    {
                        inum+=1;

                  /********   read segy trace header ***********/

                        if(fread(&trace_head,sizeof(struct TRACE_HEADER),1,infile)!=1)
                          {
                           /*
                              printf("read segy TRACE_HEADER failed.\n");
                              exit(FAILED);
                           printf("reading complete.\n");
                           */
                           break;
                           }


                 /***** alloc some memory for seismic data_set   ********/

                          if((ALLOC_VAR=(float  *)malloc(trace_head.LTRSAM*4L+20L))==NULL)
                       
                           {  
                               printf("alloc failed!\n");
                               exit(FAILED);
                           }
          
                 /***** read a few seismic trace.  *******/

                          if(fread(ALLOC_VAR,4,trace_head.LTRSAM,infile) != trace_head.LTRSAM)
                           {
                                printf("read seismic data failed!\n");
                                exit(FAILED);
                            }
              
          
                  /********  assign segy value to the grisys trace_header   *********/
          
                      gri_head.LSTSAM = trace_head.LTRSAM * trace_head.SAMPLE_INTERVAL/1000;
                      gri_head.TRACEL = trace_head.LTRSAM * trace_head.SAMPLE_INTERVAL/1000;
                      gri_head.NUMSHP = trace_head.IDENT_NUM;
                      gri_head.NUMCMP = trace_head.CMP;
/* -----------SEGY TO gri and want TO CGG----------------------------------------
                      gri_head.NUMCMP = trace_head.RESID_STATCOR_SOURCE;
                      gri_head.NUMLIN = trace_head.TEMP1;
                      gri_head.RPSHP4 = trace_head.TEMP2*4;
                      gri_head.NUMREP = trace_head.CMP_DATCOR_APP;
                      gri_head.XCOCMP = trace_head.NO_ALLOC[2];
                      gri_head.YCOCMP = trace_head.NO_ALLOC[3];
*/
/* -------------------------------------------------------*/
/* -----------SEGY TO gri ELE_SOURCE and ELE_DETECT and ELE_CMP  ----------------*/
                      gri_head.ELESHP = trace_head.ELEVATION_SOURCE;
                      gri_head.ELEREC = trace_head.ELEVATION_DETECT;
                      

                      gri_head.NUMFLD = CDP_GATHER_FOLD;
                      gri_head.SAMINT = trace_head.SAMPLE_INTERVAL/1000;
                      gri_head.TRACEV = 7;
/*
                      gri_head.TRACEV = 14 - 2*trace_head.TRACE_ID_CODE;
*/
                      gri_head.DELAYT = trace_head.LAG_TIME_A;
                      gri_head.TRACEN = trace_head.TRACE_NUM;
                      gri_head.OFFSET = abs(trace_head.SOURCE_to_DETECT_DISTANCE);
                      gri_head.DEPSHP = trace_head.WATER_DEPTH_SOURCE;
                      gri_head.DEPREC = trace_head.WATER_DEPTH_DETECT;
                      gri_head.RSTSHP = trace_head.STA_CORR_SOURCE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -