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 计算 1D 各向同性分层模型的频散和灵敏度核。 它是一个正演求解器;从原始波形中提取观测频散或执行层析成像,需要单独设计处理和反演流程。

模型和周期约定

  • 提供四个长度相同的一维数组:厚度单位为km, Vp/Vs 单位为km/s,密度单位为g/cm³。按行排列的分层表必须 转置一次:PhaseDispersion(*model.T)。
  • 不要使用 *zip(thickness, vp, vs, rho):对于四层模型,它会悄无声息地 交换属性;其他层数则会产生错误的参数。
  • 将最后一层视为半空间,并将其厚度设为 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、密度和层厚,而 Vp 不参与 SH 问题。模态的深度灵敏度取决于模型。

灵敏度核

继续使用上面的模型。调用时,将标量周期作为 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。这些是以模型单位表示的数值导数。 在反演问题中使用前,请用小幅有限扰动检查灵敏度核;单个灵敏度核无法确定唯一的深度分辨率。

为参数研究准备模型

请阅读速度模型准备,了解形状、 单位和物理约束检查、表格转置,以及显式的正演模型函数。请审慎提供密度和 Vp 的估算值;不要悄无声息地将 Vs 剖面转换为未经校准的密度模型。该参考文档中的固体模型验证器 不适用于水层;流体层和 Love 波的边界条件需要单独处理。

对于不完整的曲线,请记录模态、波型、返回的周期范围和 求解器设置。仅在处理根搜索失败时捕获 disba.DispersionError,并保留诊断信息。不要抑制任意异常,也不要将格式错误的输入重新标记为不存在的模态。

验证与资源

示例于 2026-09-14 使用合成固体模型,通过 disba 0.7.0 和 NumPy 1.26.4 进行了检查。检查涵盖均匀介质的 Rayleigh 极限、分层相速度/群速度曲线、数值灵敏度,以及辅助工具的 CSV/绘图输出和故障诊断。这些检查不验证实测数据反演或流体层模型。

评论

支持 Markdown