ElasticTTI¶
sweep.equations.ElasticTTI ¶
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=4is fourth-order accurate. Internally the half-stencil width isM = 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 compiledimpl='c'path; useimpl='eager'(the SG variant :class:ElasticTTISGdoes have a CUDA kernel). Defaults to 8. -
device–Device for the operator's static RSG kernels. Use
'cuda'/ atorch.devicefor 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:ElasticTTISGreference 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
¶
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
¶
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.