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

📄 fxymig.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 5 页
字号:
	/* read in velocity if needed */	if(nv==nvs) {		if((velfp=fopen(velfile,"r"))==NULL)			err("Input Velocity File velfile Error");		fseek64(velfp,0,0);	  	fread(v,sizeof(float),nx*ny*nvs,velfp);		fclose(velfp);		} else {		fclose(velfp);	}	/* compute frequencies to migrate */ 	for(iw=0;iw<nf;iw++) om[iw] = wmin +iw*dw; /*	dump2xplot(v,nx,nvs,0,"v plot");	dump2xplot(cp,nx*2,nf,1,"cp plot");*/	fprintf(jpfp,"\n");	fprintf(jpfp," Start Migration \n");	fprintf(jpfp," =============== \n");	fflush(jpfp);	fflush(jpfp);    	/* call migration routine */	lenvel = strlen(velfile);	lenxyt = strlen(diskxyt);	lenxyw = strlen(diskxyw);		namevel = (char*) emalloc(lenvel+1);	namexyt = (char*) emalloc(lenxyt+1);	namexyw = (char*) emalloc(lenxyw+1);	bcopy(velfile,namevel,lenvel);	bcopy(diskxyt,namexyt,lenxyt);	bcopy(diskxyw,namexyw,lenxyw);	namevel[lenvel]='\0';	namexyt[lenxyt]='\0';	namexyw[lenxyw]='\0';	if(dz==0.) dvs = dvs * 0.001;        fclose(hdrfp);	if(lenjpf>1) fclose(jpfp);    wxymig_(&nx,&ny,&ntau,&nw,&itau0,&iestep,&icstep,		&nvs,&nkx,&nky,&nq,&nv,&ncp,&lvec,&lplane,&iorder,		&naux1,&naux2,&naux,		&dt,&dx,&dy,&dtau,&dfc,&vref,&dvs,		q,v,vxy,		om,oms,vyx,w,		aux1,aux2,		a,aa,r,cpt,		caux,shift,al,ar,		cp,bcp,cpp,		namexyw,namexyt,namevel,		&lenxyw,&lenxyt,&lenvel,		asave,aasave,&iisave,va,		namejp,&lenjpf,&ncpu,		namexywb,namexytb,		&lenxywb,&lenxytb,		qbuf,cpbuf,cph,dzov,&ncph,		namedur,&lendur,&itaudur,&iwdur,		&ntauend,&iwend,&nwmig,&nf,&ifminr);	if(lenjpf>1) jpfp = efopen(jpfile,"a");	fprintf(jpfp," =============== \n");	fprintf(jpfp," Migration Done\n");	fprintf(jpfp,"\n");	/* free space */	if(isave==0) free(cp);	free(bcp);	free(aa);	free(a);	free(r);	free(cpt);	free(caux);	free(shift);	free(al);	free(ar);	free(aux1);	free(aux2);	free(om);	free(oms);	free(vyx);	free(vxy);	free(v);	free(va);	free(asave);	free(aasave);	if(ncp==1 && idataxyw==0) eremove(diskxyw);   	/* output migration result q(x,y,t) */    hdrfp = fopen(diskhdr,"r");	i64 = 0;	fseek64(hdrfp,i64,0);	fprintf(jpfp," Start Output \n");	fprintf(jpfp," ============ \n");	if ( nq==(ntau-itau0+1) && ntau>0 ) {		if(itau0==1) {			if(traceout==1) {       			for (iy=0;iy<ny;iy++) {       				for (ix=0;ix<nx;ix++) {       					for (it=0;it<ntau-1;it++) 						tra.data[it+1] = 						q[(it*ny+iy)*nx+ix];						tra.data[0] = 0;	  					fread(&tra,sizeof(char),HDRBYTES,hdrfp);						tra.ns = ntau;						tra.dt = dtau * 1000000;						tra.d1 = dtau * 1000000;						if(tra.trid==0) {							tra.trid = 2;							if(cdpnum==0) {                               tra.cdp = cdp1+(iy+iy0)*ncdppl*cdpinc                                         +(ix+ix0)*cdpinc;                        	} else {                               tra.cdp = cdp1+(iy+iy0)*cdpinc                                         +(ix+ix0)*nlines*cdpinc;                        	}						}						if(dz>0.) {							if(dz<=32.) {								tra.dt = dz * 1000.;							} else {								tra.dt = dz;							}							tra.dz = dz;							tra.fz = 0.;							tra.mute = 0;							tra.mutb = 0;						}						tra.tracl = ix + 1;						tra.tracr = iy + 1; 						tra.delrt = 0;						if(ikey==1) {							ftrace = ix*traceinc + trstart + 0.5;							fline = iy*lineinc + lnstart + 0.5;							itrace = ftrace;							iline = fline;							itov(trktype,&trkval,itrace);							itov(lnktype,&lnkval,iline);							puthval(&tra,indxtrk,&trkval);							puthval(&tra,indxlnk,&lnkval);						}						fputtr(outfp,&tra);					}				}			}						if(isave==1) {				xytfp = fopen(diskxyt,"r+");				fseek64(xytfp,0,0);				fwrite(q,sizeof(float),nx*ny*ntau,xytfp);				fclose(xytfp);			}		} else {			xytfp = fopen(diskxyt,"r+");			i64 = (itau0-1);			i64 = i64*nx*ny;			i64 = i64*sizeof(float);			fseek64(xytfp,i64,0);			fwrite(q,sizeof(float),nx*ny*nq,xytfp);			fclose(xytfp);		}	} 	if ( (itau0 > 1 || nq!=ntau) && ntau>0) {		free(q);		if(traceout==1) {			if(llimit>128*1024*1024) {				nyy = 128*1024*1024 / (nx*ntau*sizeof(float)) ;			} else {				nyy = llimit / (nx*ntau*sizeof(float)) ;			}			if(nyy<1) nyy=1;			q = (float*)emalloc(nyy*nx*ntau*sizeof(float));			if( q==0 ) err("llimit too small");			xytfp = fopen(diskxyt,"r");       		for (iy=0;iy<ny;iy=iy+nyy) {				nyread = nyy;				if(iy+nyread>ny) nyread = ny - iy;				bzero((char*)q,nyy*nx*ntau*sizeof(float));				for(it=0;it<ntau;it++) {					i64 = it;					i64 = i64*nx*ny+iy*nx;					i64 = i64*sizeof(float);					fseek64(xytfp,i64,0);	   				fread(q+it*nx*nyy,sizeof(float),						nx*nyread,xytfp);				}				for (iyread=0;iyread<nyread;iyread++) {					iyy = iy + iyread;					jy0 = iyread * nx;       				for (ix=0;ix<nx;ix++) {       					for (it=0;it<ntau-1;it++) 						tra.data[it+1] = 							q[it*nx*nyy+jy0+ix];						tra.data[0] = 0.;	  					fread(&tra,sizeof(char),HDRBYTES,hdrfp);						tra.ns = ntau;						tra.dt = dtau * 1000000;						tra.d1 = dtau * 1000000;						if(tra.trid==0) {							tra.trid=2;							if(cdpnum==0) {                             tra.cdp = cdp1+(iy+iy0)*ncdppl*cdpinc                                           +(ix+ix0)*cdpinc;                        	} else {                             tra.cdp = cdp1+(iy+iy0)*cdpinc                                           +(ix+ix0)*nlines*cdpinc;                        	}						}						if(dz>0.) {							tra.dz = dz;							tra.fz = 0;							tra.mute = 0;							tra.mutb = 0;							if(dz<=32.) {								tra.dt = dz * 1000.;							} else {								tra.dt = dz;							}						}						tra.tracl = ix + 1;						tra.tracr = iyy + 1; 						tra.delrt = 0;						if(ikey==1) {							ftrace = ix*traceinc + trstart + 0.5;							fline = iyy*lineinc + lnstart + 0.5;							itrace = ftrace;							iline = fline;							itov(trktype,&trkval,itrace);							itov(lnktype,&lnkval,iline);							puthval(&tra,indxtrk,&trkval);							puthval(&tra,indxlnk,&lnkval);						}						fputtr(outfp,&tra);					}				}			}			fclose(xytfp);		}		if(isave==0 ) {			eremove(diskxyt);		}    }	fprintf(jpfp," Job Done \n");	free(q);	fclose(outfp);	fclose(hdrfp);	if(isave==0) eremove(diskhdr);	if(isave==1) {		if(ncp==nf) {			xywfp = fopen(diskxyw,"w");			fseek64(xywfp,0,0);			fwrite(cp,sizeof(complex),nx*ny*nf,xywfp);			fclose(xywfp);		}	} else {		if(ncp!=nf) eremove(diskxyw);	} 	if(ibacko==1) {		fprintf(jpfp," Backup %s , %s and %s to %s \n", 			diskhdr,diskxyt,diskxyw,backupo); 		tar3to(backupo,diskhdr,diskxyt,diskxyw);	}	return 0;}/* write a input fft-transformed line to xyw-disk and write trace headers of a line to hdr-disk */void wl2d(int nx,int ny,int nw,int iy,complex *cp,char *trhdr,float *fold,		FILE *xywfp, FILE *hdrfp, FILE *jpfp,		String trktype, String lnktype,		Value trkval, Value lnkval,		int indxtrk, int indxlnk, int trstart, int lnstart,		int traceinc, int lineinc, int ikey, 		complex *cpbig, int nybig, int iw2disk) {	int ix,kx,ntmp,iw; 	int itmp, mybig, jy;	long long i64;	int iline, itrace;	float ftrace, fline;	/* zero fill in missing traces */	for(ix=0;ix<nx;ix++) {		if(fold[ix]==0.) {			fprintf(jpfp,			"   Missing Trace At Shotpoint is=%d Line il=%d \n",				ix+1,iy+1);			fflush(jpfp);			ntmp = ix - 1;			if(ntmp<0) ntmp = 0;			for(kx=ntmp;kx<nx;kx++) {				if(fold[kx]!=0.) {					for(iw=0;iw<nw;iw++) {				         	cp[ix+iw*nx].r = 0.;				         	cp[ix+iw*nx].i = 0.;					}		           		fold[ix]=1.0;		      			bcopy(trhdr+kx*HDRBYTES,                        			trhdr+ix*HDRBYTES,						HDRBYTES);					bzero(trhdr+28+ix*HDRBYTES,2);		      			break;	   			}			}		}	}	/* normalize */	for(ix=0;ix<nx;ix++) {		if(fold[ix]>1.0) {			for(iw=0;iw<nw;iw++) {		         	cp[ix+iw*nx].r = cp[ix+iw*nx].r/fold[ix];		         	cp[ix+iw*nx].i = cp[ix+iw*nx].i/fold[ix];			}		}	}	jy = iy%nybig;	mybig = jy + 1;/*	fprintf(stderr," iy=%d nybig=%d jy=%d \n",iy,nybig,jy);*/	/* save to cpbig */	for(ix=0;ix<nx;ix++) {		for(iw=0;iw<nw;iw++) {			cpbig[iw*nybig*nx+jy*nx+ix].r = cp[ix+iw*nx].r;			cpbig[iw*nybig*nx+jy*nx+ix].i = cp[ix+iw*nx].i;		}	}	/* write to disk */	if( iw2disk==1 || mybig==nybig ) {		itmp = iy / nybig;		itmp = itmp * nybig;/*		fprintf(stderr," iy=%d nybig=%d itmp=%d mybig=%d \n",			iy,nybig,itmp,mybig);*/		for(iw=0;iw<nw;iw++) {			i64 = iw;			i64 = i64*nx*ny+itmp*nx;			i64 = i64*sizeof(complex);			fseek64(xywfp,i64,0);	   		fwrite(cpbig+iw*nx*nybig,sizeof(complex),nx*mybig,xywfp);		}		bzero(cpbig,nybig*nw*nx*sizeof(complex));	}	/* save headers to disk */	i64 = iy*nx*HDRBYTES*sizeof(char);	fseek64(hdrfp,i64,0);	if(ikey==1) {		for(ix=0;ix<nx;ix++) {			ftrace = ix*traceinc + trstart + 0.5;			fline = iy*lineinc + lnstart + 0.5;			itrace = ftrace;			iline = fline;			itov(trktype,&trkval,itrace);			itov(lnktype,&lnkval,iline);			bcopy(trhdr+ix*HDRBYTES,(char*)&tra,HDRBYTES);			puthval(&tra,indxtrk,&trkval);			puthval(&tra,indxlnk,&lnkval);			bcopy((char*)&tra,trhdr+ix*HDRBYTES,HDRBYTES);		}	}	fwrite(trhdr,sizeof(char),nx*HDRBYTES,hdrfp);}

⌨️ 快捷键说明

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