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

📄 csmodel.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 2 页
字号:
	fprintf(paramfp,"geometry-file_os=%g                       :receiver geometry\n",os);  	if(plot==-1) {	fprintf(paramfp,"                                    :second plot descriptor (sgq)\n");	fprintf(paramfp,"l                                   :job descriptor (rlt)\n");	} else {	fprintf(paramfp,"sg                                  :second plot descriptor (sgq)\n");	fprintf(paramfp,"rl                                  :job descriptor (rlt)\n");	}	fprintf(paramfp,"csm_os=%g                                 :output filename(s)\n",os);	fprintf(paramfp,"%-5.1f  %-5.1f                        :range of takeoff angles\n",amin,amax);	fprintf(paramfp,"%-5.1f                               :increment in takeoff angle\n",da);	for(ih=0;ih<nhs;ih=ih+3) {		imax = 3;		if(ih+imax >nhs) imax = nhs - ih;		for(i=0;i<imax;i++) {			jh = ih + i;			tmp = 0.;			j1 = 1;			j2 = npicks[jh];			nn = npicks[jh];			if(ns==1) {				tmp1 = sx[0]+r1;				if(r1>0.) tmp1 = sx[0]; 				tmp2 = sx[0]+r4;				if(r4<0.) tmp2 = sx[0];				if(tmp1>tmp2) {					tmp = tmp2;					tmp1 = tmp2;					tmp2 = tmp;				}				if(tmp1<xpicks[jh*maxpks]) {					j1 = 1;				} else if(tmp1>xpicks[jh*maxpks+nn-1]) {					j1 = nn;				} else {					bisear_(&nn,&one,						xpicks+jh*maxpks,&tmp1,&j1);				}				if(tmp2<xpicks[jh*maxpks]) {					j2 = 1;				} else if(tmp2>xpicks[jh*maxpks+nn-1]) {					j2 = nn;				} else {					bisear_(&nn,&one,						xpicks+jh*maxpks,&tmp2,&j2);				}			}		 	for(j=j1-1;j<j2;j++) {				tmp = tmp + veltops[jh*maxpks+j] 				    + velbots[jh*maxpks+j];			}				tmp = tmp /(j2-j1+1);			fprintf(paramfp,"%-7.1f ",0.5*tmp); 		}		if(ih+imax!=nhs) {			fprintf(paramfp,"\n");		} else {			fprintf(paramfp,"                       :velocities\n");		}	}	fprintf(paramfp,"%1s                                   :direct wave? (y or n)\n",direct);	if(nhead==0) {		fprintf(paramfp,"                                    :headwave interface numbers (1,2,...)\n");	} else {		for(ih=0;ih<nhead;ih++) {			fprintf(paramfp,"%d ",headhn[ih]);		}		fprintf(paramfp,"                                    :headwave interface numbers (1,2,...)\n");	}	fprintf(paramfp,"n                                   :all primaries? (y or n)\n");	for(ih=0;ih<nh;ih++) {		fprintf(paramfp,"%-2d                                  :reflection from interface %d\n",			hn[ih],hn[ih]);	}	for(i=0;i<nm;i++) fprintf(paramfp, "%s",mn[i]);		fclose(paramfp);	/* output param1_2 file */	paramfp = fopen(param1_2,"w");	fprintf(paramfp,"model-file_os=%g                          :model file\n",os);	fprintf(paramfp,"%-2d                                  :#interfaces in model\n",nhs-1);	fprintf(paramfp,"plotcolors_os=%g                          :model colors file\n",os);	fprintf(paramfp,"                                    :first plot descriptor (mwq)\n");	fprintf(paramfp,"don't care                          :well coordinates\n");	fprintf(paramfp,"s                                   :shooting mode (sd)\n");	fprintf(paramfp,"geometry-file_os=%g                       :receiver geometry\n",os);  	fprintf(paramfp,"                                    :second plot descriptor (sgq)\n");	fprintf(paramfp,"t                                   :job descriptor (rlt)\n");	fprintf(paramfp,"csm_os=%g                                 :output filename(s)\n",os);	fprintf(paramfp,"%-5.1f  %-5.1f                        :range of takeoff angles\n",amin,amax);	fprintf(paramfp,"%-5.1f                               :increment in takeoff angle\n",da);	for(ih=0;ih<nhs;ih=ih+3) {		imax = 3;		if(ih+imax >nhs) imax = nhs - ih;		for(i=0;i<imax;i++) {			jh = ih + i;                        tmp = 0.;                        j1 = 1;                        j2 = npicks[jh];                        nn = npicks[jh];                        if(ns==1) {                                tmp1 = sx[0]+r1;                                if(r1>0.) tmp1 = sx[0];                                tmp2 = sx[0]+r4;                                if(r4<0.) tmp2 = sx[0];                                if(tmp1>tmp2) {                                        tmp = tmp2;                                        tmp1 = tmp2;                                        tmp2 = tmp;                                }                                if(tmp1<xpicks[jh*maxpks]) {                                        j1 = 1;                                } else if(tmp1>xpicks[jh*maxpks+nn-1]) {                                        j1 = nn;                                } else {                                        bisear_(&nn,&one,                                                xpicks+jh*maxpks,&tmp1,&j1);                                }                                if(tmp2<xpicks[jh*maxpks]) {                                        j2 = 1;                                } else if(tmp2>xpicks[jh*maxpks+nn-1]) {                                        j2 = nn;                                } else {                                        bisear_(&nn,&one,                                                xpicks+jh*maxpks,&tmp2,&j2);                                }                        }                        for(j=j1-1;j<j2;j++) {                                tmp = tmp + veltops[jh*maxpks+j]                                    + velbots[jh*maxpks+j];                        }                        tmp = tmp /(j2-j1+1);                        fprintf(paramfp,"%-7.1f ",0.5*tmp);			/*			jh = ih + i;			tmp = 0.;		 	for(j=0;j<npicks[jh];j++) {				tmp = tmp + veltops[jh*maxpks+j] 				    + velbots[jh*maxpks+j];			}				tmp = tmp /(npicks[jh]*2);			fprintf(paramfp,"%-7.1f ",tmp); 			*/		}		if(ih+imax!=nhs) {			fprintf(paramfp,"\n");		} else {			fprintf(paramfp,"                       :velocities\n");		}	}	fprintf(paramfp,"%1s                                   :direct wave? (y or n)\n",direct);	if(nhead==0) {		fprintf(paramfp,"                                    :headwave interface numbers (1,2,...)\n");	} else {		for(ih=0;ih<nhead;ih++) {			fprintf(paramfp,"%d ",headhn[ih]);		}		fprintf(paramfp,"                                    :headwave interface numbers (1,2,...)\n");	}	fprintf(paramfp,"n                                   :primaries? (y or n)\n");	for(ih=0;ih<nh;ih++) {		fprintf(paramfp,"%-2d                                  :reflection from interface %d\n",			hn[ih],hn[ih]);	}	for(i=0;i<nm;i++) fprintf(paramfp, "%s",mn[i]);			fclose(paramfp);	/* output param2 file */	tmp = (r2-r1)/dr + (r4-r3)/dr + 1 + 1 + 0.5;	nr  = tmp;		paramfp = fopen(param2,"w");	fprintf(paramfp,"s                                :job option (s,r)\n");	fprintf(paramfp,"1  %d                             :first, last shot for sort\n",ns);	fprintf(paramfp,"1  %d                           :first, last trace OR first last receiver\n",		nr);	fprintf(paramfp,"%-4.1f %-4.1f %-4.1f %-4.1f              :frequency spectrum of wavelet\n",				f1,f2,f3,f4);	fprintf(paramfp,"%-4.3f                            :wavelet length (secs)\n",wl*0.001);	fprintf(paramfp,"%-4.3f                            :sample rate (secs)\n",dt*0.001);	fprintf(paramfp,"%-6.3f                            :record length (secs)\n",tmax*0.001);	fprintf(paramfp,"csm_os=%gshot                          :input filename\n",os);	fprintf(paramfp,"csm_os=%gtraces                        :output filename\n",os);	fclose(paramfp);	/* output plotcolors file */	sprintf(fname,"plotcolors_os=%g\0",os);	paramfp = fopen(fname,"w");	fprintf(paramfp, "0          receivers\n");	fprintf(paramfp, "4          sources\n");	fprintf(paramfp, "6          well color\n");	fprintf(paramfp, "%d          caustic rays\n",ccolor);	fprintf(paramfp, "%d          rays\n",rcolor);	fprintf(paramfp, "%d          interfaces\n",icolor);	fprintf(paramfp,"\n");	fprintf(paramfp,"\n");	fprintf(paramfp,"\n");	fprintf(paramfp,"key:  (CWP's xgraph colors)\n");	fprintf(paramfp,"0      black\n");	fprintf(paramfp,"1      white\n");	fprintf(paramfp,"2      red\n");	fprintf(paramfp,"3      green\n");	fprintf(paramfp,"4      dark blue\n");	fprintf(paramfp,"5      light blue\n");	fprintf(paramfp,"6      violet\n");	fprintf(paramfp,"7      yellow\n");	fclose(paramfp);		/* plot rays */	bzero(cmd,1024);	sprintf(cmd,"cp %s %s",param1_1,param1);	system(cmd);	if(comp==0 || comp==1) {		bzero(cmd,1024);		sprintf(cmd,	"cshot1 param1=%s | cshotplot >csmplot_os=%g outpar=csmpar_os=%g",			param1,os,os);		system(cmd);	}else if(comp==-1) {		bzero(cmd,1024);		sprintf(cmd,"cshot1 param1=%s >/dev/null",param1);		system(cmd);	}	if(plot==0) {		bzero(cmd,1024);		if(rfsave==0) {			sprintf(cmd,"( xgraph <csmplot_os=%g par=csmpar_os=%g style=seismic title='Csmodel raypaths' label1=Depth label2=Distance x1beg=%g x1end=%g x2beg=%g x2end=%g ; /bin/rm -f csmpar_os=%g csmplot_os=%g ) &",			os,os,zmini,zmaxi,xmini,xmaxi,os,os); 		} else {			sprintf(cmd,"xgraph <csmplot_os=%g par=csmpar_os=%g style=seismic title='Csmodel raypaths' label1=Depth label2=Distance x1beg=%g x1end=%g x2beg=%g x2end=%g &",			os,os,zmini,zmaxi,xmini,xmaxi); 		}	} else if(plot==1) {		sprintf(cmd,"psgraph <csmplot_os=%g par=csmpar_os=%g title=Csmodel label1=Depth label2=Distance x1beg=%g x1end=%g x2beg=%g x2end=%g | lpr &",			os,os,zmini,zmaxi,xmini,xmaxi); 	}	if(comp!=2 && comp!=-1 && plot!=-1) {		system(cmd);		if(plot==1 && rfsave==0) {			bzero(cmd,1024);			sprintf(cmd,"/bin/rm -f csmpar_os=%g csmplot_os=%g");			system(cmd);		}	}	if(comp==0 || comp==-1) goto notrace;	bzero(cmd,1024);	sprintf(cmd,"cp %s %s",param1_2,param1);	system(cmd);	bzero(cmd,1024);	sprintf(cmd,"cshot1 param1=%s >/dev/null",param1);	system(cmd);	bzero(cmd,1024);	sprintf(cmd,"cshot2 param2=%s",param2);	system(cmd);	nt = 1 + ( tmax + dt / 2. ) / dt;	j = dt*1000;	bzero(cmd,1024);	sprintf(cmd,"suaddhead <csm_os=%gtraces ftn=1 ns=%d | sushw key=dt a=%d >csmtraces.segy_os=%g", os,nt,j,os);	system(cmd);	bzero(fname,80);	sprintf(fname,"csm_os=%gtraces\0",os);	if(rfsave==0) unlink(fname); 	bzero(fname,80);	sprintf(fname,"csmtraces.segy_os=%g\0",os);	datafp = fopen(fname,"r");	i = 0;	dcdp = dr * 0.5;	if (ds!=0. && ds<dr) dcdp = ds * 0.5; 	fgethdr(datafp,&ch,&bh);	nt = nt - 1;	bh.hns = nt;	bh.ntrpr = nr;	bh.tsort = 1;	bh.hdt = dt * 1000;	bh.format = 1;	fputhdr(outfp,&ch,&bh);	while( fgettr(datafp,&tr) ) {		i = i + 1;		js = (i-1)/nr;		tr.tracl = i;		tr.sx = (int) sx[js];		tmp = r1 + (i-js*nr-1)*dr + 0.0001; 		if(tmp<=r2) {			tr.gx = (int)tmp + tr.sx;			j = i;		} else {			tmp = r3 + (i-j-1)*dr;			tr.gx = (int) tmp + tr.sx;		}		tr.ep = js + 1;		tr.fldr = js + 1;		tr.tracf = i-js*nr;		tr.offset = tr.gx - tr.sx;		tmp = tr.gx + tr.sx;		tmp = tmp * 0.5;		tmp = tmp/dcdp + 1.5; 		js  = tmp;		tr.cdp = js;		tr.scalco = 1;		tr.trid = 1;		tr.delrt = (int) dt;		tr.ns = nt;		for(it=0;it<nt;it++) tr.data[it] = tr.data[it+1]; 		fputtr(outfp,&tr);	}		if(plot==0) {		bzero(cmd,1024);		if(rfsave==0) {			sprintf(cmd,	"( <csmtraces.segy_os=%g suxwigb title='Modeled gather' label1=Time label2=Trace xcur=2 grid1=solid perc=99 ; /bin/rm -f csmtraces.segy_os=%g ) & ",os,os,os); 		} else {			sprintf(cmd,	"<csmtraces.segy_os=%g suxwigb title='Modeled gather' label1=Time label2=Trace xcur=2 grid1=solid perc=99 & ",os); 		}		system(cmd);	} else {		bzero(cmd,1024);		sprintf(cmd,"<csmtraces.segy_os=%g supswigb title='Modeled gather' label1=Time label2=Trace xcur=2 grid1=solid perc=99 | lpr ",os);		system(cmd);		if(rfsave==0) {			bzero(cmd,1024);			sprintf(cmd,"/bin/rm -f csmtraces.segy_os=%g ",os);			system(cmd);		}	}	notrace:	if(rfsave==0) {		bzero(fname,80);		sprintf(fname,"model-file_os=%g\0",os);		unlink(fname);		bzero(fname,80);		sprintf(fname,"geometry-file_os=%g\0",os); 		unlink(fname);		unlink(param1_1);		unlink(param1_2);		unlink(param1);		unlink(param2);		bzero(fname,80);		sprintf(fname,"plotcolors_os=%g\0",os); 		unlink(fname);		if(comp!=0) {			bzero(fname,80);			sprintf(fname,"csm_os=%gshot\0",os); 			unlink(fname);		}		bzero(fname,80);		sprintf(fname,"csm_os=%gdata\0",os); 		unlink(fname);		bzero(fname,80);		sprintf(fname,"csm_os=%glisting\0",os); 		unlink(fname);		system("sleep 5");		if(comp==1 || comp==2) {			bzero(fname,80);			sprintf(fname,"csmtraces.segy_os=%g\0",os); 			unlink(fname);		}	}	return(0);}

⌨️ 快捷键说明

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