基于python的三维射线追踪库-ttcrpy详解(1)

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

基于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
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

商功贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值