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

📄 sushift.c

📁 seismic software,very useful
💻 C
字号:
#include "su.h"#include "segy.h"#include "header.h"/*********************** self documentation **********************/string sdoc =" 								 \n"" SUSHIFT - apply static shift to input traces  		 \n"" 								 \n"" sushift <datain [parameters] >dataout			 	 \n"" 							         \n"" Required parameters:						 \n""  none								 \n"" Optional parameters:						 \n""  datum=0	      constant datum to shift to (ms)		 \n" 	" 							         \n"" Note:	\n"" shift is determined from sstat and gstat in trace header:	\n""   	shift = (sstat+gstat-datum),				\n"" positive number shifts down, negative shifts up.		\n"" After shift, the amount of shifting is output at tstat in header. \n""\n"" Author:  Zhiming Li		3/12/1992                        \n"" 							         \n";	/**************** end self doc ***********************************/segytrace trin, trout; 		/* defind input and output trace buffers */segybhdr bh; 			/* define SEGY ascii header buffer */segychdr ch; 			/* define SEGY binary header buffer */ /* main program */main(int argc, char **argv){			float *work; 		/* working buffer */	int nt;			/* number of samples per trace */	int it;			/* time index */	FILE *infp=stdin;	/* standard input file pointer */	FILE *outfp=stdout;	/* standard output file pointer */	int datum, jt, shift,kt;	float tmp, dt;	/* initialize */	initargs(argc, argv);	/* initialize parameter reading */ 	askdoc(1);		/* on-line self documentation *//* make file size to be able to exceed 2 G */	file2g(infp);	file2g(outfp);/* parameters fetching */	if (!getparint("datum",&datum)) datum=0;/* id header processing (optional) */        fgethdr(infp,&ch,&bh); 	/* read segy id (ascii and binary) headers */         fputhdr(outfp,&ch,&bh); /* output id headers *//* processing */ 	if (!fgettr(infp,&trin))  err("can't get first trace");				/* read in the first trace, exit if fail */	nt = trin.ns;		/* obtain number of samples per trace */	dt = trin.dt;	dt = dt/1000;	/* memory allocation */	work = (float*) malloc(nt*sizeof(float));	/* Main loop over traces */	do {		/* get trace header value offset */		shift = trin.sstat+trin.gstat;		tmp = (shift - datum)/dt ;		jt = tmp;		for(it=0;it<jt;it++) work[it] = 0.;		/* shift trace to work */		for(it=0;it<nt;it++) {			kt = it - jt;			if(kt>=0 && kt <nt) {				work[it] = trin.data[kt];			} else {				work[it] = 0.;			}		}		/* copy work to trace output */		for(it=0;it<nt;it++) trout.data[it] = work[it];		/* copy trace header (240 bytes) to output */		bcopy(&trin, &trout, HDRBYTES);		/* update trace header value delrt */		trout.tstat=jt*dt;		/* output trace */	      	fputtr(outfp,&trout); 	} while (fgettr(infp,&trin));		/* reading traces */	/* free space */	free(work);	/* close input and output */	fclose(infp);	fclose(outfp);	return 0;}

⌨️ 快捷键说明

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