Gaia Operators
f28pml
The f28pml operator runs the forward operator on a 3D velocity model and returns a shot record. This operator adds an absorbing boundary condition in the form of a perfectly matched layer.
import gaia
shot_record = gaia.f28pml(model, shot, shotxyz, recxxyyz, deltas, pml)
Properties
- Accuracy: 2 temporal, 8 spatial
- Absorbing Boundary Conditions: PML
Inputs
- model - 3D numpy array of type FP32 (velocity model).
- Max size: 1024 x 1024 x 1024
- Min size: 10 x 10 x 10
model = numpy.full((nx, ny, nz), c, dtype=numpy.float32)
- 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)
- pml - 1D numpy array of type INT32 with 2 values.
- 1st value: Width of the PML layer in grid points. Ghost points excluded.
- 2nd value: Magnitude of the PML layer at the edge. Uses a sine wave ramp from 0 to max magnitude across the width of the layer.
pml = numpy.array([pmlw, pmla], dtype=numpy.int32)
Output
- shot_record - A 3D numpy array of type FP32.
- dim 1: time
- dim 2: x position
- dim 3: y position
# Plots shot record time series of the x plane at y = 0
plot_results(shot_record[:, :, 0])