做超表面方向最绕不开的一类设计就是多波长独立聚焦。复现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薄膜有偏差但用来复现设计方法、验证聚焦效果足够了。初始几何参数我这样定周期P400nm。选这个数值有个约束条件——周期必须亚波长否则会出现高阶衍射焦点能量被分散。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.2800nm柱高带来的相位调制上限约为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 / ∂DxS12 ∂φ_λ1 / ∂DyS21 ∂φ_λ2 / ∂DxS22 ∂φ_λ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)此时这个公式前加负号才能让透射球面波在焦点处汇聚。如果你用其他工具相位符号可能正好相反出图时焦点会变成发散先检查这一点别等整体仿真做完才发现方向错了。多波长独立聚焦的实现方式两套相位分布可以对应不同焦距也可以对应不同横向焦点位置。比如设计λ1633nm聚焦到轴上x0, f50μmλ2532nm聚焦到横向偏置x30μm, f50μm焦点在焦平面上错开。这相当于给λ2的相位分布叠了一个线性偏折项公式为φ2(r) -2π/λ2 × (sqrt((x - x0)² y² f²) - sqrt(x0² f²))这里的第二项是相位归一化常数保证透镜中心附近相位不会跳变。我当时设计的验证口径D12μm焦距f30μmNAD/2f 0.2。这个口径和焦距组合下边缘位置r6μ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换高折射率材料相位解耦度差结构自由度与波长响应不对应换双柱结构或引入偏振复用焦点位置偏移大相位符号错误或相位参考面不一致检查公式符号、统一监视器参考面焦点效率低透射率低的单元参与聚焦/网格太粗剔除低透射率点、加密网格内存不足口径太大/网格过细缩尺验证、远场投影、分区域仿真串扰高反查时权重分配不当提高对应波长权重、减少相位残差复现这类论文我最大的体会是数据库质量决定最终上限后面整体透镜仿真只是把数据库里的精度兑现出来的过程。真正做下来也理解了色散调控并不是什么玄学而是在几何自由度、波长响应、目标相位三者之间找一个可解耦的工作区间。顺着这条思路后续还可以扩展消色差超透镜、偏振复用全息、多焦点光镊设计——底层建模仿真链路是完全通用的。这次的步骤和参数可以直接拿去做参考但每个具体设计都需要自己跑一遍扫描硬套数值肯定会栽跟头。
