Changelog
PyGRT v0.16.0
Release Surface-wave modules
eigenv
eigenfn
modsum
disp2asc
See documentation for details.
Pull requests
REFAC: add a boolean array in struct GRT_MODEL1D to indicate whether each layer is a liquid layer by @Dengda98 in #227
REFAC: split some kernel-related functions into P-SV and SH parts by @Dengda98 in #228
REFAC: remove members
src_coefD(U)from struct GRT_MODEL1D by @Dengda98 in #229REFAC: add member
srcrcv_isInsertedin struct GRT_MODEL1D by @Dengda98 in #231REFAC: for series of function “grt_get_layer_Dxx”, use struct GRT_MODEL1D to pass the args by @Dengda98 in #232
FIX: ModuleNotFoundError of ‘pkg_resources’ from obspy by @Dengda98 in #233
DOC: rename an unique math label to avoid overlapping from that in other files by @Dengda98 in #235
REFAC: just rename some temp vars for computing R/T matrix by @Dengda98 in #236
FEAT: set boundary condition in module
kernelby @Dengda98 in #237REFAC: split the model-related struct into two structs: MODEL1D and MODEL1D_STATE by @Dengda98 in #239
REFAC: add argument
isElasticin functiongrt_update_mod1d_state_omegaby @Dengda98 in #240REFAC: add “grnspec.h/c” to handle the Green Functions spectra by @Dengda98 in #242
FIX: cast numpy array type to ‘NPCT_REAL_TYPE’ explicitly by @Dengda98 in #244
STYLE: update information in logo window by @Dengda98 in #245
fix: sanitize subprocess call in gmtplot.py by @orbisai0security in #246
TEST: move the test data to another repo by @Dengda98 in #248
FEAT: add modules for Surface-wave simulation by @Dengda98 in #249
DOC: revise bibliography and citation style in document by @Dengda98 in #250
FEAT: replace -Z and -O with -W in eigenfn by @Dengda98 in #252
FEAT: rename eigv2asc to disp2asc, support -C for phase-vel dispersion and -U for group-vel dispersion by @Dengda98 in #253
DOC: add manuals for several surface-wave modules by @Dengda98 in #254
BUILD: avoid using formats like “-l:libXYZ.a” to link libraries in Mac by @Dengda98 in #255
Build(deps): Bump actions/setup-python from 4 to 6 by @dependabot[bot] in #258
Build(deps): Bump softprops/action-gh-release from 1 to 3 by @dependabot[bot] in #256
Build(deps): Bump actions/checkout from 3 to 6 by @dependabot[bot] in #260
Build(deps): Bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #259
Build(deps): Bump actions/download-artifact from 4 to 8 by @dependabot[bot] in #257
DOC: rename “explain_-s.rst_” for case-insensitive system by @Dengda98 in #261
DOC: update some example scripts for MACOS by @Dengda98 in #262
DOC: add tutorials for surface-wave modules by @Dengda98 in #263
Full Changelog: 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: -Rr1/r2/dr|r1,r2,…|filefix some typos and add some tests in documents
fix some bugs
Pull requests
DOC: tension source in module
(static_)synby @Dengda98 in #206TEST: add ex15, compare static soultion and 0-freq dynamic solution by @Dengda98 in #209
FEAT: support Free, Rigid and Halfspace boundary condition by @Dengda98 in #212
DOC: formula for Free, Rigid and Halfspace boundary condition by @Dengda98 in #213
DOC: description and test for boundary condition by @Dengda98 in #214
FIX: discard argument
allowLiquidin functionPyModel1D.__init__()by @Dengda98 in #218FEAT: support skip amplitude compensation from imaginary frequency by @Dengda98 in #219
FEAT: support set delay time related to the first P arrival by @Dengda98 in #220
FEAT: avoid repetitive computation due to the same epicentral distances in static solution by @Dengda98 in #221
DOC: update Doxygen configuration to treat
.hfiles as C language and set default domain by @Dengda98 in #223FEAT: set the max frequency as the attenuation reference frequency by @Dengda98 in #224
FEAT: support set new XY grid for static results by @Dengda98 in #225
FEAT: update -R in module
(static_)greenfnby @Dengda98 in #226
Full Changelog: v0.14.0…v0.15.0
PyGRT v0.14.0
add new module
kernelsupport “Direct Convergence Method” proposed by Zhu et al. (2026)
a more clearer way to select integration method and convergence method, see document about
-Land-Cingreenfnmodulerearrange documents and add gallery
fix column name from
ker2ascmodulesave z-derivative kernels when set
-eorcalc_upar=True
Pull requests
DOC: a consistent way to run all scripts for document building by @Dengda98 in #171
DOC: update document for new module
kernelby @Dengda98 in #173DOC: add extension “sphinx_last_updated_by_git” by @Dengda98 in #174
REFAC: move some functions from
util.ctogrt_greenfn.cas static functions by @Dengda98 in #176DOC: remove “:updated_date:” in each .rst files by @Dengda98 in #177
DOC: global last-updated date for homepage by @Dengda98 in #175
FIX: initialize instead of copy K_INTEG in fim.c and safim.c by @Dengda98 in #178
FEAT: a more convenient way to choose k-integral method by @Dengda98 in #179
FEAT: save z-derivative kernels when set
-eorcalc_upar=Trueby @Dengda98 in #180FIX: in ker2asc, wrong column names of PTAM’s statsfile by @Dengda98 in #186
FEAT: support Direct Convergence Method by @Dengda98 in #185
DOC: clean outputs of scripts and fix some typos by @Dengda98 in #187
FIX: keep receiver upward when source and receiver are at the same depth by @Dengda98 in #188
DOC: update document to clarify the options for the convergence method and provide relevant explanations by @Dengda98 in #189
REFAC: rearrange SACIO in
greenfnandsynby @Dengda98 in #195REFAC: some macros about error checking by @Dengda98 in #197
DOC: show version in the title of ducument homepage by @Dengda98 in #198
REFAC: use English in Python functions document by @Dengda98 in #199
DOC: update citation and reference link by @Dengda98 in #200
TEST: add shallow source test for DCM and PTAM by @Dengda98 in #201
Full Changelog: 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-1ingreenfnmodule, simplify-Scan represent all indexes. Same as Python.add
lamb1module for solving the first-kind Lamb’s problem using Feng and Zhang’s solution, and add a brief document to show how to use it.supplement the formulas in document, see new formula.
add an automatic scheme to avoid waveform drifting, see new document.
Pull requests
DOC: Fix typo (custom time function option)
-D0/fileby @Dengda98 in #121DOC: update help message of
lamb1module by @Dengda98 in #123TEST: create
/test, specifically for the testing in Github Actions by @Dengda98 in #122REFAC: use struct
RT_MATRIXto manage the R/T coefficent matrices, and simplify function arguments by @Dengda98 in #127REFAC: add argument
kin functiongrt_mod1d_xa_xb, and remove extraomegain functions about dwm, fim, safim and ptam by @Dengda98 in #128REFAC: remove function argument
stats, move it to the struct by @Dengda98 in #129REFAC: rename type, use
real_tandcplx_tby @Dengda98 in #131REFAC: remove type
MYINT, useintandsize_tby @Dengda98 in #132REFAC: replace remained
doublewithreal_tby @Dengda98 in #133FIX: in greenfn, update usage
-S-1to-Sby @Dengda98 in #134FIX: integer type conversion between
intandsize_tby @Dengda98 in #135FEAT: in
lamb1, add two functions to solve two-type Rayleigh equations by @Dengda98 in #136BUILD: multi-threads building via
make -j4by @Dengda98 in #137REFAC: create a kernel template for dynamic and static kernel by @Dengda98 in #139
FEAT: adjust function
grt_cmat2x2_inv, move argumentstatsto the returned value by @Dengda98 in #144REFAC: assemble source coefficients functions of P-SV and SH by @Dengda98 in #140
REFAC: move Generalized R/T matrix to struct
GRT_MODEL1Dby @Dengda98 in #146REFAC: optimize memory initialization by replacing the loop-based zeroing with
memsetby @Dengda98 in #148REFAC: add GCC_ALWAYS_INLINE qualifier to inline functions by @Dengda98 in #149
REFAC: avoid repeated
_divdcin grt_RT_matrix_ss_PSV by @Dengda98 in #150DOC: add an intro and simplify the homepage by @Dengda98 in #152
DOC: new style for displaying the author and date by @Dengda98 in #153
FEAT: add function
grt_delay_GRT_matrixto avoid repeated recursion in dynamic case by @Dengda98 in #151REFAC: adjust the file locations of the “travt” module by @Dengda98 in #154
FEAT: split the original kernel function into functions
GRT_matrixandGRT_build_QWVby @Dengda98 in #156REFAC: remove obsolete macros in kernel definition by @Dengda98 in #157
FIX: skip the complex frequency points with lower amplitudes by @Dengda98 in #158
DOC: set more suitable parameters for f-v spectra visualization by @Dengda98 in #160
FIX: re-initiate R/T in every layer and add delay outside the macro “if” by @Dengda98 in #161
REFAC: define the data type of the QWV-related arrays by @Dengda98 in #164
REFAC: define the data type of the INTEG-related arrays by @Dengda98 in #165
REFAC: rename data type
QWVgridandINTEGgridby @Dengda98 in #166REFAC: remove macro
GRT_QWV_NUM, and some adjustments to the related date types. by @Dengda98 in #168REFAC: use macro to manage static loop of ChnlGrid and IntegGrid by @Dengda98 in #169
Full Changelog: v0.12.0…v0.13.0
PyGRT v0.12.0
Support inpute distance file, like
grt greenfn -R<file> ...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 in #111
FEAT: exact closed-form solution for the Lamb problem of the first kind by @Dengda98 in #117
DOC: add lamb1 (the first-kind Lamb problem) by @Dengda98 in #119
Full Changelog: 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 format.
remove argument
prefixto simplify the I/O ofsyn,strain,stressandrotation.update usage of
-Land-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 in #63FEAT: support 4-column model and use layer depth by @Dengda98 in #64
REFAC: split R/T functions into P-SV and SH by @Dengda98 in #65
DOC: fix some description typo in formula by @Dengda98 in #66
REFAC: Split source coefs into P-SV and SH by @Dengda98 in #67
FEAT: replace
sprintftoasprintf, and define a macro by @Dengda98 in #68REFAC: use struct and wrapped functions to organize FFTW behaviors by @Dengda98 in #69
FEAT: support upsampling factor in
greenfn -Nby @Dengda98 in #70FEAT: support upsampling factor in
greenfn -N(part 2) by @Dengda98 in #71FIX: remove redundant process for last frequency point by @Dengda98 in #73
REFAC: move headers to directory
include/grt/and rename all public functions with prefixgrtby @Dengda98 in #78FEAT: remove struct
PYMODEL1D, use structGRT_MODEL1Dglobally by @Dengda98 in #79REFAC: rename macros and global variables with prefix
GRTby @Dengda98 in #80REFAC: use macro for comment head ‘#’, and add related helper function by @Dengda98 in #81
FEAT: rearange functions in
search.h/candmatrix.h, with X macros by @Dengda98 in #82FEAT: use
cinstead ofkin definition of vertical wavenumberaandbby @Dengda98 in #84FEAT: split delay matrix into a function by @Dengda98 in #88
FIX: fillup the elastic params before returning the reading model function by @Dengda98 in #89
FEAT: split delay matrix into a function (static) by @Dengda98 in #90
REFAC: rename some functions for better development by @Dengda98 in #92
STYLE: rename
b2aandk2a, and move their.cfiles tosrc/tools/directory by @Dengda98 in #93FEAT: update usage of -K, -L, -G, remove -V by @Dengda98 in #97
FEAT: save static results in NetCDF format by @Dengda98 in #98
FEAT: remove
-P<prefix>, and simplify the input argument ofstrain,stressandrotationby @Dengda98 in #103FEAT: remove
-P<prefix>(Part 2, static case) by @Dengda98 in #104
Full Changelog: 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 and GMT 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:
## 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 has been updated accordingly, and all example scripts have been modified to reflect these changes.
Pull requests
DOC: update installation and remove some unused
*.pofiles by @Dengda98 in #52FIX: allow zero Q^-1, and relevant attenuation scale equals 1.0 by @Dengda98 in #53
FIX: update new command in
example/scripts by @Dengda98 in #57CI: add CFLAGS=”-fPIC” in fftw builds in centos 7 docker by @Dengda98 in #58
FIX: update new command in
docs/scripts, and update their description in doc by @Dengda98 in #59
Full Changelog: 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
Full Changelog: 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 in #46
FIX: add some warning about source in liquid by @Dengda98 in #48
Full Changelog: 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 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
REFAC: update temp var for
R_EVLto improve code readability by @Dengda98 in #31TEST: add compare_results_liquid example by @Dengda98 in #36
allow zero vs for computing sythetic seismogram and stress by @Dengda98 in #38
FIX: raise error if receiver located on the interface where liquid exist by @Dengda98 in #39
DOC: add description about liquid layer supporting by @Dengda98 in #43
Full Changelog: 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.

Pull requests
Full Changelog: v0.7.0…v0.8.0
PyGRT v0.7.0
Pull requests
Full Changelog: 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 in #16
Update stats file (kernel functions value in integration ) format, python reading functions, add
grt.k2acommand by @Dengda98 #17FEAT: add dist in output of function
pygrt.utils.read_statsfile_ptamby @Dengda98 #19DOC: Refactor tutorial scripts and documentation for clarity and consistency by @Dengda98 #20
add
read_kernels_freqs()function, add “kernel frequency response” in Tutorial by @Dengda98 #22Support rotation tensor calculation in both dynamic and static case by @Dengda98 #23
Full Changelog: v0.5.1…v0.6.0

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 (
kmandcm) in spatial derivatives in Python, coordinate of moment tensor is NED (North, East, Downward) , …Chinese document is available, see here. Thanks @xichaoqiang for revision.
Pull requests
Support static displacements, strain and stress calculations in Python by @Dengda98 in #14
Build online docs, and upload to ReadtheDocs by @Dengda98 in #15
docs/folder has been removed from the following*.tar.gz
Full Changelog: 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
FIX: segfault when call
write_statsinptam.cby @Dengda98 in #7FEAT: support spatial derivatives of displacements by @Dengda98 in #9
add simple tool
grt.b2ato convert waveforms data in SAC file into ASCII file. by @Dengda98 in #10Add some features and fix some bugs about source signals by @Dengda98 in #11
Big update: Support static displacements calculation, Support strain and stress calculation for dynamic and static case by @Dengda98 in #13
Full Changelog: 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-kitto install the new version.Linux and MacOS. Dynamic library of
OpenMPis needed, while in general it has already been included inGNUcompiler. So if program complain that “libgomp.so not found” or python said “you may need other dependency”, just add one step to installOpenMP.Native Windows!!
Different from Linux and MacOS,OpenMPare statically linked. You can just open acmd(notPowerShell) orAnaconda Prompt, directly run the program.
Full Changelog: v0.2.0