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

📄 taper.c

📁 seismic software,very useful
💻 C
字号:
#include "rmig.h"/* amplitude tapering arount predicted arrival times *//*    input:	nt		number of samples of trace	t0		time of first sample (in s)	dt 		sampling interval (in s)	trace[nt] 	trace to be tapered 	nray		number of rays computed at this trace location 	tray[nray]	arrival times of the rays  (in s)	lpass 		length of passing zone at each side of arrival time			(in s)	ltaper 		length of tapering zone at each side of passing zones			(in s)   output:	trace[nt]       tapered trace output   author:	zhiming li	      		3/4/93*/void taper(int nt, float t0, float dt, float *trace, int nray, float *tray,	float lpass, float ltaper) {	int *index;	float *amp, tmp;	int it;	int lt, lp;	int ir, ir1, ir2, ip2, ip1, it2, it1;	int i1,i2;	if(lpass>0.5*nt*dt) return;	tmp = lpass/dt + 0.5;	lp = tmp;	index = (int*) malloc(nray*sizeof(int));	if(ltaper>=0.) {		tmp = ltaper/dt + 0.5;		lt = tmp;		amp = (float*) malloc(lt*sizeof(float));		tmp = 0.;		if(lt>0.) tmp = 1./lt;		for(it=0;it<lt;it++) {			amp[it] = (lt - it)*tmp;		}	}	for(ir=0;ir<nray;ir++) index[ir] = ir;       	qkisort(nray,tray,index);	/* before first arrival time */	tmp = (tray[index[0]]-t0)/dt + 0.5;	ir2 = tmp;	ip2 = ir2 -lp;	it2 = ip2 - lt;	ir1 = 0;	it1 = 0;	ip1 = 0;	if(ip1<ip2) {		if(ltaper>=0.) {			if(it1>ip2) it1 = ip2;			i1 = (ip1>=0)?ip1:0;			i2 = (it1<nt)?it1:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*amp[it-ip1];			}			if(it2<ip1) it2 = ip1;			i1 = (it2>=0)?it2:0;			i2 = (ip2<nt)?ip2:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*amp[ip2-it-1];			}			i1 = (it1>=0)?it1:0;			i2 = (it2<nt)?it2:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = 0.;			}		}else{			it2 = 0;			tmp = ip2 - it2;			if(tmp!=0.) tmp = 1./tmp;			i1 = (it2>=0)?it2:0;			i2 = (ip2<nt)?ip2:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*(it-it2+1)*tmp;			}		}	}/* between first and last arrival times */        for(ir=0;ir<nray-1;ir++) {		tmp = (tray[index[ir]]-t0)/dt + 0.5;		ir1 = tmp;		ip1 = ir1 + lp;		it1 = ip1 + lt;		tmp = (tray[index[ir+1]]-t0)/dt + 0.5;		ir2 = tmp;		ip2 = ir2 - lp;		it2 = ip2 - lt;		if(ip1>=ip2) continue;		if(ltaper>=0.) {			if(it1>ip2) it1 = ip2;			i1 = (ip1>=0)?ip1:0;			i2 = (it1<nt)?it1:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*amp[it-ip1];			}			if(it2<ip1) it2 = ip1;			i1 = (it2>=0)?it2:0;			i2 = (ip2<nt)?ip2:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*amp[ip2-it-1];			}			i1 = (it1>=0)?it1:0;			i2 = (it2<nt)?it2:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = 0.;			}		} else {			it1 = (ip1 + ip2)/2;			it2 = it1+1;			tmp = it1-ip1;			if(tmp!=0.) tmp = 1./tmp;			i1 = (ip1>=0)?ip1:0;			i2 = (it1<nt)?it1:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*(it1-it)*tmp;			}			tmp = ip2 - it2;			if(tmp!=0.) tmp = 1./tmp;			i1 = (it2>=0)?it2:0;			i2 = (ip2<nt)?ip2:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*(it-it2+1)*tmp;			}		}    	}/* after last arrival times */ 	tmp = (tray[index[nray-1]]-t0)/dt + 0.5;	ir1 = tmp;	ip1 = ir1 + lp;	it1 = ip1 + lt;	ir2 = nt - 1;	it2 = nt - 1;	ip2 = nt - 1;	if(ip1<ip2) {		if(ltaper>=0.) {			if(it1>ip2) it1 = ip2;			i1 = (ip1>=0)?ip1:0;			i2 = (it1<nt)?it1:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*amp[it-ip1];			}			if(it2<ip1) it2 = ip1;			i1 = (it2>=0)?it2:0;			i2 = (ip2<nt)?ip2:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*amp[ip2-it-1];			}			i1 = (it1>=0)?it1:0;			i2 = (it2<nt)?it2:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = 0.;			}		}else{				it1 = nt-1;			tmp = it1 - ip1; 			if(tmp!=0.) tmp = 1./tmp; 			i1 = (ip1>=0)?ip1:0;			i2 = (it1<nt)?it1:nt-1;			for(it=i1;it<i2;it++) {				trace[it] = trace[it]*tmp*(it1-it);			}					}	}        free(index);	if(ltaper>=0.) free(amp);}

⌨️ 快捷键说明

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