Skip to content

ElasticTTI

sweep.equations.ElasticTTI

ElasticTTI(spatial_order=8, device='cpu', backend='torch', checkerboard_smoothing=True)

Bases: sweep.equations.base.FirstOrderEquation

First-order 2-D three-component elastic TTI wave equation (RSG).

Velocity-stress formulation for a fully anisotropic 2-D three-component medium (8 stiffness parameters reduced to the 15 independent components C11…C66 via Bond rotation from the Thomsen-style VTI parameters). Derivatives are taken on a rotated staggered grid (RSG: cell-corner ↔ cell-centre with diagonal stencils) so no interpolation is required between staggered locations; CPML is the recursive variant cpmlr (six profiles).

Reference: Bond-rotated VTI stiffness with RSG operators (Saenger / Bohlen rotated staggered grid).

Point sources and point receivers are folded through a 3x3 binomial stencil by default to keep the RSG checkerboard null space out of both the forward record and the adjoint — see checkerboard_smoothing.

Models (constructor input order)

  • vp0 (m/s): VTI-frame vertical P velocity.
  • vs0 (m/s): VTI-frame vertical S velocity.
  • rho (kg/m^3): Density.
  • epsilon: Thomsen epsilon.
  • delta: Thomsen delta.
  • gamma: Thomsen gamma.
  • theta (rad): Tilt angle.
  • phi (rad): Azimuth angle.

Wavefields

  • vx (aliases: velocity_x): Particle velocity in x; default receiver.
  • vy (aliases: velocity_y): Particle velocity in y.
  • vz (aliases: velocity_z): Particle velocity in z; default receiver.
  • sxx (aliases: stress_xx): Normal stress xx; default source.
  • szz (aliases: stress_zz): Normal stress zz; default source.
  • syz (aliases: stress_yz): Shear stress yz.
  • sxz (aliases: stress_xz): Shear stress xz.
  • sxy (aliases: stress_xy): Shear stress xy.
  • m_vxx: CPML memory for dvx/dx (internal).
  • m_vxz: CPML memory for dvx/dz (internal).
  • m_vyx: CPML memory for dvy/dx (internal).
  • m_vyz: CPML memory for dvy/dz (internal).
  • m_vzx: CPML memory for dvz/dx (internal).
  • m_vzz: CPML memory for dvz/dz (internal).
  • m_txxx: CPML memory for dsxx/dx (internal).
  • m_txzz: CPML memory for dsxz/dz (internal).
  • m_txyx: CPML memory for dsxy/dx (internal).
  • m_tyzz: CPML memory for dsyz/dz (internal).
  • m_txzx: CPML memory for dsxz/dx (internal).
  • m_tzzz: CPML memory for dszz/dz (internal).

Defaults

  • source_type: ['sxx', 'szz']
  • receiver_type: ['vx', 'vz']
  • pml_type: 'cpmlr'

Build the 2-D-3C elastic TTI equation operator (RSG variant).

Parameters:

  • spatial_order –

    FD accuracy order of the rotated staggered-grid (RSG) first derivative — 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, …). Higher orders reduce grid dispersion at the cost of more compute per step and a wider PML halo. This equation has no compiled impl='c' path; use impl='eager' (the SG variant :class:ElasticTTISG does have a CUDA kernel). Defaults to 8.

  • device –

    Device for the operator's static RSG kernels. Use 'cuda' / a torch.device for GPU eager runs. Defaults to 'cpu'.

  • backend –

    Array / programming backend, 'torch' or 'jax'. Defaults to 'torch'.

  • checkerboard_smoothing –

    The RSG diagonal stencils have a checkerboard null space (-1)^(i+j): it maps to zero under the diagonal differences, so the scheme neither propagates nor damps it, a single-cell source excites it and a single-cell receiver samples it back. The damage is in the waveform, not the amplitude — against the axis-aligned :class:ElasticTTISG reference on a uniform TTI medium (theta 30 deg, vz source and receiver) the trace correlation drops to cos 0.70 below the source and cos 0.51 in the weak-radiation (horizontal) direction, while the peak amplitude is only 1.15x too large. When True (default) source injection and receiver sampling are folded through a 3x3 binomial stencil, whose response to the checkerboard mode is exactly (1-2+1)^2/16 = 0; it does not move the source/receiver position, and the traces come back to cos 0.994-1.000 against the SG reference. Both ends are treated because the receiver gather's transpose is the adjoint source injection, so sampling raw would re-excite the mode on the backward pass and contaminate the gradient. Set False to recover the legacy raw point injection/sampling.

source_receiver_stencil property

source_receiver_stencil

3x3 binomial stencil folded into source injection / receiver sampling by the propagator (see checkerboard_smoothing).

Returned as a plain NumPy array so both the torch and the jax front-ends can consume it without importing the other backend.

supports_free_surface class-attribute

supports_free_surface = False

bool(x) -> bool

Returns True when the argument x is true, False otherwise. The builtins True and False are the only two instances of the class bool. The class bool is a subclass of the class int, and cannot be subclassed.