Array defaults: if a single default value is indicated for an array parameter, all elements of the array have that default value. Layer boundaries: must begin at xmin and end at xmax even if the layer above and/or below is pinched out (unless the boundary is defined by only one point, then it is specified at xmax). Bottom layer boundary: should consist of at most ten points. Near-vertical layer boundaries: should be avoided because they may result in large velocity gradients nearby. If necessary, the adjacent trapezoids should have zero velocity gradient. Shot point locations: may be anywhere in the model, but locating them directly on a model boundary may cause problems. Ray group: is defined as a set of rays specified by a ray code in the array ray, possibly modified to include multiple reflections and/or conversions, whose take-off angles are determined by an iterative search mode or specified by the user using ray=1.0 and the arrays amin and amax. Zero velocity gradient: if the four corner velocities of a model trapezoid are equal, then there is a zero velocity gradient inside and no ray bending will occur. It is preferable to have a zero gradient in all or part of a layer rather than a very small gradient so that the Runge Kutta routine can be avoided and straight ray paths are used. Large velocity gradients: ray tracing becomes inaccurate if the velocity gradient is large and the ray step length is not small enough. In this case a warning message is given and the value of smin and/or step should be reduced. Ray code: listed in the file r1.out for each ray traced is supplied as an internal check to ensure that the correct rays specified in the array ray or the arrays amin and amax have been traced. This ray code is determined by the program as follows: the number to the left of the decimal refers to the deepest layer encountered by the ray; the number to the right of the decimal will be one, unless (1) the ray was reflected upward from a layer boundary, in which case it will be two, or (2) the ray travelled as a head wave, in which case it will be three (assuming the ray was not reflected upward from a layer boundary after traveling as a head wave). Shot point located at depth: in this case, the array ray should not contain ray codes corresponding to layers above the shot point. Ray step length: a very small value of step may not result in increased ray tracing accuracy due to round-off error Ray changes direction: a ray traveling left to right can reflect or refract and change direction and travel right to left, or vice versa. Terminating a ray: if istop=0, a ray will be traced until it encounters the top, bottom, left or right of the model, unless it is reflected off the top of the model using nrbnd and rbnd. Ray stopped warning: the warnings which begin "ray stopped -" are included in the file r1.out directly before the summary information for that particular ray is listed. Failure of ray search mode: it is possible that the iterative shooting/bisection algorithm used in the ray search mode may fail, or find a limited range of take-off angles that only sample a part of a layer, if either (1) the model has large lateral variations, (2) the range of take-off angles defining the desired ray group is very small, (3) the value of nsmax is too small or stol is too large, or (4) it is not possible to trace the desired type of rays through a particular part of the model (i.e., violates Snell's law). In any case, increase the value of nsmax first and then decrease the value of stol if necessary and this should work (unless the problem is case 4). If this fails, take-off angles can be supplied manually using ray=1.0 and the arrays amin and amax. Use irays=1 to see why the search mode is failing. Travel time curves: join successive points of the same ray code in the same ray group. Prograde and retrograde branches will be separated if ibreak=1. Ray search mode and multiple reflections: for ray groups specified by L.2 in the array ray, the take-off angles determined in the search mode will correspond to rays which reflect off the Lth layer boundary only and may or may not give rise to the multiple reflections specified by nrbnd and rbnd . Integer code in the file tx.out: is used to identify each travel time to allow for the appropriate comparison with the rays traced during inversion It will begin at one and be incremented one for each ray group if itxout=1. In addition, the integer will be incremented by one for a change from a prograde to retrograde branch or vice versa if ibreak=1. This may be undesirable if the prograde and retrograde branches should be identified by a single number for inversion or if more than one ray group should be identified by the same number, in which case itxout=2 or 3 and the array ivray should be used when writing to the file tx.out. Laterally homogeneous layer: if a layer boundary is to be horizontal or the upper or lower velocity of a layer is to be constant, then only a single point is required in the velocity model and it should be specified at an x-coordinate equal to xmax. If two or more points are required, then the first and last point must be specified at xmin and xmax, respectively. Constant velocity layer: to specify a layer with constant velocity, assign a single upper layer velocity at xmax and assign a lower layer velocity of zero at xmax. Zero vertical velocity gradient layer: to specify a layer with zero vertical velocity gradient, assign one or more upper layer velocities as usual and assign a lower layer velocity of zero at xmax. Zero velocity discontinuity across layer boundary: to specify a layer boundary with no associated velocity discontinuity, assign an upper layer velocity of zero at xmax for the layer directly beneath the boundary. Fixed vertical velocity gradient: if the vertical velocity gradient is to remain fixed in all or part of a layer during the inversion, then the x-coordinates at which the upper and lower layer velocities are defined must be the same. Note that if the x-coordinates of the velocity values are not all the same as the location of the upper and lower layer boundary nodes, then it is possible for the velocity gradient to vary at these nodes since there are no velocities specified at these points and the upper and lower layer velocities are interpolated from values on either side, or at xmax if only one velocity point is used. Fixed layer thickness: if the thickness of a layer is to remain fixed in all or part of a layer during the inversion, then the x-coordinates at which the upper and lower layer boundaries are defined must be the same. Multiple ray paths to a single observation: if more than one pair of ray paths brackets the location of an observed travel time pick, then the pair of ray paths corresponding to the least interpolated travel time is used to calculate the travel time residual and the partial derivatives for the inversion. Inversion of zero-velocity-discontinuity boundary: it is not possible to invert for a layer boundary with an associated zero-velocity discontinuity if only refracted rays cross the boundary, i.e., rays must be reflected off the boundary (although the physical meaning of reflections from a zero-velocity discontinuity must be considered). Boundaries crossing after inversion: check that layer boundaries do not cross after inversion; if they do, re-do the inversion with increased damping or re-do the ray tracing with the appropriate boundary nodes held fixed or the thickness of the layer held fixed. Inversion of layer pinchouts: for a few special cases there are bugs in the inversion code when attempting to invert model parameters associated with a layer pinchout. S-waves and inversion: although rays corresponding to S-waves and conversions can be traced, they should not be traced if partial derivatives are being calculated for the purpose of inversion since the appropriate code to invert for S-wave velocity or Poisson's ratio has not yet been included. External plot routines: RAYINVR is self-contained except for the graphics calls inside the following CALCOMP or CALCOMP-like plot routines: PLOTS, PLOT, NUMBER, SYMBOL, LINE, EMPTY, ERASE, PLOTND. The file pltlib.f contains ALL these routines (and a few other less important ones used by the graphics system where the code was developed) and it will be necessary to replace the "call" statements within each of these with their equivalents in the local graphics package.