计算静态格林函数
Python中计算静态格林函数的主函数为 compute_static_grn() ,C模块为 static_greenfn。
建议先阅读完 计算动态格林函数 部分。静态情况与动态情况采取的计算方法一致,只是推导细节会有不同,详见 (姚振兴和谢小碧, in press) 。
静态解模块对于传入“震中距”的方式及后续处理与动态解模块相比稍有不同。 不论是动态解还是静态解,在模型、源点深度和场点深度确定的情况下,格林函数仅与 和震中距 相关。 但考虑到静态解的普遍应用场景,程序在计算静态格林函数阶段有两种传入震中距的方式:
指定二维的 XY 网格。坐标 (0,0) 为源点的水平投影,每个节点的震中距为 \(r_{ij} = \sqrt{x_i^2 + y_j^2}\) 。实际计算中会对震中距自动去重以减少计算量。
指定一维的震中距序列。在计算和结果保存上等同于指定从原点 (X=0.0) 沿东向 (Y/km) 指定对应的采样点。
为了兼容性,结果的输出仍然保持以 XY 网格的形式。在 合成静态位移 阶段,可以指定新的 XY 网格, 此时每个节点的格林函数会近似为最近震中距的格林函数。
示例程序
假设在 milrow 模型中,震源深度2km,接收点位于地表。
depsrc=2
deprcv=0
x1=-3
x2=3
dx=0.15
y1=-2.5
y2=2.5
dy=0.15
# 输出到NetCDF网格文件
# 可以使用 -R 来指定震中距序列
# grt static greenfn -Mmilrow -D${depsrc}/${deprcv} -R0/10/0.1 -Ostgrn.nc
# 也可以使用 -X 和 -Y 来指定 XY 网格
grt static greenfn -Mmilrow -D${depsrc}/${deprcv} -X$x1/$x2/$dx -Y$y1/$y2/$dy -Ostgrn.nc
结果输出为 NetCDF 网格格式,方便使用 GMT 等软件处理和绘制。
如下使用 ncdump -h 命令可查看网格文件基本信息。
netcdf stgrn {
dimensions:
north = 41 ;
east = 34 ;
variables:
double north(north) ;
double east(east) ;
double EXZ(north, east) ;
double EXR(north, east) ;
double VFZ(north, east) ;
double VFR(north, east) ;
double HFZ(north, east) ;
double HFR(north, east) ;
double HFT(north, east) ;
double DDZ(north, east) ;
double DDR(north, east) ;
double DSZ(north, east) ;
double DSR(north, east) ;
double DST(north, east) ;
double SSZ(north, east) ;
double SSR(north, east) ;
double SST(north, east) ;
// global attributes:
:src_va = 4.9 ;
:src_vb = 2.8 ;
:src_rho = 2.6 ;
:rcv_va = 3.4 ;
:rcv_vb = 1.7 ;
:rcv_rho = 2.3 ;
:calc_upar = 0 ;
}
import numpy as np
import pygrt
modarr = np.loadtxt("milrow")
pymod = pygrt.PyModel1D(modarr, depsrc=2.0, deprcv=0.0)
xarr = np.linspace(-3, 3, 41)
yarr = np.linspace(-2.5, 2.5, 33)
# 可以设置 distarr 来指定震中距序列
# static_grn = pymod.compute_static_grn(distarr=np.arange(0,10+1e-8,0.1))
# 也可以设置 xarr 和 yarr 来指定 XY 网格
static_grn = pymod.compute_static_grn(xarr=xarr, yarr=yarr)
print(static_grn.keys())
# dict_keys(['_xarr', '_yarr', '_src_va', '_src_vb', '_src_rho', '_rcv_va', '_rcv_vb', '_rcv_rho', 'EXZ', 'VFZ', 'DDZ', 'HFZ', 'DSZ', 'SSZ', 'EXR', 'VFR', 'DDR', 'HFR', 'DSR', 'SSR', 'HFT', 'DST', 'SST'])
函数返回字典类型,包括一些基本参数以及格林函数(2D矩阵)。