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

境界から粒子を流入させる

box の外にあるプラズマ(外部プラズマ、reservoir)から、密度・温度または速度分布に対応する粒子を box の面から入れる手順です。 非周期の面を開放にし、粒子種の [particles.species.inflow] でその面を "reservoir" にします。 このページを読むと、最小の設定を作り、分布と流入の写像を選び、実際に入った量を出力で確かめられます。

既存のケースに、上端面から電子を入れる差分です。値は例で、特定のプラズマ環境を表すものではありません。

[run.batch]
duration_s = 1.0e-6
[domain]
box_min = [0.0, 0.0, 0.0]
box_max = [1.0, 1.0, 1.0]
periodic_axes = []
[particles.boundary]
z_high = "open"
[[particles.species]]
species_key = "electron"
charge_c = -1.602176634e-19
mass_kg = 9.1093837139e-31
[particles.species.distribution]
number_density_m3 = 5.0e6
temperature_ev = 10.0
drift_velocity_m_s = [0.0, 0.0, -4.0e5]
[particles.species.sampling]
weight = 1.0e5
[particles.species.inflow]
z_high = "reservoir"

上端面の内向き法線は −z-z なので、負の z の drift は box の内向きです。6 つの面のうち複数を同時に選べます。

上端 z-high の面全体から内向きの負 z 方向へ粒子が流入し、流束・面積・バッチ幅・重みで個数が決まる図。

上端面では内向きが −z-z で、流入量は開放面全体の流束から求めます。

  • バッチ幅(run.batch.duration_s)を正にする。入る粒子数はバッチ幅に比例する。
  • 流入面は非周期で、その粒子種にとって開放面にする。
  • 流入は選んだ面の全体から入る。面の一部だけから入れることはできない。
  • 境界流入だけを使う粒子種は、[particles.species.source] を書かない。

設定を保存したら、検査してから実行します。

Terminal window
beachx lint beach.toml
beach beach.toml

lint が通っても、流束、重み、電位の基準が物理的に適切だとは限りません。

流入分布は、外部プラズマの密度、温度、drift 速度で決まる drift Maxwell 分布です。

密度(distribution.number_density_m3 または distribution.number_density_cm3)、温度、drift 速度から、各面を内向きに横切る束 Γin\Gamma_\mathrm{in} を求めます。面を横切る確率は内向きの法線速度に比例するので、法線速度は束で重み付けした分布から選びます。 1 バッチで入るマクロ粒子数の期待値は

Nmacro=ΓinA ΔtbatchwN_\mathrm{macro} =\frac{\Gamma_\mathrm{in} A\,\Delta t_\mathrm{batch}}{w}

です。AA は面の面積、Δtbatch\Delta t_\mathrm{batch} はバッチ幅、ww は重みです。端数は次のバッチへ持ち越すので、 バッチごとの粒子数は一定とは限りません。

重みを物理的に決めたい場合は sampling.weight、1 バッチの標本数から決めたい場合は sampling.target_macro_particles_per_batch を指定します。後者は重みを決めるための目標で、物理的な束は変えません。 両方は指定できません。

外部プラズマの分布をどこで定義したかで、particles.reservoir.inflow_model を選びます。

分布を定義した場所inflow_model動作
流入面の上"source_vdf"(既定値)設定した分布をそのまま流入面の分布として使う
無限遠(上流)"infinity_barrier"上流電位と流入面の平均電位の差で、届く粒子を選び、法線速度を変える
[particles.reservoir]
inflow_model = "infinity_barrier"
phi_infty_v = 0.0
face_potential_grid_n = 5

上流電位を ϕ∞\phi_\infty、バッチの初めの流入面の平均電位を ϕf\phi_f とすると、流入面での法線速度は

vn,f2=vn,∞2−B,B=2q(ϕf−ϕ∞)mv_{n,f}^2=v_{n,\infty}^2-B, \qquad B=\frac{2q(\phi_f-\phi_\infty)}{m}

です。qq は符号付きの電荷なので、電子と正イオンでは同じ電位差に対して BB の符号が逆になります。

BB届く粒子と速度の変化
B>0B>0vn,∞≥Bv_{n,\infty}\ge\sqrt B の粒子だけが届き、流入面までに減速する
B=0B=0法線速度を変えない
B<0B<0すべての粒子が届き、流入面までに加速する

接線速度は変えません。ϕf\phi_f は流入面上の face_potential_grid_n × face_potential_grid_n 点の平均で、粒子ごとの局所電位ではありません。 外部シースとの接続を使う場合は、流入の写像を外部シースが決めるので、infinity_barrier は使えません。

Terminal window
beachx inspect outputs/latest
grep -E '^(reservoir_inflow_map|charge_ledger_residual_C)=' \
outputs/latest/summary.txt
head -n 2 outputs/latest/charge_ledger.csv

summary.txt の reservoir_inflow_map は選んだ写像(source_vdf または infinity_barrier)です。charge_ledger.csv では、粒子種ごとに次を確かめます。

  • injected_count: box の外から入ったマクロ粒子数
  • injected_from_remote_C: その電荷。符号は粒子の電荷と同じ
  • absorbed_count、escaped_count、discarded_unresolved_count: 入った粒子の行き先

期待値が 1 より十分小さいと、端数がたまるまで最初のバッチの injected_count は 0 になり得ます。標本が足りないときは、 物理的な束を変える前に重みか目標の標本数を見直します。バッチ幅を変えると場を更新する間隔も変わるので、 バッチ幅を決めるに従って比べます。

  • 境界流入は、box の外の条件を境界上の粒子に置き換える局所的なモデルです。box の外の軌道、途中の電場、 折り返し位置、飛行時間、空間電荷、外部シースは解きません。
  • 一様な外部電場には無限遠の電位が決まりません。infinity_barrier と併用する場合は、phi_infty_v を外部プラズマの 基準として決め、その意味を別に確かめます。

全キーと制約は入力パラメータにあります。