RSoft 平滑斜面与电镜建模
Keysight RSoft 2026 CAD / DiffractMOD / FullWAVE · 针对当前 24 层楼梯闪耀耦入 · 2026-09-13
1. 精度为什么不满意:两层误差
当前 blazed_incoupler.ind 不是「平滑斜面被求解器切坏了」,而是 CAD 里就已经是楼梯:blaze_layers() 把直角齿切成 24 层等厚矩形,胶水左对齐、银右对齐。层厚 H/24 = 7.08 nm,银–胶界面是一串台阶,不是平面。
| 误差源 | 现状 | 对金属闪耀 DE 的影响 | 优先级 |
|---|---|---|---|
| CAD 楼梯 | 24 层、7 nm 台阶 | 假棱镜、假散射;TM / 银界面更明显 | 高 |
| Λ、H、截断 | 365/170 未截断 vs 378/218 截断 | 改变闪耀相位与占空比,往往大于楼梯 | 最高 |
| 胶水 n | 1.80 vs Inkron 1.74 | 对比度主要来自 Ag,次要但仍应改 | 中 |
| RCWA 谐波 | Nx=21 | 金属锐角未收敛会漂几个百分点 | 中 |
| Ag 厚度 | 200 nm vs 规格 >500 nm | 可见光趋肤深度 ~12 nm,对 DE 几乎无影响 | 低 |
2. 关键事实:CAD 平滑 ≠ RCWA 不切片
DiffractMOD 是 RCWA:沿主方向(本模型 +z)把单胞切成均匀折射率层,层间用传输线连接。手册 3.B.4:
- 未锥化的矩形段:求解器能精确找到界面,不必靠很细的 Index Resolution。
- 锥化、弯曲、多边形斜边:必须按 Index Resolution(.ind 里的
step_size)切片;层厚不超过该值。
所以正确目标不是「RCWA 里出现解析斜面」,而是:
- CAD 用真斜面描述几何(一段锥形或一个多边形),不要预先画 24 个矩形。
- 把切片精度交给
step_size/ Index Res.,做收敛:例如 H/32、H/64、H/128,看 m=−1 的 DE 变化 < 1% 相对。 - 谐波 Nx 同样做收敛(21 → 41 → 61),金属 TM 尤其需要。
FullWAVE 宣称有 sub-cell / conformal 网格,斜面比纯楼梯 FDTD 准;金属锐角仍建议用 RCWA 出 BSDF,FDTD 只做抽检。
3. 方案对比
| 方案 | CAD 怎么建 | rstools API | 适合 | 不适合 |
|---|---|---|---|---|
| A. 锥形 segment | 一段胶水 + 一段银,dimensions ≠ dimensions_end,轴线沿斜面平移 | add_segment(..., dimensions_end=) | 理想直角 / 线性斜面;参数化 Λ、H | 圆角、SEM 不规则轮廓 |
| B. 多边形 | XZ 顶点列,闭合;3D 沿 Y 拉伸 | add_polygon(x=, y=) 或 file='tooth.dat' | 截断闪耀、圆角、电镜描边 | 要频繁改 Λ/H 时不如符号驱动的锥形段 |
| C. 加密楼梯 | NStair=64/128 矩形 | 现有 blaze_layers() | 快速对照「楼梯收敛了没有」 | CAD 臃肿;不是平滑斜面 |
| D. User Profile | 高度/折射率函数或 .dat | add_userprofile | AFM 高度图、灰度膜厚 | 多材料分区(胶+银)要两套 profile 或再镀膜 |
| E. FullWAVE | 同一 CAD | sim_tool=ST_FULLWAVE | 对照 RCWA、有限周期 | BSDF 角谱扫描成本高 |
近期主路径:A(设计 CAD)→ 几何改成规格截断后改 B → 电镜来了走 B 或 D。 C 只用来证明楼梯已经收敛,不当交付几何。
4. 推荐:锥形 segment(真直角闪耀)
RSoft 线段宽度沿路径线性变化。若轴线同时平移,可以得到一侧竖直、一侧倾斜的直角齿,而不是对称等腰三角。
约定:z=0 为玻璃/胶水,+z 向银;竖直壁在 −x,斜面朝 +x。
- 胶水起点:中心 x=0,宽 Λ,z=0 → 覆盖 [−Λ/2, Λ/2]
- 胶水终点:中心 x=−Λ/2,宽 0,z=H → 退到左上角点
- 银块与之互补,再加盖帽
from rstools import RSoftCircuit
P, H = 0.365, 0.170 # μm;规格件改成 0.378, 0.218 并做截断
c = RSoftCircuit()
# ... symbols / materials 同现脚本 ...
glue = c.add_segment(
position=(0.0, 0.0, 0.0),
offset=(-P/2.0, 0.0, H),
dimensions=(P, 0.0),
dimensions_end=(0.0, 0.0),
)
glue.material('ImprintGlue')
ag = c.add_segment(
position=(P/2.0, 0.0, 0.0),
offset=(-P/2.0, 0.0, H),
dimensions=(0.0, 0.0),
dimensions_end=(P, 0.0),
)
ag.material('Ag')
c.set_symbol('step_size', 'Height/64') # Index Resolution,不是 CAD 楼梯层数
c.write(r'D:\\Mac\\Simulation\\rsoft_blazed_incoupler\\blazed_taper.ind')
规格截断怎么改锥形
α 对法线 65° ⇒ 基板倾角 25°。斜面在一个周期内只能爬升 P·tan25° ≈ 176 nm,小于 H=218 nm。因此:
- 从 z=0 到 z=176 nm:用锥形段(或多边形)画 65° 斜面;
- 从 z=176 到 218 nm:加一段等宽矩形(平顶或竖直截断,按 SEM/工艺图二选一);
- 银仍填满剩余空腔 + 盖帽。
不要再把 218 nm 硬塞进未截断直角齿——那会改周期或改角,破坏 k 闭合。
5. 多边形:圆角、截断、电镜轮廓
手册 5.D:多边形是 XZ 平面顶点列,必须闭合(首末点相同);3D 沿 Y 挤出。Python:
xs = [-P/2, -P/2, P/2, -P/2]
zs = [ 0.0, H, 0.0, 0.0]
poly = c.add_polygon(position=(0,0,0), x=xs, y=zs) # y 数组实际是 Z
poly.material('ImprintGlue')
# 或 file='glue_tooth.dat',两列 ASCII:X Z,首末相同
电镜描边时在斜面两端加圆弧顶点(倒角半径 10–30 nm 量级很常见),比直角金属棱的 RCWA 更稳,也更接近压印。
多边形坐标可进 .dat 做 Dynamic Load,换一张 SEM 轮廓不必改 .ind 结构。
6. 电镜 / AFM 进 RSoft
官方就有「用 SEM 定义截面」的工具链,不必自造求解器。
6.1 截面 SEM → 多边形(推荐给闪耀齿)
- 拍摄:截面 SEM,尽量垂直沟槽;同一视场至少 3–5 个周期;带标尺。
- 校准:用标尺把像素换成 nm;校正倾斜(样品未切正会把 H 和 α 一起歪)。
- 分割:阈值 / 分水岭分开玻璃、胶水、银、孔隙。不要用未校准的 JPEG 直接当折射率。
- 轮廓:每个周期提取胶–银界面折线;多周期平均后再闭合成单胞多边形(减噪声、减单个缺陷)。
- 写入
glue_tooth.dat/ag_fill.dat(两列 X Z,μm,闭合)。 - CAD:
add_polygon(..., file=...),单胞边界仍是 ±Λ/2。 - 镀银:若 SEM 上看不到厚银或只看到齿形,用设计厚度在轮廓外偏置;RSoft
coatuf可对高度 profile 加涂层,多边形则用「外轮廓偏移」生成第二套顶点。
6.2 SEM 位图 → User Profile(官方 bmp2ind)
手册原文:bmp2ind 把索引色 BMP 转成 RSoft 数据文件,可用 SEM 图像定义波导/光纤截面的用户折射率剖面。
- 只支持 1/4/8 bit 索引色,不支持 24-bit。先在图像软件里转成索引色。
-w -h设剖面宽高(μm);-m=map.txt把调色板索引映射到折射率,例如胶 1.74、银用材料名另走 segment。- 灰度图更适合「一种材料的高度/占空」,不适合胶+银两相;两相仍优先多边形。
bmp2ind -w0.378 -h0.35 -m=materials.map sem_cell.bmp sem_cell.dat
6.3 AFM 高度 + coatuf(镀膜)
coatuf 专为「AFM 等得到的高度 profile 再加一层涂层」:生成第二份 user profile,在 CAD 里与未镀膜段同位叠放。银盖帽可以用这条,齿形仍用多边形或高度图。
coatuf -t0.2 -sx1 -sy1 -sf1 tooth_height.dat ag_coat.dat
6.4 电镜建模的坑
| 问题 | 后果 | 处理 |
|---|---|---|
| 一张齿当单胞 | 缺陷被当成周期结构,假衍射级 | 多周期平均,或 FullWAVE 算有限个周期抽检 |
| 未切正 / 无标尺 | α、H 同时错 | 标尺 + 倾斜校正;用已知 Λ 反推像素当量 |
| 24-bit 照片直接 bmp2ind | 工具拒绝或颜色无意义 | 索引色 + 材料映射表 |
| 把 SEM 衬度当 n | 银的 n、k 全错 | 材料仍用库色散;SEM 只提供几何 |
| 残胶、圆角、孔隙忽略 | 设计 CAD 偏乐观 | 多边形保留圆角;残胶单独一层常数厚度 |
7. 求解器怎么选
| DiffractMOD RCWA | FullWAVE FDTD | FemSIM | |
|---|---|---|---|
| 斜面 | CAD 真斜面 + Index Res. 切片 | sub-cell/conformal,比纯楼梯好 | 非结构网格,几何保真最高 |
| 金属闪耀 BSDF | 主工具(角谱、谐波、色散) | 单点抽检 | 不做周期衍射效率表 |
| 电镜不规则 | 多边形切片即可 | 适合有限个周期、缺陷 | 过重 |
| 与 LightTools | bsdfgen 现有链 | 也可出 BSDF,更慢 | 不接 |
交付仍走:平滑(或 SEM)CAD → DiffractMOD 收敛 → bsdfgen → LightTools。FullWAVE 只在设计点 TE/TM 对一下 m=−1,相差超过 ~2% 再查几何或谐波。
8. 验收与实施顺序
- 不改 Λ/H,只把 24 层换成锥形段,
step_size=Height/64,扫 Nx 与层厚。若 DE 几乎不动,说明楼梯已经够;若 TM m=−1 变几个点,就以锥形为准。 - 把几何改到规格:Pin=378 nm,H=218 nm,α=65° 截断,胶水 n=1.74。这步对效率的影响通常大于楼梯。
- 收敛表:Index Res. × 谐波的 DE(m=−1),相对变化 < 1% 才出 BSDF。
- 电镜到货:标尺校准 → 多周期平均轮廓 →
*.dat多边形 → 同一套 dfmod / bsdfgen;设计 CAD 与 SEM CAD 出两张 BSDF 做公差。 - 不要用改周期去凑级次;k 闭合锁死 Pin。
本仓库对照
| 文件 | 角色 |
|---|---|
rsoft_blazed_incoupler/run_blazed_incoupler.py · blaze_layers() | 当前楼梯 CAD |
rsoft_blazed_incoupler/blazed_incoupler.ind | 24×2 矩形段 |
手册 H.B.1 add_segment(..., dimensions_end) | 锥形段 |
手册 5.D / add_polygon | 多边形斜面 |
手册 Appendix E bmp2ind、coatuf | SEM / AFM |
| DiffractMOD 3.B.4 Index Resolution | 斜面切片精度 |
本页是方案调研,尚未改生产 .ind。下一步若要落地,从锥形段替换 blaze_layers() 开始,并保留楼梯结果做差分。