Emses output manager
Project description
emout
EMSES シミュレーション出力の解析・可視化 Python ライブラリ
emout でできること:
.h5グリッド出力とplasma.inp/plasma.tomlを 1 行で読み込めるファサード- データの次元に応じて最適な表示を自動選択する 1D / 2D / 3D プロット
!!key dx=...,to_c=...ヘッダーから自動生成される EMSES ⇄ SI 単位変換(30 種以上の物理量に対応)- EMSES の finbound 境界形状を Python オブジェクトとして操作できる API
- ドキュメント: ユーザーガイド (日本語/English) | API リファレンス
- ノートブック例: 月面帯電シミュレーション結果の可視化
インストール
pip install emout
# 3D 可視化(PyVista)を使う場合
pip install "emout[pyvista]"
# リモート実行(Dask + IP 自動検出)を使う場合
pip install "emout[distributed]"
クイックスタート
import emout
data = emout.Emout("output_dir")
# 最終ステップの電位を xz 平面(y=ny/2)でプロット — これだけで SI 単位付きカラーマップ
data.phisp[-1, :, data.inp.ny // 2, :].plot()
変数名は EMSES のファイル名から自動解決されます:
data.phisp # 電位 (GridDataSeries — 時系列)
data.nd1p # 種1 数密度
data.j1x # 種1 電流密度 x成分
data.j1xy # j1x + j1y 自動結合 → 2D ベクトル
data.j1xyz # 3D ベクトル
data.icur, data.pbody # テキスト出力 (pandas DataFrame)
スライスの軸順序は (t, z, y, x) です。
機能ガイド
各機能の詳しい使い方はユーザーガイドを参照してください。
| 機能 | できること | ガイド |
|---|---|---|
| プロット | plot() / cmap() / contour() で 1D/2D プロット |
→ プロット |
| アニメーション | gifplot() で GIF/HTML 生成、複数パネルレイアウト |
→ アニメーション |
| パラメータ | data.inp.nx, data.toml.species[0].wp |
→ パラメータ |
| 単位変換 | data.unit.v.reverse(1.0), data.phisp[-1].val_si |
→ 単位変換 |
| 境界メッシュ | data.boundaries.mesh(), plot_surfaces へのオーバーレイ |
→ 境界メッシュ |
| 3D (PyVista) | plot3d(mode="box"/"stream"/"quiver") |
→ クイックスタート |
| リモート実行 | Dask Actor で計算ノードに処理を委譲、ローカルは画像だけ | → リモート実行 |
代表的な使い方
プロット
data.phisp[-1, 100, :, :].plot() # 2D カラーマップ
data.phisp[-1, 100, :, :].contour() # 等高線
data.nd1p[-1, 100, :, :].plot(norm="log", vmin=1e-3) # 対数スケール
data.j1xy[-1, 100, :, :].plot() # ストリームライン
data.phisp[-1, :, 32, 32].plot() # 1D プロファイル
アニメーション
data.phisp[:, 100, :, :].gifplot() # Jupyter インライン
data.phisp[:, 100, :, :].gifplot(action="save", filename="out.gif") # GIF 保存
単位変換
data.unit.v.trans(1.0) # SI → EMSES
data.phisp[-1].val_si # 全 3D 配列を SI [V] で取得
境界メッシュ
data.boundaries[0].mesh() # 個別境界の MeshSurface3D
data.phisp[-1].plot_surfaces( # フィールド上にオーバーレイ
ax=ax, surfaces=data.boundaries,
)
粒子データ
p4 = data.p4 # 種4
p4.vx[0].val_si.to_series().hist(bins=200) # 速度分布
追加出力の結合 / 入出力パスの分離
# 継続出力の結合
data = emout.Emout("output_dir", ad="auto")
# 入力ファイルと出力ディレクトリを分離
data = emout.Emout(input_path="/path/to/plasma.toml", output_directory="output_dir")
リモート実行 (Dask) — 実験的
HPC の計算ノードにデータ処理を委譲し、ログインノードにはプロット画像だけを返します。 コードの書き方はローカル実行と全く同じで、サーバーが起動していれば自動的にリモートになります。
# ターミナルでサーバーを起動(1 回だけ)
emout server start --partition gr20001a --memory 60G
# スクリプト / Jupyter — サーバーがあれば自動リモート、なければローカル
data.phisp[-1, :, 100, :].plot() # 2D スライスだけ転送
plt.xlabel("x [m]") # ローカル matplotlib で追記可能
# 全操作をサーバーで実行(ローカルにはPNG画像のみ)
from emout.distributed import remote_figure
with remote_figure():
data.phisp[-1, :, 100, :].plot()
plt.axhline(y=50, color="red")
plt.title("カスタムタイトル")
# open/close 形式 — 既存コードへの導入が容易
from emout.distributed import RemoteFigure
rf = RemoteFigure()
rf.open()
data.phisp[-1, :, 100, :].plot()
rf.close()
# Jupyter セルマジック — セル先頭に書くだけ
# %load_ext emout.distributed.remote_figure
# %%remote_figure
# data.phisp[-1, :, 100, :].plot()
backtrace の重い計算もサーバーで実行し、可視化パラメータだけ変えて何度でも再描画できます。
複数シミュレーションの比較も可能です:
data_a = emout.Emout("/sim_a")
data_b = emout.Emout("/sim_b")
result_a = data_a.backtrace.get_probabilities(...)
result_b = data_b.backtrace.get_probabilities(...)
with remote_figure(figsize=(12, 5)):
plt.subplot(1, 2, 1)
result_a.vxvz.plot()
plt.subplot(1, 2, 2)
result_b.vxvz.plot()
実験的機能(ポアソン方程式 / バックトレース)
# ポアソン方程式
from emout.utils import poisson
phi = poisson(rho, dx=dx, btypes=btypes, epsilon_0=cn.epsilon_0)
# バックトレース(要 vdist-solver-fortran)
result = data.backtrace.get_probabilities(x, y, z, vx, vy, vz, ispec=0)
result.vxvz.plot()
コントリビュート
バグ報告・機能提案・PR を歓迎します。
- バグ / 質問: GitHub Issues に再現手順を添えて投稿してください
- PR:
mainから作業ブランチを切り、pytest -qがグリーンの状態で送ってください - ドキュメント:
README.md(日本語)とREADME.en.md(英語)は対応する形で維持されています。片方を更新したらもう片方にも反映してください
開発環境のセットアップやディレクトリ構成は AGENTS.md にまとまっています。
ライセンス
リンク
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file emout-2.10.0.tar.gz.
File metadata
- Download URL: emout-2.10.0.tar.gz
- Upload date:
- Size: 161.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e5b13c71f727028915f8f6a6a9d804797768e37f24fb448483730ae3fccb335
|
|
| MD5 |
bcc87214162cb1c24301c86ee2f7aaef
|
|
| BLAKE2b-256 |
d44ae5745bc972065a043172f73facff883a9a7a2ad168de4cff6a21802ddc28
|
File details
Details for the file emout-2.10.0-py3-none-any.whl.
File metadata
- Download URL: emout-2.10.0-py3-none-any.whl
- Upload date:
- Size: 178.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a78d60088f445aeed89783fd4b98c3ea3ecdb00898850c41609dbbe035b0abc
|
|
| MD5 |
ef9ed1f80d3d6a71a187f6e4ca6384aa
|
|
| BLAKE2b-256 |
1a716d7d5c002e9202015f0ba6be66e3aed0bd40e98bd69ad7ba0dec02c3146c
|