POSC Specifications
Version 2.2
Usage Examples
Seismic Datums

[Seismic Table of Contents]


1.5 Seismic Datums

A seismic datum is the "line" or "surface" in the earth which corresponds to zero time on seismic traces. It is generally located within the earth below the slow velocity layer. It is imaginary, and has no significance beyond the meaning given above -- that the surface corresponds to zero time.

There are two types of seismic datums that need to be considered. The first is the simple case of a constant datum. For example, the seismic datum may be given as "2000 feet above mean sea level." This will be handled by locating a point in the earth, andl passing a plane through the point. The plane will be positioned using the vertical_datum_offset, in order to give its offset (of 2000 feet) from the geoid, `mean sea level.'

The second type of datum is the floating datum. This type is common in areas of high topographic relief. In this case, it is generally difficult to find a single, constant plane that will serve for the whole line. The solution is to allow the datum to take different elevations (with respect to sea level) at different positions along the line. Epicentre will handle this case by creating an earth_position_edge, with corresponding geometry, which can then be related to the vertical_datum.

In both cases, the datum will be the origin of the time axis for the seismic data. There will be a vertical_time_system_axis, with a relationship to the vertical_datum.

1.5.1 Constant Datum

Consider a datum to be at 2000 ft above sea level.

--> Begin example: constant vertical datum.

art = EARTH_POSITION_VERTEX {
   identifier --> `2000 ft vertical datum point'; };

(* Note: the vertex is mandatory in v2.1 and earlier of Epicentre.
   It may be optional in later versions *)
 
seis_datum = LOCAL_VERTICAL_DATUM {
   identifier --> `2000 ft vertical datum';
   earth_point --> @art;
   terminate_offset <-- SET ( @vdoff ); };
 
vdoff = VERTICAL_DATUM_OFFSET {
   initial_datum --> @PRV_mean_sea_level; -- geoid
   terminal_datum --> @seis_datum;
   length_offset --> QUANTITY {
      real_value --> 2000.;
      ref_unit_of_measure --> @PRV_ft; }; };

(* Now use the seis_datum as the vertical datum for the axis *)
 
time_axis = VERTICAL_TIME_SYSTEM_AXIS {
  ref_quantity_property --> @PRV_seismic_time;
  vertical_datum --> @seis_datum; };

--> End example: constant vertical datum

1.5.2 Variable Datum

Consider the floating datum to be a series of constant datums. The following figure shows the datum:

where the numbers along the bottom are bin point indexes.

There are two ways to store this geometry. One is to store the elevation at every bin point index (there are 523 of them). This would make use of the already existing grid_1d_equal that was created when setting up the binset. It also has the advantage of making the direct tie of the datum geometry to the bin point geometry, or so it would seem at first glance.

The second way is to store the eight pairs: (101, 6000), (187, 6000), (188, 6200), (249, 6200), (250, 6600), (404, 6600), (405, 6900), (623, 6900). This would use a grid_1d_parametric. It would have the advantage of storing fewer values, but would have the disadvantage of there not being an explicit tie to the binset geometry. The tie is through the coincidence of bin point index values.

1.5.2.1 A Value at Every Bin Point Index

Note: Can use the 'sea level elevation' coordinate system that is given in Epicentre. We can also use the grid_1d that was used in the binset. The binset is optional. If there is no binset, it is necessary to create a grid_1d_equal for use here. However, for this example, assume that the binset instance exists and that the grid is available for use. (refererence it as @bingrid).

---> Example: Full Floating Datum Variation 1

datline = EARTH_POSITION_EDGE {
   identifier --> `Floating datum for Line';
   binset --> @binset; -- the binset that supplies the grid that is used.
   };
 
datgeom = PTY_GEOMETRY_COMPLEX_1D_EDGE {
   edge --> @datline;
   data_value --> LINE_GRID {
   first_g = GEOMETRY_FRAME {
      detailed_type --> `FT_LINE';
        coordinate_system --> @PRV_sea_level_elevation;
        grid_or_mesh --> @bingrid;
        descriptor --> LIST( @descr_1);
        leaf_frame --> SET( @leaf_1 ); };
      descr_1 = DESCRIPTOR {
        dimension --> `INDEX_I';
        lower_bound --> 1;
        count --> 523; };
      leaf_1 = LEAF_FRAME {
        data_type --> `DAE_C_FLOAT';
        ref_unit_of_measure --> @PRV_ft;
        coordinate_system_axis --> @PRV_sea_level_elevation_axis;
        data_values --> LIST( 6000., 6000., ..., 6900. ); }; }; };
 
(* Note that this lists all 523 values, with many repeated often *)
 
(* Now it is necessary, as in the first example, to create an earth_point
   and the vertical_datum through that point *)
 
art = EARTH_POSITION_VERTEX {
   identifier --> `floating vertical datum point'; };

(* Note: the vertex is mandatory in v2.1 and earlier of Epicentre.
   It may be optional in later versions *)
 
seis_datum = LOCAL_VERTICAL_DATUM {
   identifier --> `floating vertical datum';
   earth_point --> @art;
   terminate_offset <-- SET ( @vdoff ); };
 
(* The vertical datum is a face, and the edge (the seismic datum) is a
   line. Presumably, the line is a projection under the seismic line onto
   the vertical datum plane. Use the space time operation to tie these together *)
 
projection = SPACE_TIME_OPERATION {
   ref_space_time_operation --> @PRV_degeneration; -- or projection
   resulting_object --> @datline;
   primary_object --> @seis_datum; };
 

----> End Example: Full Floating Datum Variation 1

It should be noted that the data_value in the pty_geometry_complex_1d_edge could have been given with a sparse representation. For example, only the eight values as described above need to have been given. But this leaves the question open of what happens to the points for which no value us given. It is left up to the application to interpret what to do with these points.

1.5.2.2 A Skeletal Set of Values

The previous example made use of the fact that the bin point geometry was given along with the grid. Thus, a 1d representation (elevation) could give the rest of the information about the location of the datum surface.

In this example, it will be necessary to give the geometry by giving (bin point index, elevation) pairs. This means that a new coordinate system must be created for these pairs of values. I.e., we cannot make use of existing coordinate systems and/or axes.

----> Begin Example: Full Floating Datum Variation 2

(* First create a coordinate system. Note that this coordinate system is not
    among the POSC standard values, but it can be created once and reused. *)
 
binaxis = GENERAL_COORDINATE_SYSTEM_AXIS {
   ref_quantity_property --> @PRV_bin_point_index;
   source --> @RV_MyCompany; };
 
elevaxis = VERTICAL_DEPTH_SYSTEM_AXIS {
   ref_quantity_property --> @PRV_elevation;
   source --> @RV_MyCompany;
   ref_vertical_axis_orientation --> @PRV_upwards;
   measurement_datum --> @PRV_mean_sea_level' }; --geoid
 
bin_elev_cs = LOCAL_SPATIAL_COORDINATE_SYSTEM {
   identifier --> `Bin Point Index vs Elevation';
   ref_coordinate_system_constraint --> @PRV_geometry_2d;
   source --> @RV_MyCompany;
   coordinate_system_axis --> LIST( @binaxis, @elevaxis ); };
 
(* Now create the grid. Cannot use the grid directly from the binset.
    Instead will create a parametric_grid_1d *)
 
parm_grid = GRID_1D_PARAMETRIC {
   name --> `grid for datum description';
   connected --> FALSE;
   point_count --> 8; };
 
(* Now much is a repeat (with slight variations) of previous example *)
 
datline = EARTH_POSITION_EDGE {
   identifier --> `Floating datum for Line'; };
 
datgeom = PTY_GEOMETRY_COMPLEX_1D_EDGE {
   edge --> @datline;
   data_value --> LINE_GRID {
      second_g = GEOMETRY_FRAME {
        detailed_type --> `FT_LINE';
        coordinate_system --> @bin_elev_cs;
        grid_or_mesh --> @parm_grid;
        descriptor --> LIST( @descr_2 );
        leaf_frame --> SET( @leaf_2a, @leaf_2b ); };
      descr_2 = DESCRIPTOR {
        dimension --> `INDEX_I';
        lower_bound --> 1;
        count --> 8; };
      leaf_2a = LEAF_FRAME {
        data_type --> `DAE_C_FLOAT';
        ref_unit_of_measure --> @PRV_Euc;
        coordinate_system_axis --> @binaxis;
        data_values --> LIST( 101, 187, 188, 249, 250,
                              404, 405, 623); };
      leaf_2a = LEAF_FRAME {
        data_type --> `DAE_C_FLOAT';
        ref_unit_of_measure --> @PRV_ft;
        coordinate_system_axis --> @elevaxis;
        data_values --> LIST( 6000, 6000, 6200, 6200, 6600,
                              6600, 6900, 6900); }; }; };
 
(* Now it is necessary, as in the other examples, to create an earth_point
   and the vertical_datum through that point *)
 
art = EARTH_POSITION_VERTEX {
   identifier --> `floating vertical datum point'; };
(* Note: the vertex is mandatory in v2.1 and earlier of Epicentre. It may
    be optional in later versions *)
 
seis_datum = LOCAL_VERTICAL_DATUM {
   identifier --> `floating vertical datum';
   earth_point --> @art;
   terminate_offset <-- SET ( @vdoff ); };
 
(* The vertical datum is a face, and the edge (the seismic datum) is a line.
   Presumably, the line is a projection under the seismic line onto the
   vertical datum plane. Use the space time operation to tie these together *)
 
projection = SPACE_TIME_OPERATION {
   ref_space_time_operation --> @PRV_projection; -- or degeneration?
   resulting_object --> @datline;
   primary_object --> @ seis_datum; };

----> End Example: Full Floating Datum Variation 2


[Seismic Table of Contents]


Last modified: 30 December 1997
Copyright 1997 POSC. All rights reserved.