计算频散曲线
频散曲线上每个点对应的相速度被称为面波本征值。具体地,这里我们使用自适应搜根方法 (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)
绘制久期函数
计算本征值的过程可以转变为搜索久期函数零点的过程 (姚振兴和谢小碧, 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