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

📄 fxymig.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 5 页
字号:
		if(itau0dur==-999) itau0=1;	}	if (!getparint("nsteps",&nsteps)) nsteps = ntau-itau0+1;	if(ny==1) nsteps = ntau-itau0+1;	if(nsteps>ntau-itau0+1) nsteps = ntau - itau0 + 1;    if ( icstep > 0 ) icstep = ((icstep+iestep-1)/iestep)*iestep;    if ( icstep ==0 ) {		nkx = 1;		nky = 1;	}	/* compute number of frequencies to migrated */	pi = 3.141592654;	dw = 2.*pi/(nfft*dt);	wmin = fmin*2*pi/dw;	iwmin = wmin;	if (iwmin<1) iwmin = 1;	if (iwmin>=nfftq) iwmin = nfftq-1;	wmax = fmax*2*pi/dw;	iwmax = wmax;	if (iwmax<1) iwmax = 1;	if (iwmax>=nfftq) iwmax = nfftq-1;	nw = iwmax - iwmin + 1;	wmin = iwmin * dw;	tmp = fmaxend*2.*pi/dw;	iwend= tmp;	if(iwend>iwmax) iwend=iwmax;	iwend = iwend - iwmin + 1;	if(dz>0.) {		tmp = tzend/dz + 1.5;		ntauend = tmp;	} else {		tmp = tzend/(dtau*1000.) + 1.5;		ntauend = tmp;	}	if(ifrange==0) {		ifmin = iwmin;		ifmax = iwmax;		nf = ifmax - ifmin + 1;	} else {		if(ifmin<iwmin) ifmin = iwmin;		if(ifmax>iwmax) ifmax = iwmax;		wmin = ifmin * dw;		nf = ifmax - ifmin + 1;	}	if(ny>1) {		lvec = nx; 		if (lvec<ny) lvec=ny;	} else {		if (lvec==0) lvec = nf;	}	fprintf(jpfp,"\n");	fprintf(jpfp," -------- FXYMIG PRINTOUT -------- \n");	fprintf(jpfp,"\n");	fflush(jpfp);	/* compute memory requirement for migration*/	ncp = nf;	nq = nsteps;	if(dz>0.) {		tmp = nq * dz/dvs + 1.5;	} else {		tmp = nq*dtau/(dvs*0.001) + 1.5;	}	nv = (int) tmp;	if(nv<1) nv=1;	if(ny==1) nv = nvs;	naux1 = (nkx+15) * 4;	naux2 = (nky+15) * 4;	naux = nkx;	if(nky>nkx) naux = nky;	lplane = nx*ny;	if(ny==1) lplane=nx*lvec;	if(ny==1) { ncpu = 1; nwmig = 1;} 	if(ny>1 && iorder<=1 && dx==dy ) iisave = 1;	lmem = nx * ny;	lmem = lmem * ncp;	lwork = (lmem + (4*lplane+naux+nkx*nky+2*lvec)*ncpu+nx*ny*nwmig+ncph+nf)			*sizeof(complex);	lmem = nx*ny;	lmem = lmem * (2+nv+nq);	lwork = lwork + ( (naux1+naux2+lvec)*ncpu+		+ 2*lplane+nf+lmem+ncpu)		*sizeof(float) 		+ iisave*2*lplane*ncpu*sizeof(complex); /*	fprintf(jpfp,"lwork=%f nx=%d ny=%d ncp=%d \n",(float)lwork,nx,ny,ncp);	fprintf(jpfp,"mlimit=%d lwork=%lld\n",mlimit,lwork);	fprintf(jpfp,"lplane=%d naux=%d nw=%d nkx=%d nky=%d\n",			lplane,naux,nw,nkx,nky);	fprintf(jpfp,"lvec=%d naux1=%d naux2=%d nv=%d nq=%d iisave=%d\n",			lvec,naux1,naux2,nv,nq,iisave);	lwork = (nx*ny*ncp + 6*lplane + naux + nw + nkx*nky + 2*lvec)		*sizeof(complex);	fprintf(jpfp,"mlimit=%d lwork=%lld\n",mlimit,lwork);*//*	if(lwork>llimit && ny>1) {*/	if(ny>1) {		fprintf(jpfp,		"Wavefield Disk I/O Used To Reduce Memory Requirement \n");		ncp = 1;		lwork = (nx*ny*ncp + (4*lplane+naux+nkx*nky+2*lvec)*ncpu+nx*ny*nwmig			+ ncph + nf)*sizeof(complex);		lmem = nx*ny;		lmem = lmem * (2+nv+nq);		lwork = lwork 			+((naux1+naux2+lvec)*ncpu+2*lplane			+nf+lmem+ncpu)			*sizeof(float) 			+ iisave*2*lplane*ncpu*sizeof(complex); 	}	if(lwork>llimit && ny==1) {		fprintf(jpfp,		"Velocity Disk I/O Used To Reduce Memory Requirement \n");		nv = 1;		lwork = (nx*ny*ncp + (4*lplane+naux+nkx*nky+nx*ny+2*lvec)			+ ncph + nf)*sizeof(complex);		lmem = nx*ny;		lmem = lmem * (2+nv+nq);		lwork = lwork 			+((naux1+naux2+lvec)*ncpu+lplane*2			+nf+lmem+ncpu)			*sizeof(float) 			+ iisave*2*lplane*ncpu*sizeof(complex); 	}	if(lwork>llimit && ny>1) {		fprintf(jpfp,	"Image/Velocity Disk I/O Used To Reduce Memory Requirement \n");		/*		for(iq=nq;iq>=1;iq=iq/2) {			if(dz>0.) {				tmp = iq * dz/dvs + 1.5;			} else {				tmp = iq*dtau/(dvs*0.001) + 1.5;			}			nv = (int) tmp;			if(nv<1) nv=1;			lwork = (nx*ny*ncp + 				(4*lplane+naux+nkx*nky+2*lvec)*ncpu+nx*ny*nwmig+ncph+nf)				*sizeof(complex);			lwork = lwork 				+((naux1+naux2+lvec)*ncpu+lplane*2				+nf+nx*ny*(2+nv+iq)+ncpu)				*sizeof(float) 				+ iisave*2*lplane*ncpu*sizeof(complex); 			if(lwork<llimit) break;		}		nq = iq;		if(nq == 0) nq = 1;		if(nq>nsteps) nq = nsteps;		*/                if(dz>0.) {                        temp = dz/dvs;                } else {                        temp = dtau/(dvs*0.001);                }                lwork = (nx*ny*ncp+(4*lplane+naux+nkx*nky+2*lvec)*ncpu                        +nx*ny*nwmig + ncph + nf)*sizeof(complex);                lwork = lwork + ( (naux1+naux2+lvec)*ncpu+                        + lplane*2+nf+nx*ny*2+ncpu)                        *sizeof(float)                        + iisave*2*lplane*ncpu*sizeof(complex);/*                fprintf(stderr,"llimit=%f lwork=%f \n",(float)llimit,(float)lwork);*/                tmp = (llimit-lwork)/((1.+temp)*nx*ny*sizeof(float));                nq = tmp;				if(nq>nsteps || nq<0) nq = nsteps;                nv = nq * temp + 1.5;/*                fprintf(stderr,"nq=%d nv=%d \n",nq,nv);*/                lwork = lwork + (nq+nv)*nx*ny*sizeof(float);	} else if(nq<ntau-itau0+1) {		fprintf(jpfp,	"Image/Velocity Disk I/O Used To Reduce Memory Requirement \n");	}	if(lwork>llimit && iisave>0 && nq==1) {	      	fprintf(jpfp,		"FD Coefficients Recomputed To Reduce Memory Requirement\n");		iisave = 0;		lwork = (nx*ny*ncp + (4*lplane+naux+nkx*nky+2*lvec)*ncpu 			+ nx*ny*nwmig + ncph + nf)*sizeof(complex);		lwork = lwork 			+ (naux1+naux2+2*lplane+lvec*ncpu+nf			+ nx*ny*(2+nv+nq)+ncpu)*sizeof(float) 			+ iisave*2*lplane*ncpu*sizeof(complex); 	}	if(lwork>llimit && nq==1 ) {		fprintf(jpfp,			"Memory Limit Too Small. Need At Least %g Bytes \n",			(float)(lwork)); 		fprintf(jpfp, "Job Cancelled \n");		err("Memory Limit Too Small. Need At Least %g Bytes \n",			(float)(lwork)); 	}	fprintf(jpfp," Total Memory needed (in MB) = %g \n", 		(float)lwork/1024./1024.);	fprintf(jpfp,"\n");	if(lendur!=0 && itau0dur>0 && itaudur>1) { 		if(nq<(itaudur-itau0dur+1)) warn(" nq=%d too small \n",nq); 		if(nq<(itaudur-itau0dur+1)) warn(" itaudur=%d itau0dur=%d \n",			itaudur,itau0dur);		nq = itaudur - itau0dur + 1;		if(nq>nsteps || ntau>ntaulast) nq = nsteps;		if(dz>0.) {			tmp = nq * dz/dvs + 1.5;		} else {			tmp = nq*dtau/(dvs*0.001) + 1.5;		}		nv = (int) tmp;		if(nv<1) nv=1;		if(ny==1) nv = nvs;	}/*print setup parameters */	fprintf(jpfp,"\n");	fprintf(jpfp," Migration Parameters: \n");	fprintf(jpfp," ===================== \n");	if(icdps>=0) {	fprintf(jpfp," cdp1=%d ncdppl=%d nlines=%d \n", cdp1,ncdppl,nlines);	fprintf(jpfp," x1=%f y1=%f s1=%f l1=%f \n", x1,y1,s1,l1);	fprintf(jpfp," x2=%f y2=%f s2=%f l2=%f \n", x2,y2,s2,l2);	fprintf(jpfp," x3=%f y3=%f s3=%f l3=%f \n", x3,y3,s3,l3);	fprintf(jpfp," sstart=%f lstart=%f \n", x0m,y0m);	} else {	fprintf(jpfp," tracekey=%s linekey=%s \n", tracekey,linekey);	fprintf(jpfp," traceinc=%d lineinc=%d \n", traceinc,lineinc);	fprintf(jpfp," trstart=%d lnstart=%d \n", trstart,lnstart);	}	fprintf(jpfp," ntau=%d nt=%d nw=%d ns=%d nl=%d \n", ntau,nt,nw,nx,ny);	fprintf(jpfp," dtau=%f dt=%f dz=%f ds=%f dl=%f \n",		dtau*1000.,dt*1000.,dz,dx,dy);	fprintf(jpfp," itau0=%d iestep=%d icstep=%d nvs=%d naux=%d \n",		itau0,iestep,icstep,nvs,naux);	fprintf(jpfp," nfft=%d nffs=%d nffl=%d nsteps=%d nv=%d ncp=%d \n",		nfft,nkx,nky,nq,nv,ncp);	fprintf(jpfp," lvec=%d lplane=%d iorder=%d naux1=%d naux2=%d \n",		lvec,lplane,iorder,naux1,naux2);	fprintf(jpfp," dfc=%f vref=%f dvs=%f isave=%d iisave=%d \n", 		dfc,vref,dvs,isave,iisave);	fprintf(jpfp, " velfile=%s \n", velfile);	fprintf(jpfp, " diskxyw=%s \n", diskxyw);	fprintf(jpfp, " diskhdr=%s \n", diskhdr);	fprintf(jpfp, " diskxyt=%s \n", diskxyt);	if(ibackd==1) {		fprintf(jpfp, " diskxywb=%s \n", diskxywb);		fprintf(jpfp, " diskhdrb=%s \n", diskhdrb);		fprintf(jpfp, " diskxytb=%s \n", diskxytb);	}	if(lendur>0) {		fprintf(jpfp, " durfile=%s \n", durfile);		fprintf(jpfp, " itau0dur=%d itaudur=%d iwdur=%d\n", 			itau0dur,itaudur,iwdur);	}	fprintf(jpfp," fmin=%g fmax=%g mlimit=%d ncpu=%d nwmig=%d \n", 		fmin, fmax, (int)(llimit/1024./1024.),ncpu,nwmig);	fprintf(jpfp," fmaxend=%g tzend=%g \n", fmaxend, tzend);	fprintf(jpfp," traceout=%d \n", traceout);	if(ifrange==1) {		fprintf(jpfp," ifmin=%d ifmax=%d nf=%d iwmin=%d iwmax=%d iwend=%d \n", 			ifmin,ifmax,nf,iwmin,iwmax,iwend+iwmin-1);	}	if(ibacki==1) fprintf(jpfp, " backupi=%s \n", backupi);	if(ibacko==1) fprintf(jpfp, " backupo=%s \n", backupo);	fprintf(jpfp," ===================== \n");	fprintf(jpfp,"\n");	fflush(jpfp);/* compute relative lowest frequency index */	ifminr = ifmin - iwmin + 1;	/* allocate memory for trace fft */	lwork = nx*nf*sizeof(complex)+(nfft*2+15+nx)*sizeof(float)			+nx*HDRBYTES*sizeof(char);	if(lwork>llimit) 		err("Memory Limit Too Small. Need At Least %g Mega Bytes \n",			(lwork+1024*1024-1)/(1024*1024)); 	nybig = llimit/2/(nx*nf*sizeof(complex));	if(nybig<1) nybig = 1;   	cp = (complex*)emalloc(nx*nf*sizeof(complex));   	cpbig = (complex*)emalloc(nybig*nx*nf*sizeof(complex));	trfft  = (float*)emalloc(nfft*sizeof(float)); 	wsave  = (float*)emalloc((2*nfft+15)*sizeof(float));	fold = (float*)emalloc(nx*sizeof(float));	trhdr = (char*)emalloc(nx*HDRBYTES*sizeof(char));	/* alloc disk spaces for wavefield data p(x,y,w) and trace headers */	ixywsize = 0;	if(idataxyw==1 ) {		if((xywfp = fopen(diskxyw,"r"))!=NULL) {			i64 = 0;       		fseek64(xywfp,i64,SEEK_END);       		ixywsize= ftell64(xywfp);       		fclose(xywfp);		}   	}	i64 = nx*ny;	i64 = i64*nf;	i64 = i64*sizeof(complex);   	if( ixywsize!= i64 ) {		xywfp = fopen(diskxyw,"w+");	} else {		xywfp = fopen(diskxyw,"r+");	}     fseek64(xywfp,0,0);	ihdrsize = 0;	if(idatahdr==1 ) {		if((hdrfp = fopen(diskhdr,"r"))!=NULL) {			i64 = 0;        	fseek64(hdrfp,i64,SEEK_END);           	ihdrsize= ftell64(hdrfp);       		fclose(hdrfp);        }	}    i64 = nx*ny;	i64 = i64*HDRBYTES;    if( ihdrsize!=i64 ) {		hdrfp = fopen(diskhdr,"w+");	} else {		hdrfp = fopen(diskhdr,"r+");	}     fseek64(hdrfp,0,0);	l64 = nx*ny;	l64 = l64*nf*sizeof(complex);	if(ihdrsize==i64 && ixywsize==l64 && itau0dur!=-999) goto no_fft_needed;	bzero(cp,nx*nf*sizeof(complex));	bzero(trhdr,nx*HDRBYTES*sizeof(char));	bzero(cpbig,nybig*nx*nf*sizeof(complex));	/* see if we can allocate the disk space */	fclose(xywfp);	xywfp = fopen(diskxyw,"w+"); 	fclose(hdrfp);	hdrfp = fopen(diskhdr,"w+"); 	for(iy=0;iy<ny;iy++) { 		i64 = iy*nf*nx;		i64 = i64*sizeof(complex);		fseek64(xywfp,i64,0);		fwrite(cp,sizeof(complex),nx*nf,xywfp);		i64 = iy*nx*HDRBYTES;		i64 = i64*sizeof(char);		fseek64(hdrfp,i64,0);		fwrite(trhdr,sizeof(char),nx*HDRBYTES,hdrfp);	}	i64 = 0;	fseek64(xywfp,i64,0);	fseek64(hdrfp,i64,0);	xytfp = fopen(diskxyt,"w+");	qbuf = (float*) emalloc(nx*ny*sizeof(float));	bzero(qbuf,nx*ny*sizeof(float));	fseek64(xytfp,i64,0);	for(it=0;it<ntau;it++) {

⌨️ 快捷键说明

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