CAPjoint 是陈伟文和贾哲(音)在中科大读研期间(导师:倪四道)的作品,其基于 CAP(不是gCAP,不能做完整矩张量),主要优势是可以使用远震的数据。官方的发布地址是http://home.ustc.edu.cn/~vincentc/CAPjoint。 另外,已知有两篇文献可以参阅:

Weiwen Chen, Sidao Ni, Hiroo Kanamori, Shengji Wei, Zhe Jia, and Lupei Zhu. CAPjoint, A Computer Software Package for Joint Inversion of Moderate Earthquake Source Parameters with Local and Teleseismic Waveforms. Seismological Research Letters. Volume 86, Number 2A March/April 2015 doi: 10.1785 / 0220140167

陈伟文, 倪四道, 汪贞杰等. 2010年高雄地震震源参数的近远震波形联合反演. 地球物理学报, 2012,55(7):2319 2328, doi: 10.6038/issn.0001-5733.2012.07.017.

我在学习 CAPjoint 之后,在 Github 写了一个 repo,对于初学者,可以参考,repo中包含了基本的示例:https://github.com/wangliang1989/capjoint

编译与安装

我在 Github 上的 repo 已经把编译和安装的障碍排除了。这里只提及几处我对原作的修改。

编译 teles

PROG 变量,假设是这样:

PROG = $(HOME)/bin/CAPjoint/teles

PROG 变量指定程序的输出位置,$(HOME)/bin/CAPjoint/ 路径要提前建好。

编译 CAP

假设在路径 /cap_main/subhir 下,对 makefile 做类似修改:

  1. FC = gfortran -ffixed-line-length-none
  2. $(LINK.f) -o $(HOME)/bin/CAPjoint/cap $@.o $(SUBS) $(FGCCLIB) -L$(NR)/lib -lnrc
  3. NR = /home/peterpan/share/capjointpack/CAPjoint/cap_main/nr

流程

程序使用的具体例子在我的 repo 里有。

数据预处理

  1. 重命名
  2. 写入事件信息
  3. 去仪器响应:transfer from polezero subtype RESP/IU.COR.10.BH2 to vel
  4. 重采样到 0.05
  5. 为远震标 P S 到时:
  • 大于 30 度震中距认为是远震,对于远震,p波标在 *.?[LH]Z 上,t1是P或p的初至(定义和taup相同,用地震深度和震中距来计算的);S 波标在 *?[LH][EN12] 上,t1是S或s的初至(定义和taup相同,用地震深度和震中距来计算的),没错,也是t1!
  1. 去趋势,改单位,旋转分量,cut数据,改单位: 乘以100。大于 30 度的台站:使其 a = 10s,物理意义为 P/p , S/s 到时,t1, t3 = 8s,t2, t4 = 52s。小于 5 度的台站:cut 为 0 到 180。

格林函数的计算

近震部分使用 fk,远震使用 teles。fk 的部分在此忽略。

teles 的模型文件:

#model
1 5 7  1.5000 0.0000 1.0200 1.6420
2.3000 1.1000 2.2000 1.5000
3.2000 1.6000 2.3000 0.5000
6.0000 3.4000 2.7000 7.0000
6.6000 3.7000 2.9000 7.0000
7.2000 4.0000 3.0500 7.0000
  8.1000 4.5000 3.3800 0.0000
3 5.8000 3.2000 2.6000 10.000
  6.8000 3.9000 2.9000 22.000
  8.1000 4.5000 3.3800 0.0000
3 5.8000 3.2000 2.6000 10.000
  6.8000 3.9000 2.9000 22.000
  8.1000 4.5000 3.3800 0.0000
  1. 1 和 5 是 t*
  2. 7 表示接下来 7 组数据是震中位置模型的
  3. 第一个 3 表示接下来 3 组数据台站的模型
  4. 第二个 3 表示接下来 3 组数据是pp反射波的模型
  5. 一组数据是 4 个:VP VS 密度 厚度

反演

反演与 CAP 类似。增加了 -A 参数协调权重: -A’w_TEL_LOC’/‘w_P_SH’/‘$s_P_SH’,默认值是 w_TEL_LOC=50,w_P_SH=1,s_P_SH=0,意义是 w_TEL_LOC=50 :远震对近震 50 倍,w_P_SH=1:远震的 P 对 SH 1 倍,s_P_SH=0:P 和 SH 都用。

其他

CAPjoint的代码中有两处对参数的自动计算,值得学习:

  • 持续时间:printf ("%.1f”,3^($2-4.8)),其中,$2是震级。

  • 反演参数 -C:体波和面波的滤波下限都是 0.01,上限的公式是:printf("%.2f”,0.25*0.66^($2-5)) ,其中,‘$2’ 是震级,如果算出来体波的超过了 0.2 则用 0.2,面波超过 0.1 则用 0.1