CAPjoint 学习笔记
文章目录
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 做类似修改:
- FC = gfortran -ffixed-line-length-none
- $(LINK.f) -o $(HOME)/bin/CAPjoint/cap $@.o $(SUBS) $(FGCCLIB) -L$(NR)/lib -lnrc
- NR = /home/peterpan/share/capjointpack/CAPjoint/cap_main/nr
流程
程序使用的具体例子在我的 repo 里有。
数据预处理
- 重命名
- 写入事件信息
- 去仪器响应:transfer from polezero subtype RESP/IU.COR.10.BH2 to vel
- 重采样到 0.05
- 为远震标 P S 到时:
- 大于 30 度震中距认为是远震,对于远震,p波标在
*.?[LH]Z
上,t1是P或p的初至(定义和taup相同,用地震深度和震中距来计算的);S 波标在*?[LH][EN12]
上,t1是S或s的初至(定义和taup相同,用地震深度和震中距来计算的),没错,也是t1!
- 去趋势,改单位,旋转分量,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 和 5 是 t*
- 7 表示接下来 7 组数据是震中位置模型的
- 第一个 3 表示接下来 3 组数据台站的模型
- 第二个 3 表示接下来 3 组数据是pp反射波的模型
- 一组数据是 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