光子仿真|基于Lumerical的GDSII导入导出自动化及脚本学习

文摘   2024-10-16 19:33   湖北  
直接导入:GDSII 导入仿真对象  允许将结构从 GDSII 文件导入到布局编辑器中。GDSII 文件格式通常用于存储二维几何数据。此数据可以直接导入到 2D 布局环境中,也可以通过在 Z 维度中拉伸 2D 数据来用于将 3D 对象导入到 3D 布局环境中。
GDSII 导入

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)
GDSII 导出


GDS导出的脚本命令主要包含gdsopen, gdsclose, gdsbegincell, gdsendcell, gdsaddcircle, gdsaddpoly, gdsaddrect, gdsaddref,语法:
#在当前目录中打开 .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 导出自动化

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



[1]GDSII 导出自动化 – Ansys Optics --- GDSII Export Automation – Ansys Optics
[2]脚本语言 – Ansys Optics --- Scripting Language – Ansys Optics

免责声明

本公众号旨在传递与分享光学知识、科研资讯,所有内容、图片均已注明出处,且仅供个人学习、知识记录,不作为商业用途。如涉及版权或其他问题,请及时联系邮箱opto1thz8nm@163.com,我将尽快进行协调处理。欢迎需要宣传工作的同行私信投稿!

👇 关注我,更新不错过👇 
您的“
”和“在看”,是我不竭的动力

1thz8nm
光电子器件与集成,23级直博生,做纯粹的学术分享和学习记录
 最新文章