
Comsol光学仿真模型:纳米球/柱Mie散射多级分解
在COMSOL里折腾纳米颗粒的光散射仿真时,总绕不开Mie理论的多级分解。最近帮师弟调试金纳米
柱模型时发现,很多人知道要开波动光学模块,但总在级数展开阶数上栽跟头——比如把银纳米球算出了彩
虹色散射谱,结果发现是展开项没吃够。
建立模型时先别急着画几何,把物理场配置明白了更重要。比如在电磁波频域接口下,材料属性得
用复数折射率才能准确描述金属的损耗特性。这里有个取巧的脚本可以直接调用材料库:
```matlab
material = mphgetmaterial(model, 'Ag (Silver)');
n_complex = material.n(500e-9); % 500nm波长下的复折射率
```
这段代码看起来简单,但有个坑要注意:材料库里的银参数在可见光波段可能需要手动修正,特别
是做表面等离激元仿真时,实测数据比内置参数更靠谱。
设置Mie散射分解的核心在端口边界条件。我习惯用圆柱坐标系展开模式,对于直径80nm的金纳米
柱,端口半径至少要设到120nm才能包住倏逝波。多级分解的阶数不是越大越好,有个经验公式:
```matlab
max_order = ceil(2*pi*radius/lambda0) + 2; % 波长取真空波长
```
但实际操作中发现,当颗粒形状偏离完美球体时(比如纳米柱),可能需要额外增加2-3个展开项。有
次仿真纳米三角柱散射,直到第8阶才收敛,当时还以为软件出bug了。
后处理阶段最容易暴露问题。看散射截面曲线时,如果发现周期性震荡,别急着调材料参数——先检
查网格是否在倏逝场区域足够细密。推荐用边界层网格包裹纳米结构,类似这样设置:
```matlab
mphmesh(model, 'geom1', 'boundary', [3,4], 'layers', 3, 'stretch', 1.2);
```
三层边界层配合1.2的拉伸因子,能在计算量和精度间取得平衡。有次偷懒用自由四面体网格,结果
Qsca值比实测高了40%,被导师逮着念叨了一礼拜。
最后说个实用技巧:在频域扫描时,把波长范围和步长设置成实验测量的参数,直接导出Stokes参
数矩阵。这样测得的散射光偏振特性可以直接和暗场显微镜观测结果对比,省去后期数据处理的大把时间
。
打开Comsol的瞬间鼠标已经不自觉点开了波动光学模块——这是病,得治。今天咱们折腾点有意思的
:把纳米小球和小棍子扔进电磁场里,看看它们怎么把光折腾出花来。Mie散射的多级分解这事儿,说白了
就是把光跟纳米颗粒的互动拆成不同"档次"的振动模式,就像把交响乐拆成不同乐器的声部。
先整点基本功:在模型树里右键新增电磁波,频域。这时候别急着画几何,按住Alt键双击物理场设
置,直接把背景场改成平面波。波长参数直接关联全局参数,后面改数值不用到处找。举个栗子,银纳米球
在可见光波段玩散射,材料库调出Ag的Drude-Lorentz模型,记得勾选"色散材料需要更多频点"选项,不然
拟合曲线能歪到姥姥家。