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

📄 lmktzconv.c

📁 seismic software,very useful
💻 C
字号:
/* LMKTZCONV program */#include "velo.h"#include "usgrid.h"#include "par.h"char *sdoc = "LMKTZCONV - Landmark time-depth convertion program			\n""\n""lmktzconv <landmark.in.file vgrid= [parameters] >landmark.out.file	\n" "\n""Required parameters:							\n""landmark.in.file=  name of Landmark input file (time or depth)		\n""landmark.out.file= name of Landmark output file (depth or time)	\n""vgrid=             name of velocity grid 				\n""Optional parameters:							\n""xlpos=2            column position of landmark crossline number	\n""slpos=1            column position of landmark line number 		\n""tzpos=5            column position of landmark time (in ms) or depth 	\n""maxp=250000        maximum number of rows in the landmark pick file	\n""vgtype=1           velocity grid type (1=interval 0=time-average) 	\n""torz=0             type of input landmark picks 			\n""                   (0=time   output will be depth			\n""                    1=depth  output will be time (ms) )	\n""vtorz=0            velocity in time or depth (0=time 1=depth)			\n""o1=                minimum time in ms of velocity grid 		\n""d1=                time sampling interval in ms of velocity grid	\n" "ocdp2=             minimum crossline number of velocity grid 		\n""dcdp2=             crossline number increment of velocity grid		\n""oline3=            minimum line number of velocity grid		\n""dline3=            line number increment of velocity grid 		\n""\n""                   The above six parameters default to grid header	\n""                   of input vgrid; use gridheader to print or update	\n""                   the input velocity grid if needed; when supplied	\n""                   they will overwrite the values in the velocity grid	\n""verbos=0           1= for print velocity location when velocity \n""                   file is larger than 1.8GB			\n" "NOTES:						 			\n""\n""AUTHOR:		Zhiming Li,       ,	11/24/94   		\n";void bilint_(int *n1,int *nx,int *ny, float *x0,float *y0,	float *dx,float *dy,float *x,float *y,float *vs,float *v);void lin1dn_(float *xin,float *yin,int *nin,float *xo,float *yo,	int *nout,int *indx,float *dydx0,float *dydxn);main(int argc, char **argv){	FILE *infp=stdin, *outfp=stdout, *vfp;	string vgrid; 	int maxp=250000,xlpos=2,slpos=1,tzpos=5,torz=0,vtorz=0;	float ocdp2, dcdp2, oline3, dline3, o1, d1;	int vgtype=1;	float xl,sl;	usghed usgh;	int n1, n2, n3, i1, i2, i3, idisk, verbos;	long long lpos;	int ierr;	float *vs,*tv,*zv,*v;	float *fbuf;	char *cbuf;	int one=1,indx,nc,nf;	float tmp;	float to, zo, dtdzn, dtdz0;	float dzdt0, dzdtn;   	/* initialization */   	initargs(argc,argv);   	askdoc(1);	/* get input parameters */	if( !getparstring("vgrid",&vgrid) ) err("vgrid missing");	vfp = efopen(vgrid,"r");	file2g(vfp);	ierr = fgetusghdr(vfp, &usgh);	if(ierr!=0) err("error get grid header ");		if( !getparfloat("o1",&o1) ) o1 = usgh.o1;	if( !getparfloat("d1",&d1) ) d1 = usgh.d1;	if( !getparfloat("ocdp2",&ocdp2) ) ocdp2 = usgh.ocdp2;	if( !getparfloat("dcdp2",&dcdp2) ) dcdp2 = usgh.dcdp2;	if( !getparfloat("oline3",&oline3) ) oline3 = usgh.oline3;	if( !getparfloat("dline3",&dline3) ) dline3 = usgh.dline3;	if(dcdp2==0) err("dcdp2 equals 0");	if(dline3==0) err("dline3 equals 0");	if( !getparint("vgtype",&vgtype) ) vgtype = 1;	if( !getparint("xlpos",&xlpos) ) xlpos=2; xlpos -= 1;	if( !getparint("slpos",&slpos) ) slpos=1; slpos -= 1;	if( !getparint("tzpos",&tzpos) ) tzpos=5; tzpos -= 1;	if( !getparint("maxp",&maxp) ) maxp=250000;	if( !getparint("torz",&torz) ) torz=0;	if( !getparint("vtorz",&vtorz) ) vtorz=0;	if( !getparint("verbos",&verbos) ) verbos = 0;	n1 = usgh.n1;	n2 = usgh.n2;	n3 = usgh.n3;	nc = 200;	nf = 10;	idisk = 0;	if(n1*n2*n3>1800000000/4) idisk = 1;	/* memory allocations */	if(idisk ==0) {    		vs = (float*)emalloc(n1*n2*n3*sizeof(float));	}    	v = (float*)emalloc(n1*sizeof(float));    	tv = (float*)emalloc(n1*sizeof(float));    	zv = (float*)emalloc(n1*sizeof(float));    	fbuf = (float *) malloc(nf*sizeof(float));    	cbuf = (char *) emalloc(nc*sizeof(char));	for(i1=0;i1<n1;i1++) tv[i1] = o1+i1*d1;	for(i1=0;i1<n1;i1++) zv[i1] = o1+i1*d1;	fseek2g(vfp,0,0);	if(idisk==0) efread(vs,sizeof(float),n1*n2*n3,vfp);    	fgets(cbuf,nc,infp);    	do {		sscanf(cbuf,"%f %f %f %f %f",			&fbuf[0],&fbuf[1],&fbuf[2],&fbuf[3],&fbuf[4]);		xl = fbuf[xlpos];		sl = fbuf[slpos];		    	if(idisk==0) {			bilint_(&n1,&n2,&n3,&ocdp2,&oline3,&dcdp2,&dline3,&xl,&sl,vs,v);		} else {			tmp = (xl - ocdp2)/dcdp2 + 0.5;			i2 = tmp;			if(i2<0) i2=0;			if(i2>n2-1) i2=n2-1;			tmp = (sl - oline3)/dline3 + 0.5;			i3 = tmp;			if(i3<0) i3=0;			if(i3>n3-1) i3=n3-1;			lpos = i3*n2+i2;			lpos = lpos * n1 * sizeof(float);			fseek2g(vfp,lpos,0);			efread(v,sizeof(float),n1,vfp);			if(verbos) fprintf(stderr," vgrid i2=%d i3=%d xl=%f sl=%f \n",i2+1,i3+1,xl,sl);	    	}		if(torz==0) {			to = fbuf[tzpos];			if(vgtype==1) {				if(vtorz==0) {					zv[0] = o1*v[0]*0.0005;					for(i1=1;i1<n1;i1++) 						zv[i1] = zv[i1-1] + (v[i1-1]+v[i1])*d1*0.00025;				} else if (vtorz==1) {					for(i1=0;i1<n1;i1++)						zv[i1] = o1 + i1*d1;					tv[0] = o1/v[0]*2000.;					for(i1=1;i1<n1;i1++)						tv[i1] = tv[i1-1] + d1/(v[i1-1]+v[i1])*4000.;				}			} else {				for(i1=0;i1<n1;i1++) 					zv[i1] = (o1+i1*d1)*v[i1]*0.0005;			}			dzdt0 = (zv[1]-zv[0])/(tv[1]-tv[0]);			dzdtn = (zv[n1-1]-zv[n1-2])/(tv[n1-1]-tv[n1-2]);			lin1dn_(tv,zv,&n1,&to,&zo,&one,&indx,&dzdt0,&dzdtn);			fbuf[tzpos] = zo;		} else {			zo = fbuf[tzpos];			if(vgtype==1) {				if(vtorz==1) {					tv[0] = o1/v[0]*2000.;					for(i1=1;i1<n1;i1++)						tv[i1] = tv[i1-1] + d1/(v[i1-1]+v[i1])*4000.;				} else if(vtorz==0) {					for(i1=0;i1<n1;i1++)						tv[i1] = o1 + d1*i1;					zv[0] = o1*v[0]*0.0005;					for(i1=1;i1<n1;i1++)						zv[i1] = zv[i1-1] + (v[i1-1]+v[i1])*d1*0.00025;				}			} else {				for(i1=0;i1<n1;i1++)					tv[i1] = o1 + d1*i1;				for(i1=0;i1<n1;i1++)					zv[i1] = (o1+i1*d1)*v[i1]*0.0005;			}			dtdz0 = (tv[1]-tv[0])/(zv[1]-zv[0]);			dtdzn = (tv[n1-1]-tv[n1-2])/(zv[n1-1]-zv[n1-2]);			lin1dn_(zv,tv,&n1,&zo,&to,&one,&indx,&dtdz0,&dtdzn);			fbuf[tzpos] = to;		}		fprintf(outfp, 		"                    %10.2f%10.2f%12.2f%12.2f%12.4f   \n",                        fbuf[0],fbuf[1],fbuf[2],fbuf[3],fbuf[4]);                bzero(cbuf,nc);	} while(fgets(cbuf,nc,infp));			free(cbuf);	free(fbuf);	free(vs);	free(v);	free(tv);	free(zv);	exit(0);}

⌨️ 快捷键说明

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