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

表面電荷更新の数値仕様

このページは、表面電荷の保存量、batch 末尾の更新順、浮遊導体の連立方程式、並列集約を調べるための 数値・実装リファレンスです。モデルを選ぶだけなら表面はどう帯電するかを参照してください。

q_elem(i) は要素 ii の総電荷 [C] です。P0 panel の場評価時だけ、要素面積 AiA_i で割って 表面電荷密度へ変換します。

σi=qiAi\sigma_i=\frac{q_i}{A_i}

マクロ粒子 pp が要素 ii へ吸収された場合の差分は

Δqi+=qpwp\Delta q_i\mathrel{+}=q_p w_p

です。電子は負、正イオンは正の電荷を堆積し、吸収後の粒子は追跡から除かれます。collision に使う ordered triangle と片側 field trace の符号は同じ mesh geometry から作り、surface model は triangle の winding を変更しません。

  1. batch 開始時の q_elem から、粒子追跡中に固定する場を作る。
  2. 各粒子の最初の mesh hit による電荷差分を thread ごとに集める。
  3. 表面放出 source の反作用電荷を加える。
  4. 有効なら neutral_return の global な再重み付けを適用する。
  5. thread 間を加算し、MPI rank 間で global な電荷差分を集約する。
  6. q_elem へ差分を一度だけ加える。
  7. conductor object があれば、総電荷を保って等電位化する。
  8. 更新前後の正味差分、統計、履歴を計算する。

同じ batch 中の粒子は手順 1 の場を共有します。不完全な collision query または photo-ray query で batch が 成立しない場合は、部分的な粒子配列や放出差分を確定反映しません。

surface_model="conductor" の要素は mesh_id ごとに group を作ります。要素 ii が group g(i)g(i) に 属するとき、未知の要素電荷 qjq_j と group 電位 VgV_g に対して

∑jAijqj−Vg(i)=−ϕifixed\sum_j A_{ij}q_j-V_{g(i)}=-\phi_i^\mathrm{fixed}

を課します。AijA_{ij} は、conductor 要素 jj に単位総電荷を置き他の電荷を 0 にしたときに、その batch の場 snapshot が 要素 ii の重心 ci\mathbf c_i に返す電位を k_coulomb で割った量です。free-space では解析 P0 panel potential

Aij=1Aj∫Tj1∣ci−y∣ dAyA_{ij}=\frac{1}{A_j}\int_{T_j} \frac{1}{|\mathbf c_i-\mathbf y|}\,dA_{\mathbf y}

に一致し、periodic2 では周期 image と zero mode を含みます (AjA_j は source 要素面積)。電位は電荷に対して affine なので、電荷 0 の基準電位を引いて線形部だけを残します。ϕifixed\phi_i^\mathrm{fixed} は、現在の全電荷で評価した snapshot の電位から ∑jAijqj\sum_j A_{ij}q_j を引いた量で、non-conductor 電荷、一様外場、ゲージ定数を含みます。

各 group には総電荷保存も課します。

∑i∈gqi=Qgbefore\sum_{i\in g}q_i=Q_g^\mathrm{before}

この dense square system は幾何と場の境界条件だけで決まるので、初期化時に conductor 要素数回の snapshot 評価で組み、 部分 pivot 付き LU 分解を保持します。batch ごとには snapshot の電位から右辺を作って解き、conductor 要素だけを 置換します。object 間の電荷と non-conductor 要素は変更しません。adaptive nonzero-mode step では、候補電荷を 再配分してから電位ステップを判定します。初期化コストは conductor 要素数に比例した回数の場 refresh です。

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 まで含む更新前後の差を

Δq=qafter−qbefore\Delta\mathbf q=\mathbf q^\mathrm{after}-\mathbf q^\mathrm{before}

とすると、監視値は

tol_rel metric=∥Δq∥2max⁡(∥qafter∥2,qfloor)\mathrm{tol\_rel\ metric} =\frac{\|\Delta\mathbf q\|_2}{\max(\|\mathbf q^\mathrm{after}\|_2,q_\mathrm{floor})}

です。output.diagnostics.charge_rel_change_threshold は output metric であり、現行実装の early-stop 条件ではありません。