FDTD创建仿真基本脚本
FDTD创建仿真基本思路:
1.创建结构
2.添加光源
3.添加FDTD仿真区
4.添加所需的监视器
创建基本结构
1.调用add语句 2.命名 3.设置材料 4.确定xyz三个维度的尺寸
创建长方体
addrect;
set("name","rectangle);
set("material","SiO2 (Glass) - Palik");
set("x",0);
set("x span",25e-6);
set("y",0);
set("y span",25e-6);
set("z max",0);
set("z min",-2e-6);
创建圆柱体
addcircle;
set("name","circle");
set("material","SiO2 (Glass) - Palik");
set("x",1e-6);
set("y",2e-6);
set("radius",5e-6);
set("z",0);
set("z span",10e-6);
创建任意结构poly
poly_parameter=[0,0;2,1;5,1;7,0];
addpoly;
set('name','poly');
set('material',"SiO2 (Glass) - Palik");
set("x",0);
set("y",0);
set('z',0);
set('z span',20e-6);
set("vertices",poly_parameter);
创建波导(可用于微环创建)
addwaveguide;
set("base width",600e-9);
set("base height",220e-9);
set("base angle",70);
pole = [0,0; 1,9; 6,9.8; 10,10]*1e-6;
set("poles",pole);
set("material","Si (Silicon) - Palik");
创建Pyramid(适用于梯形结构)
addpyramid;
set("name","Pyramid");
set("material","Si (Silicon) - Palik");
set("x",40e-6);
set("y",0e-6);
set("x span bottom",120e-6);
set("x span top",120e-6);
set("y span bottom",2e-6);
set("y span top",1e-6);
set('Z max',0.5e-6);
set('Z min',0);
修改结构优先级
set("override mesh order from material database",true);
set("mesh order",3);
添加光源
1.调用add语句 2.命名 3.设置入射方向 4.设置几何参数 5.设置波长
添加平面波光源
addplane;
set("injection axis","z");
set("direction","Forward");
set("x",0);
set("x span",25e-6);
set("y",0);
set("y span",25e-6);
set("z",-0.15e-6);
set("wavelength start",0.66e-6);
set("wavelength stop",0.66e-6);
添加高斯光源
addgaussian;
set("injection axis","z");
set("direction","backward");
set("x",0);
set("x span",2e-6);
set("y",0);
set("y span",5e-6);
set("z",10e-6);
set("use scalar approximation",1);
set("waist radius w0",0.5e-6);
set("distance from waist",-5e-6);
添加模式光源
addmode; # 模式光源
set("injection axis","x");
set("x",-1e-6);
set("y",thick_Si/2);
set("y span",1e-6);
set("z",0);
set("z span",3e-6);
set("wavelength start",1.26e-6);
set("wavelength stop",1.36e-6);
添加port光源
addport;
set("name","port_in"); # port_in
set("x",-radius-3e-6); # 设置Geometry属性
set("y",radius+gap+base_width);
set("y span",3e-6);
set("z",0);
set("z span",1e-6);
set("injection axis","x-axis"); # 设置Modal Properties属性
set("direction","Forward" );
set("mode selection","fundamental mode");
addport;
set("name","port_through"); # port_through
set("x",radius+3e-6);
set("y",radius+gap+base_width);
set("y span",3e-6);
set("z",0);
set("z span",1e-6);
set("injection axis","x-axis");
set("direction","Backward" );
set("mode selection","fundamental mode");
addport;
set("name","port_drop_left"); # port_drop_left
set("x",-radius-3e-6);
set("y",-(radius+gap+base_width));
set("y span",3e-6);
set("z",0);
set("z span",1e-6);
set("injection axis","x-axis");
set("direction","Forward" );
set("mode selection","fundamental mode");
addport; # add port
set("name","port_drop_right"); # port_drop_right
set("x",radius+3e-6);
set("y",-(radius+gap+base_width));
set("y span",3e-6);
set("z",0);
set("z span",1e-6);
set("injection axis","x-axis");
set("direction","Backward" );
set("mode selection","fundamental mode");
select("FDTD::ports"); # 选择一个port作为光源
set("source port","port_in");
set("source mode","mode 1");
setglobalmonitor("frequency points",500); # 设置频率监测点数量
setglobalsource("wavelength start",1.53e-6);
setglobalsource("wavelength stop",1.57e-6);
添加FDTD
1.调用add语句 2.确定仿真维度 3.确定xyz维度空间大小 4.设置mesh精度和仿真时间
5.设置边界条件 6.设置PML模式(选用,一般默认)
创建仿真区FDTD
addfdtd;
set("dimension","3D"); # 3D仿真
set("x",0);
set("x span",25e-6);
set("y",0);
set("y span",25e-6);
set("z min",-0.3e-6);
set("z max",1.6e-6);
set('mesh accuracy',2);
set('simulation time',1000e-15); # 1000飞秒
set("allow symmetry on all boundaries",true); # 允许所有边界对称
set("x min bc","Anti-Symmetric"); # 设置边界条件
set("x max bc","PML");
set("y min bc","Symmetric");
set("y max bc","PML");
set("z min bc","PML");
set("z max bc","PML");
#set("pml profile", 1); # 设置PML的模式,比如standard
mesh根据个人需要设置,一般步骤:1.调用add语句并命名
2.确定xyz维度空间大小 3.设置mesh精度(需要override设为1)
添加mesh
addmesh;
set("name","mesh_metaatom");
set("x",0);
set("x span",2e-6);
set("y",0);
set("y span",2e-6);
set("z min",2e-6);
set("z max",2e-6);
set("override x mesh",1);
set("override y mesh",1);
set("override z mesh",1);
set("dx",0.02e-6);
set("dy",0.02e-6);
set("dz",0.02e-6);
添加监视器
1.调用add语句并命名 2.确定监视器监视维度 3.设置xyz空间大小
添加频域场与功率监视器
addpower;
set('name','field');
set('monitor type','2D Z-normal');
set("x",0);
set("x span",30e-6);
set("y",0);
set("y span",30e-6);
set("z",1.365e-6);
添加功率监视器观察电场轮廓
addprofile;
set("name","field_profile");
set("monitor type",'2D Z-normal');
set("x",0);
set("x span",3e-6);
set("y max",6e-6);
set("y min",-5e-6);
set("z",200e-9);
添加modeexpansion监视器
addmodeexpansion;
set("name","neff_600nm");
set("monitor type",'2D X-normal');
set("x",0.3e-6);
set("y",0.3e-6);
set("y span",1.5e-6);
set("z",0);
set("z span",tooth_length);
set("use wavelength spacing",true); # 修改监视器General中的"use wavelength spacing"定义
set("use source limits",false); # 修改监视器General中的"use source limits"定义
set("wavelength center",1.55e-6);
set('enabled',true);
添加电影监视器
addmovie;
set("name","movie");
set("monitor type","2D y-normal");
set("x span",25e-6);
set("y",0);
set("z min",-0.3e-6);
set("z max",1.6e-6);
set("lock aspect ratio",1);
set("horizontal resolution",240);
添加可计算有效折射率的modeexpansion监视器
addmodeexpansion;
set("name","neff_600nm");
set("monitor type",'2D X-normal');
set("x",0.3e-6);
set("y",0.3e-6);
set("y span",1.5e-6);
set("z",0);
set("z span",tooth_length);
set("use wavelength spacing",true); # 修改监视器General中的"use wavelength spacing"定义
set("use source limits",false); # 修改监视器General中的"use source limits"定义
set("wavelength center",1.55e-6);
set('enabled',true);
修改监视器监测频率点数
set('override global monitor settings',true);
set("frequency points",101);