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

📄 fxymig.c.6.15.99

📁 seismic software,very useful
💻 99
📖 第 1 页 / 共 4 页
字号:
			fprintf(jpfp, 			" Updates of disks diskxyw or diskxyt failed during last run \n");			err(" Updates of disks diskxyw or diskxyt failed during last run");			} 		}	} else {		itime1 = 1;		itime2 = 2;		itime3 = 3;	}	if(ibackd==1) {		lenxytb = strlen(diskxytb);		lenxywb = strlen(diskxywb);		namexytb = (char*) emalloc(lenxytb+1);		namexywb = (char*) emalloc(lenxywb+1);		bcopy(diskxytb,namexytb,lenxytb);		bcopy(diskxywb,namexywb,lenxywb);		namexytb[lenxytb]='\0';		namexywb[lenxywb]='\0';		hdrbfp = fopen(diskhdrb,"w");		fseek64(hdrfp,0,0);		fprintf(jpfp," Copy %s to %s \n",diskhdr,diskhdrb); 		for(ix=0;ix<nx*ny;ix++) {	  		fread(&tra,sizeof(char),HDRBYTES,hdrfp);	  		fwrite(&tra,sizeof(char),HDRBYTES,hdrbfp);		}		efclose(hdrbfp);				if(itime3>=itime1 && itime3>=itime2) {			xywbfp = fopen(diskxywb,"w");			fseek64(xywbfp,0,0);			bzero(cp,nx*ny*sizeof(complex));			i64 = 0;			fseek64(xywfp,i64,0);			fprintf(jpfp," Copy %s to %s \n",diskxyw,diskxywb); 			for(iw=0;iw<nf;iw++) {	  			efread(cp,sizeof(complex),nx*ny,xywfp);	  			efwrite(cp,sizeof(complex),nx*ny,xywbfp);			}			efclose(xywbfp);			xytbfp = fopen(diskxytb,"w");			fseek64(xytbfp,0,0);			if(idataxyt==1) {				fprintf(jpfp," Copy %s to %s \n",diskxyt,diskxytb); 				if(itau0>1) {                    xytfp = efopen(diskxyt,"r");                    fseek64(xytfp,0,0);                    for(it=0;it<itau0-1;it++) {                          efread(q,sizeof(float),nx*ny,xytfp);                          efwrite(q,sizeof(float),nx*ny,xytbfp);                    }                    efclose(xytfp);                }				bzero(q,nx*ny*sizeof(float));				for(it=itau0-1;it<ntau;it++) {	  				efwrite(q,sizeof(float),nx*ny,xytbfp);				}		  	} else {				bzero(q,nx*ny*sizeof(float));				for(it=0;it<ntau;it++) {	  				efwrite(q,sizeof(float),nx*ny,xytbfp);				}			}			efclose(xytbfp);		} else {			xywbfp = fopen(diskxywb,"r");			fseek64(xywbfp,0,0);			bzero(cp,nx*ny*sizeof(complex));			i64 = 0;			fseek64(xywfp,i64,0);			fprintf(jpfp,			" Updates of disks diskxyw or diskxyt failed during last run \n");			fprintf(jpfp," Copy %s to %s \n",diskxywb,diskxyw); 			for(iw=0;iw<nf;iw++) {	  			efread(cp,sizeof(complex),nx*ny,xywbfp);	  			efwrite(cp,sizeof(complex),nx*ny,xywfp);			}			efclose(xywbfp);			xytbfp = fopen(diskxytb,"r");			fseek64(xytbfp,0,0);            xytfp = efopen(diskxyt,"r+");            fseek64(xytfp,0,0);			fprintf(jpfp," Copy %s to %s \n",diskxytb,diskxyt);             for(it=0;it<ntau;it++) {            	efread(q,sizeof(float),nx*ny,xytbfp);                efwrite(q,sizeof(float),nx*ny,xytfp);            }            efclose(xytbfp);			iwdur = 0;			fprintf(jpfp, " Remigrate all frequency slices: set iwdur=0 \n");		}	}	/* read the ffted wavefield into cp if needed */ 	if(ncp==nf) {		i64 = 0;		fseek64(xywfp,i64,0);		bzero(cp,nx*ny*nf*sizeof(complex));	  	fread(cp,sizeof(complex),nx*ny*ncp,xywfp);		if(isave==0) {			fclose(xywfp);			eremove(diskxyw);		}	} else {		fclose(xywfp);	}	/* 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);		}	/* 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);	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) {       			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(traceout==1) 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(mlimit>128*1024*1024) {			nyy = 128*1024*1024 / (nx*ntau*sizeof(float)) ;		} else {			nyy = mlimit / (nx*ntau*sizeof(float)) ;		}		if(nyy<1) nyy=1;		q = (float*)emalloc(nyy*nx*ntau*sizeof(float));		if( q==0 ) err("mlimit 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(traceout==1) 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,		complex *cpbig, int nybig, int iw2disk) {	int ix,kx,ntmp,iw; 	int itmp, mybig, jy;	long long i64;	/* 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);	fwrite(trhdr,sizeof(char),nx*HDRBYTES,hdrfp);}

⌨️ 快捷键说明

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