コンテンツにスキップ
開発版ドキュメント — このサイトは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 に対して

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

を課します。単位総電荷を持つ source triangle TjT_j の P0 potential coefficient は

Aij=1AjTj1ciydAyA_{ij}=\frac{1}{A_j}\int_{T_j} \frac{1}{|\mathbf c_i-\mathbf y|}\,dA_{\mathbf y}

です。ci\mathbf c_i は target 要素重心、AjA_j は source 要素面積です。自己項を含む解析 panel potential を principal-value 側規約で評価し、ϕifixed\phi_i^\mathrm{fixed} は non-conductor 電荷と一様外場が作る電位を k_coulomb で割った量です。

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

igqi=Qgbefore\sum_{i\in g}q_i=Q_g^\mathrm{before}

この dense square system を部分 pivot 付き Gauss 消去で解き、conductor 要素だけを置換します。object 間の 電荷と non-conductor 要素は変更しません。現行 model は要素重心 collocation と P0 triangle influence を使い、 field_boundary.mode="free" だけを受理します。

particle loop は thread ごとの配列へ吸収電荷を集め、loop 後に加算します。光電子 closure に必要な放出・帰還量と local な電荷差分は MPI 全体で集約するため、全 rank が同じ global q_elem を保持します。conductor relaxation は その同一 state へ各 rank で決定論的に適用します。

checkpoint は確定済みの q_elem と関連 state を保存します。再開互換性と必須 file は 実行・再開するおよび入力パラメータを参照してください。

conductor relaxation まで含む更新前後の差を

Δq=qafterqbefore\Delta\mathbf q=\mathbf q^\mathrm{after}-\mathbf q^\mathrm{before}

とすると、監視値は

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

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