:author: 朱邓达 :date: 2025-12-01 简介 ============= **PyGRT** 是什么? -------------------------- **PyGRT** 是一个用于计算半无限水平层状介质中理论地震图的 **C/Python** 程序包。 **GRT** 指代的是程序包的主要理论基础为广义反射透射系数矩阵法 (**G**\eneralized **R**\eflection-**T**\ransmission coefficient matrix), 但不局限于该方法。同时 **grt** 也是 C 语言实现的可执行文件名。 目前, **PyGRT** 可实现: + **计算位移及其空间导数** (动态解和静态解) + **计算应力、应变、旋转张量** (动态解和静态解) + **多个辅助计算模块,如保存核函数,求解Lamb问题等** .. figure:: _static/yaobook_cover.jpg :width: 50% :align: center **PyGRT** 可实现《理论地震图方法及其应用》中绝大部分的计算过程及算例。 该书为姚振兴院士和谢小碧研究员撰写的地震学著作, **PyGRT** 已成为该书推荐的开源程序包。 **PyGRT** 运行平台 --------------------------------------- **PyGRT** 发布了二进制安装包,支持在 **Windows, Linux, MacOS** 中直接下载使用,无需编译。 **PyGRT** 程序特点 --------------------------- 1. **C语言的高效 + Python语言的便捷** + **底层复杂运算完全由 C 语言重新实现**,并基于 `OpenMP `_ 进行并行优化,极大提升计算效率。 + C 代码被编译链接成动态库 ``libgrt.so`` , **PyGRT** 再基于 Python 的 `ctypes `_ 标准库实现对 C 库函数的调用。 再基于第三方库 `NumPy `_ 、 `SciPy `_ 和 `ObsPy `_ ,用户可很方便地完成对 C 程序结果的数据整合、 Fourier 变换、卷积、滤波、保存到 sac 文件等操作(例如 FFT 点数不再强制要求 2 次幂)。 借用 Python 语言的特点以及丰富成熟的第三方库,用户可灵活地实现后续的各种数据处理。 2. **C 程序 grt** 尽管程序包名以 **Py** 打头,但仍然使用 C 语言编译了可执行文件 **grt** , 支持以命令行传参的风格运行程序。 这使得用户既可以编写 Python 脚本,也可以在终端运行 **grt** 的形式来调用程序进行计算。 3. **模块化** + **PyGRT** 遵循模块化设计思想,不同计算模块和处理函数划分在不同模块中, 使用不同的源文件和头文件管理。方便后续代码维护和功能扩展。 + 受画图程序 |GMT| 的启发, **grt** 程序也以模块化的形式调用不同计算模块。 4. **明确的中文注释** 我在代码中对计算过程给出了明确的中文注释以及相关的公式索引, **所有公式索引(除非特别指明)均来自** |yao2026p| 。 代码基本按照公式推导的计算逻辑,在不过多损失计算效率的前提下进行适当优化,保证了代码的可读性。 若你对具体实现过程感兴趣,尤其是对方法的具体实现流程困惑时,可以在运行程序的同时结合阅读相关 **C代码** , 希望能给学习过程中的你提供一些参考,解答一些疑惑。仅是我浅薄的理解,仅作参考,欢迎指正。 5. **多种优化的计算方法** - **当震中距** :math:`r` **很大时** : + **基于线性插值的Filon积分法** (|ji1995|; |yao2026|) + **自适应Filon积分法** (|chen2001|; |zhang2021|) - **当震源深度和台站深度很接近时**。 + **峰谷平均法** (|zhang2003|; |zhang2021|) + **直接收敛法** (|dcm2025|) - **含低速层模型的面波频散计算** : + **自适应搜根策略** |ars2026| 6. **开源透明,持续维护** **PyGRT** 开源在 `Github `_ ,将持续公开维护并扩展相关的计算功能。 欢迎用户提交 bug 报告、申请新功能等,也欢迎提交贡献。 .. _reference: 参考文献 ------------ 如果你的研究中使用了 **PyGRT** 程序,请引用以下相关文章: + **PyGRT** 程序包。 由于审稿过程中程序在不断扩展完善,目前程序的功能已超过该文章的叙述范围,具体功能详见本文档。 Zhu, D., Wang, J., Hao, J., Yao, S., Xu, Y., Xu, T., and Yao, Z. (2025a). PyGRT: An Efficient and Integrated Python Package for Computing Synthetic Seismograms in a Layered Half-Space Model. Seismological Research Letters, 97(3), 2138–2153. doi: `10.1785/0220250057 `_ + **直接收敛法** Zhu, D., Xu, T., Hao, J., and Yao, Z. (2025b). A Direct Convergence Method for Computing Synthetic Seismograms for a Layered Half-space with Sources and Receivers at Close Depths. Bulletin of the Seismological Society of America, 116(2), 576–588. doi: `10.1785/0120250190 `_ + **自适应搜根算法** Zhu, D., Xu, T., Hao, J., and Yao, Z. (2026). An Adaptive Strategy for Robust and Efficient Computation of Dispersion Curves in a Layered Half-Space. Bulletin of the Seismological Society of America. doi: `10.1785/0120260071 `_ 如果你对相关理论方法感兴趣, **PyGRT** 主要参考了以下文章和书籍: + Aki, Keiiti, and Richards P. G. 2009. Quantitative Seismology (2nd edition). + Kennett, B. L. N., and Kerry N. J., 1979. Seismic waves in a stratified half space. Geophysical Journal International, 57(3), 557–583. `(link) `_ + Bouchon M. 1981. A simple method to calculate Green's functions for elastic layered media. Bulletin of the Seismological Society of America, 71(4), 959–971. `(link) `_ + Yao Z., and Harkrider, D. G. 1983. A generalized refelection-transmission coefficient matrix and discrete wavenumber method for synthetic seismograms. Bulletin of the Seismological Society of America, 73(6), 1685-1699. `(link) `_ + Chen, X., and Zhang, H., 2001. An Efficient Method for Computing Green’s Functions for a Layered Half-Space at Large Epicentral Distances. Bulletin of the Seismological Society of America, 91(4), 858–869. `(link) `_ + Zhang, H. M., Chen, X. F., and Chang, S. 2003. An efficient numerical method for computing synthetic seismograms for a layered half-space with sources and receivers at close or same depths. Seismic motion, lithospheric structures, earthquake and volcanic sources: The Keiiti Aki volume, 467-486. `(link) `_ + 谢小碧, 姚振兴, 1989. 计算分层介质中位错点源静态位移场的广义反射、透射系数矩阵和离散波数方法[J]. 地球物理学报, 32(3): 270-280. `(link) `_ + 纪晨, 姚振兴, 1995. 区域地震范围的宽频带理论地震图算法研究[J]. 地球物理学报, 38(4): 460-468. `(link) `_ + 张海明 著. 2021. 地震学中的Lamb问题(上). 科学出版社. `(link) `_ + 张海明, 冯禧 著. 2024. 地震学中的Lamb问题(下). 科学出版社. `(link) `_ + 姚振兴, 谢小碧 著. 2026. 理论地震图方法及其应用. 科学出版社. `(link) `_