mcpField
D
disba

disba

github.com/steadfastasartデータ・データベース7357 回インストール6 週間前に更新
リポジトリ

disba について

1D等方層状モデルの表面波分散と感度カーネルを前方計算するPythonライブラリです。位相・群速度曲線と数値感度を扱い、波形解析や逆解析には別途処理が必要です。

主な機能

  1. 01位相・群分散曲線
  2. 02Rayleigh波とLove波の計算
  3. 03モード感度カーネル
  4. 04層状モデルの入力チェック
  5. 05CSV出力と任意のプロット

活用シーン

  1. 01層状モデルから分散曲線を計算
  2. 02位相速度と群速度の比較
  3. 03モードの深度感度を調べる

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/disbaを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
dispersion_curves.md
velocity_models.md
scripts/
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 密度推定値は例示用の仮定であり、ガードナーの法則ではありません。

コメント