XIAN-FEM-2026June/三维matlab代码/2022-11 PML&&ABC/PML理解指南.md

10 KiB
Raw Blame History

PML 理解指南

面向将频域有限元光学仿真OpticsFEM扩展到 PML 吸收边界。
材料来源:本目录 2022-11 PML&&ABC 中的公式汇总、二维 MATLAB/COMSOL 示例,以及相关文献。


1. 一句话结论

PMLPerfectly Matched Layer完美匹配层是一种“体吸收层”在计算域外侧铺一层特殊区域让向外传播的波几乎无反射地进入并在层内衰减在频域 FEM 里,它通常不改弱形式结构,只把该区域的 \varepsilon,\mu 换成各向异性复数张量。

和你已有边界对比:

类型 作用位置 本质
ABC 外表面 近似吸收边界条件
SBC散射边界 边界面积分 一阶/高阶辐射条件近似
PML 体积区域 复数坐标拉伸 → 等效材料

PML 一般比简单 ABC/SBC 反射更小,尤其适合宽角度、开放域散射;代价是:多一层网格、材料变复张量、参数需要调。


2. 为什么需要 PML

开放域问题散射、天线、波导辐射的真实物理域是无限的计算机只能算有限区域。硬截断PEC/PMC会把出射波反射回来污染解。

PML 的目标:

  1. 匹配:波从物理域进入 PML 时反射尽量为 0“完美匹配”
  2. 吸收:波在 PML 内沿拉伸方向指数衰减。
  3. 外截断PML 外侧仍用 PEC 等简单条件;因为场已衰减,反射可忽略。

Berenger1994最早提出分裂场 PMLChew 等人用复数坐标拉伸统一解释,并推广到 3D这正是 FEM 最常用的视角。


3. 核心思想:复数坐标拉伸

3.1 直观理解

普通坐标 x 是实数。在 PML 里把法向坐标改成复数:


\tilde{x} = \int^{x} s_x(x')\,dx'

其中拉伸因子 s_x 带虚部。平面波 e^{-jkx} 变成 e^{-jk\tilde{x}},虚部使振幅沿传播方向指数衰减,而阻抗匹配保证界面无反射。

3.2 频域 Maxwell 的等价写法

在拉伸坐标系里写 Maxwell再映回原坐标等价于原方程形式不变但材料变成


\boldsymbol{\varepsilon}' = \varepsilon\,\boldsymbol{\Lambda},\qquad
\boldsymbol{\mu}' = \mu\,\boldsymbol{\Lambda}

\boldsymbol{\Lambda} 由各方向的 s_x,s_y,s_z(以及几何:笛卡尔/柱坐标)决定。
\varepsilon\mu 乘同一个 \Lambda:波阻抗不变 → 匹配;虚部 → 损耗。

3.3 与变换光学的关系

变换光学说坐标变换可用材料张量等效。PML 是“把实空间映射到复数空间”的特例。因此:

  • 矩形 PML单轴拉伸\Lambda 对角;
  • 圆/柱 PML先极坐标拉伸再转到笛卡尔\Lambda 一般非对角。

推导时用到雅可比矩阵;本目录的 .nb 和《变换光学硕士论文内容汇总》就是在练这件事。


4. 矩形笛卡尔PML —— 优先掌握

对 OpticsFEM 的盒状计算域,3D 盒式笛卡尔 PML 最实用。先把 2D 矩形搞懂即可推广。

4.1 单方向(例如只在 +x 侧)

设 PML 从 x=x_0 开始,厚度为 d,多项式阶次为 m,则常见形式:


s_x(x) = 1 - j\,\left(\frac{x-x_0}{d}\right)^{m}\frac{(m+1)R_0}{2\,d\,k_0}

本目录 MATLABFemAssemble.m)写法:

Sx = 1 - 1i*((averX-x0)/d)^m * (m+1)*R0/(2*d*k0);
Lambda = [1/Sx, 0, 0;
          0,    Sx, 0;
          0,    0,  Sx];
eps' = eps * Lambda;
mu'  = mu  * Lambda;

含义:

  • 只拉伸 x 方向;
  • \Lambda = \mathrm{diag}(1/s_x,\, s_x,\, s_x)2D TE/边元写法里常出现这种对角结构);
  • 物理域 s_x=1\Lambda=\mathbf{I}

4.2 三维盒式 PML实现时要记住

3D 中每个方向独立拉伸 s_x,s_y,s_z(角点、棱边多方向同时非 1


\boldsymbol{\Lambda} =
\begin{pmatrix}
s_y s_z / s_x & 0 & 0 \\
0 & s_x s_z / s_y & 0 \\
0 & 0 & s_x s_y / s_z
\end{pmatrix}
  • 面中心:只有一个 s\neq 1
  • 棱:两个 s\neq 1
  • 角:三个 s\neq 1

网格分区时必须把 PML 面/棱/角 标成不同 domain或在单元积分点按坐标判断落在哪一类区域再算对应的 s_x,s_y,s_z

4.3 参数直觉

参数 含义 调参经验
d PML 厚度 通常 \sim 0.5\lambda\sim 1\lambda 或若干层单元
m 电导剖面阶次 常取 24太大则陡峭难分辨
R_0 理论反射相关强度 越大吸收越强,过大可能数值病态
k_0=2\pi/\lambda 波数 进入 s 的无量纲化

经验:先保证厚度够、网格在 PML 内有几层,再调 R_0,m


5. 圆形PML —— 理解即可

圆形计算域时,沿径向 \rho 拉伸。本目录 FemAssemble3.m

sigma = ((rho-rho0)/d)^2 * R0/(d*k0);
s1 = 1 - 1i*(d/(2*rho))*sigma;   % 与角向相关的因子
s2 = 1 - 1i*sigma;               % 径向拉伸
aa = s1/s2; bb = s2/s1; cc = s1*s2;
% Lambda极坐标对角张量 → 转到笛卡尔 (x,y) 的 3×3 矩阵xy 块非对角)

要点:

  1. (\rho,\phi)\Lambda 对角;
  2. 变到 (x,y) 后出现交叉项 xy
  3. 每个高斯点用该点的 \rho 计算(材料随空间变化)。

若你的 3D 域是矩形盒子,先不必实现圆 PML;公式用来加深“拉伸 → \Lambda”的理解。


6. 频域 FEM 里 PML 怎么进方程

矢量 Helmholtz / 边元弱形式(示意):


\int_\Omega
(\nabla\times\mathbf{N})\cdot\mu_r^{-1}(\nabla\times\mathbf{E})
- k_0^2\,\mathbf{N}\cdot\varepsilon_r\mathbf{E}\,dV
= \text{右端(源/边界)}

PML 区域只需:


\varepsilon_r \leftarrow \varepsilon_r\boldsymbol{\Lambda},\qquad
\mu_r^{-1} \leftarrow (\mu_r\boldsymbol{\Lambda})^{-1}

本目录组装(FemAssemble.m)对应:


S_{ij}=\int (\nabla\times N_i)\cdot\mu'^{-1}(\nabla\times N_j),\quad
T_{ij}=-k_0^2\int N_i\cdot\varepsilon' N_j

因此:弱形式、基函数、自由度编号可以不动;改的是材料求值。
外边界仍可加 PEC/DirichletPML 外侧场应已很小。


7. 本目录代码怎么对照读

7.1 矩形示例(建议先跑通)

文件 作用
FemRectanglePML.m 主程序:读 COMSOL 网格 → 组装 → 求解 → 画场
FemAssemble.m 矩形 PML 核心domain==2 时构造 S_x,\Lambda
demo.mph 带分区的网格/模型

阅读线索:domain 区分物理域与 PML → 算 S_x\varepsilon',\mu' → 仍组装 S+T

7.2 圆形示例

文件 作用
FemCirclePML.m / FemCirclePML2.m 主程序
FemAssemble3.m / FemAssemble2.m 圆 PML\sigma,s_1,s_2,\Lambda
demo2.mph / demo3.mph 圆形分区模型

7.3 辅助

BF_Et.mBF_curlEt.mGetGuassPoints.m:边元与积分;
GetExEy.mplotEt.m:后处理看波是否在层内衰减、物理域是否干净。

7.4 文档与文献(需要时回查)

材料 何时看
PML公式汇总.docx s,\Lambda 公式
二维矩形有限元PML.docx 矩形推导与实现说明
二维圆有限元PML.docx 圆域推导
变换光学硕士论文内容汇总.docx + .nb 坐标变换推导
Chewcomplex stretching / 3D PML 理论根源
Berenger 1994 历史与原始思想
lec06_*.pdf 课堂式扫盲

8. 和 OpticsFEM你的 C++ 工程)怎么衔接

你现有能力大致是:体组装 + SBC 面积分 + PBC 等。接入 PML 时:

  1. 网格:外层增加 PML 壳体(面/棱/角分区JSON/domain 能识别 PML 区域。
  2. 材料:在体积分点,若属于 PML按坐标算 s_x,s_y,s_z,得到 \boldsymbol{\Lambda},再 \varepsilon\leftarrow\varepsilon\Lambda\mu\leftarrow\mu\Lambda
  3. 组装:沿用现有 curl-curl 弱形式PML 单元用复张量材料即可。
  4. 边界PML 最外表面用 PEC或现有简单条件开放方向用 PML 替代或与 SBC 分工(例如:侧向 PBC纵向 PML
  5. 验证:平面波/点源看物理域驻波是否消失、PML 内场衰减、与 COMSOL 对比。

优先实现顺序建议:

  1. 2D 矩形公式理解透(本指南 + FemAssemble.m
  2. 3D 单轴面 PML只有 \pm z
  3. 完整盒式(含棱、角);
  4. 再考虑 CFS-PML 等改进。

9. 常见误区

  1. 以为 PML 是边界条件 — 它是体层 + 材料,不是单纯边界积分。
  2. 只改 \varepsilon 不改 \mu — 匹配会破坏,反射变大。
  3. PML 太薄 / 网格太稀 — 理论再完美也会数值反射。
  4. R_0 盲目加大 — 剖面过陡 → 色散/病态。
  5. 角区漏标 — 角上必须多方向同时拉伸,否则角反射明显。
  6. 和 SBC 混用时职责不清 — 同一方向不要又厚 PML 又强 SBC 却不做对比验证。

10. 最小心智模型(背下来即可动手)

出射波 → 进入 PML 层(无反射匹配)
      → 复数拉伸方向上指数衰减
      → 外边界反射被压到可忽略

数学: s(x) 复数拉伸
实现: ε' = ε Λ(s),  μ' = μ Λ(s)
FEM  弱形式不变,只换材料

矩形单轴(记忆版):


s_x = 1 - j\left(\frac{x-x_0}{d}\right)^m C,\quad
\Lambda=\mathrm{diag}\!\left(\frac{1}{s_x},\,s_x,\,s_x\right)

3D 完整版用 s_x,s_y,s_z 填对角 \Lambda(见第 4.2 节)。


11. 建议自学顺序(压缩版)

  1. 读完本文件第 16、10 节。
  2. 对照 PML公式汇总.docx + FemAssemble.m 推一遍 S_x,\Lambda
  3. FemRectanglePML.m,改 m,R_0,d 看场图变化。
  4. 选读 Chew 复数拉伸 / 3D PML 两篇。
  5. 设计 OpticsFEMdomain 标记 + 积分点 \Lambda(x,y,z)

12. 术语速查

术语 含义
PML 完美匹配层
ABC 吸收边界条件(表面型近似)
CFS-PML 复数频移 PML改善低频/掠入射等)
拉伸因子 s 复数坐标映射的导数
\Lambda 把拉伸写成材料各向异性的张量
R_0,d,m 强度、厚度、剖面阶次
匹配 \varepsilon,\mu 同变换,界面理论零反射

文档目的:把本文件夹中的分散知识点收成一条可执行的理解路径,便于后续在 3D OpticsFEM 中实现笛卡尔盒式 PML。