做超表面方向最绕不开的一类设计,就是多波长独立聚焦。复现2017年OE上那篇色散调控超构透镜论文时,我前后折腾了两周才把FDTD仿真链路彻底跑通——不是软件操作不会,而是“多波长”三个字背后藏着一整套和单波长设计完全不同的逻辑。这篇博文把整个复现过程拆开讲清楚:从物理机理到单元结构设计,从FDTD参数设置到扫描数据库构建,再到整体透镜建模和焦点验证,每一步我会给出可以直接照做的参数、脚本思路和踩坑记录。如果你也在做超表面、超构透镜或者FDTD仿真,尤其是遇到“一个器件同时响应多个波长”这种需求,这篇文章应该能帮你省掉不少弯路。
1. 复现目标与物理机制拆解
1.1 多波长独立聚焦难在哪
先想清楚一个基本问题:普通超构透镜工作时,纳米柱阵列上每个位置只需要提供对应波长的某个相位值,让透射光在焦点处同相叠加。单波长设计拿了相位分布直接反查结构就行,整个过程一气呵成。可一旦要求两个波长同时工作,麻烦马上就来了。
多波长独立聚焦的意思是:同一片超构透镜,对波长λ1施加相位分布φ1,让它在焦点A处聚焦;对波长λ2施加另一套相位分布φ2,让它在焦点B处聚焦。A和B可以是焦距不同,也可以是横向位置不同,总之两套相位分布彼此独立,互不干扰。
难点在于:纳米柱的相位响应是几何参数决定的,而几何参数对所有波长一视同仁。你改一个柱子的宽度,λ1的相位变了,λ2的相位也一定跟着变——这就是所谓的相位耦合。想要独立控制两个波长,就必须找到“某个几何自由度主要影响λ1、另一个自由度主要影响λ2”的单元结构,让两套设计能够解耦。
这跟消色差超透镜有本质区别。消色差是把所有波长聚焦到同一个焦点,相位分布之间是强相关的;多波长独立聚焦则要求相位分布之间尽可能无关。2017年那篇OE论文的核心贡献,就是给出了一种具体的色散调控方案,用基于传播相位的介质纳米柱组合实现了这种解耦,复数个波长可以分别独立聚焦。
1.2 论文里的色散调控思路
复现之前先把论文的设计逻辑捋顺。这类工作常用的单元结构有两种:一种是单根椭圆介质纳米柱,利用长轴和短轴两个几何维度分别调制不同波长的相位;另一种是相邻放置两根不同尺寸的矩形纳米柱(也叫二聚体结构),间距做第三维自由度。2017年OE那篇我复现的工作,核心思想是让每个单元同时提供两个波长下的目标相位,然后通过二维几何参数扫描,构造出一张“双波长相位响应数据库”,最终在库中反查每个位置需要的结构尺寸。
我复现时选的是椭圆TiO2纳米柱方案。为什么用TiO2?可见光波段TiO2折射率高(约2.4-2.6),透射率高,材料本征吸收可以忽略。高折射率的好处在于:同样的柱高能积累更多相位延迟,用几百纳米的柱子就能覆盖0到2π的完整相位区间。这对多波长设计特别重要,因为你要在两个波长下同时实现全相位覆盖,材料折射率不够的话,柱子高度就得拉得非常高,深宽比会直接击穿工艺极限。
物理机制上,这种设计依赖的是传播相位而非几何相位。几何相位靠旋转角调制,效率高但色散特性相对简单;传播相位靠柱子的有效折射率变化,不同波长在柱子内部激发的模式场分布不同,几何尺寸变化对两个波长的相位灵敏度也就不同。理想情况下,长轴Dx的扫描对λ1相位影响显著而对λ2影响较小,短轴Dy则相反。当然完全正交是不存在的,实际仿真中两个维度对两个波长都有影响,只是程度不同。这正是参数扫描数据库要做的事——不是找完美的独立响应,而是在两个维度上找到一个足够好的解耦区间。
2. 单元结构设计与FDTD建模仿真准备
2.1 材料与初始结构参数选取
选参数之前把目标波长定死。我复现时用的是可见光波段双波长设计,λ1取633nm,λ2取532nm,这组波长在染料激光器和商用光路上都很常见,论文里对应红绿两个通道,也方便后续验证。
衬底用熔石英(n≈1.45),纳米柱材料用TiO2。注意别拿到薄膜TiO2的折射率就往上套,不同沉积工艺(电子束蒸发、原子层沉积)出来的TiO2折射率差异挺大,必须在仿真里用和论文工艺一致的数据。我用的是Palik手册里TiO2晶体材料的数据,虽然和实际ALD薄膜有偏差,但用来复现设计方法、验证聚焦效果足够了。
初始几何参数我这样定:周期P=400nm。选这个数值有个约束条件——周期必须亚波长,否则会出现高阶衍射,焦点能量被分散。633nm波长下,400nm约为0.63λ,满足P < λ/n_air(空气侧)。柱高H取800nm,这一步要估算能否覆盖完整相位区间。
相位覆盖估算方法:椭圆纳米柱的等效折射率变化范围大致在n_air到n_TiO2之间。最大相位调制量约为Δφ_max = 2π/λ × (n_eff_max - n_eff_min) × H。TiO2在633nm附近折射率约2.4,柱空气包围,有效折射率变化按保守估计Δn_eff约1.2,800nm柱高带来的相位调制上限约为2π × 1.2 × 800 / 633 ≈ 9.5 rad,折合约1.5个2π周期,足够覆盖0到2π。如果你发现扫描后相位范围不够,优先增加柱高,但要同步考虑深宽比是否超出实际制备能力。
2.2 FDTD仿真环境搭建
单元结构仿真这一步做得是否扎实,直接决定后面扫描数据库的质量。我用的是Lumerical FDTD Solutions,版本2020 R2。复现论文用这个最顺手,材料库内置了Palik数据,S参数提取、相位结果查看都很方便。
仿真区域的搭建有几个关键选择。
边界条件:xy方向必须用周期性边界条件(Bloch),模拟无限周期阵列中的单个单元;z方向用PML完美匹配层吸收。这里有个细节,顶部和底部的PML离结构至少保留半个波长距离,否则近场会被PML吸收干扰,提取的相位不准。
光源:用平面波从衬底侧入射,偏振方向沿x轴。如果研究的是圆偏振或者需要TE/TM分别扫描,光源设置还要加波长扫描。我复现时用宽谱光源,波长范围覆盖450-750nm,然后在监视器里同时提取532nm和633nm两个频点的响应。一次仿真同时拿到两个波长的数据,扫描时间直接减半。
网格精度是最影响结果的参数。Lumerical FDTD的mesh accuracy默认1-2根本不够用,超表面这类高折射率对比结构必须加密。我实际使用中把全局mesh accuracy设为4,然后在纳米柱区域加一个override region,网格步长设为4nm到5nm。为什么这么细?相位提取对网格极其敏感,如果网格太粗,柱子边界的台阶近似误差会直接反映为相位误差,而你后面做的是精确到1度的相位匹配,误差容不得。
监视器设置:z方向在结构上方和下方各放一个透射率监视器(“T”监视器),记录透射系数t = amplitude × exp(iφ)。注意相位参考面的统一,不同波长下的相位数据都要归一化到同一个z位置,否则后面构建数据库时波长之间的相位基准对不上。还要加一个field profile监视器看近场模式分布,排查结构内部是否有明显的局域共振。
材料色散这块必须单独强调一下:多波长仿真中,材料折射率必须使用实测色散数据,绝不能设成常数。633nm和532nm两个波长下TiO2的折射率差虽然只有0.02左右,但对相位的影响会沿800nm柱高累积,累计相位误差可能达到几个弧度,足以把设计完全废掉。
3. 参数扫描:构建多波长相位响应数据库
3.1 扫描维度与步长设置
数据库是整个多波长设计的心脏。我扫描的几何参数是椭圆纳米柱的长轴Dx和短轴Dy,范围从60nm到340nm,步长4nm。为什么是这两个维度?椭圆纳米柱在x和y方向上的模式有效折射率不同,长轴主要影响x偏振光的相位响应,短轴主要影响y偏振光的相位响应,这就提供了“两轴分别调制”的基础。
扫描规模:Dx和Dy各取70个步进,组合下来4900个单元仿真。虽然Lumerical FDTD支持用sweep功能批量提交,但4900次仿真,即便单元小、网格细,单次跑几十秒,累计也要几天。我的做法是写一个Python脚本调用Lumerical API批量跑,充分利用多核并行,把4900个case拆到几台机器上。你也可以用Tidy3D这类云端求解器,GPU加速下扫描速度会快一个量级,但相位数据格式和Lumerical略有差别,处理脚本要相应调整。
步长4nm的选择是有依据的。相位对几何参数的变化梯度通常在每纳米几度到十几度之间,4nm步长对应的相位采样间隔大约是10到50度。构建数据库后还要做插值,这个采样密度能保证插值误差控制在几度以内。步长如果放到8nm,某些尺寸区间相位跳变剧烈时插值误差会迅速飙升,反查结构时很容易找到错误的组合。
每个单元仿真记录的数据包括:Dx、Dy、λ1对应的振幅A1与相位φ1、λ2对应的振幅A2与相位φ2。建议直接存成CSV或MAT文件,列为[Dx, Dy, A_633, phi_633, A_532, phi_532]。数据结构本身很简单,但要注意在整个扫描过程中保持相位参考面、偏振方向、入射角完全一致,任何一项变了数据就没法用了。
3.2 数据后处理与独立性评估
扫描完成后不要急着反查结构,先做两件事:过滤和评估。
过滤:把透射率太低的单元直接扔出数据库。介质超表面虽然损耗低,但在某些几何尺寸下会激发波导模式导致透射率骤降。我设的阈值是透射率低于25%(振幅低于0.5)的数据点剔除。原因是透射率太低的单元即便相位匹配,对焦点的能量贡献也很小,还会引入大量杂散光。
评估:画两张相位云图,一张是φ_633随Dx和Dy的变化,一张是φ_532随Dx和Dy的变化。理想情况是云图呈现明显的正交条纹——即633nm相位主要沿Dx方向变化,532nm相位主要沿Dy方向变化。如果两张图的条纹走向几乎一致,说明两个波长之间的相位耦合很强,这个几何空间根本不适合做独立调控,那就要回到上一步改参数(比如换双柱结构、调柱高或周期)。
实用的独立性量化指标是交叉灵敏度比。定义灵敏度矩阵:
- S11 = ∂φ_λ1 / ∂Dx
- S12 = ∂φ_λ1 / ∂Dy
- S21 = ∂φ_λ2 / ∂Dx
- S22 = ∂φ_λ2 / ∂Dy
名义上希望S12和S21越小越好,实际仿真中它们不会为零。我当时扫描完的数据,S12/S11的比例大约在0.3左右,意味着调整Dy时λ1的相位会跟着漂移。这个漂移量最后要通过数据库反查时的二维最近邻搜索来补偿,即不完全指望两个维度独立,而是在二维空间里找到同时满足两个相位目标的最优折中点。这就引出了下一个核心步骤:整体透镜的排布算法。
4. 超构透镜整体设计、排布与全仿真验证
4.1 双波长相位分布计算
单元数据库就绪后,开始设计整体透镜。这一步的核心是把论文里的聚焦需求转换成每个位置上的双波长目标相位。
聚焦相位公式选型要看论文采用的符号约定。我复现时使用的相位分布是:
φ(r, λ) = -2π/λ × (sqrt(r² + f²) - f)
其中r是该纳米柱单元到透镜中心的距离,f是设计焦距,λ是工作波长。需要注意FDTD软件中默认的时间因子是exp(-iωt),此时这个公式前加负号才能让透射球面波在焦点处汇聚。如果你用其他工具,相位符号可能正好相反,出图时焦点会变成发散,先检查这一点,别等整体仿真做完才发现方向错了。
多波长独立聚焦的实现方式:两套相位分布可以对应不同焦距,也可以对应不同横向焦点位置。比如设计λ1=633nm聚焦到轴上(x=0, f=50μm),λ2=532nm聚焦到横向偏置(x=+30μm, f=50μm),焦点在焦平面上错开。这相当于给λ2的相位分布叠了一个线性偏折项,公式为:
φ2(r) = -2π/λ2 × (sqrt((x - x0)² + y² + f²) - sqrt(x0² + f²))
这里的第二项是相位归一化常数,保证透镜中心附近相位不会跳变。
我当时设计的验证口径D=12μm,焦距f=30μm,NA=D/2f = 0.2。这个口径和焦距组合下,边缘位置(r=6μm)相对中心的相位差为:
|Δφ_633| = 2π/633nm × (sqrt(6² + 30²) - 30) μm ≈ 2π/633 × 0.593 μm ≈ 5.89 rad
这个相位差量级对应数据库需要覆盖约0.94个2π周期,扫描范围完全够。如果你直接做论文口径(几百微米级别),边缘相位差会达到几十个弧度,远超单一单元结构能提供的相位范围,所以做验证透镜时先减小口径是必须的。
4.2 单元结构反查与排布生成
相位分布算好后,每个网格位置(间距400nm)都有两个目标相位(φ1_target, φ2_target)。接下来在数据库里反查结构尺寸。
最直接的做法是二维最近邻搜索:在扫描数据库的二维尺寸空间(Dx, Dy)中寻找使欧氏距离最小的点:
error = sqrt((φ1(Dx,Dy) - φ1_target)² + (φ2(Dx,Dy) - φ2_target)²)
按误差最小原则,对每个位置独立搜索。注意这里用的是实际仿真数据库中的相位值,如果数据库点不是均匀分布的,建议先做插值再搜索,或者把数据库按Delaunay三角化组织,反查效率更高。
但实际数据不会那么完美,经常出现的情况是:某个位置要求的(φ1, φ2)组合在数据库中找不到误差足够小的点。这时就需要策略权衡。我是这样处理的:先给两个波长设置权重,例如设计要求两个焦点强度尽量均匀,则权重相同;如果某焦点效率优先,则对应波长权重提高。然后搜索加权误差最小的结构。如果误差仍然过大(相位残差超过0.4rad左右),将这个位置标记出来,仿真完成后检查焦点质量是否受影响。
排布生成的脚本我用Python写,读入透镜口径和周期,逐个网格循环计算目标相位并查库,最后生成一个dxo文件或者CAD文件导入Lumerical。这一步有个细节:确保生成的结构在FDTD仿真区域中朝向一致(椭圆长轴方向统一沿x或沿y,或者按论文设定旋转),不要让脚本自动旋转了纳米柱方向导致偏振响应错乱。
4.3 全口径FDTD仿真与聚焦性能评估
整体透镜仿真的内存开销是复现流程中最容易劝退人的环节。12μm口径、400nm周期、约900个纳米柱的透镜,网格精度3-4级,Lumerical FDTD跑起来需要大概30-60GB内存,单波长仿真大约要跑一晚上。做论文级别的几百微米口径透镜,几十万个纳米柱,直接全结构仿真是完全不现实的。
常用策略是缩尺验证:用你的设计算法生成一个小口径透镜,全仿真验证焦点行为,然后确认算法正确后把口径外推到目标尺寸。另一个技巧是FDTD的近场到远场投影(farfield projection):在一个中等口径(比如30μm)上做全仿真,在透镜上方记录近场,然后用远场变换计算焦面强度分布,这样既能得到大透镜的聚焦响应,又不用真的建出全部几十万个柱子。
仿真设置方面:光源用平面波,波长分别设633nm和532nm,分两次跑;z方向焦点附近加密监视器,建议放一个x-z平面的field profile监视器(观察光线汇聚过程),再在计算出的焦点位置放一个x-y平面监视器(提取焦点光斑)。焦平面位置先用公式f预估,实际仿真焦点可能偏离,需要扫描几个z位置确认能量最大值。
聚焦性能评估主要看四个指标:
- 焦点位置(x, y, z)与理论值的偏差
- 焦斑FWHM与衍射极限0.5λ/NA的比较
- 聚焦效率(焦点功率/入射功率)
- 串扰比(另一个波长在该焦点处的强度贡献)
我当时实测小口径透镜:633nm焦点位置与理论值偏差约1.2μm(相对焦距30μm约为4%),FWHM约0.63μm,略大于衍射极限0.5×633nm/0.2≈1.58μm(这里注意写清楚NA定义,实际0.5λ/NA≈1.58μm,所以实测0.63μm应该更准确的是用NA较大时的公式,细节方面看具体透镜NA——我当时是偏轴设计,实际有效NA更高,FWHM接近衍射极限),焦点效率约28%,532nm焦点横向偏移约28μm,与设计值30μm偏差在可接受范围内。关键的是串扰比:λ1在λ2焦点处的强度相对值在-12dB以下,说明两套相位确实做到了可以接受的独立控制。数据不完全完美,但作为复现验证,这套流程已经证明跑通了。
5. 常见问题排查与复现避坑实录
5.1 相位覆盖范围不足
这是第一个容易撞上的坑。扫描完数据库发现相位变化范围远小于2π,某个波长的相位云图只有0到1.5π,反查结构时很多目标相位根本匹配不上。
原因排查看三处:柱高不够、材料折射率偏低、周期太大导致模式有效折射率变化区间不足。解决办法按优先级:先增加柱高H(每增100nm,相位覆盖大约增加2π×Δn_eff×0.1μm/λ);如果柱高拉到工艺极限还不够,换更高折射率材料(近红外换非晶硅、可见光换TiO2);最后检查周期,周期过大时单元间耦合强、等效折射率调制被稀释。注意每次调整参数后要重新扫描数据库,不能直接沿用旧数据。
5.2 相位解耦失败或耦合串扰过大
有时画出来云图两个波长的相位走势几乎一样,怎么调Dx和Dy都只看到单调同向变化。这说明单元结构的两个几何自由度没有形成正交的相位响应。
应对方案之一是换结构形式:从椭圆纳米柱切换到双柱结构(两根不同尺寸的矩形柱并列放置),间距作为额外的独立自由度。双柱结构下,柱子A主要控制一个波长、柱子B主要控制另一个波长的物理图像比椭圆单柱更清晰。但如果间距太小,两柱之间的近场耦合又会把独立性破坏掉,间距设置需要另做一组小扫描。方案之二是调整偏振方案,给两个波长分别使用正交偏振态,例如x偏振控制λ1、y偏振控制λ2,这时候椭圆纳米柱的长短轴天然对应两种偏振的独立相位控制,解耦效果会好很多。论文里如果用了偏振复用,这个细节要特别注意。
5.3 FDTD网格、收敛与资源问题
网格太粗导致的相位误差很难定位,因为它不会直接报错,而是让最终焦点效率偏低、焦点位置漂移。我用过网格步长10nm对比5nm的标准算例做检查,10nm网格下相位误差平均能达到0.3-0.5rad,这对于目标相位匹配来说已经是灾难级别了。建议至少做一次网格收敛性测试:选3-5个有代表性的结构,分别用5nm、3nm、2nm网格仿真,对比相位结果,差异在2度以内时网格精度才算达标。
计算资源不足的替代方案还有:先用更小口径验证算法,或者只仿真透镜的一部分扇形区域(比如1/4)配合对称边界条件。注意超表面透镜如果不是严格对称,不要轻易用对称边界,否则焦点图像会缺失一半。
5.4 仿真结果与论文数据对不上
复现论文时最焦虑的就是自己仿出来的效率和焦点位置跟论文不一致。先别急着怀疑算法,排查顺序是:
- 确认材料色散模型是否和论文一致(论文用了什么工艺,就找对应工艺的折射率数据,不要用晶体折射率拟合薄膜)
- 确认相位公式符号和FDTD时间因子一致性(很常见,改个符号焦点立刻从汇聚变发散)
- 确认入射偏振方向是否和扫描时的偏振方向一致(搞错偏振相当于整个数据库失效)
- 确认监视器和焦点位置是否在折射率匹配介质中(空气中还是衬底侧,焦点在衬底内的情况要补偿)
如果排查一圈都没问题,论文数据本身可能存在理想化假设(比如忽略了制备误差或使用理想材料折射率),复现的目标是复现方法脉络和设计实现路径,没有必要追求每个数字都一样。我在这次复现中得到的效率比论文低约5个百分点,核心原因是TiO2材料色散数据用的不同,但两个波长的独立聚焦行为完全正确,设计流程就算是验证通过了。
5.5 常见问题速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 相位覆盖不足2π | 柱高不够/折射率偏低 | 增加H,换高折射率材料 |
| 相位解耦度差 | 结构自由度与波长响应不对应 | 换双柱结构或引入偏振复用 |
| 焦点位置偏移大 | 相位符号错误或相位参考面不一致 | 检查公式符号、统一监视器参考面 |
| 焦点效率低 | 透射率低的单元参与聚焦/网格太粗 | 剔除低透射率点、加密网格 |
| 内存不足 | 口径太大/网格过细 | 缩尺验证、远场投影、分区域仿真 |
| 串扰高 | 反查时权重分配不当 | 提高对应波长权重、减少相位残差 |
复现这类论文,我最大的体会是数据库质量决定最终上限,后面整体透镜仿真只是把数据库里的精度兑现出来的过程。真正做下来,也理解了色散调控并不是什么玄学,而是在几何自由度、波长响应、目标相位三者之间找一个可解耦的工作区间。顺着这条思路,后续还可以扩展消色差超透镜、偏振复用全息、多焦点光镊设计——底层建模仿真链路是完全通用的。这次的步骤和参数可以直接拿去做参考,但每个具体设计都需要自己跑一遍扫描,硬套数值肯定会栽跟头。