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

periodic2 の静電場

fields.boundary="periodic2" は、x/y 方向に無限に繰り返し、z 方向には繰り返さない表面の場を計算します。 レゴリスのような広い表面の一部をセル 1 つで表すときに使います。BEACH はこの場を 3 つの成分に分け、 それぞれを一度ずつ足します。このページは、各成分が何を表し、どの設定で計算されるかを説明します。

セル内の表面電荷と、その x/y 方向の全ての複製がつくる場です。複製の和を、性質の違う 3 つの成分に分けます。

成分物理的な意味計算のしかた
近くの複製セルとその周囲 NN 層の複製がつくる、強く変化する局所的な場有限画像として直接の和(Direct または FMM)
遠くの複製の面内変動成分(k≠0k\ne0)周囲 NN 層より外の複製がつくる、x/y 方向に変化する滑らかな場遠方補正(cached_kneq0)。有限画像だけなら含めない
面平均成分(k=0k=0)x/y 方向に平均した場。各高さより下の総電荷で決まる三角形の高さ分布から解析的に計算

面平均成分は数値的に消してよい成分ではなく、Gauss の法則と下側の境界条件で決まる物理的な成分です。

[domain]
box_min = [0.0, 0.0, 0.0]
box_max = [1.0e-4, 1.0e-4, 1.0e-3]
periodic_axes = ["x", "y"]
[fields]
boundary = "periodic2"
[fields.solver]
method = "fmm"
[fields.periodic]
backend = "cached_kneq0"
image_layers = 1
lower_boundary_model = "symmetric_vacuum"

周期の軸は domain.periodic_axes で決め、場・粒子・照射の光線に共通です。periodic2 は x/y 周期・z 非周期の組み合わせだけを受け付けます。

fields.periodic.backend含む成分用途
finite_images近くの複製だけ。面平均成分を分けない有限画像のモデル、小さな比較
cached_kneq03 成分すべてFMM での通常の計算
panel_spectral_reference3 成分すべて(面内変動成分を Fourier 和で直接計算)Direct での小さな基準解

finite_images の結果は、画像の層を増やして収束を確かめるまで、無限に繰り返す表面の解として扱えません。 ソルバと場境界の組み合わせは場ソルバを選ぶにあります。

中央セルと周囲 1 層の 3×3 有限画像、さらに外の周期画像、面内変動成分と面平均成分の分離を示す図。

image_layers=1 は中央を含む 3×3 セルで、cached_kneq0 はその外側と物理的な面平均成分も含めます。

fields.periodic.image_layers =N=N は、セルの周囲 NN 層の複製 (i,j)∈[−N,N]2(i,j)\in[-N,N]^2 を直接足します。

NN足すセル
0セル自身だけ(1×11\times1)
1周囲 1 層(3×33\times3)
2周囲 2 層(5×55\times5)

遠方補正は、この NN 層の外側の複製だけを足します。FMM で直接足す層と、遠方補正が差し引く層は一致している必要があり、 遠方補正の演算子は層の数ごとに作ります。

cached_kneq0 は、無限に繰り返す複製の和(Ewald 和)から、直接足した NN 層の寄与と面平均成分を除いたものを、 周期 box の固定格子に対して事前に作った演算子で FMM に加えます。同じ box と設定なら物体集合が違っても再利用します。面平均成分を除くのは、下の解析的な面平均成分と二重に数えないためです。 演算子の作り方、cache、精度はperiodic2 遠方補正にあります。

三角形 ii の総電荷を qiq_i、その面積のうち高さ zz 以下にある割合を Fi(z)F_i(z) とすると、高さ zz より下の総電荷は

C(z)=∑iqiFi(z)C(z)=\sum_iq_iF_i(z)

です。FiF_i は 3 頂点の高さの間で区分的な 2 次式なので、C(z)C(z) も区間ごとの 2 次式になります。セルの面積を A=LxLyA=L_xL_y、下側の遠方の電場を EbottomE_\mathrm{bottom} とすると、Gauss の法則から

E0(z)=Ebottom+C(z)ϵ0AE_0(z)=E_\mathrm{bottom}+\frac{C(z)}{\epsilon_0A}

です。基準点 (zg,ϕg)(z_g,\phi_g) からの電位は

ϕ0(z)=ϕg−Ebottom(z−zg)−1ϵ0A∫zgzC(ζ) dζ\phi_0(z)=\phi_g-E_\mathrm{bottom}(z-z_g) -\frac1{\epsilon_0A}\int_{z_g}^zC(\zeta)\,d\zeta

です。総電荷が 0 でないセルでは、上方に一定の電場と線形の電位が残ります。

lower_boundary_modelEbottomE_\mathrm{bottom}EtopE_\mathrm{top}意味
symmetric_vacuum−Q/(2ϵ0A)-Q/(2\epsilon_0A)+Q/(2ϵ0A)+Q/(2\epsilon_0A)上下に同じ真空が広がり、外部の電場がない
e_bottom_zero00Q/(ϵ0A)Q/(\epsilon_0A)最下層の電荷より下で電場が 0
e_top_from_sheathEH−Q/(ϵ0A)E_H-Q/(\epsilon_0A)EHE_H外部根の Ez(H+)E_z(H^+) と接続。sheath.closure="zero_current" 専用

Q=∑iqiQ=\sum_iq_i はセルの総電荷です。総電荷が 0 なら symmetric_vacuum と e_bottom_zero は一致します。 e_top_from_sheath は H に面電荷がない Neumann 条件です。いずれも物体内部の誘電分極や遮蔽は解きません。

面平均成分の基準点は、外部シースとの接続を使うと上端面 (zhigh,ϕ0)(z_\mathrm{high},\phi_0) になり、電位は上流のプラズマを 0 V とする値になります (外部シースとの接続)。それ以外では、電位は上端面の平均との差として読みます。

外部シースの平均場で置き換えられない理由

Section titled “外部シースの平均場で置き換えられない理由”

粒子の層の中では、総電荷が小さくても、高さごとに正負の電荷が分かれていれば C(z)C(z) は大きく変わります。 この層内の平均場も面平均成分です。外部シースの平面の場だけで置き換えると、表面電荷がつくるこの成分を落とします。 外部シースとの接続では層内の平均場を表面電荷から計算し、e_top_from_sheath を選ぶと外部根の法線電場を境界値として加えます。

上部真空の Fourier 評価への切替

Section titled “上部真空の Fourier 評価への切替”

全三角形より上に切替面を置き、その上の非零成分を Fourier 和、下を FMM と cached 補正で評価し、面平均を共通に加える図。

切り替えるのは面内変動成分だけで、面平均成分と一様外部場の合成方法は共通です。

上端 H 付近の局所展開誤差を避けるには、cached_kneq0 と組み合わせて次を設定します。

[fields.periodic.upper_fourier]
switch_height = "auto"
mode_layers = 0

既定の "off" は従来の FMM 評価です。有効時は z≥zswitchz\ge z_\mathrm{switch} の非零成分を上部真空の panel Fourier 和で評価し、 下側では FMM と cached 補正を使います。粒子の電場、局所障壁、帰還電位、上端面サンプルに共通で、零モードと一様外部場の合成は同じです。 panel 電位は切替面より下にあり、対象外です。upper_panel_fourier retry も同じ plan を共有します。

"auto" は ztop+0.25min⁡(Lx,Ly)z_\mathrm{top}+0.25\min(L_x,L_y) から H−10−9(H−zmin)H-10^{-9}(H-z_\mathrm{min}) までの等間隔16面を比較します(zminz_\mathrm{min} は box 下端。10−9(H−zmin)10^{-9}(H-z_\mathrm{min}) が HH の浮動小数点刻みより小さいときは HH の1つ下の値)。 上端は box 高さに比例するので、同じ配置を z 方向へ平行移動しても候補区間は一緒に動きます。 代理電荷は全 panel +1、mesh ID 偶数 +1 / 奇数 −1、各 mesh の centroid 高さ中央値以上 +1 / 未満 −1 の3組で、それぞれ ∑∣q∣=1\sum|q|=1 pC にします。 各面の12×12セル中心で FMM−Fourier 電位差の rms を求め、3組の最大値が最小の面を選びます。同値なら低い面を選びます。 実電荷には依存せず、起動・再開時に各 MPI rank が同じ順序で再計算します。比較値の単位 V はこの代理電荷規格化(総 ∣q∣|q| = 1 pC)に対する値です。

実数は metre の固定高さです。ztop+0.1min⁡(Lx,Ly)≤zswitch<Hz_\mathrm{top}+0.1\min(L_x,L_y)\le z_\mathrm{switch}<H が必要で、auto の候補区間が空なら設定エラーです。 次数0は、最初の打切りモードの減衰 exp⁡[−2π(m+1)(zswitch−ztop)/max⁡(Lx,Ly)]≤10−6\exp[-2\pi(m+1)(z_\mathrm{switch}-z_\mathrm{top})/\max(L_x,L_y)]\le10^{-6} を満たす最小次数を選びます。 下限は fields.periodic.reference.mode_layers、上限32で、明示次数は1〜32です。切替を使うと reference の次数も1〜32が必要です。 plan は既存の7点 panel 求積を用いるため、Fourier 打切りと面積求積の誤差は残ります。

切替は periodic2・cached 非零成分・零モード除外の構成専用です。外部シース接続で off の場合は起動時に1行警告します。 選択値と実電荷の接続面 rms は出力リファレンスで確認します。

場はセル内へ戻した位置で評価しますが、粒子の軌道は物理的な座標のまま追跡します。表面との衝突は、 軌道が届き得る周期画像を幾何的に探して判定します(粒子の衝突・境界イベント)。

  • finite_images では、image_layers を増やして注目する量が変わらないことを確かめる。
  • cached_kneq0 では、cache を作り直した結果と再利用した結果、スレッド数・MPI 構成を変えた結果が一致することを確かめる(periodic2 遠方補正)。
  • 総電荷が 0 でないセルでは、有限の高さでの電位差を、そのまま無限遠へ逃げるのに必要なエネルギーと読まない。
  • 周期は x/y の 2 軸だけです。z 方向は繰り返しません。
  • 物体の内部の誘電分極、抵抗、遮蔽は解きません。