Skip to content

AcousticBorn3D

sweep.equations.AcousticBorn3D

AcousticBorn3D(spatial_order=4, device='cpu', backend='torch')

Bases: sweep.equations.base.SecondOrderEquation

Second-order 3-D acoustic Born / LSRTM wave equation.

Three-dimensional generalisation of :class:AcousticBorn: a background pressure-like field h1 propagating through the smooth velocity vp, and a scattered pressure-like field sh1 driven by the reflectivity perturbation mp acting on the background Laplacian (linearised Born scattering). Both fields carry their own CPML memory variables on every face. Defaults: source on h1, receivers on sh1.

With impl='c' the gradient of vp is the RWI tomographic one (see :class:AcousticBorn), computed only when vp requires grad.

Models (constructor input order)

  • vp (m/s): Background 3D acoustic velocity model.
  • mp: 3D acoustic reflectivity perturbation used for LSRTM.

Wavefields

  • h1 (aliases: pressure, p, background): Background 3D acoustic pressure-like wavefield; default source.
  • h2 (aliases: pressure_prev, background_prev): Previous-step background wavefield (internal).
  • psix: Background CPML memory variable for the x-derivative term (internal).
  • psiy: Background CPML memory variable for the y-derivative term (internal).
  • psiz: Background CPML memory variable for the z-derivative term (internal).
  • zetax: Background CPML auxiliary wavefield for the x-direction update (internal).
  • zetay: Background CPML auxiliary wavefield for the y-direction update (internal).
  • zetaz: Background CPML auxiliary wavefield for the z-direction update (internal).
  • sh1 (aliases: scattered, scattered_pressure, data): Scattered 3D acoustic wavefield used for LSRTM data prediction; default receiver.
  • sh2 (aliases: scattered_prev): Previous-step scattered wavefield (internal).
  • spsix: Scattered-wave CPML memory variable for the x-derivative term (internal).
  • spsiy: Scattered-wave CPML memory variable for the y-derivative term (internal).
  • spsiz: Scattered-wave CPML memory variable for the z-derivative term (internal).
  • szetax: Scattered-wave CPML auxiliary wavefield for the x-direction update (internal).
  • szetay: Scattered-wave CPML auxiliary wavefield for the y-direction update (internal).
  • szetaz: Scattered-wave CPML auxiliary wavefield for the z-direction update (internal).

Defaults

  • source_type: ['h1']
  • receiver_type: ['sh1']
  • pml_type: 'cpmlr'

Build the 3-D acoustic LSRTM equation operator.

Parameters:

  • spatial_order –

    FD accuracy order of the spatial Laplacians applied to both the background and scattered fields — e.g. spatial_order=4 is fourth-order accurate. Internally the half-stencil width is M = spatial_order // 2 (used for loop bounds and PML padding). Must be an even integer (2, 4, 6, 8, 10, …). Performance note (impl='c' on CUDA): the compiled kernels ship template specialisations only for spatial_order ∈ {2, 4, 6, 8}. Above 8 the dispatcher drops to a generic runtime path (order = -1 in src/sweep/csrc/cuda/equations/acoustic_born3d/forward.cu) which uses more registers and runs noticeably slower. The PyTorch eager path is unaffected. Defaults to 4.

  • device –

    Device for the operator's static kernels. Use 'cuda' / a torch.device for GPU runs so the propagator can follow without a host↔device copy. Defaults to 'cpu'.

  • backend –

    Array / programming backend, 'torch' or 'jax'. When you later want impl='c', leave this on 'torch'. Defaults to 'torch'.

C_NAME class-attribute

C_NAME = 'acoustic_born3d'

str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.str() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to 'strict'.

c_refuse_grads

c_refuse_grads(
    wavelet_grad,
    model_grad_mask,
    boundary_saving=False,
    boundary_dtype=None,
    checkpoint=False,
)

impl='c': the wavelet gradient, and vp's in the checkpoint modes, are refused (refuse_c_grads).

cuda_layout_for_grads

cuda_layout_for_grads(grad_mask)

The layout of a call whose models need these gradients (grad_mask[i]: model i requires grad; None: all of them).

Term III of the velocity gradient splits out the same way as in 2-D (SWEEP_LSRTM_SPLIT_III=1, sweep.propagator.last_grad_split_iii()): see AcousticBorn.