本系列主要讲解如何利用lumerical公司的FDTD软件仿真拓扑光子绝缘体的能带结构。主要包括以下几方面的内容:
1)前言
2)光子晶体结构分析
3)能带结构仿真与软件设置
4)边缘态仿真与软件设置
5)抗散射仿真与软件设置
6)单向仿真与软件设置
7)其它仿真
1、仿真目标
本系列的仿真工作是基于文献[1],其采用石墨烯型光子晶体,结构如下图所示,图中圆圈代表孔洞。文献中仿真了两种情况下的能带结构图,和边缘态的能带图。一种情况是A和B的直径相同(此时能带结构没有带隙),另一种情况是A和B的直径不同(此时能带结构有带隙)。
从文献中我们可以得到对应结构的能带图。能带图中包含TE模(酒红色)和TM模(浅蓝色),可以看出TM模没有带隙。
2、仿真整体流程
仿真采用FDTD版本,相应的程序已经上传到GitHub[2]。仿真过程中包含两个文件,三个部分。两个文件中,一个项目文件,一个是脚本文件(控制能带仿真过程)。三个部分中,一个是脚本程序(几乎所有能带结构仿真可以共用一个程序),一个是参数扫描部分(与晶体的布里渊区相关,需要仿真哪条边就设置对应的参数扫描),一个项目树部分(设置单次仿真参数)。
仿真流程如下图,脚本程序运行后,调用运行参数扫描,参数扫描控制项目树部分循环多次仿真,得到仿真数据,然后返回给脚本程序绘制能带图。
3仿真流程各部分解释
仿真过程中各部分之间涉及到很多比较隐蔽的数据传递,建议大家开始的时候,先试试能够正常仿真能带结构的仿真文件(lumerical官方提供,或者本文提供链接下载),然后修改成自己需要仿真的结构仿真。本文使用的仿真文件从lumerical官方提供的Planar 3D Hex例程中下载,然后修改得到。
1)脚本程序部分解释
图中①是调用运行参数扫描,②是得到仿真返回的数据,③是绘制能带结构图。
2)参数扫描部分解释
参数扫描部分和不可约布里渊区及高对称点紧密相关。参数扫描部分就是沿着不可约布里渊区的边界进行扫描,从Gamma-M,M-K,K-Gamma。不可约布里渊区有几条边就要设置几个参数扫描,比如一维的光子晶体设置一个就行,这里二维的光子晶体要设置三个,三维的光子晶体根据需要会设置更多个。
本系列第二部分已经得到高对称点的坐标如下,Gamma点(0,0),M点(0,1/(√3)),K点(1/3,1/(√3)),并且还要乘上2π/(√3*d)。右键打开其中一个参数扫描的编辑界面,比如Gamma-M,得到下图。图中①表示Gamma-M这条边上取10个点进行仿真,取的点越多仿真能带图更精细;②是Gamma-M这条边起点Gamma坐标,③是终点M的坐标,这里软件会根据起点和终点自动算出10个点各自的kx,ky,然后传递到项目树部分进行仿真;④是用于从项目树部分传递回单次仿真的结果。2π/(√3*d)这部分和晶体结构的周期有关,所以这里先不管它,在项目树部分会管。
3)项目树部分解释
项目树部分受参数扫描部分控制,它从参数扫描部分处得到kx,ky的值,然后自动执行单次仿真,仿真完成后通过spectrum向参数扫描部分返回仿真结果。
a.右键编辑model,会得到如下的两个图。
下图中①是仿真开始截止频率,根据仿真需要设置;②是和仿真数据处理相关,先不管保持不变;③是光子晶体周期,根据仿真需要设置,石墨烯结构只需要一个周期参数,其它结构根据需要可能会设置多个方向的周期;④是由参数扫描部分控制(仿真开始前会自动设置),初始值不重要,可以随便设置。这些参数都是全局变量,更改这些参数,项目树下的子部分会自动更改参数。
下图是model通过脚本设置项目树下的子部分的参数。其中①是设置hex_pc光子晶体结构的周期。②是设置仿真区域FDTD的长度和宽度(长度和宽度不能小于一个原胞,一个原胞最佳),③是设置FDTD中kx和ky的值,它等于参数扫描部分传递过来的kx,ky值乘上2π/(√3*d)(前文提到过这个值,不同的晶体结构这个值会有区别)。④-⑧设置对应参数。
b.下图是利用参数和脚本设置光子晶体仿真结构,不怕麻烦的话也可以不用脚本。建议大家学习下脚本,Lumerical 官方脚本学习网址,(/ref_scripts_lumapi_open.html)
设置好后的结构图展示,
c.下图是设置仿真区域FDTD。
图中圈住部分是仿真时间。仿真时间长,则仿真结果精细。初次仿真可以设置短时间看趋势,趋势对了再设置长时间,得到精细的结果。
仿真区域的几何设置,可以由model里面的脚本设置,也可以自己手动设置。某些方向和原胞的周期紧密相关,和周期紧密相关的方向建议使用model脚本设置,这样周期改变后,参数也随之改变,在多次仿真过程中很方便。
设置网格划分尺寸,这个比较重要。如果仿真区域就是一个原胞的大小,那么这个设置就随意一些。但是实际仿真区域大于一个原胞,即仿真区域包含二个或多个原胞,所以划分网格是时候要保证等效位置的结构与网格相对位置是一样的。比如本文中的仿真区域包含二个原胞的结构,图中仿真区域中的两个大圆是等效的,划分网格的时候可以先除以2,dx = x_length/2/x_num= 0.01925,x_length = a = 0.385为x方向的长度,x_num=10为划分网格的个数,dy = y_length/2/y_num= 0.01925,y_length=a*√3为y方向的长度,y_num=20为划分网格的个数。
设置边界。④中设置边界,x,y方向为周期方向,所以设置为Bloch,z方向为对称的可以设置为Symmetric。⑤中选择SI,kx,ky的值由model中脚本设置。
d.下面是设置激励源dipole_cloud
图中其他参数设置比较固定和容易理解。⑥中的lattice type比较难理解,它和仿真区域内包含几个原胞紧密相关,一般不同的光子晶体结构,设置不一样,需要自己理解含义后编写适合自己晶体结构的脚本。Lumerical官方提供多种晶格结构的设置脚本,可以下载下来看看符不符合自己的晶体结构,符合的话可以直接使用。
/diffractive_optics_pc_bandstructure.html
仿真区域内包含两个原胞的结构,要保证等效结构的位置有相同的激励源(相位有偏差)。⑦是仿真区域的边界,⑧是仿真区域等效结构(比如两个大圆)的相对位置,⑨10是设置两组激励源。两组激励源的相位有固定的偏差。建立仔细阅读和理解脚本的含义。
e.设置数据收集点bandstructure
设置比较随意,保证在仿真区域内就行。
4、仿真结果
下图中,红圈中设置TE模仿真或者TM模仿真
4.1、d1=d2的仿真
在hex_pc里面设置两个圆的半径一致,然后点击脚本的运行。
TE模的仿真。最后的仿真结果如图,可以增加仿真的时间和仿真点数,使能带更加精细。
4.2、d1 != d2的仿真
在hex_pc里面设置两个圆的半径不相等,然后在点击脚本的运行。
最后的仿真结果如图,可以增加仿真的时间和仿真点数,使能带更加精细。
参考文献
[1]HE, Xin-Tao, et al. A silicon-on-insulator slab fortopological valley transport.Nature communications, , 10.1:872.
[2] /AAAAA521/Topological-photon-simulation
如果觉得《利用FDTD软件仿真拓扑光子(三)-能带结构仿真与软件设置》对你有帮助,请点赞、收藏,并留下你的观点哦!