comsol三次谐波,本征手性BIC,远场偏振图,手性透射曲线,二维能带图,Q因子图,电场图,所见即所得。 大子刊nc复现,在连续介质中束缚态驱动下具有最大和可调谐手征光学响应的平面手征超表面。
平面手征超表面设计里藏着个有意思的悖论------既要实现强手性响应,又得保证高Q值。最近复现Nature Communications那篇关于本征手性BIC的工作时,发现他们用了个骚操作:把结构对称性破坏到刚刚好的程度,让远场辐射泄漏和手性耦合达到微妙的平衡。
先看能带设计。COMSOL里建个周期性超表面单元,用频域求解器扫频率,导出的数据扔进Python里画二维能带图。注意Gamma点附近的模式交叉,这里藏着BIC的踪迹。关键代码其实就三行:
python
plt.contourf(kx, ky, frequency_map, levels=50)
plt.plot(symmetry_points[:,0], symmetry_points[:,1], 'r--') # 高对称点连线
plt.scatter(bic_position[0], bic_position[1], c='red') # 标记BIC位置
但实际操作时会发现,网格密度不够的话,BIC特征点就跟玩捉迷藏似的。有次偷懒用默认网格,结果在能带图上死活找不到那个凹陷点,后来把最大网格尺寸调到λ/20才逮住它。

Q因子图更是个细节杀手。COMSOL计算损耗时容易漏掉材料色散,得手动在材料设置里勾选"包括电极化损耗"。有个取巧的方法------直接导出电磁场能量和损耗功率,用这个公式算Q值:
matlab
Q = 2*pi* (time_averaged_energy) ./ (time_averaged_power_loss);
注意这里的分母必须用周期边界条件下的总损耗,有一次只算了个单元内部的损耗,结果Q值飙到10^8,明显假得离谱。
电场分布图最能暴露问题。当结构参数偏离最优值时,电场会从结构边缘往中心跑。有次把硅柱直径从180nm调到185nm,原本集中在边缘的hotspot直接消失,这时候手性透射曲线的差值立马从0.9跌到0.3。用COMSOL的后处理脚本导出电场时,记得选"表面切向场分量"------这关系到手性响应的计算准确性。
说到手性透射曲线,数据处理要注意基线校准。原始数据里经常混入背景噪声,得用移动平均滤波预处理:
python
from scipy.signal import savgol_filter
transmission_L = savgol_filter(raw_data_L, window_length=11, polyorder=3)
transmission_R = savgol_filter(raw_data_R, window_length=11, polyorder=3)
chiral_diff = np.abs(transmission_L - transmission_R)
滤波窗口选太大容易把特征峰抹平,有次用window_length=21直接把1nm的共振峰干没了。

远场偏振图最考验仿真设置。COMSOL里得用端口边界条件配合远场计算,导出斯托克斯参数后用python画极坐标图:
python
ax = plt.subplot(111, projection='polar')
ax.contourf(theta, phi, stokes_parameters[...,0], cmap='jet')
但要注意角度坐标系转换,有次把theta和phi搞反了,出来的偏振图案跟风车似的转了个方向。
三次谐波部分有个坑------非线性系数设置必须和基频场强关联。COMSOL里需要用变量耦合把基频场的E分量带入三阶极化项:
matlab
Py_3rd = epsilon0 * chi3 * (ewfd.Ey^3 + 3*ewfd.Ey*ewfd.Ex^2); // 交叉项不能漏
有次忘了加交叉项,三次谐波效率比文献值低了两个数量级,排查了三小时才发现是公式漏项。
这套流程跑下来最大的体会是:参数敏感性比想象中高得多,某个尺寸偏差5nm就能让手性响应从max掉到min。但一旦调通,看着远场偏振图里那个完美的8字形图案,还有透射曲线里0.9的手性对比度------值了。
