:author: 朱邓达
:date: 2025-04-17
:updated_date: 2025-09-22
准备工作
=============
**PyGRT** 程序包由C和Python两个编程语言的代码组成,目的是兼并高效性和便捷性。
底层复杂运算由C语言编写,编译链接成动态库 ``libgrt.so`` 供Python调用。Python通过 ``ctypes`` 库导入动态库以使用外部函数,以此兼并了C语言的高效和Python语言的便捷。
除了Python脚本式运行, **PyGRT** 保留传统命令行式运行C程序 :command:`grt` 。
受 `GMT `_ 的启发, :command:`grt` 程序对多个计算功能使用模块化管理,
可使用类似于以下格式来运行程序。每个模块可使用 ``-h`` 查看帮助。
.. code-block:: C
grt []
**C程序的运行独立于Python,不需要Python环境,从而满足了更多计算场景。**
入门部分包含一些示例与说明,可快速上手。Github主页的 :rst:dir:`example/` 文件夹中有更多示例,可在 `Github Releases `_ 中下载。
建立模型文件
--------------------
.. image:: mod.svg
:align: center
这里的选项卡 **C** 不代表内部是C语言代码,而是 **使用C程序** :command:`grt` 。后续的选项卡沿用此设定,不再解释。
.. tabs::
.. tab:: C
**PyGRT** 以如下自由格式定义模型中每层的物性参数,每列之间以空格隔开(最后两列的 Qp, Qs 可省略)
.. code-block:: text
Thickness(km) Vp(km/s) Vs(km/s) Rho(g/cm^3) [Qp] [Qs]
例如 :file:`milrow` 模型(假设文本文件名为 `milrow` )
.. literalinclude:: dynamic/run/milrow
:language: text
.. tab:: Python
模型格式与C一致,在Python中可以使用 :code:`np.loadtxt()` 导入文本文件,或者手动定义数组
.. literalinclude:: dynamic/run/run.py
:language: python
:start-after: START BUILD MODEL
:end-before: END BUILD MODEL
.. note::
最后一行表示半空间,对应厚度值不会被使用。
.. note::
Vs 设置为 0 表示该层为液体层。