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

📄 gridthickness.c

📁 seismic software,very useful
💻 C
字号:
#include "velo.h"#include "usgrid.h"#include "par.h"char *sdoc ="GRIDTHICKNESS - Computer thickness between two layes \n""\n""gridthickness <infile >outfile [optional parameters]\n""\n""Required Parameters:\n""infile=          name of the input 3D attribute grid file	\n""outfile=         name of the output 2D thickness file \n""layertop=        name of the 2D grid defining the depth of the layer top \n""layerbot=        name of the 2D grid defining the depth of the layer bottom \n""Optional Parameters:\n""gridnull=-99999  grid value in infile to be exclused from thickness \n""                 calculation \n""tol=0            tolerance value (when abs(grid-gridnull)<=tol \n""                 the grid is treated as gridnull)  	\n""topmask=         name of the 2D grid defining the mask (0 or 1) of the layer top \n""                 if not specified, layertop exists everywhere.		\n""                 (if specified, layertop exists where topmask value=1 \n""                                layertop does not exists where topmask value=0) \n""botmask=         name of the 2D grid defining the mask (0 or 1) of the layer bottom \n""                 if not specified, layerbot exists everywhere.		\n""                 (if specified, layerbot exists where botmask value=1 \n""                                layerbot does not exists where botmask value=0) \n""thicknull=-77777 thickness value to indicate thickness computation is invalid \n" "                 (when either topmask value or botmask value is 0, and there \n""                 are no gridnull values between layertop and layerbot; \n""                 or when both topmask value and botmask value are 0) \n"" Notes:						\n""    1. The program will compute the thickness of the zone between \n""       layertop and layerbot where input grid value is not gridnull. \n""\n""AUTHOR:  Zhiming Li,         6/20/2002			\n""\n";int main(int argc, char **argv){	usghed usghin, usghtop, usghbot, usghtopmask, usghbotmask;	FILE *infp,*outfp,*topfp,*botfp;	FILE *topmaskfp,*botmaskfp;	char *infile,*outfile,*layertop, *layerbot;	char *topmask, *botmask;	int ibot, itop;	int ierr;	int nz, iz;	int n1,n2,n3;	int i1,i2,i3;	float d1,o1,d2,o2,d3,o3;	float saltdz;	float gridnull, tol;	float gmin, gmax, tmp;	float *ztop, *zbot, *grid, *dz, *masktop, *maskbot;	int it, ib;	float thicknull=-77777;	/* hook up getpar */	initargs(argc,argv);	askdoc(0);	/* get parameters */	if(getparstring("infile",&infile)) {		infp = efopen(infile,"r");	} else {		infp = stdin;	}	ierr = fgetusghdr(infp,&usghin);    	if(ierr!=0) err(" input grid header error ");	if(getparstring("outfile",&outfile)) {		outfp = efopen(outfile,"w");	} else {		outfp = stdout;	}	file2g(infp);	file2g(outfp);	if (getparstring("layertop",&layertop)) {		topfp = efopen(layertop,"r");		ierr = fgetusghdr(topfp,&usghtop);      		if(ierr!=0) err(" layertop grid header error ");	} else {		err(" layertop missing ");	}	if (getparstring("layerbot",&layerbot)) {		botfp = efopen(layerbot,"r");		ierr = fgetusghdr(botfp,&usghbot);      		if(ierr!=0) err(" layerbot grid header error ");	} else {		err(" layerbot missing ");	}	if(!getparfloat("gridnull",&gridnull)) gridnull=-99999;	if(!getparfloat("tol",&tol)) tol=0.;	n1 = usghin.n1;	n2 = usghin.n2;	n3 = usghin.n3;	o1 = usghin.o1;	d1 = usghin.d1;	o2 = usghin.o2;	d2 = usghin.d2;	o3 = usghin.o3;	d3 = usghin.d3;	/* memory allocations */	ztop = (float*) emalloc(n2*n3*sizeof(float));	zbot = (float*) emalloc(n2*n3*sizeof(float));	masktop = (float*) emalloc(n2*n3*sizeof(float));	maskbot = (float*) emalloc(n2*n3*sizeof(float));	grid = (float*) emalloc(n1*sizeof(float));	dz = (float*) emalloc(n2*n3*sizeof(float));		/* check grid header of layertop */	if(usghin.n2!=usghtop.n1) err("check layertop header n1");	if(usghin.n3!=usghtop.n2) err("check layertop header n2");	if(usghin.o2!=usghtop.o1) err("check layertop header o1");	if(usghin.o3!=usghtop.o2) err("check layertop header o2");	if(usghin.d2!=usghtop.d1) err("check layertop header d1");	if(usghin.d3!=usghtop.d2) err("check layertop header d2");	efseek(topfp,0,0);	efread(ztop,sizeof(float),n2*n3,topfp);	/* check grid header of layerbot */	if(usghin.n2!=usghbot.n1) err("check layerbot header n1");	if(usghin.n3!=usghbot.n2) err("check layerbot header n2");	if(usghin.o2!=usghbot.o1) err("check layerbot header o1");	if(usghin.o3!=usghbot.o2) err("check layerbot header o2");	if(usghin.d2!=usghbot.d1) err("check layerbot header d1");	if(usghin.d3!=usghbot.d2) err("check layerbot header d2");	efseek(botfp,0,0);	efread(zbot,sizeof(float),n2*n3,botfp);	/* read topmask grid if specified */	if (getparstring("topmask",&topmask)) {		topmaskfp = efopen(topmask,"r");		ierr = fgetusghdr(topmaskfp,&usghtopmask);      		if(ierr!=0) err(" topmask grid header error ");		if(usghin.n2!=usghtopmask.n1) err("check topmask header n1");		if(usghin.n3!=usghtopmask.n2) err("check topmask header n2");		if(usghin.o2!=usghtopmask.o1) err("check topmask header o1");		if(usghin.o3!=usghtopmask.o2) err("check topmask header o2");		if(usghin.d2!=usghtopmask.d1) err("check topmask header d1");		if(usghin.d3!=usghtopmask.d2) err("check topmask header d2");		efseek(topmaskfp,0,0);		efread(masktop,sizeof(float),n2*n3,topmaskfp);	} else {		for(i1=0;i1<n2*n3;i1++) masktop[i1] = 1.;	}	/* read botmask grid if specified */	if (getparstring("botmask",&botmask)) {		botmaskfp = efopen(botmask,"r");		ierr = fgetusghdr(botmaskfp,&usghbotmask);      		if(ierr!=0) err(" botmask grid header error ");		if(usghin.n2!=usghbotmask.n1) err("check botmask header n1");		if(usghin.n3!=usghbotmask.n2) err("check botmask header n2");		if(usghin.o2!=usghbotmask.o1) err("check botmask header o1");		if(usghin.o3!=usghbotmask.o2) err("check botmask header o2");		if(usghin.d2!=usghbotmask.d1) err("check botmask header d1");		if(usghin.d3!=usghbotmask.d2) err("check botmask header d2");		efseek(botmaskfp,0,0);		efread(maskbot,sizeof(float),n2*n3,botmaskfp);	} else {		for(i1=0;i1<n2*n3;i1++) maskbot[i1] = 1.;	}	if (!getparfloat("thicknull",&thicknull)) thicknull=-77777;	for(i3=0;i3<n3;i3++) { 		for(i2=0;i2<n2;i2++) {			efread(grid,sizeof(float),n1,infp);			/*			fprintf(stderr," read input at i2=%d i3=%d \n",i2,i3);			*/			dz[i2+i3*n2] = zbot[i2+i3*n2] - ztop[i2+i3*n2];			tmp = (ztop[i2+i3*n2]-o1)/d1;			it = tmp;			tmp = (zbot[i2+i3*n2]-o1)/d1;			ib = tmp;			saltdz = 0;			if(it<0) it=0; if(it>=n1) it=n1-1;			if(ib<0) ib=0; if(ib>=n1) ib=n1-1;			for(i1=it;i1<ib;i1++) {				if(i1>=0 && i1<n1) {					if(fabs(grid[i1]-gridnull)<=tol) {						dz[i2+i3*n2] -= d1;						saltdz += d1;					}				}			}			if((masktop[i2+i3*n2]+maskbot[i2+i3*n2])==1) {				if(saltdz==0.) dz[i2+i3*n2] = thicknull;			} else if((masktop[i2+i3*n2]+maskbot[i2+i3*n2])==0) {				dz[i2+i3*n2] = thicknull;			}		}	}	gmin = dz[0];	gmax = dz[0];	for(i1=0;i1<n2*n3;i1++) {		if(gmin>dz[i1] && dz[i1]!=thicknull) gmin = dz[i1];		if(gmax<dz[i1] && dz[i1]!=thicknull) gmax = dz[i1];	}	efwrite(dz,sizeof(float),n2*n3,outfp);	usghin.n1 = n2;	usghin.n2 = n3;	usghin.n3 = 1;	usghin.d1 = d2;	usghin.d2 = d3;	usghin.d3 = 1;	usghin.o1 = o2;	usghin.o2 = o3;	usghin.o3 = 0;	ierr = fputusghdr(outfp,&usghin);    	if(ierr!=0) err(" output grid header error ");	free(ztop);	free(zbot);	free(grid);	free(dz);	exit(0);}

⌨️ 快捷键说明

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