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

📄 rayt3d.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 3 页
字号:
			nxyzot = nxot*nyot*nzot;			out_bytes = (long long)floor((double)(num_points[0]*num_points[1]*num_points[2]*sizeof(float))/(double)compress);			in_data = (float *)malloc(num_points[0]*num_points[1]*num_points[2]*sizeof(float));		}	} else {		compress = 0.;	}	if(!nev){ 	    ixs0 = 0;	    iys0 = 0;	    isize = 0;	    nsize = nzot*nyot*nxot;	    if( !getparstring("tfile",&tfile) ) {		tfp = stdout;		if(restart[0]=='y') { 			err(" tfile is needed for restart job \n");		}	    } else {		if((tfp = fopen(tfile,"r"))!=NULL) {			fclose(tfp);			tfp = fopen(tfile,"r+");			} else {	   		tfp = fopen(tfile,"w");		}		if(restart[0]=='y') { 			fseek2g(tfp,0,SEEK_END);			isize = ftell64(tfp);			if(compress<=1.) {				isize=isize/sizeof(float)/nsize;			} else {				isize=(isize-8)/out_bytes;			}			if(isize<0) isize = 0;			if(isize>isres && isres>0) isize=isres-1;			isres = isize + 1;			ixs0 = isize/nys;			iys0 = isize-ixs0*nys;			/* if(isize==ns) return 0; */		} else {			fclose(tfp);			tfp = fopen(tfile,"w");				isres = 1;		}		if(isize==0) {			if(compress>1.) {				fwrite(&out_bytes, sizeof(long long), 1, tfp);			}		}		if(compress<1.0) {			isize = isize*nsize*sizeof(float);		} else {			isize = isize*out_bytes+8;		}		fseek2g(tfp,isize,0);	    }	} else { 	    ixs0 = nxs;	    iys0 = nys;	    for(iev=0; iev<nev; ++iev){			ix = 0;			iy = 0;			isize = 0;			nsize = nzo*nout[iev]; 			if((tofp[iev] = fopen(tofile[iev],"r"))!=NULL) {				fclose(tofp[iev]);				tofp[iev] = fopen(tofile[iev],"r+");				} else {	   			tofp[iev] = fopen(tofile[iev],"w");			}			if(restart[0]=='y') { 				fseek2g(tofp[iev],0,SEEK_END);				isize = ftell64(tofp[iev]);				isize = isize/sizeof(float)/nsize;				ix = isize/nys;				/* iy = isize-ixs0*nys; */				iy = isize-ix*nys;				/*				fprintf(stderr,"isize=%f ix=%d iy=%d \n",(float)isize,ix,iy);				*/				/* if(isize==ns) return 0; */			} else {				fclose(tofp[iev]);				tofp[iev] = fopen(tofile[iev],"w");					isres = 1;			}	    	if(ixs0>ix) {			ixs0=ix;	    		iys0=iy;		}	    }	    is0 = ixs0*nys + iys0;	    if(is0>isres && isres>0) is0 = isres - 1;	    isres = is0 + 1;	    ixs0 = is0/nys;	    iys0 = is0-ixs0*nys;	    for(iev=0; iev<nev; ++iev){			nsize = nzo*nout[iev];			isize = ixs0*nys+iys0;			fseek2g(tofp[iev],isize*nsize*sizeof(float),0);	    }	} 	/* ensure sources is in grid *//* allow some round-off errors *//*	if(fx>fxs || ex<exs || fy>fys || ey<eys || fz>0)  */	if(fx>fxs+0.1 || ex<exs-0.1 || fy>fys+0.1 || ey<eys-0.1 || fz>0) {		if(fx>fxs+0.1) warn("fy=%f fys=%f \n", fx,fxs);		if(ex<exs-0.1) warn("ey=%f eys=%f \n", ex,exs);		if(fy>fys+0.1) warn("fx=%f fxs=%f \n", fy,fys);		if(ey<eys-0.1) warn("ex=%f exs=%f \n", ey,eys);		if(fz>0) warn("fz=%f \n", fz);		err("source lies outside of specified v(x,y,z) grid\n");	}  	if(fx>fxo || ex<exo  || fy>fyo || ey<eyo		|| fz>fzo || ez<fzo+(nzo-1)*dzo) { 	warn("fxo=%g fx=%g exo=%g ex=%g \n",fyo,fy,eyo,ey);	warn("fyo=%g fy=%g eyo=%g ey=%g \n",fxo,fx,exo,ex);	warn("fzo=%g fz=%g ezo=%g ez=%g \n",fzo,fz,fzo+(nzo-1)*dzo,ez);	err("extrapolation lies outside of specified v(x,y,z) grid \n");	} 	/* compute nxtmax and nytmax for ***t arrays */	temp = 2.*aperx/dx + 2.5;	nxtmax = temp;	if(nxtmax>nx) nxtmax = nx;	temp = 2.*apery/dy + 2.5;	nytmax = temp;	if(nytmax>ny) nytmax = ny;	nzyxt = nxtmax * nytmax * nz;	if(!( getparstring("diskvxx",&diskvxx) &&	      getparstring("diskvxy",&diskvxy) &&	      getparstring("diskvxz",&diskvxz) &&	      getparstring("diskvyy",&diskvyy) &&	      getparstring("diskvyz",&diskvyz) &&	      getparstring("diskvzz",&diskvzz) )) {		idisk = 0;	} else {		idisk = 1;	    if(!getparint("idiskc",&idiskc)) idiskc = 0;	}/* velocity input */ 	/* allocate space */	/*	fprintf(stderr,"nxtmax=%d nytmax=%d nz=%d \n",nxtmax,nytmax,nz);	fprintf(stderr,"before ealloc v nx=%d ny=%d nz=%d \n",nx,ny,nz);	fprintf(stderr,"nzo=%d nxo=%d nyo=%d \n",nzo,nxo,nyo);	*/	/* the v group of arrays size: 7*nx*ny*nz*sizeof(float) */ 	v = ealloc1float(nx*ny*nz);	if(idisk==0) {  		vxx = ealloc1float(nx*ny*nz);		vxy = ealloc1float(nx*ny*nz);		vxz = ealloc1float(nx*ny*nz);		vyy = ealloc1float(nx*ny*nz);		vyz = ealloc1float(nx*ny*nz);		vzz = ealloc1float(nx*ny*nz);	} else { 		vv = ealloc1float(nx*ny*nz);	}	/* read velocities */	fseek64(vfp,0,0);	fread(v,sizeof(float),nx*ny*nz,vfp);  	/* compute second derivatives of velocity  */	if(idisk==0) {		dv2_(&nx,&ny,&nz,&dx,&dy,&dz,v,vxx,vxy,vxz,vyy,vyz,vzz);	} else if(idisk==1 && idiskc==0)  {		diskfp = fopen(diskvxx,"w");		file2g(diskfp);		dv2xx_(&nx,&ny,&nz,&dx,&dy,&dz,v,vv);		fwrite(vv,sizeof(float),nx*ny*nz,diskfp);		fclose(diskfp);		diskfp = fopen(diskvxy,"w");		file2g(diskfp);		dv2xy_(&nx,&ny,&nz,&dx,&dy,&dz,v,vv);		fwrite(vv,sizeof(float),nx*ny*nz,diskfp);		fclose(diskfp);		diskfp = fopen(diskvxz,"w");		file2g(diskfp);		dv2xz_(&nx,&ny,&nz,&dx,&dy,&dz,v,vv);		fwrite(vv,sizeof(float),nx*ny*nz,diskfp);		fclose(diskfp);		diskfp = fopen(diskvyy,"w");		file2g(diskfp);		dv2yy_(&nx,&ny,&nz,&dx,&dy,&dz,v,vv);		fwrite(vv,sizeof(float),nx*ny*nz,diskfp);		fclose(diskfp);		diskfp = fopen(diskvyz,"w");		file2g(diskfp);		dv2yz_(&nx,&ny,&nz,&dx,&dy,&dz,v,vv);		fwrite(vv,sizeof(float),nx*ny*nz,diskfp);		fclose(diskfp);		diskfp = fopen(diskvzz,"w");		file2g(diskfp);		dv2zz_(&nx,&ny,&nz,&dx,&dy,&dz,v,vv);		fwrite(vv,sizeof(float),nx*ny*nz,diskfp);		fclose(diskfp);	}	if(idisk==1) {		free(vv); 		vv = ealloc1float(nz);	}	if(idisk==1) {		lenvxx = strlen(diskvxx); 		filevxx = (char*)emalloc(lenvxx+1);		bcopy(diskvxx,filevxx,lenvxx);		filevxx[lenvxx]='\0';		lenvxy = strlen(diskvxy); 		filevxy = (char*)emalloc(lenvxy+1);		bcopy(diskvxy,filevxy,lenvxy);		filevxy[lenvxy]='\0';		lenvxz = strlen(diskvxy); 		filevxz = (char*)emalloc(lenvxz+1);		bcopy(diskvxz,filevxz,lenvxz);		filevxz[lenvxz]='\0';		lenvyy = strlen(diskvyy); 		filevyy = (char*)emalloc(lenvyy+1);		bcopy(diskvyy,filevyy,lenvyy);		filevyy[lenvyy]='\0';		lenvyz = strlen(diskvyz); 		filevyz = (char*)emalloc(lenvyz+1);		bcopy(diskvyz,filevyz,lenvyz);		filevyz[lenvyz]='\0';		lenvzz = strlen(diskvyz); 		filevzz = (char*)emalloc(lenvzz+1);		bcopy(diskvzz,filevzz,lenvzz);		filevzz[lenvzz]='\0';	}   	/* compute slowness squares  */ 	ov2 = ealloc1float(nzo*nyo*nxo);	ov2int_(v,&nx,&ny,&nz,&fx,&fy,&fz,&dx,&dy,&dz,ov2,&nxo,&nyo,&nzo,		&fxo,&fyo,&fzo,&dxo,&dyo,&dzo);	if(nev){    	    if (!getparfloat("v0",&v0)) v0 = 5000;    	    if (!getparfloat("dvz",&dvz)) dvz = 0.;	    dr = (dxo<dyo)?dxo/3.:dyo/3.;	    rmax = sqrt((exs-fxo)*(exs-fxo)+(eys-fyo)*(eys-fyo));	    if(rmax<sqrt((exo-fxs)*(exo-fxs)+(eyo-fys)*(eyo-fys)))		rmax = sqrt((exo-fxs)*(exo-fxs)+(eyo-fys)*(eyo-fys));	    nr = 1.5+rmax/dr;	    tb = alloc1float(nr*nzo); 	    timeb_(&nr,&nzo,&dr,&dzo,&fzo,&dvz,&v0,tb); 	}	/* allocate velocity derivative arrays for ray tracing */	/* memory for this vt group of arrys: 7*nzyxt*ncpu*sizeof(float) bytes */  	vt = ealloc1float(nzyxt*ncpu); 	vxxt = ealloc1float(nzyxt*ncpu);	vxyt = ealloc1float(nzyxt*ncpu);	vxzt = ealloc1float(nzyxt*ncpu);	vyyt = ealloc1float(nzyxt*ncpu);	vyzt = ealloc1float(nzyxt*ncpu);	vzzt = ealloc1float(nzyxt*ncpu);/*	fprintf(stderr," after alloc  vzzt nzyxt=%d \n",nzyxt);*/   	/* allocate time arrays   */	/* this t group of arrays size: 2*(nzo+1)*nyo*nxo*ncpu*sizeof(float) */ 	tt1 = ealloc1float(nyo*nxo*ncpu); 	tt2 = ealloc1float(nyo*nxo*ncpu);	t = ealloc1float(nzo*nyo*nxo*ncpu);	s = ealloc1float(nzo*nyo*nxo*ncpu);	ysp = ealloc1float(ncpu);	xsp = ealloc1float(ncpu);	azhnp = ealloc1float(ncpu);	azhxp = ealloc1float(ncpu);	fxtp = ealloc1float(ncpu);	fytp = ealloc1float(ncpu);	nxtp = ealloc1int(ncpu);	nytp = ealloc1int(ncpu);/*	fprintf(stderr," after alloc  nytp \n");*/    i2 = 2;	i3 = 3;	i6 = 6;	n1 = 128;	if(n1<na) n1 = na;	n2 = 1001*n1;	if(nt>1001) n2 = nt * n1;	/* allocate other working arrays */	/* this p group of arrays size: 28*128*1001*ncpu*sizeof(float) */	xp = ealloc1float(n2*ncpu);	yp = ealloc1float(n2*ncpu);	zp = ealloc1float(n2*ncpu);	pxp = ealloc1float(n2*ncpu);	pyp = ealloc1float(n2*ncpu);	pzp = ealloc1float(n2*ncpu);	e1xp = ealloc1float(n2*ncpu);	e1yp = ealloc1float(n2*ncpu);	e1zp = ealloc1float(n2*ncpu);	e2xp = ealloc1float(n2*ncpu);	e2yp = ealloc1float(n2*ncpu);	e2zp = ealloc1float(n2*ncpu);	q111p = ealloc1float(n2*ncpu);	q112p = ealloc1float(n2*ncpu);	q121p = ealloc1float(n2*ncpu);	q122p = ealloc1float(n2*ncpu);	p211p = ealloc1float(n2*ncpu);	p212p = ealloc1float(n2*ncpu);	p221p = ealloc1float(n2*ncpu);	p222p = ealloc1float(n2*ncpu);	q211p = ealloc1float(n2*ncpu);	q212p = ealloc1float(n2*ncpu);	q221p = ealloc1float(n2*ncpu);	q222p = ealloc1float(n2*ncpu);	vp = ealloc1float(n2*ncpu);	dvdxp = ealloc1float(n2*ncpu);	dvdyp = ealloc1float(n2*ncpu);	dvdzp = ealloc1float(n2*ncpu);	nrsp = ealloc1int(n1*ncpu);	a0p = ealloc1float(n1*ncpu);	azh0p = ealloc1float(n1*ncpu);	p2p = ealloc1float(i2*i2*ncpu);	q2p = ealloc1float(i2*i2*ncpu);	hp = ealloc1float(i3*i3*ncpu);	gradvp = ealloc1float(i3*ncpu);	d2tp = ealloc1float(i6*ncpu);	map = ealloc1int(n1*ncpu);	vs = ealloc1float(n1*ncpu);	dvdxs = ealloc1float(n1*ncpu);	dvdys = ealloc1float(n1*ncpu);	dvdzs = ealloc1float(n1*ncpu);	uxx = ealloc1float(n1*ncpu);	uxy = ealloc1float(n1*ncpu);	uxz = ealloc1float(n1*ncpu);	uyy = ealloc1float(n1*ncpu);	uyz = ealloc1float(n1*ncpu);	uzz = ealloc1float(n1*ncpu);	tzt = ealloc1float(n1*ncpu);	xx = ealloc1float(n1*ncpu);	yy = ealloc1float(n1*ncpu);	zz = ealloc1float(n1*ncpu);	pxs = ealloc1float(n1*ncpu);	pys = ealloc1float(n1*ncpu);	pzs = ealloc1float(n1*ncpu);	e1xs = ealloc1float(n1*ncpu);	e1ys = ealloc1float(n1*ncpu);	e1zs = ealloc1float(n1*ncpu);	e2xs = ealloc1float(n1*ncpu);	e2ys = ealloc1float(n1*ncpu);	e2zs = ealloc1float(n1*ncpu);	p111s = ealloc1float(n1*ncpu);	p112s = ealloc1float(n1*ncpu);	p121s = ealloc1float(n1*ncpu);	p122s = ealloc1float(n1*ncpu);	q111s = ealloc1float(n1*ncpu);	q112s = ealloc1float(n1*ncpu);	q121s = ealloc1float(n1*ncpu);	q122s = ealloc1float(n1*ncpu);	p211s = ealloc1float(n1*ncpu);	p212s = ealloc1float(n1*ncpu);	p221s = ealloc1float(n1*ncpu);	p222s = ealloc1float(n1*ncpu);	q211s = ealloc1float(n1*ncpu);	q212s = ealloc1float(n1*ncpu);	q221s = ealloc1float(n1*ncpu);	q222s = ealloc1float(n1*ncpu);	dxx = ealloc1float(n1*ncpu);	dyy = ealloc1float(n1*ncpu);	dzz = ealloc1float(n1*ncpu);	dpxs = ealloc1float(n1*ncpu);	dpys = ealloc1float(n1*ncpu);	dpzs = ealloc1float(n1*ncpu);	de1x = ealloc1float(n1*ncpu);	de1y = ealloc1float(n1*ncpu);	de1z = ealloc1float(n1*ncpu);	de2x = ealloc1float(n1*ncpu);	de2y = ealloc1float(n1*ncpu);	de2z = ealloc1float(n1*ncpu);	dp111 = ealloc1float(n1*ncpu);	dp112 = ealloc1float(n1*ncpu);	dp121 = ealloc1float(n1*ncpu);	dp122 = ealloc1float(n1*ncpu);	dq111 = ealloc1float(n1*ncpu);	dq112 = ealloc1float(n1*ncpu);	dq121 = ealloc1float(n1*ncpu);	dq122 = ealloc1float(n1*ncpu);	dp211 = ealloc1float(n1*ncpu);	dp212 = ealloc1float(n1*ncpu);	dp221 = ealloc1float(n1*ncpu);	dp222 = ealloc1float(n1*ncpu);	dq211 = ealloc1float(n1*ncpu);	dq212 = ealloc1float(n1*ncpu);	dq221 = ealloc1float(n1*ncpu);	dq222 = ealloc1float(n1*ncpu);	xt = ealloc1float(n1*ncpu);	yt = ealloc1float(n1*ncpu);	zt = ealloc1float(n1*ncpu);	pxt = ealloc1float(n1*ncpu);	pyt = ealloc1float(n1*ncpu);	pzt = ealloc1float(n1*ncpu);	e1xt = ealloc1float(n1*ncpu);	e1yt = ealloc1float(n1*ncpu);	e1zt = ealloc1float(n1*ncpu);	e2xt = ealloc1float(n1*ncpu);	e2yt = ealloc1float(n1*ncpu);	e2zt = ealloc1float(n1*ncpu);	p111t = ealloc1float(n1*ncpu);	p112t = ealloc1float(n1*ncpu);	p121t = ealloc1float(n1*ncpu);	p122t = ealloc1float(n1*ncpu);	q111t = ealloc1float(n1*ncpu);	q112t = ealloc1float(n1*ncpu);	q121t = ealloc1float(n1*ncpu);	q122t = ealloc1float(n1*ncpu);	p211t = ealloc1float(n1*ncpu);	p212t = ealloc1float(n1*ncpu);	p221t = ealloc1float(n1*ncpu);	p222t = ealloc1float(n1*ncpu);	q211t = ealloc1float(n1*ncpu);	q212t = ealloc1float(n1*ncpu);	q221t = ealloc1float(n1*ncpu);	q222t = ealloc1float(n1*ncpu);	dxt = ealloc1float(n1*ncpu);	dyt = ealloc1float(n1*ncpu);	dzt = ealloc1float(n1*ncpu);	dpxt = ealloc1float(n1*ncpu);	dpyt = ealloc1float(n1*ncpu);	dpzt = ealloc1float(n1*ncpu);	de1xt = ealloc1float(n1*ncpu);	de1yt = ealloc1float(n1*ncpu);	de1zt = ealloc1float(n1*ncpu);	de2xt = ealloc1float(n1*ncpu);	de2yt = ealloc1float(n1*ncpu);	de2zt = ealloc1float(n1*ncpu);	dp111t = ealloc1float(n1*ncpu);	dp112t = ealloc1float(n1*ncpu);	dp121t = ealloc1float(n1*ncpu);	dp122t = ealloc1float(n1*ncpu);	dq111t = ealloc1float(n1*ncpu);	dq112t = ealloc1float(n1*ncpu);	dq121t = ealloc1float(n1*ncpu);	dq122t = ealloc1float(n1*ncpu);	dp211t = ealloc1float(n1*ncpu);	dp212t = ealloc1float(n1*ncpu);	dp221t = ealloc1float(n1*ncpu);	dp222t = ealloc1float(n1*ncpu);	dq211t = ealloc1float(n1*ncpu);	dq212t = ealloc1float(n1*ncpu);	dq221t = ealloc1float(n1*ncpu);	dq222t = ealloc1float(n1*ncpu);/*	fprintf(stderr," after alloc  all arrays \n");*/    	fprintf(jpfp," \n");   	fprintf(jpfp," RAYT3D parameters \n");   	fprintf(jpfp,"===================\n");   	fprintf(jpfp," vfile=%s \n",vfile);   	if(nev==0) fprintf(jpfp," tfile=%s \n",tfile);   	fprintf(jpfp," one-way time: dt=%g nt=%d \n",dt,nt);   	fprintf(jpfp," nz=%d nx=%d ny=%d \n",nz,ny,nx);   	fprintf(jpfp," fz=%g fx=%g fy=%g \n",fz,fy,fx);

⌨️ 快捷键说明

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