Gaia Operators
ef18abc
The ef18abc operator simulates the 3D elastic wavefield with an absorbing sponge boundary conditions. Returns a shot record of the velocity field.
The ef18abc operator runs the forward operator on a 3D velocity model using the elastic wave equations. This operator adds an absorbing boundary condition in the form of a absorbing sponge. Uses the velocity stress formulation of the elastic wave equation. Returns three separate shot records corresponding to vx, vy and vz values at the receivers.
import gaia
vx, vy, vz = gaia.ef18abc(vp, vs, rho, shot, shotxyz, recxxyyz, deltas, abc)
Properties
- Uses the first order velocity stress formulation
- Accuracy: 1 temporal, 8 spatial
- Absorbing Boundary Conditions: Absorbing sponge
Inputs
- vp - 3D numpy array (p-velocity model).
- Max size: 1024 x 1024 x 1024
- Min size: 10 x 10 x 10
vp = numpy.full((nx, ny, nz), c, dtype=numpy.float32)
- vs - 3D numpy array (s-velocity model).
- Max size: 1024 x 1024 x 1024
- Min size: 10 x 10 x 10
vp = numpy.full((nx, ny, nz), c2, dtype=numpy.float32)
- rho - 3D numpy array (density model).
- Max size: 1024 x 1024 x 1024
- Min size: 10 x 10 x 10
rho = numpy.full((nx, ny, nz), density, dtype=numpy.float32)
Note: vp, vs and rho has to be of the same size
- shot - A 1D numpy array of type FP32 representing the time series of the shot being simulated. The time series should span the entire length of the simulation. See demo code for a function that creates this array using the ricker waveform.
shot = ricker(frequency, nt, dt)
- shotxyz - 1D numpy array of 3 elements representing the location of the shot within the velocity model. Cannot lie outside the model. Type INT32
Note: Ensure that the shot does not lie within the ghost cells
shotxyz = numpy.array([xs, ys, zs], dtype=numpy.int32)
- recxxyyz - 1D numpy array of 5 elements. Type INT32. Assumes the receiver array is a surface on the xy plane.
- 1st value: starting x position
- 2nd value: ending x position
- 3rd value: starting y position
- 4th value: ending y position
- 5th value: z position
recxxyyz = numpy.array([xt1, xt2, yt1, yt2, zt], dtype=numpy.int32)
- deltas - 1D numpy array of type FP32 with 4 values.
- 1st value: dx
- 2nd value: dy
- 3rd value: dz
- 4th value: dt
deltas = numpy.array([dx, dy, dz, dt], dtype=numpy.float32)
- abc - 1D numpy array of type INT32 with 2 values.
- 1st value: Width of the sponge in grid points. Excludes ghost points.
- 2nd value: Magnitude of the sponge layer.
abc = np.array([abc_width, abc_amplitude], dtype=np.int32)
Output
-
vx - x-velocity values observed at the receiver locations. 3D numpy array of type FP32.
- dim 1: time
- dim 2: x position
- dim 3: y posiiton
-
vy - y-velocity values observed at the receiver locations. 3D numpy array of type FP32.
- dim 1: time
- dim 2: x position
- dim 3: y posiiton
-
vz - z-velocity values observed at the receiver locations. 3D numpy array of type FP32.
- dim 1: time
- dim 2: x position
- dim 3: y posiiton