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

📄 gridtrsp.c

📁 seismic software,very useful
💻 C
字号:
/* GRIDTRSP grid transpose program */#include "grid.h"#include "gridhd.h"#include "par.h"char *sdoc = "GRIDTRSP - 3D grid transpose program					\n""\n""gridtrsp [parameters] <grid.input >grid.output			\n" "\n""Required parameters:							\n""None									\n""Optional parameters:							\n""oaxes=312       output axes order					\n""                123=  no transpose; output is same as input		\n""                231=  output axes (1,2,3) are 2,3,1 of input axes      \n" "                132=  output axes (1,2,3) are 1,3,2 of input axes      \n" "                312=  output axes (1,2,3) are 3,1,2 of input axes      \n" "                213=  output axes (1,2,3) are 2,1,3 of input axes      \n" "mlimit=512      memory limit to run the program 				\n""\n""AUTHOR:		Zhiming Li,       ,	9/14/93   		\n"    ;int main(int argc, char **argv){	FILE *infp=stdin, *outfp=stdout;    	int n1,n2,n3,n4,n5;    	float o1,o2,o3,o4,o5,d1,d2,d3,d4,d5;	float scale; 	int dtype;	float ocdp2,dcdp2,oline3,dline3,gmin,gmax;	int orient, gtype=0;	    int n1o,n2o,n3o,n4o,n5o;    float o1o,o2o,o3o,o4o,o5o;	float d1o,d2o,d3o,d4o,d5o;	int i1,i2,i3,i4,i5;	int ierr, iseek, oaxes, ltrace, larray;	float *trace, tmp, *array;	float sscale;	int mlimit, m3, k3, j3, m2, k2, j2;	ghed gh;    	/* initialization */    	initargs(argc,argv);    	askdoc(1);	/* get input grid parameters */    	ierr = fgetghdr(infp,&gh);	if(ierr==0) {		fromghdr(&gh,&scale,&dtype,&n1,&n2,&n3,&n4,&n5,               	 		&d1,&d2,&d3,&d4,&d5,&o1,&o2,&o3,&o4,&o5,                		&dcdp2,&dline3,&ocdp2,&oline3,&gmin,&gmax,				&orient,&gtype);	} else {		err(" use program transp for nonstandard grid file"); 	}	/* get update parameters */	if (!getparint("oaxes", &oaxes)) oaxes = 312;	if (!getparint("mlimit", &mlimit)) mlimit = 512;	if(n2==0) n2=1;	if(n3==0) n3=1;	if(n4==0) n4=1;	if(n5==0) n5=1;	if (oaxes==123) {		trace = (float*) malloc(n1*sizeof(float));		for(i2=0;i2<n2*n3*n4*n5;i2++) {			efread(trace,sizeof(float),n1,infp);			efwrite(trace,sizeof(float),n1,outfp);		}		free(trace);		fflush(outfp);		ierr = fputghdr(outfp,&gh);		if(ierr!=0) warn(" fputghdr error \n");	} else if(oaxes==213) {		trace = (float*) malloc(n2*sizeof(float));		array = (float*) malloc(n1*n2*sizeof(float));		for(i3=0;i3<n3*n4*n5;i3++) {			efread(array,sizeof(float),n1*n2,infp);			for(i1=0;i1<n1;i1++) {				for(i2=0;i2<n2;i2++) 					trace[i2] = array[i1+i2*n1];				efwrite(trace,sizeof(float),n2,outfp);			}		}		free(trace);		free(array);		n1o = n2;		n2o = n1;		n3o = n3;		d1o = d2;		d2o = d1;		d3o = d3;		o1o = o2;		o2o = o1;		o3o = o3;		if(orient==1) {			orient = 3;		} else if (orient==2) {		        orient = 5;		} else if (orient==3) {		      	orient = 1;		} else if (orient==4) {		       	orient = 6;		} else if (orient==5) {		       	orient = 2;		} else if (orient==6) {		       	orient = 4;		}			fflush(outfp);		toghdr(&gh,&scale,&dtype,&n1o,&n2o,&n3o,&n4,&n5,               		&d1o,&d2o,&d3o,&d4,&d5,&o1o,&o2o,&o3o,&o4,&o5,               		&dcdp2,&dline3,&ocdp2,&oline3,&gmin,&gmax,			&orient,&gtype);		ierr = fputghdr(outfp,&gh);		if(ierr!=0) warn(" fputghdr error \n");	} else if(oaxes==132) {		trace = (float*) malloc(n1*sizeof(float));		for(i5=0;i5<n5;i5++) {			for(i4=0;i4<n4;i4++) {				for(i2=0;i2<n2;i2++) {					for(i3=0;i3<n3;i3++) {						iseek = sizeof(float)*n1*							(i2+i3*n2 							+ i4*n3*n2+i5*n4*n3*n2);						efseek(infp,iseek,0);						efread(trace,sizeof(float),							n1,infp);						efwrite(trace,sizeof(float),							n1,outfp);					}				}			}		}		free(trace);		n1o = n1;		n2o = n3;		n3o = n2;		d1o = d1;		d2o = d3;		d3o = d2;		o1o = o1;		o2o = o3;		o3o = o2;		if(orient==1) {			orient = 2;		} else if (orient==2) {		        orient = 1;		} else if (orient==3) {		      	orient = 4;		} else if (orient==4) {		       	orient = 3;		} else if (orient==5) {		       	orient = 6;		} else if (orient==6) {		       	orient = 5;		}		fflush(outfp);		toghdr(&gh,&scale,&dtype,&n1o,&n2o,&n3o,&n4,&n5,               		&d1o,&d2o,&d3o,&d4,&d5,&o1o,&o2o,&o3o,&o4,&o5,               		&dcdp2,&dline3,&ocdp2,&oline3,&gmin,&gmax,			&orient,&gtype);		ierr = fputghdr(outfp,&gh);		if(ierr!=0) warn(" fputghdr error \n");	} else if(oaxes==312) {		tmp = mlimit * 1024*1024;		tmp = tmp / (n1*n3*sizeof(float));		m2 = tmp;		if (m2>n2) m2 = n2;		trace = (float*) malloc(n1*n3*sizeof(float));		array = (float*) malloc(m2*n1*n3*sizeof(float));		for(i5=0;i5<n5;i5++) {			for(i4=0;i4<n4;i4++) {				for(i2=0;i2<n2;i2=i2+m2) {					k2 = m2;					if(i2+k2>n2) k2 = n2 - i2;					for(i3=0;i3<n3;i3++) {						iseek = sizeof(float)*n1*(i2+i3*n2 							+ i4*n3*n2+i5*n4*n3*n2);						efseek(infp,iseek,0);						efread(array+i3*n1*k2,sizeof(float),n1*k2,infp);					}					for(j2=0;j2<k2;j2++) {						for(i1=0;i1<n1;i1++)							for(i3=0;i3<n3;i3++)								trace[i3+i1*n3]=array[i3*n1*k2+j2*n1+i1];						efwrite(trace,sizeof(float),n1*n3,outfp);					}				}			}		}		free(trace);		free(array);		n1o = n3;		n2o = n1;		n3o = n2;		d1o = d3;		d2o = d1;		d3o = d2;		o1o = o3;		o2o = o1;		o3o = o2;		if(orient==1) {			orient = 5;		} else if (orient==2) {		        orient = 3;		} else if (orient==3) {		      	orient = 6;		} else if (orient==4) {		       	orient = 1;		} else if (orient==5) {		       	orient = 4;		} else if (orient==6) {		       	orient = 2;		}		fflush(outfp);		toghdr(&gh,&scale,&dtype,&n1o,&n2o,&n3o,&n4,&n5,               		&d1o,&d2o,&d3o,&d4,&d5,&o1o,&o2o,&o3o,&o4,&o5,               		&dcdp2,&dline3,&ocdp2,&oline3,&gmin,&gmax,			&orient,&gtype);		ierr = fputghdr(outfp,&gh);		if(ierr!=0) warn(" fputghdr error \n");	} else if(oaxes==231) {		tmp = mlimit * 1024*1024;		tmp = tmp / (n1*n2*sizeof(float));		m3 = tmp;		if (m3>n3) m3 = n3;		array = (float*) malloc(m3*n1*n2*sizeof(float));		trace = (float*) malloc(n2*m3*sizeof(float));		for(i2=0;i2<n2;i2++) trace[i2] = 0.;		for(i5=0;i5<n5*n4*n3*n1;i5++) efwrite(trace,sizeof(float),n2,outfp);		for(i5=0;i5<n5;i5++) {			for(i4=0;i4<n4;i4++) {				for(i3=0;i3<n3;i3=i3+m3) {					k3 = m3;					if(i3+k3>n3) k3 = n3 - i3;					iseek = sizeof(float)*n1*n2*(i3+i4*n3+i5*n4*n3);					efseek(infp,iseek,0);					efread(array,sizeof(float),k3*n1*n2,infp);					for(i1=0;i1<n1;i1++) {						for(j3=0;j3<k3;j3++)						   	for(i2=0;i2<n2;i2++)								trace[i2+j3*n2]=array[j3*n1*n2+i2*n1+i1];						iseek = sizeof(float)*n2*(i3+i1*n3+i4*n3*n1+													i5*n4*n3*n1);						efseek(outfp,iseek,0);						efwrite(trace,sizeof(float),n2*k3,outfp);					}				}			}		}		free(trace);		free(array);		n1o = n2;		n2o = n3;		n3o = n1;		d1o = d2;		d2o = d3;		d3o = d1;		o1o = o2;		o2o = o3;		o3o = o1;		if(orient==1) {			orient = 4;		} else if (orient==2) {		        orient = 6;		} else if (orient==3) {		      	orient = 2;		} else if (orient==4) {		       	orient = 5;		} else if (orient==5) {			orient = 1;		} else if (orient==6) {			orient = 3;		}		fflush(outfp);		toghdr(&gh,&scale,&dtype,&n1o,&n2o,&n3o,&n4,&n5,               		&d1o,&d2o,&d3o,&d4,&d5,&o1o,&o2o,&o3o,&o4,&o5,               		&dcdp2,&dline3,&ocdp2,&oline3,&gmin,&gmax,			&orient,&gtype);		ierr = fputghdr(outfp,&gh);		if(ierr!=0) warn(" fputghdr error \n");	}	efclose(outfp);	efclose(infp);	exit(0);}

⌨️ 快捷键说明

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