关于 loopstructural
loopstructural 是根据连续标量场观测构建受约束隐式地质模型的技能,提供坐标规范、模型评估及网格或等值面导出指导,并检查输入和输出。
主要功能
- 01构建受约束的 FDI 与 PLI 面
- 02评估地质特征值
- 03将网格与等值面导出为 VTK
- 04验证坐标与约束数据
- 05报告导出失败或结果为空
适用场景
- 01根据 CSV 约束创建地质模型
- 02在网格上评估模型特征
- 03导出模型网格用于可视化
- 04建模前检查约束数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ steadfastasart/ geoscience-skills --skill loopstructural安装后在 Claude Code 中输入/loopstructural确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/geological_features.mdinterpolators.mdscripts/build_model.py详细介绍
受约束的隐式地质模型
当观测数据约束连续地质标量场时,请使用 LoopStructural。标量值用于标记一个界面;它不会自动代表年龄、测量深度或高程。请记录坐标 CRS、共享的 XYZ 单位、正 Z 方向约定、特征顺序,以及每个标量级别的含义。
受约束的平面模型
此合成示例使用以米为单位的坐标,具有非零原点和非对称边界框。其标量场为
Z - 3030 + 0.1*(X - 1050) - 0.05*(Y - 2100),单位为米。标量观测和梯度约束共同确定标量值和方向;单个点本身不足以定义地质面。
from itertools import product
from LoopStructural import GeologicalModel
import numpy as np
import pandas as pd
origin = np.array([1000., 2000., 3000.])
maximum = np.array([1100., 2200., 3060.])
xyz = np.array(list(product([1010., 1050., 1090.], [2020., 2180.], [3010., 3050.])))
data = pd.DataFrame(xyz, columns=['X', 'Y', 'Z'])
data['feature_name'] = 'strat'
data['val'] = xyz[:, 2] - 3030 + .1 * (xyz[:, 0] - 1050) - .05 * (xyz[:, 1] - 2100)
data[['gx', 'gy', 'gz']] = [.1, -.05, 1.]
model = GeologicalModel(origin, maximum)
model.data = data
model.create_and_add_foliation('strat', interpolatortype='FDI', nelements=1000)
model.update()
query = np.array([[1020., 2040., 3020.], [1080., 2160., 3040.], [1050., 2100., 3030.]])
values = model.evaluate_feature_value('strat', query)
预期值约为 −10、+10 和 0。请将世界坐标传给 model.evaluate_feature_value(..., scale=True)(默认值)。直接评估特征时采用不同的局部坐标约定。GeologicalModel 1.8 支持以位置参数传入两个边界;不要假定旧示例中的 origin= 和 maximum= 构造函数关键字仍然可用。
评估 VTK 网格
继续使用上面的模型。regular_grid 返回一个 N×3 数组;请禁用随机打乱,并使用 Fortran 顺序,以匹配 VTK 中 x 轴变化最快的点排列。在保存之前,将实际标量值写入点数据。
import pyvista as pv
shape = (9, 7, 5)
points = model.regular_grid(nsteps=shape, shuffle=False, order='F')
grid = pv.StructuredGrid()
grid.points = points
grid.dimensions = shape
grid.point_data['strat'] = model.evaluate_feature_value('strat', points)
surface = grid.contour([0.], scalars='strat')
if not np.isfinite(grid['strat']).all() or surface.n_cells == 0:
raise ValueError('Model evaluation or requested isosurface is invalid')
需要导出时,请使用 grid.save('model.vtk') 或 surface.save('strat.vtk')。渲染出的表面是离散化的等值集;在解释小型结构之前,请检查约束残差和网格收敛性。
CSV 辅助工具与条件模型
模型构建器支持受约束的 FDI/PLI 面理,以及网格/等值面导出。它会验证坐标是否为有限值、约束是否完整、3D 范围是否为正,并在导出失败或结果为空时以非零退出状态报告错误。对于平面或跨度为零的输入几何,请提供明确的边界,而不要臆造范围。
python scripts/build_model.py constraints.csv --grid --output model.vtk \
--origin 1000 2000 3000 --maximum 1100 2200 3060 --nsteps 9 7 5
请根据已安装的 skill 目录解析命令。此辅助工具要求提供 X,Y,Z,feature_name,以及 val 和/或完整的 gx,gy,gz 或 nx,ny,nz 约束;每个特征都需要一个标量级别锚点。缺失的向量行全部设为 NaN,而不是零向量。
数值选择请参阅插值与验证,仅在需要相关结构时参阅断层/褶皱要求。断层、褶皱框架和不确定性集合需要明确的运动学/数据以及单独配置的模型;它们不会仅因 CSV 中有名义列或使用此面理辅助工具而自动创建。
验证范围
已使用 LoopStructural 1.8.0 和 loop-interpolation 0.0.2 测试 FDI 和 PLI 平面模型、世界坐标评估、非对称网格排序、等值面与 VTK 读回,以及格式错误输入/CLI 失败情况。这验证了入口和导出路径,但不验证断层网络反演、褶皱地质、不确定性估计,或稀疏野外约束在地质上的充分性。
官方模型源码,已于 2026-09-14 对照已安装的 1.8.0 API 核验。