关于 pygimli
pygimli 是用于近地表地球物理建模与反演的 Python 工具,适合处理电阻率层析成像和地震折射数据。它提供网格、数据容器及面向具体方法的管理器,并支持结果可视化和导出。
主要功能
- 01有限元网格与数据容器
- 02电阻率层析成像处理和反演
- 03地震折射反演
- 04创建自定义网格
- 05保存模型并导出 VTK
适用场景
- 01反演并查看电阻率测量数据
- 02处理地震折射走时数据
- 03导出网格和模型供 ParaView 查看
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ steadfastasart/ geoscience-skills --skill pygimli安装后在 Claude Code 中输入/pygimli确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/mesh.mdmethods.mdscripts/ert_inversion.py详细介绍
pyGIMLi - 地球物理反演
快速参考
import pygimli as pg
from pygimli.physics import ert, srt
# Load ERT data
data = ert.load("survey.ohm")
# Invert
mgr = ert.ERTManager(data)
model = mgr.invert(lam=20, verbose=True)
# View result
mgr.showResult()
主要类
| 类 | 用途 |
|---|---|
pg.Mesh | 有限元网格 |
pg.DataContainer | 测量数据与几何信息 |
pg.Inversion | 基础反演框架 |
ert.ERTManager | ERT 处理与反演 |
srt.SRTManager | 地震折射反演 |
基本操作
加载和查看 ERT 数据
import pygimli as pg
from pygimli.physics import ert
data = ert.load("survey.ohm")
print(f"Measurements: {data.size()}")
ert.showData(data) # Pseudosection
ERT 反演
from pygimli.physics import ert
mgr = ert.ERTManager(data)
model = mgr.invert(
lam=20, # Regularization
verbose=True
)
mgr.showResult()
resistivity = mgr.model
地震折射
from pygimli.physics import srt
data = srt.load("traveltimes.sgt")
mgr = srt.SRTManager(data)
model = mgr.invert(lam=30, zWeight=0.3)
mgr.showResult()
创建自定义网格
import pygimli as pg
from pygimli.physics import ert
data = ert.load("survey.ohm")
mesh = pg.meshtools.createParaMesh(
data.sensors(),
quality=34.0,
paraMaxCellSize=5,
boundary=2
)
pg.show(mesh)
保存和导出
# Save mesh and model
mgr.mesh.save("result_mesh.bms")
pg.save(model, "resistivity_model.vector")
# Export to VTK for ParaView
mgr.mesh.exportVTK("result", mgr.model)
电极排列类型
| 代码 | 排列 |
|---|---|
wa | 温纳-α |
wb | 温纳-β |
dd | 偶极-偶极 |
pd | 极-偶极 |
pp | 极-极 |
slm | 施伦贝谢 |
gr | 梯度 |
数据格式
| 格式 | 扩展名 | 说明 |
|---|---|---|
| BERT/pyGIMLi | .ohm | 统一数据格式 |
| Syscal | .txt | IRIS 导出格式 |
| Res2DInv | .dat | 二维反演格式 |
| ABEM | .ohm | ABEM Terrameter |
| SRT | .sgt | 地震走时 |
何时选择 pyGIMLi 而非其他方案
| 场景 | 建议 |
|---|---|
| 使用常见排列进行标准 ERT 反演 | pyGIMLi - API 最简洁,内置排列类型 |
| 地震折射层析成像(SRT) | pyGIMLi - 集成 SRT 管理器 |
| 多方法反演(直流电、磁法、重力、电磁法) | SimPEG - 支持的方法更广泛 |
| 商用 ERT 处理与报告生成 | Res2DInv - 行业标准,基于 GUI |
| 自定义正演算子或需要研究灵活性 | SimPEG - 设计更模块化 |
| 基于 FEM 的地球物理建模 | pyGIMLi - 原生支持 FEM 网格 |
选择 pyGIMLi 的情况:需要以极少的代码进行近地表地球物理反演(ERT、SRT、IP)。其管理器类(ERTManager、SRTManager)只需几行代码,即可处理从数据加载、反演到可视化的完整工作流。
避免选择 pyGIMLi 的情况:需要近地表以外的方法(使用 SimPEG),或需要商用级报告流程。
常见工作流
ERT 数据反演与可视化
- 使用
ert.load("survey.ohm")加载 ERT 数据文件 - 检查数据:使用
data.size()查看测量数量,并绘制伪剖面 - 删除异常值或错误数据点
- 使用数据创建
ERTManager - 运行反演:
mgr.invert(lam=20)(从较大的 lambda 开始) - 检查卡方值(目标值约为 1)
- 使用
mgr.showResult()可视化结果 - 将网格和模型导出为 VTK,供 ParaView 使用:
mgr.mesh.exportVTK() - 根据需要调整 lambda 和 zWeight,然后重新反演
反演技巧
- 从较大的 lambda 开始(50-100),再逐渐减小
- 检查数据质量——反演前删除异常值
- 对于层状结构,使用 zWeight < 1
- 检查覆盖范围——覆盖范围低意味着分辨率较差
- 卡方值约为 1 表示拟合良好且未过拟合
参考资料
脚本
- scripts/ert_inversion.py - 完整的 ERT 反演工作流
评论
支持 Markdown