ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

光子晶体远场偏振扭转调控的Comsol仿真建模与后处理

光子晶体远场偏振扭转调控的Comsol仿真建模与后处理 光子晶体远场偏振的扭转调控说白了就是通过旋转结构或让层与层之间相对扭转让透射或散射光的偏振态跟着发生可控变化。近一年我一直在用Comsol搭这类模型手头这个课题从几何建模、参数扫描到后处理直接出图前后调了将近两个月中间来回改了很多稿。今天这篇文章就把完整的建模思路、关键参数设定和后处理出图的细节一次性梳理清楚顺便把容易踩的坑也写出来。如果你正准备用Comsol做光子晶体、超表面或者任何跟远场偏振相关的仿真这篇文章可以直接当参考。1. 项目背景与整体设计思路1.1 光子晶体远场偏振核心在解决什么问题光子晶体的本质是周期性介电结构利用周期性与波长的耦合产生色散、禁带、局域态这些现象。在可见光和近红外频段常见形式是介质纳米柱阵列、圆孔阵列或者双层堆叠的格子结构它们都能对入射光场产生强烈的相位和振幅调制。所谓“远场偏振”指的是在满足夫琅禾费条件下某个空间方向上电矢量的横向振动形态。这个振动形态用两个正交分量的振幅比和相位差来描述可以是线偏振、圆偏振也可以是一般意义的椭圆偏振。很多实际应用比如结构色显示、手性光探测、偏振转换器、光学防伪标识本质都在问同一个问题我希望远场某个方向上的偏振是圆的、是椭圆的、还是保持线偏振。光子晶体在这一点上天然有优势因为它的几何周期和结构单元可以做到亚波长尺度能一次性同时调制振幅、相位和偏振。但要把“调制能力”变成“工程可控”就需要一个明确的调控自由度扭转角正是这样一个参数。所谓扭转调控就是把结构单元在面内旋转一定角度或者让两层晶格之间产生相对旋转。这个操作直接打破结构的旋转对称性让原本x/y对称的响应变成不对称远场偏振自然跟着变。设计目标很明确找到扭转角度与远场偏振状态之间的定量映射关系然后利用这个关系去反向设计结构参数。1.2 为什么选Comsol而不是其他工具光学仿真领域FDTD类的工具比如Lumerical也很常见但Comsol做这类问题有几个具体的优势。第一多物理场耦合能力很强如果你后续想把热效应、结构应力、非线性效应一起挂到电磁仿真里Comsol可以在同一个模型里完成不用多软件来回导数据。第二参数化扫描非常顺手扭转角、波长、几何尺寸都可以作为全局参数一次扫描全部算完。第三远场计算是内置功能不需要自己写近场到远场的变换程序直接设置一个“远场域”就能得到空间任意方向的辐射场。我在这个项目里更看重的是“直接出图”这个能力。很多人习惯把数据导到MATLAB里再画偏振椭圆但Comsol的后处理表达式完全可以自己算完再画关键是先在“全局定义”里把要用的中间变量写清楚后处理绘图组直接引用这些变量。这样做效率非常高扫描完一组扭转角每个角度对应的偏振椭圆图、远场方向图、斯托克斯参数图全部在Comsol里批量生成不需要导出导入也不会出现数据对不上的问题。1.3 方案选型单元旋转还是双层扭转在做扭转调控之前先想清楚用哪种扭转方式。方案一是单元旋转把单个纳米柱绕中心旋转一个角度alpha晶格常数、柱尺寸都不变。这种结构相对简单网格划分和收敛都比较稳而且物理图像非常清楚结构旋转了多少度偏振响应大概会往哪个方向转可以在前期用等效波导模型快速估算。方案二是双层扭转两层相同晶格上下堆叠层间相对旋转theta形成莫尔条纹结构。这种方案能带来更强的偏振调控和局域场增强但计算量明显增加网格数量往往翻好几倍而且参数空间更大排查问题的难度也更高。我最终的选择是先用单元旋转搭单层模型扫描0到180度把远场偏振的规律摸清楚再在这个基础上扩展双层扭转。原因很简单单层模型可以把扭转角度单独分离出来不会混入层间距离、层间耦合这些额外变量。等单层的基准解有了后面加第二层时所有异常结果都有对照分析起来轻松得多。2. 模型搭建与关键参数设定2.1 几何建模从单元结构到扭转参数模型维度选择三维物理场接口用RF模块的“电磁波频域”也就是常说的ewfd接口。几何上我以一个单位晶格为计算域四边设周期性边界等效表征无限大阵列不需要真去画几百个柱子。全局参数建议先定义好a 700 nm # 晶格周期 r 150 nm # 纳米柱半径 h 300 nm # 纳米柱高度 alpha 30 deg # 扭转角 lambda0 1550 nm # 工作波长几何操作方面画一个圆柱后使用“旋转”操作旋转角填入参数alpha。如果你用的是椭圆纳米柱还要定义长轴和短轴比如bx 180 nm, by 120 nm旋转对象选择椭圆效果是一样的。这里的关键点在于旋转操作一定要引用全局参数alpha而不是手动填一个固定数字。我见过不少新手直接用几何里的旋转工具转了一下后续参数化扫描时发现角度根本没变就是因为旋转角度被固定成了数字没有和参数建立关联。衬底的处理也有讲究。我在单元底部加了一段厚度约1微米的衬底介质折射率设为1.45二氧化硅。衬底厚度不需要太长太长了会增加网格数量太短了则可能让端口模式影响结构附近场分布。结构周围还要留出一段空气区域这个空气区域用于放置远场域和PML吸收层长度取1到2个波长就够。2.2 材料参数、边界条件与激励材料这一块1550纳米波长附近硅的折射率大约在3.47左右二氧化钛约2.4二氧化硅约1.45。如果做的是可见光波段务必考虑折射率的色散特性不能直接用一个常数代替。Comsol材料库里其实自带了一些常规光学材料但颜色、定义频率范围和实际工艺参数不一定匹配所以我更习惯自己在材料节点里定义折射率表达式把实部和虚部分开填这样后面扫描波长时不会出错。边界条件设置是整个模型最容易出错的地方。单位晶格的四个侧面必须设置周期边界Comsol中可以用“周期性端口”或者“Floquet周期边界”来实现。我个人推荐用周期性端口原因在于它同时兼顾了边界条件和激励定义可以很方便地设置TE/TM/圆偏振入射还能自动处理周期结构的布洛赫波向量。正入射时布洛赫波矢量k_x 0k_y 0如果之后要扩展到斜入射就需要按照入射角和方位角手动计算k_x k0 * sin(theta) * cos(phi)k_y k0 * sin(theta) * sin(phi)填到端口设置里。激励端口设置在模型顶部选择“波激励”模式默认入射方向向下。如果是x方向线偏振入射端口电场方向就设置为x分量y分量设为0。模型底部再设置一个出射端口用来记录透射光。计算完后端口的S参数可以直接读出来这对验证模型是否正常非常有用。2.3 求解设置与远场计算研究类型选“频域”频率固定为c/lambda0。Comsol的频率单位是Hz所以1550纳米波长对应的中心频率大约是193.5 THz直接用这个数值即可。远场计算是本项目的核心需求。在物理场节点下右键添加“远场域”它会自动绑定在计算域的外边界上然后根据边界上的近场数据做近场到远场变换。这个变换的原理是用等效表面电流积分求解辐射场Comsol将它封装成了一个节点我们需要关心的就两件事远场域放在哪里以及求解范围设多大。远场域要求距离散射体至少一个波长一般取计算域最外层边界外面再用PML吸收层包裹。PML的作用是吸收向外传播的波避免边界反射回来干扰结构附近的场分布。PML厚度取十分之一波长到四分之一波长左右即可太厚浪费网格太薄吸收效果不好。网格划分上结构内部的网格尺寸建议控制在波长的八分之一到十分之一也就是150到200纳米左右。PML内部用映射扫掠网格让它沿径向逐渐拉伸这样既能保证吸收效果又不至于让网格数量爆炸。3. 远场偏振的扭转调控原理与实现3.1 扭转角如何影响远场偏振理解扭转调控的物理机制关键是抓住结构单元的两个正交方向。介质纳米柱本质上是一个微型波导天线它在x方向和y方向的等效折射率不同因此入射光经过柱体后会产生一个相位延迟差delta_phi。当这个相位差被设计成特定数值时柱体就等效于一块波片。单元旋转角度alpha后这个相位差的主轴也跟着旋转了alpha而偏振响应的旋转角度往往是2alpha这就是所谓的“扭转放大效应”。做一个生活化的类比把纳米柱看成一块拧了角度的小玻璃片入射光通过它时偏振椭圆的长轴方向会被带着转。结构每转过一个角度远场偏振椭圆不一定是等比例转同样的角度而是可能存在两倍关系或者非线性关系具体取决于柱体的纵横比和相位差大小。仿真里最典型的观察方式就是固定观测方向画出不同扭转角下远场的偏振椭圆你能很直观地看到长轴方向在转动同时椭圆度和旋性也在变化。我一般会先扫一个小范围角度比如0到45度看偏振椭圆方位角的变化趋势。如果趋势单调且接近线性说明这个结构在目标频率下工作状态非常干净。如果曲线出现回退或者突变那多半意味着结构在某几个角度下激发了额外的共振模式需要回头检查远场方向图或者近场分布判断是Fabry-Perot共振还是局域表面等离激元。3.2 参数化扫描与数据提取参数化扫描在Comsol里操作很简单研究节点下添加“参数化扫描”选定全局参数alpha填写列表0、10、20、30、45、60、90、120、180度直接求解。扫描完成后所有解都保存在同一个模型文件里结果切换只需在下拉列表选择不同的参数值。数据提取阶段可以在“派生值”里用“全局计算”来输出某个远场方向上的电场分量。例如我要看theta 30度、phi 0度这个方向的偏振态就在全局计算里输入求值表达式结果会以表格形式列出每个alpha对应的值。这里有一个关键细节远场域存储的数据是球坐标系下的求值时要用远场表达式而不是结构内部的近场电场分量。我会在“全局定义”的“变量”节点里预先写好斯托克斯参数表达式这样后处理画图时直接引用避免每次都手动输入长串公式。常用定义如下S0 abs(Ex)^2 abs(Ey)^2 S1 abs(Ex)^2 - abs(Ey)^2 S2 2 * real(Ex * conj(Ey)) S3 2 * imag(Ex * conj(Ey))其中Ex和Ey指远场球坐标的theta和phi方向分量。在此基础上偏振椭圆的方位角定义为psi 0.5 * atan2(S2, S1)椭偏度定义为chi 0.5 * atan2(S3, sqrt(S1^2 S2^2))。这些量全部写入变量节点后后处理里直接画psi或者chi随alpha变化的曲线一条线就能完整描述远场偏振随扭转角的变化规律。3.3 直接出图偏振椭圆、斯托克斯参数与远场图后处理环节是“直接出图”的核心。我会建立几个绘图组分别对应不同的表达需求。第一个是三维远场方向图。在“结果”下新建一个三维绘图组选择“远场域”作为数据集绘制方式选为“辐射方向”。X轴表达式选远场实部电场模坐标系统选远场的球坐标。这个图能直观展示不同扭转角下散射能量在空间中的分布比如某个角度的旁瓣增强或者主瓣偏移。第二个是偏振椭圆图。在二维绘图组里选择包含纳米柱中轴线的截面先用“表面”画出电场模的分布作为底色表达强度信息然后添加“箭头”子节点箭头表达式分别填入远场Ex和Ey的实部这样每个像素点上都能看到电场矢量随时间的旋转轨迹也就是偏振状态的空间分布。如果你的版本支持“线椭圆”这种图形也可以直接绘制。第三个是斯托克斯参数映射图。归一化到S0后S1/S0反映线偏振程度S2/S0反映45度方向的线偏振S3/S0反映圆偏振程度。我会在三维绘图组里分别画三张彩色图颜色映射直接选红蓝发散色正负一目了然。把这三张图连同偏振椭圆图一起放到同一个布局里导出高分辨率PNG论文插图基本就成型了。4. 实操过程与常见问题排查4.1 完整操作流程梳理把所有步骤串起来一个可复现的完整流程是这样的新建模型空间维度选三维物理场选“电磁波频域”。定义全局参数a、r、h、alpha、lambda0。绘制几何纳米柱、空气域、PML、衬底。指定材料硅、二氧化硅、空气。设置周期性端口或Floquet周期边界配置激励和出射端口。添加“远场域”设置theta和phi的扫描范围。划分网格结构区域尺寸约lambda/8。添加“频域”研究固定频率再添加“参数化扫描”研究扫描alpha。求解完成后进入结果节点建立绘图组画远场方向图、偏振椭圆和斯托克斯参数图。这套流程第一次跑通大概需要一两天时间其中大部分耗时在边界条件调试和网格收敛性验证上。一旦模型稳定后续更换结构参数、换材料、换波长都非常快本质上是把前期的“建模逻辑”复用下去。4.2 常见问题与排查建议我在调试过程中遇到过几个典型问题整理成一张速查表现象可能原因处理方法远场强度全为0端口未设激励或远场域放在了PML内部检查端口是否勾选“波激励”把远场域放在PML内侧边界偏振椭圆方向不随扭转角变化alpha没有真正传给几何旋转操作检查旋转操作的参数引用确认是全局参数alpha周期边界报错Floquet周期边界的方向向量定义错误改用“周期性端口”按边设置源/目标对参数化扫描结果丢失未开启存储全部解在研究设置中勾选“存储所有参数组合的解”求解时间异常长网格太密或扫描范围过大先粗化远场区网格用2D近似跑趋势再回3D精算其中端口问题是最容易忽略的。端口类型选错会导致激励没有进入模型结果远场一片漆黑。我用过一次“集总端口”发现远场全零后来改成“周期性端口”重新设置模式扩展才恢复正常。这类问题排查思路很简单先算一个简单的透射率曲线如果连透射率都不对就别急着看点偏振先把端口搞对再说。4.3 效率提升Comsol 6.4、批处理与外部控制Comsol 6.4版本对参数化扫描和渲染性能都有改进尤其是在多核并行求解上的调度更高效。如果你的许可证支持建议优先用6.4以上版本扫描大角度范围时能明显感觉到省时间。这里有个小技巧在“研究”设置里可以勾选“运行时显示求解日志”把网格大小、自由度数量和每次迭代的收敛残差都打出来。看残差曲线能很快判断模型是否收敛比盲目降低网格尺寸有效得多。另外很多计算不适合在图形界面里干等尤其要在Linux服务器上跑批量任务时。Comsol提供命令行批处理模式比如solver -inputfile model.mph -study Study 1 -outputfile model_solved.mph可以无GUI运行。用Python或者MATLAB驱动Comsol也是我常用的方式比如用MATLAB LiveLink写一个循环不断修改alpha并调用model.sol(sol1).runAll()跑完后批量导出PNG这样几百个参数点一次跑完完全不占用本机时间。提醒一句模型文件里保存的绘图组在命令行模式下不一定自动更新。如果你用批处理跑完后发现图片还是旧参数状态记得在脚本里加一步刷新绘图组的命令或者直接用“导出图片”在线求解完成后触发一次。最后说个我自己的习惯。出图之前我一定先把远场域的theta和phi范围设小一点只算自己关心的角度区段而不是全空间。比如我只关心正向半球就把phi从0到90度theta从0到60度这样参数一多也能跑得动。再有偏振椭圆图建议叠加到底色的强度图上既能看振幅又能看偏振态论文里放这种图信息量最大。这套流程在Comsol里从建模到出图全部能跑通希望这些细节能帮你少走点弯路。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进