bruges について
Brugesは、地下データを扱う地球科学者向けのPythonスキルで、地震反射、ウェーブレット、岩石物理の計算に使えます。AVO解析、合成地震トレース、弾性特性、流体置換を扱います。
主な機能
- 01厳密・近似的な界面反射率
- 02解析ウェーブレットの生成
- 03弾性特性の計算
- 04Gassmannによる流体置換
活用シーン
- 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 を値がゼロの岩石物性に置き換えたり、欠損区間を観測済みであるかのように畳み込んだりしないでください。
- 合成地震波トレースには、規則的にサンプリングされた往復走時が必要です。速度と基準面の選択を保持したうえで、まず深度ログを変換してリサンプリングしてください。
1つの界面での 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 は akirichards ではなく shuey に属します。これは反射率と勾配ではなく、切片と勾配のペアを返します。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')
坑井タイを作成する前に、既知の界面を1つ使ってサンプル間隔、時間整列、ピーク極性、振幅を確認してください。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 を推定することはありません。