PyFMM 文档

项目主页

Author:

Zhu Dengda

Email:

zhudengda@mail.iggcas.ac.cn

pic1 pic2


PyFMM : 基于 Fast Marching/Sweeping Method 求解程函方程 \(|\nabla T|^2 = s^2\) 的程序包。 代码根据 主要参考 中详述的原理进行实现,其中 Fast Sweeping 及其并行方法 基于 (Zhao, 2004)(Zhao, 2007)

我主要使用该代码计算地震波从震源出发在复杂介质中传播形成的初至波走时场, 并使用梯度下降获得满足费马原理的射线路径,故代码中的一些术语偏专业性。 类似的原理也可用于其它方面,如计算点到曲线/面的距离,或光学、电磁学等。

At present, PyFMM can run on

Linux
macOS
Windows

我还制作了一个简易图形界面 PyFMM-GUI 计算二维走时场,初学者可更好的理解射线追踪,也可更方便、直观地看到不同速度场下射线的 扭曲形态。

gif_example
  • Python语言的便携、可扩展性与C语言的计算高效特点结合。 C程序被编译链接成动态库 libfmm.soPyFMM 再基于Python的 ctypes 标准库实现对C库函数的调用。再基于第三方库 NumPySciPy 等可很方便地完成对C程序结果的数据整合。

  • C代码采取模块化编写,各功能分在不同代码文件中。

  • 支持二维和三维情况。

  • 支持直角坐标系和球坐标系。

  • 中文注释及示例。

主要使用的函数都在 pyfmm.traveltime 模块中,参数简单, 建议使用前结合api说明以及示例试试。代码是我在初学时写的,如果遇到bug,欢迎联系我,我会完善! 也欢迎提出建议和更多示例!


主要参考