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

粒子更新

BEACHは粒子の位置と速度を同じ時刻で保持します。1 stepごとに次時刻の候補を作り、 meshとの衝突とbox境界の通過のうち、軌道上で最初に起こるものまでを確定します。

(xⁿ, vⁿ)
│ 予測中点で電場を1回評価
Boris速度更新 + 台形位置更新
(xⁿ⁺¹, vⁿ⁺¹) の候補
│ mesh hitとbox面通過を比較
├─ meshが先 ────── 吸収
├─ open面が先 ──── escapeまたはscalar-barrier反射
└─ reflect/periodic ─ 残り時間を再積分
工程詳細
電場標本、Boris回転、位置更新Boris粒子更新
三角形衝突、box面、periodic image、発生順序粒子の衝突・境界イベント
衝突・境界処理後の吸収と要素電荷差分表面はどう帯電するか
open面のescape、scalar-barrier反射粒子源粒子のescapeとreturn

step の結果は、次時刻状態、表面吸収、box escape、または未完了 status のいずれかです。reflect、periodic、 scalar-barrier 反射は粒子を生存させ、境界処理後の残り時間を同じ更新法で進めます。

mesh hitではhit位置と要素indexを確定し、候補終点を採用しません。吸収粒子の電荷はその場でfieldへ入れず、 thread-localな要素電荷差分へ加え、batch末尾にcommitします。

粒子は吸収またはescapeするまで最大sim.max_step回進めます。上限に達しても分類されなかった粒子は survived_max_stepとして記録し、暗黙に吸収やescapeへ数えません。

sim.dtは1回の粒子更新幅、sim.max_step * sim.dtは1粒子を追跡できる最大時間です。 一方、batch_durationは粒子供給量と表面電荷更新を結ぶ時間幅で、粒子step幅とは別です。

  • sim.dtを半分にして軌道、命中要素、吸収数が安定するか
  • survived_max_stepが結論に影響する割合になっていないか
  • periodic seam、corner、reflect後の残り時間を跨ぐ軌道が意図どおりか
  • 粒子の吸収・escape・未解決数と電荷収支が一致するか

設定値は設定パラメータ、出力での分類は出力ファイルを調べるから確認できます。