PML吸収境界条件(Perfectly Matched Layer)
理論と物理
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厚)に対して多項式グレーディングで定義される:
ここで $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往復して戻ってくる波の反射係数は次の式で与えられる:
ここで $\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}$ について解くと:
例えば $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}$ に置き換える:
ここで $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 PML | 1994 | 場の分割 | 2倍 | 不安定になりうる | 教育・初期研究 |
| UPML | 1995 | 異方性テンソル | なし | 不安定になりうる | 周波数領域FEM |
| CPML | 2000 | 畳み込み+ADE | 補助変数のみ | 安定に吸収 | FDTD(標準) |
CPMLがエバネッセント波に強いのは、何が違うからですか?
CPMLのストレッチング係数には $\kappa$ と呼ばれる実数項が追加されていて:
$\kappa_x > 1$ がエバネッセント波の減衰を安定化し、$\alpha_x > 0$ が低周波でのPML性能を改善する。この3パラメータ($\sigma, \kappa, \alpha$)の組み合わせにより、広帯域かつ安定な吸収が実現する。
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)では次のようになる:
ここで $\Psi_{E_z x}$ はCPMLの補助変数で、以下の再帰式で更新される:
なるほど、通常の更新式に $\Psi$ という補助変数を足すだけなんですね。思ったよりシンプルだ。
そう、CPMLの最大の利点はそこ。既存のFDTDコードをほとんど変えずに、PML領域のセルだけ追加の $\Psi$ 更新を入れるだけでいい。メモリも $\Psi$ の分だけ増えるだけだから、計算コストへの影響は小さい。
FEMにおけるPML実装
FEMの場合はどうなるんですか? FDTDと同じアプローチ?
FEMでは通常UPML(Uniaxial PML)を使う。周波数領域FEMの場合、PML領域の要素に異方性の複素誘電率・透磁率テンソルを設定するだけで済む。弱形式を立てるときにPML媒質テンソル $[\Lambda]$ が自動的に組み込まれる。
辺要素(Nedelec要素)ベースの定式化だと、PML内のカール方程式は:
ここで $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$ を時間領域に変換すると、空間微分と時間の畳み込み積分が現れる:
$\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の有無にかかわらず同じ。つまり:
ただし注意点が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ステップだ:
- PML厚 $d$ を決める:最低波長 $\lambda_{\min}$ の半分以上。FDTD なら 8〜16 セル幅が標準。多くの商用ツールでは自動設定される。
- グレーディング次数 $m$ を選ぶ:迷ったら $m = 3$。エバネッセント波が多い問題(近傍場解析、導波路の遮断モード付近)では $m = 4$ にすることもある。
- $\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つの検証方法がある:
- 参照解との比較:解析解が存在する問題(点源ダイポール、平面波散乱など)でPML付きの数値解と比較する。最も確実な方法。
- 解析領域サイズの変更:PMLの位置を変えて(解析領域を広げて)結果が変わらないことを確認する。結果が変わるなら、PMLが近すぎるか性能が不足している。
- 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方向全部。商用ツールはこれを自動処理してくれるけど、自作コードでは見落とすと特定方向からの反射だけ異常に大きくなる。
「PML厚を増やしても反射が減らない」問題の真犯人
PMLの反射が想定より大きいとき、多くのエンジニアが真っ先に「PML層数を増やそう」とする。しかし真の原因は「PMLが薄い」ことではなく、「PML界面でのメッシュの不連続」であることが多い。解析領域の端に細かいメッシュがあり、PMLに入った途端に粗いメッシュに切り替わるケースが典型的だ。数値的なインピーダンス不連続は $\sigma$ のグレーディングでは吸収できない——物理的な反射ではなく数値的なアーティファクトだからだ。診断法はシンプル:PML層数を倍にしても反射レベルが変わらなければ、犯人はメッシュの不連続。PML内のメッシュ品質を確認しよう。
PML配置距離の経験則
アンテナ解析の現場では「散乱体から PML まで $\lambda/4$ 以上」が最低ライン。RCS(レーダー断面積)解析では $\lambda/2$ 以上が推奨される。導波路の不連続解析では、伝搬モード以外の高次モードが $-40\,\text{dB}$ 以下に減衰する距離を確保すること。「十分に遠い」とは「エバネッセント波が無視できるほど減衰する距離」と同義だ。
ソフトウェア比較
商用ツールのPML実装比較
商用ツールだとPMLは自動設定されるんですか? それとも自分で全部パラメータを決めないとダメ?
主要ツールはすべてPMLを自動設定するが、内部で使っている手法やユーザーが介入できる範囲が違う。比較してみよう:
| ツール | PML種別 | 自動設定 | ユーザー調整可能項目 | 特徴 |
|---|---|---|---|---|
| Ansys HFSS | FEM + Radiation Boundary / PML | 完全自動(Radiation Boundary がデフォルト) | PML厚(層数)、距離 | 適応メッシュ精密化と連動。球状PMLが自動生成される |
| CST Studio Suite | CPML(時間領域)/ UPML(周波数領域) | 自動(推奨層数を表示) | 層数、距離、$\sigma$ プロファイル | 時間・周波数で異なるPMLを自動選択 |
| COMSOL Multiphysics | UPML(Stretched Coordinate PML) | 半自動(PMLドメインは手動追加) | ストレッチング係数、ジオメトリ形状 | 円筒・球状PMLをGUIから設定可能。マルチフィジクスとの連成も対応 |
| Remcom XFdtd | CPML | 自動(7層デフォルト) | 層数 | GPU加速FDTD。大規模電波伝搬解析向け |
| Altair Feko | UPML + 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 に増やせばいい。
自作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からの偽反射の診断手順を教えよう:
- PML最外面の電場振幅を確認:PEC壁直前で $-60\,\text{dB}$ 以下に減衰しているか? 不十分なら $\sigma_{\max}$ またはPML厚を調整。
- PML界面のメッシュ連続性を確認:解析領域とPMLの境界で要素サイズに段差がないか? メッシュビューアーで視覚的にチェック。
- 解析領域を $\lambda/4$ 拡大してみる:リップルが消えるなら、元の配置ではPMLが構造体に近すぎる。
- 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トラブル発生時の系統的なデバッグ手順を以下にまとめた。上から順にチェックしてくれ:
- CFL条件は満たしているか? → 違反していれば $\Delta t$ を下げる。PMLとは無関係の基本的な安定条件。
- PML内のメッシュは解析領域と連続的か? → 段差があればメッシュを修正。これが反射の原因No.1。
- PMLの外壁(PEC)直前で電場は十分に減衰しているか? → $-40\,\text{dB}$ 未満ならPML厚の増加または $\sigma_{\max}$ の調整。
- 構造体からPMLまでの距離は $\lambda/4$ 以上あるか? → 不足していれば解析領域を拡大。
- PMLのコーナー/エッジ処理は正しいか?(自作コードの場合)→ 2方向・3方向のストレッチングを同時に適用しているか確認。
- 長時間不安定性が出ているか? → CPMLを使い、$\alpha > 0$ を設定。
- 分散性媒質と組み合わせているか? → ADE-CPMLまたは $\alpha$ の調整を検討。
すごくわかりやすいです! このリストを手元に置いておきます。PMLの全体像がやっとつかめました。
PMLは「設定したら忘れる」タイプの技術に見えるけど、問題が起きたときに原理を理解していないと原因切り分けができない。今回の内容を理解していれば、商用ツールでもカスタムコードでも、PMLの問題に自信を持って対処できるはずだ。
なった
詳しく
報告