COMSOL二维六边形光子晶体能带分析:三角晶格TE与TM模式的区分与结果,以及Y轴晶格周期a...
comsol二维六边形光子晶体能带-三角晶格 区分TE和TM模 y轴数据差异来源于晶格周期a的选择不同,不影响结果 comsol等离子体,热流耦合
玩过光子晶体的朋友应该都遇到过TE和TM模式区分的问题。最近在COMSOL里折腾二维六边形光子晶体能带计算时,发现三角晶格的设置里藏着几个有意思的细节。今天就结合代码实操,聊聊那些容易踩的坑。
先来看六边形晶格的几何构建。用COMSOL的几何脚本功能创建正六边形阵列,核心是掌握坐标变换规律。比如下面这段生成蜂窝状空气孔的代码:
a = 1e-6; % 晶格常数 r = 0.4*a; % 孔半径 for n = -2:2 for m = -2:2 x = a*(n + 0.5*mod(m,2)); y = a*m*sqrt(3)/2; geom.create('circ', 'Circle', {'x', x, 'y', y, 'r', r}); end end这里mod(m,2)的妙用实现了三角晶格的错位排列。注意晶格常数a的单位换算——当处理微米级结构时,电磁波的频率响应会呈现出明显的带隙特征。
comsol二维六边形光子晶体能带-三角晶格 区分TE和TM模 y轴数据差异来源于晶格周期a的选择不同,不影响结果 comsol等离子体,热流耦合
在模式分析时,TE和TM的边界条件设置是个分水岭。对于TM模(磁场在面外),需要在周期性条件中锁定Ez分量;而TE模(电场在面外)则要固定Hz分量。实际操作时容易混淆的是端口激励方向:
// TM模式端口设置示例 emw.port1.set('Direction', 'Down'); emw.port1.set('Ex', '0'); emw.port1.set('Ey', '0'); emw.port1.set('Ez', '1'); // 激励面外电场有个有趣的现象:当不同文献的能带图y轴数值相差2倍时,别急着怀疑自己。这通常源于晶格常数a的定义差异——有的用最近邻间距,有的用晶胞边长。只要归一化频率ωa/2πc一致,物理本质是相同的。可以做个参数扫描验证:
a_values = linspace(0.8e-6,1.2e-6,5); for a = a_values model.param.set('a', a); model.study('std1').run; norm_freq = results/(c0/a); % 频率归一化 % 绘图数据应重合 end当涉及等离子体与热流耦合时,重点在于多物理场联姻。比如用Drude模型描述金属纳米颗粒:
material1.def.ns.setIndex('epsilon_r','1 - wp^2/(w*(w+i*gamma))',... {'wp','3e15','gamma','1e13'});这时候热源项需要从电磁损耗导出:
heat.Q = emw.Qh; % 电磁损耗转为热源 heat.F = -k*T^3*ux; % 非线性热流项有个实战经验:当计算发散时,试试把电磁和热的时间尺度分离,用分步耦合代替全耦合。毕竟等离子体振荡(~fs级)和热扩散(~ns级)根本不在一个时间维度上。
最后给个忠告:处理周期性结构时,别忘了检查布里渊区路径设置是否正确。三角晶格对应的倒格子也是六边形,kx从Γ到M再到K点的路径设置错误的话,整个能带图会面目全非。这可比调参数重要多了——方向错了,再努力也是白搭。
