mcpField
L
loopstructural

loopstructural

github.com/steadfastasartデータ・データベース7361 回インストール6 週間前に更新
リポジトリ

loopstructural について

loopstructuralは、連続スカラー場の観測から拘束付き暗黙的地質モデルを構築するスキルです。座標規約、モデル評価、グリッドや等値面のエクスポートを案内し、入出力の検証も行います。

主な機能

  1. 01拘束付きFDI・PLI葉理の構築
  2. 02地質フィーチャ値の評価
  3. 03グリッドと等値面のVTK出力
  4. 04座標と拘束データの検証
  5. 05失敗または空の出力を報告

活用シーン

  1. 01CSV拘束データから地質モデルを作成
  2. 02グリッド上でモデルフィーチャを評価
  3. 03可視化用にモデルグリッドを出力
  4. 04モデリング前に拘束データを確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/steadfastasart/geoscience-skills --skill loopstructural

インストール後、Claude Code で/loopstructuralを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
geological_features.md
interpolators.md
scripts/
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 では、2 つの境界値を位置引数で受け取ります。以前の例にある origin= や maximum= のコンストラクターキーワードが引き続き使用できると想定しないでください。

VTK グリッドの評価

上記のモデルを続けて使用します。regular_grid は N×3 配列を返します。シャッフルを無効にし、VTK の x 軸が最速で変化する点の順序になるよう Fortran 順序を使用してください。保存する前に、実際のスカラー値をポイントデータに書き込みます。

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

インストール済みのこのスキルディレクトリを基準にコマンドを解決してください。このヘルパーでは、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 の失敗を検証しました。これはエントリーポイントとエクスポート経路を検証するものであり、断層ネットワークの逆解析、褶曲した地質、不確実性の推定、または疎な現地制約の地質学的妥当性を検証するものではありません。

公式モデルソース。インストール済みの 1.8.0 API に照らし、2026-09-14 に確認。

コメント