基于python的三维射线追踪库-ttcrpy详解(1)
文章目录
1、ttcrpy介绍
ttcrpy是一个用于计算初至时间和射线追踪路径的python软件包,开发时考虑了在地球物理方面的应用,例如基于射线的地震/GPR层析成像和微震事件定位(联合震源速度反演)。
该软件包可以用来执行计算2D和3D和矩形网格,以及2D三角形网格和3D四面体网格,用python来实现。该软件包实现了三种不同的射线追踪算法:快速扫描法、最短路径法和动态网格最短路径法。
该计算可以在多核机器上并行运行。核心计算代码是用C++写的,已经用cython包装好了。在python中可以快捷使用。
2、ttcrpy安装
电脑快捷键wins+R,打开快捷界面输入cmd,在cmd中利用pip可直接安装ttcrpy库,输入命令如下:
pip install ttcrpy
注意:安装和使用ttcrpy需要安装相关支持的库,如numpy、scipy、vtk,其中vtk的安装易出错。
3、ttcrpy网格介绍
ttcrpy中可以构建规则网格和不规则三角网格或四面体网格,在进行走时成像或射线追踪时需要对模型进行网格剖分,ttcrpy中给出了很灵活的网格剖分方式。

如上图所示,在最左边的情况下,慢度值被分配给网格的单元。在最右边的情况下,慢度值被分配给网格节点。在后一种情况下,两个节点之间的走时计算是通过取两个节点处慢度值的平均值来完成的。
选择主要取决于应用。例如,在走时层析成像中,问题是使用走时数据来估计慢度模型。直线网格包含的单元比节点少,因此,如果将慢度值分配给单元,未知参数的数量会更少。对于四面体网格,节点的数量少于单元的数量,并且如果将慢度值分配给节点,要求解的系统将更小。
4、代码解析及模型示例
在pthon中运行代码,第一步需要导入各种需要的库,导入ttcrpy库。
import ttcrpy.rgrid as rg
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
根据所需的模型,建立相应的三维网格。
# 创建网格
x = np.arange(15.0)
y = np.arange(14.0)
z = np.arange(21.0)
在这里,我们建立x、y、z三个方向网格数分别为15、14、21。然后建立一个三维速度模型,
# 三维速度模型
# 速度沿z方向线性变化
a = 1.0
V20 = 3.0
b = (V20-a)/20.0
V = np.empty((x.size, y.size, z.size))
for n in range(z.size):
V[:, :, n] = a + b*z[n]
我们假设模型的速度值为沿着z方向增大,在python中显示一下模型,
# 画图,显示一下模型
fig = plt.figure(1)
ax = fig.add_subplot(111, projection='3d')
min_val = V.min()
max_val = V.max()
n_x, n_y, n_z = V.shape
colormap = plt.cm.plasma
cut = V[0

ttcrpy是用于地球物理应用的Python软件包,支持2D/3D射线追踪和走时计算。本文介绍其安装、网格类型、代码示例和参考文献,特别适用于地震层析成像和微震定位。
最低0.47元/天 解锁文章
343





