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

📄 ktmig.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 4 页
字号:
	ltmp = ltmp + ntau + nfft*(nf+1) + ntl*nf + nsave;	ltmp = ltmp * sizeof(float);	ltmp = ltmp + (nsout*nlout*nofo+mtrace+nf*2)*sizeof(int);	ltmp = ltmp + ntres*nf*sizeof(float);	ltmp = ltmp + nlout*nindxw*sizeof(int);	lwork = lwork + ltmp;	if(lwork>mlimit) err("mlimit too small ");		fprintf(jpfp," Total Memory used (in Byte) = %g \n", (float)lwork);	fprintf(jpfp,"\n");	/* allocation of memory */	mig = (float*) emalloc(nsout*nlcore*nofo*ntau*sizeof(float));		fold = (float*) emalloc(nsout*nlout*nofo*sizeof(float));		off = (int*) emalloc(nsout*nlout*nofo*sizeof(int));		tgain = (float*) emalloc(nt*sizeof(float));	tugain = (float*) emalloc(ntau*sizeof(float));	trace = (float*) emalloc(ntl*sizeof(float));		tras = (float*) emalloc(nt*mtrace*sizeof(float));		imutel = (int*) emalloc(mtrace*sizeof(int));	tm = (float*) emalloc(ntau*sizeof(float));	tmig = (float*) emalloc(ntau*sizeof(float));	fovt2 = (float*) emalloc(ntau*mtrace*sizeof(float));	s = (float*) emalloc(nsout*nlout*sizeof(float));	l = (float*) emalloc(nsout*nlout*sizeof(float));	vel = (float*) emalloc(ntv*sizeof(float));	ss = (float*) emalloc(mtrace*sizeof(float));	sl = (float*) emalloc(mtrace*sizeof(float));	gs = (float*) emalloc(mtrace*sizeof(float));	gl = (float*) emalloc(mtrace*sizeof(float));	iofs = (int*) emalloc(mtrace*sizeof(int));	w1 = (float*) emalloc(ntau*sizeof(float));	work1 = (float*) emalloc(nfft*nf*sizeof(float));	tracef = (float*) emalloc(ntl*nf*sizeof(float));	work2 = (float*) emalloc(nfft*sizeof(float));	wsave = (float*) emalloc(nsave*sizeof(float));	ifcut = (int*) emalloc(nf*sizeof(int));	ltaper = (int*) emalloc(nf*sizeof(int));	disend = (float*) emalloc(nsout*nofo*sizeof(float));	resamp = (float*) emalloc(ntres*nf*sizeof(float));	indxw = (int*) emalloc(nindxw*sizeof(int));	ss2 = (float*) emalloc(ntau*sizeof(float));	scg = (float*) emalloc(ntau*sizeof(float));	scs = (float*) emalloc(ntau*sizeof(float));	vr2 = (float*) emalloc(ntau*mtrace*sizeof(float));	vi2 = (float*) emalloc(ntau*sizeof(float));	tau = (float*) emalloc(ntau*sizeof(float));	vq4 = (float*) emalloc(ntau*sizeof(float));	itrace = 0;	bzero(fold,nofo*nsout*nlout*sizeof(float));	bzero(mig,nofo*nsout*nlcore*ntau*sizeof(float));	if(ntrend>0) {		for(io=0;io<nsout*nofo;io++) disend[io] =  99999999999.;	}	if(ntrend==0) { 		for(il=0;il<nlout;il++) {			for(is=0;is<nsout;is++) {				s[is+il*nsout] = sstart+is/nds*ds+is%nds*dds;			}		}		for(il=0;il<nlout;il++) {			for(is=0;is<nsout;is++) {				l[is+il*nsout] = lstart+il/ndl*dl+il%ndl*ddl;			}		}	} else {		fprintf(jpfp,		" Output s and l Locations of Target Line\n");		for(is=0;is<ntrend;is++) {			s[is] = sstart+is*(send-sstart)/(ntrend-1.);			l[is] = lstart+is*(lend-lstart)/(ntrend-1.);			fprintf(jpfp,				"   s=%g l=%g trace=%d \n",s[is],l[is],is+1); 		}	}	sinmin = s[0];	sinmax = s[0];	linmin = l[0];	linmax = l[0];	for(is=0;is<nsout*nlout;is++) {		if(sinmin>s[is]) sinmin = s[is];		if(sinmax<s[is]) sinmax = s[is];		if(linmin>l[is]) linmin = l[is];		if(linmax<l[is]) linmax = l[is];	}			sinmin = sinmin - apers;	sinmax = sinmax + apers;	linmin = linmin - aperl;	linmax = linmax + aperl;	/* allocate disk space for image */	if(ntrpre>0) {		fprintf(jpfp," open diskimg file... \n");		imgfp = efopen(diskimg,"r+");		fseek2g(imgfp,0,1);		ltmp = ntau*nofo*nlout*nsout;		efread(mig,sizeof(float),ltmp,imgfp);		fprintf(jpfp," diskimg file opened  \n");		fprintf(jpfp," open diskfld file... \n");		fldfp = efopen(diskfld,"r+");		fseek2g(fldfp,0,1);		efread(fold,sizeof(float),nofo*nsout*nlout,fldfp);		efclose(fldfp);		fprintf(jpfp," diskfld file opened  \n");		fprintf(jpfp," open diskhdr file... \n");		hdrfp = efopen(diskhdr,"r+");		fseek2g(hdrfp,0,1);		fprintf(jpfp," diskhdr file opened  \n");				for(ix=0;ix<nsout*nlout*nofo;ix++) {			efread(&tr,sizeof(char),240,hdrfp);			off[ix] = tr.offset;			if(ntrend>0 ) disend[ix] = tr.dz;		}		ipre = 1;	} else if(isave==1) {		imgfp = efopen(diskimg,"w+r");		fseek2g(imgfp,0,1);		bzero(tm,ntau*sizeof(float));		fprintf(jpfp," initialize diskimg file... \n");		for(ix=0;ix<nsout*nlout*nofo;ix++) 			efwrite(tm,sizeof(float),ntau,imgfp);		fprintf(jpfp," initialization of diskimg file done \n");		if(nlcore==nlout) efclose(imgfp);		fprintf(jpfp," initialize diskfld file... \n");		fldfp = efopen(diskfld,"w+r");		fseek2g(fldfp,0,1);		bzero(fold,nofo*nsout*nlout*sizeof(float));		efwrite(fold,sizeof(float),nofo*nsout*nlout,fldfp);		efclose(fldfp);		fprintf(jpfp," initialization of diskfld file done  \n");	}	if(ntrpre==0) {		fprintf(jpfp," initializing diskhdr file... \n");		hdrfp = efopen(diskhdr,"w");		bzero(&tr,240);		tr.offset = 99999999;		tr.ns = tra.ns;		tr.dt = tra.dt;		tr.trid = 2;		if(ntrend>0) tr.dz = 99999999999.;		for(iy=0;iy<nlout;iy++) {			tr.tracr = iy + 1;			for(ix=0;ix<nsout;ix++) {				tmp = (l[iy*nsout+ix] - l1)/ddl + 0.5;				iiy = tmp;				tmp = (s[iy*nsout+ix] - s1)/dds + 0.5;				iix = tmp;				if(cdpnum==0) {					tr.cdp = iiy*ncdppl + iix + cdp1;				} else {					tr.cdp = iix*nlines + iiy + cdp1;				}				tr.tracl = ix + 1;				for(io=0;io<nofo;io++) {					tr.cdpt  = io+1;					efwrite(&tr,sizeof(char),240,hdrfp);				}			}		}		fprintf(jpfp," initializing diskhdr file done \n");		for(ix=0;ix<nofo*nsout*nlout;ix++) off[ix] = 99999999;		fflush(hdrfp);			}	ktrace = 0;	cdppre = tra.cdp - 1;	m1000 = 0;	for(it=0;it<ntau;it++) {		tmig[it] = tau0 + it*dtau;		tm[it] = tmig[it]*0.5/dtl;	}	for(it=0;it<ntau;it++) tau[it] = tau0 + (it+1)*dtau;	if(itgain==1) {		for(it=0;it<nt;it++) {			tmp = t0 + it*dt;			if(tmp!=0.0) {				tgain[it] = pow(tmp,tpow);			} else {				tgain[it] = 0.;			}		}		for(it=0;it<ntau;it++) {			tmp = tau0 + it*dtau;			if(tmp!=0.0) {				tugain[it] = pow(tmp,tpowaf);			} else {				tugain[it] = 0.;			}		}	}			fprintf(jpfp," \n");	fprintf(jpfp," Migration Parameters \n");	fprintf(jpfp," -------------------- \n");	fprintf(jpfp," x1=%g y1=%g s1=%g l1=%g cdp1=%d\n",x1,y1,s1,l1,cdp1);	fprintf(jpfp," x2=%g y2=%g s2=%g l2=%g cdp2=%d\n",x2,y2,s2,l2,cdp2);	fprintf(jpfp," x3=%g y3=%g s3=%g l3=%g cdp3=%d\n",x3,y3,s3,l3,cdp3);	fprintf(jpfp," sstart=%g lstart=%g ns=%d nl=%d ds=%g dl=%g \n",		sstart,lstart,nsread,nlread,ds,dl);	if(ntrend>0) fprintf(jpfp," send=%g lend=%g ntrend=%d dend=%g \n",			send,lend,ntrend,dend);	fprintf(jpfp," nds=%d ndl=%d dds=%g ddl=%g \n",		nds,ndl,dds,ddl);	fprintf(jpfp," nss=%d nll=%d is0=%d il0=%d \n",		nss,nll,is0,il0);	fprintf(jpfp," cdppdds=%d cdppds=%d cdppddl=%d cdppdl=%d cdpnum=%d\n",		cdppdds, cdppds, cdppddl, cdppdl, cdpnum);	fprintf(jpfp," ntrpre=%d nt=%d ntau=%d ntl=%d nfft=%d\n",		ntrpre,nt,ntau,ntl,nfft);	fprintf(jpfp," dt=%f dtau=%f t0=%f tau0=%f \n",		dt*1000.,dtau*1000.,t0*1000.,tau0*1000.);	fprintf(jpfp," tpow=%g ofomin=%g dofo=%g nofo=%d isave=%d \n",		tpow,ofomin,dofo,nofo,isave);	fprintf(jpfp," apers=%g aperl=%g angmax=%g tapecntl=%d\n",		apers,aperl,angmax,tapecntl);	fprintf(jpfp," nlcore=%d mtrace=%d ntras=%d mlimit=%d \n",		nlcore,mtrace,ntras,mlimit/(1024*1024));	fprintf(jpfp," f0=%g df=%g nf=%d ftaper=%g ksmax=%g klmax=%g\n",		f0,df,nf,ftaper,ksmax,klmax);	fprintf(jpfp," t0v=%g dtv=%g ntv=%d \n",t0v,dtv,ntv);	fprintf(jpfp," s0v=%g dsv=%g nsv=%d \n",s0v,dsv,nsv);	fprintf(jpfp," l0v=%g dlv=%g nlv=%d \n",l0v,dlv,nlv);	fprintf(jpfp," diskimg=%s\n",diskimg);	fprintf(jpfp," diskfld=%s\n",diskfld);	fprintf(jpfp," diskhdr=%s\n",diskhdr);	fprintf(jpfp," backupi=%s\n",backupi);	fprintf(jpfp," backupo=%s\n",backupo);	fprintf(jpfp," hisfile=%s\n",hisfile);	fprintf(jpfp," ntrdsk=%d tpowaf=%g \n",ntrdsk,tpowaf);	fprintf(jpfp," ncpu=%d traceout=%d \n",ncpu,traceout);	if(on2trace==1) fprintf(jpfp," total_number_of_input_trace=%d \n",ntotal);	fprintf(jpfp," \n");		fprintf(jpfp," start migration ... \n");	fflush(jpfp);	t0v = t0v * 0.001;	dtv = dtv * 0.001;	m1000 = ntrpre/1000;	ntrace = 0;	if(tapecntl==1) {		if(jtrace>0) {			lpos = nt*sizeof(float)+240;			lpos = lpos * jtrace + 3600;			fseek2g(infp,lpos,0);			fgettr(infp,&tra);		}		ltrace = jtrace;		jtrace = ntrpre;	} else if(tapecntl==-1) {		ltrace = 0;		jtrace = ntrpre;		lpos = nt*sizeof(float)+240;		lpos = lpos * ntrpre + 3600;		fseek2g(infp,lpos,0);		fgettr(infp,&tra);	} else if(tapecntl==0) {		ltrace = jtrace;		jtrace = ntrpre - jtrace;	} else if(tapecntl==2) {		ltrace = jtrace;		jtrace = ntrpre;	}	i3d = 3;	if(nlines<10) i3d=2;	/* initialization of fft and taper for antialiasing filter */	fhigint_(&f0,&df,&nf,&ftaper,&dtl,ifcut,ltaper,wsave,&nsave,&nfft);	do {		jtrace = jtrace + 1;		if(jtrace<=ntrpre) continue;		ntrace = ntrace + 1;		/* dead trace */ 		if(tra.trid!=1) {		fprintf(btfp," trid not 1, at trace=%d cdp=%d cdpt=%d\n",			jtrace,tra.cdp,tra.cdpt); 			fflush(btfp);			continue;		}		/* compute rms and max of trace amplitudes */		itmp = (tra.mute-tra.delrt);		itmp = itmp*1000/(int)tra.dt; 		ampmax = 0.;		amprms = 0.;		if(itmp<0) itmp = 0;		it0 = 0;		for(it=itmp;it<nt;it++) {			tmp = fabs(tra.data[it]);			if(it0==0 && tmp>0.) it0 = it;			amprms = amprms + tmp*tmp;			if(tmp>ampmax) ampmax = tmp;		}		itmp = it0;				it0 = tra.delrt + itmp * (int)tra.dt/1000; 		if(it0>tra.mute) tra.mute = it0; 		if(nt>itmp) amprms = sqrt(amprms/(nt-itmp));		if(amprms==0.) {		fprintf(btfp," zero trace, at trace=%d cdp=%d cdpt=%d\n",			jtrace,tra.cdp,tra.cdpt); 			fflush(btfp);			continue;		} else {			if (ampmax>amprms*rmsmar) {fprintf(btfp," bad trace with ampmax=%g  rms=%g, at trace=%d cdp=%d cdpt=%d\n",		ampmax,amprms,jtrace,tra.cdp,tra.cdpt); 				fflush(btfp);				continue;			}		}				/* source and group x, y locations */		xs = tra.sx;		ys = tra.sy;		xg = tra.gx;		yg = tra.gy;		if(tra.scalco>1) {			xs = xs *tra.scalco;			ys = ys *tra.scalco;			xg = xg *tra.scalco;			yg = yg *tra.scalco;		} else if(tra.scalco<0) {			xs = xs / (-tra.scalco);			ys = ys / (-tra.scalco);			xg = xg / (-tra.scalco);			yg = yg / (-tra.scalco);		}		/* source and group s, l locations */		xy2sl(x1,y1,s1,l1,x2,y2,s2,l2,x3,y3,s3,l3,xs,ys,			&ss[ktrace],&sl[ktrace]);		xy2sl(x1,y1,s1,l1,x2,y2,s2,l2,x3,y3,s3,l3,xg,yg,			&gs[ktrace],&gl[ktrace]);		ms = (ss[ktrace] + gs[ktrace])/2.;		ml = (sl[ktrace] + gl[ktrace])/2.;		if(ntrend==0) { 			itmp = tra.cdp - cdp1;			if(cdpnum==0) {				itmp = itmp/ncdppl;				iiy = itmp;				iix = tra.cdp - cdp1 - iiy*ncdppl;			} else {				itmp = itmp/nlines;				iix = itmp;				iiy = tra.cdp - cdp1 - iix*nlines;			}			is = (iix-is0)/nss;			ids = iix - is*nss - is0;			if(ids>=0 && ids<nds) {				is = is * nds + ids; 			} else {				is = -1;			}					il = (iiy-il0)/nll;			idl = iiy - il*nll - il0;			if(idl>=0 && idl<ndl) {				il = il * ndl + idl;			} else {				il = -1;			} 		} else {			is = 0;			il = 0;		}					tmp = tra.offset;		if(iofoin==0 || nofo==1 ) {			if(tmp<0.) tmp = - tmp;			tmp = (tmp-ofomin)/dofo+.5;			io = tmp;		} else {			if(tmp<ofol) {				io = -1;			} else if(tmp>ofor) {				io = nofo;

⌨️ 快捷键说明

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