Toccata in Nowhere.

Python 地球参考模型 PREM 绘制:RockHound

2020.07.20

PREM 初始参考地球模型 (Preliminary Reference Earth Model, Dziewonsky, 1981) 是一种常见的一维速度结构模型,使用 RockHound 包可以较为方便地在Python中绘制、使用 PREM 模型包含的P波、S波与密度等数据信息。

安装

使用pip

pip install rockhound

或从 Github 安装最新版:

pip install https://github.com/fatiando/rockhound/archive/master.zip

使用

绘制 PREM 模型

import rockhound as rh
import matplotlib.pyplot as plt

# Load PREM into a DataFrame
prem = rh.fetch_prem()
print(prem)

# Plot density and velocities
fig, axes = plt.subplots(1, 2, figsize=(9, 5), sharey=True)
fig.suptitle("PREM: Preliminary Reference Earth Model")
ax = axes[0]
prem.plot("density", "depth", legend=False, ax=ax)
ax.invert_yaxis()
ax.set_xlabel("Density [g/cm³]")
ax.set_ylabel("Depth [km]")
ax.grid()
ax = axes[1]
for velocity in ["Vpv", "Vph", "Vsv", "Vsh"]:
    prem.plot(velocity, "depth", legend=False, ax=ax, label=velocity)
ax.grid()
ax.legend()
ax.set_xlabel("Velocity [km/s]")
plt.show()

输出

     radius   depth   density       Vpv       Vph      Vsv      Vsh  eta   Q_mu  Q_kappa
0    6371.0     0.0   1.02000   1.45000   1.45000  0.00000  0.00000  1.0    0.0  57823.0
1    6370.0     1.0   1.02000   1.45000   1.45000  0.00000  0.00000  1.0    0.0  57823.0
2    6369.0     2.0   1.02000   1.45000   1.45000  0.00000  0.00000  1.0    0.0  57823.0
3    6368.0     3.0   1.02000   1.45000   1.45000  0.00000  0.00000  1.0    0.0  57823.0
4    6368.0     3.0   2.60000   5.80000   5.80000  3.20000  3.20000  1.0  600.0  57823.0
..      ...     ...       ...       ...       ...      ...      ...  ...    ...      ...
194   400.0  5971.0  13.05366  11.23711  11.23711  3.65027  3.65027  1.0   84.6   1327.7
195   300.0  6071.0  13.06890  11.24809  11.24809  3.65794  3.65794  1.0   84.6   1327.7
196   200.0  6171.0  13.07979  11.25593  11.25593  3.66342  3.66342  1.0   84.6   1327.7
197   100.0  6271.0  13.08632  11.26063  11.26063  3.66670  3.66670  1.0   84.6   1327.7
198     0.0  6371.0  13.08850  11.26220  11.26220  3.66780  3.66780  1.0   84.6   1327.7

[199 rows x 10 columns]

调用 PREM模型数据

prem = rh.fetch_prem()

返回一个 pandas.DataFrame 对象,可以使用 prem.keys()得到 Keys:

Index(['radius', 'depth', 'density', 'Vpv', 'Vph', 'Vsv', 'Vsh', 'eta', 'Q_mu',
       'Q_kappa'],
      dtype='object')

可以使用 Keys 索引得到具体的值:

density = prem['density'][1]

以上代码获取了第2层的密度数据信息。

输出前20层的深度、密度、平均P波和S波速度:

for ii in range(20):
	print(prem['depth'][ii], prem['density'][ii], (prem['Vpv'][ii]+prem['Vph'][ii])/2, (prem['Vsv'][ii] + prem['Vsh'][ii])/2)

输出:

0.0 1.02 1.45 0.0
1.0 1.02 1.45 0.0
2.0 1.02 1.45 0.0
3.0 1.02 1.45 0.0
3.0 2.6 5.8 3.2
4.0 2.6 5.8 3.2
5.0 2.6 5.8 3.2
6.0 2.6 5.8 3.2
7.0 2.6 5.8 3.2
8.0 2.6 5.8 3.2
9.0 2.6 5.8 3.2
10.0 2.6 5.8 3.2
11.0 2.6 5.8 3.2
12.0 2.6 5.8 3.2
13.0 2.6 5.8 3.2
14.0 2.6 5.8 3.2
15.0 2.6 5.8 3.2
15.0 2.9 6.8 3.9
16.0 2.9 6.8 3.9
17.0 2.9 6.8 3.9

Reference

RockHound Document