Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

解析ジョブのフローと結果ストア

解析ジョブのフロー

  1. analysis_run を呼び、job_id を受け取る(この時点でジョブは Running としてバックグラウンド実行される)
  2. analysis_status(job_id) を Done/Failed になるまでポーリングする
  3. Done の場合、analysis_status の result_ref にサマリ JSON が入っている。さらに詳細な明細(節点変位・部材内力など)が必要なら result_get を呼ぶ

結果ストアへ保存するジョブは、対象の全種別の書き込み・完了処理とマニフェストの同期に成功した後にだけ Done になります。保存失敗は Failed です。保存中の model_edit と result_get は保存完了を待ちます。計算中にモデルが編集されても、そのジョブは開始時のモデルと解析条件による成果を保存します。

// 1. analysis_run(kind="LinearStatic") の返り値
{ "job_id": "job-0" }

// 2. analysis_status(job_id="job-0") の返り値(Done になった時点)
{
  "id": "job-0",
  "kind": "LinearStatic",
  "status": {
    "Done": {
      "result_ref": "{\"kind\":\"LinearStatic\",\"case\":1,\"n_nodes\":2,\"n_member_force_rows\":3,\"max_abs_disp\":1.23,\"store\":{\"case\":1,\"kinds\":[\"NodalDisp\",\"MemberForce\"]}}"
    }
  }
}

// 3. result_get(case=1, kind="NodalDisp") の返り値
{ "case": 1, "kind": "NodalDisp", "rows": [ { "node_id": 1, "ux": 0.0, "uy": 0.0, "uz": 1.23, "rx": 0.0, "ry": 0.0, "rz": 0.0 } ], "truncated": false }

Eigen ジョブの結果は結果ストアに case=0 として格納されます(実荷重ケース番号との衝突を避けるための固定値)。result_get(case=0, kind="Modal") で取得します。

TimeHistory は既存のサンプル波で実行します。サマリの n_steps は積分区間数、n_points は初期点込みの応答点数、end_time は終時刻 [s] です。 正の有限な duration・dt に対して区間数は ceil(duration/dt)、点数はその数+1、終時刻は区間数×dt となります。 0<duration<dt は 1 区間・2 点です。継続時間または刻みが 0 以下・非有限の場合は生成前に失敗し、解析結果を返しません。 時間軸と相対・絶対加速度の意味は 時刻歴応答解析 を参照してください。

実装参照:ジョブの登録・実行・状態は sepika_mcp::server::SepikaServer::{analysis_run, analysis_status}(crates/sepika-mcp/src/server.rs)が、結果の取得は sepika_mcp::persist::result_get_json(crates/sepika-mcp/src/persist.rs)が担います。

保存成果の生成元と利用可否

静的解析の節点変位・部材内力、単独ケース検定の部材内力、固有値のモード情報は、開始時モデルの計算入力、実行したジョブ、解決済み生成条件とともに保存します。通り芯と保存振動荷重ケースは入力照合から除きます。その他のモデル変更は stale として区別します。節点・部材の絞り込みは保存成果の ID に適用するため、現在モデルから対象がなくなっていても過去の行を照会できます。

result_get の status は、入力一致の current、入力不一致の stale、利用不可の unavailable です。current_scope: "model_input_only" は現在モデルとの一致だけを示します。MCP は現在の解析設定を保持しないため、現在設定との一致や法的適合・合否を証明しません。stale の値を現在モデルの成果や検定の根拠として採用せず、解析を再実行してください。

応答の entry は選択成果の case、kind、rows、公開 path と sha256、provenance を含みます。provenance は実行識別 run(再起動後も別実行と区別)、job_kind、開始入力の input_sha256、conditions、計算契約版、結果スキーマ版を保持します。conditions は荷重生成に使った地域係数・地盤・C0・Ai算定法・設計周期 [s] と、実対象ケース/単独検定の荷重状態、固有値の要求モード数を示します。analysis_status の保存サマリにも今回公開した store.entries を返します。同じケースでも run が違う種別を同じ解析の組として扱わないでください。

計算契約版は解析 65、検定 44 です。結果スキーマ版は 1 で、リリース版や OVIKA コンテナの版とは独立します。解析の版はすべての対象成果で、検定の版は単独検定由来の部材内力で、結果スキーマ版とともに完全一致を要求します。正常な行の返却前に生成元・必要条件・版と公開ファイルの SHA-256 を検査します。仕口パネルの柱主軸への座標変換と部材端回転への接続、S造の非線形仕口パネルの降伏式と履歴ばねの降伏値の一致、軸耐力到達・ゼロ耐力・設定可能域外の理由付き停止を解析契約に含みます。解析契約版44以前の解析成果と、単独検定由来の検定契約版27以前の成果は旧版として扱い、現行契約での再計算が必要です。剛心・ねじり剛性を共有する3次元質点系の準備でも、集計・除算不能を正常な座標や剛性へ戻さず拒否します。

検定契約版34には、CFT充填コンクリートのFcが24 N/mm²未満の場合に理由付き検定不能とする条件を含みます。単独検定由来の検定契約版33以前の成果は再利用せず、現行契約で再検定してください。

共通局所座標の断面参照方向に非有限値がある場合、または単位直交基底を解決できない場合は、対象部材と理由を示して計算を拒否する解析契約を含みます。旧解析契約版37以前の成果は、入力が同じでも現在の成果として公開せず、現行条件で再解析してください。

支持面には、共通局所座標で補完なしに得た単位直交基底の断面姿勢を使います。有限投影の丸めによるフェース・小梁自重作用区間・需要の差を防ぐ条件を解析40・検定26の契約に含みます。旧解析39・旧直接検定25の保存成果は再実行が必要です。

解析契約には、弾性梁の有限入力から計算不能な剛性・端部縮約が生じた場合に、対象部材と理由を示して停止する扱いを含みます。解析契約版33以前の保存成果は再解析が必要です。

解析契約には、増分部材応答履歴を有限な単精度値で記録できない場合に正常成果を返さず停止する扱いを含みます。旧契約の保存成果は再解析が必要です。

解析契約には、鉛直柱が支持する二次小梁の実最外側面・有限柱閉区間と、是正フェース区間による設計自重/物理質量相当の転送を含みます。旧フェース契約の成果は、入力が同じでも再解析が必要です。

unavailable の reason意味
unknown_provenance生成元・入力識別・必要条件・版・公開 hash の欠落または不正
old_contract計算契約版または結果スキーマ版が旧版
unsupported_contract未来版または未対応のジョブ/結果種別
inconsistent_file選択した公開ファイルの欠落・hash 不一致・読出し不整合

利用不可の応答は rows を含まず、action: "analysis_run" と再実行案内を返します。開き直し・編集・Undo・別種別の再解析や保存は過去成果の生成元や版を補完しません。正常に公開できた新しい成果だけを記録します。保存失敗では以前の公開ファイルと成果情報を保持し、新しい部分成果を照会対象にしません。これは通常の書込み・公開失敗時の契約であり、電源断後の復元保証ではありません。

保存組合せ・自動 G+P+K 検定は引き続きサマリ内だけの非永続成果です。時刻歴の永続化・ページ取得は対象外です。

要求モード数が 0 の Eigen は、既知の生成条件を持つ空のモード成果として保存・照会します。同じ入力では current、rows: [] になります。要求数 0 を条件の欠落や不明と読み替えません。

結果ストアのスキーマ

結果ストアの列構成は以下のとおりです(すべて Arrow の UInt32/UInt64/Float64 列で構成されます)。

NodalDisp

列名型
node_idUInt32
ux, uy, uzFloat64
rx, ry, rzFloat64

MemberForce

列名型備考
elem_idUInt32
posFloat64評価位置(0..1 の正規化座標)
n, qy, qz, mx, my, mzFloat64部材内力(軸力・せん断・ねじり・曲げ)
列名型
modeUInt32
periodFloat64
omega2Float64
part_x, part_y, part_zFloat64
eff_x, eff_y, eff_zFloat64

TimeHistory

IO の時刻歴用列構成です。MCP はこの種別を保存せず、現在 result_get で正常な行を返す対象は NodalDisp・MemberForce・Modal のみです。

列名型
stepUInt64
timeFloat64
node_idUInt32
ux, uy, uzFloat64
rx, ry, rzFloat64

result_get が 1 回に返す行数の上限は 10,000 行です。超過分は切り詰められ、応答の truncated が true になります。

実装参照:スキーマは sepika_io::results::{nodal_disp_schema, member_force_schema, modal_schema, time_history_schema}(crates/sepika-io/src/results/schema.rs)が定め、結果の書き込みは sepika_mcp::persist::persist_job_outcome(crates/sepika-mcp/src/persist.rs)が行います。

RC壁の参考骨格は同じ静的case/comboの壁脚共通face内力を使い、初期Quは同じrunの静的一次参照から正負別に固定する契約を含みます。建物共通の荒川min/mean方式と新規既定mean、両consumerと同じrunの採用Quへの方式反映を含みます。採用Quのない旧結果や旧計算契約の結果を補完せず、再計算を要します。