mcpField
B
bruges

bruges

github.com/steadfastasart数据与数据库7363 次安装6 周前更新
代码仓库

关于 bruges

Bruges 是面向地下数据地球科学工作的 Python 技能,用于地震反射、子波和岩石物理计算。内容涵盖 AVO 分析、合成地震道、弹性属性与流体替换。

主要功能

  1. 01精确及近似界面反射率
  2. 02解析子波生成
  3. 03弹性属性计算
  4. 04使用 Gassmann 进行流体替换

适用场景

  1. 01比较不同入射角下的 AVO 响应
  2. 02生成时域合成地震道
  3. 03估算测井数据的弹性属性
  4. 04评估储层岩石的流体变化

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/steadfastasart/geoscience-skills --skill bruges

安装后在 Claude Code 中输入/bruges确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
rock_physics.md
wavelets.md
scripts/
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。

评论

支持 Markdown