核心内容摘要
范冰大战黑金刚2023
COMSOL光学模型:双芯光纤/SPR折射率传感实验仿真模拟深夜两点半的实验室键盘声突然停了。
我盯着屏幕上跳动的电场分布图突然意识到这个双芯光纤SPR模型的玄机藏在几何参数里——两个纤芯的间距只要差
1微米传感灵敏度就能差出个数量级。
这玩意儿可比单芯光纤刺激多了简直就是光学版的量子纠缠。
先说说模型搭建的邪门技巧。
在COMSOL里画双芯光纤千万别傻乎乎地用两个圆柱体拼在一起。
记得在几何节点里加个布尔操作把两个纤芯包层合并成联合体不然边界条件能把你逼疯。
这是去年在德国访学时实验室的咖啡机维修工教我的冷知识——有时候高手真的藏在奇怪的地方。
model.component(comp
.geom(geom
.feature().create(union1, Union); model.component(comp
.geom(geom
.feature(union
.selection(input).set({cyl1, cyl2}); model.component(comp
.geom(geom
.feature(union
.set(intbnd, off);这段代码看着简单但那个intbnd参数要是设成on计算域边界能多出十几个莫名其妙的奇异点。
我吃过这亏算到第18个小时网格剖分直接崩了白瞎了三天电费。
COMSOL光学模型:双芯光纤/SPR折射率传感实验仿真模拟SPR层的设置更有意思。
金膜厚度控制在50nm时TM波的倏逝波刚好能穿透到被测液体层。
但注意别直接在材料库选Au得手动改复折射率material model.material().create(mat
; material.propertyGroup(def).set(relpermeability, [1,0,0,0,1,0,0,0,1]); material.propertyGroup(def).set(relpermittivity, [-
12.
5
2i,0,0,0,-
12.
5
2i,0,0,0,-
12.
5
2i]);看到那个虚数项没那
2i就是金膜的损耗项。
上次有个师弟把这值设成纯实数仿真结果美如画实际做出来屁都没有被老板在组会上怼了半小时。
重点来了——参数化扫描。
要捕捉SPR共振点折射率变化步长得设成
0001RIU。
别嫌麻烦直接上批处理模式for n1:10 model.param.set(n_analyte,
1.
3
001*n); model.material(mat
.propertyGroup(def).set(relpermittivity, [(n_analyte)^2,0,0,0,(n_analyte)^2,0,0,0,(n_analyte)^2]); model.study(std
.run; export_data(n) abs(log10(model.result().numerical(gev
.getReal())); end这个循环里的玄机是动态修改被测液体折射率每次迭代自动导出传输损耗。
注意那个对数运算能把微弱的共振峰放大成明显脉冲——跟PS修图一个道理。
最后说个血泪教训网格划分必须用边界层网格包裹SPR区域不然电场梯度根本捕捉不到。
有次偷懒用了自由四面体网格结果共振波长偏移了15nm差点毕不了业。
记住这个参数model.component(comp
.mesh(mesh
.feature().create(boundLay1, BoundaryLayer); model.component(comp
.mesh(mesh
.feature(boundLay
.set(thickness,
1um);凌晨四点的咖啡凉了但屏幕上的灵敏度曲线开始呈现完美的线性。
当最后一个数据点跳出时突然明白双芯结构就像两把互相校准的游标卡尺——纤芯间距的微小变化反而让整个系统对折射率异常敏感。
这大概就是光学的魅力总在意想不到处藏着惊喜。