
COMSOL文献复现:仿真研究光子晶体板中BIC手性效应,涵盖正入射斜入射琼斯矩阵
透射谱及模式耦合分量
光子晶体板里的连续域束缚态(BIC)最近被我折腾了几天,特别是如何用它搞出手性效应。COMSOL
里实现这个需要同时处理模式耦合、动量空间偏振映射,还得在不同入射角度下算琼斯矩阵。直接上干货,
记录几个关键步骤。
先看几何建模——二维光子晶体板,六角晶格排列的圆柱孔。COMSOL的几何模块里用参数化阵列生成
比较方便。比如用下面这段代码快速生成周期性结构:
```matlab
a = 300e-9; % 晶格常数
r = 0.3*a; % 圆柱半径
for i = -2:2
for j = -2:2
pos_x = a*(i + 0.5*mod(j,2));
pos_y = a*j*sqrt(3)/2;
model.geom('geom1').feature().create('cyl'+num2str(i)+num2str(j), 'Cylinder'
);
model.geom('geom1').feature('cyl'+num2str(i)+num2str(j)).set('r', r);
model.geom('geom1').feature('cyl'+num2str(i)+num2str(j)).set('pos', [pos_x,
pos_y]);
end
end
```
这里注意六角晶格的位置偏移要用mod函数处理奇偶行,否则排列会乱。网格划分建议用自由四面
体+边界层,特别是孔边缘的场梯度大,需要加密。
接着是边界条件设置。上下表面用散射边界条件,左右用Floquet周期条件。斜入射时Floquet波的k
x设置是个坑——比如入射角θ对应kx = (ω/c)*sinθ,但需要换算到COMSOL的归一化波矢表达式。实测发现
用下面这个公式换算能避免相位错位:
```matlab
kx_norm = (sin(theta)*n_air)/lambda0; % n_air为环境折射率
model.physics('emw').feature('floquet1').set('k0', [kx_norm, 0]);
```