pygrt-kit 0.2.0__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pygrt/C_extension/Makefile +137 -0
- pygrt/C_extension/bin/grt.exe +0 -0
- pygrt/C_extension/bin/grt.syn +0 -0
- pygrt/C_extension/bin/grt.travt +0 -0
- pygrt/C_extension/include/attenuation.h +24 -0
- pygrt/C_extension/include/bessel.h +22 -0
- pygrt/C_extension/include/colorstr.h +19 -0
- pygrt/C_extension/include/const.h +115 -0
- pygrt/C_extension/include/dwm.h +44 -0
- pygrt/C_extension/include/fim.h +78 -0
- pygrt/C_extension/include/grt.h +128 -0
- pygrt/C_extension/include/iostats.h +72 -0
- pygrt/C_extension/include/layer.h +123 -0
- pygrt/C_extension/include/logo.h +57 -0
- pygrt/C_extension/include/matrix.h +205 -0
- pygrt/C_extension/include/model.h +165 -0
- pygrt/C_extension/include/progressbar.h +22 -0
- pygrt/C_extension/include/propagate.h +379 -0
- pygrt/C_extension/include/prtdbg.h +13 -0
- pygrt/C_extension/include/ptam.h +90 -0
- pygrt/C_extension/include/quadratic.h +55 -0
- pygrt/C_extension/include/sacio.h +382 -0
- pygrt/C_extension/include/search.h +69 -0
- pygrt/C_extension/include/signals.h +170 -0
- pygrt/C_extension/include/source.h +38 -0
- pygrt/C_extension/include/travt.h +28 -0
- pygrt/C_extension/include/version.h +14 -0
- pygrt/C_extension/lib/libgrt.a +0 -0
- pygrt/C_extension/lib/libgrt.so +0 -0
- pygrt/C_extension/src/attenuation.c +18 -0
- pygrt/C_extension/src/bessel.c +18 -0
- pygrt/C_extension/src/dwm.c +135 -0
- pygrt/C_extension/src/fim.c +254 -0
- pygrt/C_extension/src/grt.c +484 -0
- pygrt/C_extension/src/grt_main.c +1215 -0
- pygrt/C_extension/src/grt_syn.c +716 -0
- pygrt/C_extension/src/grt_travt.c +227 -0
- pygrt/C_extension/src/iostats.c +94 -0
- pygrt/C_extension/src/layer.c +254 -0
- pygrt/C_extension/src/model.c +377 -0
- pygrt/C_extension/src/progressbar.c +30 -0
- pygrt/C_extension/src/propagate.c +773 -0
- pygrt/C_extension/src/ptam.c +347 -0
- pygrt/C_extension/src/quadratic.c +59 -0
- pygrt/C_extension/src/sacio.c +712 -0
- pygrt/C_extension/src/search.c +66 -0
- pygrt/C_extension/src/signals.c +350 -0
- pygrt/C_extension/src/source.c +88 -0
- pygrt/C_extension/src/travt.c +356 -0
- pygrt/C_extension/version +1 -0
- pygrt/__init__.py +19 -0
- pygrt/_version.py +1 -0
- pygrt/c_interfaces.py +68 -0
- pygrt/c_structures.py +86 -0
- pygrt/print.py +17 -0
- pygrt/pygrn.py +188 -0
- pygrt/pymod.py +442 -0
- pygrt/signals.py +196 -0
- pygrt/utils.py +685 -0
- pygrt_kit-0.2.0.dist-info/LICENSE +674 -0
- pygrt_kit-0.2.0.dist-info/METADATA +154 -0
- pygrt_kit-0.2.0.dist-info/RECORD +64 -0
- pygrt_kit-0.2.0.dist-info/WHEEL +5 -0
- pygrt_kit-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file propagate.h
|
|
3
|
+
* @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
|
|
4
|
+
* @date 2024-07-24
|
|
5
|
+
*
|
|
6
|
+
* 以下代码通过递推公式实现 广义反射透射系数矩阵 ,参考:
|
|
7
|
+
*
|
|
8
|
+
* 1. 姚振兴, 谢小碧. 2022/03. 理论地震图及其应用(初稿).
|
|
9
|
+
* 2. Yao Z. X. and D. G. Harkrider. 1983. A generalized refelection-transmission coefficient
|
|
10
|
+
* matrix and discrete wavenumber method for synthetic seismograms. BSSA. 73(6). 1685-1699
|
|
11
|
+
*
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
#pragma once
|
|
16
|
+
|
|
17
|
+
#include "const.h"
|
|
18
|
+
#include "model.h"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* kernel函数根据(5.5.3)式递推计算广义反射透射矩阵, 再根据公式得到
|
|
25
|
+
*
|
|
26
|
+
* 1.EXP 爆炸源, (P0)
|
|
27
|
+
* 2.VF 垂直力源, (P0, SV0)
|
|
28
|
+
* 3.HF 水平力源, (P1, SV1, SH1)
|
|
29
|
+
* 4.DC 剪切位错源, (P0, SV0), (P1, SV1, SH1), (P2, SV2, SH2)
|
|
30
|
+
*
|
|
31
|
+
* 的 \f$ q_m, w_m, v_m \f$ 系数(\f$ m=0,1,2 \f$),
|
|
32
|
+
*
|
|
33
|
+
* eg. DC_qwv[i][j]表示 \f$ m=i \f$ 阶时的 \f$ q_m(j=0), w_m(j=1), v_m(j=2) \f$ 系数
|
|
34
|
+
*
|
|
35
|
+
* 在递推得到广义反射透射矩阵后,计算位移系数的公式本质是类似的,但根据震源和接受点的相对位置,
|
|
36
|
+
* 空间划分为多个层,公式也使用不同的矩阵,具体为
|
|
37
|
+
*
|
|
38
|
+
*
|
|
39
|
+
* \f[
|
|
40
|
+
* \begin{array}{c}
|
|
41
|
+
* \\\\ \hline
|
|
42
|
+
* \hspace{5cm}\text{Free Surface(自由表面)}\hspace{5cm} \\\\
|
|
43
|
+
* \text{...} \\\\ \hline
|
|
44
|
+
* \text{Source/Receiver interface(震源/接收虚界面) (A面)} \\\\
|
|
45
|
+
* \text{...} \\\\ \hline
|
|
46
|
+
* \text{Receiver/Source interface(接收/震源虚界面) (B面)} \\\\
|
|
47
|
+
* \text{...} \\\\ \hline
|
|
48
|
+
* \text{Lower interface(底界面)} \\\\
|
|
49
|
+
* \text{...} \\
|
|
50
|
+
* \text{(无穷深)} \\
|
|
51
|
+
* \text{...} \\
|
|
52
|
+
*
|
|
53
|
+
*
|
|
54
|
+
* \end{array}
|
|
55
|
+
* \f]
|
|
56
|
+
*
|
|
57
|
+
* 界面之间构成一个广义层,每个层都对应2个反射系数矩阵RD/RU和2个透射系数矩阵TD/TU,
|
|
58
|
+
* 根据公式的整理结果,但实际需要的矩阵为:
|
|
59
|
+
*
|
|
60
|
+
* | 广义层 | **台站在震源上方** | **台站在震源下方** |
|
|
61
|
+
* |----------|-------------------|-------------------|
|
|
62
|
+
* | FS (震源 <-> 表面) | RU | RD, RU, TD, TU |
|
|
63
|
+
* | FR (接收 <-> 表面) | RD, RU, TD, TU | / |
|
|
64
|
+
* | RS (震源 <-> 接收) | RD, RU, TD, TU | RD, RU, TD, TU |
|
|
65
|
+
* | SL (震源 <-> 底面) | RD | RD |
|
|
66
|
+
* | RL (接收 <-> 底面) | / | RD |
|
|
67
|
+
*
|
|
68
|
+
*
|
|
69
|
+
*
|
|
70
|
+
*
|
|
71
|
+
* @note 关于与自由表面相关的系数矩阵要注意,FS表示(z1, zR+)之间的效应,但通常我们
|
|
72
|
+
* 定义KP表示(zK+, zP+)之间的效应,所以这里F表示已经加入了自由表面的作用,
|
|
73
|
+
* 对应的我们使用ZR表示(z1+, zR+)的效应,FR和ZR也满足类似的递推关系。
|
|
74
|
+
* @note 从公式推导上,例如RD_RS,描述的是(zR+, zS-)的效应,但由于我们假定
|
|
75
|
+
* 震源位于介质层内,则z=zS并不是介质的物理分界面,此时 \f$ D_{j-1}^{-1} * D_j = I \f$,
|
|
76
|
+
* 故在程序可更方便的编写。
|
|
77
|
+
* @note 接收点位于自由表面的情况 不再单独考虑,合并在接受点浅于震源的情况
|
|
78
|
+
*
|
|
79
|
+
*
|
|
80
|
+
* 为了尽量减少冗余的计算,且保证程序的可读性,可将震源层和接收层抽象为A,B层,
|
|
81
|
+
* 即空间划分为FA,AB,BL, 计算这三个广义层的系数矩阵,再讨论震源层和接收层的深浅,
|
|
82
|
+
* 计算相应的矩阵。
|
|
83
|
+
*
|
|
84
|
+
* @param mod1d (in)`MODEL1D` 结构体指针
|
|
85
|
+
* @param omega (in)复数频率
|
|
86
|
+
* @param k (in)波数
|
|
87
|
+
* @param EXP_qwv[3][3] (out)爆炸源核函数
|
|
88
|
+
* @param VF_qwv[3][3] (out)垂直力源核函数
|
|
89
|
+
* @param HF_qwv[3][3] (out)水平力源核函数
|
|
90
|
+
* @param DC_qwv[3][3] (out)双力偶源核函数
|
|
91
|
+
*
|
|
92
|
+
*/
|
|
93
|
+
void kernel(
|
|
94
|
+
const MODEL1D *mod1d, MYCOMPLEX omega, MYREAL k,
|
|
95
|
+
MYCOMPLEX EXP_qwv[3][3], MYCOMPLEX VF_qwv[3][3], MYCOMPLEX HF_qwv[3][3], MYCOMPLEX DC_qwv[3][3]);
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* 计算核函数和Bessel函数的乘积,相当于计算了一个小积分区间内的值。参数中涉及两种数组形状:
|
|
101
|
+
* + [3][3]. 存储的是核函数,第一个维度3代表阶数m=0,1,2,第二个维度3代表三类系数qm,wm,vm
|
|
102
|
+
* + [3][4]. 存储的是该dk区间内的积分值,维度3代表阶数m=0,1,2,维度4代表4种类型的F(k,w)Jm(kr)k的类型
|
|
103
|
+
*
|
|
104
|
+
*
|
|
105
|
+
* @param k (in)波数
|
|
106
|
+
* @param r (in)震中距
|
|
107
|
+
* @param EXP_qwv[3][3] (in)爆炸源核函数
|
|
108
|
+
* @param VF_qwv[3][3] (in)垂直力源核函数
|
|
109
|
+
* @param HF_qwv[3][3] (in)水平力源核函数
|
|
110
|
+
* @param DC_qwv[3][3] (in)双力偶源核函数
|
|
111
|
+
* @param EXP_J[3][4] (out)爆炸源,该dk区间内的积分值,下同
|
|
112
|
+
* @param VF_J[3][4] (out)垂直力源
|
|
113
|
+
* @param HF_J[3][4] (out)水平力源
|
|
114
|
+
* @param DC_J[3][4] (out)双力偶源
|
|
115
|
+
*
|
|
116
|
+
*/
|
|
117
|
+
void int_Pk(
|
|
118
|
+
MYREAL k, MYREAL r,
|
|
119
|
+
const MYCOMPLEX EXP_qwv[3][3], const MYCOMPLEX VF_qwv[3][3],
|
|
120
|
+
const MYCOMPLEX HF_qwv[3][3], const MYCOMPLEX DC_qwv[3][3],
|
|
121
|
+
MYCOMPLEX EXP_J[3][4], MYCOMPLEX VF_J[3][4],
|
|
122
|
+
MYCOMPLEX HF_J[3][4], MYCOMPLEX DC_J[3][4] );
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* 将最终计算好的多个积分值,按照公式(5.6.22)组装成3分量。数组形状[3][4],\
|
|
127
|
+
* 存储的是最终的积分值,维度3代表阶数m=0,1,2,维度4代表4种类型的F(k,w)Jm(kr)k的类型
|
|
128
|
+
*
|
|
129
|
+
* @param sum_EXP_J[3][4] (in)爆炸源,最终的积分值,下同
|
|
130
|
+
* @param sum_VF_J[3][4] (in)垂直力源
|
|
131
|
+
* @param sum_HF_J[3][4] (in)水平力源
|
|
132
|
+
* @param sum_DC_J[3][4] (in)双力偶源
|
|
133
|
+
* @param tol_EXP[2] (out)爆炸源的Z、R分量频谱结果
|
|
134
|
+
* @param tol_VF[2] (out)垂直力源的Z、R分量频谱结果
|
|
135
|
+
* @param tol_HF[3] (out)水平力源的Z、R、T分量频谱结果
|
|
136
|
+
* @param tol_DD[2] (out)45度倾滑的Z、R分量频谱结果
|
|
137
|
+
* @param tol_DS[3] (out)90度倾滑的Z、R、T分量频谱结果
|
|
138
|
+
* @param tol_SS[3] (out)90度走滑的Z、R、T分量频谱结果
|
|
139
|
+
*/
|
|
140
|
+
void merge_Pk(
|
|
141
|
+
const MYCOMPLEX sum_EXP_J[3][4], const MYCOMPLEX sum_VF_J[3][4],
|
|
142
|
+
const MYCOMPLEX sum_HF_J[3][4], const MYCOMPLEX sum_DC_J[3][4],
|
|
143
|
+
MYCOMPLEX tol_EXP[2], MYCOMPLEX tol_VF[2], MYCOMPLEX tol_HF[3],
|
|
144
|
+
MYCOMPLEX tol_DD[2], MYCOMPLEX tol_DS[3], MYCOMPLEX tol_SS[3]);
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* 根据公式(5.5.3(1))进行递推
|
|
149
|
+
*
|
|
150
|
+
* @param RD1[2][2] (in)1层 P-SV 下传反射系数矩阵
|
|
151
|
+
* @param RDL1 (in)1层 SH 下传反射系数
|
|
152
|
+
* @param RU1[2][2] (in)1层 P-SV 上传反射系数矩阵
|
|
153
|
+
* @param RUL1 (in)1层 SH 上传反射系数
|
|
154
|
+
* @param TD1[2][2] (in)1层 P-SV 下传透射系数矩阵
|
|
155
|
+
* @param TDL1 (in)1层 SH 下传透射系数
|
|
156
|
+
* @param TU1[2][2] (in)1层 P-SV 上传透射系数矩阵
|
|
157
|
+
* @param TUL1 (in)1层 SH 上传透射系数
|
|
158
|
+
* @param RD2[2][2] (in)2层 P-SV 下传反射系数矩阵
|
|
159
|
+
* @param RDL2 (in)2层 SH 下传反射系数
|
|
160
|
+
* @param RD[2][2] (out)1+2层 P-SV 下传反射系数矩阵
|
|
161
|
+
* @param RDL (out)1+2层 SH 下传反射系数
|
|
162
|
+
* @param inv_2x2T[2][2] (out) 非NULL时,返回公式中的 \f$ (\mathbf{I} - \mathbf{R}_U^1 \mathbf{R}_D^2)^{-1} \mathbf{T}_D^1 \f$ 一项
|
|
163
|
+
* @param invT (out) 非NULL时,返回上面inv_2x2T的标量形式
|
|
164
|
+
*
|
|
165
|
+
*/
|
|
166
|
+
void recursion_RD(
|
|
167
|
+
const MYCOMPLEX RD1[2][2], MYCOMPLEX RDL1, const MYCOMPLEX RU1[2][2], MYCOMPLEX RUL1,
|
|
168
|
+
const MYCOMPLEX TD1[2][2], MYCOMPLEX TDL1, const MYCOMPLEX TU1[2][2], MYCOMPLEX TUL1,
|
|
169
|
+
const MYCOMPLEX RD2[2][2], MYCOMPLEX RDL2,
|
|
170
|
+
MYCOMPLEX RD[2][2], MYCOMPLEX *RDL, MYCOMPLEX inv_2x2T[2][2], MYCOMPLEX *invT);
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* 根据公式(5.5.3(2))进行递推
|
|
175
|
+
*
|
|
176
|
+
* @param RU1[2][2] (in)1层 P-SV 上传反射系数矩阵
|
|
177
|
+
* @param RUL1 (in)1层 SH 上传反射系数
|
|
178
|
+
* @param TD1[2][2] (in)1层 P-SV 下传透射系数矩阵
|
|
179
|
+
* @param TDL1 (in)1层 SH 下传透射系数
|
|
180
|
+
* @param RD2[2][2] (in)2层 P-SV 下传反射系数矩阵
|
|
181
|
+
* @param RDL2 (in)2层 SH 下传反射系数
|
|
182
|
+
* @param TD2[2][2] (in)2层 P-SV 下传透射系数矩阵
|
|
183
|
+
* @param TDL2 (in)2层 SH 下传透射系数
|
|
184
|
+
* @param TD[2][2] (out)1+2层 P-SV 下传透射系数矩阵
|
|
185
|
+
* @param TDL (out)1+2层 SH 下传透射系数
|
|
186
|
+
* @param inv_2x2T[2][2] (out) 非NULL时,返回公式中的 \f$ (\mathbf{I} - \mathbf{R}_U^1 \mathbf{R}_D^2)^{-1} \mathbf{T}_D^1 \f$ 一项
|
|
187
|
+
* @param invT (out) 非NULL时,返回上面inv_2x2T的标量形式
|
|
188
|
+
*
|
|
189
|
+
*/
|
|
190
|
+
void recursion_TD(
|
|
191
|
+
const MYCOMPLEX RU1[2][2], MYCOMPLEX RUL1,
|
|
192
|
+
const MYCOMPLEX TD1[2][2], MYCOMPLEX TDL1,
|
|
193
|
+
const MYCOMPLEX RD2[2][2], MYCOMPLEX RDL2,
|
|
194
|
+
const MYCOMPLEX TD2[2][2], MYCOMPLEX TDL2,
|
|
195
|
+
MYCOMPLEX TD[2][2], MYCOMPLEX *TDL, MYCOMPLEX inv_2x2T[2][2], MYCOMPLEX *invT);
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* 根据公式(5.5.3(3))进行递推
|
|
202
|
+
*
|
|
203
|
+
* @param RU1[2][2] (in)1层 P-SV 上传反射系数矩阵
|
|
204
|
+
* @param RUL1 (in)1层 SH 上传反射系数
|
|
205
|
+
* @param RD2[2][2] (in)2层 P-SV 下传反射系数矩阵
|
|
206
|
+
* @param RDL2 (in)2层 SH 下传反射系数
|
|
207
|
+
* @param RU2[2][2] (in)2层 P-SV 上传反射系数矩阵
|
|
208
|
+
* @param RUL2 (in)2层 SH 上传反射系数
|
|
209
|
+
* @param TD2[2][2] (in)2层 P-SV 下传透射系数矩阵
|
|
210
|
+
* @param TDL2 (in)2层 SH 下传透射系数
|
|
211
|
+
* @param TU2[2][2] (in)2层 P-SV 上传透射系数矩阵
|
|
212
|
+
* @param TUL2 (in)2层 SH 上传透射系数
|
|
213
|
+
* @param RU[2][2] (out)1+2层 P-SV 上传反射系数矩阵
|
|
214
|
+
* @param RUL (out)1+2层 SH 上传反射系数
|
|
215
|
+
* @param inv_2x2T[2][2] (out) 非NULL时,返回公式中的 \f$ (\mathbf{I} - \mathbf{R}_D^2 \mathbf{R}_U^1)^{-1} \mathbf{T}_U^2 \f$ 一项
|
|
216
|
+
* @param invT (out) 非NULL时,返回上面inv_2x2T的标量形式
|
|
217
|
+
*
|
|
218
|
+
*/
|
|
219
|
+
void recursion_RU(
|
|
220
|
+
const MYCOMPLEX RU1[2][2], MYCOMPLEX RUL1,
|
|
221
|
+
const MYCOMPLEX RD2[2][2], MYCOMPLEX RDL2, const MYCOMPLEX RU2[2][2], MYCOMPLEX RUL2,
|
|
222
|
+
const MYCOMPLEX TD2[2][2], MYCOMPLEX TDL2, const MYCOMPLEX TU2[2][2], MYCOMPLEX TUL2,
|
|
223
|
+
MYCOMPLEX RU[2][2], MYCOMPLEX *RUL, MYCOMPLEX inv_2x2T[2][2], MYCOMPLEX *invT);
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* 根据公式(5.5.3(4))进行递推
|
|
227
|
+
*
|
|
228
|
+
* @param RU1[2][2] (in)1层 P-SV 上传反射系数矩阵
|
|
229
|
+
* @param RUL1 (in)1层 SH 上传反射系数
|
|
230
|
+
* @param RD2[2][2] (in)2层 P-SV 下传反射系数矩阵
|
|
231
|
+
* @param RDL2 (in)2层 SH 下传反射系数
|
|
232
|
+
* @param RD2[2][2] (in)2层 P-SV 下传反射系数矩阵
|
|
233
|
+
* @param RDL2 (in)2层 SH 下传反射系数
|
|
234
|
+
* @param TU2[2][2] (in)2层 P-SV 上传透射系数矩阵
|
|
235
|
+
* @param TUL2 (in)2层 SH 上传透射系数
|
|
236
|
+
* @param TU[2][2] (out)1+2层 P-SV 上传透射系数矩阵
|
|
237
|
+
* @param TUL (out)1+2层 SH 上传透射系数
|
|
238
|
+
* @param inv_2x2T[2][2] (out) 非NULL时,返回公式中的 \f$ (\mathbf{I} - \mathbf{R}_D^2 \mathbf{R}_U^1)^{-1} \mathbf{T}_U^2 \f$ 一项
|
|
239
|
+
* @param invT (out) 非NULL时,返回上面inv_2x2T的标量形式
|
|
240
|
+
*
|
|
241
|
+
*
|
|
242
|
+
*/
|
|
243
|
+
void recursion_TU(
|
|
244
|
+
const MYCOMPLEX RU1[2][2], MYCOMPLEX RUL1,
|
|
245
|
+
const MYCOMPLEX TU1[2][2], MYCOMPLEX TUL1,
|
|
246
|
+
const MYCOMPLEX RD2[2][2], MYCOMPLEX RDL2,
|
|
247
|
+
const MYCOMPLEX TU2[2][2], MYCOMPLEX TUL2,
|
|
248
|
+
MYCOMPLEX TU[2][2], MYCOMPLEX *TUL, MYCOMPLEX inv_2x2T[2][2], MYCOMPLEX *invT);
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* 根据公式(5.5.3)进行递推,相当于上面四个函数合并
|
|
254
|
+
*
|
|
255
|
+
* @param RD1[2][2] (in)1层 P-SV 下传反射系数矩阵
|
|
256
|
+
* @param RDL1 (in)1层 SH 下传反射系数
|
|
257
|
+
* @param RU1[2][2] (in)1层 P-SV 上传反射系数矩阵
|
|
258
|
+
* @param RUL1 (in)1层 SH 上传反射系数
|
|
259
|
+
* @param TD1[2][2] (in)1层 P-SV 下传透射系数矩阵
|
|
260
|
+
* @param TDL1 (in)1层 SH 下传透射系数
|
|
261
|
+
* @param TU1[2][2] (in)1层 P-SV 上传透射系数矩阵
|
|
262
|
+
* @param TUL1 (in)1层 SH 上传透射系数
|
|
263
|
+
* @param RD2[2][2] (in)2层 P-SV 下传反射系数矩阵
|
|
264
|
+
* @param RDL2 (in)2层 SH 下传反射系数
|
|
265
|
+
* @param RU2[2][2] (in)2层 P-SV 上传反射系数矩阵
|
|
266
|
+
* @param RUL2 (in)2层 SH 上传反射系数
|
|
267
|
+
* @param TD2[2][2] (in)2层 P-SV 下传透射系数矩阵
|
|
268
|
+
* @param TDL2 (in)2层 SH 下传透射系数
|
|
269
|
+
* @param TU2[2][2] (in)2层 P-SV 上传透射系数矩阵
|
|
270
|
+
* @param TUL2 (in)2层 SH 上传透射系数
|
|
271
|
+
* @param RD[2][2] (out)1+2层 P-SV 下传反射系数矩阵
|
|
272
|
+
* @param RDL (out)1+2层 SH 下传反射系数
|
|
273
|
+
* @param RU[2][2] (out)1+2层 P-SV 上传反射系数矩阵
|
|
274
|
+
* @param RUL (out)1+2层 SH 上传反射系数
|
|
275
|
+
* @param TD[2][2] (out)1+2层 P-SV 下传透射系数矩阵
|
|
276
|
+
* @param TDL (out)1+2层 SH 下传透射系数
|
|
277
|
+
* @param TU[2][2] (out)1+2层 P-SV 上传透射系数矩阵
|
|
278
|
+
* @param TUL (out)1+2层 SH 上传透射系数
|
|
279
|
+
*
|
|
280
|
+
*/
|
|
281
|
+
void recursion_RT_2x2(
|
|
282
|
+
const MYCOMPLEX RD1[2][2], MYCOMPLEX RDL1, const MYCOMPLEX RU1[2][2], MYCOMPLEX RUL1,
|
|
283
|
+
const MYCOMPLEX TD1[2][2], MYCOMPLEX TDL1, const MYCOMPLEX TU1[2][2], MYCOMPLEX TUL1,
|
|
284
|
+
const MYCOMPLEX RD2[2][2], MYCOMPLEX RDL2, const MYCOMPLEX RU2[2][2], MYCOMPLEX RUL2,
|
|
285
|
+
const MYCOMPLEX TD2[2][2], MYCOMPLEX TDL2, const MYCOMPLEX TU2[2][2], MYCOMPLEX TUL2,
|
|
286
|
+
MYCOMPLEX RD[2][2], MYCOMPLEX *RDL, MYCOMPLEX RU[2][2], MYCOMPLEX *RUL,
|
|
287
|
+
MYCOMPLEX TD[2][2], MYCOMPLEX *TDL, MYCOMPLEX TU[2][2], MYCOMPLEX *TUL);
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* 对于虚拟层位,即上下层是相同的物性参数,对公式(5.5.3)进行简化,只剩下时间延迟因子
|
|
292
|
+
*
|
|
293
|
+
* @param xa1 (in)P波归一化垂直波数 \f$ \sqrt{1 - (k_a/k)^2} \f$
|
|
294
|
+
* @param xb1 (in)S波归一化垂直波数 \f$ \sqrt{1 - (k_b/k)^2} \f$
|
|
295
|
+
* @param thk (in)厚度
|
|
296
|
+
* @param k (in)波数
|
|
297
|
+
* @param RU[2][2] (inout)上层 P-SV 上传反射系数矩阵
|
|
298
|
+
* @param RUL (inout)上层 SH 上传反射系数
|
|
299
|
+
* @param TD[2][2] (inout)上层 P-SV 下传透射系数矩阵
|
|
300
|
+
* @param TDL (inout)上层 SH 下传透射系数
|
|
301
|
+
* @param TU[2][2] (inout)上层 P-SV 上传透射系数矩阵
|
|
302
|
+
* @param TUL (inout)上层 SH 上传透射系数
|
|
303
|
+
*/
|
|
304
|
+
void recursion_RT_2x2_imaginary(
|
|
305
|
+
MYCOMPLEX xa1, MYCOMPLEX xb1, MYREAL thk, MYREAL k, // 使用上层的厚度
|
|
306
|
+
MYCOMPLEX RU[2][2], MYCOMPLEX *RUL,
|
|
307
|
+
MYCOMPLEX TD[2][2], MYCOMPLEX *TDL, MYCOMPLEX TU[2][2], MYCOMPLEX *TUL);
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* 最终公式(5.7.12,13,26,27)简化为 (P-SV波) :
|
|
313
|
+
* + 当台站在震源上方时:
|
|
314
|
+
*
|
|
315
|
+
* \f[
|
|
316
|
+
* \begin{pmatrix}
|
|
317
|
+
* q_m \\
|
|
318
|
+
* w_m
|
|
319
|
+
* \end{pmatrix}
|
|
320
|
+
* =
|
|
321
|
+
* \mathbf{R_1}
|
|
322
|
+
*
|
|
323
|
+
* \left[
|
|
324
|
+
* \mathbf{R_2}
|
|
325
|
+
* \begin{pmatrix}
|
|
326
|
+
* P_m^+ \\
|
|
327
|
+
* SV_m^+
|
|
328
|
+
* \end{pmatrix}
|
|
329
|
+
* +
|
|
330
|
+
* \begin{pmatrix}
|
|
331
|
+
* P_m^- \\
|
|
332
|
+
* SV_m^-
|
|
333
|
+
* \end{pmatrix}
|
|
334
|
+
*
|
|
335
|
+
* \right]
|
|
336
|
+
*
|
|
337
|
+
* \f]
|
|
338
|
+
*
|
|
339
|
+
* + 当台站在震源下方时:
|
|
340
|
+
*
|
|
341
|
+
* \f[
|
|
342
|
+
* \begin{pmatrix}
|
|
343
|
+
* q_m \\
|
|
344
|
+
* w_m
|
|
345
|
+
* \end{pmatrix}
|
|
346
|
+
* =
|
|
347
|
+
* \mathbf{R_1}
|
|
348
|
+
*
|
|
349
|
+
* \left[
|
|
350
|
+
* \begin{pmatrix}
|
|
351
|
+
* P_m^+ \\
|
|
352
|
+
* SV_m^+
|
|
353
|
+
* \end{pmatrix}
|
|
354
|
+
* +
|
|
355
|
+
* \mathbf{R_2}
|
|
356
|
+
* \begin{pmatrix}
|
|
357
|
+
* P_m^- \\
|
|
358
|
+
* SV_m^-
|
|
359
|
+
* \end{pmatrix}
|
|
360
|
+
*
|
|
361
|
+
* \right]
|
|
362
|
+
*
|
|
363
|
+
* \f]
|
|
364
|
+
*
|
|
365
|
+
* SH波类似,但是是标量形式。
|
|
366
|
+
*
|
|
367
|
+
* @param ircvup (in)接收层是否浅于震源层
|
|
368
|
+
* @param R1[2][2] (in)P-SV波,\f$\mathbf{R_1}\f$矩阵
|
|
369
|
+
* @param RL1 (in)SH波, \f$ R_1\f$
|
|
370
|
+
* @param R2[2][2] (in)P-SV波,\f$\mathbf{R_2}\f$矩阵
|
|
371
|
+
* @param RL2 (in)SH波, \f$ R_2\f$
|
|
372
|
+
* @param coef[3][2] (in)震源系数,维度3表示震源附近的\f$ q_m,w_m,v_m\f$ ,维度2表示下行波(p=0)和上行波(p=1)
|
|
373
|
+
* @param qwv[3] (out)最终通过矩阵传播计算出的在台站位置的\f$ q_m,w_m,v_m\f$
|
|
374
|
+
*/
|
|
375
|
+
void get_qwv(
|
|
376
|
+
bool ircvup,
|
|
377
|
+
const MYCOMPLEX R1[2][2], MYCOMPLEX RL1,
|
|
378
|
+
const MYCOMPLEX R2[2][2], MYCOMPLEX RL2,
|
|
379
|
+
const MYCOMPLEX coef[3][2], MYCOMPLEX qwv[3]);
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ptam.h
|
|
3
|
+
* @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
|
|
4
|
+
* @date 2024-07-24
|
|
5
|
+
*
|
|
6
|
+
* 以下代码实现的是 峰谷平均法 ,参考:
|
|
7
|
+
*
|
|
8
|
+
* 1. 张海明. 2021. 地震学中的Lamb问题(上). 科学出版社
|
|
9
|
+
* 2. Zhang, H. M., Chen, X. F., & Chang, S. (2003).
|
|
10
|
+
* An efficient numerical method for computing synthetic seismograms
|
|
11
|
+
* for a layered half-space with sources and receivers at close or same depths.
|
|
12
|
+
* Seismic motion, lithospheric structures, earthquake and volcanic sources:
|
|
13
|
+
* The Keiiti Aki volume, 467-486.
|
|
14
|
+
*
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include "model.h"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
#define PTAM_MAX_PEAK_TROUGH 36 ///< 最后统计波峰波谷的目标数量
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* 峰谷平均法 Peak-Trough Averaging Method,最后收敛的积分结果以三维数组的形式返回,
|
|
28
|
+
* 形状为[nr][3][4], 分别代表震中距、阶数(m=0,1,2) 和4种积分类型(p=0,1,2,3)
|
|
29
|
+
*
|
|
30
|
+
* @param mod1d (in)`MODEL1D` 结构体指针
|
|
31
|
+
* @param k0 (in)先前的积分已经进行到了波数k0
|
|
32
|
+
* @param predk (in)先前的积分使用的积分间隔dk,因为峰谷平均法使用的
|
|
33
|
+
* 积分间隔会和之前的不一致,这里传入该系数以做预先调整
|
|
34
|
+
* @param rmin (in)最小震中距
|
|
35
|
+
* @param rmax (in)最大震中距
|
|
36
|
+
* @param omega (in)复数频率
|
|
37
|
+
* @param nr (in)震中距数量
|
|
38
|
+
* @param rs (in)震中距数组
|
|
39
|
+
* @param sum_EXP_J0[nr][3][4] (out)爆炸源
|
|
40
|
+
* @param sum_VF_J0[nr][3][4] (out)垂直力源
|
|
41
|
+
* @param sum_HF_J0[nr][3][4] (out)水平力源
|
|
42
|
+
* @param sum_DC_J0[nr][3][4] (out)双力偶源
|
|
43
|
+
* @param fstats[nr] (out)波数积分过程文件指针
|
|
44
|
+
* @param ptam_fstats[nr] (out)峰谷平均法过程文件指针
|
|
45
|
+
*
|
|
46
|
+
*
|
|
47
|
+
*/
|
|
48
|
+
void PTA_method(
|
|
49
|
+
const MODEL1D *mod1d, MYREAL k0, MYREAL predk, MYREAL rmin, MYREAL rmax, MYCOMPLEX omega,
|
|
50
|
+
MYINT nr, MYREAL *rs,
|
|
51
|
+
MYCOMPLEX sum_EXP_J0[nr][3][4], MYCOMPLEX sum_VF_J0[nr][3][4],
|
|
52
|
+
MYCOMPLEX sum_HF_J0[nr][3][4], MYCOMPLEX sum_DC_J0[nr][3][4],
|
|
53
|
+
FILE *(fstats[nr]), FILE *(ptam_fstats[nr]));
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 观察连续3个点的函数值的实部变化,判断是波峰(1)还是波谷(-1), 并计算对应值。
|
|
61
|
+
* 其中存储函数值的数组形状为[3][3][4], 分别代表
|
|
62
|
+
* 连续3个点、阶数(m=0,1,2) 和4种积分类型(p=0,1,2,3)
|
|
63
|
+
*
|
|
64
|
+
* @param idx1 (in)阶数索引
|
|
65
|
+
* @param idx2 (in)积分类型索引
|
|
66
|
+
* @param arr[3][3][4] (in)存有连续三个点的函数值的数组
|
|
67
|
+
* @param k (in)三个点的起始波数
|
|
68
|
+
* @param dk (in)三个点的波数间隔,这样使用k和dk定义了三个点的位置
|
|
69
|
+
* @param pk (out)估计的波峰或波谷处的波数
|
|
70
|
+
* @param value (out)估计的波峰或波谷处的函数值
|
|
71
|
+
*
|
|
72
|
+
* @return 波峰(1),波谷(-1),其它(0)
|
|
73
|
+
*
|
|
74
|
+
*/
|
|
75
|
+
MYINT cplx_peak_or_trough(
|
|
76
|
+
MYINT idx1, MYINT idx2, const MYCOMPLEX arr[3][3][4],
|
|
77
|
+
MYREAL k, MYREAL dk, MYREAL *pk, MYCOMPLEX *value);
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 递归式地计算缩减序列的值,
|
|
82
|
+
* \f[
|
|
83
|
+
* M_i = 0.5\times (M_i + M_{i+1})
|
|
84
|
+
* \f]
|
|
85
|
+
*
|
|
86
|
+
* @param n1 (in)数组长度
|
|
87
|
+
* @param arr (inout)振荡的数组,最终收敛值在第一个,arr[0]
|
|
88
|
+
*
|
|
89
|
+
*/
|
|
90
|
+
void cplx_shrink(MYINT n1, MYCOMPLEX *arr);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file quadratic.h
|
|
3
|
+
* @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
|
|
4
|
+
* @date 2024-07-24
|
|
5
|
+
*
|
|
6
|
+
* 以下代码实现的是 已知x1,x2,x3三点以及对应的函数值(复数),确定这三点构成的二次函数的系数,
|
|
7
|
+
* \f[
|
|
8
|
+
* f(x) = ax^2 + bx + c
|
|
9
|
+
* \f]
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
#pragma once
|
|
14
|
+
|
|
15
|
+
#include "const.h"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 已知三个点x1,x2,x3,以及对应的函数值f1,f2,f3, 拟合函数
|
|
20
|
+
*
|
|
21
|
+
*
|
|
22
|
+
* @param x[3] (in)自变量
|
|
23
|
+
* @param f[3] (in)因变量
|
|
24
|
+
* @param pa (out)拟合a值
|
|
25
|
+
* @param pb (out)拟合b值
|
|
26
|
+
* @param pc (out)拟合c值
|
|
27
|
+
*/
|
|
28
|
+
void quad_term(const MYREAL x[3], const MYCOMPLEX f[3], MYCOMPLEX *pa, MYCOMPLEX *pb, MYCOMPLEX *pc);
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 给定x,根据a,b,c值,估计 \f$ f(x) \f$
|
|
33
|
+
*
|
|
34
|
+
* @param x (in)自变量
|
|
35
|
+
* @param a (in)a值
|
|
36
|
+
* @param b (in)b值
|
|
37
|
+
* @param c (in)c值
|
|
38
|
+
* @return \f$ f(x) = ax^2 + bx + c \f$
|
|
39
|
+
*
|
|
40
|
+
*/
|
|
41
|
+
MYCOMPLEX quad_eval(MYREAL x, MYCOMPLEX a, MYCOMPLEX b, MYCOMPLEX c);
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 给定x,根据a,b,c值,估计 \f$ \MYINT_{x_1}^{x_2} f(s)ds \f$
|
|
46
|
+
*
|
|
47
|
+
* @param x1 (in)积分下限
|
|
48
|
+
* @param x2 (in)积分上限
|
|
49
|
+
* @param a (in)a值
|
|
50
|
+
* @param b (in)b值
|
|
51
|
+
* @param c (in)c值
|
|
52
|
+
* @return \f$ \frac{1}{3}a(x_2^3-x_1^3) + \frac{1}{2}b(x_2^2-x_1^2) + c(x_2-x_1) \f$
|
|
53
|
+
*
|
|
54
|
+
*/
|
|
55
|
+
MYCOMPLEX quad_integral(MYREAL x1, MYREAL x2, MYCOMPLEX a, MYCOMPLEX b, MYCOMPLEX c);
|