✍️ 朱邓达  •  🗓️ 2026-05-20 (创建时间)

计算频散曲线

频散曲线上每个点对应的相速度被称为面波本征值。具体地,这里我们使用自适应搜根方法 (Zhu et al., 2026) 计算面波相速度频散曲线, C 模块为 eigenv (Python函数将于后续版本增加)。

以下示例使用如下层状模型,文件命名为 mod2 :

18   6.0   3.50   2.8
6    6.3   3.65   2.9
6    6.7   3.90   3.1
0    8.2   4.70   3.3

示例程序

计算 mod2 模型中的 Rayleigh 波和 Love 波的所有阶频散曲线,频率 5 Hz 以下,间隔 0.01 Hz。

# Calculate Rayleigh-wave dispersion
grt eigenv -Mmod2 -SR -F0/5/0.01 -N -Cphase_R.nc
# Calculate Love-wave dispersion
grt eigenv -Mmod2 -SL -F0/5/0.01 -N -Cphase_L.nc

计算结果分别导出为 NetCDF 经典格式,其中具体变量详见 eigenv 模块文档。

关于 NetCDF 格式文件的读取,建议使用 Python 进行更灵活的处理,其中 SciPy 库和 netCDF4 库等可提供丰富功能, 可基于 Matplotlib 库进行绘图;当然,如果仅想要快速浏览, 也可使用 disp2asc 模块将 NetCDF 格式的频散转为文本格式, 方便简单阅读结果以及使用 GMT 绘制。

以下提供这两种方式的简易绘图脚本。

plot_dispersion.py (基于 Matplotlib)

../../_images/dispersion_py.svg

plot_dispersion.sh (基于 GMT)

../../_images/dispersion_sh.svg

绘制久期函数

计算本征值的过程可以转变为搜索久期函数零点的过程 (姚振兴和谢小碧, 2026)。 如果感兴趣,可以使用 eigenv 模块导出搜根过程中对应久期函数幅值。 例如,以上述程序为例,导出频率 1 Hz 处 Rayleigh 波和 Love 波的久期函数,相速度范围在 [3.0, 5.5] km/s :

freq=1
# Output Rayleigh-wave secular function
grt eigenv -Mmod2 -SR -X$freq+c3.0/5.5+i0  > secfunc_R
# Output Love-wave secular function
grt eigenv -Mmod2 -SL -X$freq+c3.0/5.5+i0  > secfunc_L

plot_secfunc.py

../../_images/secfunc.svg