表面電荷更新の数値仕様
このページは、表面電荷の保存量、batch 末尾の更新順、浮遊導体の連立方程式、並列集約を調べるための 数値・実装リファレンスです。モデルを選ぶだけなら表面はどう帯電するかを参照してください。
保存する量と符号
Section titled “保存する量と符号”q_elem(i) は要素 の総電荷 [C] です。P0 panel の場評価時だけ、要素面積 で割って
表面電荷密度へ変換します。
マクロ粒子 が要素 へ吸収された場合の差分は
です。電子は負、正イオンは正の電荷を堆積し、吸収後の粒子は追跡から除かれます。collision に使う ordered triangle と片側 field trace の符号は同じ mesh geometry から作り、surface model は triangle の winding を変更しません。
batch 末尾の更新順
Section titled “batch 末尾の更新順”- batch 開始時の
q_elemから、粒子追跡中に固定する場を作る。 - 各粒子の最初の mesh hit による電荷差分を thread ごとに集める。
- 表面放出 source の反作用電荷を加える。
- 有効なら
neutral_returnの global な再重み付けを適用する。 - thread 間を加算し、MPI rank 間で global な電荷差分を集約する。
q_elemへ差分を一度だけ加える。- conductor object があれば、総電荷を保って等電位化する。
- 更新前後の正味差分、統計、履歴を計算する。
同じ batch 中の粒子は手順 1 の場を共有します。不完全な collision query または photo-ray query で batch が 成立しない場合は、部分的な粒子配列や放出差分を確定反映しません。
浮遊導体の連立方程式
Section titled “浮遊導体の連立方程式”surface_model="conductor" の要素は mesh_id ごとに group を作ります。要素 が group に
属するとき、未知の要素電荷 と group 電位 に対して
を課します。 は、conductor 要素 に単位総電荷を置き他の電荷を 0 にしたときに、その batch の場 snapshot が
要素 の重心 に返す電位を k_coulomb で割った量です。free-space では解析 P0 panel potential
に一致し、periodic2 では周期 image と zero mode を含みます ( は source 要素面積)。電位は電荷に対して affine
なので、電荷 0 の基準電位を引いて線形部だけを残します。 は、現在の全電荷で評価した
snapshot の電位から を引いた量で、non-conductor 電荷、一様外場、ゲージ定数を含みます。
各 group には総電荷保存も課します。
この dense square system は幾何と場の境界条件だけで決まるので、初期化時に conductor 要素数回の snapshot 評価で組み、 部分 pivot 付き LU 分解を保持します。batch ごとには snapshot の電位から右辺を作って解き、conductor 要素だけを 置換します。object 間の電荷と non-conductor 要素は変更しません。adaptive nonzero-mode step では、候補電荷を 再配分してから電位ステップを判定します。初期化コストは conductor 要素数に比例した回数の場 refresh です。
OpenMP、MPI、再開
Section titled “OpenMP、MPI、再開”particle loop は thread ごとの配列へ吸収電荷を集め、loop 後に加算します。光電子 closure に必要な放出・帰還量と
local な電荷差分は MPI 全体で集約するため、全 rank が同じ global q_elem を保持します。conductor relaxation は
その同一 state へ各 rank で決定論的に適用します。
checkpoint は確定済みの q_elem と関連 state を保存します。再開互換性と必須 file は
実行・再開するおよび入力パラメータを参照してください。
output.diagnostics.charge_rel_change_threshold の定義
Section titled “output.diagnostics.charge_rel_change_threshold の定義”conductor relaxation まで含む更新前後の差を
とすると、監視値は
です。output.diagnostics.charge_rel_change_threshold は output metric であり、現行実装の early-stop 条件ではありません。
実装とテスト
Section titled “実装とテスト”- particle absorption と batch commit:
bem_simulator_loop.f90 - surface model facade:
bem_surface_models.f90 - floating-conductor solver:
bem_surface_models_conductor.f90 - batch statistics:
bem_simulator_stats.f90 - model regression:
test_surface_models.f90