diff --git a/fdelmodc/writeRec.c b/fdelmodc/writeRec.c index 6c2ce08a7b4c2ecd1932bed0dafe58c3a5b2c4bf..a12843e2fcd181612fa65e112a9df82da69109e4 100644 --- a/fdelmodc/writeRec.c +++ b/fdelmodc/writeRec.c @@ -84,7 +84,7 @@ int writeRec(recPar rec, modPar mod, bndPar bnd, wavPar wav, int ixsrc, int izsr hdr.trid = 1; hdr.ns = nsam; hdr.trwf = rec.n; - hdr.ntr = (ishot+1)*rec.n; + hdr.ntr = rec.n; if (mod.grid_dir) { /* reverse time modeling */ hdr.f1 = (-mod.nt+1)*mod.dt; } diff --git a/utils/kxwfilter.c b/utils/kxwfilter.c deleted file mode 100644 index 55e5e57836dcbd2177283a0a28270f7999bfa74a..0000000000000000000000000000000000000000 --- a/utils/kxwfilter.c +++ /dev/null @@ -1,132 +0,0 @@ -#include <math.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <genfft.h> - -#define ISODD(n) ((n) & 01) -#define MAX(x,y) ((x) > (y) ? (x) : (y)) -#define MIN(x,y) ((x) < (y) ? (x) : (y)) - -void kxwfilt(complex *data, float k, float dx, int nkx, float a1, float perc); - -void kxwfilter(float *data, int nt, int nx, float dt, float dx, float fmin, float fmax, float angle, float cp, float perc) -{ - int ntfft, nfreq, nkx, ix, it, iomin, iomax, xorig, iom, ikx; - float df, dkx, deltom, omin, omax, kp, om; - float *pdata; - complex *cdata; - - ntfft = optncr(nt); - nfreq = ntfft/2+1; - nkx = optncc(2*nx); - - df = 1.0/((float)ntfft*dt); - dkx = 2.0*M_PI/(nkx*dx); - deltom = 2.*M_PI*df; - omin = 2.*M_PI*fmin; - omax = 2.*M_PI*fmax; - - iomin = (int)MIN((omin/deltom), (nfreq-1)); - iomin = MAX(iomin, 1); - iomax = MIN((int)(omax/deltom), (nfreq-1)); - - pdata = (float *)calloc(ntfft*nkx,sizeof(float)); - cdata = (complex *)malloc(nfreq*nkx*sizeof(complex)); - - /* copy input data into extended arrays with padded zeroes */ - for (ix=0; ix<nx; ix++) { - memcpy(&pdata[ix*ntfft],&data[ix*nt],nt*sizeof(float)); - } - - /* transform from t-x to kx-w */ - xorig = nkx/2; - xt2wkx(pdata, cdata, ntfft, nkx, ntfft, nkx, xorig); - - - for (iom = iomin; iom <= iomax; iom++) { - om = iom*deltom; - kp = om/cp; - - kxwfilt(&cdata[iom*nkx], kp, dx, nkx, angle, perc); - - } - - /* transform back to t-x */ - wkx2xt(cdata, pdata, ntfft, nkx, nkx, ntfft, xorig); - - /* reduce array to nt samples nx traces */ - for (ix=0; ix<nx; ix++) { - memcpy(&data[ix*nt],&pdata[ix*ntfft],nt*sizeof(float)); - } - - free(pdata); - free(cdata); - - return; -} - - -void kxwfilt(complex *data, float k, float dx, int nkx, float a1, float perc) -{ - int ikx, ik1, ik2, ntap; - float kxnyq, dkx, kxfmax, kfilt; - float kpos, band, li, *filter; - - kxnyq = M_PI/dx; - dkx = 2.0*M_PI/(nkx*dx); - if (a1 > 90.0) kpos = kxnyq; - else kpos = k*sin(M_PI*a1/180.0); - - filter = (float *)malloc(nkx*sizeof(float)); - - band = fabs(2*kpos); - ntap = (int)fabs((int)(perc*band/dkx)); - kfilt = fabs(dkx*ntap); - - if (perc > 0) { - if (kpos+kfilt < kxnyq) { - kxfmax = kpos+kfilt; - } - else { - kxfmax = kxnyq; - ntap = (int)(0.15*nkx/2); - } - } - else { - kxfmax = MIN(kpos, kxnyq); - } - - ik1 = (int)(kxfmax/dkx); - ik2 = ik1 - ntap; - - if (perc < -0.5 || perc > 1.0) { - if (kpos > 0.85*kxnyq) { - kpos = 0.85*kxnyq; - } - ik1 = nkx/2-1; - ik2 = (int)(kpos/dkx); - } - - li = 1.0/(ik1-ik2); - for (ikx = 0; ikx < ik2; ikx++) - filter[ikx] = 1.0; - for (ikx = ik2; ikx < ik1; ikx++) - filter[ikx] = 0.5*(cos(M_PI*(ikx-ik2)*li)+1); - for (ikx = ik1; ikx <= nkx/2; ikx++) - filter[ikx] = 0.0; - - for (ikx = 0; ikx <= (nkx/2); ikx++) { - data[ikx].r *= filter[ikx]; - data[ikx].i *= filter[ikx]; - } - for (ikx = (nkx/2+1); ikx < nkx; ikx++) { - data[ikx].r *= filter[nkx-ikx]; - data[ikx].i *= filter[nkx-ikx]; - } - - free(filter); - return; -} - -