コンテンツにスキップ
開発版ドキュメント — このサイトはmainブランチ向けで、インストール済みリリースと異なる場合があります。変更履歴を確認してください。

出力ファイルを調べる

質問: 公式チュートリアルは正常に終わり、表面電荷は保存則と整合していますか。

一文での回答: まず beachx inspect で実行件数を確認し、次に charges.csvcharge_ledger.csv で最終表面電荷と粒子の行き先を照合します。

読了後には、公式ケースの実行完了を判定し、最終電荷、mesh、species 別電荷収支、履歴、電位を 順に確認できます。モデル固有の receipt、完全な列定義、checkpoint schema は 出力形式リファレンスに分離しています。

公式入門ケースの結果を確認する

Section titled “公式入門ケースの結果を確認する”

10 分チュートリアルを実行したディレクトリで、beach.tomloutput.dir に指定された結果を調べます。公式入門ケースでは outputs/tutorial です。

Terminal window
beachx inspect outputs/tutorial

チュートリアルどおり 1 OpenMP thread で実行すると、少なくとも次の行が含まれます。

directory=outputs/tutorial
processed_particles=4000
absorbed=3720 escaped=280
batches=20 last_rel_change=...
charge_sum=-1.192019e-10

最小合格条件は次のとおりです。

  • beachbeachx inspect の終了コードが 0
  • batches=20beach.tomlsim.batch_count=20 と一致する
  • processed_particles=4000 が 1 batch あたり 200 粒子 × 20 batch と一致する
  • outputs/tutorial/summary.txtoutputs/tutorial/charges.csv が存在する

absorbed=3720escaped=280charge_sum=-1.192019e-10 は、現行版、rng_seed=12345、 1 OpenMP thread での参照値です。thread 数や乱数実装が異なる場合は、乱数列に依存する値まで 同一であるとは仮定しません。

この判定が示すのは実行完了だけです。last_rel_changetol_rel は自動停止条件ではなく、 数値収束や物理的妥当性は計算結果の妥当性確認で別に判定します。 コマンドが失敗する、または最小条件を満たさない場合は トラブルシューティングへ進んでください。

確認したいこと最初に見る場所
実行件数、batch 数、最終変化量summary.txtbeachx inspect
最終的な要素電荷charges.csv
三角形 geometry と mesh IDmesh_triangles.csv
mesh ID と入力 mesh の対応mesh_sources.csv

summary.txt は、実行統計と解決済み設定を key=value 形式で記録します。最初は processed_particlesabsorbedescapedbatcheslast_rel_change を読みます。 モデル固有の key を近くの beach.toml から推測せず、実行時の receipt として読む場合は 構成固有の出力を参照してください。

charges.csv は最終状態の elem_idx,charge_C を持ちます。charge_C は各三角形要素の総電荷 [C] で、 表面電荷密度ではありません。公式ケースでは 288 行あり、総和は beachx inspectcharge_sum=-1.192019e-10 と一致します。

Terminal window
head -n 3 outputs/tutorial/charges.csv

mesh_triangles.csv は三角形頂点、要素電荷、mesh_id を持ちます。mesh_sources.csv は各 mesh_id を 入力 mesh、template、表面モデルへ対応付けます。公式ケースは 288 三角形からなる 1 個の plane mesh です。

Terminal window
head -n 3 outputs/tutorial/mesh_triangles.csv
head -n 2 outputs/tutorial/mesh_sources.csv

charge_ledger.csv は、各 species の注入、表面吸収、escape、未解決 discard を signed charge と count で 集計します。公式ケースでは電子 1 species だけなので、次の短い確認で粒子数、電荷、最終表面電荷を 同時に照合できます。

Terminal window
python - <<'PY'
import csv
from math import fsum
from pathlib import Path
out = Path("outputs/tutorial")
with (out / "charge_ledger.csv").open(newline="", encoding="utf-8") as f:
row = next(csv.DictReader(f))
with (out / "charges.csv").open(newline="", encoding="utf-8") as f:
surface = fsum(float(item["charge_C"]) for item in csv.DictReader(f))
terminal_count = sum(int(row[name]) for name in (
"absorbed_count", "escaped_count", "discarded_unresolved_count"
))
terminal_charge = fsum(float(row[name]) for name in (
"absorbed_on_surface_C", "escaped_to_infinity_C", "discarded_unresolved_C"
))
print(f"counts: injected={row['injected_count']} terminal={terminal_count}")
print(f"charge_C: injected={float(row['injected_from_remote_C']):.12e} "
f"terminal={terminal_charge:.12e}")
print(f"surface_C: charges={surface:.12e} "
f"absorbed={float(row['absorbed_on_surface_C']):.12e}")
PY
grep -E '^(charge_ledger_surface_charge_after_C|charge_ledger_residual_C)=' \
outputs/tutorial/summary.txt

現行版の参照結果は次の関係を満たします。

counts: injected=4000 terminal=4000
charge_C: injected=-1.281741307200e-10 terminal=-1.281741307200e-10
surface_C: charges=-1.192019415696e-10 absorbed=-1.192019415696e-10
charge_ledger_surface_charge_after_C= -1.1920194156960000E-10
charge_ledger_residual_C= 5.5497729723797089E-25

このケースでは、注入粒子は吸収、escape、未解決 discard のいずれかへ進みます。表面放出と外部補正が ないため、吸収電荷は charges.csv の総和になります。charge_ledger_residual_C は丸め誤差程度で 0 に 近いことを確認しますが、小さい保存残差だけでは統計収束や物理妥当性を証明できません。 補正を含む一般の保存則と全列はcharge ledger リファレンスを参照してください。

公式ケースは各 batch の電荷と電位を保存します。

ファイル読み取るもの
charge_history.csvbatch ごとの各要素電荷と rel_change
potential_history.csvbatch ごとの各要素電位
top_reference_history.csvbox の z-high 面における電位統計
Terminal window
head -n 3 outputs/tutorial/charge_history.csv
head -n 3 outputs/tutorial/potential_history.csv
beachx animate outputs/tutorial \
--quantity charge \
--save-gif outputs/tutorial/charge_history.gif \
--total-frames 20

公式ケースでは batch 1 から 20 までの 20 snapshot があり、負電荷が蓄積する様子を確認できます。 電位履歴の再構成には native field kernel が必要です。必要な場合は 後処理チュートリアルの追加手順を使います。 生成条件と matching_plane_history.csv の完全な列は 履歴リファレンスを参照してください。

mesh_potential.csv は最終状態における各要素重心の電位 [V] です。公式ケースには 288 行あり、 1 thread の参照範囲は potential_min=-4.671330e+00potential_max=-2.579807e+00 です。 potential_history.csv は batch ごとの履歴、mesh_potential.csv は最終状態という違いがあります。

電位の基準、periodic2、field reconstruction の条件は mesh 電位リファレンスにまとめています。

再開するときは checkpoint 内のファイルを手作業で結合せず、output.restart_from に読み込み元を指定します。 20 batch の公式結果から 21 batch 目へ進む操作は checkpoint から一度再開するに従ってください。

必須ファイル、periodic slot の選択、schema 互換性を調べる場合だけ checkpoint 出力リファレンスを参照します。

通常の公式ケースには、以下の詳細は必要ありません。使用したモデルまたは診断に対応する行だけを選びます。

調べたいもの参照先
全ファイルの生成条件ファイル生成条件
field solver、periodic2、粒子境界の解決結果構成固有の receipt
zhao_stationary の signed 電流と補正zhao_stationary
matching-plane の accepted statematching_plane_quasistatic
charge_ledger.csv の全列charge ledger
adaptive periodic2 の trial適応 batch の診断
checkpoint schema と必須ファイル再開に使うファイル
Python reader の対応属性Python から読む

periodic2.max_nonzero_mode_potential_step > 0 の receipt と、履歴に含まれない棄却 trial は 適応 batch の診断リファレンスで確認します。

目的次に読むページ
電荷・電位を可視化する後処理チュートリアル
checkpoint から再開する実行・再開する
研究結果として受理できるか調べる計算結果の妥当性確認
値の不一致や欠落を診断するトラブルシューティング
出力契約を検索する出力形式リファレンス

Python での最初の読込みと可視化は後処理チュートリアル、 class と関数の完全な仕様は Python 後処理 APIを参照してください。