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

📄 suinvco3d.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 3 页
字号:
					    sz*((1.0-sx)*d32xs[iy][ix][iz+1] 						  + sx*d32xs[iy][ix+1][iz+1]));  			d32s+=sy*((1.0-sz)*((1.0-sx)*d32xs[iy+1][ix][iz] +						sx*d32xs[iy+1][ix+1][iz]) + 					sz*((1.0-sx)*d32xs[iy+1][ix][iz+1]					     + sx*d32xs[iy+1][ix+1][iz+1]));						d32g=(1.0-syg)*((1.0-sz)*((1.0-sxg)*d32xg[iyg][ixg][iz]						 + sxg*d32xg[iyg][ixg+1][iz])					+ sz*((1.0-sxg)*d32xg[iyg][ixg][iz+1] 						+ sxg*d32xg[iyg][ixg+1][iz+1]));  			d32g+=syg*((1.0-sz)*((1.0-sxg)*d32xg[iyg+1][ixg][iz] +						sxg*d32xg[iyg+1][ixg+1][iz]) + 					sz*((1.0-sxg)*d32xg[iyg+1][ixg][iz+1]					     + sxg*d32xg[iyg+1][ixg+1][iz+1]));			d33s = (1.0-sy)*((1.0-sz)*((1.0-sx)*d33xs[iy][ix][iz] +						     sx*d33xs[iy][ix+1][iz]) + 					    sz*((1.0-sx)*d33xs[iy][ix][iz+1] 						  + sx*d33xs[iy][ix+1][iz+1]));  			d33s+=sy*((1.0-sz)*((1.0-sx)*d33xs[iy+1][ix][iz] +						sx*d33xs[iy+1][ix+1][iz]) + 					sz*((1.0-sx)*d33xs[iy+1][ix][iz+1]					     + sx*d33xs[iy+1][ix+1][iz+1]));						d33g=(1.0-syg)*((1.0-sz)*((1.0-sxg)*d33xg[iyg][ixg][iz]						 + sxg*d33xg[iyg][ixg+1][iz])					+ sz*((1.0-sxg)*d33xg[iyg][ixg][iz+1] 						+ sxg*d33xg[iyg][ixg+1][iz+1]));  			d33g+=syg*((1.0-sz)*((1.0-sxg)*d33xg[iyg+1][ixg][iz] +						sxg*d33xg[iyg+1][ixg+1][iz]) + 					sz*((1.0-sxg)*d33xg[iyg+1][ixg][iz+1]					     + sxg*d33xg[iyg+1][ixg+1][iz+1]));		}		if (com_type==2 || com_type ==3 ) {			a1s = (1.0-sy)*((1.0-sz)*((1.0-sx)*a1xs[iy][ix][iz] +						     sx*a1xs[iy][ix+1][iz]) + 					    sz*((1.0-sx)*a1xs[iy][ix][iz+1] 						  + sx*a1xs[iy][ix+1][iz+1]));  			a1s+=sy*((1.0-sz)*((1.0-sx)*a1xs[iy+1][ix][iz] +						sx*a1xs[iy+1][ix+1][iz]) + 					sz*((1.0-sx)*a1xs[iy+1][ix][iz+1]					     + sx*a1xs[iy+1][ix+1][iz+1]));						a1g=(1.0-syg)*((1.0-sz)*((1.0-sxg)*a1xg[iyg][ixg][iz]						 + sxg*a1xg[iyg][ixg+1][iz])					+ sz*((1.0-sxg)*a1xg[iyg][ixg][iz+1] 						+ sxg*a1xg[iyg][ixg+1][iz+1]));  			a1g+=syg*((1.0-sz)*((1.0-sxg)*a1xg[iyg+1][ixg][iz] +						sxg*a1xg[iyg+1][ixg+1][iz]) + 					sz*((1.0-sxg)*a1xg[iyg+1][ixg][iz+1]					     + sxg*a1xg[iyg+1][ixg+1][iz+1]));			b1s = (1.0-sy)*((1.0-sz)*((1.0-sx)*b1xs[iy][ix][iz] +						     sx*b1xs[iy][ix+1][iz]) + 					    sz*((1.0-sx)*b1xs[iy][ix][iz+1] 						  + sx*b1xs[iy][ix+1][iz+1]));  			b1s+=sy*((1.0-sz)*((1.0-sx)*b1xs[iy+1][ix][iz] +						sx*b1xs[iy+1][ix+1][iz]) + 					sz*((1.0-sx)*b1xs[iy+1][ix][iz+1]					     + sx*b1xs[iy+1][ix+1][iz+1]));						b1g=(1.0-syg)*((1.0-sz)*((1.0-sxg)*b1xg[iyg][ixg][iz]						 + sxg*b1xg[iyg][ixg+1][iz])					+ sz*((1.0-sxg)*b1xg[iyg][ixg][iz+1] 						+ sxg*b1xg[iyg][ixg+1][iz+1]));  			b1g+=syg*((1.0-sz)*((1.0-sxg)*b1xg[iyg+1][ixg][iz] +						sxg*b1xg[iyg+1][ixg+1][iz]) + 					sz*((1.0-sxg)*b1xg[iyg+1][ixg][iz+1]					     + sxg*b1xg[iyg+1][ixg+1][iz+1]));			pxs = sin(a1s)*cos(b1s);			pys = sin(a1s)*sin(b1s);			pzs = cos(a1s);			pxg = sin(a1g)*cos(b1g);			pyg = sin(a1g)*sin(b1g);			pzg = cos(a1g);			ctheta = pxs*pxg+pys*pyg+pzs*pzg;		}				if ( com_type ==3 ) {			d11 = (pxs+pxg);			d12 = (pys+pyg);			d13 = (pzs+pzg);			d21 = d21s+d21g;			d22 = d22s+d22g;			d23 = d23s+d23g;			d31 = d31s+d31g;			d32 = d32s+d32g;			d33 = d33s+d33g;			det = d11*d22*d33 + d21*d32*d13 + d31*d12*d23			    - d31*d22*d13 - d21*d12*d33 - d11*d32*d23;		}		if (com_type==1 ) weight=1.0; 		if (com_type==2 ) weight = ctheta;		if (com_type==3 ) 			weight = det/amps/ampg/(1.0+ctheta);			samp = (tsd+tgd)*odt;			nsamp = samp;			if (nsamp>nt-2) continue;			samp = samp-nsamp;			/* check operator aliasing */			if (alias==1) {			  if (pxs+pxg > vout[iyo][ixo][izo]*aliasx) weight =0.0;			  if (pys+pyg > vout[iyo][ixo][izo]*aliasy) weight =0.0;			} 						/*output summation*/			outtrace[iyo][ixo][izo] += weight*(samp*tr.data[nsamp+1]				+(1.0-samp)*tr.data[nsamp]);		    }		  }		}		if (geo_type ==1 ) gettr(&tr); 	  }	  if( geo_type !=1 ) gettr(&tr);  	  if(verbose) fprintf(stderr, "\tfinish line%d\n", ixm+1); 	} 	/* write trace */	temp = dxm*dym/16/PI/PI/PI;  /* beta_1 *//*	temp = dxm*dym/8/PI/PI/PI; */ /* beta_2 */	for (iyo=0; iyo<nyo; ++iyo)		for(ixo=0; ixo<nxo; ++ixo){		/* scale output traces */ 		for(izo=0; izo<nzo; ++izo) {				if (com_type == 3) 			   outtrace[iyo][ixo][izo] *= vout[iyo][ixo][izo];			outtrace[iyo][ixo][izo] *= temp;		}		/* make headers for output traces */		tro.offset = offs;		tro.tracl = tro.tracr = 1+iyo*nxo+ixo;		tro.ns = nzo;		tro.d1 = dzo;		tro.ns = nzo;		tro.f1 = fzo;		tro.f2 = fxo;		tro.d2 = dxo;		tro.cdp = ixo;		tro.trid = 200;		/* copy migrated data to output trace */		memcpy((void *) tro.data,(const void *) outtrace[iyo][ixo],nzo*sizeof(float));		puttr(&tro); 	}	free3float(txs);	free3float(txg);	free3float(vout);	if (com_type == 2 || com_type == 3) {		free3float(a1xs);		free3float(a1xg);		free3float(b1xs);		free3float(b1xg);	}	if (com_type == 3) {		free3float(ampxs);		free3float(ampxg);		free3float(d21xs);		free3float(d21xg);		free3float(d22xs);		free3float(d22xg);		free3float(d23xs);		free3float(d23xg);		free3float(d31xs);		free3float(d31xg);		free3float(d32xs);		free3float(d32xg);		free3float(d33xs);		free3float(d33xg);	}	return EXIT_SUCCESS;}void GetFileNameType1(char *infile,float xs,float ys,float xs0,float xs1,float ys0,float ys1,char *xsfile) {	char 	xstmp[80], append[20];	int	iappxs,iappys;	float	x,y;	strcpy(xstmp,infile);	x = xs;	if (x < xs0) x = xs0;	if (x > xs1) x = xs1;	y = ys;	if (y < ys0) y = ys0;	if (y > ys1) y = ys1;/*	if (x >= 0.0 ) iappxs=(x+0.0001)*1000;	else iappxs=(x-0.0001)*1000;	if (y >= 0.0) iappys=(y+0.0001)*1000;	else iappys=(y-0.0001)*1000;*/	if (x >= 0.0 ) iappxs=x+0.0001;	else iappxs=x-0.0001;	if (y >= 0.0) iappys=y+0.0001;	else iappys=y-0.0001;	sprintf(append,"%i",iappxs);	strcat(xstmp, append);	sprintf(append,"_%i",iappys);	strcat(xstmp, append);	strcpy(xsfile, xstmp);}void GetFileNameType2(char *infile,float xs,float xs0,float xs1,char *xsfile){	char 	xstmp[80],append[20];	int	iappxs;	float   x;	strcpy(xstmp,infile);	x = xs;	if (x < xs0) x = xs0;	if (x > xs1) x = xs1;/*	if (x >= 0.0 ) iappxs=(x+0.0001)*1000;	else iappxs=(x-0.0001)*1000; */	if (x >= 0.0 ) iappxs=x+0.0001;	else iappxs=x-0.0001;	sprintf(append,"%i",iappxs);	strcat(xstmp, append);	strcpy(xsfile, xstmp);}short ReadTable(char *infile,int nxt,int nyt,int nzt,float ***outArray) {	FILE	*ifp;	int	iread, ix,iy,iz;	float	*t3d;	t3d = ealloc1float(nzt*nxt*nyt);	if ( (ifp=fopen(infile,"r")) ==NULL ) { 		fprintf(stderr,"cannot open file %s\n", infile);		return -1;	}	iread=fread(t3d,sizeof(float),nzt*nxt*nyt,ifp);	if (iread != nxt*nyt*nzt) {		fprintf(stderr,"Only read %d values of %s\n",iread,infile);		free1float(t3d);		return -2;	}	fclose(ifp);   	for(iy=0; iy<nyt; ++iy)	   for(ix=0; ix<nxt; ++ix)		for(iz=0; iz<nzt; ++iz)			outArray[iy][ix][iz]=t3d[iz+ix*nzt+iy*nzt*nxt]; 	free1float(t3d);	return 0;}short ReadVelocity(char *vfile,int nxv,int nyv,int nzv,float fxv,float dxv,float fyv,float dyv,float fzv,float dzv,int nxo,int nyo,int nzo,float fxo,float dxo, float fyo,float dyo,float fzo,float dzo,float ***vout) {	FILE	*ifp;	int	iread, ixo,iyo,izo,ix,iy,iz;	int	i1,i2,i3,i4,i5,i6,i7,i8;	float	xi,sx,yi,sy,zi,sz;	float   *v;	if ( (ifp=fopen(vfile,"r")) ==NULL ) { 		fprintf(stderr,"cannot open velocity file %s", vfile);		return -1;	}	v = ealloc1float(nzv*nxv*nyv);	iread=fread(v,sizeof(float),nzv*nxv*nyv,ifp);	if (iread != nxv*nyv*nzv) {		fprintf(stderr,"Only read %d values of %s\n",iread,vfile);		free1float(v);		return -2;	}	fclose(ifp);/*	fprintf(stderr,"read %d values of %s\n",iread,vfile);*/	if (nxv == 1 && nyv ==1) {	   for(iyo=0; iyo<nyo; ++iyo) 	   for(ixo=0; ixo<nxo; ++ixo) 		for(izo=0; izo<nzo; ++izo) {		   zi = (fzo + izo*dzo - fzv)/dzv;		   iz = zi;		   sz = zi - iz;		   if (iz <0 ) { iz =0; sz = 0.0; }		   if (nzv>1 && iz >nzv-2 ) { iz =nzv-2; sz = 1.0; }		   vout[iyo][ixo][izo] = (1.0-sz)*v[iz] + sz*v[iz+1];		}	}	else if (nxv > 1 && nyv ==1) {	   for(iyo=0; iyo<nyo; ++iyo) 	   for(ixo=0; ixo<nxo; ++ixo) {		xi = (fxo + ixo*dxo - fxv)/dxv;		ix = xi;		sx = xi - ix;		if (ix <0 ) { ix =0; sx = 0.0; }		if (ix >nxv-2 ) { ix =nxv-2; sx = 1.0; }		for(izo=0; izo<nzo; ++izo) {		   zi = (fzo + izo*dzo - fzv)/dzv;		   iz = zi;		   sz = zi - iz;		   if (iz <0 ) { iz =0; sz = 0.0; }		   if (nzv>1 && iz >nzv-2 ) { iz =nzv-2; sz = 1.0; }		   i1 = ix*nzv + iz;		   i2 = (ix+1)*nzv + iz;		   i3 = ix*nzv + iz +1;		   i4 = (ix+1)*nzv + iz +1;		   vout[iyo][ixo][izo] = 			   (1.0-sz)*((1.0-sx)*v[i1] + sx*v[i2]) 			   + sz*((1.0-sx)*v[i3] + sx*v[i4]);		}	   }	}	else if (nxv > 1 && nyv >1) {   	for(iyo=0; iyo<nyo; ++iyo) {	   yi = (fyo + iyo*dyo - fyv)/dyv;	   iy = yi;	   sy = yi - iy;	   if (iy <0 ) { iy =0; sy = 0.0; }	   if (iy >nyv-2 ) { iy =nyv-2; sy = 1.0; }	   for(ixo=0; ixo<nxo; ++ixo) {		xi = (fxo + ixo*dxo - fxv)/dxv;		ix = xi;		sx = xi - ix;		if (ix <0 ) { ix =0; sx = 0.0; }		if (ix >nxv-2 ) { ix =nxv-2; sx = 1.0; }		for(izo=0; izo<nzo; ++izo) {		   zi = (fzo + izo*dzo - fzv)/dzv;		   iz = zi;		   sz = zi - iz;		   if (iz <0 ) { iz =0; sz = 0.0; }		   if (nzv>1 && iz >nzv-2 ) { iz =nzv-2; sz = 1.0; }		   i1 = iy*nxv*nzv + ix*nzv + iz;		   i2 = iy*nxv*nzv + (ix+1)*nzv + iz;		   i3 = iy*nxv*nzv + ix*nzv + iz +1;		   i4 = iy*nxv*nzv + (ix+1)*nzv + iz +1;		   i5 = (iy+1)*nxv*nzv + ix*nzv + iz;		   i6 = (iy+1)*nxv*nzv + (ix+1)*nzv + iz;		   i7 = (iy+1)*nxv*nzv + ix*nzv + iz +1;		   i8 = (iy+1)*nxv*nzv + (ix+1)*nzv + iz +1;		   vout[iyo][ixo][izo] = 			   (1.0-sy)*((1.0-sz)*((1.0-sx)*v[i1] + sx*v[i2]) 			   + sz*((1.0-sx)*v[i3] + sx*v[i4]))  			   + sy*((1.0-sz)*((1.0-sx)*v[i5] + sx*v[i6]) 			   + sz*((1.0-sx)*v[i7] + sx*v[i8]));     		}	   }	}	}	free1float(v);	return 0;   }

⌨️ 快捷键说明

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