COMSOL 6.1光镊捕获小球与光力求解
comsol6.1光镊捕获小球,光力求解
打开COMSOL 6.1新建模型,在模型向导选择"波动光学->电磁波,频域"。这年头用频域研究光镊已经是标准操作了,毕竟咱们要抓的是稳定状态下的光学力。模型维度选三维是必须的——光镊的梯度力分布可不是二维平面能模拟明白的。
在几何部分画个直径1微米的二氧化硅小球,悬浮在水环境中。这里有个坑要注意:边界框至少要留出三倍粒径的空间,否则边界反射会严重干扰计算结果。材料库直接调用内置的SiO2和水介质,偷懒的话用默认折射率参数就行。
物理场设置里打开"电磁波,频域"接口,重点配置入射高斯光束。在"场"设置里手动输入这个表达式:
E0 * exp(-(x^2+y^2)/w0^2) * exp(-i*k*z)这里的w0是束腰半径,建议设为2λ左右。边界条件要设置完美匹配层(PML),别手贱选成散射边界——PML才能正确吸收杂散波。
网格划分是重头戏。在小球表面用"边界层网格",设置3层边界层,厚度控制在λ/10。全局用自由四面体网格,最大单元尺寸压到λ/4。记得在电场强度变化剧烈的区域(比如焦点附近)手动加密网格,代码里可以这么操作:
model.mesh("mesh1").autoMeshSize(4); model.mesh("mesh1").feature("size").setCustom(true); model.mesh("mesh1").feature("size").set("hmax", "lambda0/4");求解器配置要开频域稳态求解,频点设置对应激光波长。建议勾选"生成默认研究"让软件自动配置求解步骤。计算完别急着看电场分布,先检查下S参数——如果反射系数超过5%,八成是边界条件没设对。
真正的重头戏在光学力计算。后处理里添加"麦克斯韦应力张量积分",公式长这样:
comsol6.1光镊捕获小球,光力求解
$$
\mathbf{F} = \oint \left[ \varepsilon \mathbf{E}(\mathbf{E} \cdot \mathbf{n}) + \mu \mathbf{H}(\mathbf{H} \cdot \mathbf{n}) - \frac{1}{2}(\varepsilon E^2 + \mu H^2)\mathbf{n} \right] dS
$$
COMSOL已经内置了这个计算模块,直接在派生值里选"表面积分",对象选小球表面。想看轴向梯度力就取z方向分量,想看横向约束力就取xy分量。
常见翻车现场:算出来的力忽大忽小?检查下是不是没开"移动网格"。光镊仿真必须开启几何非线性,因为粒子位移会改变场分布。在"研究->求解器配置"里把几何非线性开关打开,别等算完了才发现力场和位移没耦合。
最后分享个骚操作:在参数扫描里设置粒子位置变量,批量计算不同位置的光学力,直接画出光阱的势能曲线。代码模板大概长这样:
for (pos = -500e-9; pos <= 500e-9; pos += 100e-9){ model.param.set("z_offset", pos+"[m]"); model.study("std1").run(); ftz = model.result().numerical().getRealResult(); }这么搞能直观看到捕获稳定性——要是某个方向的恢复力不呈线性,那这个位置肯定关不住粒子。算完记得喝杯咖啡,这破仿真没个十几核服务器得跑一宿。
