evsel.c
来自「seismic software,very useful」· C语言 代码 · 共 114 行
C
114 行
#include "rmig.h"/* event selections at receiver locations *//* input: ng number of receiver locations ne number of events (reflections) maxnr maximum number of rays per event maxnes maximum number of reflections points per receiver mmap multiple reflections at one reflector (0=no 1=yes) sx[ng] source locations of traces gx[ng] receiver locations of traces xr[ne][maxnr] x locations of rays at receivers ts[ne][maxnr] travel time of rays xhs[ne][maxnr] x locations of reflection points of rays zhs[ne][maxnr] z locations of reflection points of rays nxt[ne] number of rays per event iray[ne][maxnr] ray flag (1=live 0=dead) sortz sort output ze in ascending order (0=no 1=yes) aper migration aperature (lateral distance from midpoint to output position) output: xe[ng][maxnes] x locations of reflection points at locations gx ze[ng][maxnes] z locations of reflection points at locations gx te[ng][maxnes] travel time of rays at locations gx nes[ng] number of reflection points at locations gx ier[ng][maxnes] ray index of reflection point iee[ng][maxnes] event index of reflection point author: zhiming li 1/1/93*/void evsel(int ng, int ne, int maxnr, int maxnes, int mmap, float *sx, float *gx, float *xr, float *ts, float *xhs, float *zhs, int *nxt, int *iray, float *xe, float *ze, float *te, int *nes, int *ier, int *iee, int sortz, float aper) { float tmp, tmp1, xmid, tmp2; int ie, ir, one, jg, me, ig, ies; int *indx2, *iepg, *itmp; float *sort2; sort2 = (float*) malloc(maxnes*sizeof(float)); indx2 = (int*) malloc(maxnes*sizeof(int)); itmp = (int*) malloc(maxnes*sizeof(int)); iepg = (int*) malloc(ne*ng*sizeof(int)); bzero(nes,ng*sizeof(int)); bzero(iepg,ng*ne*sizeof(int)); one = 1; for(ie=0;ie<ne;ie++) { for(ir=0;ir<nxt[ie];ir++) { if(iray[ie*maxnr+ir]==0) continue; tmp = xr[ie*maxnr+ir]; bisear_(&ng,&one,gx,&tmp,&ig); if(tmp>=gx[0] && tmp<=gx[ng-1]) { if(ig<ng) { tmp1 = gx[ig-1] - tmp; tmp2 = gx[ig] - tmp; if(fabs(tmp1)>fabs(tmp2)) ig = ig + 1; } jg = ig - 1; xmid = 0.5*(sx[jg] + gx[jg]); ies = nes[jg]; tmp1 = xmid - xe[jg*maxnes+ies]; tmp2 = xmid - xhs[ie*maxnr+ir]; if(fabs(tmp2)>aper) continue; if( (mmap==0 && iepg[jg*ne+ie]!=0 && fabs(tmp1)>fabs(tmp2)) || (mmap!=0) || (iepg[jg*ne+ie]==0) ) { ze[jg*maxnes+ies]=zhs[ie*maxnr+ir]; xe[jg*maxnes+ies]=xhs[ie*maxnr+ir]; te[jg*maxnes+ies]=ts[ie*maxnr+ir]; iee[jg*maxnes+ies]=ie; ier[jg*maxnes+ies]=ir; nes[jg] = nes[jg] + 1; iepg[jg*ne+ie]=1; } } } } if(sortz==1) { /* sort depth of event into ascending order */ for(ig=0;ig<ng;ig++) { me = nes[ig]; for(ie=0;ie<me;ie++) indx2[ie] = ie; qkisort(me,ze+ig*maxnes,indx2); for(ie=0;ie<me;ie++) itmp[ie]=iee[ig*maxnes+indx2[ie]]; for(ie=0;ie<me;ie++) iee[ig*maxnes+ie]=itmp[ie]; for(ie=0;ie<me;ie++) itmp[ie]=ier[ig*maxnes+indx2[ie]]; for(ie=0;ie<me;ie++) ier[ig*maxnes+ie]=itmp[ie]; for(ie=0;ie<me;ie++) sort2[ie]=ze[ig*maxnes+indx2[ie]]; for(ie=0;ie<me;ie++) ze[ig*maxnes+ie]=sort2[ie]; for(ie=0;ie<me;ie++) sort2[ie]=xe[ig*maxnes+indx2[ie]]; for(ie=0;ie<me;ie++) xe[ig*maxnes+ie] = sort2[ie]; for(ie=0;ie<me;ie++) sort2[ie]=te[ig*maxnes+indx2[ie]]; for(ie=0;ie<me;ie++) te[ig*maxnes+ie] = sort2[ie]; } } free(sort2); free(indx2); free(iepg); free(itmp);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?