使用lumerical脚本语言创建定向耦合器并进行数据分析(纯代码实现)
本文使用lumerical脚本语言创建定向耦合器波导、计算定向耦合器的偶数和奇数模式、分析定向耦合器的波长依赖性、分析定向耦合器的间隙依赖性(代码均有注释详解)。
一、绘制定向耦合器波导
1.1 代码实现
# 这段代码主要实现了绘制定向耦合器波导几何结构的功能。通过定义各种参数,如结构尺寸、
#材料属性等,然后利用一系列绘图命令来构建出定向耦合器波导及其相关组成部分的图形模型。
#“DC” 是 “Directional Coupler(定向耦合器)” 的缩写
switchtolayout;
selectall;
delete;
thick_Clad = 2.0e-6;
thick_Si = 0.22e-6;
thick_BOX = 2.0e-6;
#thick_Slab = 0; # for strip waveguides
thick_Slab = 0.09e-6; # for strip-loaded ridge waveguides
width_ridge = 0.5e-6;
# 定义了定向耦合器间隙的大小为 100 纳米,这个间隙在定向
#耦合器的工作原理中起到关键作用,影响着光在两个波导之间的耦合效果
gap = 100e-9;
# 定义材料
material_Clad = "SiO2 (Glass) - Palik";
# material_Clad = "H2O (Water) - Palik"; material_Clad ="Air (1)";
material_BOX = "SiO2 (Glass) - Palik";
# 表示该硅层材料具有色散特性但无损耗
material_Si = "Si (Silicon) - Dispersive & Lossless";
materials; # 运行脚本add materials
# 模拟区域定义
width_margin = 2.5e-6;
height_margin = 0.5e-6;
# 模拟区域边界计算
Xmin = -2e-6; Xmax = 2e-6;
Zmin = -height_margin; Zmax = thick_Si + height_margin;
Y_span = 2*width_margin + width_ridge; Ymin = -Y_span/2;
Ymax = -Ymin;
# draw cladding
addrect; set("name","Clad"); set("material", material_Clad);
set("y", 0); set("y span", Y_span+1e-6);
set("z min", 0); set("z max", thick_Clad);
set("x min", Xmin); set("x max", Xmax);
#设置是否覆盖材料数据库中的网格顺序,这里设置为 1,表示要覆盖
set("override mesh order from material database",1);
#明确了网格顺序为 3,类似于将包层对象在图形层次结构中 “置于背景” 的效果
set("mesh order",3);
set("alpha", 0.05);
# draw buried oxide
addrect; set("name", "BOX"); set("material", material_BOX);
set("x min", Xmin); set("x max", Xmax);
set("z min", -thick_BOX); set("z max", 0);
set("y", 0); set("y span", Y_span+1e-6);
set("alpha", 0.05);
# draw silicon wafer 绘制硅片
addrect; set("name", "Wafer"); set("material", material_Si);
set("x min", Xmin); set("x max", Xmax);
set("z max", -thick_BOX); set("z min", -thick_BOX-2e-6);
set("y", 0); set("y span", Y_span+1e-6);
set("alpha", 0.1);
# draw waveguide 1
addrect; set("name", "waveguide1");
set("material",material_Si);
set("y", -width_ridge/2-gap/2); set("y span", width_ridge);
set("z min", 0); set("z max", thick_Si);
set("x min", Xmin); set("x max", Xmax);
# draw waveguide 2
addrect; set("name", "waveguide2");
set("material",material_Si);
set("y", width_ridge/