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.
Files changed (64) hide show
  1. pygrt/C_extension/Makefile +137 -0
  2. pygrt/C_extension/bin/grt.exe +0 -0
  3. pygrt/C_extension/bin/grt.syn +0 -0
  4. pygrt/C_extension/bin/grt.travt +0 -0
  5. pygrt/C_extension/include/attenuation.h +24 -0
  6. pygrt/C_extension/include/bessel.h +22 -0
  7. pygrt/C_extension/include/colorstr.h +19 -0
  8. pygrt/C_extension/include/const.h +115 -0
  9. pygrt/C_extension/include/dwm.h +44 -0
  10. pygrt/C_extension/include/fim.h +78 -0
  11. pygrt/C_extension/include/grt.h +128 -0
  12. pygrt/C_extension/include/iostats.h +72 -0
  13. pygrt/C_extension/include/layer.h +123 -0
  14. pygrt/C_extension/include/logo.h +57 -0
  15. pygrt/C_extension/include/matrix.h +205 -0
  16. pygrt/C_extension/include/model.h +165 -0
  17. pygrt/C_extension/include/progressbar.h +22 -0
  18. pygrt/C_extension/include/propagate.h +379 -0
  19. pygrt/C_extension/include/prtdbg.h +13 -0
  20. pygrt/C_extension/include/ptam.h +90 -0
  21. pygrt/C_extension/include/quadratic.h +55 -0
  22. pygrt/C_extension/include/sacio.h +382 -0
  23. pygrt/C_extension/include/search.h +69 -0
  24. pygrt/C_extension/include/signals.h +170 -0
  25. pygrt/C_extension/include/source.h +38 -0
  26. pygrt/C_extension/include/travt.h +28 -0
  27. pygrt/C_extension/include/version.h +14 -0
  28. pygrt/C_extension/lib/libgrt.a +0 -0
  29. pygrt/C_extension/lib/libgrt.so +0 -0
  30. pygrt/C_extension/src/attenuation.c +18 -0
  31. pygrt/C_extension/src/bessel.c +18 -0
  32. pygrt/C_extension/src/dwm.c +135 -0
  33. pygrt/C_extension/src/fim.c +254 -0
  34. pygrt/C_extension/src/grt.c +484 -0
  35. pygrt/C_extension/src/grt_main.c +1215 -0
  36. pygrt/C_extension/src/grt_syn.c +716 -0
  37. pygrt/C_extension/src/grt_travt.c +227 -0
  38. pygrt/C_extension/src/iostats.c +94 -0
  39. pygrt/C_extension/src/layer.c +254 -0
  40. pygrt/C_extension/src/model.c +377 -0
  41. pygrt/C_extension/src/progressbar.c +30 -0
  42. pygrt/C_extension/src/propagate.c +773 -0
  43. pygrt/C_extension/src/ptam.c +347 -0
  44. pygrt/C_extension/src/quadratic.c +59 -0
  45. pygrt/C_extension/src/sacio.c +712 -0
  46. pygrt/C_extension/src/search.c +66 -0
  47. pygrt/C_extension/src/signals.c +350 -0
  48. pygrt/C_extension/src/source.c +88 -0
  49. pygrt/C_extension/src/travt.c +356 -0
  50. pygrt/C_extension/version +1 -0
  51. pygrt/__init__.py +19 -0
  52. pygrt/_version.py +1 -0
  53. pygrt/c_interfaces.py +68 -0
  54. pygrt/c_structures.py +86 -0
  55. pygrt/print.py +17 -0
  56. pygrt/pygrn.py +188 -0
  57. pygrt/pymod.py +442 -0
  58. pygrt/signals.py +196 -0
  59. pygrt/utils.py +685 -0
  60. pygrt_kit-0.2.0.dist-info/LICENSE +674 -0
  61. pygrt_kit-0.2.0.dist-info/METADATA +154 -0
  62. pygrt_kit-0.2.0.dist-info/RECORD +64 -0
  63. pygrt_kit-0.2.0.dist-info/WHEEL +5 -0
  64. pygrt_kit-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,137 @@
1
+
2
+ SRC_DIR := src
3
+ INC_DIR := include
4
+ BUILD_DIR := build
5
+ BIN_DIR := bin
6
+ LIB_DIR := lib
7
+ LNAME := grt
8
+ LIBS_NAME := lib$(LNAME).a
9
+ LIBD_NAME := lib$(LNAME).so
10
+
11
+ VERSION := v$(shell cat version )
12
+ CURRENT_DIR := $(shell pwd)
13
+
14
+ # use static library, make life easier...
15
+ # RPATH_FLAGS := -L$(LIB_DIR) -l:$(LIBS_NAME) # ':libXYZ.a' not worked on MacOS
16
+ RPATH_FLAGS := $(LIB_DIR)/$(LIBS_NAME)
17
+
18
+ # link options for FFTW
19
+ # NEED EXPLICITY SET LIBRARY PATH on MacOS
20
+ LFFT_FLAGS := -l:libfftw3.a -l:libfftw3f.a
21
+
22
+ CC := gcc
23
+
24
+
25
+ # add -static to enforce gcc link the static library, no matter standard-lib or custom-lib,
26
+ # -l like "-l:libXYZ.a" should be saved for conditional compile.
27
+ FOMPFLAGS := -fopenmp
28
+
29
+ # link static library on Windows
30
+ LINK_STATIC :=
31
+ LDFLAGS := $(FOMPFLAGS)
32
+
33
+ # expand stack memory for Windows
34
+ STACK_MEM :=
35
+
36
+ ifeq ($(OS),Windows_NT) # link static oenpmp on windows
37
+ STACK_MEM := -Wl,-stack,0x1000000
38
+ LINK_STATIC := -static
39
+ LDFLAGS := $(LINK_STATIC) $(FOMPFLAGS)
40
+ endif
41
+
42
+ # change architecture for macOS, from make command
43
+ ARCH =
44
+
45
+ # However, Maybe -static is not working for standard-lib on MacOS,
46
+ # at least for now, it's not a big problem.
47
+ CFLAGS := $(LINK_STATIC) $(LFFT_FLAGS) -lm -O3 -g \
48
+ -fPIC -Wall -Wextra $(STACK_MEM) -I$(INC_DIR) \
49
+ -DGRT_VERSION="\"$(VERSION)\"" $(ARCH) $(FOMPFLAGS)
50
+ # -fdump-tree-all -g -ffast-math -O3 -fno-associative-math -march=native -mtune=native
51
+
52
+
53
+ INCS := $(wildcard $(INC_DIR)/*.h)
54
+ SRCS := $(wildcard $(SRC_DIR)/*.c)
55
+ SRCS_NOMAIN := $(SRCS)
56
+
57
+ # remove main functions
58
+ SRCS_NOMAIN := $(filter-out $(SRC_DIR)/grt_main.c, $(SRCS_NOMAIN))
59
+ SRCS_NOMAIN := $(filter-out $(SRC_DIR)/grt_syn.c, $(SRCS_NOMAIN))
60
+ SRCS_NOMAIN := $(filter-out $(SRC_DIR)/grt_travt.c, $(SRCS_NOMAIN))
61
+ OBJS_NOMAIN := $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRCS_NOMAIN))
62
+ OBJS := $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRCS))
63
+
64
+
65
+ .PHONY: all clean cleanbuild
66
+
67
+ # library and several programs
68
+ TARGET = libgrt \
69
+ grt \
70
+ grt.syn \
71
+ grt.travt
72
+
73
+ all: $(TARGET)
74
+
75
+
76
+ libgrt: $(LIB_DIR)/$(LIBS_NAME) $(LIB_DIR)/$(LIBD_NAME)
77
+ grt: $(BIN_DIR)/grt
78
+ grt.syn: $(BIN_DIR)/grt.syn
79
+ grt.travt: $(BIN_DIR)/grt.travt
80
+
81
+
82
+ # generate executable files
83
+ $(BIN_DIR)/grt: $(BUILD_DIR)/grt_main.o libgrt
84
+ @echo $(shell ls $(LIB_DIR)/*)
85
+ @mkdir -p $(BIN_DIR)
86
+ $(CC) -o $@ $< $(RPATH_FLAGS) $(CFLAGS)
87
+
88
+ $(BIN_DIR)/grt.syn: $(BUILD_DIR)/grt_syn.o libgrt
89
+ @echo $(shell ls $(LIB_DIR)/*)
90
+ @mkdir -p $(BIN_DIR)
91
+ $(CC) -o $@ $< $(RPATH_FLAGS) $(CFLAGS)
92
+
93
+ $(BIN_DIR)/grt.travt: $(BUILD_DIR)/grt_travt.o libgrt
94
+ @echo $(shell ls $(LIB_DIR)/*)
95
+ @mkdir -p $(BIN_DIR)
96
+ $(CC) -o $@ $< $(RPATH_FLAGS) $(CFLAGS)
97
+
98
+
99
+ # build dynamic library
100
+ # The order in the compiled statement is critical, otherwise the library will not be linked
101
+ $(LIB_DIR)/$(LIBD_NAME): $(OBJS_NOMAIN)
102
+ @mkdir -p $(BUILD_DIR)
103
+ @mkdir -p $(LIB_DIR)
104
+ $(CC) -shared -o $@ $^ $(LDFLAGS)
105
+
106
+ # build static library
107
+ $(LIB_DIR)/$(LIBS_NAME): $(OBJS_NOMAIN)
108
+ @mkdir -p $(BUILD_DIR)
109
+ @mkdir -p $(LIB_DIR)
110
+ ar rcs $@ $^
111
+
112
+
113
+ # Compile object file
114
+ $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
115
+ @mkdir -p $(BUILD_DIR)
116
+ $(CC) -o $@ -c $< $(CFLAGS)
117
+
118
+
119
+ # Automatically generate dependencies
120
+ DEPENDS := $(OBJS:.o=.d)
121
+ -include $(DEPENDS)
122
+
123
+ $(BUILD_DIR)/%.d: $(SRC_DIR)/%.c
124
+ @mkdir -p $(BUILD_DIR)
125
+ @$(CC) $(CFLAGS) -MM $< > $@.$$$$; \
126
+ sed 's,\($*\)\.o[ :]*,$(BUILD_DIR)/\1.o $@ : ,g' < $@.$$$$ > $@; \
127
+ rm -f $@.$$$$
128
+
129
+ # remove all generated files
130
+ clean:
131
+ rm -rf $(BIN_DIR)
132
+ rm -rf $(BUILD_DIR)
133
+ rm -rf $(LIB_DIR)
134
+
135
+ # remove object files
136
+ cleanbuild:
137
+ rm -rf $(BUILD_DIR)
Binary file
Binary file
Binary file
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @file attenuation.h
3
+ * @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
4
+ * @date 2024-07-24
5
+ *
6
+ *
7
+ */
8
+
9
+
10
+ #pragma once
11
+
12
+ #include "const.h"
13
+
14
+ /**
15
+ * 品质因子Q 对 波速的影响, Futterman causal Q, 参考Aki&Richards, 2009, Chapter 5.5.1
16
+ * \f[
17
+ * c(\omega) = c(2\pi)\times (1 + \frac{1}{\pi Q} \log(\frac{\omega}{2\pi}) + \frac{i}{2Q})
18
+ * \f]
19
+ *
20
+ * @param Qinv (in) 1/Q
21
+ * @param omega (in)复数频率\f$ \tilde{\omega} =\omega - i\zeta \f$
22
+ * @return atncoef 系数因子,作用在 \f$ k=\omega / c(\omega)\f$的计算
23
+ */
24
+ MYCOMPLEX attenuation_law(MYREAL Qinv, MYCOMPLEX omega);
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @file bessel.h
3
+ * @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
4
+ * @date 2024-07-24
5
+ *
6
+ *
7
+ */
8
+
9
+ #pragma once
10
+
11
+ #include "const.h"
12
+
13
+ /**
14
+ * 计算Bessel函数 \f$ J_m(x), m=0,1,2 \f$
15
+ *
16
+ * @param x 自变量
17
+ * @param bj0 (out) \f$ J_0(x) \f$
18
+ * @param bj1 (out) \f$ J_1(x) \f$
19
+ * @param bj2 (out) \f$ J_2(x) \f$
20
+ *
21
+ */
22
+ void bessel012(MYREAL x, MYREAL *bj0, MYREAL *bj1, MYREAL *bj2);
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @file colorstr.h
3
+ * @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
4
+ * @date 2024-12
5
+ *
6
+ * 定义一些字符串宏,以打印有颜色的字符串
7
+ *
8
+ */
9
+
10
+
11
+ #pragma once
12
+
13
+ #define DEFAULT_RESTORE "\033[0m"
14
+ #define REGULAR_RED "\033[0;31m"
15
+ #define BOLD_RED "\033[1;31m"
16
+ #define REGULAR_GREEN "\033[0;32m"
17
+ #define BOLD_GREEN "\033[1;32m"
18
+ #define REGULAR_BLUE "\033[0;35m"
19
+ #define BOLD_BLUE "\033[1;35m"
@@ -0,0 +1,115 @@
1
+ /**
2
+ * @file const.h
3
+ * @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
4
+ * @date 2024-07-24
5
+ *
6
+ *
7
+ */
8
+
9
+ #pragma once
10
+
11
+ #include <complex.h>
12
+ #include <math.h>
13
+ // #include <tgmath.h>
14
+
15
+ // CMPLX macro not exist on MacOS
16
+ #ifndef CMPLX
17
+ #define CMPLX(real, imag) ((double)(real) + (double)(imag) * I) ///< 复数扩展宏,添加此指令以适配MacOS
18
+ #endif
19
+
20
+
21
+ #if defined(_WIN32) || defined(__WIN32__)
22
+ #define _TEST_WHETHER_WIN32_ 1
23
+ #else
24
+ #define _TEST_WHETHER_WIN32_ 0 ///< 测试是否是windows系统
25
+ #endif
26
+
27
+ #if _TEST_WHETHER_WIN32_
28
+ #include <direct.h> /* _mkdir */
29
+ #define mkdir(x, y) _mkdir(x) ///< 为windows系统修改mkdir函数
30
+ #endif
31
+
32
+
33
+
34
+ // #define GRT_USE_FLOAT ///< 是否使用单精度浮点数
35
+
36
+ typedef int MYINT; ///< 整数
37
+
38
+
39
+ #ifdef GRT_USE_FLOAT
40
+ typedef float _Complex MYCOMPLEX; ///< 复数
41
+ typedef float MYREAL; ///< 浮点数
42
+ // 数学函数
43
+ #define EXP(x) (expf(x)) ///< \f$ \exp(x) \f$
44
+ #define CEXP(x) (cexpf(x)) ///< 复数域 \f$ \exp(x) \f$
45
+ #define CLOG(x) (clogf(x)) ///< 复数域 \f$ \ln(x) \f$
46
+ #define CSQRT(x) (csqrtf(x)) ///< 复数域 \f$ x^{1/2} \f$
47
+ #define SQRT(x) (sqrtf(x)) ///< \f$ \sqrt{x} \f$
48
+ #define SIN(x) (sinf(x)) ///< \f$ \sin(x) \f$
49
+ #define COS(x) (cosf(x)) ///< \f$ \cos(x) \f$
50
+ #define FABS(x) (fabsf(x)) ///< \f$ |x| \f$
51
+ #define CABS(x) (cabsf(x)) ///< 复数域 \f$ |x| \f$
52
+ #define J0(x) (j0f(x)) ///< \f$ J_0(x) \f$
53
+ #define J1(x) (j1f(x)) ///< \f$ J_1(x) \f$
54
+ #define JN(n,x) (jnf((n),(x))) ///< \f$ J_n(x) \f$
55
+
56
+ #define CREAL(x) (crealf(x)) ///< 复数实部 \f$ \Re[x] \f$
57
+ #define CIMAG(x) (cimagf(x)) ///< 复数虚部 \f$ \Im[x] \f$
58
+
59
+ // 常数
60
+ #define RZERO 0.0f ///< 0.0
61
+ #define RQUART 0.25f ///< 0.25
62
+ #define RHALF 0.5f ///< 0.5
63
+ #define RONE 1.0f ///< 1.0
64
+ #define RTWO 2.0f ///< 2.0
65
+ #define RTHREE 3.0f ///< 3.0
66
+ #define RFOUR 4.0f ///< 4.0
67
+ #define PI 3.1415926f ///< \f$ \pi \f$
68
+ #define PI2 6.2831853f ///< \f$ 2\pi \f$
69
+ #define HALFPI 1.5707963f ///< \f$ \frac{\pi}{2} \f$
70
+ #define QUARTERPI 0.78539816f ///< \f$ \frac{\pi}{4} \f$
71
+ #define INV_SQRT_TWO 0.70710678f ///< \f$ \frac{1}{\sqrt{2}} \f$
72
+
73
+ #else
74
+ typedef double _Complex MYCOMPLEX;
75
+ typedef double MYREAL;
76
+ // 数学函数
77
+ #define EXP(x) (exp(x)) ///< \f$ \exp(x) \f$
78
+ #define CEXP(x) (cexp(x)) ///< 复数域 \f$ \exp(x) \f$
79
+ #define CLOG(x) (clog(x)) ///< 复数域 \f$ \ln(x) \f$
80
+ #define CSQRT(x) (csqrt(x)) ///< 复数域 \f$ x^{1/2} \f$
81
+ #define SQRT(x) (sqrt(x)) ///< \f$ \sqrt{x} \f$
82
+ #define SIN(x) (sin(x)) ///< \f$ \sin(x) \f$
83
+ #define COS(x) (cos(x)) ///< \f$ \cos(x) \f$
84
+ #define FABS(x) (fabs(x)) ///< \f$ |x| \f$
85
+ #define CABS(x) (cabs(x)) ///< 复数域 \f$ |x| \f$
86
+ #define J0(x) (j0(x)) ///< \f$ J_0(x) \f$
87
+ #define J1(x) (j1(x)) ///< \f$ J_1(x) \f$
88
+ #define JN(n,x) (jn((n),(x))) ///< \f$ J_n(x) \f$
89
+
90
+ #define CREAL(x) (creal(x)) ///< 复数实部 \f$ \Re[x] \f$
91
+ #define CIMAG(x) (cimag(x)) ///< 复数虚部 \f$ \Im[x] \f$
92
+
93
+ // 常数
94
+ #define RZERO 0.0 ///< 0.0
95
+ #define RQUART 0.25 ///< 0.25
96
+ #define RHALF 0.5 ///< 0.5
97
+ #define RONE 1.0 ///< 1.0
98
+ #define RTWO 2.0 ///< 2.0
99
+ #define RTHREE 3.0 ///< 3.0
100
+ #define RFOUR 4.0 ///< 4.0
101
+ #define PI 3.141592653589793 ///< \f$ \pi \f$
102
+ #define PI2 6.283185307179586 ///< \f$ 2\pi \f$
103
+ #define HALFPI 1.5707963267948966 ///< \f$ \frac{\pi}{2} \f$
104
+ #define QUARTERPI 0.7853981633974483 ///< \f$ \frac{\pi}{4} \f$
105
+ #define INV_SQRT_TWO 0.7071067811865475 ///< \f$ \frac{1}{\sqrt{2}} \f$
106
+
107
+ #endif
108
+
109
+ #define CZERO CMPLX(RZERO, RZERO) ///< 0.0 + j0.0
110
+ #define CONE CMPLX(RONE, RZERO) ///< 1.0 + j0.0
111
+ #define INIT_C_ZERO_2x2_MATRIX {{CZERO, CZERO}, {CZERO, CZERO}} ///< 初始化复数0矩阵
112
+ #define INIT_C_IDENTITY_2x2_MATRIX {{CONE, CZERO}, {CZERO, CONE}} ///< 初始化复数单位阵
113
+
114
+ #define MIN_DEPTH_GAP_SRC_RCV 1.0 ///< 震源和台站的最小深度差(不做绝对限制,仅用于参考波数积分上限)
115
+ #define GCC_ALWAYS_INLINE __attribute__((always_inline)) ///< gcc编译器不改动内联函数
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @file dwm.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
+ #pragma once
15
+
16
+ #include "model.h"
17
+
18
+
19
+ /**
20
+ * 传统的离散波数积分,结果以三维数组的形式返回,形状为[nr][3][4], 分别代表震中距、阶数(m=0,1,2)
21
+ * 和4种积分类型(p=0,1,2,3)
22
+ *
23
+ * @param mod1d (in)`MODEL1D` 结构体指针
24
+ * @param dk (in)波数积分间隔
25
+ * @param kmax (in)波数积分的上限
26
+ * @param keps (in)波数积分的收敛条件,要求在某震中距下所有格林函数都收敛,为负数代表不提前判断收敛,按照波数积分上限进行积分
27
+ * @param omega (in)复数频率
28
+ * @param nr (in)震中距数量
29
+ * @param rs (in)震中距数组
30
+ *
31
+ * @param sum_EXP_J[nr][3][4] (out)爆炸源
32
+ * @param sum_VF_J[nr][3][4] (out)垂直力源
33
+ * @param sum_HF_J[nr][3][4] (out)水平力源
34
+ * @param sum_DC_J[nr][3][4] (out)双力偶源
35
+ * @param fstats[nr]) (out)不同震中距的格林函数积分过程文件
36
+ *
37
+ * @return k 积分截至时的波数
38
+ */
39
+ MYREAL discrete_integ(
40
+ const MODEL1D *mod1d, MYREAL dk, MYREAL kmax, MYREAL keps, MYCOMPLEX omega,
41
+ MYINT nr, MYREAL *rs,
42
+ MYCOMPLEX sum_EXP_J[nr][3][4], MYCOMPLEX sum_VF_J[nr][3][4],
43
+ MYCOMPLEX sum_HF_J[nr][3][4], MYCOMPLEX sum_DC_J[nr][3][4],
44
+ FILE *(fstats[nr]));
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @file fim.h
3
+ * @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
4
+ * @date 2024-07-24
5
+ *
6
+ * 以下代码实现的是基于线性插值的Filon积分,参考:
7
+ *
8
+ * 1. 姚振兴, 谢小碧. 2022/03. 理论地震图及其应用(初稿).
9
+ * 2. 纪晨, 姚振兴. 1995. 区域地震范围的宽频带理论地震图算法研究. 地球物理学报. 38(4)
10
+ *
11
+ */
12
+
13
+ #pragma once
14
+
15
+ #include "const.h"
16
+ #include "model.h"
17
+
18
+
19
+
20
+ /**
21
+ * 基于线性插值的Filon积分(5.9.6-11), 在大震中距下对Bessel函数取零阶近似,得
22
+ * \f[
23
+ * J_m(x) \approx \sqrt{\frac{2}{\pi x}} \cos(x - \frac{m \pi}{2} - \frac{\pi}{4})
24
+ * \f]
25
+ * 其中\f$x=kr\f$. 结果以三维数组的形式返回,形状为[nr][3][4], 分别代表震中距、阶数(m=0,1,2)
26
+ * 和4种积分类型(p=0,1,2,3)
27
+ *
28
+ *
29
+ * @param mod1d (in)`MODEL1D` 结构体指针
30
+ * @param dk (in)波数积分间隔
31
+ * @param kmax (in)波数积分的上限
32
+ * @param keps (in)波数积分的收敛条件,要求在某震中距下所有格林函数都收敛
33
+ * @param omega (in)复数频率
34
+ * @param nr (in)震中距数量
35
+ * @param rs (in)震中距数组
36
+ *
37
+ * @param sum_EXP_J[nr][3][4] (out)爆炸源
38
+ * @param sum_VF_J[nr][3][4] (out)垂直力源
39
+ * @param sum_HF_J[nr][3][4] (out)水平力源
40
+ * @param sum_DC_J[nr][3][4] (out)双力偶源
41
+ * @param fstats[nr] (out)不同震中距的格林函数积分过程文件
42
+ *
43
+ * @return k 积分截至时的波数
44
+ */
45
+ MYREAL linear_filon_integ(
46
+ const MODEL1D *mod1d, MYREAL dk, MYREAL kmax, MYREAL keps, MYCOMPLEX omega,
47
+ MYINT nr, MYREAL *rs,
48
+ MYCOMPLEX sum_EXP_J[nr][3][4], MYCOMPLEX sum_VF_J[nr][3][4],
49
+ MYCOMPLEX sum_HF_J[nr][3][4], MYCOMPLEX sum_DC_J[nr][3][4],
50
+ FILE *(fstats[nr]));
51
+
52
+
53
+
54
+ /**
55
+ * 和int_Pk函数类似,不过是计算核函数和渐近Bessel函数的乘积,其中涉及两种数组形状:
56
+ * + [3][3]. 存储的是核函数,第一个维度3代表阶数m=0,1,2,第二个维度3代表三类系数qm,wm,vm
57
+ * + [3][4]. 存储的是该dk区间内的积分值,维度3代表阶数m=0,1,2,维度4代表4种类型的F(k,w)Jm(kr)k的类型
58
+ *
59
+ *
60
+ * @param k (in)波数
61
+ * @param r (in)震中距
62
+ * @param EXP_qwv[3][3] (in)爆炸源核函数
63
+ * @param VF_qwv[3][3] (in)垂直力源核函数
64
+ * @param HF_qwv[3][3] (in)水平力源核函数
65
+ * @param DC_qwv[3][3] (in)双力偶源核函数
66
+ * @param EXP_J[3][4] (out)爆炸源,该dk区间内的积分值,下同
67
+ * @param VF_J[3][4] (out)垂直力源
68
+ * @param HF_J[3][4] (out)水平力源
69
+ * @param DC_J[3][4] (out)双力偶源
70
+ *
71
+ */
72
+ void int_Pk_filon(
73
+ MYREAL k, MYREAL r,
74
+ const MYCOMPLEX EXP_qwv[3][3], const MYCOMPLEX VF_qwv[3][3],
75
+ const MYCOMPLEX HF_qwv[3][3], const MYCOMPLEX DC_qwv[3][3],
76
+ MYCOMPLEX EXP_J[3][4], MYCOMPLEX VF_J[3][4],
77
+ MYCOMPLEX HF_J[3][4], MYCOMPLEX DC_J[3][4] );
78
+
@@ -0,0 +1,128 @@
1
+ /**
2
+ * @file grt.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 "model.h"
18
+
19
+ /**
20
+ * 设置OpenMP多线程数
21
+ *
22
+ * @param num_threads (in)线程数
23
+ */
24
+ void set_num_threads(int num_threads);
25
+
26
+
27
+ /**
28
+ * 积分计算Z, R, T三个分量格林函数的频谱的核心函数(被C函数调用)
29
+ *
30
+ * @param pymod1d (in)`PYMODEL1D` 结构体指针
31
+ * @param nf1 (in)开始计算频谱的频率索引值, 总范围在[nf1, nf2]
32
+ * @param nf2 (in)结束计算频谱的频率索引值, 总范围在[nf1, nf2]
33
+ * @param nf (in)所有频点个数
34
+ * @param freqs (in)所有频点的频率值(包括未计算的)
35
+ * @param nr (in)震中距数量
36
+ * @param rs (in)震中距数组
37
+ * @param wI (in)虚频率, \f$ \tilde{\omega} =\omega - i\wI \f$
38
+ * @param vmin_ref (in)参考最小速度,用于定义波数积分的上限
39
+ * @param keps (in)波数积分的收敛条件,要求在某震中距下所有格林函数都收敛,为负数代表不提前判断收敛,按照波数积分上限进行积分
40
+ * @param ampk (in)影响波数k积分上限的系数,见下方
41
+ * @param iwk0 (in)k0是否取随频率变化的线性关系,即 \f$ k_{max} = k_{max} * f/f_{max} \f$
42
+ * @param k0 (in)波数积分的上限 \f$ \tilde{k_{max}}=\sqrt{(k_{0}*\pi/hs)^2 + (ampk*w/vmin_{ref})^2} \f$ ,k循环必须退出, hs=max(震源和台站深度差,1.0)
43
+ * @param Length (in)波数k积分间隔 \f$ dk=2\pi/(fabs(L)*r_{max}) \f$ , 如果为负数,则使用线性Filon积分
44
+ * @param print_progressbar (in)是否打印进度条
45
+ * @param EXPgrn[nr][2] (out)复数数组,爆炸源的Z、R分量频谱结果
46
+ * @param VFgrn[nr][2] (out)复数数组,垂直力源的Z、R分量频谱结果
47
+ * @param HFgrn[nr][3] (out)复数数组,水平力源的Z、R、T分量频谱结果
48
+ * @param DDgrn[nr][2] (out)复数数组,45度倾滑的Z、R分量频谱结果
49
+ * @param DSgrn[nr][3] (out)复数数组,90度倾滑的Z、R、T分量频谱结果
50
+ * @param SSgrn[nr][3] (out)复数数组,90度走滑的Z、R、T分量频谱结果
51
+ *
52
+ * @param statsstr (in) 积分结果输出目录
53
+ * @param nstatsidxs (in) 输出积分结果的特定频点的个数
54
+ * @param statsidxs (in) 特定频点的索引值
55
+ *
56
+ */
57
+ void integ_grn_spec_in_C(
58
+ PYMODEL1D *pymod1d, MYINT nf1, MYINT nf2, MYINT nf, MYREAL *freqs,
59
+ MYINT nr, MYREAL *rs, MYREAL wI,
60
+ MYREAL vmin_ref, MYREAL keps, MYREAL ampk, bool iwk0, MYREAL k0, MYREAL Length,
61
+ bool print_progressbar,
62
+
63
+ // 返回值,维度2代表Z、R分量,维度3代表Z、R、T分量
64
+ MYCOMPLEX *EXPcplx[nr][2], // EXZ, EXR 的实部和虚部
65
+ MYCOMPLEX *VFcplx[nr][2], // VFZ, VFR 的实部和虚部
66
+ MYCOMPLEX *HFcplx[nr][3], // HFZ, HFR, HFT 的实部和虚部
67
+ MYCOMPLEX *DDcplx[nr][2], // DDZ, DDR 的实部和虚部 [DD: 45-dip slip]
68
+ MYCOMPLEX *DScplx[nr][3], // DSZ, DSR, DST 的实部和虚部 [DS: 90-dip slip]
69
+ MYCOMPLEX *SScplx[nr][3], // SSZ, SSR, SST 的实部和虚部 [SS: strike slip]
70
+
71
+ const char *statsstr, // 积分结果输出
72
+ MYINT nstatsidxs, // 仅输出特定频点
73
+ MYINT *statsidxs
74
+ );
75
+
76
+
77
+ /**
78
+ * 积分计算Z, R, T三个分量格林函数的频谱的核心函数(被Python调用)
79
+ *
80
+ * @param pymod1d (in)`PYMODEL1D` 结构体指针
81
+ * @param nf1 (in)开始计算频谱的频率索引值, 总范围在[nf1, nf2]
82
+ * @param nf2 (in)结束计算频谱的频率索引值, 总范围在[nf1, nf2]
83
+ * @param nf (in)所有频点个数
84
+ * @param freqs (in)所有频点的频率值(包括未计算的)
85
+ * @param nr (in)震中距数量
86
+ * @param rs (in)震中距数组
87
+ * @param wI (in)虚频率, \f$ \tilde{\omega} =\omega - i\wI \f$
88
+ * @param vmin_ref (in)参考最小速度,用于定义波数积分的上限
89
+ * @param keps (in)波数积分的收敛条件,要求在某震中距下所有格林函数都收敛,为负数代表不提前判断收敛,按照波数积分上限进行积分
90
+ * @param ampk (in)影响波数k积分上限的系数,见下方
91
+ * @param iwk0 (in)k0是否取随频率变化的线性关系,即 \f$ k_{max} = k_{max} * f/f_{max} \f$
92
+ * @param k0 (in)波数积分的上限 \f$ \tilde{k_{max}}=\sqrt{(k_{0}*\pi/hs)^2 + (ampk*w/vmin_{ref})^2} \f$ ,k循环必须退出, hs=max(震源和台站深度差,1.0)
93
+ * @param Length (in)波数k积分间隔 \f$ dk=2\pi/(fabs(L)*r_{max}) \f$ , 如果为负数,则使用线性Filon积分
94
+ * @param print_progressbar (in)是否打印进度条
95
+ * @param EXPgrn[nr][2] (out)`GRN` 结构体指针,爆炸源的Z、R分量频谱结果
96
+ * @param VFgrn[nr][2] (out)`GRN` 结构体指针,垂直力源的Z、R分量频谱结果
97
+ * @param HFgrn[nr][3] (out)`GRN` 结构体指针,水平力源的Z、R、T分量频谱结果
98
+ * @param DDgrn[nr][2] (out)`GRN` 结构体指针,45度倾滑的Z、R分量频谱结果
99
+ * @param DSgrn[nr][3] (out)`GRN` 结构体指针,90度倾滑的Z、R、T分量频谱结果
100
+ * @param SSgrn[nr][3] (out)`GRN` 结构体指针,90度走滑的Z、R、T分量频谱结果
101
+ *
102
+ * @param statsstr (in) 积分结果输出目录
103
+ * @param nstatsidxs (in) 输出积分结果的特定频点的个数
104
+ * @param statsidxs (in) 特定频点的索引值
105
+ *
106
+ */
107
+ void integ_grn_spec(
108
+ PYMODEL1D *pymod1d, MYINT nf1, MYINT nf2, MYINT nf, MYREAL *freqs,
109
+ MYINT nr, MYREAL *rs, MYREAL wI,
110
+ MYREAL vmin_ref, MYREAL keps, MYREAL ampk, bool iwk0, MYREAL k0, MYREAL Length,
111
+ bool print_progressbar,
112
+
113
+ // 返回值,维度2代表Z、R分量,维度3代表Z、R、T分量
114
+ GRN *EXPgrn[nr][2], // EXZ, EXR 的实部和虚部
115
+ GRN *VFgrn[nr][2], // VFZ, VFR 的实部和虚部
116
+ GRN *HFgrn[nr][3], // HFZ, HFR, HFT 的实部和虚部
117
+ GRN *DDgrn[nr][2], // DDZ, DDR 的实部和虚部 [DD: 45-dip slip]
118
+ GRN *DSgrn[nr][3], // DSZ, DSR, DST 的实部和虚部 [DS: 90-dip slip]
119
+ GRN *SSgrn[nr][3], // SSZ, SSR, SST 的实部和虚部 [SS: strike slip]
120
+
121
+ const char *statsstr, // 积分结果输出
122
+ MYINT nstatsidxs, // 仅输出特定频点
123
+ MYINT *statsidxs
124
+ );
125
+
126
+
127
+
128
+
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @file iostats.h
3
+ * @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
4
+ * @date 2024-07-24
5
+ *
6
+ * 对积分过程中的核函数和积分值进行记录
7
+ */
8
+
9
+ #pragma once
10
+
11
+ #include <stdbool.h>
12
+ #include <stdio.h>
13
+
14
+ #include "const.h"
15
+
16
+
17
+
18
+ /**
19
+ * 对离散波数法以及Filon积分的中间结果进行记录,其中涉及两种数组形状:
20
+ * + [3][3]. 存储的是核函数,第一个维度3代表阶数m=0,1,2,第二个维度3代表三类系数qm,wm,vm
21
+ * + [3][4]. 存储的是该dk区间内的积分值,维度3代表阶数m=0,1,2,维度4代表4种类型的F(k,w)Jm(kr)k的类型
22
+ *
23
+ * @param f0 (out)二进制文件指针
24
+ * @param k (in)波数
25
+ * @param EXP_qwv[3][3] (in)爆炸源核函数
26
+ * @param VF_qwv[3][3] (in)垂直力源核函数
27
+ * @param HF_qwv[3][3] (in)水平力源核函数
28
+ * @param DC_qwv[3][3] (in)双力偶源核函数
29
+ * @param EXP_J[3][4] (in)爆炸源,该dk区间内的积分值,下同
30
+ * @param VF_J[3][4] (in)垂直力源
31
+ * @param HF_J[3][4] (in)水平力源
32
+ * @param DC_J[3][4] (in)双力偶源
33
+ *
34
+ *
35
+ * @note 文件记录的值均为波数积分的中间结果,与最终的结果还差一系列的系数,
36
+ * 记录其值主要用于参考其变化趋势。
37
+ */
38
+ void write_stats(
39
+ FILE *f0, MYREAL k,
40
+ const MYCOMPLEX EXP_qwv[3][3], const MYCOMPLEX VF_qwv[3][3],
41
+ const MYCOMPLEX HF_qwv[3][3], const MYCOMPLEX DC_qwv[3][3],
42
+ const MYCOMPLEX EXP_J[3][4], const MYCOMPLEX VF_J[3][4],
43
+ const MYCOMPLEX HF_J[3][4], const MYCOMPLEX DC_J[3][4]);
44
+
45
+
46
+
47
+ /**
48
+ * 对峰谷平均法的中间结果进行记录,其中[3][4]的数组形状代表存储的
49
+ * 是最终的积分值,维度3代表阶数m=0,1,2,维度4代表4种类型的F(k,w)Jm(kr)k的类型
50
+ *
51
+ * @param f0 (out)二进制文件指针
52
+ * @param k (in)波数
53
+ * @param maxNpt (in)波峰+波谷的数量(本质是计算中提前预设的量,见ptam.c文件中PTA_method函数)
54
+ * @param EXPpt[3][4][maxNpt] (in)爆炸源,最终收敛积分值使用的波峰波谷值,下同
55
+ * @param VFpt[3][4][maxNpt] (in)垂直力源
56
+ * @param HFpt[3][4][maxNpt] (in)水平力源
57
+ * @param DCpt[3][4][maxNpt] (in)双力偶源
58
+ * @param kEXPpt[3][4][maxNpt] (in)爆炸源,最终收敛积分值使用的波峰波谷值对应的波数k值,下同
59
+ * @param kVFpt[3][4][maxNpt] (in)垂直力源
60
+ * @param kHFpt[3][4][maxNpt] (in)水平力源
61
+ * @param kDCpt[3][4][maxNpt] (in)双力偶源
62
+ *
63
+ * @note 文件记录的积分值与最终的结果还差一系列的系数,
64
+ * 记录其值主要用于参考其变化趋势。
65
+ *
66
+ */
67
+ void write_stats_ptam(
68
+ FILE *f0, MYREAL k, MYINT maxNpt,
69
+ const MYCOMPLEX EXPpt[3][4][maxNpt], const MYCOMPLEX VFpt[3][4][maxNpt],
70
+ const MYCOMPLEX HFpt[3][4][maxNpt], const MYCOMPLEX DCpt[3][4][maxNpt],
71
+ const MYREAL kEXPpt[3][4][maxNpt], const MYREAL kVFpt[3][4][maxNpt],
72
+ const MYREAL kHFpt[3][4][maxNpt], const MYREAL kDCpt[3][4][maxNpt]);