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

📄 ktmig.c~

📁 seismic software,very useful
💻 C~
📖 第 1 页 / 共 5 页
字号:
		dtau = dtau * 0.001;	}   	if (!getparfloat("tau0",&tau0)) {		tau0 = 0.;	} else {		tau0 = tau0 * 0.001;	}		   	if (!getparfloat("oofo",&ofomin)) ofomin = 0.;   	if (!getparfloat("dofo",&dofo)) dofo = 999999.;   	if (!getparfloat("obtol",&obtol)) obtol = 0.5*dofo;   	if (!getparint("nofo",&nofo)) nofo = 1;	itmp = countparname("ofo");	if(itmp>0 && itmp!=nofo) err("number of ofo not match with nofo");	ofo = (float*) emalloc(nofo*sizeof(float));	if(itmp>0) {		getparfloat("ofo",ofo);		if(nofo>1) {			ofol = ofo[0] - 0.5*(ofo[1]-ofo[0]);			ofor = ofo[nofo-1] + 0.5*(ofo[nofo-1]-ofo[nofo-2]);		} else {			ofol = ofo[0] - 0.5*dofo;			ofor = ofo[nofo-1] + 0.5*dofo;			ofomin = ofo[0];		}	} else {		for(io=0;io<nofo;io++) ofo[io] = ofomin + io*dofo;	}	iofoin = itmp;	    	if (!getparfloat("f0",&f0)) f0 = 10.;    	if (!getparfloat("df",&df)) df = 10.;    	if (!getparint("nf",&nf)) nf = 7;    	if (!getparfloat("ftaper",&ftaper)) ftaper = 5.;	/* compute maximum wavenumbers to be used in migration */    	if (!getparfloat("ksmax",&ksmax)) {		if(ncdppl>1) {			ksmax = 0.5/dds;		} else { 			ksmax = 0.5/0.001;		}	}    	if (!getparfloat("klmax",&klmax)) {		if(nlines>1) {			klmax = 0.5/ddl;		} else {			klmax = 0.5/0.001;		}	}   	if (!getparint("tapecntl",&tapecntl)) tapecntl = 0;		nsave = ((ntl * 3 / 2)/2)*2;	radix_(&nsave,&nfft);	nsave = nfft * 2 + 30;	/* update id headers and write to output */	bh.hns = ntau;	bh.hdt = dtau * 1000000; 	if(traceout==1) fputhdr(outfp,&ch,&bh);   	if (!getparint("mlimit",&tmp_mlimit)) tmp_mlimit = 256;   	mlimit = tmp_mlimit;        mlimit *= 1024 * 1024;	getparstring("diskhdr",&diskhdr);	getparstring("diskimg",&diskimg);	getparstring("diskfld",&diskfld);	if(getparstring("hisfile",&hisfile)) ihis=1;	if(!getparstring("jpfile",&jpfile)) {                jpfp = stderr;        } else {                jpfp = efopen(jpfile,"w");        }	if (!getparint("isave",&isave)) isave = 0;	ibacki = 0;	if (getparstring("backupi",&backupi)) {		ibacki = 1;		fprintf(jpfp," Backup from the previous run ");                fprintf(jpfp," Backup %s , %s and %s from %s \n",                        diskimg,diskhdr,diskfld,backupi);		tar3fr(backupi,diskimg,diskhdr,diskfld);	}	ibacko = 0;	if (getparstring("backupo",&backupo)) ibacko = 1;	if(ibacko==1) isave=1;	fprintf(jpfp,"\n");	fprintf(jpfp," -------- KTMIG PRINTOUT -------- \n");	fprintf(jpfp,"\n");	/* detect starting trace of migration */	jtrace = 0;	if( (hffp = fopen(hisfile,"r"))!=NULL ) {		fclose(hffp);                hffp = efopen(hisfile,"r+");		buf = (char *) malloc(81*sizeof(char));		do {                                bzero(buf,81);                                if(fgets(buf,81,hffp)==NULL) break;                                if(strncmp(buf,                                "Number of Traces Processed: ",28)==0) {                                        sscanf(buf+28,"%d %d",&ntrpre,&jtrace);                                }                } while(feof(hffp)==0);		free(buf);		fprintf(jpfp," From history file: \n");		fprintf(jpfp,"Number of Traces Processed: %d\n",ntrpre);		if(jtrace>0) {		fprintf(jpfp,"Number of Traces Processed for this input: %d\n",			jtrace);		}	} else {		hffp = efopen(hisfile,"w");		ntrpre = 0;	}	/* compute memory requirement for migration*/ 	ntmp = nl*ndl;	nl = ntmp;	ntmp = ns*nds;	ns = ntmp;	nlcore = nl;	incdxw = 10;	nindxw = ntau / incdxw + 1;	ires = 4;	ntres = nt*ires + 1;		if(ntrend==0) {		nsout = ns;		nlout = nl;	} else {		nsout = ntrend;		nlout = 1;		nlcore = 1;		dsout = (send-sstart)/(nsout-1);		dlout = (lend-lstart)/(nsout-1);		dend = sqrt ( (send-sstart)*(send-sstart)		      + (lend-lstart)*(lend-lstart) ) / (nsout-1);	}	lwork = nsout * nlcore;	lwork = lwork*ntau*nofo*sizeof(float);	ltmp = nsout*nlout*nofo+nt + ntau + ntl + nt*mtrace;	ltmp = ltmp + 2*ntau + 2*ntau*mtrace + 2*nsout*nlout + ntv + mtrace*4;	ltmp = ltmp + ntau + nfft*(nf+nsout*nlout) + ntl*nf + nsave;	ltmp = ltmp + nsout*nofo + ntres*nf + ntau;	ltmp = ltmp + ntau*nsout*nlout*2 + ntau*mtrace + ntau*3;	ltmp = ltmp * sizeof(float);	ltmp = ltmp+(nsout*nlout*nofo+mtrace*2+nf*2+nindxw*nsout*nlout)*sizeof(int);	lwork = lwork + ltmp;	ltmp = ntv*nsv*nlv*sizeof(float);	lwork = lwork + ltmp;	ivdisk = 0;	if(lwork>mlimit) {		warn("Velocity Disk I/O Used to Reduce Memory \n");		lwork = lwork - ltmp;		ivdisk = 1;	}	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*nsout*nlout*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*nsout*nlout*sizeof(int));	ss2 = (float*) emalloc(ntau*sizeof(float));	scg = (float*) emalloc(ntau*nsout*nlout*sizeof(float));	scs = (float*) emalloc(ntau*nsout*nlout*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));	if(ivdisk==0) velos = (float*) emalloc(ntv*nsv*nlv*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;				ms = s[iy*nsout+ix];				ml = l[iy*nsout+ix];				sl2xy(s1,l1,x1,y1,s2,l2,x2,y2,s3,l3,x3,y3,ms,ml,&mx,&my);				if(ikey==1) {				fline = (ml-l1)*(ln3-ln1)/(l3-l1) + ln1 + 0.5;				ftrace = (ms-s1)*(tr2-tr1)/(s2-s1) + tr1 + 0.5;					intline = fline;					inttrace = ftrace;					itov(trktype,&trkval,inttrace);					itov(lnktype,&lnkval,intline);					puthval(&tr,indxtrk,&trkval);					puthval(&tr,indxlnk,&lnkval);				}				for(io=0;io<nofo;io++) {					tr.cdpt  = io+1;					ofs = ofo[io];					tr.sx = mx-ofs/2;					tr.gx = mx+ofs/2;					tr.sy = my;					tr.gy = my;					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;	ispre = -9999;	ilpre = -9999;	m1000 = 0;

⌨️ 快捷键说明

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