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,382 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
Name: sacio.h
|
|
3
|
+
|
|
4
|
+
Purpose: structure for header of a SAC (Seismic Analysis Code)
|
|
5
|
+
data file, and prototype for basic SAC I/O
|
|
6
|
+
|
|
7
|
+
Notes:
|
|
8
|
+
Key to comment flags describing each field:
|
|
9
|
+
Column 1:
|
|
10
|
+
R required by SAC
|
|
11
|
+
(blank) optional
|
|
12
|
+
Column 2:
|
|
13
|
+
A = settable from a priori knowledge
|
|
14
|
+
D = available in data
|
|
15
|
+
F = available in or derivable from SEED fixed data header
|
|
16
|
+
T = available in SEED header tables
|
|
17
|
+
(blank) = not directly available from SEED data, header
|
|
18
|
+
tables, or elsewhere
|
|
19
|
+
|
|
20
|
+
Problems: none known
|
|
21
|
+
|
|
22
|
+
References:
|
|
23
|
+
* O'Neill, D. (1987). IRIS Interim Data Distribution Format
|
|
24
|
+
(SAC ASCII), Version 1.0 (12 November 1987). Incorporated
|
|
25
|
+
Research Institutions for Seismology, 1616 North Fort Myer
|
|
26
|
+
Drive, Suite 1440, Arlington, Virginia 22209. 11 pp.
|
|
27
|
+
* Tull, J. (1987). SAC User's Manual, Version 10.2, October 7,
|
|
28
|
+
1987. Lawrence Livermore National Laboratory, L-205,
|
|
29
|
+
Livermore, California 94550. ??? pp.
|
|
30
|
+
|
|
31
|
+
Language: C, hopefully ANSI standard
|
|
32
|
+
|
|
33
|
+
Author: Dennis O'Neill
|
|
34
|
+
|
|
35
|
+
Revisions:
|
|
36
|
+
07/15/88 Dennis O'Neill Initial preliminary release 0.9
|
|
37
|
+
11/21/88 Dennis O'Neill Production release 1.0
|
|
38
|
+
01/27/91 Lorraine Hwang Header number is now version 6
|
|
39
|
+
07/06/93 Xiaoming Ding structure name sac -> sac_head
|
|
40
|
+
typedef structure to be SACHEAD
|
|
41
|
+
12/06/96 Lupei Zhu prototype sacio functions
|
|
42
|
+
05/04/13 Dongdong Tian modify headers according to SAC v101.5
|
|
43
|
+
*******************************************************************************/
|
|
44
|
+
|
|
45
|
+
#ifndef SACIO_H
|
|
46
|
+
#define SACIO_H
|
|
47
|
+
|
|
48
|
+
/*******************************************************************************
|
|
49
|
+
SAC header structure
|
|
50
|
+
|
|
51
|
+
The SAC package is originally implemented in FORTRAN language, and the SAC
|
|
52
|
+
file format follows the conventions of FORTRAN language. Each character
|
|
53
|
+
string has a length of 8 bytes (16 bytes for kevnm).
|
|
54
|
+
|
|
55
|
+
While reimplementing SAC in C, an extra byte is needed since C use '\0' to
|
|
56
|
+
mark the termination of a string to avoid wiping out the contents of the
|
|
57
|
+
last character.
|
|
58
|
+
|
|
59
|
+
The header structure are needed, one for structure in memory and one for
|
|
60
|
+
reading/writing header structure from/to disk.
|
|
61
|
+
|
|
62
|
+
While reading a file, first read in the numeric part to the header
|
|
63
|
+
structure, then read the string part to a temporary buffer, then map
|
|
64
|
+
strings from buffer to header structure.
|
|
65
|
+
|
|
66
|
+
While writing a file, first write the numeric part from header structure
|
|
67
|
+
to disk, then map the strings from header structure to temporary buffer,
|
|
68
|
+
then write the buffer to disk.
|
|
69
|
+
|
|
70
|
+
*******************************************************************************/
|
|
71
|
+
|
|
72
|
+
typedef struct sac_head {
|
|
73
|
+
float delta; /* RF increment between evenly spaced samples */
|
|
74
|
+
float depmin; /* minimum value of dependent variable */
|
|
75
|
+
float depmax; /* maximum value of dependent variable */
|
|
76
|
+
float scale; /* amplitude scale factor (not used) */
|
|
77
|
+
float odelta; /* Observed increment */
|
|
78
|
+
float b; /* RD begining value of the independent variable */
|
|
79
|
+
float e; /* RD ending value of the independent variable */
|
|
80
|
+
float o; /* event origin time(seconds wrt referece time)*/
|
|
81
|
+
float a; /* 1st arrival time (seconds wrt referece time)*/
|
|
82
|
+
float internal1; /* internal use */
|
|
83
|
+
float t0; /* user-defined time pick */
|
|
84
|
+
float t1; /* user-defined time pick */
|
|
85
|
+
float t2; /* user-defined time pick */
|
|
86
|
+
float t3; /* user-defined time pick */
|
|
87
|
+
float t4; /* user-defined time pick */
|
|
88
|
+
float t5; /* user-defined time pick */
|
|
89
|
+
float t6; /* user-defined time pick */
|
|
90
|
+
float t7; /* user-defined time pick */
|
|
91
|
+
float t8; /* user-defined time pick */
|
|
92
|
+
float t9; /* user-defined time pick */
|
|
93
|
+
float f; /* end time of event, sec > 0 */
|
|
94
|
+
float resp0; /* instrument respnse parameter (not used) */
|
|
95
|
+
float resp1; /* instrument respnse parameter (not used) */
|
|
96
|
+
float resp2; /* instrument respnse parameter (not used) */
|
|
97
|
+
float resp3; /* instrument respnse parameter (not used) */
|
|
98
|
+
float resp4; /* instrument respnse parameter (not used) */
|
|
99
|
+
float resp5; /* instrument respnse parameter (not used) */
|
|
100
|
+
float resp6; /* instrument respnse parameter (not used) */
|
|
101
|
+
float resp7; /* instrument respnse parameter (not used) */
|
|
102
|
+
float resp8; /* instrument respnse parameter (not used) */
|
|
103
|
+
float resp9; /* instrument respnse parameter (not used) */
|
|
104
|
+
float stla; /* T station latititude (degree, north positive) */
|
|
105
|
+
float stlo; /* T station longitude (degree, east positive) */
|
|
106
|
+
float stel; /* T station elevation (meters, not used) */
|
|
107
|
+
float stdp; /* T station depth (meters, not used) */
|
|
108
|
+
float evla; /* event latitude (degree, north positive) */
|
|
109
|
+
float evlo; /* event longitude (degree, east positive) */
|
|
110
|
+
float evel; /* event elevation (meters, not used) */
|
|
111
|
+
float evdp; /* event depth (kilometer, previously meters) */
|
|
112
|
+
float mag; /* event magnitude */
|
|
113
|
+
float user0; /* User defined variable storage area */
|
|
114
|
+
float user1; /* User defined variable storage area */
|
|
115
|
+
float user2; /* User defined variable storage area */
|
|
116
|
+
float user3; /* User defined variable storage area */
|
|
117
|
+
float user4; /* User defined variable storage area */
|
|
118
|
+
float user5; /* User defined variable storage area */
|
|
119
|
+
float user6; /* User defined variable storage area */
|
|
120
|
+
float user7; /* User defined variable storage area */
|
|
121
|
+
float user8; /* User defined variable storage area */
|
|
122
|
+
float user9; /* User defined variable storage area */
|
|
123
|
+
float dist; /* station-event distance (km) */
|
|
124
|
+
float az; /* event-station azimuth */
|
|
125
|
+
float baz; /* station-event azimuth */
|
|
126
|
+
float gcarc; /* station-event great arc length (degrees) */
|
|
127
|
+
float internal2; /* internal use */
|
|
128
|
+
float internal3; /* internal use */
|
|
129
|
+
float depmen; /* mean value of dependent variable */
|
|
130
|
+
float cmpaz; /* T component azimuth (degree CW from north) */
|
|
131
|
+
float cmpinc; /* T component inclination (degree from vertical)*/
|
|
132
|
+
float xminimum; /* minimum value of X (spectral files only) */
|
|
133
|
+
float xmaximum; /* maximum value of X (spectral files only) */
|
|
134
|
+
float yminimum; /* minimum value of Y (spectral files only) */
|
|
135
|
+
float ymaximun; /* maximum value of Y (spectral files only) */
|
|
136
|
+
float unused1; /* reserved for future use */
|
|
137
|
+
float unused2; /* reserved for future use */
|
|
138
|
+
float unused3; /* reserved for future use */
|
|
139
|
+
float unused4; /* reserved for future use */
|
|
140
|
+
float unused5; /* reserved for future use */
|
|
141
|
+
float unused6; /* reserved for future use */
|
|
142
|
+
float unused7; /* reserved for future use */
|
|
143
|
+
int nzyear; /* F GMT year corresponding to zero time of file */
|
|
144
|
+
int nzjday; /* F GMT julia day */
|
|
145
|
+
int nzhour; /* F GMT hour */
|
|
146
|
+
int nzmin; /* F GMT minite */
|
|
147
|
+
int nzsec; /* F GMT second */
|
|
148
|
+
int nzmsec; /* F GMT millisecond */
|
|
149
|
+
int nvhdr; /* R header version number (6) */
|
|
150
|
+
int norid; /* origin ID (CSS 3.0) */
|
|
151
|
+
int nevid; /* event ID (CSS 3.0) */
|
|
152
|
+
int npts; /* RF number of points per data component */
|
|
153
|
+
int internal4; /* internal use */
|
|
154
|
+
int nwfid; /* waveform ID (CSS 3.0) */
|
|
155
|
+
int nxsize; /* spectral length (spectral files only) */
|
|
156
|
+
int nysize; /* spectral width (spectral files only) */
|
|
157
|
+
int unused8; /* reserved for future use */
|
|
158
|
+
int iftype; /* RA type of file */
|
|
159
|
+
int idep; /* type of dependent variable */
|
|
160
|
+
int iztype; /* reference time equivalence */
|
|
161
|
+
int unused9; /* reserved for future use */
|
|
162
|
+
int iinst; /* type of recording instrument (not used) */
|
|
163
|
+
int istreg; /* station geographic region (not used) */
|
|
164
|
+
int ievreg; /* event geographic region (not used) */
|
|
165
|
+
int ievtyp; /* type of event */
|
|
166
|
+
int iqual; /* quality of data (not used) */
|
|
167
|
+
int isynth; /* synthetic data flag (not used) */
|
|
168
|
+
int imagtyp; /* magnitude type */
|
|
169
|
+
int imagsrc; /* source of magnitude information */
|
|
170
|
+
int unused10; /* reserved for future use */
|
|
171
|
+
int unused11; /* reserved for future use */
|
|
172
|
+
int unused12; /* reserved for future use */
|
|
173
|
+
int unused13; /* reserved for future use */
|
|
174
|
+
int unused14; /* reserved for future use */
|
|
175
|
+
int unused15; /* reserved for future use */
|
|
176
|
+
int unused16; /* reserved for future use */
|
|
177
|
+
int unused17; /* reserved for future use */
|
|
178
|
+
int leven; /* RA TRUE if data is evenly spaced */
|
|
179
|
+
int lpspol; /* station polarity flag (left hand rule) */
|
|
180
|
+
int lovrok; /* overwrite permission */
|
|
181
|
+
int lcalda; /* true if to calculate distance, azimuth */
|
|
182
|
+
int unused18; /* reserved for future use */
|
|
183
|
+
char kstnm[9]; /* F station name */
|
|
184
|
+
char kevnm[18]; /* event name */
|
|
185
|
+
char khole[9]; /* nuclear: hole id; Other: location id; */
|
|
186
|
+
char ko[9]; /* event origin time id */
|
|
187
|
+
char ka[9]; /* 1st arrival time id */
|
|
188
|
+
char kt0[9]; /* time pick 0 id */
|
|
189
|
+
char kt1[9]; /* time pick 1 id */
|
|
190
|
+
char kt2[9]; /* time pick 2 id */
|
|
191
|
+
char kt3[9]; /* time pick 3 id */
|
|
192
|
+
char kt4[9]; /* time pick 4 id */
|
|
193
|
+
char kt5[9]; /* time pick 5 id */
|
|
194
|
+
char kt6[9]; /* time pick 6 id */
|
|
195
|
+
char kt7[9]; /* time pick 7 id */
|
|
196
|
+
char kt8[9]; /* time pick 8 id */
|
|
197
|
+
char kt9[9]; /* time pick 9 id */
|
|
198
|
+
char kf[9]; /* end of event id */
|
|
199
|
+
char kuser0[9]; /* User defined variable storage area */
|
|
200
|
+
char kuser1[9]; /* User defined variable storage area */
|
|
201
|
+
char kuser2[9]; /* User defined variable storage area */
|
|
202
|
+
char kcmpnm[9]; /* F channel name, three charaters */
|
|
203
|
+
char knetwk[9]; /* name of seismic network */
|
|
204
|
+
char kdatrd[9]; /* date data was read onto computer */
|
|
205
|
+
char kinst[9]; /* generic name of recording instrument */
|
|
206
|
+
} SACHEAD;
|
|
207
|
+
|
|
208
|
+
/*******************************************************************************
|
|
209
|
+
SAC Enumerated type
|
|
210
|
+
|
|
211
|
+
Definitions of constants for SAC enumerated data values.
|
|
212
|
+
|
|
213
|
+
undocumented == couldn't find a definition for it (denio, 07/15/88)
|
|
214
|
+
*******************************************************************************/
|
|
215
|
+
#define ITIME 1 /* file: time series data */
|
|
216
|
+
#define IRLIM 2 /* file: real&imag spectrum */
|
|
217
|
+
#define IAMPH 3 /* file: ampl&phas spectrum */
|
|
218
|
+
#define IXY 4 /* file: gen'l x vs y data */
|
|
219
|
+
#define IUNKN 5 /* x data: unknown type */
|
|
220
|
+
/* zero time: unknown */
|
|
221
|
+
/* event type: unknown */
|
|
222
|
+
#define IDISP 6 /* x data: displacement (nm) */
|
|
223
|
+
#define IVEL 7 /* x data: velocity (nm/sec) */
|
|
224
|
+
#define IACC 8 /* x data: accel (cm/sec/sec)*/
|
|
225
|
+
#define IB 9 /* zero time: start of file */
|
|
226
|
+
#define IDAY 10 /* zero time: 0000 of GMT day*/
|
|
227
|
+
#define IO 11 /* zero time: event origin */
|
|
228
|
+
#define IA 12 /* zero time: 1st arrival */
|
|
229
|
+
#define IT0 13 /* zero time: user timepick 0*/
|
|
230
|
+
#define IT1 14 /* zero time: user timepick 1*/
|
|
231
|
+
#define IT2 15 /* zero time: user timepick 2*/
|
|
232
|
+
#define IT3 16 /* zero time: user timepick 3*/
|
|
233
|
+
#define IT4 17 /* zero time: user timepick 4*/
|
|
234
|
+
#define IT5 18 /* zero time: user timepick 5*/
|
|
235
|
+
#define IT6 19 /* zero time: user timepick 6*/
|
|
236
|
+
#define IT7 20 /* zero time: user timepick 7*/
|
|
237
|
+
#define IT8 21 /* zero time: user timepick 8*/
|
|
238
|
+
#define IT9 22 /* zero time: user timepick 9*/
|
|
239
|
+
#define IRADNV 23 /* undocumented */
|
|
240
|
+
#define ITANNV 24 /* undocumented */
|
|
241
|
+
#define IRADEV 25 /* undocumented */
|
|
242
|
+
#define ITANEV 26 /* undocumented */
|
|
243
|
+
#define INORTH 27 /* undocumented */
|
|
244
|
+
#define IEAST 28 /* undocumented */
|
|
245
|
+
#define IHORZA 29 /* undocumented */
|
|
246
|
+
#define IDOWN 30 /* undocumented */
|
|
247
|
+
#define IUP 31 /* undocumented */
|
|
248
|
+
#define ILLLBB 32 /* undocumented */
|
|
249
|
+
#define IWWSN1 33 /* undocumented */
|
|
250
|
+
#define IWWSN2 34 /* undocumented */
|
|
251
|
+
#define IHGLP 35 /* undocumented */
|
|
252
|
+
#define ISRO 36 /* undocumented */
|
|
253
|
+
#define INUCL 37 /* event type: nuclear shot */
|
|
254
|
+
#define IPREN 38 /* event type: nuke pre-shot */
|
|
255
|
+
#define IPOSTN 39 /* event type: nuke post-shot*/
|
|
256
|
+
#define IQUAKE 40 /* event type: earthquake */
|
|
257
|
+
#define IPREQ 41 /* event type: foreshock */
|
|
258
|
+
#define IPOSTQ 42 /* event type: aftershock */
|
|
259
|
+
#define ICHEM 43 /* event type: chemical expl */
|
|
260
|
+
#define IOTHER 44 /* event type: other source */
|
|
261
|
+
/* data quality: other problm*/
|
|
262
|
+
#define IGOOD 45 /* data quality: good */
|
|
263
|
+
#define IGLCH 46 /* data quality: has glitches*/
|
|
264
|
+
#define IDROP 47 /* data quality: has dropouts*/
|
|
265
|
+
#define ILOWSN 48 /* data quality: low s/n */
|
|
266
|
+
#define IRLDTA 49 /* data is real data */
|
|
267
|
+
#define IVOLTS 50 /* file: velocity (volts) */
|
|
268
|
+
#define IMB 52 /* undocumented */
|
|
269
|
+
#define IMS 53 /* undocumented */
|
|
270
|
+
#define IML 54 /* undocumented */
|
|
271
|
+
#define IMW 55 /* undocumented */
|
|
272
|
+
#define IMD 56 /* undocumented */
|
|
273
|
+
#define IMX 57 /* undocumented */
|
|
274
|
+
#define INEIC 58 /* undocumented */
|
|
275
|
+
#define IPDEQ 59 /* undocumented */
|
|
276
|
+
#define IPDEW 60 /* undocumented */
|
|
277
|
+
#define IPDE 61 /* undocumented */
|
|
278
|
+
#define IISC 62 /* undocumented */
|
|
279
|
+
#define IREB 63 /* undocumented */
|
|
280
|
+
#define IUSGS 64 /* undocumented */
|
|
281
|
+
#define IBRK 65 /* undocumented */
|
|
282
|
+
#define ICALTECH 66 /* undocumented */
|
|
283
|
+
#define ILLNL 67 /* undocumented */
|
|
284
|
+
#define IEVLOC 68 /* undocumented */
|
|
285
|
+
#define IJSOP 69 /* undocumented */
|
|
286
|
+
#define IUSER 70 /* undocumented */
|
|
287
|
+
#define IUNKNOWN 71 /* undocumented */
|
|
288
|
+
#define IQB 72 /* undocumented */
|
|
289
|
+
#define IQB1 73 /* undocumented */
|
|
290
|
+
#define IQB2 74 /* undocumented */
|
|
291
|
+
#define IQBX 75 /* undocumented */
|
|
292
|
+
#define IQMT 76 /* undocumented */
|
|
293
|
+
#define IEQ 77 /* undocumented */
|
|
294
|
+
#define IEQ1 78 /* undocumented */
|
|
295
|
+
#define IEQ2 79 /* undocumented */
|
|
296
|
+
#define IME 80 /* undocumented */
|
|
297
|
+
#define IEX 81 /* undocumented */
|
|
298
|
+
#define INU 82 /* undocumented */
|
|
299
|
+
#define INC 83 /* undocumented */
|
|
300
|
+
#define IO_ 84 /* undocumented */
|
|
301
|
+
#define IL 85 /* undocumented */
|
|
302
|
+
#define IR 86 /* undocumented */
|
|
303
|
+
#define IT 87 /* undocumented */
|
|
304
|
+
#define IU 88 /* undocumented */
|
|
305
|
+
#define IEQ3 89 /* undocumented */
|
|
306
|
+
#define IEQ0 90 /* undocumented */
|
|
307
|
+
#define IEX0 91 /* undocumented */
|
|
308
|
+
#define IQC 92 /* undocumented */
|
|
309
|
+
#define IQB0 93 /* undocumented */
|
|
310
|
+
#define IGEY 94 /* undocumented */
|
|
311
|
+
#define ILIT 95 /* undocumented */
|
|
312
|
+
#define IMET 96 /* undocumented */
|
|
313
|
+
#define IODOR 97 /* undocumented */
|
|
314
|
+
#define IOS 103 /* undocumented */
|
|
315
|
+
|
|
316
|
+
/* True/false definitions */
|
|
317
|
+
#undef FALSE
|
|
318
|
+
#define FALSE 0
|
|
319
|
+
#undef TRUE
|
|
320
|
+
#define TRUE 1
|
|
321
|
+
|
|
322
|
+
#define SAC_FLOAT_UNDEF (-12345.0)
|
|
323
|
+
#define SAC_INT_UNDEF (-12345)
|
|
324
|
+
#define SAC_CHAR8_UNDEF "-12345 "
|
|
325
|
+
#define SAC_CHAR16_UNDEF "-12345 "
|
|
326
|
+
|
|
327
|
+
/* Format strings for writing headers for SAC ASCII files */
|
|
328
|
+
#define FCS "%15.7f%15.7f%15.7f%15.7f%15.7f\n" /* for floats */
|
|
329
|
+
#define ICS "%10d%10d%10d%10d%10d\n" /* for integers */
|
|
330
|
+
#define CCS1 "%-8.8s%-8.8s%-8.8s\n" /* for strings */
|
|
331
|
+
#define CCS2 "%-8.8s%-16.16s\n" /* for strings */
|
|
332
|
+
|
|
333
|
+
/* Number of floats in the SAC Header */
|
|
334
|
+
#define SAC_HEADER_FLOATS 70
|
|
335
|
+
/* Number of ints in the SAC Header */
|
|
336
|
+
#define SAC_HEADER_INTS 40 /* 15 + 20 + 5 */
|
|
337
|
+
/* Number of numeric values in the SAC Header (4 bytes) */
|
|
338
|
+
#define SAC_HEADER_NUMBERS ( SAC_HEADER_FLOATS + SAC_HEADER_INTS )
|
|
339
|
+
/* Number of strings in the SAC Header (8 or 9 bytes) */
|
|
340
|
+
#define SAC_HEADER_STRINGS 24 /* 24 = 23 + 1 */
|
|
341
|
+
|
|
342
|
+
/* size of integers or floats on disk or in memory
|
|
343
|
+
* make sure sizeof(float) == 4 && sizeof(int)==4
|
|
344
|
+
*/
|
|
345
|
+
#define SAC_DATA_SIZEOF 4
|
|
346
|
+
/* Size of a character string stored on disk for a SAC header */
|
|
347
|
+
#define SAC_HEADER_STRING_LENGTH_FILE 8
|
|
348
|
+
/* Size of a character string stored in memory for a SAC header */
|
|
349
|
+
#define SAC_HEADER_STRING_LENGTH 9
|
|
350
|
+
|
|
351
|
+
/* Size of floats in the SAC Header */
|
|
352
|
+
#define SAC_HEADER_FLOATS_SIZE ( SAC_HEADER_FLOATS * SAC_DATA_SIZEOF )
|
|
353
|
+
/* Size of ints in the SAC Header */
|
|
354
|
+
#define SAC_HEADER_INTS_SIZE ( SAC_HEADER_INTS * SAC_DATA_SIZEOF )
|
|
355
|
+
/* Size of numeric headers on disk */
|
|
356
|
+
#define SAC_HEADER_NUMBERS_SIZE ( SAC_HEADER_FLOATS_SIZE + SAC_HEADER_INTS_SIZE )
|
|
357
|
+
/* Size of string headers on disk */
|
|
358
|
+
#define SAC_HEADER_STRINGS_SIZE ( SAC_HEADER_STRINGS * SAC_HEADER_STRING_LENGTH_FILE )
|
|
359
|
+
|
|
360
|
+
/* SAC Header Version Number */
|
|
361
|
+
#define SAC_HEADER_MAJOR_VERSION 6
|
|
362
|
+
/* offset of nvhdr relative to struct SACHEAD */
|
|
363
|
+
#define SAC_VERSION_LOCATION 76
|
|
364
|
+
|
|
365
|
+
/* offset of T0 relative to pointer to struct SACHEAD */
|
|
366
|
+
#define TMARK 10
|
|
367
|
+
|
|
368
|
+
/* offset of USER0 relative to pointer to struct SACHEAD */
|
|
369
|
+
#define USERN 40
|
|
370
|
+
|
|
371
|
+
/* function prototype of basic SAC I/O */
|
|
372
|
+
int read_sac_head(const char *name, SACHEAD *hd);
|
|
373
|
+
float *read_sac(const char *name, SACHEAD *hd);
|
|
374
|
+
int read_sac_xy(const char *name, SACHEAD *hd, float *xdata, float *ydata);
|
|
375
|
+
float *read_sac_pdw(const char *name, SACHEAD *hd, int tmark, float t1, float t2);
|
|
376
|
+
int write_sac(const char *name, SACHEAD hd, const float *ar);
|
|
377
|
+
int write_sac_xy(const char *name, SACHEAD hd, const float *xdata, const float *ydata);
|
|
378
|
+
SACHEAD new_sac_head(float dt, int ns, float b0);
|
|
379
|
+
int sac_head_index(const char *name);
|
|
380
|
+
int issac(const char *name);
|
|
381
|
+
|
|
382
|
+
#endif /* sacio.h */
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file search.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
|
+
* 该函数对输入的整数数组进行线性搜索,找到目标值时返回其索引。
|
|
15
|
+
* 如果目标值在数组中未找到,则返回 -1。
|
|
16
|
+
*
|
|
17
|
+
* @param array (in)要搜索的整数数组。
|
|
18
|
+
* @param size (in)数组的大小(元素个数)。
|
|
19
|
+
* @param target (in)要查找的目标值。
|
|
20
|
+
*
|
|
21
|
+
* @return idx 目标值的索引,如果未找到则返回 -1。
|
|
22
|
+
*
|
|
23
|
+
* @note 如果数组中存在多个目标值,该函数返回第一个匹配的索引。
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
MYINT findElement_MYINT(const MYINT array[], MYINT size, MYINT target);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 搜索浮点数数组中最接近目标值且小于目标值的索引。
|
|
30
|
+
* 如果目标值在数组中未找到,则返回 -1。
|
|
31
|
+
*
|
|
32
|
+
* @param array (in)要搜索的浮点数数组。
|
|
33
|
+
* @param size (in)数组的大小(元素个数)。
|
|
34
|
+
* @param target (in)要查找的目标值。
|
|
35
|
+
*
|
|
36
|
+
* @return idx 目标值的索引,如果未找到则返回 -1。
|
|
37
|
+
*
|
|
38
|
+
* @note 如果数组中存在多个目标值,该函数返回第一个匹配的索引。
|
|
39
|
+
*
|
|
40
|
+
*/
|
|
41
|
+
MYINT findLessEqualClosest_MYREAL(const MYREAL array[], MYINT size, MYREAL target);
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 搜索浮点数数组中最接近目标值的索引。
|
|
45
|
+
*
|
|
46
|
+
* @param array (in)要搜索的浮点数数组。
|
|
47
|
+
* @param size (in)数组的大小(元素个数)。
|
|
48
|
+
* @param target (in)要查找的目标值。
|
|
49
|
+
*
|
|
50
|
+
* @return idx 目标值的索引
|
|
51
|
+
*
|
|
52
|
+
* @note 如果数组中存在多个目标值,该函数返回第一个匹配的索引。
|
|
53
|
+
*
|
|
54
|
+
*/
|
|
55
|
+
MYINT findClosest_MYREAL(const MYREAL array[], MYINT size, MYREAL target);
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 搜索浮点数数组的最大或最小值,返回其索引。
|
|
59
|
+
*
|
|
60
|
+
* @param array (in)要搜索的浮点数数组。
|
|
61
|
+
* @param size (in)数组的大小(元素个数)。
|
|
62
|
+
* @param isMax (in)是否要找最大值,否则找最小值。
|
|
63
|
+
*
|
|
64
|
+
* @return idx 目标值的索引。
|
|
65
|
+
*
|
|
66
|
+
* @note 如果数组中存在相同最值,该函数返回第一个匹配的索引。
|
|
67
|
+
*
|
|
68
|
+
*/
|
|
69
|
+
MYINT findMinMax_MYREAL(const MYREAL array[], MYINT size, bool isMax);
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file signals.h
|
|
3
|
+
* @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
|
|
4
|
+
* @date 2024-12
|
|
5
|
+
*
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
#pragma once
|
|
11
|
+
|
|
12
|
+
#include <stdbool.h>
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
#define GRT_SIG_PARABOLA 'p' ///< 抛物波代号
|
|
16
|
+
#define GRT_SIG_TRAPEZOID 't' ///< 梯形波代号
|
|
17
|
+
#define GRT_SIG_RICKER 'r' ///< 雷克子波信号
|
|
18
|
+
#define GRT_SIG_CUSTOM '0' ///< 自定义时间函数代码
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 检查时间函数的类型设置和参数设置是否符合要求
|
|
23
|
+
*
|
|
24
|
+
* @param tftype 单个字符,指代时间函数类型
|
|
25
|
+
* @param tfparams 时间函数参数
|
|
26
|
+
*
|
|
27
|
+
* @return 检查是否通过
|
|
28
|
+
*/
|
|
29
|
+
bool check_tftype_tfparams(const char tftype, const char *tfparams);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 获得时间函数,要求提前运行check_tftype_tfparams函数以检查参数
|
|
33
|
+
*
|
|
34
|
+
* @param TFnt 返回的点数
|
|
35
|
+
* @param dt 时间间隔
|
|
36
|
+
* @param tftype 单个字符,指代时间函数类型
|
|
37
|
+
* @param tfparams 时间函数参数
|
|
38
|
+
*
|
|
39
|
+
* @return 时间函数指针
|
|
40
|
+
*/
|
|
41
|
+
float * get_time_function(int *TFnt, float dt, const char tftype, const char *tfparams);
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 时域线性卷积,要求提前运行check_tftype_tfparams函数以检查参数
|
|
46
|
+
* 卷积结果会原地写入数组。
|
|
47
|
+
*
|
|
48
|
+
* @param arr 待卷积的信号
|
|
49
|
+
* @param nt 信号点数
|
|
50
|
+
* @param dt 信号点时间间隔
|
|
51
|
+
* @param tftype 单个字符,指代时间函数类型
|
|
52
|
+
* @param tfparams 时间函数参数
|
|
53
|
+
* @param TFarr 指向时间函数的指针的指针
|
|
54
|
+
* @param TFnt 返回的时间函数点数
|
|
55
|
+
*/
|
|
56
|
+
void linear_convolve_time_function(float *arr, int nt, float dt, const char tftype, const char *tfparams, float **TFarr, int *TFnt);
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 时间序列卷积函数,只卷积x的长度
|
|
61
|
+
*
|
|
62
|
+
* @param x 长信号数组
|
|
63
|
+
* @param nx 长信号点数
|
|
64
|
+
* @param h 短信号数组
|
|
65
|
+
* @param nh 短信号点数
|
|
66
|
+
* @param y 输出数组
|
|
67
|
+
* @param ny 输出数组点数
|
|
68
|
+
* @param iscircular 是否使用循环卷积
|
|
69
|
+
*/
|
|
70
|
+
void oaconvolve(float *x, int nx, float *h, int nh, float *y, int ny, bool iscircular);
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 计算某序列整个梯形积分值
|
|
75
|
+
*
|
|
76
|
+
* @param x 信号数组
|
|
77
|
+
* @param nx 数组长度
|
|
78
|
+
* @param dt 时间间隔
|
|
79
|
+
*
|
|
80
|
+
* @return 积分结果
|
|
81
|
+
*/
|
|
82
|
+
float trap_area(const float *x, int nx, float dt);
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* 使用梯形法对时间序列积分
|
|
87
|
+
*
|
|
88
|
+
* @param x 信号数组
|
|
89
|
+
* @param nx 数组长度
|
|
90
|
+
* @param dt 时间间隔
|
|
91
|
+
*/
|
|
92
|
+
void trap_integral(float *x, int nx, float dt);
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* 对时间序列做中心一阶差分
|
|
96
|
+
*
|
|
97
|
+
* @param x 信号数组
|
|
98
|
+
* @param nx 数组长度
|
|
99
|
+
* @param dt 时间间隔
|
|
100
|
+
*/
|
|
101
|
+
void differential(float *x, int nx, float dt);
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* 生成抛物线波
|
|
108
|
+
*
|
|
109
|
+
* @param dt (in)采样间隔
|
|
110
|
+
* @param tlen (inout)信号时长
|
|
111
|
+
* @param Nt (out)返回的点数
|
|
112
|
+
*
|
|
113
|
+
* @return float指针
|
|
114
|
+
*/
|
|
115
|
+
float * get_parabola_wave(float dt, float *Tlen, int *Nt);
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* 生成梯形波或三角波
|
|
121
|
+
*
|
|
122
|
+
* ^
|
|
123
|
+
* |
|
|
124
|
+
* |
|
|
125
|
+
* 1-| --------...--------
|
|
126
|
+
* | / \
|
|
127
|
+
* | / \
|
|
128
|
+
* | ... ...
|
|
129
|
+
* | / \
|
|
130
|
+
* | / \
|
|
131
|
+
* | / \
|
|
132
|
+
* |------+------------------+------+---------------->
|
|
133
|
+
* O T1 T2 T3 T
|
|
134
|
+
*
|
|
135
|
+
*
|
|
136
|
+
* @param dt (in)采样间隔
|
|
137
|
+
* @param T1 (inout)上坡截止时刻
|
|
138
|
+
* @param T2 (inout)平台截止时刻
|
|
139
|
+
* @param T3 (inout)下坡截止时刻
|
|
140
|
+
* @param Nt (out)返回的点数
|
|
141
|
+
*
|
|
142
|
+
* @return float指针
|
|
143
|
+
*/
|
|
144
|
+
float * get_trap_wave(float dt, float *T1, float *T2, float *T3, int *Nt);
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* 生成雷克子波
|
|
150
|
+
*
|
|
151
|
+
* \f[ f(t)=(1-2 \pi^2 \f_0^2 (t-t_0)^2 ) \exp{ - \pi^2 \f_0^2 (t-t_0)^2} \f]
|
|
152
|
+
*
|
|
153
|
+
* @param dt (in)采样间隔
|
|
154
|
+
* @param f0 (in)主频
|
|
155
|
+
* @param Nt (out)返回的点数
|
|
156
|
+
*
|
|
157
|
+
* @return float指针
|
|
158
|
+
*/
|
|
159
|
+
float * get_ricker_wave(float dt, float f0, int *Nt);
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* 从文件中读入自定义时间函数
|
|
164
|
+
*
|
|
165
|
+
* @param Nt (out)返回的点数
|
|
166
|
+
* @param tfparams 文件路径
|
|
167
|
+
*
|
|
168
|
+
* @return float指针
|
|
169
|
+
*/
|
|
170
|
+
float * get_custom_wave(int *Nt, const char *tfparams);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file source.h
|
|
3
|
+
* @author Zhu Dengda (zhudengda@mail.iggcas.ac.cn)
|
|
4
|
+
* @date 2024-07-24
|
|
5
|
+
*
|
|
6
|
+
* 以下代码实现的是 震源系数————爆炸源,垂直力源,水平力源,剪切源, 参考:
|
|
7
|
+
*
|
|
8
|
+
* 1. 姚振兴, 谢小碧. 2022/03. 理论地震图及其应用(初稿).
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
#pragma once
|
|
13
|
+
|
|
14
|
+
#include "const.h"
|
|
15
|
+
#include "model.h"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 根据公式(4.6.6),(4.6.15),(4.6.21,26),(4.8.34)计算不同震源的震源系数,
|
|
20
|
+
* 数组形状[3][3][2],代表在[i][j][p]时表示m=i阶时的
|
|
21
|
+
* P(j=0),SV(j=1),SH(j=2)的震源系数(分别可记为q,w,v),且分为下行波(p=0)和上行波(p=1).
|
|
22
|
+
*
|
|
23
|
+
* @param src_xa (in)震源层的P波归一化垂直波数 \f$ \sqrt{1 - (k_a/k)^2} \f$
|
|
24
|
+
* @param src_xb (in)震源层的S波归一化垂直波数 \f$ \sqrt{1 - (k_b/k)^2} \f$
|
|
25
|
+
* @param src_kaka (in)震源层的P波水平波数的平方 \f$ k_a^2=(\frac{\omega}{V_a})^2 \f$
|
|
26
|
+
* @param src_kbkb (in)震源层的S波水平波数的平方 \f$ k_b^2=(\frac{\omega}{V_b})^2 \f$
|
|
27
|
+
* @param omega (in)复数频率
|
|
28
|
+
* @param k (in)波数
|
|
29
|
+
* @param EXP[3][3][2] (out)爆炸源的震源系数,下同
|
|
30
|
+
* @param VF[3][3][2] (out)垂直力源
|
|
31
|
+
* @param HF[3][3][2] (out)水平力源
|
|
32
|
+
* @param DC[3][3][2] (out)双力偶源
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
35
|
+
void source_coef(
|
|
36
|
+
MYCOMPLEX src_xa, MYCOMPLEX src_xb, MYCOMPLEX src_kaka, MYCOMPLEX src_kbkb,
|
|
37
|
+
MYCOMPLEX omega, MYREAL k,
|
|
38
|
+
MYCOMPLEX EXP[3][3][2], MYCOMPLEX VF[3][3][2], MYCOMPLEX HF[3][3][2], MYCOMPLEX DC[3][3][2]);
|