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