Seismic Ray Tracing in 3d and 2d

Left_Arrow Seismic Imaging Home Page Left_Arrow Seismic Imaging & Modeling Software Left_Arrow Time to Depth Conversion

Summary:

Ray Tracing facilities are available for tracing rays through gridded velocity models and through smaller, smoother, (B-Spline) velocity models, A suite of programs trace rays through large, complex, gridded (2d or 3d ) velocity structures using a workstation or supercomputer. They allow for the display and manipulation of rays, surfaces, and traveltimes. Rays may be traced from a subsurface horizon (or horizons), z(x,y), to the surface, z=0. (That is, z(x,y) can can have multiple values at x,y.) The resulting rays, surfaces, and traveltimes may be displayed. Rays may also be traced from picked arrival times at the surface downward through a complex velocity model until the travel time along the ray is equal to 1/2 of the surface arrival time. The intent is to provide an interactive facility for testing and designing velocity models and data acquisition plans. Surfaces may be modeled through one velocity model and migrated through another to find a hypothetical location for the surface in the new model. Rays may be propagated up and down through a model to study illumination. Areas of a surface for which normal rays cannot make a round trip may be poorly illuminated. Illumintion via matched pairs of incident and reflected rays may be studied.

A table of the usage information (man pages) for ray tracing and surface manipulation programs is available.

General Information

The ray tracer assumes that the velocity model is too big to fit into main memory but that two depth layers of the model will fit into memory. The ray tracer reads a velocity model one depth layer at a time, propagates all of the rays through a velocity that is bi-linearly interpolated between 2 layers, and then reads the next depth layer. Thus the velocity model is read ONLY once and the time and space needed to read the model is minimised. However, rays that reverse direction would require revisiting past layers of the velocity model and are artificially "killed" by the program.

Dead rays are flagged by changing the sign of the vertical component of the propagation vector (the last column of the PtNorms file). Dead rays can be filtered out of the data by either setting flags on the command line or using filters provided (PtNorms_up and PtNorms_down).

Rays that wander outside of the region of definition of the velocity model are propagated through an extrapolated velocity model. The model is extrapolated by assuming that the velocity is constant in the horizontal direction. That is, the vertical gradient is the same everywhere outside of the region of definition and it is equal to the gradient at the edge. In the vertical direction, the velocity is extrapolated by assuming that the vertical gradient is the same everywhere below the region of definition as it is at the bottom edge of the region.

Filters are available to filter windows of the ray attributes such as position, and direction (cPtNorms_Filter), and total distance travelled (PtNorms_Filter).

The flag "save_rays=y" causes ray paths to be saved during the computation. Rays are stored in binary gocad format or simple gocad ascii format. The rayfile may be VERY large if you have many rays and many layers in the velocity model. The size of the rayfile varies as the product of the number of rays and the number of layers and thus can get very big very fast! And it stores the entire rayfile in memory until done with the raytracing! So, you can easily use all available memory by storing ray paths. It would be an easy modification for the raytracer to create the output rayfile a layer at a time instead saving all of the data in memory until the raytracing is completed. Let us know if you need this enhancement.

Examples:

To show the capabilities of the raytracing system, rays were traced from the surface of the 3d Phenix (Gabon) salt model to the surface z=0. The rays can be displayed using various graphical packages.

Example 1: Rays traced from a line along a complex salt surface

The program usp2PtNorms was used to create ray starting positions and directions in PtNorm format. Then PtNorms_win was used to select rays starting on a thin slice through the salt surface. The slice contained one value of y and all values of x. Then d3depth2time was used to trace rays from this starting line to the surface. The resulting rays were then displayed using a prototype ray/surface display program.
Ray_Surface_movie Movie of a line of rays and a salt surface rotating.


Perspective view of a line of rays and a salt surface.

Example 2: Rays traced from a patch of a large complex salt surface. This was created using essentially the same procedure as was used for the line traced from a salt surface except that the xmax, xmin, ymax, ymin window allowed a large number of x and y values to pass through the PtNorms_win filter. And the number of rays was reduced by using the Filter_by_Factor program.

Example 3:Surface arrival times from a complex salt surface. 570,000 surface arrival times displayed by Gocad and xsd show low coverage near the tops of salt domes. The rays originated on a regular grid on the surface of the salt. Variations in ray initial directions (directions of the salt surface normals) and variations in the velocity above the salt surface distributed the rays unevenly at z=0. The black regions in figure 2 represent areas where no rays impinged on the surface. The first arrival was used in regions with multiple arrivals


Time_Surface Gocad view of surface arrival times
Amplitude_Surface xsd view of surface arrival amplitudes from fx modeling for comparison to ray coverage.
TravelTime xsd view of ray arrival times from ray tracing for comparison to fx modeling. Notice how the black regions (regions with no rays) correspond to areas having low amplitude in the fx model.

Checking the Raytracer

In order to verify that the ray tracer traces rays correctly, rays were traced from depth to the surface and back down to depth. The rays returned to within 18 inchs of the original horizontal location and returned exactly to the original depth. Travel time for rays traveling in a constant velocity gradient agree with analytical travel times with discrepancies of about 50 microseconds in a 1 second travel time.

List of Programs:

In the following programs, command line arguments control essential parameters like the names of the input files, output files, accuracy, and yes/no decision on storage of ray paths. The velocity is specified by an arbitrarily complex, gridded model of the subsurface. Velocity is assumed to obey a trilinear interpolation between grid points. Each program has a help facility triggered by a command line flag of the form "help=" or "-help".

For more information contact:
Dan Vasicek, 918-660-3082, or 422-3082,
dvasicek@trc.amoco.com or
Dan Whitmore, 918-660-3351, 422-3351, dwhitmore@trc.amoco.com

List of Ray Tracing Utility Programs

d3depth2time - Models events propagated thorough arbitrarily complex, gridded velocity models. It traces rays from a subsurface horizon upwards to the surface z=0.

d3time2depth - Migrates events to depth horizons by tracing rays downward from a surface until travel time along the ray is equal to the input ray travel time.

depth2time_ray and depth2time - Model events by tracing rays from a subsurface horizon upwards to the surface z=0. The input and output horizons are specified by xsd segments. The initial ray directions may be computed by the program to be normal (perpendicular) to the starting horizon or supplied to the program as extra information in the xsd file.

depth2time_ray writes an output xsd segment file giving the ray position and traveltime as a function of depth. The program depth2time does not write the xsd ray segment file.

PtNorms2grid (under construction)- Translates a PtNorms file into a seismic "grid" in any dds supported format (usp, segy, disco, ...).

PtNorms2list - Converts 3d PtNorm files to ascii list format files. Then program putsis can be used to translate the resulting list into a usp data file. Thus surface arrival times may be displayed by xsd. Positions in the usp grid without data are given zero values.

PtNorms2usp - Interpolates and converts 3d PtNorm files to usp format data files. Positions in the usp grid without data are interpolated by averaging nonzero values in
adjacent grids.

PtNorms2dds -translates PtNorms data into any dds syupported format. Any of the properties in the PtNorms data can be used to create a surface in dds format.

PtNorms_Filter_by_Factor - Passes 1/n of the input points from a PtNorm file into the output file. The input filename, output filename, and "n" are determined by command line arguments. Starting with the first PtNorm value every "n'th" PtNorm is passed to the output PtNorm file.

PtNorms_win - Passes input points from a PtNorm file that fit into a x,y window into the output PtNorms file. Processing parameters defining the window, xmin, xmax, ymin, and ymax are determined by command line arguments of the form xmax= 1000.

usp2PtNorms - Takes a surface defined by a usp file (z(x,y)) and creates a PtNorms file describing a normal at each node of the usp grid. The input file and output files are specified by command line arguments. data= uspfilename out_norms=file_name_out

grid2PtNorms - Takes a surface defined as a dds "grid" consisting of a surface and a mask. The mask is zero at places where the surface is not defined. And no normal is computed at points where the mask indicates that the surface is not defined. And if there are not enough defined points adjacent to an existing point no normal will be computed.

Project Agreement D-95-2520, 3d Ray Tracing for Map Migration

Ray Tracing Complex Velocity Models

GN9516 September 1995 -TUL

Daniel J. Vasicek


Last Modified: . Document access count: