comsol光栅仿真 计算复合波导光栅准BIC增强古斯汉森位移

最近在折腾光栅结构里的古斯汉森位移(Goos-Hänchen Shift),发现用准BIC(Bound States in the Continuum)来增强这个效应挺有意思。直接说人话就是:通过设计特殊的光栅结构,让光在表面反射时横向位移量暴增。这里分享一波用COMSOL建模的核心思路,顺带丢点代码片段。


模型搭建:从画图到边界条件

先画个复合波导光栅的基本结构——硅基底上铺一层二氧化硅,再覆盖周期性排列的氮化硅光栅条。重点在于参数化建模,方便后续扫描优化。用COMSOL的几何脚本可以直接生成参数化结构:

% 光栅参数化建模(COMSOL LiveLink)
grating_period = 800e-9;  % 周期800nm
grating_width = 0.5 * grating_period; % 占空比50%
model.geom('geom1').feature().create('grating', 'Rectangle');
model.geom('geom1').feature('grating').set('size', [grating_width, 200e-9]); % 宽度和高度
model.geom('geom1').feature('grating').set('pos', [0, 0]);

这里用矩形堆叠实现光栅,占空比调成0.5是个保守开局。边界条件要特别注意:上下用完美匹配层(PML)吸收杂散波,横向用周期性条件(Floquet周期边界),让仿真只计算一个单元,省算力。


扫参数找BIC:让Q值飞一会儿

准BIC的特征是共振模式的品质因子(Q值)极高。为了触发它,得在参数空间里“钓鱼”——比如扫光栅高度或周期。COMSOL的扫参功能可以自动化这个流程:

// 参数扫描设置(COMSOL Java API)
study = model.study().create("param_scan");
study.feature().create("param", "Parametric");
study.feature("param").set("plist", "range(180e-9, 10e-9, 220e-9)"); // 高度从180nm扫到220nm
study.feature("param").set("pname", "h_grating"); 

扫完高度后,看透射谱里的共振峰——当某个高度对应的峰突然变尖(Q值飙升),说明摸到准BIC了。这时候用频域扫描抓共振波长:

// 频域扫描提取共振波长
solver = model.study().create("freq_sweep");
solver.feature().create("freq", "Frequency");
solver.feature("freq").set("type", "interval");
solver.feature("freq").set("frequencyrange", "1500e12 to 2000e12"); // 1.5~2.0THz

位移计算:近场分布是关键

古斯汉森位移的增强和近场分布强相关。在共振波长下,用后处理积分算反射相位的空间导数:

// 计算相位梯度(位移公式核心)
dphi_dx = real(gradient(emw.Ez)); % 取电场Ez的相位梯度
GH_shift = -lambda/(2*pi) * dphi_dx; 

这里有个坑:COMSOL默认输出复数场,记得用real()取实部,或者用arg()函数直接提取相位角。如果发现位移量不对劲,检查下近场是不是出现了强烈的局域化——准BIC会让电场在光栅表面“卡住”,形成高对比度的分布。


避坑指南:网格和收敛性

翻车重灾区在网格划分。光栅边缘需要用边界层网格(Boundary Layer)捕捉倏逝波:

// 边界层网格设置
mesh = model.mesh().create("mesh1");
mesh.feature().create("bl", "BoundaryLayer");
mesh.feature("bl").set("faces", [3,4]); // 光栅上下表面
mesh.feature("bl").set("thickness", "lambda/20"); // 边界层厚度=波长1/20

如果仿真结果震荡严重,大概率是网格太糙或者PML层数不够。另外,用低阶元(比如二阶)反而比高阶更稳,毕竟BIC对数值噪声敏感。


最后一步:验证位移增强

对比普通光栅和准BIC光栅的位移量。实测数据可能会发现:当Q值从1e3跳到1e5时,位移量能翻10倍以上。不过别嗨过头——实际加工时光栅边缘的粗糙度会砍Q值,仿真里记得加个2~3倍的衰减因子,更接近现实。

代码和模型调通了的话,准BIC就是个放大器。下次想搞点更野的,比如动态调谐光栅参数,或许能玩出光学开关的效果。

更多推荐