SuperAPI AI 工具集

disba

数据与分析

查看项目

更新于 10-16 02:00

技能介绍

用途

disba 用于一维各向同性层状地球模型的 Rayleigh 波和 Love 波相速度/群速度频散计算,以及模式深度敏感度核(sensitivity kernels)的求解。它扮演正演求解器的角色;从原始波形中提取观测频散或执行层析反演需要单独的处理流程与反演设计。

主要能力

  • 相速度频散:通过 PhaseDispersion 类计算 Rayleigh 波或 Love 波在指定模式下的相速度随周期变化。
  • 群速度频散:通过 GroupDispersion 类计算群速度频散曲线。
  • 敏感度核:通过 PhaseSensitivity 类计算相速度对 velocity_s、velocity_p、density、thickness 的深度敏感度核,结果为模型单位下的数值导数。

模型与周期约定

需要提供四个等长的一维数组:厚度(km)、Vp(km/s)、Vs(km/s)和密度(g/cm³)。逐层表格必须转置一次,例如 PhaseDispersion(*model.T)。不应使用 *zip(thickness, vp, vs, rho),因为四层时该写法会静默交换属性,其他层数则会传入错误参数。最后一层视为半空间,厚度写为 0.0;其他层厚度为正。即使库接受非零值,最终厚度也不应作为有限底边界。周期应使用递增的有限正值。密度必须为正;对于固体模型需满足 vs > 0 且 vp2 > (4/3) * vs2。应保留测量单位与模型来源信息。

使用方式

示例代码:

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

首次调用可能因 Numba 编译求解器而耗时较长。结果对象是 DispersionCurve 命名元组,不是速度数组,需联合使用 result.period 与 result.velocity;不可用的根可能被省略(尤其是高阶模式)。len(result) 统计的是元组字段数,不是计算得到的周期数,应使用 result.period.size。

敏感度核示例:

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

调用接收标量周期作为 t 或第一个位置参数;不支持 period= 关键字。在用于反演问题前,应通过小幅有限扰动验证核;单个核不能确立唯一的深度分辨率。

适用场景

  • 固体层状模型的相速度与群速度频散正演。
  • 面波模式深度敏感度核计算。
  • 频散曲线绘图、相/群速度转换、模式追踪与频率转换。
  • 层状模型参数研究中的模型准备与验证。

Love 波在各向同性模型中仅依赖 Vs、密度和层厚度,Vp 不参与 SH 问题。

限制

  • 仅支持一维各向同性层状模型。
  • 为纯正演求解器;波形处理与反演需另行设计。
  • 固体模型验证器不覆盖水层;流体层与 Love 波边界条件需单独处理。
  • 对于不完整曲线,应记录模式、波型、返回周期范围和求解器设置。仅在处理失败的根搜索时捕获 disba.DispersionError,并保留诊断信息。不要抑制任意异常或将畸形输入标记为不存在的模式。
  • 文档示例基于 disba 0.7.0 与 NumPy 1.26.4(2026-09-14)使用合成固体模型验证,覆盖均匀 Rayleigh 极限、层状相/群曲线、数值敏感度及辅助脚本的 CSV/绘图输出与失败诊断;不验证野外数据反演或流体层模型。

辅助脚本

scripts/dispersion_analysis.py 可计算固体模型频散、输出 CSV 及可选绘图。输入文本以 thickness vp vs rho 开头,后续行单位为 km、km/s、km/s、g/cm³。CSV 列保留请求的周期,不可用根使用 NaN;根搜索诊断单独打印。内置的梯度/LVZ 密度估计为示例性假设,并非 Gardner 定律。