Install
$ agentstack add skill-steadfastasart-geoscience-skills-rock-physics-avo ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Rock Physics & AVO Workflow
End-to-end pipeline for rock physics analysis and AVO feasibility studies, from well log preparation through elastic property calculation, Gassmann fluid substitution, AVO modelling, and synthetic seismogram generation.
Skill Chain
lasio / welly bruges segyio / obspy
[Well Log Prep] --> [Rock Physics] --> [Synthetics / Tie]
| | |
Load LAS/DLIS Elastic moduli Wavelet extraction
QC & despike Gassmann fluid sub Reflectivity series
Resample curves AVO intercept/gradient Convolve synthetic
Extract Vp, Vs, rho Backus averaging Well-seismic tie
Decision Points
| Task | Library | When to Use | |------|---------|-------------| | Load well logs | lasio / dlisio | Always the first step | | Curve QC and management | welly | Multi-curve processing, despiking | | Elastic moduli, AVO equations | bruges | Core rock physics calculations | | Gassmann fluid substitution | bruges | Predict fluid replacement effects | | Wavelet extraction from seismic | segyio + bruges | When tying to seismic | | Synthetic seismogram | bruges | Generate reflectivity and convolve | | Dispersion curves | disba | Surface wave rock physics |
Step-by-Step Orchestration
Stage 1: Well Log Preparation (lasio + welly)
import lasio
import numpy as np
from welly import Well
# Load well with sonic, density, and shear sonic
las = lasio.read('well.las')
df = las.df().dropna()
# Extract elastic logs
depth = df.index.values
vp = 1e6 / df['DT'].values # P-wave velocity (m/s) from sonic (us/ft)
vs = 1e6 / df['DTS'].values # S-wave velocity (m/s) from shear sonic
rho = df['RHOB'].values * 1000 # Density (kg/m3) from g/cc
# QC: check ranges
assert np.all(vp > 1500) and np.all(vp 500) and np.all(vs 1500) and np.all(rho 0, G 0 (very soft, dim with offset)
# Zoeppritz exact for full offset range
rc_exact = bruges.reflection.zoeppritz(
vp1=vp[i], vs1=vs[i], rho1=rho[i],
vp2=vp[i+1], vs2=vs[i+1], rho2=rho[i+1],
theta=np.arange(0, 50, 1)
)
Stage 5: Synthetic Seismogram (bruges + segyio)
# Create reflectivity series
rc_series = bruges.reflection.reflectivity(vp, rho)
# Create wavelet
duration = 0.128 # seconds
dt = 0.002 # sample rate (2ms)
wavelet = bruges.filters.ricker(duration=duration, dt=dt, f=25)
# Convolve to create synthetic
synthetic = np.convolve(rc_series, wavelet, mode='same')
# If tying to seismic, extract wavelet from seismic trace
import segyio
with segyio.open('seismic.sgy') as f:
near_trace = f.trace[0] # Nearest trace to well
# Extract statistical wavelet from trace
# Or use bruges.filters for analytic wavelets
Common Pipelines
AVO Feasibility Study
- [ ] Load well logs (Vp, Vs, Rho, porosity) with lasio
- [ ] QC logs: check ranges, despike, fill gaps
- [ ] If no Vs log: estimate from Castagna or Greenberg-Castagna
- [ ] Calculate elastic moduli and impedances with bruges
- [ ] Run Gassmann fluid substitution (brine to gas/oil)
- [ ] Compare Vp, Vs, density, impedance before/after fluid sub
- [ ] Compute AVO response at target interface (Shuey or Zoeppritz)
- [ ] Classify AVO response (Class I-IV)
- [ ] Generate synthetic seismograms for both fluid scenarios
- [ ] Plot AVO crossplot (intercept vs gradient)
Well-Seismic Tie
- [ ] Load well logs and seismic trace at well location
- [ ] Create time-depth relationship from check shots or sonic
- [ ] Convert logs to time domain
- [ ] Extract wavelet from seismic (statistical or deterministic)
- [ ] Generate synthetic seismogram from reflectivity * wavelet
- [ ] Cross-correlate synthetic with seismic trace
- [ ] Adjust stretch/squeeze to optimize tie
- [ ] Report correlation coefficient
Backus Averaging (Upscaling)
- [ ] Load thin-bed well logs at fine sampling (0.5 ft)
- [ ] Define averaging window (e.g., quarter wavelength at target frequency)
- [ ] Apply Backus averaging to get effective anisotropic elastic properties
- [ ] Compare fine-scale vs upscaled reflectivity
- [ ] Assess thin-bed tuning effects
When to Use
Use the rock physics & AVO workflow when:
- Performing AVO feasibility studies for exploration prospects
- Running Gassmann fluid substitution to predict fluid effects
- Generating synthetic seismograms for well-seismic ties
- Calculating elastic properties from well logs
- Classifying AVO response at target horizons
Use individual domain skills when:
- Only loading well logs (use
lasioalone) - Only computing dispersion curves (use
disbaalone) - Only creating wavelets or filters (use
brugesalone)
Common Issues
| Issue | Solution | |-------|----------| | No shear sonic log | Estimate Vs from Castagna mudrock line or Greenberg-Castagna | | Gassmann gives unrealistic velocities | Check porosity and mineral modulus inputs; phi must be > 0 | | Negative Poisson's ratio | Usually indicates bad Vs data; QC shear sonic | | Poor well-seismic tie | Check time-depth relationship; try different wavelets | | AVO effect too small | May be real; check impedance contrast and Vp/Vs ratio | | Fluid sub in shales | Gassmann assumes connected pore space; not valid for shales |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: SteadfastAsArt
- Source: SteadfastAsArt/geoscience-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.