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,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]);
|