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 #229

  • REFAC: add member srcrcv_isInserted in struct GRT_MODEL1D by @Dengda98 in #231

  • REFAC: 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 kernel by @Dengda98 in #237

  • REFAC: split the model-related struct into two structs: MODEL1D and MODEL1D_STATE by @Dengda98 in #239

  • REFAC: add argument isElastic in function grt_update_mod1d_state_omega by @Dengda98 in #240

  • REFAC: reorganize and update “grt.h” by @Dengda98 in #241

  • REFAC: add “grnspec.h/c” to handle the Green Functions spectra by @Dengda98 in #242

  • DOC: update reference to by @Dengda98 in #243

  • 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

  • DOC: update citation by @Dengda98 in #247

  • 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

  • DOC: add doi of Zhu et al., (2026) by @Dengda98 in #251

  • 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

  • DOC: update layout of gallery by @Dengda98 in #264

  • DOC: by @Dengda98 in #265

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,…|file

  • fix some typos and add some tests in documents

  • fix some bugs

Pull requests

  • FEAT: support Tension source by @Dengda98 in #204

  • TEST: tension source by @Dengda98 in #205

  • DOC: tension source in module (static_)syn by @Dengda98 in #206

  • TEST: 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 allowLiquid in function PyModel1D.__init__() by @Dengda98 in #218

  • FEAT: 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 .h files as C language and set default domain by @Dengda98 in #223

  • FEAT: 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_)greenfn by @Dengda98 in #226

Full Changelog: 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 in #170

  • DOC: a consistent way to run all scripts for document building by @Dengda98 in #171

  • FEAT: add module kernel by @Dengda98 in #172

  • DOC: update document for new module kernel by @Dengda98 in #173

  • DOC: add extension “sphinx_last_updated_by_git” by @Dengda98 in #174

  • REFAC: move some functions from util.c to grt_greenfn.c as static functions by @Dengda98 in #176

  • DOC: 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 -e or calc_upar=True by @Dengda98 in #180

  • DOC: rearrange “Advanced” documents by @Dengda98 in #183

  • FIX: 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

  • DOC: add DCM document by @Dengda98 in #191

  • DOC: build Gallery by @Dengda98 in #192

  • DOC: add k_integ chart by @Dengda98 in #193

  • REFAC: rearrange SACIO in greenfn and syn by @Dengda98 in #195

  • REFAC: 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

  • DOC: display SVG-format figures by @Dengda98 in #202

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-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 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

  • FIX: import version by @Dengda98 in #120

  • DOC: Fix typo (custom time function option) -D0/file by @Dengda98 in #121

  • DOC: update help message of lamb1 module by @Dengda98 in #123

  • TEST: create /test, specifically for the testing in Github Actions by @Dengda98 in #122

  • CI: simplify test_project by @Dengda98 in #124

  • TEST: avoid ZeroError in static test by @Dengda98 in #125

  • REFAC: use struct RT_MATRIX to manage the R/T coefficent matrices, and simplify function arguments by @Dengda98 in #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 in #128

  • REFAC: remove function argument stats, move it to the struct by @Dengda98 in #129

  • REFAC: rename type, use real_t and cplx_t by @Dengda98 in #131

  • REFAC: remove type MYINT, use int and size_t by @Dengda98 in #132

  • REFAC: replace remained double with real_t by @Dengda98 in #133

  • FIX: in greenfn, update usage -S-1 to -S by @Dengda98 in #134

  • FIX: integer type conversion between int and size_t by @Dengda98 in #135

  • FEAT: in lamb1, add two functions to solve two-type Rayleigh equations by @Dengda98 in #136

  • BUILD: multi-threads building via make -j4 by @Dengda98 in #137

  • REFAC: create a kernel template for dynamic and static kernel by @Dengda98 in #139

  • DOC: ——DS0 by @Dengda98 in #141

  • FEAT: adjust function grt_cmat2x2_inv, move argument stats to the returned value by @Dengda98 in #144

  • REFAC: assemble source coefficients functions of P-SV and SH by @Dengda98 in #140

  • REFAC: move Generalized R/T matrix to struct GRT_MODEL1D by @Dengda98 in #146

  • TEST: add ocean-earth model test by @Dengda98 in #143

  • REFAC: optimize memory initialization by replacing the loop-based zeroing with memset by @Dengda98 in #148

  • REFAC: add GCC_ALWAYS_INLINE qualifier to inline functions by @Dengda98 in #149

  • REFAC: avoid repeated _divdc in grt_RT_matrix_ss_PSV by @Dengda98 in #150

  • DOC: 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_matrix to avoid repeated recursion in dynamic case by @Dengda98 in #151

  • REFAC: adjust the file locations of the “travt” module by @Dengda98 in #154

  • REFAC: rearrange kernel template by @Dengda98 in #155

  • FEAT: split the original kernel function into functions GRT_matrix and GRT_build_QWV by @Dengda98 in #156

  • REFAC: remove obsolete macros in kernel definition by @Dengda98 in #157

  • FIX: skip the complex frequency points with lower amplitudes by @Dengda98 in #158

  • FIX: MILROW model thickness by @Dengda98 in #159

  • 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

  • DOC: “” by @Dengda98 in #162

  • 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 QWVgrid and INTEGgrid by @Dengda98 in #166

  • REFAC: remove macro GRT_QWV_NUM, and some adjustments to the related date types. by @Dengda98 in #168

  • REFAC: 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

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 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 in #63

  • FEAT: 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 sprintf to asprintf, and define a macro by @Dengda98 in #68

  • REFAC: use struct and wrapped functions to organize FFTW behaviors by @Dengda98 in #69

  • FEAT: support upsampling factor in greenfn -N by @Dengda98 in #70

  • FEAT: support upsampling factor in greenfn -N (part 2) by @Dengda98 in #71

  • FIX: remove redundant process for last frequency point by @Dengda98 in #73

  • DOC: z by @Dengda98 in #75

  • REFAC: move headers to directory include/grt/ and rename all public functions with prefix grt by @Dengda98 in #78

  • FEAT: remove struct PYMODEL1D, use struct GRT_MODEL1D globally by @Dengda98 in #79

  • REFAC: rename macros and global variables with prefix GRT by @Dengda98 in #80

  • REFAC: use macro for comment head ‘#’, and add related helper function by @Dengda98 in #81

  • FEAT: rearange functions in search.h/c and matrix.h, with X macros by @Dengda98 in #82

  • REFAC: use macro GRTRaiseError by @Dengda98 in #83

  • FEAT: use c instead of k in definition of vertical wavenumber a and b by @Dengda98 in #84

  • DOC: add static R/T formula by @Dengda98 in #85

  • DOC: add SH wave R/T static formula by @Dengda98 in #86

  • DOC: fix static source coefficients by @Dengda98 in #87

  • FEAT: 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 b2a and k2a, and move their .c files to src/tools/ directory by @Dengda98 in #93

  • REFAC: update usage of zeta in greenfn by @Dengda98 in #94

  • FEAT: check unsorted layer depths by @Dengda98 in #95

  • FEAT: update usage of -K, -L, -G, remove -V by @Dengda98 in #97

  • FEAT: save static results in NetCDF format by @Dengda98 in #98

  • DOC: support 4-column model by @Dengda98 in #99

  • DOC: use term “pre-built” by @Dengda98 in #100

  • DOC: rearrange Tutorial toctree by @Dengda98 in #101

  • DOC: update English documents by @Dengda98 in #102

  • FEAT: remove -P<prefix>, and simplify the input argument of strain, stress and rotation by @Dengda98 in #103

  • FEAT: remove -P<prefix> (Part 2, static case) by @Dengda98 in #104

  • DOC: add modules manual by @Dengda98 in #105

  • DOC: update reference to module by @Dengda98 in #106

  • DOC: add annotation about narrow nt*dt by @Dengda98 in #107

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 *.po files by @Dengda98 in #52

  • FIX: allow zero Q^-1, and relevant attenuation scale equals 1.0 by @Dengda98 in #53

  • Run C-command grt like GMT-style by @Dengda98 in #55

  • FEAT: add grt -v to show the version by @Dengda98 in #56

  • FIX: update new command in example/ scripts by @Dengda98 in #57

  • CI: add CFLAGS=”-fPIC” in fftw builds in centos 7 docker by @Dengda98 in #58

  • STYLE: alyways display static_<name> by @Dengda98 in #60

  • DOC: add changelog.md by @Dengda98 in #61

  • DOC: change switch color by @Dengda98 in #62

  • 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

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

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.

image

Pull requests

  • Refactor codes, and support Self-Adaptive Filon’s Integration Method (SAFIM) by @Dengda98 in #27

  • DOC: add SAFIM by @Dengda98 in #28

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.k2a command by @Dengda98 #17

  • DOC: add integ_converg in Toturial by @Dengda98 #18

  • FEAT: add dist in output of function pygrt.utils.read_statsfile_ptam by @Dengda98 #19

  • DOC: Refactor tutorial scripts and documentation for clarity and consistency by @Dengda98 #20

  • DOC: add grt.travt in Tutorial by @Dengda98 #21

  • add read_kernels_freqs() function, add “kernel frequency response” in Tutorial by @Dengda98 #22

  • Support rotation tensor calculation in both dynamic and static case by @Dengda98 #23

Full Changelog: v0.5.1…v0.6.0

view_stats imag_G

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. 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

  • Rearrange directory of C source files by @Dengda98 in #6

  • FIX: segfault when call write_stats in ptam.c by @Dengda98 in #7

  • FEAT: support spatial derivatives of displacements by @Dengda98 in #9

  • add simple tool grt.b2a to convert waveforms data in SAC file into ASCII file. by @Dengda98 in #10

  • Add some features and fix some bugs about source signals by @Dengda98 in #11

  • Support stress and strain calculation by @Dengda98 in #12

  • 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-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 in #4

Full Changelog: v0.2.0