disba について
1D等方層状モデルの表面波分散と感度カーネルを前方計算するPythonライブラリです。位相・群速度曲線と数値感度を扱い、波形解析や逆解析には別途処理が必要です。
主な機能
- 01位相・群分散曲線
- 02Rayleigh波とLove波の計算
- 03モード感度カーネル
- 04層状モデルの入力チェック
- 05CSV出力と任意のプロット
活用シーン
- 01層状モデルから分散曲線を計算
- 02位相速度と群速度の比較
- 03モードの深度感度を調べる
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ steadfastasart/ geoscience-skills --skill disbaインストール後、Claude Code で/disbaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/dispersion_curves.mdvelocity_models.mdscripts/dispersion_analysis.py詳細
disba:層状モデルの表面波分散
disba を使用すると、1 次元等方性層状モデルの分散と感度カーネルを計算できます。 これは順解析ソルバーです。生波形から観測分散を抽出したり、トモグラフィーを実行したりするには、別途データ処理と逆解析の設計が必要です。
モデルと周期の規則
- 同じ長さの 1 次元配列を 4 つ指定します。厚さは km、Vp/Vs は km/s、密度は g/cm³ 単位です。層ごとに並べた表は、1 回転置します:
PhaseDispersion(*model.T)。 *zip(thickness, vp, vs, rho)は使用しないでください。層が 4 つの場合、特性が気付かないまま入れ替わり、それ以外の層数では引数が誤ったものになります。- 最終層は半無限層として扱い、厚さを
0.0とします。それ以外の層の厚さは正の値にします。ライブラリがゼロ以外の値を受け付ける場合でも、最終層の厚さは有限の底面境界ではありません。 - 有限かつ正の周期を昇順で指定します。密度は正の値である必要があります。以下の固体モデルでは、
vs > 0かつvp**2 > (4/3) * vs**2を満たす必要があります。測定単位とモデルの出典情報を保持してください。
位相速度と群速度
次の完全な例では、固体層状モデルを使用します。最初の呼び出しでは、Numba によるソルバーのコンパイルに時間がかかる場合があります。
import numpy as np
from disba import PhaseDispersion, GroupDispersion
thickness = np.array([0.5, 1.0, 2.0, 0.0]) # km
vp = np.array([1.5, 2.5, 4.0, 6.0]) # km/s
vs = np.array([0.8, 1.4, 2.3, 3.5]) # km/s
rho = np.array([1.8, 2.0, 2.3, 2.6]) # g/cm³
periods = np.linspace(0.1, 5.0, 50) # s, increasing
phase_solver = PhaseDispersion(thickness, vp, vs, rho)
group_solver = GroupDispersion(thickness, vp, vs, rho)
rayleigh = phase_solver(periods, mode=0, wave='rayleigh')
love = phase_solver(periods, mode=0, wave='love')
group = group_solver(periods, mode=0, wave='rayleigh')
period_s, phase_km_s = rayleigh.period, rayleigh.velocity
各結果は速度配列ではなく、DispersionCurve という名前付きタプルです。利用できない根は、特に高次モードで省略されることがあるため、result.period と result.velocity を組み合わせて使用してください。len(result) は計算された周期数ではなく、タプルのフィールド数を返します。周期数には result.period.size を使用してください。
プロット、位相速度と群速度の変換、モード追跡、周波数変換については、分散曲線を参照してください。等方性モデルでの Love 波は Vs、密度、層厚に依存しますが、SH 問題には Vp は関与しません。モードの深度感度はモデルによって異なります。
感度カーネル
上記のモデルを引き続き使用します。呼び出しでは、周期を t または最初の位置引数として指定します。period= はサポートされているキーワードではありません。
from disba import PhaseSensitivity
sensitivity = PhaseSensitivity(thickness, vp, vs, rho)
kernel_vs = sensitivity(1.0, mode=0, wave='rayleigh', parameter='velocity_s')
depth_km, dc_dvs = kernel_vs.depth, kernel_vs.kernel
その他のパラメーターは velocity_p、density、thickness です。これらはモデルの単位で表された数値微分です。逆問題に使用する前に、小さな有限摂動を加えてカーネルを検証してください。1 つのカーネルだけでは、深度分解能が一意に定まるわけではありません。
パラメーター調査用のモデルを準備する
形状、単位、物理的妥当性の確認、表の転置、明示的な順解析関数については、速度モデルの準備を参照してください。密度と Vp の推定値は意図的に指定してください。Vs プロファイルを、未較正の密度モデルに暗黙的に変換しないでください。この参考資料に記載されている固体モデル用バリデーターは水層には対応していません。流体層と Love 波の境界条件については、別途扱う必要があります。
不完全な曲線の場合は、モード、波種、返された周期範囲、ソルバー設定を記録してください。根探索の失敗を処理する場合に限り disba.DispersionError を捕捉し、診断情報を保持してください。任意の例外を抑制したり、不正な入力を存在しないモードとして扱ったりしないでください。
検証とリソース
合成固体モデルを使用し、2026-09-14 に disba 0.7.0 と NumPy 1.26.4 で例を検証しました。検証では、均質モデルにおけるレイリー波の極限、層状モデルの位相速度・群速度曲線、数値感度、およびヘルパーの CSV/プロット出力と失敗時の診断を確認しています。実地データの逆解析や流体層モデルは検証対象ではありません。
- 公式ドキュメント
- バージョン 0.7.0 の分散実装
- バージョン 0.7.0 の感度実装
- scripts/dispersion_analysis.py:固体モデルの分散、CSV、オプションのプロットを計算します。入力テキストの先頭行は
thickness vp vs rhoとし、その後に km、km/s、km/s、g/cm³ 単位の値を行ごとに記述します。 CSV の列には指定した周期が保持され、利用できない根には NaN が使われます。 根探索の診断は別途出力されます。組み込みの勾配/LVZ 密度推定値は例示用の仮定であり、ガードナーの法則ではありません。