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

📄 gridsalt.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 2 页
字号:
	if(!getparint("nc",&nc)) nc = 0;	if(vscalbot!=1.0 || vscalzmx!=1.0) iscal = 1;	if(ibot2==0) iscal = 0; 	if(iscal==1) {		one =1;		scale1 = alloc3float(n2,n3,one);		scale2 = alloc3float(n2,n3,one);		for(i3=0;i3<n3;i3++) {		for(i2=0;i2<n2;i2++) {			if(zbot2[i3*n2+i2]<zmax && zbot2[i3*n2+i2]!=0.) {				scale1[0][i3][i2] = vscalbot;				scale2[0][i3][i2] = vscalzmx;			} else {				scale1[0][i3][i2] = 1.0;				scale2[0][i3][i2] = 1.0;			}		}		}		r1 = 0.;        	r2 = (d2>0)?dscal/d2:0;        	r3 = (d3>0)?dscal/d3:0;        	r1 = 0.5*r1*r1 ;        	r2 = 0.5*r2*r2 ;        	r3 = 0.5*r3*r3 ;		lam = 1.0;		slowness=0;		niter = 2;		depth = 3;		vsm3d(scale1,one,n3,n2,niter,depth,r1,r3,r2,lam,slowness);		vsm3d(scale2,one,n3,n2,niter,depth,r1,r3,r2,lam,slowness);	}	efseek(infp,0,0);        if(check==1) {		cube= (float*) emalloc(n1*n2*n3*sizeof(float));		vs = (float*) emalloc(8*sizeof(float));	}	for(i3=0;i3<n3;i3++) {		for(i2=0;i2<n2;i2++) {			efread(grid,sizeof(float),n1,infp);			top = ztop[i3*n2+i2];			bot = zbot[i3*n2+i2];			top2 = ztop2[i3*n2+i2];			bot2 = zbot2[i3*n2+i2];			tmp = (top - o1)/d1 + 0.5; 			i1top = tmp;			tmp = (bot - o1)/d1 + 0.5; 			i1bot = tmp;			tmp = (top2 - o1)/d1 + 0.5; 			i1top2 = tmp;			tmp = (bot2 - o1)/d1 + 0.5; 			i1bot2 = tmp;			if(top==depthnull) i1top = n1;			if(bot==depthnull) i1bot = 0;			if(top2==depthnull) i1top2 = n1;			if(bot2==depthnull) i1bot2 = 0;/*	fprintf(stderr, "top=%g bot=%g top2=%g bot2=%g line=%d trace=%d\n",			top,bot,top2,bot2,(int)(i3*d3+o3),(int)(i2*d2+o2)); 	fprintf(stderr, "i1top=%d i1bot=%d i1top2=%d i1bot2=%d \n",			i1top,i1bot,i1top2,i1bot2);*/			if(ivtop==1) {				vt = vtop[i3*n2+i2];			} else {				if(i1top>0) {					vt = grid[i1top];				} else {					vt = grid[0];				}			}			if(ivbot2==1) {				vb = vbot2[i3*n2+i2];			} else {				vb = vtop[i3*n2+i2];			}			/* salt between top and bot2 */			if( (itop2==0 && ibot==0 && top<=bot2) || 	    ( (i1top2==n1 || i1bot==0) && top<=bot2 && bot2!=depthnull) || 			  (bot>=top2 && bot!=depthnull && top2!=depthnull) 			  || (ibot2==1 && itop2==0 && ibot==0) ) {/*if(i2==381 && i3==169) fprintf(stderr," top to bot2 i1top=%d i1bot=%d i1top2=%d i1bot2=%d \n", i1top,i1bot,i1top2,i1bot2);if(i2==381 && i3==169) fprintf(stderr," top to bot2 top=%g bot=%g top2=%g bot2=%g \n", top,bot,top2,bot2);*/		if(i1top2==n1&&i1bot!=0&&i1bot2>i1bot) i1bot2=i1bot;  	/*	if(i1top>i1bot2)	fprintf(stderr, "i1top=%d i1bot2=%d line=%d trace=%d\n",			i1top,i1bot2,(int)(i3*d3+o3),(int)(i2*d2+o2)); 	*/				if(saltvelo!=-9898) {					for(i1=i1top;i1<=i1bot2;i1++) {						if(i1>=0 && i1<=n1-1) grid[i1] = saltvelo;					}				} else {					for(i1=i1top;i1<=i1bot2;i1++) {						if(i1>=0 && i1<=n1-1) {							tmp = i1*d1+o1;							tmp = tmp - top;							if(bot2>top && tmp>0.) {								grid[i1] = vt + tmp*(vb-vt)/(bot2-top);							} else {								grid[i1] = vt;							}						}					}				}			/* overhangs */			} else if(top<=bot && bot<=top2 && top2<=bot2) {			/*if(i2==178 && i3==271) fprintf(stderr," overhang i1top=%d i1bot=%d i1top2=%d i1bot2=%d \n", i1top,i1bot,i1top2,i1bot2);*/				if(saltvelo!=-9898) {					for(i1=i1top;i1<=i1bot;i1++) {						if(i1>=0 && i1<=n1-1) grid[i1] = saltvelo;					}					for(i1=i1top2;i1<=i1bot2;i1++) {						if(i1<n1 && i1>=0) grid[i1] = saltvelo;					}					if(i1bot2<i1top2) i1bot2 = n1;				} else {					for(i1=i1top;i1<=i1bot;i1++) {						if(i1>=0 && i1<=n1-1) {							tmp = i1*d1+o1;							tmp = tmp - top;							grid[i1] = vt + tmp * (vb-vt) / (bot2-top);						}					}					for(i1=i1top2;i1<=i1bot2;i1++) {						if(i1<n1 && i1>=0) {							tmp = i1*d1+o1;							tmp = tmp - top;							grid[i1] = vt + tmp * (vb-vt) / (bot2-top);						}					}					if(i1bot2<i1top2) i1bot2 = n1;				}			/* salt from top2 to bot2 */			} else if(top2<=bot2 && bot<=top && bot2!=depthnull ) {			/*if(i2==178 && i3==271) fprintf(stderr," top2 to bot2 i1top=%d i1bot=%d i1top2=%d i1bot2=%d \n", i1top,i1bot,i1top2,i1bot2);*/				if(saltvelo!=-9898) {					for(i1=i1top2;i1<=i1bot2;i1++) {						if(i1>=0 && i1<=n1-1) 							grid[i1] = saltvelo;					}				} else {					for(i1=i1top2;i1<=i1bot2;i1++) {						if(i1>=0 && i1<=n1-1) {							tmp = i1*d1+o1;							tmp = tmp - top;							grid[i1] = vt + tmp * (vb-vt) /(bot2-top);						}					}									}			/* salt below top */			} else if(top2<=bot) {			/*if(i2==178 && i3==271) fprintf(stderr," below top i1top=%d i1bot=%d i1top2=%d i1bot2=%d \n", i1top,i1bot,i1top2,i1bot2);*/				if(i1bot2>i1bot || bot2==depthnull) i1bot2=i1bot;				for(i1=i1top;i1<i1bot2;i1++) {					if(i1<n1 && i1>=0) grid[i1] = saltvelo;				}				if(i1bot2<i1top) i1bot2 = n1;			/* top to bot salt */			} else if((top2<=top || top2>bot2) &&  top<= bot) {			/*if(i2==178 && i3==271) fprintf(stderr," top to bot i1top=%d i1bot=%d i1top2=%d i1bot2=%d \n", i1top,i1bot,i1top2,i1bot2);*/				/*				if(i1bot>i1bot2) i1bot=i1bot2;				*/				for(i1=i1top;i1<=i1bot;i1++) {					if(i1>=0 && i1<=n1-1) 						grid[i1] = saltvelo;				}				i1bot2 = i1bot;					if(i1bot2<i1top) i1bot2 = n1;			/* salt below top2 */			} else if(bot<=top) {			/*if(i2==178 && i3==271) fprintf(stderr," below top2 i1top=%d i1bot=%d i1top2=%d i1bot2=%d \n", i1top,i1bot,i1top2,i1bot2);*/				if(i1top2<i1top) i1top2 = i1top;				for(i1=i1top2;i1<=i1bot2;i1++) {					if(i1>=0 && i1<n1) grid[i1] = saltvelo;				}				if(i1bot2<i1top2) i1bot2 = n1;			}			if(iscal==1) {				r1 = scale1[0][i3][i2];				r2 = scale2[0][i3][i2];				tmp = r2 - r1;				if((n1-1)>i1bot2) {					tmp = tmp/(n1-1-i1bot2);					for(i1=i1bot2;i1<n1;i1++)						grid[i1] *=(r1+tmp*(i1-i1bot2));				}			}						if(check==1) { 				bcopy(grid,cube+(i3*n2+i2)*n1,					n1*sizeof(float)); 			} else {				efwrite(grid,sizeof(float),n1,outfp);				for(i1=0;i1<n1;i1++) {					if(gmin>grid[i1]) gmin = grid[i1]; 					if(gmax<grid[i1]) gmax = grid[i1]; 				}			}		}	}	if(check==1) {	  for(jter=0;jter<iter;jter++) {	   for(i3=1;i3<n3-1;i3++) {	      for(i2=1;i2<n2-1;i2++) {	         for(i1=0;i1<n1;i1++) {			v0 = cube[i1+i2*n1+i3*n1*n2];			vs[0] = cube[i1+i2*n1+(i3-1)*n1*n2];			vs[1] = cube[i1+i2*n1+(i3+1)*n1*n2];			vs[2] = cube[i1+(i2-1)*n1+i3*n1*n2];			vs[3] = cube[i1+(i2+1)*n1+i3*n1*n2];			vs[4] = cube[i1+(i2-1)*n1+(i3-1)*n1*n2];			vs[5] = cube[i1+(i2+1)*n1+(i3-1)*n1*n2];			vs[6] = cube[i1+(i2-1)*n1+(i3+1)*n1*n2];			vs[7] = cube[i1+(i2+1)*n1+(i3+1)*n1*n2];			nsalt = 0;			velo = 0.;			for(ii=0;ii<8;ii++) {				if(vs[ii]==saltvelo) {					nsalt += 1;				} else {					velo = velo + vs[ii];				}			}			if(nsalt<=nc && v0==saltvelo) {				cube[i1+i2*n1+i3*n1*n2] = velo/(8.-nsalt);			} else if(nsalt>=(8-nc) && v0!=saltvelo) {				cube[i1+i2*n1+i3*n1*n2] = saltvelo;			}			 }	      }		   }	          }	   for(i3=0;i3<n3;i3++) {	   	for(i2=0;i2<n2;i2++) {			bcopy(cube+i3*n1*n2+i2*n1,grid,n1*sizeof(float));			efwrite(grid,sizeof(float),n1,outfp);			for(i1=0;i1<n1;i1++) {				if(gmin>grid[i1]) gmin = grid[i1]; 				if(gmax<grid[i1]) gmax = grid[i1]; 			}	   	}	   }	}	usghin.gmin = gmin;	usghin.gmax = gmax;	ierr = fputusghdr(outfp,&usghin);		free(ztop);	free(zbot);	free(ztop2);	free(grid);	if(iscal==1) free3float(scale1);		if(iscal==1) free3float(scale2);		if(check==1) free(cube);	if(check==1) free(vs);	exit(0);}

⌨️ 快捷键说明

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