使用GMT的grdinterpolate模块获得地震成像的任意纵切面结果
地震成像结果往往是三维空间(经度、纬度、深度)中的单/多变量文件(Vp, Vs),而gmt中大多数模块都是处理二维网格。为了获得任意纵切面的结果,目前常做的处理是在定义了水平测线后,不同深度层逐一插值处理,即逐层使用grdtrack
模块进行插值,最后拼成一个二维网格。
gmt官网介绍了grdinterpolate
模块可以进行3D网格插值,但似乎使用没那么广。大概浏览了grdinterpolate
模块的C代码,最后也是调用了grdtrack
模块。这里我进行了初步测试后,成功插值得到任意纵切面的2D网格,以下是使用流程:
准备3D成像网格文件
假设有一个文本格式的成像结果文件result.txt
,如下
|
|
四列分别表示经度、纬度、深度和速度(数值不代表真实情况,仅做测试)。然后我们使用Python的netcdf4
库处理得到3D成像网格文件,其中有一些细节要注意:
|
|
检查文件
可以使用ncdump -c result.nc
和gmt grdinfo result.nc
来查看网格文件的基本信息,例如
|
|
|
|
其中xyz变量的数值范围能正确对应到期望维度的范围。
使用grdinterpolate切片
例如给定测线和深度层范围,即可得到任意纵切面的2D网格:
|
|
若3D网格中存在多个速度变量,使用filename?varname的形式即可选择变量:
|
|