From 2ecb1b4a95a29556a613db783710b5b39c8eed09 Mon Sep 17 00:00:00 2001 From: "joeri.brackenhoff" <joeri.brackenhoff@login0.ogun.local> Date: Mon, 11 Feb 2019 10:28:13 -0300 Subject: [PATCH] all --- marchenko3D/Makefile | 2 +- marchenko3D/demo/oneD/marchenko.scr | 8 +- marchenko3D/demo/oneD/p5all.scr | 13 +- marchenko3D/marchenko3D.c | 112 ++-- marchenko3D/readTinvData3D.c | 17 +- marchenko3D/synthesis3D.c | 19 +- utils/Makefile | 25 +- utils/getrecpos3D.c | 135 +++++ utils/green3D | Bin 0 -> 140784 bytes utils/green3D.c | 761 ++++++++++++++++++++++++++++ 10 files changed, 1013 insertions(+), 79 deletions(-) create mode 100644 utils/getrecpos3D.c create mode 100755 utils/green3D create mode 100644 utils/green3D.c diff --git a/marchenko3D/Makefile b/marchenko3D/Makefile index 491a1c0..6a8acbd 100644 --- a/marchenko3D/Makefile +++ b/marchenko3D/Makefile @@ -87,7 +87,7 @@ OBJJ3 = $(SRCJ3:%.c=%.o) fmute3D: $(OBJJ3) $(CC) $(LDFLAGS) $(OPTC) $(CFLAGS) -o fmute3D $(OBJJ3) $(LIBS) -install: fmute marchenko test fmute3D +install: fmute marchenko marchenko3D fmute3D cp fmute $B cp marchenko $B cp marchenko3D $B diff --git a/marchenko3D/demo/oneD/marchenko.scr b/marchenko3D/demo/oneD/marchenko.scr index 6fd6cac..8538681 100755 --- a/marchenko3D/demo/oneD/marchenko.scr +++ b/marchenko3D/demo/oneD/marchenko.scr @@ -7,10 +7,10 @@ export OMP_NUM_THREADS=1 fmute file_shot=iniFocus_rp.su file_out=p0plus.su above=-1 shift=-8 verbose=1 check=0 hw=8 #apply the Marchenko algorithm -~/OpenSource/marchenko3D/test file_shot=shotsy.su file_tinv=p0y.su nshots=901 verbose=10 \ - tap=0 niter=8 hw=8 shift=12 smooth=3 \ - file_green=pgreen2.su file_gplus=Gplus02.su file_gmin=Gmin02.su \ - file_f1plus=f1plus02.su file_f1min=f1min02.su file_f2=f22.su +marchenko file_shot=shotsdx5_rp.su file_tinv=p0plus.su nshots=901 verbose=2 \ + tap=0 niter=8 hw=8 shift=12 smooth=3 scale=4 \ + file_green=pgreen3.su file_gplus=Gplus03.su file_gmin=Gmin03.su \ + file_f1plus=f1plus03.su file_f1min=f1min03.su file_f2=f23.su exit diff --git a/marchenko3D/demo/oneD/p5all.scr b/marchenko3D/demo/oneD/p5all.scr index 333be55..c749523 100755 --- a/marchenko3D/demo/oneD/p5all.scr +++ b/marchenko3D/demo/oneD/p5all.scr @@ -4,9 +4,9 @@ export PATH=$HOME/src/OpenSource/bin:$PATH: # Generate the full R matrix for a fixed spread geometry. -dxshot=5000 # with scalco factor of 1000 +dxshot=10000 # with scalco factor of 1000 ishot=0 -nshots=901 +nshots=451 echo $1 @@ -16,16 +16,15 @@ while (( ishot < nshots )) do (( xsrc = -2250000 + ${ishot}*${dxshot} )) - (( tr1 = 901 - ${ishot} )) - (( tr2 = ${tr1} + 900 )) + (( tr1 = $nshots - ${ishot} )) + (( tr2 = ${tr1} + $nshots - 1 )) echo xsrc=$xsrc tr1=$tr1 tr2=$tr2 (( ishot = $ishot + 1)) - suwind < shot5_rp.su key=tracl min=$tr1 max=$tr2 | \ + suwind < shot_kxky.su key=tracl min=$tr1 max=$tr2 | \ sushw key=sx,gx,fldr,trwf \ - a=$xsrc,-2250000,$ishot,901 b=0,5000,0,0 j=0,901,0,0 | \ + a=$xsrc,-2250000,$ishot,$nshots b=0,$dxshot,0,0 j=0,$nshots,0,0 | \ suchw key1=offset key2=gx key3=sx c=-1 d=1000 >> shotsdx5_rp.su done - diff --git a/marchenko3D/marchenko3D.c b/marchenko3D/marchenko3D.c index 7323516..983aa15 100644 --- a/marchenko3D/marchenko3D.c +++ b/marchenko3D/marchenko3D.c @@ -24,7 +24,7 @@ void omp_set_num_threads(int num_threads); #ifndef MIN #define MIN(x,y) ((x) < (y) ? (x) : (y)) #endif -#define NINT(x) ((int)((x)>0.0?(x)+0.5:(x)-0.5)) +#define NINT(x) ((long)((x)>0.0?(x)+0.5:(x)-0.5)) @@ -34,36 +34,42 @@ typedef struct _complexStruct { /* complex number */ } complex; #endif/* complex */ -int readShotData3D(char *filename, float *xrcv, float *yrcv, float *xsrc, float *ysrc, float *zsrc, int *xnx, complex *cdata, int nw, int nw_low, int nshots, int nx, int ny, int ntfft, int mode, float scale, int verbose); -int readTinvData3D(char *filename, float *xrcv, float *yrcv, float *xsrc, float *ysrc, float *zsrc, int *xnx, int Nfoc, int nx, int ny, int ntfft, int mode, int *maxval, float *tinv, int hw, int verbose); -int writeDataIter(char *file_iter, float *data, segy *hdrs, int n1, int n2, float d2, float f2, int n2out, int Nfoc, float *xsyn, -float *zsyn, int *ixpos, int npos, int iter); -int unique_elements(float *arr, int len); +long readShotData3D(char *filename, float *xrcv, float *yrcv, float *xsrc, float *ysrc, float *zsrc, long *xnx, complex *cdata, + long nw, long nw_low, long nshots, long nx, long ny, long ntfft, long mode, float scale, long verbose); +long readTinvData3D(char *filename, float *xrcv, float *yrcv, float *xsrc, float *ysrc, float *zsrc, + long *xnx, long Nfoc, long nx, long ny, long ntfft, long mode, long *maxval, float *tinv, long hw, long verbose); +// int writeDataIter(char *file_iter, float *data, segy *hdrs, int n1, int n2, float d2, float f2, int n2out, int Nfoc, float *xsyn, +// float *zsyn, int *ixpos, int npos, int iter); +long unique_elements(float *arr, long len); void name_ext(char *filename, char *extension); -void applyMute(float *data, int *mute, int smooth, int above, int Nfoc, int nxs, int nt, int *xrcvsyn, int npos, int shift); +void applyMute3D(float *data, long *mute, long smooth, long above, long Nfoc, long nxs, long nt, long *xrcvsyn, long npos, long shift); -int getFileInfo3D(char *filename, int *n1, int *n2, int *n3, int *ngath, float *d1, float *d2, float *d3, float *f1, float *f2, float *f3, float *sclsxgxsygy, int *nxm); -int readData(FILE *fp, float *data, segy *hdrs, int n1); -int writeData(FILE *fp, float *data, segy *hdrs, int n1, int n2); -int disp_fileinfo3D(char *file, int n1, int n2, int n3, float f1, float f2, float f3, float d1, float d2, float d3, segy *hdrs); +long getFileInfo3D(char *filename, long *n1, long *n2, long *n3, long *ngath, float *d1, float *d2, float *d3, float *f1, float *f2, float *f3, + float *sclsxgxsygy, long *nxm); +long readData3D(FILE *fp, float *data, segy *hdrs, long n1); +long writeData3D(FILE *fp, float *data, segy *hdrs, long n1, long n2); +long disp_fileinfo3D(char *file, long n1, long n2, long n3, float f1, float f2, float f3, float d1, float d2, float d3, segy *hdrs); double wallclock_time(void); -void synthesisPositions3D(int nx, int ny, int nxs, int nys, int Nfoc, float *xrcv, float *yrcv, float *xsrc, float *ysrc, int *xnx, float fxse, float fyse, float fxsb, float fysb, float dxs, float dys, int nshots, int nxsrc, int nysrc, int *ixpos, int *npos, int reci, int verbose); -void synthesis3D(complex *Refl, complex *Fop, float *Top, float *iRN, int nx, int ny, int nt, int nxs, int nys, int nts, float dt, float *xsyn, float *ysyn, -int Nfoc, float *xrcv, float *yrcv, float *xsrc, float *ysrc, int *xnx, float fxse, float fxsb, float fyse, float fysb, float dxs, float dys, float dxsrc, -float dysrc, float dx, float dy, int ntfft, int nw, int nw_low, int nw_high, int mode, int reci, int nshots, int nxsrc, int nysrc, -int *ixpos, int npos, double *tfft, int *isxcount, int *reci_xsrc, int *reci_xrcv, float *ixmask, int verbose); +void synthesisPositions3D(long nx, long ny, long nxs, long nys, long Nfoc, float *xrcv, float *yrcv, float *xsrc, float *ysrc, + long *xnx, float fxse, float fyse, float fxsb, float fysb, float dxs, float dys, long nshots, long nxsrc, long nysrc, + long *ixpos, long *npos, long reci, long verbose); +void synthesis3D(complex *Refl, complex *Fop, float *Top, float *iRN, long nx, long ny, long nt, long nxs, long nys, long nts, float dt, + float *xsyn, float *ysyn, long Nfoc, float *xrcv, float *yrcv, float *xsrc, float *ysrc, long *xnx, + float fxse, float fxsb, float fyse, float fysb, float dxs, float dys, float dxsrc, float dysrc, + float dx, float dy, long ntfft, long nw, long nw_low, long nw_high, long mode, long reci, long nshots, long nxsrc, long nysrc, + long *ixpos, long npos, double *tfft, long *isxcount, long *reci_xsrc, long *reci_xrcv, float *ixmask, long verbose); -int linearsearch(int *array, size_t N, int value); +long linearsearch(long *array, size_t N, long value); /*********************** self documentation **********************/ char *sdoc[] = { " ", -" MARCHENKO - Iterative Green's function and focusing functions retrieval", +" MARCHENKO3D - Iterative Green's function and focusing functions retrieval in 3D", " ", -" marchenko file_tinv= file_shot= [optional parameters]", +" marchenko3D file_tinv= file_shot= [optional parameters]", " ", " Required parameters: ", " ", @@ -102,7 +108,8 @@ char *sdoc[] = { " verbose=0 ................ silent option; >0 displays info", " ", " ", -" author : Jan Thorbecke : 2016 (j.w.thorbecke@tudelft.nl)", +" author : Jan Thorbecke : 2016 (j.w.thorbecke@tudelft.nl)", +" author : Joeri Brackenhoff : 2019 (j.a.brackenhoff@tudelft.nl)", " ", NULL}; /**************** end self doc ***********************************/ @@ -111,13 +118,13 @@ int main (int argc, char **argv) { FILE *fp_out, *fp_f1plus, *fp_f1min; FILE *fp_gmin, *fp_gplus, *fp_f2, *fp_pmin; - int i, j, l, k, ret, nshots, nxshot, nyshot, Nfoc, nt, nx, ny, nts, nxs, nys, ngath; - int size, n1, n2, n3, ntap, tap, dxi, dyi, ntraces, pad; - int nw, nw_low, nw_high, nfreq, *xnx, *xnxsyn; - int reci, countmin, mode, n2out, n3out, verbose, ntfft; - int iter, niter, tracf, *muteW; - int hw, smooth, above, shift, *ixpos, npos, ix; - int nshots_r, *isxcount, *reci_xsrc, *reci_xrcv; + long i, j, l, k, ret, nshots, nxshot, nyshot, Nfoc, nt, nx, ny, nts, nxs, nys, ngath; + long size, n1, n2, n3, ntap, tap, dxi, dyi, ntraces, pad; + long nw, nw_low, nw_high, nfreq, *xnx, *xnxsyn; + long reci, countmin, mode, n2out, n3out, verbose, ntfft; + long iter, niter, tracf, *muteW; + long hw, smooth, above, shift, *ixpos, npos, ix; + long nshots_r, *isxcount, *reci_xsrc, *reci_xrcv; float fmin, fmax, *tapersh, *tapersy, fxf, fyf, dxf, dyf, *xsrc, *ysrc, *xrcv, *yrcv, *zsyn, *zsrc, *xrcvsyn, *yrcvsyn; double t0, t1, t2, t3, tsyn, tread, tfft, tcopy, energyNi, energyN0; float d1, d2, d3, f1, f2, f3, fxsb, fxse, fysb, fyse, ft, fx, fy, *xsyn, *ysyn, dxsrc, dysrc; @@ -146,7 +153,7 @@ int main (int argc, char **argv) if (!getparstring("file_f2", &file_f2)) file_f2 = NULL; if (!getparstring("file_pmin", &file_pmin)) file_pmin = NULL; if (!getparstring("file_iter", &file_iter)) file_iter = NULL; - if (!getparint("verbose", &verbose)) verbose = 0; + if (!getparlong("verbose", &verbose)) verbose = 0; if (file_tinv == NULL && file_shot == NULL) verr("file_tinv and file_shot cannot be both input pipe"); if (!getparstring("file_green", &file_green)) { @@ -155,20 +162,20 @@ int main (int argc, char **argv) } if (!getparfloat("fmin", &fmin)) fmin = 0.0; if (!getparfloat("fmax", &fmax)) fmax = 70.0; - if (!getparint("reci", &reci)) reci = 0; + if (!getparlong("reci", &reci)) reci = 0; if (!getparfloat("scale", &scale)) scale = 2.0; if (!getparfloat("tsq", &tsq)) tsq = 0.0; if (!getparfloat("Q", &Q)) Q = 0.0; if (!getparfloat("f0", &f0)) f0 = 0.0; - if (!getparint("tap", &tap)) tap = 0; - if (!getparint("ntap", &ntap)) ntap = 0; - if (!getparint("pad", &pad)) pad = 0; + if (!getparlong("tap", &tap)) tap = 0; + if (!getparlong("ntap", &ntap)) ntap = 0; + if (!getparlong("pad", &pad)) pad = 0; - if(!getparint("niter", &niter)) niter = 10; - if(!getparint("hw", &hw)) hw = 15; - if(!getparint("smooth", &smooth)) smooth = 5; - if(!getparint("above", &above)) above = 0; - if(!getparint("shift", &shift)) shift=12; + if(!getparlong("niter", &niter)) niter = 10; + if(!getparlong("hw", &hw)) hw = 15; + if(!getparlong("smooth", &smooth)) smooth = 5; + if(!getparlong("above", &above)) above = 0; + if(!getparlong("shift", &shift)) shift=12; if (reci && ntap) vwarn("tapering influences the reciprocal result"); @@ -194,12 +201,12 @@ int main (int argc, char **argv) ntfft = optncr(MAX(nt+pad, nts+pad)); nfreq = ntfft/2+1; - nw_low = (int)MIN((fmin*ntfft*dt), nfreq-1); + nw_low = (long)MIN((fmin*ntfft*dt), nfreq-1); nw_low = MAX(nw_low, 1); - nw_high = MIN((int)(fmax*ntfft*dt), nfreq-1); + nw_high = MIN((long)(fmax*ntfft*dt), nfreq-1); nw = nw_high - nw_low + 1; scl = 1.0/((float)ntfft); - if (!getparint("countmin", &countmin)) countmin = 0.3*nx*ny; + if (!getparlong("countmin", &countmin)) countmin = 0.3*nx*ny; /*================ Allocating all data arrays ================*/ @@ -212,7 +219,7 @@ int main (int argc, char **argv) iRN = (float *)calloc(Nfoc*nys*nxs*ntfft,sizeof(float)); Ni = (float *)calloc(Nfoc*nys*nxs*ntfft,sizeof(float)); G_d = (float *)calloc(Nfoc*nys*nxs*ntfft,sizeof(float)); - muteW = (int *)calloc(Nfoc*nys*nxs,sizeof(int)); + muteW = (long *)calloc(Nfoc*nys*nxs,sizeof(long)); trace = (float *)malloc(ntfft*sizeof(float)); tapersy = (float *)malloc(nxs*sizeof(float)); xrcvsyn = (float *)calloc(Nfoc*nys*nxs,sizeof(float)); // x-rcv postions of focal points @@ -220,8 +227,8 @@ int main (int argc, char **argv) xsyn = (float *)malloc(Nfoc*sizeof(float)); // x-src position of focal points ysyn = (float *)malloc(Nfoc*sizeof(float)); // x-src position of focal points zsyn = (float *)malloc(Nfoc*sizeof(float)); // z-src position of focal points - xnxsyn = (int *)calloc(Nfoc,sizeof(int)); // number of traces per focal point - ixpos = (int *)calloc(nys*nxs,sizeof(int)); // x-position of source of shot in G_d domain (nxs*nys with dxs, dys) + xnxsyn = (long *)calloc(Nfoc,sizeof(long)); // number of traces per focal point + ixpos = (long *)calloc(nys*nxs,sizeof(long)); // x-position of source of shot in G_d domain (nxs*nys with dxs, dys) Refl = (complex *)malloc(nw*ny*nx*nshots*sizeof(complex)); tapersh = (float *)malloc(nx*sizeof(float)); @@ -230,12 +237,12 @@ int main (int argc, char **argv) xsrc = (float *)calloc(nshots,sizeof(float)); //x-src position of shots ysrc = (float *)calloc(nshots,sizeof(float)); //x-src position of shots zsrc = (float *)calloc(nshots,sizeof(float)); // z-src position of shots - xnx = (int *)calloc(nshots,sizeof(int)); // number of traces per shot + xnx = (long *)calloc(nshots,sizeof(long)); // number of traces per shot if (reci!=0) { - reci_xsrc = (int *)malloc((nxs*nxs*nys*nys)*sizeof(int)); - reci_xrcv = (int *)malloc((nxs*nxs*nys*nys)*sizeof(int)); - isxcount = (int *)calloc(nxs*nys,sizeof(int)); + reci_xsrc = (long *)malloc((nxs*nxs*nys*nys)*sizeof(long)); + reci_xrcv = (long *)malloc((nxs*nxs*nys*nys)*sizeof(long)); + isxcount = (long *)calloc(nxs*nys,sizeof(long)); ixmask = (float *)calloc(nxs*nys,sizeof(float)); } @@ -518,9 +525,9 @@ int main (int argc, char **argv) t3 = wallclock_time(); tsyn += t3 - t2; - if (file_iter != NULL) { - writeDataIter(file_iter, iRN, hdrs_out, ntfft, nxs*nys, d2, f2, n2out*n3out, Nfoc, xsyn, zsyn, ixpos, npos, iter); - } + // if (file_iter != NULL) { + // writeDataIter(file_iter, iRN, hdrs_out, ntfft, nxs*nys, d2, f2, n2out*n3out, Nfoc, xsyn, zsyn, ixpos, npos, iter); + // } /* N_k(x,t) = -N_(k-1)(x,-t) */ /* p0^-(x,t) += iRN = (R * T_d^inv)(t) */ for (l = 0; l < Nfoc; l++) { @@ -604,6 +611,7 @@ int main (int argc, char **argv) } } } + applyMute(green, muteW, smooth, 4, Nfoc, nxs*nys, nts, ixpos, npos, shift); /* compute upgoing Green's function G^+,- */ if (file_gmin != NULL) { @@ -629,7 +637,7 @@ int main (int argc, char **argv) } } /* Apply mute with window for Gmin */ - applyMute(Gmin, muteW, smooth, 1, Nfoc, nxs*nys, nts, ixpos, npos, shift); + applyMute(Gmin, muteW, smooth, 4, Nfoc, nxs*nys, nts, ixpos, npos, shift); } /* end if Gmin */ /* compute downgoing Green's function G^+,+ */ @@ -655,6 +663,8 @@ int main (int argc, char **argv) } } } + /* Apply mute with window for Gplus */ + applyMute(Gplus, muteW, smooth, 4, Nfoc, nxs*nys, nts, ixpos, npos, shift); } /* end if Gplus */ t2 = wallclock_time(); diff --git a/marchenko3D/readTinvData3D.c b/marchenko3D/readTinvData3D.c index c6a9e45..845d080 100644 --- a/marchenko3D/readTinvData3D.c +++ b/marchenko3D/readTinvData3D.c @@ -122,25 +122,28 @@ int readTinvData3D(char *filename, float *xrcv, float *yrcv, float *xsrc, float xnx[isyn]=itrace; /* alternative find maximum at source position */ - dxrcv = (gx1 - gx0)*scl/(float)(nx1-1); - dyrcv = (gy1 - gy0)*scl/(float)(ny1-1); - //imax = NINT(((sx_shot-gx0)*scl)/dxrcv); + if (nx1>1) dxrcv = (gx1 - gx0)*scl/(float)(nx1-1); + else dxrcv = (gx1 - gx0)*scl/(float)(1); + if (dxrcv==0.0) dxrcv=1.0; ixmax = NINT(((sx_shot-gx0)*scl)/dxrcv); + if (ny1>1) dyrcv = (gy1 - gy0)*scl/(float)(ny1-1); + else dyrcv = (gy1 - gy0)*scl/(float)(1); + if (dyrcv==0.0) dyrcv=1.0; iymax = NINT(((sy_shot-gy0)*scl)/dyrcv); if (iymax > ny1-1) { - vmess("source of y is past array, snapping to nearest y"); + vmess("source of y (%d) is past array, snapping to nearest y (%d)",iymax,ny1-1); iymax = ny1-1; } if (iymax < 0) { - vmess("source of y is before array, snapping to nearest y"); + vmess("source of y (%d) is before array, snapping to nearest y (%d)",iymax,0); iymax = 0; } if (ixmax > nx1-1) { - vmess("source of x is past array, snapping to nearest x"); + vmess("source of x (%d) is past array, snapping to nearest x (%d)",ixmax,nx1-1); ixmax = nx1-1; } if (ixmax < 0) { - vmess("source of x is before array, snapping to nearest x"); + vmess("source of x (%d) is before array, snapping to nearest x (%d)",ixmax,nx1-1); ixmax = 0; } tmax=0.0; diff --git a/marchenko3D/synthesis3D.c b/marchenko3D/synthesis3D.c index 8ab12a9..19d4c80 100644 --- a/marchenko3D/synthesis3D.c +++ b/marchenko3D/synthesis3D.c @@ -136,12 +136,21 @@ int *ixpos, int npos, double *tfft, int *isxcount, int *reci_xsrc, int *reci_xr int nfreq, size, inx; float scl; int i, j, l, m, iw, ix, k, isrc, il, ik, nxy, nxys; - float *rtrace, idxs, idys; + float *rtrace, idxs, idys, fxb, fyb, fxe, fye; complex *sum, *ctrace; int npe; static int first=1, *ircv; static double t0, t1, t; + if (fxsb < 0) fxb = 1.001*fxsb; + else fxb = 0.999*fxsb; + if (fysb < 0) fyb = 1.001*fysb; + else fyb = 0.999*fysb; + if (fxse > 0) fxe = 1.001*fxse; + else fxe = 0.999*fxse; + if (fyse > 0) fye = 1.001*fyse; + else fye = 0.999*fyse; + nxy = nx*ny; nxys = nxs*nys; @@ -149,7 +158,7 @@ int *ixpos, int npos, double *tfft, int *isxcount, int *reci_xsrc, int *reci_xr nfreq = ntfft/2+1; /* scale factor 1/N for backward FFT, * scale dt for correlation/convolution along time, - * scale dx (or dxsrc) for integration over receiver (or shot) coordinates */ + * scale dx*dy (or dxsrc*dysrc) for integration over receiver (or shot) coordinates */ scl = 1.0*dt/((float)ntfft); #ifdef _OPENMP @@ -212,7 +221,7 @@ int *ixpos, int npos, double *tfft, int *isxcount, int *reci_xsrc, int *reci_xr /* Loop over total number of shots */ if (reci == 0 || reci == 1) { for (k=0; k<nshots; k++) { - if ((xsrc[k] < 0.999*fxsb) || (xsrc[k] > 1.001*fxse) || (ysrc[k] < 0.999*fysb) || (ysrc[k] > 1.001*fyse)) continue; + if ((xsrc[k] < fxb) || (xsrc[k] > fxe) || (ysrc[k] < fyb) || (ysrc[k] > fye)) continue; isrc = NINT((ysrc[k] - fysb)/dys)*nxs+NINT((xsrc[k] - fxsb)/dxs); inx = xnx[k]; /* number of traces per shot */ @@ -234,8 +243,8 @@ int *ixpos, int npos, double *tfft, int *isxcount, int *reci_xsrc, int *reci_xr /* compute integral over receiver positions */ /* multiply R with Fop and sum over nx */ memset(&sum[0].r,0,nfreq*2*sizeof(float)); - for (j = nw_low, m = 0; j <= nw_high; j++, m++) { - for (i = 0; i < inx; i++) { + for (i = 0; i < inx; i++) { + for (j = nw_low, m = 0; j <= nw_high; j++, m++) { ix = ircv[k*nxy+i]; sum[j].r += Refl[k*nw*nxy+m*nxy+i].r*Fop[l*nw*nxys+m*nxys+ix].r - Refl[k*nw*nxy+m*nxy+i].i*Fop[l*nw*nxys+m*nxys+ix].i; diff --git a/utils/Makefile b/utils/Makefile index 3b59b4f..9d47ece 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -6,7 +6,7 @@ LIBS += -L$L -lgenfft -lm $(LIBSM) #OPTC += -openmp #OPTC += -g -O0 -ALL: makemod makewave extendModel fconv correigen green basop syn2d mat2su ftr1d +ALL: makemod makewave extendModel fconv correigen green green3D basop syn2d mat2su ftr1d SRCM = \ makemod.c \ @@ -84,6 +84,17 @@ SRCG = green.c \ docpkge.c \ getpars.c +SRCG3 = green3D.c \ + getFileInfo.c \ + getrecpos3D.c \ + readData.c \ + writeData.c \ + wallclock_time.c \ + verbosepkg.c \ + atopkge.c \ + docpkge.c \ + getpars.c + SRCB = basop.c \ getFileInfo.c \ kxwfilter.c \ @@ -152,6 +163,11 @@ OBJG = $(SRCG:%.c=%.o) green: $(OBJG) $(CC) $(LDFLAGS) $(OPTC) $(CFLAGS) -o green $(OBJG) $(LIBS) +OBJG3 = $(SRCG3:%.c=%.o) + +green3D: $(OBJG3) + $(CC) $(LDFLAGS) $(OPTC) $(CFLAGS) -o green3D $(OBJG3) $(LIBS) + OBJB = $(SRCB:%.c=%.o) basop: $(OBJB) @@ -172,23 +188,24 @@ OBJT = $(SRCT:%.c=%.o) ftr1d: $(OBJT) $(CC) $(LDFLAGS) $(OPTC) $(CFLAGS) -o ftr1d $(OBJT) $(LIBS) -install: makemod makewave extendModel fconv correigen green basop syn2d mat2su ftr1d +install: makemod makewave extendModel fconv correigen green green3D basop syn2d mat2su ftr1d cp makemod $B cp makewave $B cp extendModel $B cp fconv $B cp correigen $B cp green $B + cp green3D $B cp basop $B cp syn2d $B cp mat2su $B cp ftr1d $B clean: - rm -f core $(OBJM) makemod $(OBJW) makewave $(OBJE) extendModel $(OBJF) fconv $(OBJG) $(OBJC) correigen green $(OBJB) basop $(OBJJ) syn2d $(OBJS) mat2su $(OBJA) ftr1d $(OBJT) + rm -f core $(OBJM) makemod $(OBJW) makewave $(OBJE) extendModel $(OBJF) fconv $(OBJG) $(OBJC) correigen green $(OBJG3) green3D $(OBJB) basop $(OBJJ) syn2d $(OBJS) mat2su $(OBJA) ftr1d $(OBJT) realclean: clean - rm -f $B/makemod $B/makewave $B/extendModel $B/fconv $B/correigen $B/green $B/basop $B/syn2d $B/mat2su $B/ftr1d + rm -f $B/makemod $B/makewave $B/extendModel $B/fconv $B/correigen $B/green $B/green3D $B/basop $B/syn2d $B/mat2su $B/ftr1d diff --git a/utils/getrecpos3D.c b/utils/getrecpos3D.c new file mode 100644 index 0000000..85e9623 --- /dev/null +++ b/utils/getrecpos3D.c @@ -0,0 +1,135 @@ +#include "par.h" +#include <time.h> +#include <stdlib.h> +#include <stdio.h> +#include <math.h> +#include <assert.h> + +/** +* read receiver positions used in green +* +* AUTHOR: +* Jan Thorbecke (janth@xs4all.nl) +* The Netherlands +**/ + +#define NINT(x) ((int)((x)>0.0?(x)+0.5:(x)-0.5)) +#ifndef MAX +#define MAX(x,y) ((x) > (y) ? (x) : (y)) +#endif +#ifndef MIN +#define MIN(x,y) ((x) < (y) ? (x) : (y)) +#endif +#define SGN(x) ((x) < 0 ? -1.0 : 1.0) +#ifndef ABS +#define ABS(x) ((x) < 0 ? -(x) : (x)) +#endif + +void getrecpos3D(float *xi, float *yi, float *zi, int nx, int ny, float *xrcv, float *yrcv, float *zrcv, int verbose) +{ + int nrx, nry, i, j, l, ndeltx, ndelty, np, lint, seed; + long idum; + float xprev, yprev, zprev, deltx, delty, deltz, dxrcv, dyrcv, dzrcv, var, irr, maxirr; + float rrcv, dphi, oxrcv, oyrcv, ozrcv; + + nrx = countparval("xrcv"); + nry = countparval("yrcv"); + if(!getparfloat("dxrcv",&dxrcv)) dxrcv = 15; + if(!getparfloat("dyrcv",&dyrcv)) dyrcv = 15; + if(!getparfloat("var", &var)) var=0; + if(!getparint("lint", &lint)) lint=1; + if(!getparint("seed", &seed)) seed=0; + + /* check if receiver positions on a circle are defined */ + if (getparfloat("rrcv", &rrcv)) { + if (!getparfloat("dphi",&dphi)) dphi=2.0; + if (!getparfloat("oxrcv",&oxrcv)) oxrcv=0.0; + if (!getparfloat("oyrcv",&oyrcv)) oyrcv=0.0; + if (!getparfloat("ozrcv",&ozrcv)) ozrcv=0.0; + + np = 0; + for (i=0; i<ny; i++) { + for (j=0; j<ny; j++) { + xi[np] = oxrcv+rrcv*cos(((i*dphi)/360.0)*(2.0*M_PI)); + yi[np] = oyrcv+rrcv*cos(((i*dphi)/360.0)*(2.0*M_PI)); + zi[np++] = ozrcv+rrcv*sin(((i*dphi)/360.0)*(2.0*M_PI)); + if (verbose>4) fprintf(stderr,"Receiver Circle: xrcv[%d]=%f yrcv=%f zrcv=%f\n", i, xi[i], yi[i], zi[i]); + } + } + return; + } + + + if (var <= 0) { + if (lint == 1) { + xprev = xrcv[0]; + yprev = yrcv[0]; + zprev = zrcv[0]; + np = 0; + for (i = 1; i < nry; i++) { + for (l = 1; l < nrx; l++) { + deltx = xrcv[i] - xprev; + delty = yrcv[i] - yprev; + deltz = zrcv[i] - zprev; + ndeltx = NINT(ABS(deltx/dxrcv)); + ndelty = NINT(ABS(delty/dyrcv)); + dzrcv = deltz/ndeltx; + for (j = 0; j < ndeltx; j++) { + zi[np] = zprev + j*dzrcv; + yi[np] = yprev + i*dyrcv; + xi[np++] = xprev + j*dxrcv; + } + xprev = xrcv[i*nx+l]; + yprev = yrcv[i*nx+l]; + zprev = zrcv[i*nx+l]; + } + xi[i*nx+nx-1] = xrcv[nrx-1]; + yi[i*nx+nx-1] = yrcv[nrx-1]; + zi[i*nx+nx-1] = zrcv[nrx-1]; + } + } + else { + for (i = 0; i < nry; i++) { + for (l = 0; l < nrx; l++) { + xi[i*nx+l] = xrcv[l]; + yi[i*nx+l] = yrcv[i]; + zi[i*nx+l] = zrcv[l]; + } + } + } + } + else { + xprev = xrcv[0]; + yprev = yrcv[0]; + zprev = zrcv[0]; + np = 0; + maxirr = 0; + idum = (long) seed; + srand48(idum); + for (i = 1; i < nrx; i++) { + deltx = xrcv[i] - xprev; + deltz = zrcv[i] - zprev; + ndeltx = NINT(ABS(deltx/dxrcv)); + dzrcv = deltz/ndeltx; + for (j = 0; j < ndeltx; j++) { + irr = var*((float)drand48()); + if (fabs(irr) > maxirr) maxirr = fabs(irr); + zi[np] = zprev + j*dzrcv; + xi[np++] = xprev + j*dxrcv + irr; + if (verbose==13)vmess("xrcv %d = %f (%f)",np-1,xi[np-1], irr); + } + xprev = xrcv[i]; + zprev = zrcv[i]; + } + irr = var*((float)drand48()); + if (fabs(irr) > maxirr) maxirr = fabs(irr); + xi[nx-1] = xrcv[nrx-1] + irr; + zi[nx-1] = zrcv[nrx-1]; + if (verbose) vmess("maximum error in receiver position %f", maxirr); + if (verbose==13) vmess("xrcv %d = %f (%f)", nx-1, xi[nx-1], irr); + } + + if (verbose) vmess("getrecpos number of receivers = %d", np+1); + + return; +} diff --git a/utils/green3D b/utils/green3D new file mode 100755 index 0000000000000000000000000000000000000000..cc36382df2db967794d33a3b4afe6e4bb4e56e07 GIT binary patch literal 140784 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
#Am4i&XFYanD8p{zE~@Wb=~ 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 F|39>XvTgtX literal 0 HcmV?d00001 diff --git a/utils/green3D.c b/utils/green3D.c new file mode 100644 index 0000000..69daa8e --- /dev/null +++ b/utils/green3D.c @@ -0,0 +1,761 @@ +#include <genfft.h> +#include "par.h" +#include "segy.h" +#include <time.h> +#include <stdlib.h> +#include <stdio.h> +#include <math.h> +#include <assert.h> + +#define NINT(x) ((int)((x)>0.0?(x)+0.5:(x)-0.5)) +#ifndef MAX +#define MAX(x,y) ((x) > (y) ? (x) : (y)) +#endif +#ifndef MIN +#define MIN(x,y) ((x) < (y) ? (x) : (y)) +#endif +#define SGN(x) ((x) < 0 ? -1.0 : 1.0) + + +#ifndef COMPLEX +typedef struct _complexStruct { /* complex number */ + float r,i; +} complex; +#endif/* complex */ + +int disp_fileinfo(char *file, int n1, int n2, float f1, float f2, float d1, float d2, segy *hdrs); +int getFileInfo(char *filename, int *n1, int *n2, int *ngath, float *d1, float *d2, float *f1, float *f2, float *xmin, float *xmax, float *sclsxgx, int *nxm); +int readData(FILE *fp, float *data, segy *hdrs, int n1); + +void xwgreen3D(float *data, int nt, int nx, int ny, float dt, float fmin, float fmax, float *xi, float xsrc, + float dx, float *yi, float ysrc, float dy, float *zi, float zsrc, float c, float cs, float rho, + float *wavelet, float dipx, float maxdip, int far, int p_vz, int dip, int verbose); + + +/*********************** self documentation **********************/ +char *sdoc[] = { +" ", +" green - calculation of 2D Greens function in homogenoeus medium based one exact expressions", +" ", +" green c= zsrc1= [optional parameters]", +" ", +" Required parameters:", +" ", +" c= ....................... P-wave velocity", +" cs=0.7*c ................. S-wave velocity", +" zsrc1= ................... depth of source", +" ", +" Optional parameters:", +" ", +" file_out= ................ output file (default SU-pipe)", +" RECEIVER POSITIONS ", +" xrcv=-1500,1500 .......... x-position's of receivers (array)", +" yrcv=-1500,1500 .......... y-position's of receivers (array)", +" zrcv=0,0 ................. z-position's of receivers (array)", +" dxrcv=15 ................. step in receiver x-direction", +" dyrcv=15 ................. step in receiver y-direction", +" var=0 .................... variance for irregular sampling (dxrcv +- var)", +" seed=0 ................... seed for random generator", +" lint=1 ................... linear interpolate between the rcv points", +" rrcv= .................... radius for receivers on a circle ", +" oxrcv=0.0 ................ x-center position of circle", +" oyrcv=0.0 ................ y-center position of circle", +" ozrcv=0.0 ................ z-center position of circle", +" dphi=2 ................... angle between receivers on circle ", +" SOURCE POSITIONS ", +" xsrc1=0.0 ................ x-position of first source", +" xsrc2=xsrc1 .............. x-position of last source", +" dxsrc=0.0 ................ step in source x-direction", +" ysrc1=0.0 ................ y-position of first source", +" ysrc2=ysrc1 .............. y-position of last source", +" dysrc=0.0 ................ step in source y-direction", +" zsrc2=zsrc1 .............. depth position (z) of last source", +" dzsrc=0.0 ................ step in source z-direction", +" SAMPLING AND SOURCE DEFINITION ", +" file_src=spike ........... source wavelet (overrules dt)", +" nt=256 ................... number of samples", +" dt=0.004 ................. stepsize in time-direction ", +" fmin=0 ................... minimum frequency", +" fmax=70 .................. maximum frequency", +" dipx=0 ................... local dip of the dipole in x-direction", +" dipy=0 ................... local dip of the dipole in y-direction", +" dip=1 .................... 1; dipole 0; monopole source", +" rho=1000 ................. density", +" FIELD DEFINITION ", +" far=0 .................... farfield approximation 0=off)", +" p_vz=0 .................. P or Vz field (0 = P field, 1 = Vz field)", +" Fz=0 .................... Force source in z with Vz receivers", +" Fx=0 .................... Force source in x with Vz receivers", +" maxdip=90 ................ maximum angle (degrees) to be computed ", +" sum=0 .................... sum all sources", +" verbose=0 ................ silent option; >0 display info", +"", +" The P or Vz field of a dipole source at depth z below the receivers", +" in a homogeneous 2-D medium is calculated.", +" ", +" author : Jan Thorbecke : 23-03-1995 (janth@xs4all.nl)", +" : revision 2010", +" ", +NULL}; +/**************** end self doc ***********************************/ + +int main(int argc, char **argv) +{ + FILE *fp_in, *fp_out; + int n1, n2, n3, i, j, l, nrx, nry, nrz, dip; + int far, p_vz, nt, nx, ny, Nsx, Nsy, is, isy, sum, lint, verbose; + int size, ntraces, ngath, Fz, Fx; + float scl, xmin, xmax, ymin, ymax; + float dx, dy, dt, d1, d2, d3, fmin, fmax, f1, f2, f3, c, cs, rho; + float *data, *wavelet, *tmpdata, dipx, dipy, xsrc1, xsrc2, ysrc1, ysrc2; + float *xrcv, *yrcv, *zrcv, *xi, *yi, *zi, x0, y0, maxdip; + float rrcv, dphi, oxrcv, ozrcv; + float zsrc1, zsrc2, dxsrc, dysrc, dzsrc, xsrc, ysrc, zsrc, dxrcv, dyrcv; + char *file_src, *file_out; + size_t nwrite; + segy *hdrs; + +/* ========================= Reading parameters ====================== */ + + initargs(argc, argv); + requestdoc(1); + + if(!getparint("verbose", &verbose)) verbose = 0; + if(!getparstring("file_out", &file_out)){ + if (verbose) vwarn("parameter file_out not found, assume pipe"); + file_out = NULL; + } + if(!getparstring("file_src", &file_src)) file_src = NULL; + if(!getparfloat("c", &c)) verr("velocity must be specified."); + if(!getparfloat("cs", &cs)) cs=0.7*c; + if(!getparfloat("zsrc1", &zsrc1)) verr("zsrc1(depth) must be specified."); + if(!getparint("lint", &lint)) lint=1; + if(!getparfloat("maxdip", &maxdip)) maxdip=90.0; + + nrx = countparval("xrcv"); + nry = countparval("yrcv"); + // nrz = countparval("zrcv"); + nrz = 0; + if(!getparfloat("dxrcv",&dxrcv)) dxrcv = 15; + if(!getparfloat("dyrcv",&dyrcv)) dyrcv = 15; + + if (nrx != 0 && nry != 0 && nrz == 0) { + if (nrx != 2) verr("xrcv should have only two values"); + if (nry != 2) verr("yrcv should have only two values"); + xrcv = (float *)malloc(nrx*sizeof(float)); + yrcv = (float *)malloc(nry*sizeof(float)); + getparfloat("xrcv",xrcv); + getparfloat("yrcv",yrcv); + nx = NINT((xrcv[1] - xrcv[0])/dxrcv) + 1; + ny = NINT((yrcv[1] - yrcv[0])/dyrcv) + 1; + xi = (float *)malloc(nx*ny*sizeof(float)); + yi = (float *)malloc(nx*ny*sizeof(float)); + zi = (float *)malloc(nx*ny*sizeof(float)); + x0 = xrcv[0]; + y0 = yrcv[0]; + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + xi[i*nx+j] = x0 + j*dxrcv; + yi[i*nx+j] = y0 + i*dyrcv; + zi[i*nx+j] = 0; + } + } + } + else if (nrx == 0 && nry == 0 && nrz == 0) { + nx = NINT((3000)/dxrcv) + 1; + ny = NINT((3000)/dyrcv) + 1; + xi = (float *)malloc(nx*ny*sizeof(float)); + yi = (float *)malloc(nx*ny*sizeof(float)); + zi = (float *)malloc(nx*ny*sizeof(float)); + x0 = -1500; + y0 = -1500; + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + xi[i*nx+j] = x0 + j*dxrcv; + yi[i*nx+j] = y0 + i*dyrcv; + zi[i*nx+j] = 0; + } + } + } + else verr("Number of xrcv and yrcv values are not equal"); + + if (verbose) vmess("number of receivers nx = %d, ny = %d total = %d", nx, ny, nx*ny); + if (verbose == 13) { + for (j = 0; j < ny; j++) { + for (i = 0; i < nx; i++) { + vmess("xi = %d yi = %d x = %f y=%f z = %f", i, j, xi[j*nx+i], yi[j*nx+i], zi[j*nx+i]); + } + } + } + + if(!getparfloat("xsrc1", &xsrc1)) xsrc1=0; + if(!getparfloat("xsrc2", &xsrc2)) xsrc2=xsrc1; + if(!getparfloat("dxsrc", &dxsrc)) dxsrc=0.0; + if(!getparfloat("ysrc1", &ysrc1)) ysrc1=0; + if(!getparfloat("ysrc2", &ysrc2)) ysrc2=ysrc1; + if(!getparfloat("dysrc", &dysrc)) dysrc=0.0; + if(!getparfloat("zsrc2", &zsrc2)) zsrc2=zsrc1; + if(!getparfloat("dzsrc", &dzsrc)) dzsrc=0; + if(!getparint("nt", &nt)) nt = 256; + if(!getparfloat("fmin", &fmin)) fmin = 0.0; + if(!getparfloat("fmax", &fmax)) fmax = 70.0; + if(!getparfloat("dipx", &dipx)) dipx = 0.0; + if(!getparfloat("dipy", &dipy)) dipy = 0.0; + if(!getparfloat("rho", &rho)) rho = 1000.0; + if(!getparint("far", &far)) far = 0; + if(!getparint("p_vz", &p_vz)) p_vz = 0; + if(!getparint("Fz", &Fz)) Fz = 0; + if(!getparint("Fx", &Fx)) Fx = 0; + if(!getparint("dip", &dip)) dip = 1; + if(!getparint("sum", &sum)) sum = 0; + if(Fz) p_vz=2; + if(Fx) p_vz=3; + +/* ========================= Opening wavelet file ====================== */ + + if (file_src == NULL){ + if(!getparfloat("dt", &dt)) dt = 0.004; + wavelet = (float *)calloc(nt,sizeof(float)); + wavelet[0] = 1.0; + } + else { + if (verbose) vmess("Reading wavelet from file %s.", file_src); + ngath = 1; + getFileInfo(file_src, &n1, &n2, &ngath, &d1, &d2, &f1, &f2, &xmin, &xmax, &scl, &ntraces); + + fp_in = fopen(file_src, "r"); + if (fp_in == NULL) verr("error on opening input file_src=%s", file_src); + + tmpdata = (float *)calloc(n1*n2,sizeof(float)); + hdrs = (segy *) calloc(n2,sizeof(segy)); + + n2 = readData(fp_in, tmpdata, hdrs, n1); + fclose(fp_in); + if (verbose) { + disp_fileinfo(file_src, n1, n2, f1, f2, d1, d2, hdrs); + } + dt = d1; + wavelet = (float *)calloc(nt,sizeof(float)); + + if (n1 <= nt) { + for (i = 0; i < n1; i++) wavelet[i] = tmpdata[i]; + for (i = n1; i < nt; i++) wavelet[i] = 0.0; + } + else { + vwarn("file_src has more samples than output"); + for (i = 0; i < nt; i++) wavelet[i] = tmpdata[i]; + } + if( tmpdata ) free(tmpdata); + if( hdrs ) free( (void *) hdrs); + } + +/* ============ INITIALIZE AND CHECK PARAMETERS =============== */ + + if (xsrc2==xsrc1) Nsx = 1; + else Nsx = NINT((xsrc2 - xsrc1)/dxsrc) + 1; + if (ysrc2==ysrc1) Nsy = 1; + else Nsy = NINT((ysrc2 - ysrc1)/dysrc) + 1; + + if (verbose) vmess("Number of shot records to generate x = %d y = %d", Nsx, Nsy); + if (Nsx > 1 && Nsy > 1) { + dxsrc = (xsrc2-xsrc1)/(Nsx-1); + dysrc = (ysrc2-ysrc1)/(Nsy-1); + dzsrc = (zsrc2-zsrc1)/(Nsx-1); + if (verbose) { + vmess("dxsrc = %f", dxsrc); + vmess("dysrc = %f", dysrc); + vmess("dzsrc = %f", dzsrc); + } + } + + size = nt * nx *ny; + dx = dxrcv; + dy = dyrcv; + tmpdata = (float *)calloc(size,sizeof(float)); + data = (float *)calloc(size,sizeof(float)); + hdrs = (segy *) calloc(nx*ny,sizeof(segy)); + for (i = 0; i < ny; i++) { + for(j = 0; j < nx; j++) { + hdrs[i*nx+j].f1= 0.0; + hdrs[i*nx+j].f2= x0; + hdrs[i*nx+j].d1= dt; + hdrs[i*nx+j].d2= dx; + hdrs[i*nx+j].ns= nt; + hdrs[i*nx+j].dt= (int)1000000*dt; + hdrs[i*nx+j].trwf= nx*ny; + hdrs[i*nx+j].tracl= i*nx+j+1; + hdrs[i*nx+j].tracf= i*nx+j+1; + hdrs[i*nx+j].gx = (x0 + j*dx)*1000; + hdrs[i*nx+j].gy = (y0 + i*dy)*1000; + hdrs[i*nx+j].scalco = -1000; + hdrs[i*nx+j].trid = TREAL; + } + } + if (file_out==NULL) fp_out=stdout; + else fp_out = fopen(file_out,"w"); + if (fp_out == NULL) verr("error in creating output file"); + + for (isy = 0; isy < Nsy; isy++) { + for (is = 0; is < Nsx; is++) { + xsrc = xsrc1 + is*dxsrc; + ysrc = ysrc1 + isy*dysrc; + zsrc = zsrc1 + is*dzsrc; + if (verbose) vmess("xsrc = %f ysrc=%f zsrc = %f", xsrc, ysrc, zsrc); + + xwgreen3D(data,nt,nx,ny,dt,fmin,fmax,xi,xsrc,dx,yi,ysrc,dy,zi,zsrc,c,cs,rho,wavelet, + dipx, maxdip, far, p_vz, dip, verbose); + + for (l = 0; l < ny; l++) { + for (i = 0; i < nx; i++) { + for (j = 0; j < nt; j++) tmpdata[l*nx*nt+i*nt+j] = data[l*nx*nt+i*nt+j]; + hdrs[l*nx+i].sx = NINT(xsrc*1000); + hdrs[l*nx+i].sy = NINT(ysrc*1000); + hdrs[l*nx+i].scalco = -1000; + hdrs[l*nx+i].offset = xi[l*nx+i]-xsrc; + hdrs[l*nx+i].gx = NINT(xi[l*nx+i]*1000); + hdrs[l*nx+i].gy = NINT(yi[l*nx+i]*1000); + hdrs[l*nx+i].fldr = isy*Nsx+is+1; + hdrs[l*nx+i].trwf = nx*ny; + nwrite = fwrite( &hdrs[l*nx+i], 1, TRCBYTES, fp_out); + assert(nwrite == TRCBYTES); + nwrite = fwrite( &tmpdata[l*nx*nt+i*nt], sizeof(float), nt, fp_out); + assert(nwrite == nt); + } + } + } + } + + if( xi ) free(xi); + if( yi ) free(yi); + if( zi ) free(zi); + if( wavelet ) free( wavelet ); + + fclose(fp_out); + + if( data ) free(data); + if( tmpdata ) free(tmpdata); + if( hdrs ) free( hdrs); + + exit ( 0 ); +} + +/*************************************************************************** +* +* Calculation of pulse response in homogeneous medium +* +* +***************************************************************************/ + +void xwgreen3D(float *data, int nt, int nx, int ny, float dt, float fmin, float fmax, float *xi, float xsrc, float dx, float *yi, float ysrc, float dy, float *zi, float zsrc, float c, float cs, float rho, float *wavelet, float dipx, float maxdip, int far, int p_vz, int dip, int verbose) +{ + int iomin, iomax, iom, ix, iy, nfreq, i, sign, optn; + float df, deltom, om, k, r, x, y, invr, phi, phi2, cosphi; + float *rwave, *rdata, cos2, scl, z, kp, ks, sclr; + complex *cwave, *cdata, tmp, tmp2, sum; + complex H02p, H12p, H02s, H12s, Gp, Gs; + + optn = optncr(nt); + nfreq = 1+(optn/2); + df = 1.0/(dt*optn); + deltom = 2.*M_PI*df; + iomin = (int)MIN((fmin*dt*optn), (nfreq-1)); + iomin = MAX(iomin, 1); + iomax = MIN((int)(fmax*dt*optn), (nfreq-1)); + + rdata = (float *)calloc(optn*nx*ny,sizeof(float)); + cdata = (complex *)calloc(nfreq*nx*ny,sizeof(complex)); + rwave = (float *)calloc(optn,sizeof(float)); + cwave = (complex *)calloc(nfreq,sizeof(complex)); + + for (i = 0; i < nt; i++) rwave[i] = wavelet[i]*dt; + for (i = nt; i < optn; i++) rwave[i] = 0.0; + + sign = -1; + rc1fft(rwave, cwave, optn, sign); + + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + for (iom = 0; iom < iomin; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + for (iom = iomax; iom < nfreq; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + + if (p_vz == 0) { + if (far == 0 && dip == 1) { + if (verbose) vmess("near and far P field of dipole"); + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[iy*nx+ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + if (r != 0) phi = acos(z/r); + else phi = M_PI/2; + phi2 = SGN(x)*phi - (dipx*M_PI/180.0); + cosphi = 0.25*cos(phi2)*rho; + if (fabs(phi) < maxdip*M_PI/180.0) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + k = om/c; + tmp.r = -k*cosphi*y1(k*r); + tmp.i = -k*cosphi*j1(k*r); + cdata[iy*nx*nfreq+ix*nfreq+iom].r = tmp.r*cwave[iom].r - + tmp.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = tmp.r*cwave[iom].i + + tmp.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + } + else if (far == 1 && dip == 1){ + if (verbose) vmess("far P field of dipole"); + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + if (r != 0) phi = acos(z/r); + else phi = M_PI/2; + phi2 = SGN(x)*phi - (dipx*M_PI/180.0); + cosphi = 0.5*cos(phi2)*rho/sqrt(r); + if (fabs(phi) < maxdip*M_PI/180.0) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + k = om/c; + tmp.r = sqrt(k/(2.0*M_PI))*cosphi*cos(k*r-M_PI/4.0); + tmp.i = -sqrt(k/(2.0*M_PI))*cosphi*sin(k*r-M_PI/4.0); + + cdata[iy*nx*nfreq+ix*nfreq+iom].r = tmp.r*cwave[iom].r - + tmp.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = tmp.r*cwave[iom].i + + tmp.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + } + else if (far == 0 && dip == 0){ + if (verbose) vmess("near and far P field of monopole"); + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[iy*nx+ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + if (r != 0) phi = acos(z/r); + else phi = M_PI/2; + scl = 0.25*rho; + if (fabs(phi) < maxdip*M_PI/180.0) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + k = om/c; + tmp.r = -scl*y0(k*r); + tmp.i = -scl*j0(k*r); + + cdata[iy*nx*nfreq+ix*nfreq+iom].r = tmp.r*cwave[iom].r - + tmp.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = tmp.r*cwave[iom].i + + tmp.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + } + else if (far == 1 && dip == 0){ + if (verbose) vmess("far P field of monopole"); + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[iy*nx+ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + if (r != 0) phi = acos(z/r); + else phi = M_PI*0.5; + scl = 0.5*rho/sqrt(r); + if (fabs(phi) <= M_PI*(maxdip/180.0)) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + k = om/c; + tmp.r = -sqrt(1.0/(2.0*M_PI*k))*scl*sin(k*r-M_PI/4.0); + tmp.i = -sqrt(1.0/(2.0*M_PI*k))*scl*cos(k*r-M_PI/4.0); + + cdata[iy*nx*nfreq+ix*nfreq+iom].r = tmp.r*cwave[iom].r - + tmp.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = tmp.r*cwave[iom].i + + tmp.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + } + } + else if (p_vz == 1) { + if (dip == 1) { + if (far == 0) { + if (verbose) vmess("near and far Vz field of dipole"); + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[iy*nx+ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + invr = -0.25/(c); + if (r != 0) phi = acos(z/r); + else phi = M_PI/2; + phi2 = SGN(x)*phi - (dipx*M_PI/180.0); + cosphi = cos(phi2); + cos2 = cosphi*cosphi; + if (fabs(phi) < maxdip*M_PI/180.0) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + k = om/c; + tmp.r = k*cos2*invr*j0(k*r); + tmp.i = -k*cos2*invr*y0(k*r); + tmp2.r = k*(1-2*cos2)*invr*j1(k*r)/(k*r); + tmp2.i = -k*(1-2*cos2)*invr*y1(k*r)/(k*r); + sum.r = tmp.r + tmp2.r; + sum.i = tmp.i + tmp2.i; + + cdata[iy*nx*nfreq+ix*nfreq+iom].r = sum.r*cwave[iom].r - + sum.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = sum.r*cwave[iom].i + + sum.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + } + else { + if (verbose) vmess("far Vz field of dipole"); + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[iy*nx+ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + invr = -0.5/(c*sqrt(r)); + if (r != 0) phi = acos(z/r); + else phi = M_PI/2; + phi2 = SGN(x)*phi - (dipx*M_PI/180.0); + cosphi = cos(phi2); + cos2 = cosphi*cosphi; + if (fabs(phi) < maxdip*M_PI/180.0) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + k = om/c; + tmp.r = sqrt(k/(2.0*M_PI))*invr*cos2*cos(k*r-M_PI/4.0); + tmp.i = -sqrt(k/(2.0*M_PI))*invr*cos2*sin(k*r-M_PI/4.0); + + cdata[iy*nx*nfreq+ix*nfreq+iom].r = tmp.r*cwave[iom].r - + tmp.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = tmp.r*cwave[iom].i + + tmp.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + } + } + else { + if (verbose) vmess("near and far Vz field of monopole"); + + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[iy*nx+ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + if (r != 0) phi = acos(z/r); + else phi = M_PI/2; + phi2 = SGN(x)*phi - (dipx*M_PI/180.0); + cosphi = cos(phi2); + if (fabs(phi) < maxdip*M_PI/180.0) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + k = om/c; + tmp.i = -cosphi*y1(k*r)/(4.0*c); + tmp.r = cosphi*j1(k*r)/(4.0*c); + cdata[iy*nx*nfreq+ix*nfreq+iom].r = tmp.r*cwave[iom].r - + tmp.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = tmp.r*cwave[iom].i + + tmp.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + } + } + else if (p_vz == 2) { /* Fz source with Vz receivers Fz=1 == p_vz=2 */ + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[iy*nx+ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + + if (r != 0) phi = acos(z/r); + else phi = M_PI/2; + phi2 = SGN(x)*phi - (dipx*M_PI/180.0); + cosphi = cos(phi2); + sclr = (z*z-x*x-y*y)/(r); + if (fabs(phi) < maxdip*M_PI/180.0) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + kp = om/c; + ks = om/cs; + H02p.r = j0(kp*r); + H02p.i = -y0(kp*r); + H12p.r = j1(kp*r); + H12p.i = -y1(kp*r); + + H02s.r = j0(ks*r); + H02s.i = -y0(ks*r); + H12s.r = j1(ks*r); + H12s.i = -y1(ks*r); + + Gp.r = kp/(4*om*rho*r*r)*(-z*z*kp*H02p.r + sclr*H12p.r); + Gp.i = kp/(4*om*rho*r*r)*(-z*z*kp*H02p.i + sclr*H12p.i); + + Gs.r = ks/(4*om*rho*r*r)*(-z*z*ks*H02s.r + sclr*H12s.r); + Gs.i = ks/(4*om*rho*r*r)*(-z*z*ks*H02s.i + sclr*H12s.i); + + tmp.i = (-1.0/om)*((om/(4*rho*cs*cs))*(H02s.r) - Gp.r + Gs.r); + tmp.r = ( 1.0/om)*((om/(4*rho*cs*cs))*(H02s.i) - Gp.i + Gs.i); + + cdata[iy*nx*nfreq+ix*nfreq+iom].r = tmp.r*cwave[iom].r - + tmp.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = tmp.r*cwave[iom].i + + tmp.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + + } + else if (p_vz == 3) { /* Fx source with Vz receivers Fx=1 == p_vz=3 */ + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + x = xi[iy*nx+ix] - xsrc; + y = yi[iy*nx+ix] - ysrc; + z = fabs(zi[iy*nx+ix] - zsrc); + r = sqrt(x*x + y*y + z*z); + + if (r != 0) phi = acos(z/r); + else phi = M_PI/2; + phi2 = SGN(x)*phi - (dipx*M_PI/180.0); + cosphi = cos(phi2); + scl = (z*x*y)/(4.0*r*r*rho); + if (fabs(phi) < maxdip*M_PI/180.0) { + for (iom = iomin; iom <= iomax; iom++) { + om = iom*deltom; + kp = om/c; + ks = om/cs; + H02p.r = kp*kp*j0(kp*r); + H02p.i = -kp*kp*y0(kp*r); + H12p.r = 2.0*kp*j1(kp*r)/r; + H12p.i = -2.0*kp*y1(kp*r)/r; + + H02s.r = ks*ks*j0(ks*r); + H02s.i = -ks*ks*y0(ks*r); + H12s.r = 2.0*ks*j1(ks*r)/r; + H12s.i = -2.0*ks*y1(ks*r)/r; + + tmp.i = (scl/(om*om))*((H02p.r-H12p.r) - (H02s.r-H12s.r)); + tmp.r = -(scl/(om*om))*((H02p.i-H12p.i) - (H02s.i-H12s.i)); + + cdata[iy*nx*nfreq+ix*nfreq+iom].r = tmp.r*cwave[iom].r - + tmp.i*cwave[iom].i; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = tmp.r*cwave[iom].i + + tmp.i*cwave[iom].r; + } + } + else { + for (iom = iomin; iom <= iomax; iom++) { + cdata[iy*nx*nfreq+ix*nfreq+iom].r = 0.0; + cdata[iy*nx*nfreq+ix*nfreq+iom].i = 0.0; + } + } + } + } + + } + + + scl = df; + sign = 1; + crmfft(&cdata[0], &rdata[0], optn, nx*ny, nfreq, optn, sign); + for (iy = 0; iy < ny; iy++) { + for (ix = 0; ix < nx; ix++) { + for (i = 0; i < nt; i++) { + data[iy*nx*nt+ix*nt+i] = scl*rdata[iy*nx*optn+ix*optn+i]; + } + } + } + + free(cdata); + free(cwave); + free(rdata); + free(rwave); + + return; +} -- GitLab