StableRCWA · 圆锥入射的独立对照

圆锥入射:COMSOL 有限元与 RCWA 的对照

一维光栅在圆锥入射下的衍射,用两种互相独立的方法各算了一遍:StableRCWA 的 RCWA(C++ 模块里的 rcwa::solve_conical)和 COMSOL 的二维有限元。比较的量是每个传播级的四个通道效率和复 Jones 矩阵。从裸界面到带膜系的光栅共 8 组算例,通道效率最大相差 3.3×10−6;由端口 S 参数换算的 Jones 矩阵元最大相差 1.04×10−5,相位最大相差 0.013°,另一条直接采样电场的路线最大相差 1.5×10−5。光栅算例上的差与 RCWA 的截断误差、有限元的网格误差同量级,没有发现不随网格加密、不随截断阶数提高而减小的偏差。

台阶算例比较的通道数最大差,RCWA 取 M = 60出现在最大差,RCWA 取 M = 200

光栅 A:周期 0.8 µm,光栅层厚 0.3 µm,齿宽 0.3 µm、折射率 1.8,其余是空气;空气入射,基底折射率 1.5,波长 1.053 µm,极角 42°。各台阶的结构见第 5 节。

1

差到 10−6 说明什么

两种方法各有离散误差。RCWA 把场展开成 2M+1 个空间谐波,M 是截断阶数,误差随 M 增大而减小。有限元把计算区域剖分成小单元,误差随网格加密而减小。两种方法之差降到各自误差的量级之后,这个差只说明两边在误差范围内一致,分不出哪一边更准。

所以每组算例除了比较两种方法,还各看了一次每种方法的结果随自身参数的变化。RCWA 一侧取 M=60 与 M=200 两次结果之差。截断误差大致按 1/M2 下降(第 6 节),所以这个差约是 M=60 时截断误差的 0.91 倍,可以当作截断误差本身。

COMSOL 一侧取正式网格与再密一档的网格两次结果之差,网格的参数见第 3 节。这个差比正式网格的误差小:网格加密一档,误差只减小一半左右,两次结果之差也就只有正式网格误差的一半上下。第 6 节的表里,各光栅算例在正式网格上与 M=200 的差是这个变化的 1.5 到 2.2 倍。

下图把这四个量按台阶画在一起,每个量都是该台阶全部通道里的最大值。

两种方法之差,与每种方法自身换一档参数后的变化(通道效率,绝对值)

本页的 RCWA 结果全部来自 C++ 模块。对照的完整报告(没有随发布)的表里,RCWA 一栏出自另一份参照实现,即 gui/ 里附带的 Python 求解器。它与 C++ 模块的 Jones 矩阵元在 M = 60 时最多相差 6.9×10−13,M = 200 时最多相差 7.2×10−12,两处的数可以互换着读。

2

圆锥入射与四个通道

光栅的刻线沿 y 方向,周期方向沿 x,周期为 Λ。入射波矢与表面法线的夹角是极角 θ。入射波矢和法线所在的平面叫入射面,它与 x 轴的夹角是方位角 φ。

φ=0 时入射面垂直于刻线,各衍射级的波矢都在入射面内,s 偏振和 p 偏振互不耦合,这是通常的平面内入射。φ≠0 时,各级波矢沿刻线方向的分量相同,沿周期方向的分量逐级相差 λ/Λ:

kx,m=nIsinθcosφ−mλΛ,ky=nIsinθsinφ,kz,m=n2−kx,m2−ky2

波矢以 k0=2π/λ 为单位。n 是这一级所在介质的折射率,反射级取入射介质的 nI,透射级取出射介质的 nII。kz,m 是实数的级叫传播级,它带走能量;是虚数的级叫倏逝级,离开光栅后按指数衰减。某一级恰好在两者之间、kz,m=0 的位置叫 Rayleigh 截止。

m 前面是减号,这是 C++ 模块的编号。光栅方程常用的写法里 kx 随级次增大,本页的 +1 级是那里的 −1 级。COMSOL 的 Periodic Structure 节点自动生成的端口也按常用写法编号,所以第 3 节的端口表里这一级是 −1。

同一种介质里各传播级的波矢长度相同,ky 也相同,所以它们与刻线方向的夹角相同,都落在以刻线方向为轴的一个圆锥面上。圆锥入射由此得名。

各级的波矢不共面,每一级有自己的衍射面,即这一级的波矢与法线所在的平面,方位角是 φm=atan2(ky,kx,m)。偏振相对各自的衍射面定义:s 分量的电场垂直于衍射面,p 分量的电场在衍射面内并垂直于波矢。零级的面内波矢与入射波相同,它的衍射面就是入射面。

圆锥入射的几何(光栅 A 的参数:λ = 1.053 µm,Λ = 0.8 µm,θ = 42°,入射介质是空气,出射介质 n = 1.5)
40°
从斜上方看入射一侧
俯视:各级的面内波矢 (kx,m, ky)
在某一级的衍射面内看
光栅表面 法线 出射介质 入射介质
箭头是三束波的波矢。s 分量的单位矢量 s^ 垂直于纸面、指向读者,图中画成 ⊙;p 分量的单位矢量 p^ 在纸面内。每一束都满足 p^×s^=k^。
斜视图:视线跟着入射面转,图上入射面不动,改变 φ 时转动的是光栅。图上各束光沿各自波矢 (kx,m,ky) 所指的方向行进。C++ 模块自己的坐标里,场随 x、y 的变化写成 exp[−ik0(kx,mx+kyy)],时间因子是 exp(−iωt),波的行进方向与图上相反;定义左右不对称的齿形时要留意这一点,见第 4 节。浅色的竖直平面是衍射面,入射波与反射 0 级共用一个,+1 级另有一个。虚线弧上各点的波矢长度相同、ky 相同,反射各级的波矢端点都在这条弧上。俯视图:坐标轴固定在光栅上。实线半圆的半径是空气里的波数 nI,虚线半圆的半径是基底里的 nII,落在圆内的级在该介质里传播。各级排在同一条水平线上,间隔 λ/Λ = 1.316。φ 增大时这条线上移,+1 级在 φ = 47.93° 处移出空气的圆,从传播变成倏逝。短箭头是各级的 s^,在俯视图里垂直于这一级的面内波矢,逐级不同。衍射面内的那一幅画的是任一束波的 s^、p^ 怎样取,说明在图下。

入射波的 s、p 两个分量各自都会激发出每一级的 s、p 两个分量。所以每个衍射级用一个 2×2 的复矩阵描述,叫 Jones 矩阵:

(EsEp)m=(JssJspJpsJpp)m(EsEp)in

四个矩阵元对应四个通道。下标 ab 表示入射 b 偏振、出射 a 偏振,例如 sp 是 p 偏振入射、s 偏振出射。ss 和 pp 是同偏振通道;sp 和 ps 是交叉偏振通道,φ=0 时为零。通道效率是这个通道带走的功率占入射功率的比例,等于矩阵元模的平方乘一个能流因子:

ηab(m)=fm|Jab(m)|2,fm=Rekz,mnIcosθ

功率按垂直于光栅表面的能流计算,能流因子就是这一级与入射波在法线方向上的能流之比。反射级的 kz,m 在入射介质里取,透射级在出射介质里取。

本页比较每个传播级在反射和透射两侧各四个通道的效率,第 7 节再比较 Jones 矩阵元本身。反射 +1 级的 sp 通道记作 R+1 sp,透射零级的 ss 通道记作 T0 ss,其余类推。

图解:Jones 矩阵与偏振椭圆(需要浏览器脚本)
3

有限元模型

COMSOL 一侧用二维模型,只画一个周期的截面,物理场是 COMSOL 6.4 的电磁波频域接口。结构沿刻线方向不变,场沿这个方向只带一个相位因子,对应的波数叫离面波数,kop=k0nIsinθsinφ,就是上一节的 ky 乘上 k0。电场的三个分量都作为未知量求解。这样的二维模型算的就是三维的圆锥入射。

二维模型的一个周期(台阶 6:光栅 A 加两对膜,按比例画)
  • 区域。自上而下是空气间隔层、结构各层、基底间隔层,全部是矩形。折射率按区域给定。吸收介质在 RCWA 里写成 n+iκ,在 COMSOL 里写成 n−jki,取 ki=κ。
  • 左右边界。Floquet 周期条件:两侧的场只差一个由入射波矢决定的相位。
  • 上下边界。周期端口。上边界的端口发出入射平面波,同时接收反射;下边界的端口接收透射。一个端口只接收一个衍射级的一种偏振,所以每个传播级在每一侧需要两个端口。
  • 间隔层。端口只接收传播级,倏逝级靠间隔层衰减。间隔层的厚度 h 按衰减最慢的那个倏逝级取,使 exp(−2k0Imkzh) 不超过 10−8,再加 0.05 µm。光栅 A 在 φ = −40° 时上下间隔层的这个衰减量是 3.9×10−9 和 5.4×10−9。

在 COMSOL 里对应的设置如下。物理场接口里把求解的电场分量设成三分量矢量,离面波数填 kop。波动方程用折射率模型,折射率的实部和虚部按区域给定。周期性和端口用 Periodic Structure 节点:选上边界作激励端口,偏振选线偏振的 S 或 P,入射角填 alpha_inc(取值见第 4 节),两侧的折射率填 nI 和 nII,衍射级次按当前参数生成。左右边界的 Floquet 周期条件由这个节点自带,波矢取自周期端口。端口是按生成时的波长、角度和周期列出的,这些参数变了,传播级可能不同,端口要重新生成;本页每个算例都重新建模。

生成的端口分三类。周期端口本身接收零级里与激励同偏振的分量。它的 Orthogonal Polarization 子节点接收零级的另一种偏振。每个非零的传播级有两个 Diffraction Order 子节点:out-of-plane 的模式电场垂直于这一级的衍射面,对应 s;in-plane 的在衍射面内,对应 p。每个模型求解两次,一次 S 激励,一次 P 激励,所以下表每个端口列出两个通道。光栅 A 在 φ = −40° 时有 8 个端口:

COMSOL 的端口按它自己的级次号编号,与 RCWA 的级次号差一个符号,第 4 节说明。周期更大的附加 B 有 12 个端口。

网格

网格是自由三角形。每个区域的最大单元尺寸取 λ/(kn),n 是该区域的折射率,k 是每个局部波长里的单元数。齿的角点是介质的尖角,电场在那里有奇异性,角点处的最大单元尺寸再缩小若干倍。左边界先划分,再把网格复制到右边界,保证两条周期边界上的节点一一对应。单元用二次或三次多项式。

正式结果统一用这一档网格:三次单元,k = 16,齿角处再密 8 倍,单元尺寸的增长率 1.3。

正式网格的最大单元尺寸(nm)
一次求解
4

两套约定的对应

RCWA 和 COMSOL 的时间因子、坐标、角度参数、级次编号、偏振基都不一样。要逐通道比较,先要把每一项对应起来,而且每一条对应关系都要用数值核实,不能只靠读文档。下表是全部对应关系和核实用的数。其中入射角和结构取向两条容易取错,后面分开说明。

项目RCWACOMSOL怎样核实
时间因子exp(−iωt)exp(+jωt)两边的复振幅互为共轭。基底里相隔一段距离的两点,电场之比与平面波的相位因子 exp(−j k·Δr) 相差 2.2×10−3,k 是波矢。这一项用的是粗网格:每个局部波长 10 个单元,二次单元。
入射方向极角 θ,方位角 φ面内入射角 α,离面波数 kopα = atan(tan θ·cos φ)。裸界面对 Fresnel 公式,见下。
离面波数的符号ky = nI sin θ sin φkop = +k0·ky基底里的平面波应当满足 k·E = 0,k 是波矢。实测 |k·E|/(|k||E|) 不超过 2.6×10−3;把离面分量反号则是 0.33 到 0.44。
结构的取向ε(x)ε(−x),再整体平移COMSOL 里要建 RCWA 结构的镜像。用非对称光栅核实,见下。
级次第 m 级,kx,m = kx,0 − mλ/Λ端口自己的级次号不靠级次号,按每个端口报告的模式波矢与 RCWA 的 (kx,m, ky) 配对。正式结果里每个端口都配上了,两边的波矢相差不超过 2.3×10−16。见下。
偏振s、p,相对各级的衍射面入射的 S、P 相对入射面定义,φ ≠ 0 时入射面不是模型平面。出射端口里 out-of-plane 对应 s,in-plane 对应 p;周期端口本身与激励同偏振,Orthogonal Polarization 是另一种端口的模式电场方向投到 RCWA 的 s^、p^ 上应当是 ±1,实测与 ±1 相差不超过 2.8×10−16。
效率fm·|Jab|²|S|²端口的 S 参数已经按功率归一,不再乘能流因子。无吸收的算例里全部端口的 |S|² 之和应当是 1:三次单元、k ≥ 16 的 88 次求解偏差不超过 9.0×10−14,全部 150 次求解里最大的是 3.1×10−9,出在最粗的网格上。

最后一行的和等于 1 只说明能量守恒:无吸收的模型里功率只能从端口出去,没有端口接收的传播级会被边界反射回去,分到别的端口上。它不说明端口齐全,也不说明结果正确。下面级次号取错的那次求解少了一个传播级的端口,和照样是 1。

入射角:COMSOL 的参数是面内角

COMSOL 二维周期端口有一个入射角参数 alpha_inc。它是波矢在模型平面内的投影与法线的夹角,模型平面是光栅矢量和法线张成的平面。只有 φ=0 时它才等于极角 θ。读端口变量得到的关系是

kx=kI2−kop2sinα,β=kI2−kop2cosα

其中 kI=k0nI 是入射介质里的波数,kx 是波矢沿光栅矢量的分量(这里带单位,没有除以 k0),β 是沿法线方向的传播常数。要得到极角 θ、方位角 φ 的入射波,应当设

α=atan(tanθcosφ),kop=k0nIsinθsinφ

θ = 42°、φ = −40° 时 α = 34.596°。

极角 θ 与面内角 α
θ 是波矢本身与法线的夹角。α 是波矢投到模型平面之后与法线的夹角。图按 θ = 42°、φ = −40° 画,这时 α = 34.6°。
裸界面的反射率:两种设法与 Fresnel 公式

把 alpha_inc 直接设成 θ 时,模型照常求解,各端口效率之和照样是 1,但算的是极角 47.86° 的入射。这个错误在台阶 1(裸界面)就被 Fresnel 公式查了出来,改正之后才往下做。cosφ<0 即 |φ|>90° 的情形没有试。

图解:面内角与极角(需要浏览器脚本)

结构取向:COMSOL 里要建镜像

RCWA 用时间因子 exp(−iωt),场沿横向的变化写成 exp[−ik0(kx,mx+kyy)]。这两个符号合起来,kx,m>0 的波在 RCWA 的坐标里朝 −x 方向走。COMSOL 用 exp(+jωt) 和 exp(−j k·r),kx>0 的波朝 +x 方向走。两边的波矢取同一组数值时,坐标之间的关系是

xC=−xR+xshift,yC=−zR,zC=−yR

下标 C 是 COMSOL,R 是 RCWA。所以 COMSOL 里的结构是 RCWA 结构沿 x 的镜像,xshift 是为了把齿放到周期中间而加的平移。

图解:两套约定里波的行进方向(需要浏览器脚本)

左右对称的光栅分辨不出这一条:光栅 A 取不取镜像,结果只差 2.2×10−8。所以另加了一个非对称光栅,一个周期内依次是折射率 1.8、1.4、1.0 的三段。

非对称光栅的光栅层:RCWA 的定义与 COMSOL 里的两种建法(各画两个周期)
RCWA 的原结构与它的镜像,通道效率最多相差 9.0×10−3,约是两种方法之差的 5 600 倍,足以分辨取向。COMSOL 取镜像时对上原结构,不取镜像时对上镜像结构。结构对 y 方向镜像对称,φ = +40° 与 φ = −40° 的效率应当相同,COMSOL 两次结果相差 8.1×10−15。

级次号:两种搭法不一样,取错不报错

RCWA 的第 m 级是 kx,m=kx,0−mλ/Λ。COMSOL 的端口有自己的级次号,它与 RCWA 的 m 是什么关系,取决于端口是怎么搭的。用 Periodic Structure 节点自动生成端口时,两侧的级次号都与 RCWA 反号。手工逐个添加 Port 和 Diffraction Order 子节点时,入射侧反号,出射侧同号。下表里的关系由端口报告的模式波矢配对得出:

图解:级次号与端口(需要浏览器脚本)
5

各台阶的结果

算例排成台阶,从最简单的结构开始,每个台阶只多一种因素,上一个对上之后才做下一个。全部算例的波长是 1.053 µm,极角 42°,入射介质的折射率 nI = 1,出射介质的折射率 nII = 1.5。

台阶 1、2:均匀结构,对解析解

裸界面有 Fresnel 公式,单层膜有 Airy 公式,两种方法都可以直接对解析值。这两个台阶检验入射角、偏振的标法,以及膜厚和膜内的多次反射。均匀结构不产生衍射,也不耦合偏振,其余通道都应当是零:每个算例有 12 个这样的通道,RCWA 给出 0,COMSOL 给出的值不超过 4.5×10−16。

均匀结构的四个非零通道
解析值与方位角无关。COMSOL 一栏是 φ = −40° 的结果;最后两栏是 φ = −40° 和 φ = 0° 两次 COMSOL 结果与 RCWA 的差。

台阶 3、4:光栅 A,无吸收与有吸收

齿有吸收时,反射与透射的效率之和小于 1,差额就是吸收。COMSOL 一侧可以用两种互不相干的办法得到吸收:1 减去全部端口的效率之和,或者把损耗功率密度在齿内积分再除以入射功率。

台阶 4 的吸收

台阶 5:方位角扫描

光栅 A 的通道效率随方位角的变化
数据表
各方位角上的差(全部通道里的最大值)

台阶 6 与两个附加算例

6

网格收敛与稳健性

正式网格是怎么定下来的,以及它给出的数有多可靠,都在光栅 A(台阶 3)上试过。下面三幅图的横轴是每个局部波长里的单元数 k,纵轴是两种方法在全部通道里的最大差。

不加密齿角
齿角处加密 8 倍
三次单元 + 齿角加密:两种参照
各光栅算例:网格 k = 12、16、24 三档上的最大差(RCWA 取 M = 200)
RCWA 的截断阶数扫描(光栅 A,φ = −40°)

改动模型的其他设置

下表每一行只改一项设置,其余与正式结果相同(光栅 A,三次单元,k = 16,齿角加密 8 倍)。

7

相位

效率只用到 Jones 矩阵元的模。椭圆偏振入射、几束光相干叠加这类问题还要用到相位,所以矩阵元本身也比了,比的是完整的复数,包括各级之间的相对相位和绝对相位。比较走了两条互相独立的路线。

端口路线。由 COMSOL 的复 S 参数换算成 RCWA 约定下的矩阵元:

Jab(m)=SK1*fmσout(K)σin(b)exp{−ik0[(kx,m−kx,0)(xref−xshift)+kz,0Ihtop+kz,mh]}
  • K 是接收这个通道的端口,1 是激励端口。取复共轭是因为两边的时间因子相反;除以 fm 是把按功率归一的 S 参数还原成电场幅值之比。
  • 指数里是参考面的换算。S 参数以各端口所在的平面为相位零点,RCWA 的反射以结构上表面、透射以结构下表面为零点。htop 是激励端口到结构上表面的距离,h 是接收端口到相应表面的距离。x 方向上,COMSOL 的相位零点在 x=0(xref=0),RCWA 的原点在 COMSOL 的 x=xshift 处。本页所有模型的周期单元都从 x=0 画起,端口的左端点就在 x=0;零点是坐标原点还是端口的左端点,这次对照分不出来。
  • σout(K) 是端口 K 的模式电场方向相对 RCWA 单位矢量 s^ 或 p^ 的符号,取 +1 或 −1,由端口变量 ewfd.Eampl 和 ewfd.kMode 逐个端口算出。σin(b) 是激励端口发出的入射场相对 RCWA 入射单位矢量的符号。
图解:参考面的换算(需要浏览器脚本)

式子里没有可调的量。σin 由场直接定出:在空气区采样电场,分出入射波,折算到端口平面,得到 S 激励是 +s^,P 激励是 −p^,与这两个值的偏差不超过 1.4×10−5。

场路线。不用任何端口变量。在空气区取 2 条水平线、基底区取 2 条,每条线上等距采样 32 个点的电场,对每个传播级的 kx,m 做离散 Fourier 投影得到这一级的矢量振幅,再投到 s^、p^ 上;空气区的零级用两条线解出入射波和反射波。S、P 两次激励合起来解出 2×2 的矩阵。这条路线只用到场和几何。

端口路线:各台阶上与 RCWA 的最大差
场路线:做了场采样的 9 个作业
光栅 A 的 16 个 Jones 矩阵元:相位,以及与 RCWA 之差的模

两条路线互相独立地确认了级次的配对、s 和 p 的符号约定、x 轴的取向、参考面的位置,以及 P 激励时入射矢量的符号。只比效率时这些符号都不起作用;比相位时每个端口的符号都要单独确定,各类端口并不相同:

端口模式电场方向相对 RCWA 单位矢量的符号(Periodic Structure 节点)
8

结论与没有检查的项

对上了什么

    没有检查的

    • 只有一个波长(1.053 µm)和一个极角(42°)。方位角只到 80°,没有试 φ = 90°、|φ| > 90° 和负的极角。
    • 没有靠近 Rayleigh 截止的点。方位角扫描的各点里,离截止最近的一级 |kt|/n − 1 = 0.051,其中 kt 是面内波矢的长度。RCWA 在截止附近的行为没有经过这次对照。
    • 没有靠近圆锥入射特有的层内模式奇点的点,这类奇点见第 5 节方位角扫描的图注。做了本征分解、φ ≠ 0 的 11 个算例里,离奇点的距离指标在 0.42 到 7.6 之间,模块的警告阈值是 0.01。模块在奇点附近的精度没有经过这次对照。
    • 传播级最多 6 个(附加 B:透射 4 个、反射 2 个)。没有做大周期、几十个传播级的结构。
    • 只有矩形齿和分段常数的折射率。没有斜壁、圆角和金属。吸收只试了齿有吸收的一种。基底始终无吸收,这也是 RCWA 模块本身的要求。
    • 入射介质始终是空气。没有试从高折射率一侧入射,也没有试全反射。
    • 光栅层都是 0.3 µm 厚的一层。没有深槽,也没有几个光栅层叠在一起的结构。
    • 只比了传播级。倏逝级的振幅没有比。
    • 入射只有线偏振的 s 和 p。圆偏振、椭圆偏振没有在 COMSOL 里直接算,它们由 Jones 矩阵决定,而 Jones 矩阵已经比过。
    • 手工搭端口的路线只在台阶 3 比了效率,没有比相位,也没有在别的台阶上重复。
    • 所有模型的周期单元都从 x = 0 画起。S 参数在 x 方向的相位零点是坐标原点还是端口的左端点,没有区分。
    • Jones 矩阵在比正式网格更密的网格上只比了光栅 A 一个算例。
    • 网格只做了尺寸加密,试了两种单元阶次和有无齿角加密。没有试四边形网格,没有改求解器设置。
    • 只用了 COMSOL 6.4 这一个版本。C++ 模块只跑了默认选项。

    在 COMSOL 里重复这件事时要留意的

    1. 入射角。φ ≠ 0 时 alpha_inc 要设成 atan(tan θ·cos φ)。设成 θ 时模型照样能解,能量照样守恒,结果是另一个入射方向的。
    2. 结构取向。与采用 exp(−iωt) 和 exp[−ik0(kxx + kyy)] 的 RCWA 对照时,COMSOL 里要建结构的镜像。对称结构查不出这个错。
    3. 级次号。Periodic Structure 节点和手工搭的 Port 在出射侧的编号相反,取错不报错。读 ewfd.kModex_K、ewfd.kModez_K 按波矢配对,并检查沿法线的 ewfd.kModey_K 是实数;倏逝级的这个量是纯虚数。
    4. 端口效率之和等于 1 不能当作结果正确的证据。入射角设错、级次号取错时它都等于 1。
    5. 齿角要局部加密,齿的侧壁不要落在周期边界上。见第 6 节。
    6. S 参数的变量名。端口号是一位数时写作 ewfd.S21,到两位数变成 ewfd.S10_1。附加 B 有 12 个端口,第一次运行时 10、11、12 号端口没有读出来,改了脚本之后重算。
    7. 吸收。ewfd.Atotal 是体积损耗的积分。想要两个独立的数,要自己把端口效率加起来再用 1 去减。
    8. 相位。P 激励发出的入射矢量是 −p^;Orthogonal Polarization 端口和出射侧各端口的模式矢量符号各不相同。比相位时要逐个端口用 ewfd.Eampl 定符号。
    9. 脚本驱动时的两处报错。Periodic Structure 的激励端口不能指派命名选择,要给出边界编号。手工创建 Port 时标签太短会抛异常:试过的是两个字符的 pt,报错是字符串下标越界(Range [4, 2) out of bounds for length 2)。改成 port1 这样的标签就没事,最短要几个字符没有试。
    9

    重新运行

    COMSOL 一侧的驱动脚本、作业文件和原始输出(约 100 MB,重算还需要 COMSOL 的许可证)没有随 v0.1.0 发布。全部汇总数字见仓库的 docs/validation.zh-CN.md。RCWA 一侧用的是仓库里的 rcwa::solve_conical,以及 gui/ 里附带的 Python 参照求解器(rcwa1d.py 与 conical/)。