PML吸収境界条件(Perfectly Matched Layer)

カテゴリ: 電磁場解析 > 高周波 | 統合版 2026-04-11
PML absorbing boundary condition - electromagnetic wave attenuation profile in perfectly matched layer
PML吸収境界条件:解析領域外縁に配置された吸収層が電磁波を無反射で減衰させる

理論と物理

PMLとは何か

🧑‍🎓

PMLって何の略ですか? なぜ普通の境界条件じゃダメなんですか?

🎓

Perfectly Matched Layer——完全整合層だ。電磁波が解析領域の外に出ていくとき、境界で反射させずに吸収する人工的な層のこと。

🧑‍🎓

え、固定壁とか対称条件じゃダメなんですか? 構造解析だとそれでうまくいくのに。

🎓

構造解析は「箱の中の変形」を扱うから壁があっていい。でも電磁波は遠方に放射されるものだ。例えばアンテナの放射パターンを解析するとき、計算領域の端が金属壁だったら電磁波が全部跳ね返ってくる。まるで部屋の中でスピーカーを鳴らすと反響しまくって、元の音がわからなくなるのと同じだよ。

🧑‍🎓

なるほど! じゃあPMLが登場する前はどうしてたんですか?

🎓

Mur境界条件やEngquist-Majda ABCといった解析的吸収境界条件(ABC)が使われていた。でもこれらは平面波の垂直入射には効くけど、斜め入射だと反射が残るという致命的な弱点があった。1994年にフランス気象庁のBérengerが「媒質のインピーダンスを内部と完全に整合させた吸収層」を提案して——これがPMLだ。理論上あらゆる入射角・周波数で反射ゼロ。FDTDコミュニティに革命を起こした論文で、発表から30年で1万件以上引用されている。

🧑‍🎓

気象庁の人がFDTDの境界条件を発明したんですか? 意外すぎる…!

導電率プロファイルの設計

🧑‍🎓

PMLの中では具体的に何が起きてるんですか? 電磁波がどうやって吸収されるのか知りたいです。

🎓

PML内部には人工的な導電率 $\sigma(x)$ が設定されている。この導電率が電磁波のエネルギーをジュール熱として吸収するイメージだ。ポイントは、PML界面でいきなり大きな $\sigma$ にするのではなく、ゼロから徐々に増やすこと。

PML内の導電率プロファイルは、境界からの距離 $x$($0 \leq x \leq d$, $d$はPML厚)に対して多項式グレーディングで定義される:

$$ \sigma(x) = \sigma_{\max}\left(\frac{x}{d}\right)^m $$

ここで $m$ はグレーディング次数(通常 $m = 3 \sim 4$)、$\sigma_{\max}$ は最大導電率である。

🧑‍🎓

なぜ徐々に増やすんですか? いきなり大きくしたほうが早く吸収できそうだけど。

🎓

いい質問だ。もし PML 界面で $\sigma$ がゼロから急に大きい値に「段差」で変わると、そこでインピーダンスの不整合が生じて反射が発生する。連続的な理論上は反射ゼロだけど、離散化(メッシュ分割)した段階で段差が生まれるからね。ゆっくり滑らかに増やせば、各メッシュ間の $\sigma$ の差が小さくなり、数値的な反射を抑えられる。ちょうど高速道路の料金所でいきなり停止するより、減速レーンでゆっくり速度を落とすほうがスムーズだろう?

🧑‍🎓

減速レーンの例え、すごくわかりやすいです! $m$ の値が大きいほどゆっくり立ち上がるってことですね。

🎓

その通り。ただし $m$ を大きくしすぎると、PML奥側でまだ十分吸収しきれないうちに外壁(PEC)に当たって反射する。$m = 3$ か $m = 4$ が実務的なスイートスポットだ。

反射係数の理論

🧑‍🎓

$\sigma_{\max}$ はどうやって決めるんですか? 適当に大きくすればいい?

🎓

$\sigma_{\max}$ は目標反射係数 $R$ から逆算する。PMLを1往復して戻ってくる波の反射係数は次の式で与えられる:

$$ R(\theta) = \exp\!\left(-\frac{2\,\sigma_{\max}\,d\,\cos\theta}{(m+1)\,\eta_0}\right) $$

ここで $\theta$ は入射角、$\eta_0 = \sqrt{\mu_0/\varepsilon_0} \approx 377\,\Omega$ は自由空間のインピーダンスである。垂直入射($\theta = 0$)では $\cos\theta = 1$ となり最も吸収が良い。

🧑‍🎓

じゃあ例えば反射を $-60\,\text{dB}$($R = 10^{-3}$)にしたい場合、$\sigma_{\max}$ はいくつにすれば?

🎓

上の式を $\sigma_{\max}$ について解くと:

$$ \sigma_{\max} = -\frac{(m+1)\,\eta_0\,\ln R}{2\,d} $$
🎓

例えば $m=3$、$d = 10\Delta x$($\Delta x$ がセルサイズ)、$R = 10^{-3}$ とすると:

$\sigma_{\max} = \frac{4 \times 377 \times \ln(10^3)}{2 \times 10\Delta x} \approx \frac{4 \times 377 \times 6.91}{20\Delta x} \approx \frac{10416}{20\Delta x} = \frac{520.8}{\Delta x}$ [S/m]

実務では $\sigma_{\max} \approx 0.8 \times (m+1) / (\eta_0 \Delta x)$ という簡易式もよく使われる。$\sigma_{\max}$ が大きすぎるとPML内の急激な変化で数値反射が増えるから、目標 $R$ は $10^{-4} \sim 10^{-8}$ の範囲で選ぶのが一般的だ。

複素座標ストレッチング

🧑‍🎓

PMLの理論をもう少し数学的に教えてもらえますか? 「完全整合」ってどういう意味なんですか?

🎓

PMLの本質は複素座標ストレッチング(Complex Coordinate Stretching)だ。実座標 $x$ を複素座標 $\tilde{x}$ に置き換える:

$$ \tilde{x} = \int_0^x s_x(x')\,dx', \qquad s_x(x) = 1 + \frac{\sigma_x(x)}{j\omega\varepsilon_0} $$

ここで $s_x$ はストレッチング係数。PMLの外($\sigma = 0$)では $s_x = 1$ で通常の座標、PML内では $s_x$ が複素数になる。マクスウェル方程式の空間微分 $\partial/\partial x$ を $\frac{1}{s_x}\partial/\partial x$ に置き換えるだけで、あらゆる入射角・偏波に対してインピーダンス整合が自動的に成立する

🧑‍🎓

座標そのものを複素数にしてしまうって、発想がぶっ飛んでますね…

🎓

まさにそこがBérengerの天才的なところ。物理的には「PML内では波が指数的に減衰する方向に伝搬する」ことに相当する。波は反射せずにスッと消えていく——数学的に美しいし、実装もシンプルだ。

PMLのバリエーション:Split-field / UPML / CPML

🧑‍🎓

PMLにも種類があるって聞いたんですけど、何が違うんですか?

🎓

大きく3つの世代があるんだ:

  • Split-field PML(Bérenger原論文, 1994):電場・磁場の各成分を2つの副成分に分割して別々に減衰させる。物理的な直感がわかりやすいが、変数の数が倍になるのがデメリット。
  • UPML(Uniaxial PML)(Sacks et al., 1995):PMLを異方性媒質テンソルとして定式化。周波数領域FEMとの親和性が高い。マクスウェル方程式の形を変えずに媒質パラメータだけ修正するので、既存コードへの組み込みが容易。
  • CPML(Convolutional PML)(Roden & Gedney, 2000):畳み込み積分で補助微分方程式(ADE)を解く方式。Split-fieldのように変数を分割せず、任意媒質・エバネッセント波にも対応できる。現在のFDTD実装の事実上の標準。
PML種別提案年主な手法変数増加エバネッセント波主な適用先
Split-field PML1994場の分割2倍不安定になりうる教育・初期研究
UPML1995異方性テンソルなし不安定になりうる周波数領域FEM
CPML2000畳み込み+ADE補助変数のみ安定に吸収FDTD(標準)
🧑‍🎓

CPMLがエバネッセント波に強いのは、何が違うからですか?

🎓

CPMLのストレッチング係数には $\kappa$ と呼ばれる実数項が追加されていて:

$$ s_x = \kappa_x + \frac{\sigma_x}{\alpha_x + j\omega\varepsilon_0} $$

$\kappa_x > 1$ がエバネッセント波の減衰を安定化し、$\alpha_x > 0$ が低周波でのPML性能を改善する。この3パラメータ($\sigma, \kappa, \alpha$)の組み合わせにより、広帯域かつ安定な吸収が実現する。

Coffee Break よもやま話

Bérengerの「ユーリカ!」の瞬間

Jean-Pierre Bérengerはフランス気象庁のレーダー研究者だった。雷の電磁パルスをFDTDでシミュレーションする際、既存のABCでは斜め入射の反射が大きすぎて使い物にならなかった。あるとき彼は「電場の各成分を2つに分割して、それぞれに独立な減衰を与えたらどうか」というアイデアを思いつく。物理的には不自然な「場の分割」だが、数学的にはインピーダンス整合が完璧に成立した。1994年のJournal of Computational Physics論文は当初「こんな人工的な層が機能するはずがない」と懐疑的に見られたが、実装してみると従来のABCより2〜3桁も反射が小さくなり、瞬く間にFDTDの標準技術となった。

PML内のマクスウェル方程式(周波数領域)
  • ストレッチされたファラデー則:$\nabla_s \times \mathbf{E} = -j\omega\mu_0\mathbf{H}$。ここで $\nabla_s$ はストレッチング係数 $s_x, s_y, s_z$ で修正されたナブラ演算子。PML内では $\partial/\partial x \to (1/s_x)\partial/\partial x$ と置き換える。物理的には波の伝搬方向成分に複素数の減衰が加わることを意味する。
  • ストレッチされたアンペア則:$\nabla_s \times \mathbf{H} = j\omega\varepsilon_0\mathbf{E}$。電場と磁場が対称的に修正され、インピーダンス $\eta = \sqrt{\mu_0/\varepsilon_0}$ が保存される。これが「完全整合」の名の由来——PML界面でのインピーダンス不連続がゼロ。
  • UPML媒質テンソル:$[\Lambda] = \mathrm{diag}(s_y s_z/s_x,\; s_z s_x/s_y,\; s_x s_y/s_z)$ として、$\varepsilon_{\mathrm{PML}} = \varepsilon_0[\Lambda]$, $\mu_{\mathrm{PML}} = \mu_0[\Lambda]$ と定義。通常のマクスウェル方程式の形式を保ったまま、媒質パラメータの変更だけでPMLを実現できる。
PML設計パラメータの推奨値
パラメータ記号推奨範囲備考
PML層数$N_{\mathrm{PML}}$8〜16セル多いほど良いが計算コスト増。10層が実務的
グレーディング次数$m$3〜4$m=3$が最も一般的
最大導電率$\sigma_{\max}$$\frac{0.8(m+1)}{\eta_0 \Delta x}$Taflofeの経験式
目標反射係数$R$$10^{-4}$〜$10^{-8}$$10^{-6}$が標準的
$\kappa_{\max}$(CPML)$\kappa_{\max}$5〜15エバネッセント波の減衰を制御
$\alpha_{\max}$(CPML)$\alpha_{\max}$$0.01$〜$0.05$低周波安定化。周波数に依存しない

数値解法と実装

FDTDにおけるPML実装

🧑‍🎓

FDTDでPMLを実装するとき、具体的にどこをどう変えるんですか?

🎓

FDTDの通常の更新式——例えば $E_z$ の更新——にPMLの減衰項を追加する。CPMLの場合、1次元($x$方向のPML)では次のようになる:

$$ E_z^{n+1} = C_a \cdot E_z^n + C_b \cdot \left(\frac{\partial H_y}{\partial x}\bigg|^{n+1/2} + \Psi_{E_z x}^{n+1/2}\right) $$

ここで $\Psi_{E_z x}$ はCPMLの補助変数で、以下の再帰式で更新される:

$$ \Psi_{E_z x}^{n+1/2} = b_x \cdot \Psi_{E_z x}^{n-1/2} + a_x \cdot \frac{\partial H_y}{\partial x}\bigg|^{n+1/2} $$
$$ b_x = e^{-\left(\sigma_x/\kappa_x + \alpha_x\right)\Delta t/\varepsilon_0}, \qquad a_x = \frac{\sigma_x}{\sigma_x \kappa_x + \kappa_x^2 \alpha_x}\left(b_x - 1\right) $$
🧑‍🎓

なるほど、通常の更新式に $\Psi$ という補助変数を足すだけなんですね。思ったよりシンプルだ。

🎓

そう、CPMLの最大の利点はそこ。既存のFDTDコードをほとんど変えずに、PML領域のセルだけ追加の $\Psi$ 更新を入れるだけでいい。メモリも $\Psi$ の分だけ増えるだけだから、計算コストへの影響は小さい。

FEMにおけるPML実装

🧑‍🎓

FEMの場合はどうなるんですか? FDTDと同じアプローチ?

🎓

FEMでは通常UPML(Uniaxial PML)を使う。周波数領域FEMの場合、PML領域の要素に異方性の複素誘電率・透磁率テンソルを設定するだけで済む。弱形式を立てるときにPML媒質テンソル $[\Lambda]$ が自動的に組み込まれる。

🎓

辺要素(Nedelec要素)ベースの定式化だと、PML内のカール方程式は:

$$ \nabla \times \left([\Lambda]^{-1} \nabla \times \mathbf{E}\right) - k_0^2 [\Lambda] \mathbf{E} = 0 $$

ここで $k_0 = \omega\sqrt{\mu_0\varepsilon_0}$ は自由空間の波数。$[\Lambda]$ は座標ストレッチングから決まる複素テンソルで、PML外では単位行列に退化する。

🧑‍🎓

FEMだとメッシュの自由度が高いから、円筒形や球形のPMLも作れるんですか?

🎓

そのとおり。FEMの大きな強みだ。HFSS(Ansys)はデフォルトで解析領域を囲む球状のRadiation Boundary + PMLを自動生成する。直方体PMLだとコーナー部の処理が厄介だけど、球状なら「中心からの距離」だけでストレッチング係数を定義できるから整合も取りやすい。

CPML(Convolutional PML)の定式化

🧑‍🎓

CPMLの「畳み込み」って何を畳み込んでるんですか? 信号処理のフィルタと同じ?

🎓

まさにそう。PMLのストレッチング係数 $s_x$ を時間領域に変換すると、空間微分と時間の畳み込み積分が現れる:

$$ \frac{1}{s_x} \frac{\partial f}{\partial x} \quad \xrightarrow{\text{時間領域}} \quad \frac{1}{\kappa_x}\frac{\partial f}{\partial x} + \underbrace{\int_0^t \zeta_x(\tau) \frac{\partial f(t-\tau)}{\partial x}\,d\tau}_{\text{畳み込み項 } \Psi} $$

$\zeta_x(t) = -\frac{\sigma_x}{\kappa_x^2}\,e^{-(\sigma_x/\kappa_x + \alpha_x)t/\varepsilon_0}$ は指数的に減衰するカーネル。この畳み込みを再帰的に更新できるのがCPMLの計算効率の秘密だ。過去の全タイムステップの履歴を保存する必要がなく、$\Psi$ の現在値と前の値だけで更新できる。

🧑‍🎓

IIRフィルタみたいな仕組みですね! だから計算コストが軽いのか。

🎓

いい直感だ。まさに1次のIIRフィルタ構造。Roden & Gedneyが2000年の論文でこの再帰形式を示して以来、CPMLはFDTDにおけるPML実装のゴールドスタンダードになっている。

安定性とCFL条件

🧑‍🎓

PMLを入れるとCFL条件が変わったりしますか? 安定性が心配です。

🎓

良い着眼点だ。CPMLの場合、通常のCFL条件(Courant条件)はPMLの有無にかかわらず同じ。つまり:

$$ \Delta t \leq \frac{1}{c\sqrt{1/\Delta x^2 + 1/\Delta y^2 + 1/\Delta z^2}} $$
🎓

ただし注意点が2つある:

  • 長時間計算:Split-field PMLやUPMLでは、$10^5$タイムステップ以上の長時間計算で不安定性が生じることがある。CPMLの $\alpha$ パラメータはこれを抑制するために導入された。
  • 分散性媒質との組み合わせ:ドルーデモデルやローレンツモデルのような分散性媒質とPMLを組み合わせると、$s_x$ の周波数依存性と媒質の周波数依存性が相互作用し、不安定になるケースがある。この場合は $\alpha$ を適切に調整するか、ADE-CPML(Auxiliary Differential Equation CPML)を使う。

PMLを直感的に理解する

PMLは「音楽スタジオの防音室」に似ている。スタジオの壁はただの厚いコンクリートではなく、表面が柔らかい吸音材で覆われ、奥に行くほど密度が高くなる多層構造になっている。音波は壁に入ると徐々にエネルギーを失い、壁の裏に抜けることも跳ね返ることもない。PMLの $\sigma(x)$ プロファイルは、まさにこの吸音材の密度勾配に対応する。急に密度が変わると「壁感」が出て反射するし、滑らかすぎると吸音しきれない——そのバランスがグレーディング次数 $m$ で制御される。

実践ガイド

PMLパラメータ設計の実務指針

🧑‍🎓

理論はわかったんですけど、実際にPMLを設計するとき、最初に何を決めればいいですか?

🎓

設計手順は3ステップだ:

  1. PML厚 $d$ を決める:最低波長 $\lambda_{\min}$ の半分以上。FDTD なら 8〜16 セル幅が標準。多くの商用ツールでは自動設定される。
  2. グレーディング次数 $m$ を選ぶ:迷ったら $m = 3$。エバネッセント波が多い問題(近傍場解析、導波路の遮断モード付近)では $m = 4$ にすることもある。
  3. $\sigma_{\max}$ を計算する:目標反射係数 $R$ から上述の式で逆算。$R = 10^{-6}$ がいい出発点。
🧑‍🎓

PMLと解析領域の間に隙間は必要ですか? いきなりPMLを貼り付けていいんですか?

🎓

非常に重要なポイントだ。PMLの内側面から最も近い散乱体やアンテナまで、最低でも $\lambda/4$(できれば $\lambda/2$)の空間を確保すること。理由は2つ:

  • エバネッセント波:構造体の近傍場は指数的に減衰する成分を含んでいて、これがPML界面に到達すると増幅して反射する。距離を取れば自然減衰する。
  • 近傍場の擾乱:PMLは遠方場(伝搬波)の吸収に最適化されている。近すぎると数値分散の影響でPMLの性能が劣化する。

PML内のメッシュ設計

🧑‍🎓

PML内のメッシュは粗くしていいですか? どうせ吸収されるだけだし…

🎓

それは絶対にやってはいけない典型的なミスだ。PML内の要素サイズが解析領域より急に粗くなると、その境界で数値的なインピーダンス不連続が生じて反射する。

メッシュ設計項目推奨値理由
PML界面の要素サイズ解析領域と同一インピーダンス不連続の回避
PML内の要素サイズ変化隣接要素比 $\leq$ 1.2急激な変化は数値反射の原因
PML方向の層数8〜12層導電率の滑らかな変化を表現
1波長あたりの要素数$\geq$ 10(PML内も同様)数値分散の抑制
🧑‍🎓

PML内も解析領域と同じ密度を保つってことは、計算コストがかなり増えますよね?

🎓

3Dの場合、PMLは6面に配置されるから体積増加は無視できない。例えば解析領域が $50 \times 50 \times 50$ セルで、PML厚が10セルなら、全体は $70 \times 70 \times 70$ セルになり、体積比で約2.7倍だ。でもPMLをケチって反射が混入するほうが、後工程での手戻りを含めれば圧倒的に高コスト。実務では「PMLは保険料」と思っておいたほうがいい。

PML性能の検証方法

🧑‍🎓

PMLがちゃんと機能しているかどうか、どうやって確認するんですか?

🎓

3つの検証方法がある:

  1. 参照解との比較:解析解が存在する問題(点源ダイポール、平面波散乱など)でPML付きの数値解と比較する。最も確実な方法。
  2. 解析領域サイズの変更:PMLの位置を変えて(解析領域を広げて)結果が変わらないことを確認する。結果が変わるなら、PMLが近すぎるか性能が不足している。
  3. PML内の電場強度のモニタリング:PMLの最外面(PEC壁直前)で電場振幅をモニタする。十分に減衰していれば(例えば $-60\,\text{dB}$ 以下)PMLは正常に機能している。

よくある失敗パターンと対策

🧑‍🎓

PMLで初心者がやりがちなミスって何ですか? 先に教えてもらえると助かります。

🎓

実務で出会う頻度が高い順に5つ挙げよう:

失敗パターン症状原因対策
PMLが近すぎる近傍場の数値が不安定、放射パターンに変な凹凸散乱体とPMLの距離が $\lambda/4$ 未満最低 $\lambda/2$ の隙間を確保
$\sigma_{\max}$ が大き過ぎるPML界面での反射が大きい離散化によるインピーダンス不連続が増幅$R$ の目標値を上げて $\sigma_{\max}$ を下げる
PML内メッシュが粗い広帯域で反射レベルが高い導電率の変化をメッシュが解像できないPML内も解析領域と同等の密度を維持
コーナー/エッジの処理漏れ特定方向からの反射だけ大きいPMLのコーナー(2面交差)やエッジ(3面交差)で適切なテンソルが設定されていないコーナーでは複数方向の $s_x, s_y, s_z$ を同時に適用
分散性媒質のPML不整合長時間計算で発散PMLの $s_x$ と媒質の分散関係が矛盾ADE-CPMLを使用。$\alpha > 0$ を設定
🧑‍🎓

コーナーの処理って盲点ですね! 直方体のPMLだと8つのコーナーと12のエッジがあるから、全部で26個の領域を個別に設定する必要がある?

🎓

そのとおり。3DのPMLは「面PML」(6個)、「辺PML」(12個)、「角PML」(8個)の合計26領域に分類される。面PMLでは1方向だけの $s_x$ を適用、辺PMLでは2方向の $s_x s_y$、角PMLでは3方向全部。商用ツールはこれを自動処理してくれるけど、自作コードでは見落とすと特定方向からの反射だけ異常に大きくなる。

Coffee Break よもやま話

「PML厚を増やしても反射が減らない」問題の真犯人

PMLの反射が想定より大きいとき、多くのエンジニアが真っ先に「PML層数を増やそう」とする。しかし真の原因は「PMLが薄い」ことではなく、「PML界面でのメッシュの不連続」であることが多い。解析領域の端に細かいメッシュがあり、PMLに入った途端に粗いメッシュに切り替わるケースが典型的だ。数値的なインピーダンス不連続は $\sigma$ のグレーディングでは吸収できない——物理的な反射ではなく数値的なアーティファクトだからだ。診断法はシンプル:PML層数を倍にしても反射レベルが変わらなければ、犯人はメッシュの不連続。PML内のメッシュ品質を確認しよう。

PML配置距離の経験則

アンテナ解析の現場では「散乱体から PML まで $\lambda/4$ 以上」が最低ライン。RCS(レーダー断面積)解析では $\lambda/2$ 以上が推奨される。導波路の不連続解析では、伝搬モード以外の高次モードが $-40\,\text{dB}$ 以下に減衰する距離を確保すること。「十分に遠い」とは「エバネッセント波が無視できるほど減衰する距離」と同義だ。

ソフトウェア比較

商用ツールのPML実装比較

🧑‍🎓

商用ツールだとPMLは自動設定されるんですか? それとも自分で全部パラメータを決めないとダメ?

🎓

主要ツールはすべてPMLを自動設定するが、内部で使っている手法やユーザーが介入できる範囲が違う。比較してみよう:

ツールPML種別自動設定ユーザー調整可能項目特徴
Ansys HFSSFEM + Radiation Boundary / PML完全自動(Radiation Boundary がデフォルト)PML厚(層数)、距離適応メッシュ精密化と連動。球状PMLが自動生成される
CST Studio SuiteCPML(時間領域)/ UPML(周波数領域)自動(推奨層数を表示)層数、距離、$\sigma$ プロファイル時間・周波数で異なるPMLを自動選択
COMSOL MultiphysicsUPML(Stretched Coordinate PML)半自動(PMLドメインは手動追加)ストレッチング係数、ジオメトリ形状円筒・球状PMLをGUIから設定可能。マルチフィジクスとの連成も対応
Remcom XFdtdCPML自動(7層デフォルト)層数GPU加速FDTD。大規模電波伝搬解析向け
Altair FekoUPML + MoM-PMLハイブリッド自動PML厚、層数MoMとFEMのハイブリッドでPML境界を最小化
🧑‍🎓

HFSSは「Radiation Boundary」がデフォルトって書いてありますけど、これはPMLとは違うんですか?

🎓

いいところに気づいた。HFSSのRadiation Boundaryは1次のABC(吸収境界条件)で、PMLとは別物だ。多くのケースではこれで十分な精度が得られるけど、導波路の開口端や近傍場が強い問題では不十分なことがある。そういう場合にHFSSで明示的にPMLを有効にする。HFSS 2024以降は「Hybrid ABC-PML」モードもあり、遠方場はABC、近傍場が強い方向だけPMLという使い分けが自動化されている。

オープンソースツールのPML

🧑‍🎓

無料で使えるFDTDツールでPMLを試したいんですけど、何がおすすめですか?

🎓

研究や学習用途なら以下が有力だ:

  • Meep(MIT):Python API でFDTDを実行。CPMLが標準実装済み。2D/3D対応。学術論文で最も引用されるオープンソースFDTDツール。
  • gprMax:地中レーダー(GPR)向けFDTD。CPMLを内蔵。Pythonで制御可能。
  • OpenEMS:FDTD + DGTD。MATLABまたはOctaveから呼び出し。CPMLを実装。
  • FENICS(FEMフレームワーク):汎用FEMだがPMLの定式化を自分で書く必要がある。UPMLの実装例がドキュメントにある。
🧑‍🎓

Meepが一番手軽そうですね。CPMLのパラメータはデフォルトで大丈夫ですか?

🎓

Meepのデフォルト設定はほとんどの問題で十分な性能を出す。pml_layers = [mp.PML(thickness=1.0)] とするだけでPMLが自動配置される。thickness の単位は波長ではなく「Meepの空間単位」だから、解析周波数との関係を確認すること。厚さが不足していれば反射が $-40\,\text{dB}$ 程度にとどまることがある。そのときは thickness=2.0 に増やせばいい。

Coffee Break よもやま話

自作FDTDコードにCPMLを実装する最短ルート

研究用に自作FDTDコードを書いている人がCPMLを追加する場合、最も参考になるのはJohn B. Schneiderの無料オンライン教科書 "Understanding the Finite-Difference Time-Domain Method" のChapter 11だ。2D TMモードのCPML実装がPythonコードで約50行、3Dに拡張しても各電場・磁場成分に補助変数 $\Psi$ を加えるだけで、元の更新ループへの変更は最小限で済む。Dennis SullivanのMATLABコードも定評がある。共通する落とし穴は「PMLのコーナー処理を忘れる」こと——2方向・3方向のストレッチングを同時に適用し忘れると、コーナーから大きな反射が生じる。

トラブルシューティング

PMLからの偽反射

🧑‍🎓

PMLを設定したのにアンテナの放射パターンにリップルが入るんです。反射が残ってるみたいで…

🎓

PMLからの偽反射の診断手順を教えよう:

  1. PML最外面の電場振幅を確認:PEC壁直前で $-60\,\text{dB}$ 以下に減衰しているか? 不十分なら $\sigma_{\max}$ またはPML厚を調整。
  2. PML界面のメッシュ連続性を確認:解析領域とPMLの境界で要素サイズに段差がないか? メッシュビューアーで視覚的にチェック。
  3. 解析領域を $\lambda/4$ 拡大してみる:リップルが消えるなら、元の配置ではPMLが構造体に近すぎる。
  4. PML層数を倍にしてみる:反射レベルが改善するなら吸収不足。改善しないならメッシュが原因。

長時間計算での不安定性

🧑‍🎓

FDTD計算を長時間走らせると、途中から電場の値が発散するんです。PMLが原因ですか?

🎓

PMLのlate-time instability(長時間不安定性)は有名な問題だ。特にSplit-field PMLとUPMLで起きやすい。原因は、PMLのストレッチング係数 $s_x$ に純虚数の極がある場合、時間領域で増大するモードが存在すること。

🎓

対策は明確:

  • CPMLを使う:$\alpha > 0$ のパラメータが低周波モードの不安定性を抑制する。これがCPMLの開発動機の一つ。
  • $\alpha_{\max}$ を $0.01 \sim 0.05$ に設定:ゼロだと不安定化のリスクがある。逆に大きすぎるとPMLの吸収性能が劣化する。
  • CFL数をクーラン限界の95%以下にする:限界ギリギリだと丸め誤差の蓄積で不安定化しやすい。

エバネッセント波の処理

🧑‍🎓

導波路の遮断周波数付近でPMLが機能しないんですけど、これはどうすれば?

🎓

遮断モード(伝搬しないモード)はエバネッセント波——空間的に指数減衰する波だ。通常のPMLは伝搬波の吸収に最適化されているから、エバネッセント波がPML内で増幅されるケースがある。

対策は2つ:

  • CPMLの $\kappa$ パラメータを活用:$\kappa_{\max} = 5 \sim 15$ に設定すると、エバネッセント波の実数部の減衰が強化される。
  • PMLからの距離を十分に取る:エバネッセント波は距離とともに指数的に減衰するから、PMLに到達する前に自然消滅させるのが最も確実。

デバッグチェックリスト

🧑‍🎓

PMLで問題が起きたとき、どういう順番でチェックすればいいですか? フローチャート的なものがほしいです。

🎓

PMLトラブル発生時の系統的なデバッグ手順を以下にまとめた。上から順にチェックしてくれ:

  1. CFL条件は満たしているか? → 違反していれば $\Delta t$ を下げる。PMLとは無関係の基本的な安定条件。
  2. PML内のメッシュは解析領域と連続的か? → 段差があればメッシュを修正。これが反射の原因No.1。
  3. PMLの外壁(PEC)直前で電場は十分に減衰しているか? → $-40\,\text{dB}$ 未満ならPML厚の増加または $\sigma_{\max}$ の調整。
  4. 構造体からPMLまでの距離は $\lambda/4$ 以上あるか? → 不足していれば解析領域を拡大。
  5. PMLのコーナー/エッジ処理は正しいか?(自作コードの場合)→ 2方向・3方向のストレッチングを同時に適用しているか確認。
  6. 長時間不安定性が出ているか? → CPMLを使い、$\alpha > 0$ を設定。
  7. 分散性媒質と組み合わせているか? → ADE-CPMLまたは $\alpha$ の調整を検討。
🧑‍🎓

すごくわかりやすいです! このリストを手元に置いておきます。PMLの全体像がやっとつかめました。

🎓

PMLは「設定したら忘れる」タイプの技術に見えるけど、問題が起きたときに原理を理解していないと原因切り分けができない。今回の内容を理解していれば、商用ツールでもカスタムコードでも、PMLの問題に自信を持って対処できるはずだ。

関連シミュレーター

この分野のインタラクティブシミュレーターで理論を体感しよう

シミュレーター一覧

関連する分野

電磁気解析連成解析構造解析
この記事の評価
ご回答ありがとうございます!
参考に
なった
もっと
詳しく
誤りを
報告
参考になった
0
もっと詳しく
0
誤りを報告
0
Written by NovaSolver Contributors
Anonymous Engineers & AI — サイトマップ
プロフィールを見る