The sweep seismic wave-equation ecosystem — one home for solver, tasks, agent, and companions.
Developer toolsPython · CudaGitHub @DeepWave-KAUSTOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Scalable GPU seismic imaging toolkit for wave simulation, RTM, and FWI.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Seismic Wave Equation Exploration Platform — a differentiable framework for seismic wave-equation modeling, migration, and full-waveform inversion. One API, 20+ equations (acoustic / elastic / VTI / TTI / DAS), PyTorch and JAX backends, eager and compiled CUDA paths.
From PyPI — one wheel, any PyTorch version, any Python 3:Read the full README ↗Seismic Wave Equation Exploration Platform — a differentiable framework for seismic wave-equation modeling, migration, and full-waveform inversion. One API, 20+ equations (acoustic / elastic / VTI / TTI / DAS), PyTorch and JAX backends, eager and compiled CUDA paths.
📖 Documentation: https://sweepx.deepwave.group/solver/
pip install torch --index-url https://download.pytorch.org/whl/cu126 # match your driver, see below
pip install sweepx
Install a torch built for your driver first: PyPI's default torch is CUDA 13 and needs
driver >= 580, so on an older driver (or a V100) use cu126 as above. The
install selector
gives the exact command for your GPU and driver.
The wheel ships prebuilt CUDA cores, so the compiled backend (impl='c') works right
after install with any PyTorch version: no nvcc, no compiler, no build step. It needs
an NVIDIA GPU and driver; the core for your torch's CUDA version is picked
automatically (CUDA 12: V100 and newer; CUDA 13: T4 and newer, driver >= 580). The
eager PyTorch and JAX backends are pure Python.
From source: a clone has no prebuilt core, so the CUDA core is compiled locally once (with an nvcc matching your torch's CUDA version) and cached:
pip install .
python -m sweep.build # optional: compile it now instead of on the first impl='c' call
sweepx (Python >= 3.10) installs the solver together with the sweepx toolkit (task
runner, agent, losses, I/O, networks, optimizers); you import sweep. pip install sweep-solver
installs the solver alone (Python >= 3.9).
GPU coverage, custom cores and developer builds are covered in
Building the CUDA core.
One shot, one receiver, one .backward() — read off the velocity-model gradient for a single trace:
import numpy as np
import torch
from sweep.equations import Acoustic
from sweep.propagator.torch import PropTorch
from sweep.signal import ricker
shape = (96, 128)
dh, dt, nt = 10.0, 0.002, 800
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
vp_true = np.full(shape, 1500.0, dtype=np.float32)
vp_true[shape[0] // 2:, :] = 2500.0
vp_init = np.full(shape, 1500.0, dtype=np.float32)
solver = PropTorch(Acoustic(device=device), shape=shape, dh=dh, dt=dt,
device=device, use_ckpt=False)
t = np.arange(nt) * dt
wavelet = ricker(t - 0.14, f=10.0).astype(np.float32)
sources = np.array([[shape[1] // 4, shape[0] // 2]], dtype=np.int64)
receivers = np.array([[[3 * shape[1] // 4, shape[0] // 2]]], dtype=np.int64)
with torch.no_grad():
obs = solver(wavelet, sources, receivers, models=[torch.tensor(vp_true, device=device)])
vp_t = torch.tensor(vp_init, device=device, requires_grad=True)
pred = solver(wavelet, sources, receivers, models=[vp_t])
(0.5 * (pred - obs).pow(2).sum()).backward()
print("vp gradient shape:", tuple(vp_t.grad.shape))
Swap Acoustic for Elastic, AcousticVTI, ElasticTTI, ... — the surrounding code is unchanged.
docs/notebooks/00_hello_fwi.ipynbdocs/notebooks/01_*–03_*docs/notebooks/04_*–08_*examples/@misc{wang2026sweep,
title = {{SWEEP} ({S}eismic {W}ave {E}quation {E}xploration {P}latform):
A Unified Solver Framework for Differentiable Wave Physics},
author = {Wang, Shaowen and Alkhalifah, Tariq},
year = {2026},
eprint = {2604.14189},
archivePrefix = {arXiv},
url = {https://arxiv.org/abs/2604.14189},
}
MIT — see LICENSE.