关于 bruges
Bruges 是面向地下数据地球科学工作的 Python 技能,用于地震反射、子波和岩石物理计算。内容涵盖 AVO 分析、合成地震道、弹性属性与流体替换。
主要功能
- 01精确及近似界面反射率
- 02解析子波生成
- 03弹性属性计算
- 04使用 Gassmann 进行流体替换
适用场景
- 01比较不同入射角下的 AVO 响应
- 02生成时域合成地震道
- 03估算测井数据的弹性属性
- 04评估储层岩石的流体变化
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ steadfastasart/ geoscience-skills --skill bruges安装后在 Claude Code 中输入/bruges确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/rock_physics.mdwavelets.mdscripts/avo_analysis.py详细介绍
Bruges:反射与岩石物理
使用 Bruges 计算界面反射率、弹性属性、流体替换和解析子波。传播建模请使用波动方程求解器;读取 LAS 输入请使用测井曲线读取器。配套技能为可选项。
输入与约定
- 对于以下示例,将速度转换为 m/s、密度转换为 kg/m³,将模量转换为 Pa。仅在报告 GPa 时,才将 Pa 除以
1e9。 - 反射函数的入射角单位为 度。请提供有限的地层属性;仅有正密度和正剪切模量并不足够:各向同性固体还需要满足
vp**2 > (4/3) * vs**2,才能具有正体积模量。 - 保留缺失测井区间的标记。不要将 NaN 转为零值岩石属性,也不要将缺失区间当作已观测数据进行卷积。
- 合成地震道需要等间隔采样的 双程时间。请先转换并重采样深度测井曲线,同时保留速度和基准面选择。
单个界面的 AVO
使用上、下层示例属性的可运行示例:
import numpy as np
from bruges.reflection import zoeppritz, shuey, akirichards
vp1, vs1, rho1 = 3000.0, 1700.0, 2300.0 # m/s, m/s, kg/m³
vp2, vs2, rho2 = 3200.0, 1800.0, 2350.0
theta_deg = np.arange(0.0, 31.0)
r_exact = zoeppritz(vp1, vs1, rho1, vp2, vs2, rho2, theta_deg)
r_shuey = shuey(vp1, vs1, rho1, vp2, vs2, rho2, theta_deg)
r_aki = akirichards(vp1, vs1, rho1, vp2, vs2, rho2, theta_deg)
intercept, gradient = shuey(vp1, vs1, rho1, vp2, vs2, rho2,
return_gradient=True)
return_gradient 属于 shuey,而非 akirichards;它返回截距/梯度对,而不是反射率加梯度。Shuey 截距是精确零入射角阻抗差异的近似值。请将其与 (rho2*vp2 - rho1*vp1) / (rho2*vp2 + rho1*vp1) 的精确结果进行核对。
在临界角处或超过临界角时,Zoeppritz 响应可能是复数。请保留其相位,或明确界定所绘制的振幅。仅设置一个近似角度上限,并不能保证对所有弹性差异都准确。解读 AVO 类别时,应考虑极性约定、角度覆盖范围和岩性;截距/梯度符号对并不能唯一诊断流体。
子波与时域合成
Bruges 子波返回一个命名元组,字段顺序为 amplitude 然后 time。请使用字段名,避免混淆子波和时间轴。
import numpy as np
from bruges.filters import ricker
from scipy.signal import convolve
dt_s = 0.001
time_s = np.arange(257) * dt_s # Regular two-way-time sampling.
impedance = np.full(time_s.size, 3000.0 * 2300.0)
impedance[128:] = 3200.0 * 2350.0
reflectivity = np.zeros_like(impedance)
# Place an interface at the first sample of the lower layer.
reflectivity[1:] = np.diff(impedance) / (impedance[:-1] + impedance[1:])
wavelet = ricker(duration=0.128, dt=dt_s, f=25.0)
synthetic = convolve(reflectivity, wavelet.amplitude, mode='same')
生成井震标定之前,请先用一个已知界面检查采样间隔、时间对齐、峰值极性和振幅。有关 Ormsby/Klauder 和相位旋转,请参阅子波详情。
岩石属性与流体变化
有关弹性模量、Gardner/Castagna 估算或 Gassmann 替换,请参阅岩石物理示例。经测试的 API 使用 moduli.mu、moduli.pr、moduli.vp、moduli.vs 和 avseth_fluidsub;bruges.rockphysics 中没有顶层的 gassmann 或 castagna。Gardner 位于 bruges.petrophysics 中,默认返回 kg/m³。
请使用储层条件下测量或校准过的矿物和流体属性。Gassmann 假设孔隙系统连通、低频下压力达到平衡,且固体骨架/剪切模量不变。请检查所得密度变化和剪切模量不变性;保持不变的并非 Vs。
验证与资源
示例已于 2026-09-14 使用 Bruges 0.5.4、NumPy 1.26.4 和 SciPy 1.17.1 完成检查。Bruges 0.5.4 会导入 pkg_resources;测试环境使用 setuptools 80.9.0。请在隔离环境中安装科学计算依赖项。这些示例并未验证 Bruges 的所有操作。
- 反射 API
- 岩石物理 API
- 子波 API
- scripts/avo_analysis.py:经测试的 AVO 辅助工具。其 CLI 的速度单位为 m/s,密度单位为 g/cm³,与上述 SI 示例不同。精确反射计算需要 Bruges;缺少导入项时会明确报错。超过临界角后,绘图会保留实部/虚部。分类仅为筛查启发式方法;不能仅根据梯度符号推断 IIp。