パラメータファイル (data.inp)¶
emout は EMSES のパラメータファイル(plasma.inp / plasma.toml)を読み込み、辞書のようにも属性のようにも触れるオブジェクトで返します。
パラメータへのアクセス¶
import emout
data = emout.Emout("output_dir")
# 辞書スタイル(グループ名 + パラメータ名)
data.inp["tmgrid"]["nx"] # → 例: 256
data.inp["plasma"]["wp"] # → 例: [1.0, 0.05]
# グループ名を省略(名前が一意なら)
data.inp["nx"] # → data.inp["tmgrid"]["nx"] と同じ
# 属性スタイル
data.inp.tmgrid.nx
data.inp.nx # グループ名省略
注意: 省略形は重複名を検出しません。 同じ名前が複数グループに存在する場合、
data.inp["nx"]はエラーを出さず たまたま最初にヒットしたグループの値 を返します。重複の可能性があるパラメータ(例えばどちらのグループに属するか 曖昧なもの)は、必ずdata.inp["group_name"]["param"]のように明示してください。
よく使うパラメータ¶
グリッド¶
パラメータ |
グループ |
説明 |
|---|---|---|
|
|
グリッドの次元数 |
|
|
グリッド間隔(EMSES 単位。SI は |
nx, ny, nz = data.inp.nx, data.inp.ny, data.inp.nz
時間¶
パラメータ |
グループ |
説明 |
|---|---|---|
|
|
時間ステップ |
|
|
出力間隔( |
|
|
総ステップ数 |
dt = data.inp.dt
total_time_steps = data.inp.nstep
output_interval = data.inp.ifdiag
プラズマ¶
パラメータ |
グループ |
説明 |
|---|---|---|
|
|
粒子種数 |
|
|
種ごとのプラズマ周波数 |
|
|
種ごとの比電荷 |
|
|
種ごとの熱速度 |
|
|
熱速度(別名) |
nspec = data.inp.nspec
wp = data.inp.wp # プラズマ周波数のリスト
qm = data.inp.qm # 比電荷のリスト
境界条件¶
パラメータ |
グループ |
説明 |
|---|---|---|
|
|
各軸の境界タイプ(0=周期, 1=ディリクレ, 2=ノイマン) |
btypes = data.inp.mtd_vbnd # 例: [0, 2, 0] → 周期-ノイマン-周期
TOML 形式 (plasma.toml)¶
plasma.toml が存在する場合、emout は自動的に toml2inp を実行して plasma.inp を生成し、それを読み込みます。
toml2inp コマンドは MPIEMSES3D に同梱されています。
data = emout.Emout("output_dir")
data.inp.nx # ファイル形式に関係なく同じインターフェース
生の TOML 構造へのアクセス¶
data.toml で TOML のネイティブ構造に直接アクセスできます:
data.toml # TomlData ラッパー(plasma.inp のみの場合は None)
data.toml.tmgrid.nx # 属性アクセス
data.toml["tmgrid"]["nx"] # 辞書アクセス
data.toml.species[0].wp # ネスト構造へのアクセス
TOML 形式では namelist グループに対応するセクションヘッダーを使います:
[tmgrid]
nx = 256
ny = 256
nz = 512
dt = 0.5
[[species]]
wp = 1.0
qm = -1.0
[[species]]
wp = 0.05
qm = 0.001
入力ファイルと出力ディレクトリの分離¶
data = emout.Emout(input_path="/path/to/plasma.toml", output_directory="output_dir")
単位変換キー¶
plasma.inp の 1 行目に単位変換キーを記述できます:
!!key dx=[0.5],to_c=[10000.0]
dx: グリッド間隔(メートル [m])to_c: EMSES 内部単位での光速
このキーを書いておくと data.unit 経由の SI 単位変換が使えるようになります。plasma.toml では次のように書きます:
[meta.unit_conversion]
dx = 0.5
to_c = 10000.0
変換キーがない場合は data.unit が None になり、val_si や plot(use_si=True) を呼ぶと AttributeError になります。対処は 単位変換ガイド の「前提条件」を参照してください。