SYNOPSIS
PERL PROGRAM NAME:
AUTHOR: Juan Lorenzo (Perl module only)
DATE:
DESCRIPTION:
Version:
USE
NOTES
Examples
SYNOPSIS
SEISMIC UNIX NOTES RAYDATA - simple program to display ray data from elaray
raydata <rayends [optional parameters]
Optional Parameters:
kend= Index of interest
t=0 =1 output of x_t requested
px=0 =1 output of x_px requested
pz=0 =1 output of x_pz requested
vgx=0 =1 output of x_vgx requested
vgz=0 =1 output of x_vgz requested
pxvx=0 =1 output of px_vgx requested
pol=0 =1 output of x_polangle requested
ascci=0 binary output
=1 ascci output
Simple program to display some of the computed raydata.
Output is written into files <*.data>
Author: Andreas Rueger, Colorado School of Mines, 02/15/94
the main program
int main (int argc, char **argv)
{
int ir,nre,nrealloc,nri,iri,tout,ascci;
int pxout,pzout,vgxout,vgzout,pxvxout;
int polout;
float *tdata=NULL,*xdata=NULL,*pxdata=NULL,*pzdata=NULL;
float *vgxdata=NULL,*vgzdata=NULL,*pxvxdata=NULL;
float *poldata=NULL,*g11data=NULL,*g33data=NULL,*g13data=NULL;
/* float g11,g33,g13;*/
int kend;
RayEnd *re;
FILE *txfp=NULL,*pxfp=NULL,*pzfp=NULL,*vgxfp=NULL,*vgzfp=NULL;
FILE *outparfp=NULL,*polfp=NULL,*pxvxfp=NULL;
/* hook up getpar to handle the parameters
initargs(argc,argv);
requestdoc(0);
/* get parameters
if (!getparint("kend",&kend)) kend = INT_MAX;
if (!getparint("t",&tout)) tout = 0;
if (!getparint("px",&pxout)) pxout = 0;
if (!getparint("pz",&pzout)) pzout = 0;
if (!getparint("vgx",&vgxout)) vgxout = 0;
if (!getparint("vgz",&vgzout)) vgzout = 0;
if (!getparint("pxvx",&pxvxout)) pxvxout = 0;
if (!getparint("pol",&polout)) polout = 0;
if (!getparint("ascci",&ascci)) ascci = 0;
checkpars();
/* output file control
if(tout>0) txfp= fopen("x_t.data","w");
if(pxout) pxfp= fopen("x_px.data","w");
if(pzout) pzfp= fopen("x_pz.data","w");
if(vgxout) vgxfp= fopen("x_vgx.data","w");
if(vgzout) vgzfp= fopen("x_vgz.data","w");
if(pxvxout) pxvxfp= fopen("px_vgx.data","w");
if(polout) polfp= fopen("x_pol.data","w");
if(!ascci) outparfp = efopen("outpar","w");
/* read rayends
nre = nri = 0;
nrealloc = 301;
re = ealloc1(nrealloc,sizeof(RayEnd));
while (fread(&re[nre],sizeof(RayEnd),1,stdin)==1) {
nre++;
if (nre==nrealloc) {
nrealloc += 100;
re = erealloc1(re,nrealloc,sizeof(RayEnd));
}
}
if(kend == INT_MAX){
nri=nre;
} else {
/* how many rayends are of interest
for(ir = 0; ir < nre;ir +=1 )
if(re[ir].kend == kend) nri++;
}
/* allocate space for data files
if(tout>0) tdata = ealloc1(nri,sizeof(float));
if(pxout|| pxvxout) pxdata = ealloc1(nri,sizeof(float));
if(pzout) pzdata = ealloc1(nri,sizeof(float));
if(vgxout|| pxvxout) vgxdata = ealloc1(nri,sizeof(float));
if(vgzout) vgzdata = ealloc1(nri,sizeof(float));
if(pxvxout) pxvxdata = ealloc1(nri,sizeof(float));
if(polout){
poldata = ealloc1(nri,sizeof(float));
g11data = ealloc1(nri,sizeof(float));
g13data = ealloc1(nri,sizeof(float));
g33data = ealloc1(nri,sizeof(float));
}
xdata = ealloc1(nri,sizeof(float));
iri = 0;
/* read in data into files
for(ir = 0; ir < nre;ir +=1 ){
/*fprintf(stderr,"ir=0 \t kend=0\n",ir,re[ir].kend);*/
if(re[ir].kend == kend || kend == INT_MAX) {
if(tout>0) tdata[iri] = re[ir].t;
if(pxout|| pxvxout) pxdata[iri] = re[ir].px;
if(pzout) pzdata[iri] = re[ir].pz;
if(vgxout|| pxvxout) vgxdata[iri] = re[ir].vgx;
if(vgzout) vgzdata[iri] = re[ir].vgz;
if(polout){
g11data[iri] = re[ir].g11;
g33data[iri] = re[ir].g33;
g13data[iri] = re[ir].g13;
}
xdata[iri] = re[ir].x;
iri++;
}
}
/* compute polarization
if(polout){
for(ir = 0; ir < nre;ir +=1 ){
if(g13data[ir] > 0){
poldata[ir]=atan(sqrt(g11data[ir]/g33data[ir]));
} else if(g13data[ir] < 0){
poldata[ir]=PI/2+atan(sqrt(g33data[ir]/g11data[ir]));
} else if(g13data[ir] == 0 && g33data[ir]>0){
poldata[ir]=0.0;
} else if(g13data[ir] == 0 && g33data[ir]<0){
poldata[ir]=PI/2;
}
/*fprintf(stderr,"pol=0\n",poldata[ir]);*/
}
}
/* ASCII output for x_t
if(ascci ==1 && tout ==1){
for(ir=0;ir<nri;ir+=1)
fprintf(txfp,"0.000000 0.000000\n",xdata[ir],tdata[ir]);
/* Binary output for x_t
} else if(ascci ==0 && tout ==1){
for(ir=0;ir<nri;ir+=1){
fwrite(&tdata[ir],sizeof(float),1,txfp);
fwrite(&xdata[ir],sizeof(float),1,txfp);
}
}
/* ASCII output for x_px
if(ascci ==1 && pxout ==1){
for(ir=0;ir<nri;ir+=1)
fprintf(pxfp,"0.000000 0.000000\n",xdata[ir],pxdata[ir]);
/* Binary output for x_px
} else if(ascci ==0 && pxout ==1){
for(ir=0;ir<nri;ir+=1){
fwrite(&pxdata[ir],sizeof(float),1,pxfp);
fwrite(&xdata[ir],sizeof(float),1,pxfp);
}
}
/* ASCII output for x_pz
if(ascci ==1 && pzout ==1){
for(ir=0;ir<nri;ir+=1)
fprintf(pzfp,"0.000000 0.000000\n",xdata[ir],pzdata[ir]);
/* Binary output for x_pz
} else if(ascci ==0 && pzout ==1){
for(ir=0;ir<nri;ir+=1){
fwrite(&pzdata[ir],sizeof(float),1,pzfp);
fwrite(&xdata[ir],sizeof(float),1,pzfp);
}
}
/* ASCII output for x_vgx
if(ascci ==1 && vgxout ==1){
for(ir=0;ir<nri;ir+=1)
fprintf(vgxfp,"0.000000 0.000000\n",xdata[ir],vgxdata[ir]);
/* Binary output for x_vgx
} else if(ascci ==0 && vgxout ==1){
for(ir=0;ir<nri;ir+=1){
fwrite(&vgxdata[ir],sizeof(float),1,vgxfp);
fwrite(&xdata[ir],sizeof(float),1,vgxfp);
}
}
/* ASCII output for x_vgz
if(ascci ==1 && vgzout ==1){
for(ir=0;ir<nri;ir+=1)
fprintf(vgzfp,"0.000000 0.000000\n",xdata[ir],vgzdata[ir]);
/* Binary output for x_vgz
} else if(ascci ==0 && vgzout ==1){
for(ir=0;ir<nri;ir+=1){
fwrite(&vgzdata[ir],sizeof(float),1,vgzfp);
fwrite(&xdata[ir],sizeof(float),1,vgzfp);
}
}
/* ASCII output for px_vgx
if(ascci == 1 && pxvxout != 0){
for(ir=0;ir<nri;ir+=1)
fprintf(pxvxfp,"0.000000 0.000000\n",pxdata[ir],vgxdata[ir]);
/* Binary output for px_vgx
} else if(ascci ==0 && pxvxout != 0){
for(ir=0;ir<nri;ir+=1){
fwrite(&pxdata[ir],sizeof(float),1,pxvxfp);
fwrite(&vgxdata[ir],sizeof(float),1,pxvxfp);
}
}
/* ASCII output for px_vgx
if(ascci == 1 && polout != 0){
for(ir=0;ir<nri;ir+=1)
fprintf(polfp,"0.000000 0.000000\n",xdata[ir],poldata[ir]);
/* Binary output for px_vgx
} else if(ascci ==0 && polout != 0){
for(ir=0;ir<nri;ir+=1){
fwrite(&xdata[ir],sizeof(float),1,polfp);
fwrite(&poldata[ir],sizeof(float),1,polfp);
}
}
if(!ascci) fprintf(outparfp,"0\n",nri);
return EXIT_FAILURE;
}
User's notes (Juan Lorenzo) untested
CHANGES and their DATES
Import packages
instantiation of packages
Encapsulated hash of private variables
sub Step
collects switches and assembles bash instructions by adding the program name
sub note
collects switches and assembles bash instructions by adding the program name
sub clear
sub ascci
sub g11data
sub g13data
sub g33data
sub ir
sub iri
sub kend
sub nre
sub nrealloc
sub nri
sub outparfp
sub pol
sub poldata
sub polfp
sub polout
sub px
sub pxdata
sub pxfp
sub pxout
sub pxvx
sub pxvxdata
sub pxvxfp
sub pxvxout
sub pz
sub pzdata
sub pzfp
sub pzout
sub re
sub t
sub tdata
sub tout
sub txfp
sub vgx
sub vgxdata
sub vgxfp
sub vgxout
sub vgz
sub vgzdata
sub vgzfp
sub vgzout
sub xdata
sub get_max_index
max index = number of input variables -1