AcousticVRZ / AcousticVRZ3D¶
sweep.equations.AcousticVRZ ¶
Bases: sweep.equations.base.SecondOrderEquation
Second-order 2-D acoustic wave equation in variable-density VRZ form.
Pressure-only scalar acoustics with explicit density coupling through
an impedance-like auxiliary parameter z. The Laplacian carries an
extra term ∇b · ∇p (with b = vp / z, κ = z · vp), so the
propagator is a single second-order PDE in h1 that correctly
refracts at sharp impedance contrasts without needing a staggered
velocity field. Absorbing boundaries via split-step CPML (cpmlr).
Reference: 10.3997/2214-4609.202010332.
Models (constructor input order)
vp(m/s): Acoustic velocity model.z: Auxiliary parameter used by the VRZ formulation.
Wavefields
h1(aliases:pressure,p): Primary VRZ acoustic pressure-like wavefield; default source and receiver.h2(aliases:pressure_prev): Previous-step VRZ acoustic pressure-like wavefield (internal).psix: CPML memory variable for the x-derivative term (internal).psiz: CPML memory variable for the z-derivative term (internal).zetax: CPML auxiliary wavefield for the x-direction update (internal).zetaz: CPML auxiliary wavefield for the z-direction update (internal).
Defaults
source_type:['h1']receiver_type:['h1']pml_type:'cpmlr'
Build the 2-D VRZ acoustic equation operator.
Parameters:
-
spatial_order–FD accuracy order of the spatial Laplacian and the auxiliary first-derivative kernels used by the
∇b · ∇pterm — 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, …). Performance note (impl='c'on CUDA): the compiled kernels ship template specialisations only forspatial_order ∈ {2, 4, 6, 8}. Above 8 the dispatcher drops to a generic runtime path (order = -1insrc/sweep/csrc/cuda/equations/acoustic_vrz2d/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 gradient kernels. Use
'cuda'/ atorch.devicefor 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 wantimpl='c', leave this on'torch'— the compiled CUDA kernels go through the Torch binding. Defaults to'torch'. -
dim–Stored dimensionality. Always
2for this class; use :class:AcousticVRZ3Dfor 3-D. Defaults to 2.
BOUNDARY_BUFFER_REACH
class-attribute
¶
int([x]) -> integer int(x, base=10) -> integer
Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.int(). For floating point numbers, this truncates towards zero.
If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by '+' or '-' and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal.
int('0b100', base=0) 4
C_NAME
class-attribute
¶
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'.
sweep.equations.AcousticVRZ3D ¶
Bases: sweep.equations.base.SecondOrderEquation
Second-order 3-D acoustic wave equation in variable-density VRZ form.
Three-dimensional generalisation of :class:AcousticVRZ: a single
pressure-like field h1 is propagated with an extra ∇b · ∇p
coupling term (with b = vp / z, κ = z · vp) so that
impedance contrasts refract correctly without needing a separate
velocity field. Absorbing boundaries on every face via split-step
CPML (cpmlr).
Reference: 10.3997/2214-4609.202010332.
Models (constructor input order)
vp(m/s): 3D acoustic velocity model.z: Auxiliary parameter used by the 3D VRZ formulation.
Wavefields
h1(aliases:pressure,p): Primary 3D VRZ acoustic pressure-like wavefield; default source and receiver.h2(aliases:pressure_prev): Previous-step 3D VRZ acoustic pressure-like wavefield (internal).psix: CPML memory variable for the x-derivative term (internal).psiy: CPML memory variable for the y-derivative term (internal).psiz: CPML memory variable for the z-derivative term (internal).zetax: CPML auxiliary wavefield for the x-direction update (internal).zetay: CPML auxiliary wavefield for the y-direction update (internal).zetaz: CPML auxiliary wavefield for the z-direction update (internal).
Defaults
source_type:['h1']receiver_type:['h1']pml_type:'cpmlr'
Build the 3-D VRZ acoustic equation operator.
Parameters:
-
spatial_order–FD accuracy order of the spatial Laplacian and the auxiliary first-derivative kernels used by the
∇b · ∇pterm — 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, …). Performance note (impl='c'on CUDA): the compiled kernels ship template specialisations only forspatial_order ∈ {2, 4, 6, 8}. Above 8 the dispatcher drops to a generic runtime path (order = -1insrc/sweep/csrc/cuda/equations/acoustic_vrz3d/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 gradient kernels. Use
'cuda'/ atorch.devicefor 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 wantimpl='c', leave this on'torch'— the compiled CUDA kernels go through the Torch binding. Defaults to'torch'. -
dim–Stored dimensionality. Always
3for this class; use :class:AcousticVRZfor 2-D. Defaults to 3.
BOUNDARY_BUFFER_REACH
class-attribute
¶
int([x]) -> integer int(x, base=10) -> integer
Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.int(). For floating point numbers, this truncates towards zero.
If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by '+' or '-' and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal.
int('0b100', base=0) 4
C_NAME
class-attribute
¶
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'.