Changelog ==================== ## PyGRT v0.16.0 Release _**Surface-wave modules**_ + **eigenv** + **eigenfn** + **modsum** + **disp2asc** See [documentation](https://pygrt.readthedocs.io/) for details. ### Pull requests * REFAC: add a boolean array in struct GRT_MODEL1D to indicate whether each layer is a liquid layer by [@Dengda98](https://github.com/Dengda98) in [#227](https://github.com/Dengda98/PyGRT/pull/227) * REFAC: split some kernel-related functions into P-SV and SH parts by [@Dengda98](https://github.com/Dengda98) in [#228](https://github.com/Dengda98/PyGRT/pull/228) * REFAC: remove members `src_coefD(U)` from struct GRT_MODEL1D by [@Dengda98](https://github.com/Dengda98) in [#229](https://github.com/Dengda98/PyGRT/pull/229) * REFAC: add member `srcrcv_isInserted` in struct GRT_MODEL1D by [@Dengda98](https://github.com/Dengda98) in [#231](https://github.com/Dengda98/PyGRT/pull/231) * REFAC: for series of function "grt_get_layer_Dxx", use struct GRT_MODEL1D to pass the args by [@Dengda98](https://github.com/Dengda98) in [#232](https://github.com/Dengda98/PyGRT/pull/232) * FIX: ModuleNotFoundError of 'pkg_resources' from obspy by [@Dengda98](https://github.com/Dengda98) in [#233](https://github.com/Dengda98/PyGRT/pull/233) * DOC: rename an unique math label to avoid overlapping from that in other files by [@Dengda98](https://github.com/Dengda98) in [#235](https://github.com/Dengda98/PyGRT/pull/235) * REFAC: just rename some temp vars for computing R/T matrix by [@Dengda98](https://github.com/Dengda98) in [#236](https://github.com/Dengda98/PyGRT/pull/236) * FEAT: set boundary condition in module `kernel` by [@Dengda98](https://github.com/Dengda98) in [#237](https://github.com/Dengda98/PyGRT/pull/237) * REFAC: split the model-related struct into two structs: MODEL1D and MODEL1D_STATE by [@Dengda98](https://github.com/Dengda98) in [#239](https://github.com/Dengda98/PyGRT/pull/239) * REFAC: add argument `isElastic` in function `grt_update_mod1d_state_omega` by [@Dengda98](https://github.com/Dengda98) in [#240](https://github.com/Dengda98/PyGRT/pull/240) * REFAC: reorganize and update "grt.h" by [@Dengda98](https://github.com/Dengda98) in [#241](https://github.com/Dengda98/PyGRT/pull/241) * REFAC: add "grnspec.h/c" to handle the Green Functions spectra by [@Dengda98](https://github.com/Dengda98) in [#242](https://github.com/Dengda98/PyGRT/pull/242) * DOC: update reference to by [@Dengda98](https://github.com/Dengda98) in [#243](https://github.com/Dengda98/PyGRT/pull/243) * FIX: cast numpy array type to 'NPCT_REAL_TYPE' explicitly by [@Dengda98](https://github.com/Dengda98) in [#244](https://github.com/Dengda98/PyGRT/pull/244) * STYLE: update information in logo window by [@Dengda98](https://github.com/Dengda98) in [#245](https://github.com/Dengda98/PyGRT/pull/245) * fix: sanitize subprocess call in gmtplot.py by @orbisai0security in [#246](https://github.com/Dengda98/PyGRT/pull/246) * DOC: update citation by [@Dengda98](https://github.com/Dengda98) in [#247](https://github.com/Dengda98/PyGRT/pull/247) * TEST: move the test data to another repo by [@Dengda98](https://github.com/Dengda98) in [#248](https://github.com/Dengda98/PyGRT/pull/248) * FEAT: add modules for Surface-wave simulation by [@Dengda98](https://github.com/Dengda98) in [#249](https://github.com/Dengda98/PyGRT/pull/249) * DOC: revise bibliography and citation style in document by [@Dengda98](https://github.com/Dengda98) in [#250](https://github.com/Dengda98/PyGRT/pull/250) * DOC: add doi of Zhu et al., (2026) by [@Dengda98](https://github.com/Dengda98) in [#251](https://github.com/Dengda98/PyGRT/pull/251) * FEAT: replace -Z and -O with -W in eigenfn by [@Dengda98](https://github.com/Dengda98) in [#252](https://github.com/Dengda98/PyGRT/pull/252) * FEAT: rename eigv2asc to disp2asc, support -C for phase-vel dispersion and -U for group-vel dispersion by [@Dengda98](https://github.com/Dengda98) in [#253](https://github.com/Dengda98/PyGRT/pull/253) * DOC: add manuals for several surface-wave modules by [@Dengda98](https://github.com/Dengda98) in [#254](https://github.com/Dengda98/PyGRT/pull/254) * BUILD: avoid using formats like "-l:libXYZ.a" to link libraries in Mac by [@Dengda98](https://github.com/Dengda98) in [#255](https://github.com/Dengda98/PyGRT/pull/255) * Build(deps): Bump actions/setup-python from 4 to 6 by @dependabot[bot] in [#258](https://github.com/Dengda98/PyGRT/pull/258) * Build(deps): Bump softprops/action-gh-release from 1 to 3 by @dependabot[bot] in [#256](https://github.com/Dengda98/PyGRT/pull/256) * Build(deps): Bump actions/checkout from 3 to 6 by @dependabot[bot] in [#260](https://github.com/Dengda98/PyGRT/pull/260) * Build(deps): Bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in [#259](https://github.com/Dengda98/PyGRT/pull/259) * Build(deps): Bump actions/download-artifact from 4 to 8 by @dependabot[bot] in [#257](https://github.com/Dengda98/PyGRT/pull/257) * DOC: rename "explain_-s.rst_" for case-insensitive system by [@Dengda98](https://github.com/Dengda98) in [#261](https://github.com/Dengda98/PyGRT/pull/261) * DOC: update some example scripts for MACOS by [@Dengda98](https://github.com/Dengda98) in [#262](https://github.com/Dengda98/PyGRT/pull/262) * DOC: add tutorials for surface-wave modules by [@Dengda98](https://github.com/Dengda98) in [#263](https://github.com/Dengda98/PyGRT/pull/263) * DOC: update layout of gallery by [@Dengda98](https://github.com/Dengda98) in [#264](https://github.com/Dengda98/PyGRT/pull/264) * DOC: by [@Dengda98](https://github.com/Dengda98) in [#265](https://github.com/Dengda98/PyGRT/pull/265) **Full Changelog**: [v0.15.0...v0.16.0](https://github.com/Dengda98/PyGRT/compare/v0.15.0...v0.16.0) ## PyGRT v0.15.0 - support Tension source - support Free, Rigid and Halfspace boundary condition - support skip amplitude compensation from imaginary frequency - support set delay time related to the first P arrival - avoid repetitive computation due to the same epicentral distances in static solution - set the max frequency as the attenuation reference frequency - support set new XY grid for static results - update -R in module `(static_)greenfn` : **-R***r1/r2/dr*|*r1,r2,...*|*file* - fix some typos and add some tests in documents - fix some bugs ### Pull requests * FEAT: support Tension source by [@Dengda98](https://github.com/Dengda98) in [#204](https://github.com/Dengda98/PyGRT/pull/204) * TEST: tension source by [@Dengda98](https://github.com/Dengda98) in [#205](https://github.com/Dengda98/PyGRT/pull/205) * DOC: tension source in module `(static_)syn` by [@Dengda98](https://github.com/Dengda98) in [#206](https://github.com/Dengda98/PyGRT/pull/206) * TEST: add ex15, compare static soultion and 0-freq dynamic solution by [@Dengda98](https://github.com/Dengda98) in [#209](https://github.com/Dengda98/PyGRT/pull/209) * FEAT: support Free, Rigid and Halfspace boundary condition by [@Dengda98](https://github.com/Dengda98) in [#212](https://github.com/Dengda98/PyGRT/pull/212) * DOC: formula for Free, Rigid and Halfspace boundary condition by [@Dengda98](https://github.com/Dengda98) in [#213](https://github.com/Dengda98/PyGRT/pull/213) * DOC: description and test for boundary condition by [@Dengda98](https://github.com/Dengda98) in [#214](https://github.com/Dengda98/PyGRT/pull/214) * FIX: discard argument `allowLiquid` in function `PyModel1D.__init__()` by [@Dengda98](https://github.com/Dengda98) in [#218](https://github.com/Dengda98/PyGRT/pull/218) * FEAT: support skip amplitude compensation from imaginary frequency by [@Dengda98](https://github.com/Dengda98) in [#219](https://github.com/Dengda98/PyGRT/pull/219) * FEAT: support set delay time related to the first P arrival by [@Dengda98](https://github.com/Dengda98) in [#220](https://github.com/Dengda98/PyGRT/pull/220) * FEAT: avoid repetitive computation due to the same epicentral distances in static solution by [@Dengda98](https://github.com/Dengda98) in [#221](https://github.com/Dengda98/PyGRT/pull/221) * DOC: update Doxygen configuration to treat `.h` files as C language and set default domain by [@Dengda98](https://github.com/Dengda98) in [#223](https://github.com/Dengda98/PyGRT/pull/223) * FEAT: set the max frequency as the attenuation reference frequency by [@Dengda98](https://github.com/Dengda98) in [#224](https://github.com/Dengda98/PyGRT/pull/224) * FEAT: support set new XY grid for static results by [@Dengda98](https://github.com/Dengda98) in [#225](https://github.com/Dengda98/PyGRT/pull/225) * FEAT: update -R in module `(static_)greenfn` by [@Dengda98](https://github.com/Dengda98) in [#226](https://github.com/Dengda98/PyGRT/pull/226) **Full Changelog**: [v0.14.0...v0.15.0](https://github.com/Dengda98/PyGRT/compare/v0.14.0...v0.15.0) ## PyGRT v0.14.0 + add new module `kernel` + support "Direct Convergence Method" proposed by Zhu et al. (2026) + a more clearer way to select integration method and convergence method, see document about `-L` and `-C` in `greenfn` module + rearrange documents and add gallery + fix column name from `ker2asc` module + save z-derivative kernels when set `-e` or `calc_upar=True` ### Pull requests * REFAC: add struct `K_INTEG` by [@Dengda98](https://github.com/Dengda98) in [#170](https://github.com/Dengda98/PyGRT/pull/170) * DOC: a consistent way to run all scripts for document building by [@Dengda98](https://github.com/Dengda98) in [#171](https://github.com/Dengda98/PyGRT/pull/171) * FEAT: add module `kernel` by [@Dengda98](https://github.com/Dengda98) in [#172](https://github.com/Dengda98/PyGRT/pull/172) * DOC: update document for new module `kernel` by [@Dengda98](https://github.com/Dengda98) in [#173](https://github.com/Dengda98/PyGRT/pull/173) * DOC: add extension "sphinx_last_updated_by_git" by [@Dengda98](https://github.com/Dengda98) in [#174](https://github.com/Dengda98/PyGRT/pull/174) * REFAC: move some functions from `util.c` to `grt_greenfn.c` as static functions by [@Dengda98](https://github.com/Dengda98) in [#176](https://github.com/Dengda98/PyGRT/pull/176) * DOC: remove ":updated_date:" in each .rst files by [@Dengda98](https://github.com/Dengda98) in [#177](https://github.com/Dengda98/PyGRT/pull/177) * DOC: global last-updated date for homepage by [@Dengda98](https://github.com/Dengda98) in [#175](https://github.com/Dengda98/PyGRT/pull/175) * FIX: initialize instead of copy K_INTEG in fim.c and safim.c by [@Dengda98](https://github.com/Dengda98) in [#178](https://github.com/Dengda98/PyGRT/pull/178) * FEAT: a more convenient way to choose k-integral method by [@Dengda98](https://github.com/Dengda98) in [#179](https://github.com/Dengda98/PyGRT/pull/179) * FEAT: save z-derivative kernels when set `-e` or `calc_upar=True` by [@Dengda98](https://github.com/Dengda98) in [#180](https://github.com/Dengda98/PyGRT/pull/180) * DOC: rearrange "Advanced" documents by [@Dengda98](https://github.com/Dengda98) in [#183](https://github.com/Dengda98/PyGRT/pull/183) * FIX: in ker2asc, wrong column names of PTAM's statsfile by [@Dengda98](https://github.com/Dengda98) in [#186](https://github.com/Dengda98/PyGRT/pull/186) * FEAT: support Direct Convergence Method by [@Dengda98](https://github.com/Dengda98) in [#185](https://github.com/Dengda98/PyGRT/pull/185) * DOC: clean outputs of scripts and fix some typos by [@Dengda98](https://github.com/Dengda98) in [#187](https://github.com/Dengda98/PyGRT/pull/187) * FIX: keep receiver upward when source and receiver are at the same depth by [@Dengda98](https://github.com/Dengda98) in [#188](https://github.com/Dengda98/PyGRT/pull/188) * DOC: update document to clarify the options for the convergence method and provide relevant explanations by [@Dengda98](https://github.com/Dengda98) in [#189](https://github.com/Dengda98/PyGRT/pull/189) * DOC: add DCM document by [@Dengda98](https://github.com/Dengda98) in [#191](https://github.com/Dengda98/PyGRT/pull/191) * DOC: build Gallery by [@Dengda98](https://github.com/Dengda98) in [#192](https://github.com/Dengda98/PyGRT/pull/192) * DOC: add k_integ chart by [@Dengda98](https://github.com/Dengda98) in [#193](https://github.com/Dengda98/PyGRT/pull/193) * REFAC: rearrange SACIO in `greenfn` and `syn` by [@Dengda98](https://github.com/Dengda98) in [#195](https://github.com/Dengda98/PyGRT/pull/195) * REFAC: some macros about error checking by [@Dengda98](https://github.com/Dengda98) in [#197](https://github.com/Dengda98/PyGRT/pull/197) * DOC: show version in the title of ducument homepage by [@Dengda98](https://github.com/Dengda98) in [#198](https://github.com/Dengda98/PyGRT/pull/198) * REFAC: use English in Python functions document by [@Dengda98](https://github.com/Dengda98) in [#199](https://github.com/Dengda98/PyGRT/pull/199) * DOC: update citation and reference link by [@Dengda98](https://github.com/Dengda98) in [#200](https://github.com/Dengda98/PyGRT/pull/200) * TEST: add shallow source test for DCM and PTAM by [@Dengda98](https://github.com/Dengda98) in [#201](https://github.com/Dengda98/PyGRT/pull/201) * DOC: display SVG-format figures by [@Dengda98](https://github.com/Dengda98) in [#202](https://github.com/Dengda98/PyGRT/pull/202) **Full Changelog**: [v0.13.0...v0.14.0](https://github.com/Dengda98/PyGRT/compare/v0.13.0...v0.14.0) ## PyGRT v0.13.0 I've made **lots of enhancements (e.g. refactoring codes)** for future. For users' perspective, following mainly improvements were made: + discard usage `-S-1` in `greenfn` module, simplify `-S` can represent all indexes. Same as Python. + add `lamb1` module for solving the first-kind Lamb's problem using Feng and Zhang's solution, and add a [brief document](https://pygrt.readthedocs.io/zh-cn/latest/Lamb_problem/index.html) to show how to use it. + supplement the formulas in document, see [new formula](https://pygrt.readthedocs.io/zh-cn/latest/Formula/DS_zero.html). + add an automatic scheme to avoid waveform drifting, see [new document](https://pygrt.readthedocs.io/zh-cn/latest/Advanced/waveform_drift/waveform_drift.html). ### Pull requests * FIX: import __version__ by [@Dengda98](https://github.com/Dengda98) in [#120](https://github.com/Dengda98/PyGRT/pull/120) * DOC: Fix typo (custom time function option) `-D0/file` by [@Dengda98](https://github.com/Dengda98) in [#121](https://github.com/Dengda98/PyGRT/pull/121) * DOC: update help message of `lamb1` module by [@Dengda98](https://github.com/Dengda98) in [#123](https://github.com/Dengda98/PyGRT/pull/123) * TEST: create `/test`, specifically for the testing in Github Actions by [@Dengda98](https://github.com/Dengda98) in [#122](https://github.com/Dengda98/PyGRT/pull/122) * CI: simplify test_project by [@Dengda98](https://github.com/Dengda98) in [#124](https://github.com/Dengda98/PyGRT/pull/124) * TEST: avoid ZeroError in static test by [@Dengda98](https://github.com/Dengda98) in [#125](https://github.com/Dengda98/PyGRT/pull/125) * REFAC: use struct `RT_MATRIX` to manage the R/T coefficent matrices, and simplify function arguments by [@Dengda98](https://github.com/Dengda98) in [#127](https://github.com/Dengda98/PyGRT/pull/127) * REFAC: add argument `k` in function `grt_mod1d_xa_xb`, and remove extra `omega` in functions about dwm, fim, safim and ptam by [@Dengda98](https://github.com/Dengda98) in [#128](https://github.com/Dengda98/PyGRT/pull/128) * REFAC: remove function argument `stats`, move it to the struct by [@Dengda98](https://github.com/Dengda98) in [#129](https://github.com/Dengda98/PyGRT/pull/129) * REFAC: rename type, use `real_t` and `cplx_t` by [@Dengda98](https://github.com/Dengda98) in [#131](https://github.com/Dengda98/PyGRT/pull/131) * REFAC: remove type `MYINT`, use `int` and `size_t` by [@Dengda98](https://github.com/Dengda98) in [#132](https://github.com/Dengda98/PyGRT/pull/132) * REFAC: replace remained `double` with `real_t` by [@Dengda98](https://github.com/Dengda98) in [#133](https://github.com/Dengda98/PyGRT/pull/133) * FIX: in greenfn, update usage `-S-1` to `-S` by [@Dengda98](https://github.com/Dengda98) in [#134](https://github.com/Dengda98/PyGRT/pull/134) * FIX: integer type conversion between `int` and `size_t` by [@Dengda98](https://github.com/Dengda98) in [#135](https://github.com/Dengda98/PyGRT/pull/135) * FEAT: in `lamb1`, add two functions to solve two-type Rayleigh equations by [@Dengda98](https://github.com/Dengda98) in [#136](https://github.com/Dengda98/PyGRT/pull/136) * BUILD: multi-threads building via `make -j4` by [@Dengda98](https://github.com/Dengda98) in [#137](https://github.com/Dengda98/PyGRT/pull/137) * REFAC: create a kernel template for dynamic and static kernel by [@Dengda98](https://github.com/Dengda98) in [#139](https://github.com/Dengda98/PyGRT/pull/139) * DOC: ——DS0 by [@Dengda98](https://github.com/Dengda98) in [#141](https://github.com/Dengda98/PyGRT/pull/141) * FEAT: adjust function `grt_cmat2x2_inv`, move argument `stats` to the returned value by [@Dengda98](https://github.com/Dengda98) in [#144](https://github.com/Dengda98/PyGRT/pull/144) * REFAC: assemble source coefficients functions of P-SV and SH by [@Dengda98](https://github.com/Dengda98) in [#140](https://github.com/Dengda98/PyGRT/pull/140) * REFAC: move Generalized R/T matrix to struct `GRT_MODEL1D` by [@Dengda98](https://github.com/Dengda98) in [#146](https://github.com/Dengda98/PyGRT/pull/146) * TEST: add ocean-earth model test by [@Dengda98](https://github.com/Dengda98) in [#143](https://github.com/Dengda98/PyGRT/pull/143) * REFAC: optimize memory initialization by replacing the loop-based zeroing with `memset` by [@Dengda98](https://github.com/Dengda98) in [#148](https://github.com/Dengda98/PyGRT/pull/148) * REFAC: add GCC_ALWAYS_INLINE qualifier to inline functions by [@Dengda98](https://github.com/Dengda98) in [#149](https://github.com/Dengda98/PyGRT/pull/149) * REFAC: avoid repeated `_divdc` in grt_RT_matrix_ss_PSV by [@Dengda98](https://github.com/Dengda98) in [#150](https://github.com/Dengda98/PyGRT/pull/150) * DOC: add an intro and simplify the homepage by [@Dengda98](https://github.com/Dengda98) in [#152](https://github.com/Dengda98/PyGRT/pull/152) * DOC: new style for displaying the author and date by [@Dengda98](https://github.com/Dengda98) in [#153](https://github.com/Dengda98/PyGRT/pull/153) * FEAT: add function `grt_delay_GRT_matrix` to avoid repeated recursion in dynamic case by [@Dengda98](https://github.com/Dengda98) in [#151](https://github.com/Dengda98/PyGRT/pull/151) * REFAC: adjust the file locations of the "travt" module by [@Dengda98](https://github.com/Dengda98) in [#154](https://github.com/Dengda98/PyGRT/pull/154) * REFAC: rearrange kernel template by [@Dengda98](https://github.com/Dengda98) in [#155](https://github.com/Dengda98/PyGRT/pull/155) * FEAT: split the original kernel function into functions `GRT_matrix` and `GRT_build_QWV` by [@Dengda98](https://github.com/Dengda98) in [#156](https://github.com/Dengda98/PyGRT/pull/156) * REFAC: remove obsolete macros in kernel definition by [@Dengda98](https://github.com/Dengda98) in [#157](https://github.com/Dengda98/PyGRT/pull/157) * FIX: skip the complex frequency points with lower amplitudes by [@Dengda98](https://github.com/Dengda98) in [#158](https://github.com/Dengda98/PyGRT/pull/158) * FIX: MILROW model thickness by [@Dengda98](https://github.com/Dengda98) in [#159](https://github.com/Dengda98/PyGRT/pull/159) * DOC: set more suitable parameters for f-v spectra visualization by [@Dengda98](https://github.com/Dengda98) in [#160](https://github.com/Dengda98/PyGRT/pull/160) * FIX: re-initiate R/T in every layer and add delay outside the macro "if" by [@Dengda98](https://github.com/Dengda98) in [#161](https://github.com/Dengda98/PyGRT/pull/161) * DOC: “” by [@Dengda98](https://github.com/Dengda98) in [#162](https://github.com/Dengda98/PyGRT/pull/162) * REFAC: define the data type of the QWV-related arrays by [@Dengda98](https://github.com/Dengda98) in [#164](https://github.com/Dengda98/PyGRT/pull/164) * REFAC: define the data type of the INTEG-related arrays by [@Dengda98](https://github.com/Dengda98) in [#165](https://github.com/Dengda98/PyGRT/pull/165) * REFAC: rename data type `QWVgrid` and `INTEGgrid` by [@Dengda98](https://github.com/Dengda98) in [#166](https://github.com/Dengda98/PyGRT/pull/166) * REFAC: remove macro `GRT_QWV_NUM`, and some adjustments to the related date types. by [@Dengda98](https://github.com/Dengda98) in [#168](https://github.com/Dengda98/PyGRT/pull/168) * REFAC: use macro to manage static loop of ChnlGrid and IntegGrid by [@Dengda98](https://github.com/Dengda98) in [#169](https://github.com/Dengda98/PyGRT/pull/169) **Full Changelog**: [v0.12.0...v0.13.0](https://github.com/Dengda98/PyGRT/compare/v0.12.0...v0.13.0) ## PyGRT v0.12.0 + Support inpute distance file, like `grt greenfn -R ...` + Add the exact closed-form solution the first-kind Lamb problem. + Fix some typos in comments of test shell scripts. + Update documents, fix some typos. ### Pull requests * CI: use macos-15 for intel and arm64 arch by [@Dengda98](https://github.com/Dengda98) in [#111](https://github.com/Dengda98/PyGRT/pull/111) * FEAT: support input distance file by [@Dengda98](https://github.com/Dengda98) in [#112](https://github.com/Dengda98/PyGRT/pull/112) * add citation in README.md by [@Dengda98](https://github.com/Dengda98) in [#116](https://github.com/Dengda98/PyGRT/pull/116) * FEAT: exact closed-form solution for the Lamb problem of the first kind by [@Dengda98](https://github.com/Dengda98) in [#117](https://github.com/Dengda98/PyGRT/pull/117) * FEAT: update lamb1 interfaces by [@Dengda98](https://github.com/Dengda98) in [#118](https://github.com/Dengda98/PyGRT/pull/118) * DOC: add lamb1 (the first-kind Lamb problem) by [@Dengda98](https://github.com/Dengda98) in [#119](https://github.com/Dengda98/PyGRT/pull/119) **Full Changelog**: [v0.11.0...v0.12.0](https://github.com/Dengda98/PyGRT/compare/v0.11.0...v0.12.0) ## PyGRT v0.11.0 In this version, I have made **lots of enhancements** for future developments. From the user's perspective, mainly including: + support 4-column model (ignore Qp and Qs). + save static results in [NetCDF](https://www.unidata.ucar.edu/software/netcdf) format. + remove argument `prefix` to simplify the I/O of `syn`, `strain`, `stress` and `rotation`. + update usage of `-L` and `-K`. + add modules manual in Chinese. + rearrange the core code of R/T matrix. ### Pull requests * STYLE: add macro `GRT_SAFE_FREE_PTR(_ARRAY)` to safely free allocated memory by [@Dengda98](https://github.com/Dengda98) in [#63](https://github.com/Dengda98/PyGRT/pull/63) * FEAT: support 4-column model and use layer depth by [@Dengda98](https://github.com/Dengda98) in [#64](https://github.com/Dengda98/PyGRT/pull/64) * REFAC: split R/T functions into P-SV and SH by [@Dengda98](https://github.com/Dengda98) in [#65](https://github.com/Dengda98/PyGRT/pull/65) * DOC: fix some description typo in formula by [@Dengda98](https://github.com/Dengda98) in [#66](https://github.com/Dengda98/PyGRT/pull/66) * REFAC: Split source coefs into P-SV and SH by [@Dengda98](https://github.com/Dengda98) in [#67](https://github.com/Dengda98/PyGRT/pull/67) * FEAT: replace `sprintf` to `asprintf`, and define a macro by [@Dengda98](https://github.com/Dengda98) in [#68](https://github.com/Dengda98/PyGRT/pull/68) * REFAC: use struct and wrapped functions to organize FFTW behaviors by [@Dengda98](https://github.com/Dengda98) in [#69](https://github.com/Dengda98/PyGRT/pull/69) * FEAT: support upsampling factor in `greenfn -N` by [@Dengda98](https://github.com/Dengda98) in [#70](https://github.com/Dengda98/PyGRT/pull/70) * FEAT: support upsampling factor in `greenfn -N` (part 2) by [@Dengda98](https://github.com/Dengda98) in [#71](https://github.com/Dengda98/PyGRT/pull/71) * FIX: remove redundant process for last frequency point by [@Dengda98](https://github.com/Dengda98) in [#73](https://github.com/Dengda98/PyGRT/pull/73) * DOC: z by [@Dengda98](https://github.com/Dengda98) in [#75](https://github.com/Dengda98/PyGRT/pull/75) * REFAC: move headers to directory `include/grt/` and rename all public functions with prefix `grt` by [@Dengda98](https://github.com/Dengda98) in [#78](https://github.com/Dengda98/PyGRT/pull/78) * FEAT: remove struct `PYMODEL1D`, use struct `GRT_MODEL1D` globally by [@Dengda98](https://github.com/Dengda98) in [#79](https://github.com/Dengda98/PyGRT/pull/79) * REFAC: rename macros and global variables with prefix `GRT` by [@Dengda98](https://github.com/Dengda98) in [#80](https://github.com/Dengda98/PyGRT/pull/80) * REFAC: use macro for comment head '#', and add related helper function by [@Dengda98](https://github.com/Dengda98) in [#81](https://github.com/Dengda98/PyGRT/pull/81) * FEAT: rearange functions in `search.h/c` and `matrix.h`, with X macros by [@Dengda98](https://github.com/Dengda98) in [#82](https://github.com/Dengda98/PyGRT/pull/82) * REFAC: use macro `GRTRaiseError` by [@Dengda98](https://github.com/Dengda98) in [#83](https://github.com/Dengda98/PyGRT/pull/83) * FEAT: use `c` instead of `k` in definition of vertical wavenumber `a` and `b` by [@Dengda98](https://github.com/Dengda98) in [#84](https://github.com/Dengda98/PyGRT/pull/84) * DOC: add static R/T formula by [@Dengda98](https://github.com/Dengda98) in [#85](https://github.com/Dengda98/PyGRT/pull/85) * DOC: add SH wave R/T static formula by [@Dengda98](https://github.com/Dengda98) in [#86](https://github.com/Dengda98/PyGRT/pull/86) * DOC: fix static source coefficients by [@Dengda98](https://github.com/Dengda98) in [#87](https://github.com/Dengda98/PyGRT/pull/87) * FEAT: split delay matrix into a function by [@Dengda98](https://github.com/Dengda98) in [#88](https://github.com/Dengda98/PyGRT/pull/88) * FIX: fillup the elastic params before returning the reading model function by [@Dengda98](https://github.com/Dengda98) in [#89](https://github.com/Dengda98/PyGRT/pull/89) * FEAT: split delay matrix into a function (static) by [@Dengda98](https://github.com/Dengda98) in [#90](https://github.com/Dengda98/PyGRT/pull/90) * REFAC: rename some functions for better development by [@Dengda98](https://github.com/Dengda98) in [#92](https://github.com/Dengda98/PyGRT/pull/92) * STYLE: rename `b2a` and `k2a`, and move their `.c` files to `src/tools/` directory by [@Dengda98](https://github.com/Dengda98) in [#93](https://github.com/Dengda98/PyGRT/pull/93) * REFAC: update usage of `zeta` in `greenfn` by [@Dengda98](https://github.com/Dengda98) in [#94](https://github.com/Dengda98/PyGRT/pull/94) * FEAT: check unsorted layer depths by [@Dengda98](https://github.com/Dengda98) in [#95](https://github.com/Dengda98/PyGRT/pull/95) * FEAT: update usage of -K, -L, -G, remove -V by [@Dengda98](https://github.com/Dengda98) in [#97](https://github.com/Dengda98/PyGRT/pull/97) * FEAT: save static results in NetCDF format by [@Dengda98](https://github.com/Dengda98) in [#98](https://github.com/Dengda98/PyGRT/pull/98) * DOC: support 4-column model by [@Dengda98](https://github.com/Dengda98) in [#99](https://github.com/Dengda98/PyGRT/pull/99) * DOC: use term "pre-built" by [@Dengda98](https://github.com/Dengda98) in [#100](https://github.com/Dengda98/PyGRT/pull/100) * DOC: rearrange Tutorial toctree by [@Dengda98](https://github.com/Dengda98) in [#101](https://github.com/Dengda98/PyGRT/pull/101) * DOC: update English documents by [@Dengda98](https://github.com/Dengda98) in [#102](https://github.com/Dengda98/PyGRT/pull/102) * FEAT: remove `-P`, and simplify the input argument of `strain`, `stress` and `rotation` by [@Dengda98](https://github.com/Dengda98) in [#103](https://github.com/Dengda98/PyGRT/pull/103) * FEAT: remove `-P` (Part 2, static case) by [@Dengda98](https://github.com/Dengda98) in [#104](https://github.com/Dengda98/PyGRT/pull/104) * DOC: add modules manual by [@Dengda98](https://github.com/Dengda98) in [#105](https://github.com/Dengda98/PyGRT/pull/105) * DOC: update reference to module by [@Dengda98](https://github.com/Dengda98) in [#106](https://github.com/Dengda98/PyGRT/pull/106) * DOC: add annotation about narrow `nt*dt` by [@Dengda98](https://github.com/Dengda98) in [#107](https://github.com/Dengda98/PyGRT/pull/107) **Full Changelog**: [v0.10.0...v0.11.0](https://github.com/Dengda98/PyGRT/compare/v0.10.0...v0.11.0) ## PyGRT v0.10.0 This is a **major update** before releasing a _stable version_, primarily concerning the execution style of the C program (the Python interface remains unaffected). Recognizing that compiling multiple executables would **significantly hinder future maintenance and feature expansion**, and considering the current early-stage program isn't too complex yet, I decided to implement this change promptly. Inspired by [`Git`](https://git-scm.com/) and [`GMT`](https://www.generic-mapping-tools.org/) programs, **PyGRT** will now compile into just one executable — **`grt`** — starting with this version. Similar to GMT, it will invoke different modules to perform various computational functions, for example: ``` bash ## Calculate Green's functions (equivalent to the old 'grt' command) grt greenfn [arg1] [arg2] ... ## Synthesize theoretical seismograms (equivalent to the old 'grt.syn' command) grt syn [arg1] [arg2] ... ## Calculate static Green's functions (equivalent to the old 'stgrt' command) grt static greenfn [arg1] [arg2] ... ... ``` **`grt`** and each module's help documentation can be printed using `-h`. The [online documentation](https://pygrt.readthedocs.io/) has been updated accordingly, and all example scripts have been modified to reflect these changes. ### Pull requests * DOC: update installation and remove some unused `*.po` files by [@Dengda98](https://github.com/Dengda98) in [#52](https://github.com/Dengda98/PyGRT/pull/52) * FIX: allow zero Q^-1, and relevant attenuation scale equals 1.0 by [@Dengda98](https://github.com/Dengda98) in [#53](https://github.com/Dengda98/PyGRT/pull/53) * Run C-command `grt` like GMT-style by [@Dengda98](https://github.com/Dengda98) in [#55](https://github.com/Dengda98/PyGRT/pull/55) * FEAT: add grt -v to show the version by [@Dengda98](https://github.com/Dengda98) in [#56](https://github.com/Dengda98/PyGRT/pull/56) * FIX: update new command in `example/` scripts by [@Dengda98](https://github.com/Dengda98) in [#57](https://github.com/Dengda98/PyGRT/pull/57) * CI: add CFLAGS="-fPIC" in fftw builds in centos 7 docker by [@Dengda98](https://github.com/Dengda98) in [#58](https://github.com/Dengda98/PyGRT/pull/58) * STYLE: alyways display `static_` by [@Dengda98](https://github.com/Dengda98) in [#60](https://github.com/Dengda98/PyGRT/pull/60) * DOC: add changelog.md by [@Dengda98](https://github.com/Dengda98) in [#61](https://github.com/Dengda98/PyGRT/pull/61) * DOC: change switch color by [@Dengda98](https://github.com/Dengda98) in [#62](https://github.com/Dengda98/PyGRT/pull/62) * FIX: update new command in `docs/` scripts, and update their description in doc by [@Dengda98](https://github.com/Dengda98) in [#59](https://github.com/Dengda98/PyGRT/pull/59) **Full Changelog**: [v0.9.2...v0.10.0](https://github.com/Dengda98/PyGRT/compare/v0.9.2...v0.10.0) ## PyGRT v0.9.2 In Github Actions, use CentOS 7 docker to compile PyGRT, to support `glibc` >= 2.17 (ensure compatibility as much as possible). ### Pull requests * REFAC: some tiny change for downward compatibility by [@Dengda98](https://github.com/Dengda98) in [#50]([#50](https://github.com/Dengda98/PyGRT/pull/50)) * Bump to PyGRT v0.9.2 by [@Dengda98](https://github.com/Dengda98) in [#51](https://github.com/Dengda98/PyGRT/pull/51) **Full Changelog**: [v0.9.1...v0.9.2](https://github.com/Dengda98/PyGRT/compare/v0.9.1...v0.9.2) ## PyGRT v0.9.1 Bugfix release addressing issues in **v0.9.0**'s source located in liquid. Update recommended: `pip install --upgrade pygrt-kit` ### Pull requests * DOC: add note about near-field in FIM and SAFIM by [@Dengda98](https://github.com/Dengda98) in [#46](https://github.com/Dengda98/PyGRT/pull/46) * FEAT: update colorstr by [@Dengda98](https://github.com/Dengda98) in [#47](https://github.com/Dengda98/PyGRT/pull/47) * FIX: add some warning about source in liquid by [@Dengda98](https://github.com/Dengda98) in [#48](https://github.com/Dengda98/PyGRT/pull/48) * Bump to PyGRT v0.9.1 by [@Dengda98](https://github.com/Dengda98) in [#49](https://github.com/Dengda98/PyGRT/pull/49) **Full Changelog**: [v0.9.0...v0.9.1](https://github.com/Dengda98/PyGRT/compare/v0.9.0...v0.9.1) ## PyGRT v0.9.0 I'm very excited to announce the new release of **PyGRT v0.9.0** has supported for computing synthetic seismograms with **liquid layers**, with results validated against CPS330's `rspec96` module for accuracy. The [documentation](https://pygrt.readthedocs.io/zh-cn/dev/Formula/index.html) has been updated to include the corresponding formulas. This release is particularly useful for studies involving ocean. Upgrade via `pip install --upgrade pygrt-kit`. ### Pull requests * by [@Dengda98](https://github.com/Dengda98) in [#29](https://github.com/Dengda98/PyGRT/pull/29) * BUILD: fix makefile by [@Dengda98](https://github.com/Dengda98) in [#30](https://github.com/Dengda98/PyGRT/pull/30) * REFAC: update temp var for `R_EVL` to improve code readability by [@Dengda98](https://github.com/Dengda98) in [#31](https://github.com/Dengda98/PyGRT/pull/31) * DOC: add RT.rst and RT_formula.ipynb by [@Dengda98](https://github.com/Dengda98) in [#33](https://github.com/Dengda98/PyGRT/pull/33) * Support liquid layer by [@Dengda98](https://github.com/Dengda98) in [#34](https://github.com/Dengda98/PyGRT/pull/34) * add document about R/T matrix formula by [@Dengda98](https://github.com/Dengda98) in [#35](https://github.com/Dengda98/PyGRT/pull/35) * TEST: add compare_results_liquid example by [@Dengda98](https://github.com/Dengda98) in [#36](https://github.com/Dengda98/PyGRT/pull/36) * FIX: use nonzero minimum Vb in python by [@Dengda98](https://github.com/Dengda98) in [#37](https://github.com/Dengda98/PyGRT/pull/37) * allow zero vs for computing sythetic seismogram and stress by [@Dengda98](https://github.com/Dengda98) in [#38](https://github.com/Dengda98/PyGRT/pull/38) * FIX: raise error if receiver located on the interface where liquid exist by [@Dengda98](https://github.com/Dengda98) in [#39](https://github.com/Dengda98/PyGRT/pull/39) * TEST: add seafloor example by [@Dengda98](https://github.com/Dengda98) in [#40](https://github.com/Dengda98/PyGRT/pull/40) * DOC: add a note to support liquid layer by [@Dengda98](https://github.com/Dengda98) in [#41](https://github.com/Dengda98/PyGRT/pull/41) * REFAC: remove unused code by [@Dengda98](https://github.com/Dengda98) in [#42](https://github.com/Dengda98/PyGRT/pull/42) * DOC: add description about liquid layer supporting by [@Dengda98](https://github.com/Dengda98) in [#43](https://github.com/Dengda98/PyGRT/pull/43) * Bump to PyGRT v0.9.0 by [@Dengda98](https://github.com/Dengda98) in [#44](https://github.com/Dengda98/PyGRT/pull/44) * CI: add some tests by [@Dengda98](https://github.com/Dengda98) in [#45](https://github.com/Dengda98/PyGRT/pull/45) **Full Changelog**: [v0.8.0...v0.9.0](https://github.com/Dengda98/PyGRT/compare/v0.8.0...v0.9.0) ## PyGRT v0.8.0 I'm excited to announce that **now PyGRT supports Self-Adaptive Filon's Integration Method(SAFIM)**, a powerful tool to efficiently compute Green's Functions at large epicentral distances. ![image](https://pygrt.readthedocs.io/zh-cn/v0.8.0/_images/safim.png) ### Pull requests * Refactor codes, and support Self-Adaptive Filon's Integration Method (SAFIM) by [@Dengda98](https://github.com/Dengda98) in [#27](https://github.com/Dengda98/PyGRT/pull/27) * DOC: add SAFIM by [@Dengda98](https://github.com/Dengda98) in [#28](https://github.com/Dengda98/PyGRT/pull/28) **Full Changelog**: [v0.7.0...v0.8.0](https://github.com/Dengda98/PyGRT/compare/v0.7.0...v0.8.0) ## PyGRT v0.7.0 ### Pull requests * add English docs by [@Dengda98](https://github.com/Dengda98) in [#24](https://github.com/Dengda98/PyGRT/pull/24) * REMOVE: remove `iwk0` parameter by [@Dengda98](https://github.com/Dengda98) in [#25](https://github.com/Dengda98/PyGRT/pull/25) * update FIM (code and doc), add warning about `dk` in FIM by [@Dengda98](https://github.com/Dengda98) in [#26](https://github.com/Dengda98/PyGRT/pull/26) **Full Changelog**: [v0.6.0...v0.7.0](https://github.com/Dengda98/PyGRT/compare/v0.6.0...v0.7.0) ## PyGRT v0.6.0 ### Pull requests * DOC: add "strain and stress calculation" in Tutorial, and fix some typos by [@Dengda98](https://github.com/Dengda98) in [#16](https://github.com/Dengda98/PyGRT/pull/16) * Update stats file (kernel functions value in integration ) format, python reading functions, add `grt.k2a` command by [@Dengda98](https://github.com/Dengda98) [#17](https://github.com/Dengda98/PyGRT/pull/17) * DOC: add `integ_converg` in Toturial by [@Dengda98](https://github.com/Dengda98) [#18](https://github.com/Dengda98/PyGRT/pull/18) * FEAT: add dist in output of function `pygrt.utils.read_statsfile_ptam` by [@Dengda98](https://github.com/Dengda98) [#19](https://github.com/Dengda98/PyGRT/pull/19) * DOC: Refactor tutorial scripts and documentation for clarity and consistency by [@Dengda98](https://github.com/Dengda98) [#20](https://github.com/Dengda98/PyGRT/pull/20) * DOC: add `grt.travt` in Tutorial by [@Dengda98](https://github.com/Dengda98) [#21](https://github.com/Dengda98/PyGRT/pull/21) * add `read_kernels_freqs()` function, add "kernel frequency response" in Tutorial by [@Dengda98](https://github.com/Dengda98) [#22](https://github.com/Dengda98/PyGRT/pull/22) * Support rotation tensor calculation in both dynamic and static case by [@Dengda98](https://github.com/Dengda98) [#23](https://github.com/Dengda98/PyGRT/pull/23) **Full Changelog**: [v0.5.1...v0.6.0](https://github.com/Dengda98/PyGRT/compare/v0.5.1...v0.6.0) ![view_stats](https://github.com/Dengda98/PyGRT/raw/main/example/view_integ_stats/view_stats.png) ![imag_G](https://github.com/Dengda98/PyGRT/raw/main/example/kernel_freq_response/imag_G.png) ## PyGRT v0.5.1 + **Now both Python and C can compute displacement, strain and stress in dynamic and static cases.** + **Fix some math error and text error**, such as, unit mixing (`km` and `cm`) in spatial derivatives in Python, coordinate of moment tensor is NED (North, East, Downward) , ... + **Chinese document is available**, see [here](https://pygrt.readthedocs.io/zh-cn/). Thanks @xichaoqiang for revision. ### Pull requests * Support static displacements, strain and stress calculations in Python by [@Dengda98](https://github.com/Dengda98) in [#14](https://github.com/Dengda98/PyGRT/pull/14) * Build online docs, and upload to ReadtheDocs by [@Dengda98](https://github.com/Dengda98) in [#15](https://github.com/Dengda98/PyGRT/pull/15) > `docs/` folder has been removed from the following `*.tar.gz` **Full Changelog**: [v0.4.0...v0.5.1](https://github.com/Dengda98/PyGRT/compare/v0.4.0...v0.5.1) ## PyGRT v0.4.0 Now in C-level, **PyGRT** can compute **displacements, strain and stress in both dynamic and static case.** Python-level will follow up in later minor version. ### Pull requests * Rearrange directory of C source files by [@Dengda98](https://github.com/Dengda98) in [#6](https://github.com/Dengda98/PyGRT/pull/6) * FIX: segfault when call `write_stats` in `ptam.c` by [@Dengda98](https://github.com/Dengda98) in [#7](https://github.com/Dengda98/PyGRT/pull/7) * FEAT: support spatial derivatives of displacements by [@Dengda98](https://github.com/Dengda98) in [#9](https://github.com/Dengda98/PyGRT/pull/9) * add simple tool `grt.b2a` to convert waveforms data in SAC file into ASCII file. by [@Dengda98](https://github.com/Dengda98) in [#10](https://github.com/Dengda98/PyGRT/pull/10) * Add some features and fix some bugs about source signals by [@Dengda98](https://github.com/Dengda98) in [#11](https://github.com/Dengda98/PyGRT/pull/11) * Support stress and strain calculation by [@Dengda98](https://github.com/Dengda98) in [#12](https://github.com/Dengda98/PyGRT/pull/12) * Big update: Support static displacements calculation, Support strain and stress calculation for dynamic and static case by [@Dengda98](https://github.com/Dengda98) in [#13](https://github.com/Dengda98/PyGRT/pull/13) **Full Changelog**: [v0.2.0...v0.4.0](https://github.com/Dengda98/PyGRT/compare/v0.2.0...v0.4.0) ## PyGRT v0.2.0 Support Linux, MacOS and Windows - [x] Linux - [x] MacOS - [x] **Windows** ### Pull requests * Pre-compiled binary programs and Libraries on Linux, MacOS and **Windows**. You can simply run `pip install pygrt-kit` to install the new version. - Linux and MacOS. Dynamic library of `OpenMP` is needed, while in general it has already been included in `GNU` compiler. So if program complain that "libgomp.so not found" or python said "you may need other dependency", just add one step to install `OpenMP`. - **Native Windows!!** Different from Linux and MacOS, `OpenMP` are statically linked. You can just open a `cmd` (not `PowerShell`) or `Anaconda Prompt`, directly run the program. * Improve compatibility, and fix some bugs by [@Dengda98](https://github.com/Dengda98) in [#4](https://github.com/Dengda98/PyGRT/pull/4) **Full Changelog**: [v0.2.0](https://github.com/Dengda98/PyGRT/commits/v0.2.0)