emout
EMSESの出力ファイルを取り扱うパッケージ
Installation
pip install emout
Example code
Usage
以下のようなフォルダ構成の場合の使い方.
.
└── output_dir
├── plasma.inp
├── phisp00_0000.h5
├── nd1p00_0000.h5
├── nd2p00_0000.h5
├── j1x00_0000.h5
├── j1y00_0000.h5
...
└── bz00_0000.h5
データをロードする
>>> import emout
>>> data = emout.Emout('output_dir')
>>> data.phisp
>>> len(data.phisp)
11
>>> data.phisp[0].shape
(513, 65, 65)
>>> data.j1x
>>> data.bz
>>> data.j1xy
>>> data.rex
>>> data.icur
>>> data.pbody
パラメータファイル(plasma.inp)を取得する
>>> data.inp
>>> data.inp['tmgrid']['nx']
64
>>> data.inp['nx']
64
>>> data.inp.tmgrid.nx
>>> data.inp.nx
データをプロットする
>>> x, y, z = 32, 32, 100
>>> data.phisp[-1, z, :, :].plot()
>>> data.phisp[-1, :, y, x].plot()
>>> data.phisp[-1, z, :, :].plot(use_si=True)
>>> data.phisp[-1, z, :, :].plot()
>>> data.phisp[-1, z, :, :].plot(show=True)
>>> data.phisp[-1, z, :, :].plot(savefilename='phisp.png')
>>> data.j1xy[-1, z, :, :].plot()
データのアニメーションを作成する
>>> x, y, z = 32, 32, 100
>>> data.phisp[:, z, :, :].gifplot()
>>> data.phisp[:, z, :, :].gifplot(axis=0)
>>> data.phisp[:, z, :, :].gifplot(action='save', filename='phisp.gif')
>>> data.phisp[:, z, :, :].gifplot(action='to_html')
>>> updater0 = data.phisp[:, z, :, :].gifplot(action='frames', mode='cmap')
>>> updater1 = data.phisp[:, z, :, :].build_frame_updater(mode='cont')
>>> updater2 = data.nd1p[:, z, :, :].build_frame_updater(mode='cmap', vmin=1e-3, vmax=20, norm='log')
>>> updater3 = data.nd2p[:, z, :, :].build_frame_updater(mode='cmap', vmin=1e-3, vmax=20, norm='log')
>>> updater4 = data.j2xy[:, z, :, :].build_frame_updater(mode='stream')
>>> layout = [[[updater0, updater1], [updater2], [updater3, updater4]]]
>>> animator = updater0.to_animator(layout=layout)
>>> animator.plot(action='to_html')
単位変換を行う
[!NOTE]
パラメータファイル (plasma.inp) の一行目に以下を記述している場合のみ、EMSES単位からSI単位系への変換がサポートされます。
!!key dx=[0.5],to_c=[10000.0]
dx
: グリッド幅 [m]
to_c
: EMSES内部での光速の規格化された値
>>> data.unit.v.trans(1)
3.3356409519815205e-05
>>> data.unit.v.reverse(1)
29979.2458
SI単位系への変換
[!NOTE]
パラメータファイル (plasma.inp) の一行目に以下を記述している場合のみ、EMSES単位からSI単位系への変換がサポートされます。
!!key dx=[0.5],to_c=[10000.0]
dx
: グリッド幅 [m]
to_c
: EMSES内部での光速の規格化された値
>>>
>>> phisp_volt = data.phisp[-1, :, :, :].val_si
>>> j1z_A_per_m2 = data.j1z[-1, :, :, :].val_si
>>> nd1p_per_cc = data.nd1p[-1, :, :, :].val_si
継続したシミュレーション結果を扱う
>>> import emout
>>> data = emout.Emout('output_dir', append_directories=['output_dir_2', 'output_dir_3'])
>>>
>>> data = emout.Emout('output_dir', ad='auto')
データマスクを適用する
>>>
>>> data.phisp[1].masked(lambda phi: phi < phi.mean())
>>>
>>>
>>> phi = data.phisp[1].copy()
>>> phi[phi < phi.mean()] = np.nan
3次元電荷分布から3次元電位分布を計算する. (Poisson's equation solver)
>>> from emout import poisson
>>> import scipy.constants as cn
>>> data = emout.Emout()
>>> dx = data.inp.dx
>>> btypes = ["pdn"[i] for i in data.inp.mtd_vbnd]
>>> rho = data.rho[-1].val_si
>>> phisp = poisson(data.rho[-1].val_si, dx=dx, btypes, epsilon_0=cn.epsilon_0)
>>> np.allclose(phisp, data.phisp[-1])
True