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

📄 iipick.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 5 页
字号:
		z2 = (float *) malloc(nhs*sizeof(float));		/* spline interpolation of velocities --- not a good idea 		vt2 = (float *) malloc(maxpks*sizeof(float));		vb2 = (float *) malloc(maxpks*sizeof(float));		va2 = (float *) malloc(maxpks*sizeof(float));		dvdz2 = (float *) malloc(maxpks*sizeof(float));		*/			dz = zmax/(nzgrid-2);		for(iz=0;iz<nzgrid;iz++) zgrid[iz] = iz * dz;		/* compute average velocity and gradient at velo location and		   at depth zgrid */		for(i2=0;i2<ncdp_velo;i2++) {			n2 = i2*nzgrid;			/* find gradient */			x = x_velo[i2];			if(ncdp_dvdz==0) {				for(iz=0;iz<nzgrid;iz++) 					dvdzgrid[iz+n2] = 0.;			} else if (ncdp_dvdz==1) {				n = nps_dvdz[0];				dvdzint(zt_dvdz,zb_dvdz,dvdz_dvdz,n,					zgrid,dvdzgrid+n2,nzgrid);			} else {				bisear_(&ncdp_dvdz,&one,x_dvdz,&x,&j2);				if(x<=x_dvdz[0]) {					n = nps_dvdz[0];					dvdzint(zt_dvdz,zb_dvdz,dvdz_dvdz,n,					     zgrid,dvdzgrid+n2,nzgrid);				} else if (x>=x_dvdz[ncdp_dvdz-1]) {					n = nps_dvdz[ncdp_dvdz-1];					i1 = (ncdp_dvdz-1)*maxp;					dvdzint(zt_dvdz+i1,zb_dvdz+i1,						dvdz_dvdz+i1,n,zgrid,						dvdzgrid+n2,nzgrid);				} else {					j1 = j2 - 1;					n = nps_dvdz[j1];					i1 = j1*maxp;					dvdzint(zt_dvdz+i1,zb_dvdz+i1,						dvdz_dvdz+i1,n,						zgrid,g1,nzgrid);					n = nps_dvdz[j2];					i1 = j2*maxp;					dvdzint(zt_dvdz+i1,zb_dvdz+i1,						dvdz_dvdz+i1,n,						zgrid,g2,nzgrid);					tmp = (x-x_dvdz[j1]) /					      (x_dvdz[j2]-x_dvdz[j1]);									for(iz=0;iz<nzgrid;iz++) {						dvdzgrid[iz+n2] = g1[iz]+						tmp * (g2[iz]-g1[iz]);					}				}			}			/* find average velocity at zgrid */			n = nps_velo[i2];			n1 = i2*maxp;			j1 = 0;			j2 = 0;			vconint(z_velo+n1,v_velo+n1,n,zgrid,vagrid+n2,nzgrid,				j1,j2,dvdzgrid+n2);		}					/* compute vt and vb along horizons at velan locations */		one = 1;		for(ih=0;ih<nhs;ih++) nvh[ih] = 0;		for(i2=0;i2<ncdp_velo;i2++) {			x = x_velo[i2];				jh = 0;			/* find cross points of horizons at velan locations */			for(ih=0;ih<nhs;ih++) {				xmin = xpicks[ih*maxpks]-xtol;				xmax = xpicks[ih*maxpks+npicks[ih]-1]+xtol;				n1 = npicks[ih]; 				n2 = ih * maxpks;				if(x>=xmin && x<=xmax) {					ivs[jh] = ih;					/* find z */					bisear_(&n1,&one,xpicks+n2,&x,&i1);					if(x<=xpicks[n2]) {						z = zpicks[n2];					} else if(x>=xpicks[n1+n2-1]) {						z = zpicks[n1+n2-1];					} else {						/*						if(n1==2) {						*/						/* linear interpolation */						   z = zpicks[n2+i1-1] +						    (x-xpicks[n2+i1-1])*						    (zpicks[n2+i1]-						     zpicks[n2+i1-1])/						    (xpicks[n2+i1]-						     xpicks[n2+i1-1]);						/*						} else {						*/						/* spline interpolation */						/* not a good idea */						/*						   z21 = 0.;                                 		   z2n = 0.;                                                   spline_(xpicks+n2,zpicks+n2,                                         		   &n1,&z21,&z2n,z2);                                 		   splint_(xpicks+n2,zpicks+n2,							   z2,&n1,&x,&z);						}						*/					}					zvs[jh] = z; 					jh = jh + 1;				}			}			/* sort zvs into ascending order */			for (iz=0;iz<jh;iz++) {				isort[iz] = iz;				zsort[iz] = zvs[iz];			}			qkisort(jh,zsort,isort);			for(iz=0;iz<jh;iz++) zvs[iz] = zsort[isort[iz]];			/* find vt and vb */			for(iz=0;iz<jh;iz++) {				z = zvs[iz];				if(iz==0) {					zt = z-0.1*dz;				} else {					zt = zvs[iz-1];				}					if(iz==jh-1) {					zb = z+dz*0.1;				} else {					zb = zvs[iz+1];				}				tmp = zt/dz;				i1 = tmp;				if (i1<0) {					i1 = 0;				} else if (i1>=nzgrid) {					i1 = nzgrid-1;				}				vat = vagrid[i2*nzgrid+i1];				gt = dvdzgrid[i2*nzgrid+i1];				tmp = z/dz;				i1 = tmp;				if (i1<0) {					i1 = 0;				} else if (i1>=nzgrid) {					i1 = nzgrid-1;				}				va = vagrid[i2*nzgrid+i1];				g = dvdzgrid[i2*nzgrid+i1];								tmp = zb/dz;				i1 = tmp;				if (i1<0) {					i1 = 0;				} else if (i1>=nzgrid) {					i1 = nzgrid-1;				}				vab = vagrid[i2*nzgrid+i1];				gb = dvdzgrid[i2*nzgrid+i1];				/*				fprintf(stderr,					"zt=%f zb=%f x=%f z=%f \n",					zt,zb,x,z);				fprintf(stderr,					"va=%f vab=%f vat=%f \n",					va,vab,vat);				*/								i1 = ivs[isort[iz]]*ncdp_velo					+nvh[ivs[isort[iz]]];				vth[i1] = (z*va-zt*vat)/(z-zt) + 0.5*gt*(z-zt);				vbh[i1] = (zb*vab-z*va)/(zb-z) - 0.5*gb*(zb-z);				vah[i1] = va;				dvdzh[i1] = g;				xvh[i1] = x;				zvh[i1] = z;				nvh[ivs[isort[iz]]] += 1;				if(iz==0) {					vth[i1] = va;				} else if (iz==jh-1) {					vbh[i1] = vth[i1];				}				/*				fprintf(stderr,			"vt=%6.0f vb=%6.0f va=%6.0f g=%6.0f x=%6.0f z=%6.0f \n",					vth[i1],vbh[i1],vah[i1],dvdzh[i1],x,z);				*/			}		}		/* fing vt, bt, dvdz and va at pick positions */		for(ih=lhnvelo;ih<nhs;ih++) {			tty = efopen("/dev/tty","r");                        fprintf(stderr,      "Replace Top velocities in horizon %d with those in VELO? (y/n) ->",ih+1);                        vtopyes = getc(tty);                        efclose(tty);			tty = efopen("/dev/tty","r");                        fprintf(stderr,  "Replace Bottom velocities in horizon %d with those in VELO? (y/n) ->",ih+1);                        vbotyes = getc(tty);                        efclose(tty);                        if(vtopyes=='n' && vbotyes=='n') continue;			n2 = ih*maxpks;			n1 = ih*ncdp_velo;			nvs = nvh[ih];			if(nvs==0) {				fprintf(stderr, 				"warning: no velan at horizon %d\n",ih+1); 				fprintf(stderr, 				"warning: editing of ifile needed !!!\n"); 				for(ip=0;ip<npicks[ih];ip++) {					if(vtopyes=='y') veltops[ip+n2] = 0.;                                	if(vbotyes=='y') velbots[ip+n2] = 0.;                                	velavgs[ip+n2] = 0.;                                	dvdzs[ip+n2] = 0.;				}			} else if (nvs==1) {				for(ip=0;ip<npicks[ih];ip++) {					if(vtopyes=='y') veltops[ip+n2]=vth[n1];                                	if(vbotyes=='y') velbots[ip+n2]=vbh[n1];                                	velavgs[ip+n2] = vah[n1];                                	dvdzs[ip+n2] = dvdzh[n1];				}			} else {				/* not a good idea to use spline interpolation					here */				/*				if(nvs>2) {					z21 = 0.;                                        z2n = 0.;                                        spline_(xvh+n1,vth+n1,						&nvs,&z21,&z2n,vt2,vb2);                                        spline_(xvh+n1,vbh+n1,						&nvs,&z21,&z2n,vb2);                                        spline_(xvh+n1,vah+n1,						&nvs,&z21,&z2n,va2);                                        spline_(xvh+n1,dvdzh+n1,						&nvs,&z21,&z2n,dvdz2);				} 				*/				for(ip=0;ip<npicks[ih];ip++) {					x = xpicks[ip+ih*maxpks];					bisear_(&nvs,&one,xvh+n1,&x,&i2);					if(x<=xvh[n1]) {						if(vtopyes=='y') 						veltops[ip+n2] = vth[n1];						if(vbotyes=='y')                                		velbots[ip+n2] = vbh[n1];                                		velavgs[ip+n2] = vah[n1];                                		dvdzs[ip+n2] = dvdzh[n1];					} else if(x>=xvh[n1+nvs-1]) {						if(vtopyes=='y') 						veltops[ip+n2] = vth[n1+nvs-1];						if(vbotyes=='y')                                		velbots[ip+n2] = vbh[n1+nvs-1];                                		velavgs[ip+n2] = vah[n1+nvs-1];                                		dvdzs[ip+n2] = dvdzh[n1+nvs-1];					} else { 					/*} else if(nvs==2) {  */						tmp = (x-xvh[n1+i2-1])/						      (xvh[n1+i2]-xvh[n1+i2-1]);						if(vtopyes=='y') 						veltops[ip+n2] = vth[n1+i2-1] +						  tmp*(vth[n1+i2]-vth[n1+i2-1]);						if(vbotyes=='y')						velbots[ip+n2] = vbh[n1+i2-1] +						  tmp*(vbh[n1+i2]-vbh[n1+i2-1]);                                		velavgs[ip+n2] = vah[n1+i2-1] +						  tmp*(vah[n1+i2]-vah[n1+i2-1]);                                		dvdzs[ip+n2] = dvdzh[n1+i2-1] +						  tmp*						  (dvdzh[n1+i2]-dvdzh[n1+i2-1]);					/*					} else {						if(vtopyes=='y')                                         	splint_(xvh+n1,vth+n1,vt2,&nvs,							&x,&veltops[ip+n2]);						if(vbotyes=='y')                                        	splint_(xvh+n1,vbh+n1,vb2,&nvs,							&x,&velbots[ip+n2]);                                        	splint_(xvh+n1,vah+n1,va2,&nvs,							&x,&velavgs[ip+n2]);                                        	splint_(xvh+n1,dvdzh+n1,dvdz2,							&nvs,&x,&dvdzs[ip+n2]);					*/					}				}			}			/* add velan locations to horizon picks */			j2 = nvs + npicks[ih];			for(i2=0;i2<npicks[ih];i2++) { 				xnew[i2] = xpicks[i2+ih*maxpks];				znew[i2] = zpicks[i2+ih*maxpks];				vtnew[i2] = veltops[i2+ih*maxpks];				vbnew[i2] = velbots[i2+ih*maxpks];				vanew[i2] = velavgs[i2+ih*maxpks];				gnew[i2] = dvdzs[i2+ih*maxpks];			}			for(i2=0;i2<nvs;i2++) { 				xnew[i2+npicks[ih]] = xvh[n1+i2];				znew[i2+npicks[ih]] = zvh[n1+i2];				vtnew[i2+npicks[ih]] = vth[n1+i2];				vbnew[i2+npicks[ih]] = vbh[n1+i2];				vanew[i2+npicks[ih]] = vah[n1+i2];				gnew[i2+npicks[ih]] = dvdzh[n1+i2];			}			if(vtopyes=='n') {				i2 = npicks[ih];				lin1d_(xpicks+ih*maxpks,veltops+ih*maxpks,&i2,					xnew,vtnew,&j2,indx);			}			if(vbotyes=='n') {				i2 = npicks[ih];				lin1d_(xpicks+ih*maxpks,velbots+ih*maxpks,&i2,					xnew,vbnew,&j2,indx);			}			for(i2=0;i2<j2;i2++) indx[i2] =  i2;			qkisort(j2,xnew,indx);			xpre = xnew[indx[0]] - 999.;			j1 = 0;			for(i2=0;i2<j2;i2++) {				inow = indx[i2];			   	xnow = xnew[inow];				i1 = j1 + ih*maxpks;			   	if(abs(xnow-xpre)>=1.) {					xpicks[i1] = xnow;					zpicks[i1] = znew[inow];					veltops[i1] = vtnew[inow];					velbots[i1] = vbnew[inow];					velavgs[i1] = vanew[inow];					dvdzs[i1] = gnew[inow];					xpre = xnow;					j1 = j1 + 1;				}			}			if(j1>maxpks) 			err("too many picks!! npick=%d at horizon %d",j1,ih+1); 			npicks[ih] = j1;		}		free(indx);		free(xnew);		free(znew);		free(vtnew);		free(vbnew);		free(vanew);		free(gnew);		free(zvs);		free(ivs);		free(isort);		free(zsort);		free(nvh);		free(xvh);		free(zvh);		free(vbh);		free(vth);		free(vah);		free(dvdzh);		free(zgrid);		free(vagrid);		free(dvdzgrid);		free(g1);		free(g2);		free(z2);		/*		free(vt2);		free(vb2);		free(va2);		free(dvdz2);		*/	}}/* interface velocity edit */ void ivedit(float *xpick, float *vpick, char *hcolor, int nvi, char *title,		float xmin, float dcdp, int cdpxmin, int *isave) {	Display *dpy1;	Window win1;	XEvent event;	KeySym keysym;	GC gci, gci2;        XGCValues *values;        XColor scolor,ecolor;        XWindowAttributes wa;        Colormap cmap;	int scr;	XComposeStatus keystat;	char keybuf[256];	unsigned long black, white;	int xbox, ybox, wbox, hbox, showloc=0;	int xx1, yy1, xx2, yy2, i, n1tic, n2tic;	float d1num, d2num, f1num, f2num, x1begb, x2begb, x1endb, x2endb;	float vmin, vmax;	int x, y, width, height, style ;	int grid1=SOLID, grid2=SOLID,ip;	float x1,x2,dis,dismin;	float *vps;	float cdpbegb, cdpendb;	char *label1="cdp",*label2="velocity",		*labelfont="Erg14",*titlefont="Rom22",		*labelcolor="blue",*titlecolor="red",		*g

⌨️ 快捷键说明

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