计算静态格林函数
Python中计算静态格林函数的主函数为 compute_static_grn() ,C模块为 static_greenfn。
建议先阅读完 计算动态格林函数 部分。静态情况与动态情况采取的计算方法一致,只是推导细节会有不同,详见 初稿 。
示例程序
假设在 milrow 模型中,震源深度2km,接收点位于地表。北向(X/km)在[-3,3]范围内等距间隔 0.15 km 采样,东向(Y/km)在[-2.5,2.5]范围内等距间隔 0.15 km 采样,计算这些点上的静态格林函数。
depsrc=2
deprcv=0
x1=-3
x2=3
dx=0.15
y1=-2.5
y2=2.5
dy=0.15
# 输出到NetCDF网格文件
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)
static_grn = pymod.compute_static_grn(xarr, 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矩阵)。