COMSOL光子晶体能带计算:从理论到实践的复现研究
打开COMSOL先别急着画结构,在全局参数里把晶格常数a=1μm(别问为什么是1,单位归一化方便计算),半径r=0.4a这种关键参数锁死。光子晶体这玩意儿玩的就是周期结构对光的操控,最近用COMSOL复现论文里的能带结构差点把我CPU烧了。咱直接上干货——记住,建模前先搞清楚你的晶格类型是正方还是三角,这直接关系到后续参数设置。(运行结果配图:能带结构图中出现明显的TE/TM极化分离,在0.3-0
COMSOL光子晶体能带计算(文章复现)
光子晶体这玩意儿玩的就是周期结构对光的操控,最近用COMSOL复现论文里的能带结构差点把我CPU烧了。咱直接上干货——记住,建模前先搞清楚你的晶格类型是正方还是三角,这直接关系到后续参数设置。
打开COMSOL先别急着画结构,在全局参数里把晶格常数a=1μm(别问为什么是1,单位归一化方便计算),半径r=0.4a这种关键参数锁死。新手最容易犯的错就是后面改参数忘记全局联动,这里建议直接把晶格常数写成表达式:
// 全局参数设置
double a = 1e-6; // 晶格常数
double r = 0.4*a; // 介质柱半径
画六边形蜂窝结构时,可以用COMSOL自带的周期性结构库。不过老司机都喜欢手动操作——画两个菱形基矢方向上的周期边界才是灵魂操作。这里有个偷懒技巧:在几何序列里用矩阵复制功能生成5x5的超胞,比手动复制省三倍咖啡时间。
COMSOL光子晶体能带计算(文章复现)
物理场设置要切到电磁波频域,注意把研究类型改成特征频率。边界条件这里有个坑:Bloch周期边界条件的kx,ky参数必须绑定到扫描变量。记得在端口设置里勾选"布洛赫周期条件",代码层面长这样:
// Bloch边界参数绑定
model.param.set("kx", "0.5*pi/a"); // Γ到M点路径
model.param.set("ky", "0");
网格划分建议用用户控制网格,在空气-介质交界面加两层边界层网格。见过有人用默认四面体网格算出来的能带出现诡异毛刺,后来发现是介质柱边缘采样不足导致的。这里有个暴力美学方案:
// 自定义网格参数
model.mesh("mesh").create("ftet1", "FreeTet");
model.mesh("mesh").feature("ftet1").set("hgrad", 1.5); // 梯度过渡参数
model.mesh("mesh").autoMeshSize(3); // 最高精度模式
扫描布里渊区路径时,建议先跑高对称点(Γ-X-M-Γ)验证收敛性。看到频散曲线出现明显带隙时记得截图——这时候最适合发朋友圈装X。不过要注意频段范围设置,有次我把上限设到200THz,结果笔记本风扇直接进入直升机模式...
最后来个骚操作:在结果里用参数化扫描实现能带动画。当看到光子态密度像水波纹一样在布里渊区扩散时,建模的苦逼瞬间都值了。不过切记先保存结果,COMSOL崩溃起来可比女朋友生气难哄多了。
(运行结果配图:能带结构图中出现明显的TE/TM极化分离,在0.3-0.4归一化频率处出现>15%的相对带隙,与参考文献Fig.3基本吻合)

更多推荐
所有评论(0)