1.单元格名称:选择菜单包含 GDSII 库中可用的有效单元格。选择要导入的单元格。2.图层编号:选择菜单包含 GDSII 文件中存在的所有图层编号。此操作将仅导入具有所选层号的结构。3.材料:此选择菜单包含当前仿真环境中的有效材质列表。此材料将分配给导入的结构。
脚本语言:gdsimport将单元格从 .gds 文件导入到布局环境中。这相当于通过 FILE->IMPORT 菜单执行 GDSII 导入。
语法:
#将指定图层从指定文件中的指定单元导入到当前仿真环境中
n = gdsimport("filename", "cellname", layer);
#创建的对象会将其材质设置为对象定义的电介质。
#在 3D 中,2D 几何数据将被拉伸为 Z 维度中的默认值。
#可选的返回值 n 是从 gds 文件导入的对象数。
示例:
gdsimport('GDS_export.gds','Substrate', 1);
set("material","SiO2 (Glass) - Palik");
set("z",0);
set("z span", 1e-6);
gdsimport('GDS_export.gds','Si_polygon', 2);
set("material","Si (Silicon) - Palik");
set("z",1e-6);
set("z span", 1e-6);
gdsimport('GDS_export.gds','Au_particle_array', 3);
set("material","Au (Gold) - CRC");
set("z",1e-6);
set("z span", 1e-6)
#在当前目录中打开 .gds 文件,指定用户单位的大小和 GDSII 文件单位的大小。
f = gdsopen("filename", "userUnit", "dataBaseUnit");
#f 是用于打开 GDSII 文件的文件句柄。
#在具有顶点的图层上添加多边形元素。#vertices的值索引多边形的顶点,在 Nx2 矩阵中,其中第一列表示 x,第二列表示 y,例如 [x1,y1; x2,y2;...xn,yn]。
#第一个值和最后一个值不应相同,多边形将自动闭合。这些值以米为单位。
gdsaddpoly(f, layer, [vertices])
#在图层上添加具有 x、y 坐标、宽度和高度的 rectangle 元素
gdsaddrect(f, layer, x, y, width, height)
#将对另一个单元格“cellname”的引用添加到当前单元格,并指定 dx 和 dy 的移动。
gdsaddref(f, "cellname", dx, dy)
#在图层上添加具有 x 坐标、y 坐标、半径和多边形边数的近似圆。
gdsaddcircle(f, layer, x, y, r, n)
#在 GDSII 文件中创建新单元格
gdsbegincell(f, "cellname")
#所有 GDS 元素(多边形、框、引用、数组引用等)都必须放置在单元格内
#单元格不能嵌套,在第一个被调用的单元格关闭之前,无法再次调用新单元格。
f=gdsopen('GDS_export.gds');
gdsbegincell(f,'Substrate');
gdsaddrect(f,1,getnamed ("substrate","x"),
getnamed ("substrate","y"),
getnamed ("substrate","x span"),
getnamed ("substrate","y span"));
gdsendcell(f);
# export polygon to cell named 'Si_polygon', in layer 2.
x = getnamed("Silicon_polygon","x");
y = getnamed("Silicon_polygon","y");
V = getnamed ("Silicon_polygon", "vertices");
num_vertices = size(V);
V = V + [linspace(x,x,num_vertices(1)), linspace(y,y,num_vertices(1))];
gdsbegincell(f,'Si_polygon');
gdsaddpoly(f,2,V);
gdsendcell(f);
gdsbegincell(f,'Au_particle');
gdsaddcircle(f, 3, 0, 0, getnamed("Gold_PC_array::circle_1", "radius"));
gdsendcell(f);
gdsbegincell(f,'Au_particle_array');
gdsaddref(f,'Au_particle',
getnamed("Gold_PC_array::circle_1", "x")+getnamed("Gold_PC_array","x"),
getnamed("Gold_PC_array::circle_1", "y")+getnamed("Gold_PC_array","y"));
gdsaddref(f,'Au_particle',
getnamed("Gold_PC_array::circle_2", "x")+getnamed("Gold_PC_array","x"),
getnamed("Gold_PC_array::circle_2", "y")+getnamed("Gold_PC_array","y"));
gdsaddref(f,'Au_particle',
getnamed("Gold_PC_array::circle_3", "x")+getnamed("Gold_PC_array","x"),
getnamed("Gold_PC_array::circle_3", "y")+getnamed("Gold_PC_array","y"));
gdsaddref(f,'Au_particle',
getnamed("Gold_PC_array::circle_4", "x")+getnamed("Gold_PC_array","x"),
getnamed("Gold_PC_array::circle_4", "y")+getnamed("Gold_PC_array","y"));
gdsendcell(f);
gdsclose(f);
补充:getnamed即获取指定对象值,setnamed即“named”指定对象值
GDSII自动化导出的脚本程序由lumerical官方示例给出,此程序是通过 GDSexport_core.lsfx 中定义的一组依赖递归函数和 GDS_auto_export.lsf 中定义的封装函数定义的。用户需要调用 GDS_AUTOEXPORT_MAIN 来提取几何图形。
在进行GDS版图导出之前,需要使用 feval 来运行这两个文件,可以显式指定路径也可以用../来指向父目录。如果这些脚本文件与 FSP 位于同一文件夹中则不需要../。
feval("C:\temp\example.lsf");
feval("../GDSexport_core.lsfx");
feval("../GDS_auto_export_functions.lsf");
在 Lumerical 中定义要提取的图层,并在 GDSII 中定义这些图层的标签。为此,将每个层定义为一个结构体。layer_1即为结构体变量,包含以下属性:
layer_1 = struct;
layer_1.z =0.0e-6;
layer_1.material = "Au (Gold) - CRC";
layer_1.layer = "1:0";
定义每个层后,可以将结果打包到所有层的单元中,该单元可以传递给GDS_AUTOEXPORT_MAIN函数。
示例:
load('grating_coupler_3D.fsp');
layer_def = cell(2);
layer_1 = struct;
layer_1.z =0.11e-6;
layer_1.material = "Si (Silicon) - Palik";
layer_1.layer = "1:0"; # optional? , "accept integer, or string"
layer_def{1} = layer_1;
layer_2 = struct;
layer_2.z = 0.2e-6;
layer_2.material = "Si (Silicon) - Palik";
layer_2.layer = "1:1"; # "accept integer, or string"
layer_def{2} = layer_2;
gds_filename = filebasename(currentfilename) + ".gds";
# MAIN FUNCTION CALL #
GDS_AUTOEXPORT_MAIN({"layer_def": layer_def, "gds_filename": gds_filename,"verbose": false});
Grating Coupler
免责声明
本公众号旨在传递与分享光学知识、科研资讯,所有内容、图片均已注明出处,且仅供个人学习、知识记录,不作为商业用途。如涉及版权或其他问题,请及时联系邮箱opto1thz8nm@163.com,我将尽快进行协调处理。欢迎需要宣传工作的同行私信投稿!