Comsol异常衍射。 包含PB相位,异常衍射角以及涡旋光产生,涉及参数化阵列生成。
在COMSOL里折腾异常衍射就像玩光学版的乐高——参数调不好分分钟搞出个四不像,但一旦玩明白了,涡旋光、相位操控全都能塞进一个模型里。今天主要唠唠怎么用PB相位设计超表面,让光拐着弯走(异常衍射角),顺便生成自带轨道角动量的涡旋光。
先上段硬核代码镇楼:
// COMSOL Java API 创建旋转纳米柱阵列 for (int i=0; i<num; i++) { double theta = i*delta_phi; // PB相位核心参数 model.component("comp1").geom("geom1").create("rot"+i, "Rotate"); model.component("comp1").geom("geom1").feature("rot"+i).set("angle", theta); model.component("comp1").geom("geom1").feature("rot"+i).set("rottype", "object"); }这段代码其实在批量生成旋转的纳米结构。delta_phi控制相邻单元的相位差,直接决定异常衍射角的偏移量。用循环生成带旋转角度的结构阵列,比手动拖拽快10倍不止,尤其做大规模仿真时能救命。
PB相位的核心就是玩几何相位。举个栗子:当线偏振光入射到旋转的纳米柱上时,出射光会积累2θ的相位差(θ是结构旋转角)。这相当于在波前上强行加了个相位梯度,让光路不按传统衍射定律走。COMSOL里可以通过参数化扫描批量验证这个现象——把纳米柱的旋转角度设为参数变量,远场结果里能看到明显的光斑偏移。
Comsol异常衍射。 包含PB相位,异常衍射角以及涡旋光产生,涉及参数化阵列生成。
异常衍射角计算别死记公式,直接在模型里放个极坐标图更直观。在频域分析里添加如下设置:
% 后处理计算衍射角 phi = atan2(Ey_amp, Ex_amp); theta_anomaly = asin(lambda/(period)*(dPhi_dx - k0));这里dPhi_dx是相位梯度,直接关联着前面设置的旋转角度增量。实际跑仿真时会发现,当结构周期接近波长时,传统衍射角开始"抽风",这时候异常衍射效应最明显。
涡旋光生成的关键在于构造螺旋相位分布。试着在纳米柱阵列中加入方位角依赖的旋转:
// 生成轨道角动量拓扑数l=1的阵列 double l = 1; // 拓扑荷数 for (int i=0; i<numX; i++) { for (int j=0; j<numY; j++) { double phi = l*Math.atan2(y[j], x[i]); setRotationAngle(i, j, phi); // 自定义旋转函数 } }这时候远场会出现环形光强分布,相位图上能看到明显的螺旋条纹。有个坑要注意:当用FDTD模块计算时,记得把网格尺寸压到λ/10以下,否则相位奇点处容易数值发散。
最后说个骚操作——用参数化阵列实现动态调控。在App开发器里挂个滑块控件,把旋转角度和入射波长绑定:
// COMSOL App实时交互代码 model.param().set("lambda", "800[nm]+100*slider_pos"); model.component("comp1").geom("geom1").feature("rotArray").set("angle", "30*slider_pos");这样一边拖滑块一边看衍射斑跳舞,比看论文公式直观多了。玩超表面设计,参数化建模绝对是开挂神器,毕竟实验组做个样品要两周,咱们改个参数只要两秒。