✍️ 朱邓达  •  🗓️ 2025-04-17 (创建时间)

计算静态格林函数

Python中计算静态格林函数的主函数为 compute_static_grn() ,C模块为 static_greenfn

建议先阅读完 计算动态格林函数 部分。静态情况与动态情况采取的计算方法一致,只是推导细节会有不同,详见 姚振兴和谢小碧 (2026)

静态解模块对于传入“震中距”的方式及后续处理与动态解模块相比稍有不同。 不论是动态解还是静态解,在模型、源点深度和场点深度确定的情况下,格林函数仅与 和震中距 相关。 但考虑到静态解的普遍应用场景,程序在计算静态格林函数阶段有两种传入震中距的方式:

  • 指定二维的 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 ;
}