关于 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 计算 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/绘图输出和故障诊断。这些检查不验证实测数据反演或流体层模型。
- 官方文档
- 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 密度估算仅为示例假设,并非 Gardner 定律。